[U-Boot] [PATCH] NAND: Really ignore bad blocks when scrubbing
Marek Vasut
marek.vasut at gmail.com
Tue Aug 16 19:03:15 CEST 2011
Signed-off-by: Marek Vasut <marek.vasut at gmail.com>
---
drivers/mtd/nand/nand_base.c | 2 +-
drivers/mtd/nand/nand_util.c | 1 +
include/linux/mtd/mtd.h | 1 +
3 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index a5f872e..3093067 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -2224,7 +2224,7 @@ int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
/*
* heck if we have a bad block, we do not erase bad blocks !
*/
- if (nand_block_checkbad(mtd, ((loff_t) page) <<
+ if (!instr->scrub && nand_block_checkbad(mtd, ((loff_t) page) <<
chip->page_shift, 0, allowbbt)) {
printk(KERN_WARNING "nand_erase: attempt to erase a "
"bad block at page 0x%08x\n", page);
diff --git a/drivers/mtd/nand/nand_util.c b/drivers/mtd/nand/nand_util.c
index 81bf366..9da6eea 100644
--- a/drivers/mtd/nand/nand_util.c
+++ b/drivers/mtd/nand/nand_util.c
@@ -98,6 +98,7 @@ int nand_erase_opts(nand_info_t *meminfo, const nand_erase_options_t *opts)
erase.mtd = meminfo;
erase.len = meminfo->erasesize;
erase.addr = opts->offset;
+ erase.scrub = opts->scrub;
erase_length = lldiv(opts->length + meminfo->erasesize - 1,
meminfo->erasesize);
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h
index 3b18d7d..13a711d 100644
--- a/include/linux/mtd/mtd.h
+++ b/include/linux/mtd/mtd.h
@@ -55,6 +55,7 @@ struct erase_info {
u_long priv;
u_char state;
struct erase_info *next;
+ int scrub;
};
struct mtd_erase_region_info {
--
1.7.5.4
More information about the U-Boot
mailing list