nand/fsl_ifc: Increase eccstat[] for IFC 2.0
authorScott Wood <scottwood@freescale.com>
Thu, 19 Mar 2015 16:20:49 +0000 (09:20 -0700)
committerYork Sun <yorksun@freescale.com>
Thu, 23 Apr 2015 15:55:53 +0000 (08:55 -0700)
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>
drivers/mtd/nand/fsl_ifc_nand.c

index 7903eebd537c595eb9b6af01459983d94cf9ea79..28f197ed9e4c176b94107cda232e5503176639b6 100644 (file)
@@ -292,7 +292,7 @@ static int fsl_ifc_run_command(struct mtd_info *mtd)
        struct fsl_ifc *ifc = ctrl->regs;
        u32 timeo = (CONFIG_SYS_HZ * 10) / 1000;
        u32 time_start;
-       u32 eccstat[4] = {0};
+       u32 eccstat[8] = {0};
        int i;
 
        /* 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_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]);
+               }
 
                for (i = sector; i <= sector_end; i++) {
                        errors = check_read_ecc(mtd, ctrl, eccstat, i);