On Tue, Dec 13, 2011 at 12:33 PM, Stefano Babic <sba...@denx.de> wrote: > Currently nand_spl_simple puts it's temp data at 0x10000 offset in SDRAM > which is likely to contain already loaded data. > The patch saves the oob data and the ecc on the stack replacing > the fixed address in RAM. > > Signed-off-by: Stefano Babic <sba...@denx.de> > CC: Ilya Yanok <ya...@emcraft.com> > CC: Scott Wood <scottw...@freescale.com> > CC: Tom Rini <tom.r...@gmail.com> > CC: Simon Schwarz <simonschwarz...@googlemail.com> > CC: Wolfgang Denk <w...@denx.de>
Acked-by: Tom Rini <tr...@ti.com> > --- > V4: > - Drop SYS_ from local defines (Wolfgang Denk, Scott Wood) > - drop parenthesis around defines (Scott Wood) > > V3: > - use local defines for CONFIG_SYS_NAND_ECCSTEPS and > CONFIG_SYS_NAND_ECCTOTAL (Tom Rini) > - drop CONFIG_SYS_NAND_ECCSTEPS from board config files > > V2: > - CONFIG_SYS_NAND_ECCTOTAL can always be computed (Ilya Yanok) > - drop all CONFIG_SYS_NAND_ECCTOTAL in arm boards using nand_simple.c > > drivers/mtd/nand/nand_spl_simple.c | 42 ++++++++++++------------------- > include/configs/am3517_crane.h | 4 --- > include/configs/am3517_evm.h | 4 --- > include/configs/devkit8000.h | 5 ---- > include/configs/hawkboard.h | 5 +--- > include/configs/omap3_beagle.h | 4 --- > include/configs/omap3_evm.h | 4 --- > include/configs/omap3_evm_quick_nand.h | 4 --- > 8 files changed, 17 insertions(+), 55 deletions(-) > > diff --git a/drivers/mtd/nand/nand_spl_simple.c > b/drivers/mtd/nand/nand_spl_simple.c > index ed821f2..5a1e1a9 100644 > --- a/drivers/mtd/nand/nand_spl_simple.c > +++ b/drivers/mtd/nand/nand_spl_simple.c > @@ -27,6 +27,11 @@ static int nand_ecc_pos[] = CONFIG_SYS_NAND_ECCPOS; > static nand_info_t mtd; > static struct nand_chip nand_chip; > > +#define ECCSTEPS (CONFIG_SYS_NAND_PAGE_SIZE / \ > + CONFIG_SYS_NAND_ECCSIZE) > +#define ECCTOTAL (ECCSTEPS * CONFIG_SYS_NAND_ECCBYTES) > + > + > #if (CONFIG_SYS_NAND_PAGE_SIZE <= 512) > /* > * NAND command for small page NAND devices (512) > @@ -145,30 +150,22 @@ static int nand_is_bad_block(int block) > static int nand_read_page(int block, int page, uchar *dst) > { > struct nand_chip *this = mtd.priv; > - u_char *ecc_calc; > - u_char *ecc_code; > - u_char *oob_data; > + u_char ecc_calc[ECCTOTAL]; > + u_char ecc_code[ECCTOTAL]; > + u_char oob_data[CONFIG_SYS_NAND_OOBSIZE]; > int i; > int eccsize = CONFIG_SYS_NAND_ECCSIZE; > int eccbytes = CONFIG_SYS_NAND_ECCBYTES; > - int eccsteps = CONFIG_SYS_NAND_ECCSTEPS; > + int eccsteps = ECCSTEPS; > uint8_t *p = dst; > int stat; > > - /* > - * No malloc available for now, just use some temporary locations > - * in SDRAM > - */ > - ecc_calc = (u_char *)(CONFIG_SYS_SDRAM_BASE + 0x10000); > - ecc_code = ecc_calc + 0x100; > - oob_data = ecc_calc + 0x200; > - > nand_command(block, page, 0, NAND_CMD_READOOB); > this->read_buf(&mtd, oob_data, CONFIG_SYS_NAND_OOBSIZE); > nand_command(block, page, 0, NAND_CMD_READ0); > > /* Pick the ECC bytes out of the oob data */ > - for (i = 0; i < CONFIG_SYS_NAND_ECCTOTAL; i++) > + for (i = 0; i < ECCTOTAL; i++) > ecc_code[i] = oob_data[nand_ecc_pos[i]]; > > > @@ -185,25 +182,18 @@ static int nand_read_page(int block, int page, uchar > *dst) > static int nand_read_page(int block, int page, void *dst) > { > struct nand_chip *this = mtd.priv; > - u_char *ecc_calc; > - u_char *ecc_code; > - u_char *oob_data; > + u_char ecc_calc[ECCTOTAL]; > + u_char ecc_code[ECCTOTAL]; > + u_char oob_data[CONFIG_SYS_NAND_OOBSIZE]; > int i; > int eccsize = CONFIG_SYS_NAND_ECCSIZE; > int eccbytes = CONFIG_SYS_NAND_ECCBYTES; > - int eccsteps = CONFIG_SYS_NAND_ECCSTEPS; > + int eccsteps = ECCSTEPS; > uint8_t *p = dst; > int stat; > > nand_command(block, page, 0, NAND_CMD_READ0); > > - /* No malloc available for now, just use some temporary locations > - * in SDRAM > - */ > - ecc_calc = (u_char *)(CONFIG_SYS_SDRAM_BASE + 0x10000); > - ecc_code = ecc_calc + 0x100; > - oob_data = ecc_calc + 0x200; > - > for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) { > if (this->ecc.mode != NAND_ECC_SOFT) > this->ecc.hwctl(&mtd, NAND_ECC_READ); > @@ -213,10 +203,10 @@ static int nand_read_page(int block, int page, void > *dst) > this->read_buf(&mtd, oob_data, CONFIG_SYS_NAND_OOBSIZE); > > /* Pick the ECC bytes out of the oob data */ > - for (i = 0; i < CONFIG_SYS_NAND_ECCTOTAL; i++) > + for (i = 0; i < ECCTOTAL; i++) > ecc_code[i] = oob_data[nand_ecc_pos[i]]; > > - eccsteps = CONFIG_SYS_NAND_ECCSTEPS; > + eccsteps = ECCSTEPS; > p = dst; > > for (i = 0 ; eccsteps; eccsteps--, i += eccbytes, p += eccsize) { > diff --git a/include/configs/am3517_crane.h b/include/configs/am3517_crane.h > index 0a0c261..b0dd2f0 100644 > --- a/include/configs/am3517_crane.h > +++ b/include/configs/am3517_crane.h > @@ -359,10 +359,6 @@ > 10, 11, 12, 13} > #define CONFIG_SYS_NAND_ECCSIZE 512 > #define CONFIG_SYS_NAND_ECCBYTES 3 > -#define CONFIG_SYS_NAND_ECCSTEPS (CONFIG_SYS_NAND_PAGE_SIZE / \ > - CONFIG_SYS_NAND_ECCSIZE) > -#define CONFIG_SYS_NAND_ECCTOTAL (CONFIG_SYS_NAND_ECCBYTES * \ > - CONFIG_SYS_NAND_ECCSTEPS) > #define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE > #define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000 > > diff --git a/include/configs/am3517_evm.h b/include/configs/am3517_evm.h > index d44eeec..f797f3f 100644 > --- a/include/configs/am3517_evm.h > +++ b/include/configs/am3517_evm.h > @@ -360,10 +360,6 @@ > 10, 11, 12, 13} > #define CONFIG_SYS_NAND_ECCSIZE 512 > #define CONFIG_SYS_NAND_ECCBYTES 3 > -#define CONFIG_SYS_NAND_ECCSTEPS (CONFIG_SYS_NAND_PAGE_SIZE / \ > - CONFIG_SYS_NAND_ECCSIZE) > -#define CONFIG_SYS_NAND_ECCTOTAL (CONFIG_SYS_NAND_ECCBYTES * \ > - CONFIG_SYS_NAND_ECCSTEPS) > #define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE > #define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000 > > diff --git a/include/configs/devkit8000.h b/include/configs/devkit8000.h > index fc7f0cd..6ef6a87 100644 > --- a/include/configs/devkit8000.h > +++ b/include/configs/devkit8000.h > @@ -344,11 +344,6 @@ > #define CONFIG_SYS_NAND_ECCSIZE 512 > #define CONFIG_SYS_NAND_ECCBYTES 3 > > -#define CONFIG_SYS_NAND_ECCSTEPS (CONFIG_SYS_NAND_PAGE_SIZE / \ > - CONFIG_SYS_NAND_ECCSIZE) > -#define CONFIG_SYS_NAND_ECCTOTAL (CONFIG_SYS_NAND_ECCBYTES * \ > - CONFIG_SYS_NAND_ECCSTEPS) > - > #define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE > > #define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000 > diff --git a/include/configs/hawkboard.h b/include/configs/hawkboard.h > index 12acb27..65b3b78 100644 > --- a/include/configs/hawkboard.h > +++ b/include/configs/hawkboard.h > @@ -138,11 +138,8 @@ > #define CONFIG_SYS_NAND_BAD_BLOCK_POS 0 > #define CONFIG_SYS_NAND_ECCSIZE 512 > #define CONFIG_SYS_NAND_ECCBYTES 10 > -#define CONFIG_SYS_NAND_ECCSTEPS (CONFIG_SYS_NAND_PAGE_SIZE / \ > - CONFIG_SYS_NAND_ECCSIZE) > #define CONFIG_SYS_NAND_OOBSIZE 64 > -#define CONFIG_SYS_NAND_ECCTOTAL (CONFIG_SYS_NAND_ECCBYTES * \ > - CONFIG_SYS_NAND_ECCSTEPS) > + > #endif /* CONFIG_SYS_USE_NAND */ > > /* > diff --git a/include/configs/omap3_beagle.h b/include/configs/omap3_beagle.h > index 970810c..7a240bb 100644 > --- a/include/configs/omap3_beagle.h > +++ b/include/configs/omap3_beagle.h > @@ -426,10 +426,6 @@ > 10, 11, 12, 13} > #define CONFIG_SYS_NAND_ECCSIZE 512 > #define CONFIG_SYS_NAND_ECCBYTES 3 > -#define CONFIG_SYS_NAND_ECCSTEPS (CONFIG_SYS_NAND_PAGE_SIZE / \ > - CONFIG_SYS_NAND_ECCSIZE) > -#define CONFIG_SYS_NAND_ECCTOTAL (CONFIG_SYS_NAND_ECCBYTES * \ > - CONFIG_SYS_NAND_ECCSTEPS) > #define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE > #define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000 > > diff --git a/include/configs/omap3_evm.h b/include/configs/omap3_evm.h > index 2ce3959..1fcb7af 100644 > --- a/include/configs/omap3_evm.h > +++ b/include/configs/omap3_evm.h > @@ -121,10 +121,6 @@ > 10, 11, 12, 13} > #define CONFIG_SYS_NAND_ECCSIZE 512 > #define CONFIG_SYS_NAND_ECCBYTES 3 > -#define CONFIG_SYS_NAND_ECCSTEPS (CONFIG_SYS_NAND_PAGE_SIZE / \ > - CONFIG_SYS_NAND_ECCSIZE) > -#define CONFIG_SYS_NAND_ECCTOTAL (CONFIG_SYS_NAND_ECCBYTES * \ > - CONFIG_SYS_NAND_ECCSTEPS) > #define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE > #define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000 > > diff --git a/include/configs/omap3_evm_quick_nand.h > b/include/configs/omap3_evm_quick_nand.h > index 2f879c0..362fa1d 100644 > --- a/include/configs/omap3_evm_quick_nand.h > +++ b/include/configs/omap3_evm_quick_nand.h > @@ -91,10 +91,6 @@ > 10, 11, 12, 13} > #define CONFIG_SYS_NAND_ECCSIZE 512 > #define CONFIG_SYS_NAND_ECCBYTES 3 > -#define CONFIG_SYS_NAND_ECCSTEPS (CONFIG_SYS_NAND_PAGE_SIZE / \ > - CONFIG_SYS_NAND_ECCSIZE) > -#define CONFIG_SYS_NAND_ECCTOTAL (CONFIG_SYS_NAND_ECCBYTES * \ > - CONFIG_SYS_NAND_ECCSTEPS) > #define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE > #define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000 > > -- > 1.7.5.4 > -- Tom _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot