]> git.sur5r.net Git - u-boot/blobdiff - common/cmd_armflash.c
arm: imx: Switch Wandboard to use config_distro_bootcmd.h.
[u-boot] / common / cmd_armflash.c
index 1db92b05992acb61aa3a79be6e3653b7fa303d7e..af453f7b3b84aba97704fd9ff2178d00876b6aad 100644 (file)
@@ -175,7 +175,7 @@ static void parse_flash(void)
                parse_bank(bank);
 }
 
-static void load_image(const char * const name, const ulong address)
+static int load_image(const char * const name, const ulong address)
 {
        struct afs_image *afi = NULL;
        int i;
@@ -191,7 +191,7 @@ static void load_image(const char * const name, const ulong address)
        }
        if (!afi) {
                printf("image \"%s\" not found in flash\n", name);
-               return;
+               return CMD_RET_FAILURE;
        }
 
        for (i = 0; i < afi->region_count; i++) {
@@ -204,7 +204,7 @@ static void load_image(const char * const name, const ulong address)
                        to = afi->regions[i].load_address;
                } else {
                        printf("no valid load address\n");
-                       return;
+                       return CMD_RET_FAILURE;
                }
 
                memcpy((void *)to, (void *)from, afi->regions[i].size);
@@ -215,6 +215,7 @@ static void load_image(const char * const name, const ulong address)
                       to,
                       afi->regions[i].size);
        }
+       return CMD_RET_SUCCESS;
 }
 
 static void print_images(void)
@@ -251,27 +252,47 @@ static void print_images(void)
        }
 }
 
+static int exists(const char * const name)
+{
+       int i;
+
+       parse_flash();
+       for (i = 0; i < num_afs_images; i++) {
+               struct afs_image *afi = &afs_images[i];
+
+               if (strcmp(afi->name, name) == 0)
+                       return CMD_RET_SUCCESS;
+       }
+       return CMD_RET_FAILURE;
+}
+
 static int do_afs(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
+       int ret = CMD_RET_SUCCESS;
+
        if (argc == 1) {
                print_images();
+       } else if (argc == 3 && !strcmp(argv[1], "exists")) {
+               ret = exists(argv[2]);
        } else if (argc == 3 && !strcmp(argv[1], "load")) {
-               load_image(argv[2], 0x0);
+               ret = load_image(argv[2], 0x0);
        } else if (argc == 4 && !strcmp(argv[1], "load")) {
                ulong load_addr;
 
                load_addr = simple_strtoul(argv[3], NULL, 16);
-               load_image(argv[2], load_addr);
+               ret = load_image(argv[2], load_addr);
        } else {
                return CMD_RET_USAGE;
        }
 
-       return 0;
+       return ret;
 }
 
 U_BOOT_CMD(afs, 4, 0, do_afs, "show AFS partitions",
           "no arguments\n"
           "    - list images in flash\n"
+          "exists <image>\n"
+          "    - returns 1 if an image exists, else 0\n"
           "load <image>\n"
           "    - load an image to the location indicated in the header\n"
           "load <image> 0x<address>\n"