@@ -36,6 +36,15 @@ config MTD_NAND_ECC_BCH
ECC codes. They are used with NAND devices requiring more than 1 bit
of error correction.
+config MTD_NAND_ERASE_BADBLOCKS
+ bool "Enable erasing of bad blocks (DANGEROUS)"
+ default n
+ help
+ This enables support for attempting to erase bad blocks.
+ It is needed to workaround too many badblocks issue on chips used
+ under custom, incompatible vendor drivers.
+ Say N if unsure.
+
config MTD_SM_COMMON
tristate
default n
@@ -3206,6 +3206,7 @@ int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
instr->state = MTD_ERASING;
while (len) {
+ #ifndef CONFIG_MTD_NAND_ERASE_BADBLOCKS
/* Check if we have a bad block, we do not erase bad blocks! */
if (nand_block_checkbad(mtd, ((loff_t) page) <<
chip->page_shift, allowbbt)) {
@@ -3214,6 +3215,7 @@ int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
instr->state = MTD_ERASE_FAILED;
goto erase_exit;
}
+ #endif
/*
* Invalidate the page cache, if we erase the block which
Some chips used under a custom vendor driver can get their blocks incorrectly detected as bad blocks, out of incompatibilities between such drivers and MTD drivers. When there are too many misdetected bad blocks, the device becomes unusable because a bad block table can't be allocated, aside from all the legitimately good blocks which become unusable under these conditions. This adds a build option to workaround the issue by enabling the user to free up space regardless of what the driver thinks about the blocks. Example usage: recovering NAND chips on sunxi devices, as explained here: http://linux-sunxi.org/Mainline_NAND_Howto#Known_issues Signed-off-by: Mario J. Rugiero <mrugiero@gmail.com> v2: Fix a typo in the build option description. --- drivers/mtd/nand/Kconfig | 9 +++++++++ drivers/mtd/nand/nand_base.c | 2 ++ 2 files changed, 11 insertions(+)