Hi Nick, > -----Original Message----- > From: u-boot-boun...@lists.denx.de [mailto:u-boot-boun...@lists.denx.de] > On Behalf Of Nick Thompson > Sent: Monday, November 16, 2009 12:50 PM > To: u-boot@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.thomp...@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@lists.denx.de > http://lists.denx.de/mailman/listinfo/u-boot _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot