diff options
| -rw-r--r-- | include/configs/PMC440.h | 2 | ||||
| -rw-r--r-- | include/configs/acadia.h | 2 | ||||
| -rw-r--r-- | include/configs/bamboo.h | 2 | ||||
| -rw-r--r-- | include/configs/cam_enc_4xx.h | 3 | ||||
| -rw-r--r-- | include/configs/canyonlands.h | 2 | ||||
| -rw-r--r-- | include/configs/kilauea.h | 2 | ||||
| -rw-r--r-- | include/configs/qi_lb60.h | 4 | ||||
| -rw-r--r-- | include/configs/sequoia.h | 2 | ||||
| -rw-r--r-- | include/configs/smdk6400.h | 4 | ||||
| -rw-r--r-- | include/configs/tam3517-common.h | 5 | ||||
| -rw-r--r-- | nand_spl/nand_boot.c | 42 | 
11 files changed, 16 insertions, 54 deletions
| diff --git a/include/configs/PMC440.h b/include/configs/PMC440.h index ed47a8782..b82095454 100644 --- a/include/configs/PMC440.h +++ b/include/configs/PMC440.h @@ -200,9 +200,7 @@  #define CONFIG_SYS_NAND_ECCSIZE	256  #define CONFIG_SYS_NAND_ECCBYTES	3 -#define CONFIG_SYS_NAND_ECCSTEPS	(CONFIG_SYS_NAND_PAGE_SIZE / CONFIG_SYS_NAND_ECCSIZE)  #define CONFIG_SYS_NAND_OOBSIZE	16 -#define CONFIG_SYS_NAND_ECCTOTAL	(CONFIG_SYS_NAND_ECCBYTES * CONFIG_SYS_NAND_ECCSTEPS)  #define CONFIG_SYS_NAND_ECCPOS		{0, 1, 2, 3, 6, 7}  #endif diff --git a/include/configs/acadia.h b/include/configs/acadia.h index 5573dc7a3..8c447ca95 100644 --- a/include/configs/acadia.h +++ b/include/configs/acadia.h @@ -185,9 +185,7 @@  #define CONFIG_SYS_NAND_ECCSIZE	256  #define CONFIG_SYS_NAND_ECCBYTES	3 -#define CONFIG_SYS_NAND_ECCSTEPS	(CONFIG_SYS_NAND_PAGE_SIZE / CONFIG_SYS_NAND_ECCSIZE)  #define CONFIG_SYS_NAND_OOBSIZE	16 -#define CONFIG_SYS_NAND_ECCTOTAL	(CONFIG_SYS_NAND_ECCBYTES * CONFIG_SYS_NAND_ECCSTEPS)  #define CONFIG_SYS_NAND_ECCPOS		{0, 1, 2, 3, 6, 7}  #ifdef CONFIG_ENV_IS_IN_NAND diff --git a/include/configs/bamboo.h b/include/configs/bamboo.h index 7b66fc092..506a558f1 100644 --- a/include/configs/bamboo.h +++ b/include/configs/bamboo.h @@ -179,9 +179,7 @@  #define CONFIG_SYS_NAND_ECCSIZE	256  #define CONFIG_SYS_NAND_ECCBYTES	3 -#define CONFIG_SYS_NAND_ECCSTEPS	(CONFIG_SYS_NAND_PAGE_SIZE / CONFIG_SYS_NAND_ECCSIZE)  #define CONFIG_SYS_NAND_OOBSIZE	16 -#define CONFIG_SYS_NAND_ECCTOTAL	(CONFIG_SYS_NAND_ECCBYTES * CONFIG_SYS_NAND_ECCSTEPS)  #define CONFIG_SYS_NAND_ECCPOS		{0, 1, 2, 3, 6, 7}  #ifdef CONFIG_ENV_IS_IN_NAND diff --git a/include/configs/cam_enc_4xx.h b/include/configs/cam_enc_4xx.h index 86f74df28..5d9672fbc 100644 --- a/include/configs/cam_enc_4xx.h +++ b/include/configs/cam_enc_4xx.h @@ -235,9 +235,6 @@  #define CONFIG_SYS_NAND_ECCBYTES	10  #define CONFIG_SYS_NAND_OOBSIZE		64  #define CONFIG_SYS_NAND_5_ADDR_CYCLE -#define CONFIG_SYS_NAND_ECCSTEPS	(CONFIG_SYS_NAND_PAGE_SIZE /	 \ -					 CONFIG_SYS_NAND_ECCSIZE) -#define CONFIG_SYS_NAND_ECCTOTAL	(40)  /*   * RBL searches from Block n (n = 1..24) diff --git a/include/configs/canyonlands.h b/include/configs/canyonlands.h index 8c03582c8..acb127c1d 100644 --- a/include/configs/canyonlands.h +++ b/include/configs/canyonlands.h @@ -197,9 +197,7 @@  #define CONFIG_SYS_NAND_ECCSIZE	256  #define CONFIG_SYS_NAND_ECCBYTES	3 -#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)  #define CONFIG_SYS_NAND_ECCPOS		{40, 41, 42, 43, 44, 45, 46, 47, \  				 48, 49, 50, 51, 52, 53, 54, 55, \  				 56, 57, 58, 59, 60, 61, 62, 63} diff --git a/include/configs/kilauea.h b/include/configs/kilauea.h index e66aadf97..621dbb8fa 100644 --- a/include/configs/kilauea.h +++ b/include/configs/kilauea.h @@ -210,9 +210,7 @@  #define CONFIG_SYS_NAND_ECCSIZE	256  #define CONFIG_SYS_NAND_ECCBYTES	3 -#define CONFIG_SYS_NAND_ECCSTEPS	(CONFIG_SYS_NAND_PAGE_SIZE / CONFIG_SYS_NAND_ECCSIZE)  #define CONFIG_SYS_NAND_OOBSIZE	16 -#define CONFIG_SYS_NAND_ECCTOTAL	(CONFIG_SYS_NAND_ECCBYTES * CONFIG_SYS_NAND_ECCSTEPS)  #define CONFIG_SYS_NAND_ECCPOS		{0, 1, 2, 3, 6, 7}  #ifdef CONFIG_ENV_IS_IN_NAND diff --git a/include/configs/qi_lb60.h b/include/configs/qi_lb60.h index f2e605a9b..ebd8223d6 100644 --- a/include/configs/qi_lb60.h +++ b/include/configs/qi_lb60.h @@ -99,10 +99,6 @@  #define CONFIG_SYS_NAND_ECC_POS		(6 * NANONOTE_NAND_SIZE)  #define CONFIG_SYS_NAND_ECCSIZE		512  #define CONFIG_SYS_NAND_ECCBYTES	9 -#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_ECCPOS		\  		{12, 13, 14, 15, 16, 17, 18, 19,\  		20, 21, 22, 23, 24, 25, 26, 27, \ diff --git a/include/configs/sequoia.h b/include/configs/sequoia.h index a406ca032..8e6954e3a 100644 --- a/include/configs/sequoia.h +++ b/include/configs/sequoia.h @@ -205,9 +205,7 @@  #define CONFIG_SYS_NAND_ECCSIZE	256  #define CONFIG_SYS_NAND_ECCBYTES	3 -#define CONFIG_SYS_NAND_ECCSTEPS	(CONFIG_SYS_NAND_PAGE_SIZE / CONFIG_SYS_NAND_ECCSIZE)  #define CONFIG_SYS_NAND_OOBSIZE	16 -#define CONFIG_SYS_NAND_ECCTOTAL	(CONFIG_SYS_NAND_ECCBYTES * CONFIG_SYS_NAND_ECCSTEPS)  #define CONFIG_SYS_NAND_ECCPOS		{0, 1, 2, 3, 6, 7}  #ifdef CONFIG_ENV_IS_IN_NAND diff --git a/include/configs/smdk6400.h b/include/configs/smdk6400.h index 4d0b7b2d4..a2b944105 100644 --- a/include/configs/smdk6400.h +++ b/include/configs/smdk6400.h @@ -262,12 +262,8 @@  #define CONFIG_SYS_NAND_ECCSIZE	CONFIG_SYS_NAND_PAGE_SIZE  /* Number of ECC bytes per OOB - S3C6400 calculates 4 bytes ECC in 1-bit mode */  #define CONFIG_SYS_NAND_ECCBYTES	4 -/* Number of ECC-blocks per NAND page */ -#define CONFIG_SYS_NAND_ECCSTEPS	(CONFIG_SYS_NAND_PAGE_SIZE / CONFIG_SYS_NAND_ECCSIZE)  /* Size of a single OOB region */  #define CONFIG_SYS_NAND_OOBSIZE	64 -/* Number of ECC bytes per page */ -#define CONFIG_SYS_NAND_ECCTOTAL	(CONFIG_SYS_NAND_ECCBYTES * CONFIG_SYS_NAND_ECCSTEPS)  /* ECC byte positions */  #define CONFIG_SYS_NAND_ECCPOS		{40, 41, 42, 43, 44, 45, 46, 47, \  				 48, 49, 50, 51, 52, 53, 54, 55, \ diff --git a/include/configs/tam3517-common.h b/include/configs/tam3517-common.h index 817d468a7..f4963ac07 100644 --- a/include/configs/tam3517-common.h +++ b/include/configs/tam3517-common.h @@ -278,11 +278,6 @@  #define CONFIG_SYS_NAND_ECCSIZE		256  #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/nand_spl/nand_boot.c b/nand_spl/nand_boot.c index 2326962b2..bfaabd319 100644 --- a/nand_spl/nand_boot.c +++ b/nand_spl/nand_boot.c @@ -24,6 +24,11 @@  static int nand_ecc_pos[] = CONFIG_SYS_NAND_ECCPOS; +#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) @@ -139,29 +144,21 @@ static int nand_is_bad_block(struct mtd_info *mtd, int block)  static int nand_read_page(struct mtd_info *mtd, 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; -	/* -	 * 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(mtd, block, page, 0, NAND_CMD_READOOB);  	this->read_buf(mtd, oob_data, CONFIG_SYS_NAND_OOBSIZE);  	nand_command(mtd, 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]]; @@ -178,24 +175,17 @@ static int nand_read_page(struct mtd_info *mtd, int block, int page, uchar *dst)  static int nand_read_page(struct mtd_info *mtd, 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;  	nand_command(mtd, 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) {  		this->ecc.hwctl(mtd, NAND_ECC_READ);  		this->read_buf(mtd, p, eccsize); @@ -204,10 +194,10 @@ static int nand_read_page(struct mtd_info *mtd, int block, int page, uchar *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) { |