[MTD] [NAND] S3C2410 Allow unset ecc to be ignored for ecc correction
authorBen Dooks <ben-mtd@fluff.org>
Tue, 15 Apr 2008 10:36:20 +0000 (11:36 +0100)
committerDavid Woodhouse <dwmw2@infradead.org>
Tue, 22 Apr 2008 20:41:03 +0000 (21:41 +0100)
If a block's ecc field is all 0xff, then ignore the ECC
correction. This is for systems where some of the blocks,
such as the initial cramfs are written without ECC and
need to be loaded on start.

Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
drivers/mtd/nand/s3c2410.c
include/asm-arm/plat-s3c/nand.h

index 15397e0f39651f79eb1dd5e7093ff4beddbab326..35401f7b9302527adba8ddb40735d064f0ab9f5d 100644 (file)
@@ -357,6 +357,14 @@ static int s3c2410_nand_correct_data(struct mtd_info *mtd, u_char *dat,
        if (diff0 == 0 && diff1 == 0 && diff2 == 0)
                return 0;               /* ECC is ok */
 
+       /* sometimes people do not think about using the ECC, so check
+        * to see if we have an 0xff,0xff,0xff read ECC and then ignore
+        * the error, on the assumption that this is an un-eccd page.
+        */
+       if (read_ecc[0] == 0xff && read_ecc[1] == 0xff && read_ecc[2] == 0xff
+           && info->platform->ignore_unset_ecc)
+               return 0;
+
        /* Can we correct this ECC (ie, one row and column change).
         * Note, this is similar to the 256 error code on smartmedia */
 
index 8816f7f9cee15add2e5614d281db721c374c0392..ab278d5f63dd497f5b10456249120ba23a0a8243 100644 (file)
@@ -36,6 +36,8 @@ struct s3c2410_platform_nand {
        int     twrph0; /* active time for nWE/nOE */
        int     twrph1; /* time for release CLE/ALE from nWE/nOE inactive */
 
+       unsigned int    ignore_unset_ecc : 1;
+
        int                     nr_sets;
        struct s3c2410_nand_set *sets;