]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
Don't panic if a controller driver does ecc its own way.
authorScott Wood <scottwood@freescale.com>
Tue, 18 Mar 2008 20:29:14 +0000 (15:29 -0500)
committerScott Wood <scottwood@freescale.com>
Tue, 12 Aug 2008 16:31:25 +0000 (11:31 -0500)
Some hardware, such as the enhanced local bus controller used on some
mpc83xx chips, does ecc transparently when reading and writing data, rather
than providing a generic calculate/correct mechanism that can be exported to
the nand subsystem.

The subsystem should not BUG() when calculate, correct, or hwctl are
missing, if the methods that call them have been overridden.

Signed-off-by: Scott Wood <scottwood@freescale.com>
drivers/mtd/nand/nand_base.c

index 5661a8e4c7030306552fbcbda0e3f76df61b4753..7bceea8ac3d893cab623e2aaa80d4e3fee74698b 100644 (file)
@@ -2595,8 +2595,12 @@ int nand_scan_tail(struct mtd_info *mtd)
                        chip->ecc.write_oob = nand_write_oob_std;
 
        case NAND_ECC_HW_SYNDROME:
-               if (!chip->ecc.calculate || !chip->ecc.correct ||
-                   !chip->ecc.hwctl) {
+               if ((!chip->ecc.calculate || !chip->ecc.correct ||
+                    !chip->ecc.hwctl) &&
+                   (!chip->ecc.read_page ||
+                    chip->ecc.read_page == nand_read_page_hwecc ||
+                    !chip->ecc.write_page ||
+                    chip->ecc.write_page == nand_write_page_hwecc)) {
                        printk(KERN_WARNING "No ECC functions supplied, "
                               "Hardware ECC not possible\n");
                        BUG();