]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/cmd_flash.c
cfi: Make the flash erase and write operations abortable
[karo-tx-uboot.git] / common / cmd_flash.c
index 5508d73ab8231b8d5c9ae0b0854421d5df45e5d2..e55d366c65d4a3029ebcdd3ecafc4170e609c237 100644 (file)
@@ -324,9 +324,9 @@ int do_flinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 int do_flerase (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
 #ifndef CONFIG_SYS_NO_FLASH
-       flash_info_t *info;
+       flash_info_t *info = NULL;
        ulong bank, addr_first, addr_last;
-       int n, sect_first, sect_last;
+       int n, sect_first = 0, sect_last = 0;
 #if defined(CONFIG_CMD_MTDPARTS)
        struct mtd_device *dev;
        struct part_info *part;
@@ -335,7 +335,7 @@ int do_flerase (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        int rcode = 0;
 
        if (argc < 2)
-               return cmd_usage(cmdtp);
+               return CMD_RET_USAGE;
 
        if (strcmp(argv[1], "all") == 0) {
                for (bank=1; bank<=CONFIG_SYS_MAX_FLASH_BANKS; ++bank) {
@@ -384,7 +384,7 @@ int do_flerase (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 #endif
 
        if (argc != 3)
-               return cmd_usage(cmdtp);
+               return CMD_RET_USAGE;
 
        if (strcmp(argv[1], "bank") == 0) {
                bank = simple_strtoul(argv[2], NULL, 16);
@@ -405,7 +405,7 @@ int do_flerase (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        }
 
        if (addr_first >= addr_last)
-               return cmd_usage(cmdtp);
+               return CMD_RET_USAGE;
 
        rcode = flash_sect_erase(addr_first, addr_last);
        return rcode;
@@ -443,7 +443,8 @@ int flash_sect_erase (ulong addr_first, ulong addr_last)
                                rcode = flash_erase (info, s_first[bank], s_last[bank]);
                        }
                }
-               printf ("Erased %d sectors\n", erased);
+               if (rcode == 0)
+                       printf("Erased %d sectors\n", erased);
        } else if (rcode == 0) {
                puts ("Error: start and/or end address"
                        " not on sector boundary\n");
@@ -455,34 +456,36 @@ int flash_sect_erase (ulong addr_first, ulong addr_last)
 
 int do_protect (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
+       int rcode = 0;
 #ifndef CONFIG_SYS_NO_FLASH
-       flash_info_t *info;
+       flash_info_t *info = NULL;
        ulong bank;
-       int i, n, sect_first, sect_last;
+       int i, n, sect_first = 0, sect_last = 0;
 #if defined(CONFIG_CMD_MTDPARTS)
        struct mtd_device *dev;
        struct part_info *part;
        u8 dev_type, dev_num, pnum;
 #endif
 #endif /* CONFIG_SYS_NO_FLASH */
-#if !defined(CONFIG_SYS_NO_FLASH) || defined(CONFIG_HAS_DATAFLASH)
-       ulong addr_first, addr_last;
-#endif
 #ifdef CONFIG_HAS_DATAFLASH
        int status;
 #endif
+#if !defined(CONFIG_SYS_NO_FLASH) || defined(CONFIG_HAS_DATAFLASH)
        int p;
-       int rcode = 0;
+       ulong addr_first, addr_last;
+#endif
 
        if (argc < 3)
-               return cmd_usage(cmdtp);
+               return CMD_RET_USAGE;
 
+#if !defined(CONFIG_SYS_NO_FLASH) || defined(CONFIG_HAS_DATAFLASH)
        if (strcmp(argv[1], "off") == 0)
                p = 0;
        else if (strcmp(argv[1], "on") == 0)
                p = 1;
        else
-               return cmd_usage(cmdtp);
+               return CMD_RET_USAGE;
+#endif
 
 #ifdef CONFIG_HAS_DATAFLASH
        if ((strcmp(argv[2], "all") != 0) && (strcmp(argv[2], "bank") != 0)) {
@@ -581,7 +584,7 @@ int do_protect (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 #endif
 
        if (argc != 4)
-               return cmd_usage(cmdtp);
+               return CMD_RET_USAGE;
 
        if (strcmp(argv[2], "bank") == 0) {
                bank = simple_strtoul(argv[3], NULL, 16);
@@ -621,7 +624,7 @@ int do_protect (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        }
 
        if (addr_first >= addr_last)
-               return cmd_usage(cmdtp);
+               return CMD_RET_USAGE;
 
        rcode = flash_sect_protect (p, addr_first, addr_last);
 #endif /* CONFIG_SYS_NO_FLASH */