X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=cmd%2Fmtd.c;h=f407c5e4450ac438b0b62c685c37adbac99e14a8;hb=a1f5f4ac20c0947afda93f9b906facfbee2708fe;hp=1b6b8dda2bcb3e81f9b0831ba4ee46ca016b7deb;hpb=c4d323793ba2e0616d93ca104e1e2b9a9fbccf9b;p=oweals%2Fu-boot.git diff --git a/cmd/mtd.c b/cmd/mtd.c index 1b6b8dda2b..f407c5e445 100644 --- a/cmd/mtd.c +++ b/cmd/mtd.c @@ -14,6 +14,8 @@ #include #include #include +#include +#include #include @@ -387,7 +389,7 @@ static int do_mtd_erase(cmd_tbl_t *cmdtp, int flag, int argc, struct mtd_info *mtd; u64 off, len; bool scrub; - int ret; + int ret = 0; if (argc < 2) return CMD_RET_USAGE; @@ -423,22 +425,22 @@ static int do_mtd_erase(cmd_tbl_t *cmdtp, int flag, int argc, erase_op.mtd = mtd; erase_op.addr = off; - erase_op.len = len; + erase_op.len = mtd->erasesize; erase_op.scrub = scrub; - while (erase_op.len) { + while (len) { ret = mtd_erase(mtd, &erase_op); - /* Abort if its not a bad block error */ - if (ret != -EIO) - break; - - printf("Skipping bad block at 0x%08llx\n", erase_op.fail_addr); + if (ret) { + /* Abort if its not a bad block error */ + if (ret != -EIO) + break; + printf("Skipping bad block at 0x%08llx\n", + erase_op.addr); + } - /* Skip bad block and continue behind it */ - erase_op.len -= erase_op.fail_addr - erase_op.addr; - erase_op.len -= mtd->erasesize; - erase_op.addr = erase_op.fail_addr + mtd->erasesize; + len -= mtd->erasesize; + erase_op.addr += mtd->erasesize; } if (ret && ret != -EIO)