From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ivan Khoronzhuk Date: Thu, 29 May 2014 19:45:18 +0300 Subject: [U-Boot] [U-boot] [PATCH] ARM: keystone: aemif: move aemif driver to drivers/memory/ti-aemif.c In-Reply-To: <53875E24.8040409@ti.com> References: <1401379156-11524-1-git-send-email-ivan.khoronzhuk@ti.com> <53875E24.8040409@ti.com> Message-ID: <5387641E.2060609@ti.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 05/29/2014 07:19 PM, Murali Karicheri wrote: > On 5/29/2014 11:59 AM, Ivan Khoronzhuk wrote: >> Move AEMIF driver to drivers/memory/ti-aemif.c along with AEMIF >> definitions collected in drivers/memory/ti-aemif.h >> >> Acked-by: Vitaly Andrianov >> Signed-off-by: Ivan Khoronzhuk >> --- >> >> Based on [U-boot] [PATCH] mtd: nand: davinci: add header file for >> driver definitions >> >> arch/arm/cpu/armv7/keystone/Makefile | 1 - >> arch/arm/include/asm/arch-keystone/aemif.h | 16 --------- >> arch/arm/include/asm/arch-keystone/hardware-k2hk.h | 7 ---- >> arch/arm/include/asm/arch-keystone/hardware.h | 30 >> +++-------------- >> board/ti/k2hk_evm/board.c | 10 +++--- >> drivers/Makefile | 1 + >> drivers/memory/Makefile | 1 + >> .../keystone/aemif.c => drivers/memory/ti-aemif.c | 37 >> ++++++++++++-------- >> drivers/memory/ti-aemif.h | 39 >> ++++++++++++++++++++++ >> include/configs/k2hk_evm.h | 4 +++ >> 10 files changed, 77 insertions(+), 69 deletions(-) >> delete mode 100644 arch/arm/include/asm/arch-keystone/aemif.h >> create mode 100644 drivers/memory/Makefile >> rename arch/arm/cpu/armv7/keystone/aemif.c => >> drivers/memory/ti-aemif.c (63%) >> create mode 100644 drivers/memory/ti-aemif.h >> >> diff --git a/arch/arm/cpu/armv7/keystone/Makefile >> b/arch/arm/cpu/armv7/keystone/Makefile >> index b1bd022..c4af252 100644 >> --- a/arch/arm/cpu/armv7/keystone/Makefile >> +++ b/arch/arm/cpu/armv7/keystone/Makefile >> @@ -5,7 +5,6 @@ >> # SPDX-License-Identifier: GPL-2.0+ >> # >> -obj-y += aemif.o >> obj-y += init.o >> obj-y += psc.o >> obj-y += clock.o >> diff --git a/arch/arm/include/asm/arch-keystone/aemif.h >> b/arch/arm/include/asm/arch-keystone/aemif.h >> deleted file mode 100644 >> index 2dac747..0000000 >> --- a/arch/arm/include/asm/arch-keystone/aemif.h >> +++ /dev/null >> @@ -1,16 +0,0 @@ >> -/* >> - * emif definitions to re-use davinci emif driver on Keystone2 >> - * >> - * (C) Copyright 2012-2014 >> - * Texas Instruments Incorporated, >> - * (C) Copyright 2007 Sergey Kubushyn >> - * >> - * SPDX-License-Identifier: GPL-2.0+ >> - */ >> -#ifndef _AEMIF_H_ >> -#define _AEMIF_H_ >> - >> -#include >> - >> - >> -#endif >> diff --git a/arch/arm/include/asm/arch-keystone/hardware-k2hk.h >> b/arch/arm/include/asm/arch-keystone/hardware-k2hk.h >> index 7ac2662..50ce649 100644 >> --- a/arch/arm/include/asm/arch-keystone/hardware-k2hk.h >> +++ b/arch/arm/include/asm/arch-keystone/hardware-k2hk.h >> @@ -9,13 +9,6 @@ >> #ifndef __ASM_ARCH_HARDWARE_K2HK_H >> #define __ASM_ARCH_HARDWARE_K2HK_H >> -#define K2HK_ASYNC_EMIF_CNTRL_BASE 0x21000a00 >> -#define DAVINCI_ASYNC_EMIF_CNTRL_BASE K2HK_ASYNC_EMIF_CNTRL_BASE >> -#define K2HK_ASYNC_EMIF_DATA_CE0_BASE 0x30000000 >> -#define K2HK_ASYNC_EMIF_DATA_CE1_BASE 0x34000000 >> -#define K2HK_ASYNC_EMIF_DATA_CE2_BASE 0x38000000 >> -#define K2HK_ASYNC_EMIF_DATA_CE3_BASE 0x3c000000 >> - >> #define K2HK_PLL_CNTRL_BASE 0x02310000 >> #define CLOCK_BASE K2HK_PLL_CNTRL_BASE >> #define KS2_RSTCTRL (K2HK_PLL_CNTRL_BASE + 0xe8) >> diff --git a/arch/arm/include/asm/arch-keystone/hardware.h >> b/arch/arm/include/asm/arch-keystone/hardware.h >> index 6c532ca..ffdecbf 100644 >> --- a/arch/arm/include/asm/arch-keystone/hardware.h >> +++ b/arch/arm/include/asm/arch-keystone/hardware.h >> @@ -22,32 +22,6 @@ >> typedef volatile unsigned int dv_reg; >> typedef volatile unsigned int *dv_reg_p; >> -#define ASYNC_EMIF_NUM_CS 4 >> -#define ASYNC_EMIF_MODE_NOR 0 >> -#define ASYNC_EMIF_MODE_NAND 1 >> -#define ASYNC_EMIF_MODE_ONENAND 2 >> -#define ASYNC_EMIF_PRESERVE -1 >> - >> -struct async_emif_config { >> - unsigned mode; >> - unsigned select_strobe; >> - unsigned extend_wait; >> - unsigned wr_setup; >> - unsigned wr_strobe; >> - unsigned wr_hold; >> - unsigned rd_setup; >> - unsigned rd_strobe; >> - unsigned rd_hold; >> - unsigned turn_around; >> - enum { >> - ASYNC_EMIF_8 = 0, >> - ASYNC_EMIF_16 = 1, >> - ASYNC_EMIF_32 = 2, >> - } width; >> -}; >> - >> -void init_async_emif(int num_cs, struct async_emif_config *config); >> - >> struct ddr3_phy_config { >> unsigned int pllcr; >> unsigned int pgcr1_mask; >> @@ -145,6 +119,10 @@ struct ddr3_emif_config { >> #define KS2_UART0_BASE 0x02530c00 >> #define KS2_UART1_BASE 0x02531000 >> +/* AEMIF */ >> +#define KS2_AEMIF_CNTRL_BASE 0x21000a00 >> +#define DAVINCI_ASYNC_EMIF_CNTRL_BASE KS2_AEMIF_CNTRL_BASE >> + >> #ifdef CONFIG_SOC_K2HK >> #include >> #endif >> diff --git a/board/ti/k2hk_evm/board.c b/board/ti/k2hk_evm/board.c >> index dc39139..30a2cbb 100644 >> --- a/board/ti/k2hk_evm/board.c >> +++ b/board/ti/k2hk_evm/board.c >> @@ -16,9 +16,9 @@ >> #include >> #include >> #include >> -#include >> #include >> #include >> +#include <../drivers/memory/ti-aemif.h> >> DECLARE_GLOBAL_DATA_PTR; >> @@ -40,9 +40,9 @@ unsigned int external_clk[ext_clk_count] = { >> what is that */ >> }; >> -static struct async_emif_config >> async_emif_config[ASYNC_EMIF_NUM_CS] = { >> +static struct aemif_config aemif_configs[] = { >> { /* CS0 */ >> - .mode = ASYNC_EMIF_MODE_NAND, >> + .mode = AEMIF_MODE_NAND, >> .wr_setup = 0xf, >> .wr_strobe = 0x3f, >> .wr_hold = 7, >> @@ -50,7 +50,7 @@ static struct async_emif_config >> async_emif_config[ASYNC_EMIF_NUM_CS] = { >> .rd_strobe = 0x3f, >> .rd_hold = 7, >> .turn_around = 3, >> - .width = ASYNC_EMIF_8, >> + .width = AEMIF_WIDTH_8, >> }, >> }; >> @@ -67,7 +67,7 @@ int dram_init(void) >> gd->ram_size = get_ram_size((long *)CONFIG_SYS_SDRAM_BASE, >> CONFIG_MAX_RAM_BANK_SIZE); >> - init_async_emif(ARRAY_SIZE(async_emif_config), async_emif_config); >> + aemif_init(sizeof(aemif_configs), aemif_configs); >> return 0; >> } >> diff --git a/drivers/Makefile b/drivers/Makefile >> index 5d03f37..b23076f 100644 >> --- a/drivers/Makefile >> +++ b/drivers/Makefile >> @@ -14,3 +14,4 @@ obj-y += twserial/ >> obj-y += video/ >> obj-y += watchdog/ >> obj-$(CONFIG_QE) += qe/ >> +obj-y += memory/ >> diff --git a/drivers/memory/Makefile b/drivers/memory/Makefile >> new file mode 100644 >> index 0000000..9bfb9c7 >> --- /dev/null >> +++ b/drivers/memory/Makefile >> @@ -0,0 +1 @@ >> +obj-$(CONFIG_TI_AEMIF) += ti-aemif.o >> diff --git a/arch/arm/cpu/armv7/keystone/aemif.c >> b/drivers/memory/ti-aemif.c >> similarity index 63% >> rename from arch/arm/cpu/armv7/keystone/aemif.c >> rename to drivers/memory/ti-aemif.c >> index 9ba1549..0877183 100644 >> --- a/arch/arm/cpu/armv7/keystone/aemif.c >> +++ b/drivers/memory/ti-aemif.c >> @@ -8,9 +8,13 @@ >> */ >> #include >> -#include >> -#include >> -#include <../drivers/mtd/nand/davinci_nand.h> >> +#include "ti-aemif.h" >> + >> +#define AEMIF_WAITCYCLE_CONFIG (CONFIG_AEMIF_CNTRL_BASE + 0x4) >> +#define AEMIF_NAND_CONTROL (CONFIG_AEMIF_CNTRL_BASE + 0x60) >> +#define AEMIF_ONENAND_CONTROL (CONFIG_AEMIF_CNTRL_BASE + 0x5c) >> +#define AEMIF_CONFIG(cs) (CONFIG_AEMIF_CNTRL_BASE + 0x10 \ >> + + (cs * 4)) >> #define AEMIF_CFG_SELECT_STROBE(v) ((v) ? 1 << 31 : 0) >> #define AEMIF_CFG_EXTEND_WAIT(v) ((v) ? 1 << 30 : 0) >> @@ -31,22 +35,22 @@ >> } \ >> } while (0) >> -void configure_async_emif(int cs, struct async_emif_config *cfg) >> +static void aemif_configure(int cs, struct aemif_config *cfg) >> { >> unsigned long tmp; >> - if (cfg->mode == ASYNC_EMIF_MODE_NAND) { >> - tmp = __raw_readl(&davinci_emif_regs->nandfcr); >> + if (cfg->mode == AEMIF_MODE_NAND) { >> + tmp = __raw_readl(AEMIF_NAND_CONTROL); >> tmp |= (1 << cs); >> - __raw_writel(tmp, &davinci_emif_regs->nandfcr); >> + __raw_writel(tmp, AEMIF_NAND_CONTROL); >> - } else if (cfg->mode == ASYNC_EMIF_MODE_ONENAND) { >> - tmp = __raw_readl(&davinci_emif_regs->one_nand_cr); >> + } else if (cfg->mode == AEMIF_MODE_ONENAND) { >> + tmp = __raw_readl(AEMIF_ONENAND_CONTROL); >> tmp |= (1 << cs); >> - __raw_writel(tmp, &davinci_emif_regs->one_nand_cr); >> + __raw_writel(tmp, AEMIF_ONENAND_CONTROL); >> } >> - tmp = __raw_readl(&davinci_emif_regs->abncr[cs]); >> + tmp = __raw_readl(AEMIF_CONFIG(cs)); >> set_config_field(tmp, SELECT_STROBE, cfg->select_strobe); >> set_config_field(tmp, EXTEND_WAIT, cfg->extend_wait); >> @@ -59,13 +63,18 @@ void configure_async_emif(int cs, struct >> async_emif_config *cfg) >> set_config_field(tmp, TURN_AROUND, cfg->turn_around); >> set_config_field(tmp, WIDTH, cfg->width); >> - __raw_writel(tmp, &davinci_emif_regs->abncr[cs]); >> + __raw_writel(tmp, AEMIF_CONFIG(cs)); >> } >> -void init_async_emif(int num_cs, struct async_emif_config *config) >> +void aemif_init(int num_cs, struct aemif_config *config) >> { >> int cs; >> + if (num_cs > AEMIF_NUM_CS) { >> + num_cs = AEMIF_NUM_CS; >> + printf("AEMIF: csnum has to be <= 5"); >> + } >> + >> for (cs = 0; cs < num_cs; cs++) >> - configure_async_emif(cs, config + cs); >> + aemif_configure(cs, config + cs); >> } >> diff --git a/drivers/memory/ti-aemif.h b/drivers/memory/ti-aemif.h >> new file mode 100644 >> index 0000000..4a311d4 >> --- /dev/null >> +++ b/drivers/memory/ti-aemif.h >> @@ -0,0 +1,39 @@ >> +/* >> + * AEMIF definitions >> + * >> + * (C) Copyright 2012-2014 >> + * Texas Instruments Incorporated, >> + * >> + * SPDX-License-Identifier: GPL-2.0+ >> + */ >> + >> +#ifndef _AEMIF_H_ >> +#define _AEMIF_H_ >> + >> +#define AEMIF_NUM_CS 4 >> +#define AEMIF_MODE_NOR 0 >> +#define AEMIF_MODE_NAND 1 >> +#define AEMIF_MODE_ONENAND 2 >> +#define AEMIF_PRESERVE -1 >> + >> +struct aemif_config { >> + unsigned mode; >> + unsigned select_strobe; >> + unsigned extend_wait; >> + unsigned wr_setup; >> + unsigned wr_strobe; >> + unsigned wr_hold; >> + unsigned rd_setup; >> + unsigned rd_strobe; >> + unsigned rd_hold; >> + unsigned turn_around; >> + enum { >> + AEMIF_WIDTH_8 = 0, >> + AEMIF_WIDTH_16 = 1, >> + AEMIF_WIDTH_32 = 2, >> + } width; >> +}; >> + >> +void aemif_init(int num_cs, struct aemif_config *config); >> + >> +#endif >> diff --git a/include/configs/k2hk_evm.h b/include/configs/k2hk_evm.h >> index 6ba7e62..7952036 100644 >> --- a/include/configs/k2hk_evm.h >> +++ b/include/configs/k2hk_evm.h >> @@ -129,6 +129,10 @@ >> #define CONFIG_SYS_SGMII_LINERATE_MHZ 1250 >> #define CONFIG_SYS_SGMII_RATESCALE 2 >> +/* AEMIF */ >> +#define CONFIG_TI_AEMIF >> +#define CONFIG_AEMIF_CNTRL_BASE KS2_AEMIF_CNTRL_BASE >> + >> /* NAND Configuration */ >> #define CONFIG_NAND_DAVINCI >> #define CONFIG_CMD_NAND_ECCLAYOUT > I think this looks good. Moving driver to memory makes it similar to > kernel. Make sure the header > files are arranged in a similar fashion. I got confused with the first > patch. > > Murali Seems there is no place for driver headers like in linux. Here is include/linux, but I think it's for code ported from linux. I saw headers along with sources hence I decided that's better place for now. -- Regards, Ivan Khoronzhuk