nand/fsl_ifc: Increase eccstat[] for IFC 2.0

IFC 2.0 doubled the SRAM size, which means double the number of
ECCSTAT registers.  Fix the resulting array overflow.

Signed-off-by: Scott Wood <scottwood@freescale.com>
Reviewed-by: York Sun <yorksun@freescale.com>
This commit is contained in:
Scott Wood 2015-03-19 09:20:49 -07:00 committed by York Sun
parent 45bc6fd108
commit 585acc9de6

View file

@ -292,7 +292,7 @@ static int fsl_ifc_run_command(struct mtd_info *mtd)
struct fsl_ifc *ifc = ctrl->regs; struct fsl_ifc *ifc = ctrl->regs;
u32 timeo = (CONFIG_SYS_HZ * 10) / 1000; u32 timeo = (CONFIG_SYS_HZ * 10) / 1000;
u32 time_start; u32 time_start;
u32 eccstat[4] = {0}; u32 eccstat[8] = {0};
int i; int i;
/* set the chip select for NAND Transaction */ /* set the chip select for NAND Transaction */
@ -325,8 +325,15 @@ static int fsl_ifc_run_command(struct mtd_info *mtd)
int sector = bufnum * chip->ecc.steps; int sector = bufnum * chip->ecc.steps;
int sector_end = sector + chip->ecc.steps - 1; int sector_end = sector + chip->ecc.steps - 1;
for (i = sector / 4; i <= sector_end / 4; i++) for (i = sector / 4; i <= sector_end / 4; i++) {
if (i >= ARRAY_SIZE(eccstat)) {
printf("%s: eccstat too small for %d\n",
__func__, i);
return -EIO;
}
eccstat[i] = ifc_in32(&ifc->ifc_nand.nand_eccstat[i]); eccstat[i] = ifc_in32(&ifc->ifc_nand.nand_eccstat[i]);
}
for (i = sector; i <= sector_end; i++) { for (i = sector; i <= sector_end; i++) {
errors = check_read_ecc(mtd, ctrl, eccstat, i); errors = check_read_ecc(mtd, ctrl, eccstat, i);