dm: core: Require users of devres to include the header
[oweals/u-boot.git] / cmd / mtd.c
index 1b6b8dda2bcb3e81f9b0831ba4ee46ca016b7deb..f407c5e4450ac438b0b62c685c37adbac99e14a8 100644 (file)
--- a/cmd/mtd.c
+++ b/cmd/mtd.c
@@ -14,6 +14,8 @@
 #include <malloc.h>
 #include <mapmem.h>
 #include <mtd.h>
+#include <dm/devres.h>
+#include <linux/err.h>
 
 #include <linux/ctype.h>
 
@@ -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)