diff options
author | Stefano Babic <sbabic@denx.de> | 2015-10-15 15:34:14 +0200 |
---|---|---|
committer | Stefano Babic <sbabic@denx.de> | 2015-10-15 15:34:14 +0200 |
commit | f74dc51bcab924a30e41b33981a4f96af3f9dd57 (patch) | |
tree | 560eead1ca9984554be3a5c9a5332b531c102cb0 /common/cmd_armflash.c | |
parent | cf04ad3219260c3c39ec3dbfe2427e3463e8dbd5 (diff) | |
parent | 297faccca2235e359012118495b9b73451d54bb9 (diff) |
Merge branch 'master' of git://git.denx.de/u-boot
Diffstat (limited to 'common/cmd_armflash.c')
-rw-r--r-- | common/cmd_armflash.c | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/common/cmd_armflash.c b/common/cmd_armflash.c index 1db92b0599..af453f7b3b 100644 --- a/common/cmd_armflash.c +++ b/common/cmd_armflash.c @@ -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" |