浏览代码

Don't panic if a controller driver does ecc its own way.

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>
Scott Wood 17 年之前
父节点
当前提交
41ef8c716e
共有 1 个文件被更改,包括 6 次插入2 次删除
  1. 6 2
      drivers/mtd/nand/nand_base.c

+ 6 - 2
drivers/mtd/nand/nand_base.c

@@ -2595,8 +2595,12 @@ int nand_scan_tail(struct mtd_info *mtd)
 			chip->ecc.write_oob = nand_write_oob_std;
 			chip->ecc.write_oob = nand_write_oob_std;
 
 
 	case NAND_ECC_HW_SYNDROME:
 	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, "
 			printk(KERN_WARNING "No ECC functions supplied, "
 			       "Hardware ECC not possible\n");
 			       "Hardware ECC not possible\n");
 			BUG();
 			BUG();