|
@@ -312,14 +312,20 @@ static int scan_read_raw_oob(struct mtd_info *mtd, uint8_t *buf, loff_t offs,
|
|
|
ops.oobbuf = buf + len;
|
|
|
ops.datbuf = buf;
|
|
|
ops.len = len;
|
|
|
- return mtd->read_oob(mtd, offs, &ops);
|
|
|
+ res = mtd->read_oob(mtd, offs, &ops);
|
|
|
+
|
|
|
+ /* Ignore ECC errors when checking for BBM */
|
|
|
+ if (res != -EUCLEAN && res != -EBADMSG)
|
|
|
+ return res;
|
|
|
+ return 0;
|
|
|
} else {
|
|
|
ops.oobbuf = buf + mtd->writesize;
|
|
|
ops.datbuf = buf;
|
|
|
ops.len = mtd->writesize;
|
|
|
res = mtd->read_oob(mtd, offs, &ops);
|
|
|
|
|
|
- if (res)
|
|
|
+ /* Ignore ECC errors when checking for BBM */
|
|
|
+ if (res && res != -EUCLEAN && res != -EBADMSG)
|
|
|
return res;
|
|
|
}
|
|
|
|
|
@@ -435,7 +441,8 @@ static int scan_block_fast(struct mtd_info *mtd, struct nand_bbt_descr *bd,
|
|
|
* byte reads for 16 bit buswidth.
|
|
|
*/
|
|
|
ret = mtd->read_oob(mtd, offs, &ops);
|
|
|
- if (ret)
|
|
|
+ /* Ignore ECC errors when checking for BBM */
|
|
|
+ if (ret && ret != -EUCLEAN && ret != -EBADMSG)
|
|
|
return ret;
|
|
|
|
|
|
if (check_short_pattern(buf, bd))
|