[U-Boot] [PATCH] Davinci: Configurable NAND chip selects
Paulraj, Sandeep
s-paulraj at ti.com
Mon Nov 16 19:02:50 CET 2009
Hi Nick,
> -----Original Message-----
> From: u-boot-bounces at lists.denx.de [mailto:u-boot-bounces at lists.denx.de]
> On Behalf Of Nick Thompson
> Sent: Monday, November 16, 2009 12:50 PM
> To: u-boot at lists.denx.de
> Subject: [U-Boot] [PATCH] Davinci: Configurable NAND chip selects
>
> Davinci: Configurable NAND chip selects
>
> Add a CONFIG_SYS_NAND_CS setting to all davinci configs and
> use it to setup the NAND controller in the davinci_nand
> mtd driver.
>
> Signed-off-by: Nick Thompson <nick.thompson at gefanuc.com>
> ---
> This config item is already used on many other platforms
> so is not a new config item as such.
>
> This change should not result in any functional changes to
> current davinci boards. They all seem to use CS2 as this
> was the only chip select supported by the driver. da830evm
> however uses CS3, so a configurable driver is required.
My testing branch has all the NAND updates. I'll add this and test it out. I don't expect to see any issues though.
>
> Applies to: u-boot-ti
>
> drivers/mtd/nand/davinci_nand.c | 16 ++++++++++------
> include/asm-arm/arch-davinci/emif_defs.h | 9 +++++++++
> include/configs/davinci_dm355evm.h | 1 +
> include/configs/davinci_dm355leopard.h | 1 +
> include/configs/davinci_dm365evm.h | 1 +
> include/configs/davinci_dm6467evm.h | 1 +
> include/configs/davinci_dvevm.h | 1 +
> include/configs/davinci_schmoogie.h | 1 +
> include/configs/davinci_sffsdr.h | 1 +
> include/configs/davinci_sonata.h | 1 +
> 10 files changed, 27 insertions(+), 6 deletions(-)
OK but I don't see a change to the DA830 config which was the reason for the patch in the first place.
>
> diff --git a/drivers/mtd/nand/davinci_nand.c
> b/drivers/mtd/nand/davinci_nand.c
> index eabaf3e..1900a1a 100644
> --- a/drivers/mtd/nand/davinci_nand.c
> +++ b/drivers/mtd/nand/davinci_nand.c
> @@ -82,12 +82,13 @@ static void nand_davinci_hwcontrol(struct mtd_info
> *mtd, int cmd, unsigned int c
>
> static void nand_davinci_enable_hwecc(struct mtd_info *mtd, int mode)
> {
> - int dummy;
> + u_int32_t val;
>
> - dummy = emif_regs->NANDF1ECC;
> + val = readl(&emif_regs->NANDF1ECC);
>
> - /* FIXME: only chipselect 0 is supported for now */
> - emif_regs->NANDFCR |= 1 << 8;
> + val = readl(&emif_regs->NANDFCR);
> + val |= DAVINCI_NANDFCR_1BIT_ECC_START(CONFIG_SYS_NAND_CS);
> + writel(val, &emif_regs->NANDFCR);
> }
>
> static u_int32_t nand_davinci_readecc(struct mtd_info *mtd, u_int32_t
> region)
> @@ -214,8 +215,11 @@ static void nand_davinci_4bit_enable_hwecc(struct
> mtd_info *mtd, int mode)
> * Start a new ECC calculation for reading or writing 512
> bytes
> * of data.
> */
> - val = (emif_regs->NANDFCR & ~(3 << 4)) | (1 << 12);
> - emif_regs->NANDFCR = val;
> + val = readl(&emif_regs->NANDFCR);
> + val &= ~DAVINCI_NANDFCR_4BIT_ECC_SEL_MASK;
> + val |= DAVINCI_NANDFCR_4BIT_ECC_SEL(CONFIG_SYS_NAND_CS);
> + val |= DAVINCI_NANDFCR_4BIT_ECC_START;
> + writel(val, &emif_regs->NANDFCR);
> break;
> case NAND_ECC_READSYN:
> val = emif_regs->NAND4BITECC1;
> diff --git a/include/asm-arm/arch-davinci/emif_defs.h b/include/asm-
> arm/arch-davinci/emif_defs.h
> index c91e30c..5a36ece 100644
> --- a/include/asm-arm/arch-davinci/emif_defs.h
> +++ b/include/asm-arm/arch-davinci/emif_defs.h
> @@ -68,4 +68,13 @@ typedef struct {
> } emif_registers;
>
> typedef emif_registers *emifregs;
> +
> +#define DAVINCI_NANDFCR_4BIT_ECC_SEL_MASK (3 << 4)
> +#define DAVINCI_NANDFCR_4BIT_ECC_SEL(n) ((n-2) << 4)
> +
> +#define DAVINCI_NANDFCR_1BIT_ECC_START(n) (1 << (8 + (n-2)))
> +
> +#define DAVINCI_NANDFCR_4BIT_ECC_START (1 << 12)
> +#define DAVINCI_NANDFCR_4BIT_CALC_START (1 << 13)
> +
> #endif
> diff --git a/include/configs/davinci_dm355evm.h
> b/include/configs/davinci_dm355evm.h
> index ea40df0..07914a3 100644
> --- a/include/configs/davinci_dm355evm.h
> +++ b/include/configs/davinci_dm355evm.h
> @@ -66,6 +66,7 @@
>
> /* NAND: socketed, two chipselects, normally 2 GBytes */
> #define CONFIG_NAND_DAVINCI
> +#define CONFIG_SYS_NAND_CS 2
> #define CONFIG_SYS_NAND_USE_FLASH_BBT
> #define CONFIG_SYS_NAND_4BIT_HW_ECC_OOBFIRST
> #define CONFIG_SYS_NAND_PAGE_2K
> diff --git a/include/configs/davinci_dm355leopard.h
> b/include/configs/davinci_dm355leopard.h
> index 5db720e..54b153d 100644
> --- a/include/configs/davinci_dm355leopard.h
> +++ b/include/configs/davinci_dm355leopard.h
> @@ -65,6 +65,7 @@
>
> /* NAND */
> #define CONFIG_NAND_DAVINCI
> +#define CONFIG_SYS_NAND_CS 2
> #define CONFIG_SYS_NAND_USE_FLASH_BBT
> #define CONFIG_SYS_NAND_HW_ECC
>
> diff --git a/include/configs/davinci_dm365evm.h
> b/include/configs/davinci_dm365evm.h
> index 53a105b..5a510e6 100644
> --- a/include/configs/davinci_dm365evm.h
> +++ b/include/configs/davinci_dm365evm.h
> @@ -74,6 +74,7 @@
>
> /* NAND: socketed, two chipselects, normally 2 GBytes */
> #define CONFIG_NAND_DAVINCI
> +#define CONFIG_SYS_NAND_CS 2
> #define CONFIG_SYS_NAND_USE_FLASH_BBT
> #define CONFIG_SYS_NAND_4BIT_HW_ECC_OOBFIRST
> #define CONFIG_SYS_NAND_PAGE_2K
> diff --git a/include/configs/davinci_dm6467evm.h
> b/include/configs/davinci_dm6467evm.h
> index 6617941..dce0411 100644
> --- a/include/configs/davinci_dm6467evm.h
> +++ b/include/configs/davinci_dm6467evm.h
> @@ -75,6 +75,7 @@
> #define CONFIG_SYS_NO_FLASH
> #ifdef CONFIG_SYS_USE_NAND
> #define CONFIG_NAND_DAVINCI
> +#define CONFIG_SYS_NAND_CS 2
> #undef CONFIG_ENV_IS_IN_FLASH
> #define CONFIG_ENV_IS_IN_NAND
> #define CONFIG_SYS_64BIT_VSPRINTF /* needed for nand_util.c */
> diff --git a/include/configs/davinci_dvevm.h
> b/include/configs/davinci_dvevm.h
> index b045e80..ff2c845 100644
> --- a/include/configs/davinci_dvevm.h
> +++ b/include/configs/davinci_dvevm.h
> @@ -114,6 +114,7 @@
> /*=====================*/
> #ifdef CONFIG_SYS_USE_NAND
> #define CONFIG_NAND_DAVINCI
> +#define CONFIG_SYS_NAND_CS 2
> #undef CONFIG_ENV_IS_IN_FLASH
> #define CONFIG_SYS_NO_FLASH
> #define CONFIG_ENV_IS_IN_NAND /* U-Boot env in NAND Flash */
> diff --git a/include/configs/davinci_schmoogie.h
> b/include/configs/davinci_schmoogie.h
> index 9384cdd..299ec25 100644
> --- a/include/configs/davinci_schmoogie.h
> +++ b/include/configs/davinci_schmoogie.h
> @@ -83,6 +83,7 @@
> #undef CONFIG_ENV_IS_IN_FLASH
> #define CONFIG_SYS_NO_FLASH
> #define CONFIG_NAND_DAVINCI
> +#define CONFIG_SYS_NAND_CS 2
> #define CONFIG_ENV_IS_IN_NAND /* U-Boot env in NAND Flash */
> #define CONFIG_ENV_SECT_SIZE 2048 /* Env sector Size */
> #define CONFIG_ENV_SIZE (128 << 10) /* 128 KiB */
> diff --git a/include/configs/davinci_sffsdr.h
> b/include/configs/davinci_sffsdr.h
> index 71d48fb..6c1d303 100644
> --- a/include/configs/davinci_sffsdr.h
> +++ b/include/configs/davinci_sffsdr.h
> @@ -78,6 +78,7 @@
> #undef CONFIG_ENV_IS_IN_FLASH
> #define CONFIG_SYS_NO_FLASH
> #define CONFIG_NAND_DAVINCI
> +#define CONFIG_SYS_NAND_CS 2
> #define CONFIG_ENV_IS_IN_NAND /* U-Boot env in NAND Flash */
> #define CONFIG_ENV_SECT_SIZE 2048 /* Env sector Size */
> #define CONFIG_ENV_SIZE (128 << 10) /* 128 KiB */
> diff --git a/include/configs/davinci_sonata.h
> b/include/configs/davinci_sonata.h
> index 9138b2b..203bd18 100644
> --- a/include/configs/davinci_sonata.h
> +++ b/include/configs/davinci_sonata.h
> @@ -114,6 +114,7 @@
> /*=====================*/
> #ifdef CONFIG_SYS_USE_NAND
> #define CONFIG_NAND_DAVINCI
> +#define CONFIG_SYS_NAND_CS 2
> #undef CONFIG_ENV_IS_IN_FLASH
> #define CONFIG_SYS_NO_FLASH
> #define CONFIG_ENV_IS_IN_NAND /* U-Boot env in NAND Flash */
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
More information about the U-Boot
mailing list