diff options
author | Felix Fietkau <nbd@openwrt.org> | 2014-03-26 10:50:09 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2014-03-26 10:50:09 +0000 |
commit | 608f4fe3b040089b30a019f1a28efeda1ca5809f (patch) | |
tree | 501b30c771418fcffdb4d9d7867552f7ab021d11 /package/system/mtd/src/jffs2.c | |
parent | 0555ebf66d415045b176181cde25ba2ed063c09d (diff) | |
download | upstream-608f4fe3b040089b30a019f1a28efeda1ca5809f.tar.gz upstream-608f4fe3b040089b30a019f1a28efeda1ca5809f.tar.bz2 upstream-608f4fe3b040089b30a019f1a28efeda1ca5809f.zip |
mtd: add support for bad blocks in NAND flash
NAND flash is very likely to contain bad blocks.
Currently, mtd and therefore sysupgrade fails when it encounters a single bad block, potentially leaving an unbootable system.
This patch allows the mtd utility to skip bad blocks in NAND flash and complete sysupgrade successfully.
Patch by: Matthew Redfearn <matt.redfearn@nxp.com>
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
SVN-Revision: 40021
Diffstat (limited to 'package/system/mtd/src/jffs2.c')
-rw-r--r-- | package/system/mtd/src/jffs2.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/package/system/mtd/src/jffs2.c b/package/system/mtd/src/jffs2.c index 2a83bd47f4..c29fb33e5c 100644 --- a/package/system/mtd/src/jffs2.c +++ b/package/system/mtd/src/jffs2.c @@ -59,6 +59,15 @@ static void pad(int size) } ofs = ofs % erasesize; if (ofs == 0) { + while (mtd_block_is_bad(outfd, mtdofs) && (mtdofs < mtdsize)) { + if (!quiet) + fprintf(stderr, "\nSkipping bad block at 0x%08x ", mtdofs); + + mtdofs += erasesize; + + /* Move the file pointer along over the bad block. */ + lseek(outfd, erasesize, SEEK_CUR); + } mtd_erase_block(outfd, mtdofs); write(outfd, buf, erasesize); mtdofs += erasesize; |