mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
[new uImage] Add new uImage format handling to other bootm related commands
Updated commands: docboot - cmd_doc.c fdcboot - cmd_fdc.c diskboot - cmd_ide.c nboot - cmd_nand.c scsiboot - cmd_scsi.c usbboot - cmd_usb.c Signed-off-by: Marian Balakowicz <m8@semihalf.com>
This commit is contained in:
parent
1b7897f28d
commit
09475f7527
6 changed files with 140 additions and 64 deletions
|
@ -205,6 +205,9 @@ int do_docboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
ulong offset = 0;
|
||||
image_header_t *hdr;
|
||||
int rcode = 0;
|
||||
#if defined(CONFIG_FIT)
|
||||
const void *fit_hdr;
|
||||
#endif
|
||||
|
||||
show_boot_progress (34);
|
||||
switch (argc) {
|
||||
|
@ -265,29 +268,30 @@ int do_docboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
case IMAGE_FORMAT_LEGACY:
|
||||
hdr = (image_header_t *)addr;
|
||||
|
||||
if (image_check_magic (hdr)) {
|
||||
image_print_contents (hdr);
|
||||
|
||||
image_print_contents (hdr);
|
||||
|
||||
cnt = image_get_image_size (hdr);
|
||||
cnt -= SECTORSIZE;
|
||||
} else {
|
||||
puts ("\n** Bad Magic Number **\n");
|
||||
show_boot_progress (-39);
|
||||
return 1;
|
||||
}
|
||||
cnt = image_get_image_size (hdr);
|
||||
break;
|
||||
#if defined(CONFIG_FIT)
|
||||
case IMAGE_FORMAT_FIT:
|
||||
fit_unsupported ("docboot");
|
||||
return 1;
|
||||
fit_hdr = (const void *)addr;
|
||||
if (!fit_check_format (fit_hdr)) {
|
||||
puts ("** Bad FIT image format\n");
|
||||
return 1;
|
||||
}
|
||||
puts ("Fit image detected...\n");
|
||||
|
||||
cnt = fit_get_size (fit_hdr);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
show_boot_progress (-39);
|
||||
puts ("** Unknown image type\n");
|
||||
return 1;
|
||||
}
|
||||
show_boot_progress (39);
|
||||
|
||||
cnt -= SECTORSIZE;
|
||||
if (doc_rw (doc_dev_desc + dev, 1, offset + SECTORSIZE, cnt,
|
||||
NULL, (u_char *)(addr+SECTORSIZE))) {
|
||||
printf ("** Read error on %d\n", dev);
|
||||
|
@ -296,6 +300,12 @@ int do_docboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
}
|
||||
show_boot_progress (40);
|
||||
|
||||
#if defined(CONFIG_FIT)
|
||||
/* This cannot be done earlier, we need complete FIT image in RAM first */
|
||||
if (genimg_get_format ((void *)addr) == IMAGE_FORMAT_FIT)
|
||||
fit_print_contents ((const void *)addr);
|
||||
#endif
|
||||
|
||||
/* Loading ok, update default load address */
|
||||
|
||||
load_addr = addr;
|
||||
|
|
|
@ -788,6 +788,9 @@ int do_fdcboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
int i,nrofblk;
|
||||
char *ep;
|
||||
int rcode = 0;
|
||||
#if defined(CONFIG_FIT)
|
||||
const void *fit_hdr;
|
||||
#endif
|
||||
|
||||
switch (argc) {
|
||||
case 1:
|
||||
|
@ -839,18 +842,21 @@ int do_fdcboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
switch (genimg_get_format ((void *)addr)) {
|
||||
case IMAGE_FORMAT_LEGACY:
|
||||
hdr = (image_header_t *)addr;
|
||||
if (!image_check_magic (hdr)) {
|
||||
printf ("Bad Magic Number\n");
|
||||
return 1;
|
||||
}
|
||||
image_print_contents (hdr);
|
||||
|
||||
imsize = image_get_image_size (hdr);
|
||||
break;
|
||||
#if defined(CONFIG_FIT)
|
||||
case IMAGE_FORMAT_FIT:
|
||||
fit_unsupported ("fdcboot");
|
||||
return 1;
|
||||
fit_hdr = (const void *)addr;
|
||||
if (!fit_check_format (fit_hdr)) {
|
||||
puts ("** Bad FIT image format\n");
|
||||
return 1;
|
||||
}
|
||||
puts ("Fit image detected...\n");
|
||||
|
||||
imsize = fit_get_size (fit_hdr);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
puts ("** Unknown image type\n");
|
||||
|
@ -872,9 +878,16 @@ int do_fdcboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
printf("OK %ld Bytes loaded.\n",imsize);
|
||||
|
||||
flush_cache (addr, imsize);
|
||||
/* Loading ok, update default load address */
|
||||
|
||||
#if defined(CONFIG_FIT)
|
||||
/* This cannot be done earlier, we need complete FIT image in RAM first */
|
||||
if (genimg_get_format ((void *)addr) == IMAGE_FORMAT_FIT)
|
||||
fit_print_contents ((const void *)addr);
|
||||
#endif
|
||||
|
||||
/* Loading ok, update default load address */
|
||||
load_addr = addr;
|
||||
|
||||
/* Check if we should attempt an auto-start */
|
||||
if (((ep = getenv("autostart")) != NULL) && (strcmp(ep,"yes") == 0)) {
|
||||
char *local_args[2];
|
||||
|
|
|
@ -370,6 +370,9 @@ int do_diskboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
disk_partition_t info;
|
||||
image_header_t *hdr;
|
||||
int rcode = 0;
|
||||
#if defined(CONFIG_FIT)
|
||||
const void *fit_hdr;
|
||||
#endif
|
||||
|
||||
show_boot_progress (41);
|
||||
switch (argc) {
|
||||
|
@ -450,11 +453,6 @@ int do_diskboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
case IMAGE_FORMAT_LEGACY:
|
||||
hdr = (image_header_t *)addr;
|
||||
|
||||
if (!image_check_magic (hdr)) {
|
||||
printf("\n** Bad Magic Number **\n");
|
||||
show_boot_progress (-49);
|
||||
return 1;
|
||||
}
|
||||
show_boot_progress (49);
|
||||
|
||||
if (!image_check_hcrc (hdr)) {
|
||||
|
@ -470,10 +468,18 @@ int do_diskboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
break;
|
||||
#if defined(CONFIG_FIT)
|
||||
case IMAGE_FORMAT_FIT:
|
||||
fit_unsupported ("diskboot");
|
||||
return 1;
|
||||
fit_hdr = (const void *)addr;
|
||||
if (!fit_check_format (fit_hdr)) {
|
||||
puts ("** Bad FIT image format\n");
|
||||
return 1;
|
||||
}
|
||||
puts ("Fit image detected...\n");
|
||||
|
||||
cnt = fit_get_size (fit_hdr);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
show_boot_progress (-49);
|
||||
puts ("** Unknown image type\n");
|
||||
return 1;
|
||||
}
|
||||
|
@ -490,6 +496,11 @@ int do_diskboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
}
|
||||
show_boot_progress (51);
|
||||
|
||||
#if defined(CONFIG_FIT)
|
||||
/* This cannot be done earlier, we need complete FIT image in RAM first */
|
||||
if (genimg_get_format ((void *)addr) == IMAGE_FORMAT_FIT)
|
||||
fit_print_contents ((const void *)addr);
|
||||
#endif
|
||||
|
||||
/* Loading ok, update default load address */
|
||||
|
||||
|
|
|
@ -484,6 +484,9 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,
|
|||
ulong cnt;
|
||||
image_header_t *hdr;
|
||||
int jffs2 = 0;
|
||||
#if defined(CONFIG_FIT)
|
||||
const void *fit_hdr;
|
||||
#endif
|
||||
|
||||
s = strchr(cmd, '.');
|
||||
if (s != NULL &&
|
||||
|
@ -516,24 +519,25 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,
|
|||
case IMAGE_FORMAT_LEGACY:
|
||||
hdr = (image_header_t *)addr;
|
||||
|
||||
if (!image_check_magic (hdr)) {
|
||||
printf("\n** Bad Magic Number 0x%x **\n",
|
||||
image_get_magic (hdr));
|
||||
show_boot_progress (-57);
|
||||
return 1;
|
||||
}
|
||||
show_boot_progress (57);
|
||||
|
||||
image_print_contents (hdr);
|
||||
|
||||
cnt = image_get_image_size (hdr);
|
||||
break;
|
||||
#if defined(CONFIG_FIT)
|
||||
case IMAGE_FORMAT_FIT:
|
||||
fit_unsupported ("nand_load_image");
|
||||
return 1;
|
||||
fit_hdr = (const void *)addr;
|
||||
if (!fit_check_format (fit_hdr)) {
|
||||
puts ("** Bad FIT image format\n");
|
||||
return 1;
|
||||
}
|
||||
puts ("Fit image detected...\n");
|
||||
|
||||
cnt = fit_get_size (fit_hdr);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
show_boot_progress (-57);
|
||||
puts ("** Unknown image type\n");
|
||||
return 1;
|
||||
}
|
||||
|
@ -557,6 +561,12 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,
|
|||
}
|
||||
show_boot_progress (58);
|
||||
|
||||
#if defined(CONFIG_FIT)
|
||||
/* This cannot be done earlier, we need complete FIT image in RAM first */
|
||||
if (genimg_get_format ((void *)addr) == IMAGE_FORMAT_FIT)
|
||||
fit_print_contents ((const void *)addr);
|
||||
#endif
|
||||
|
||||
/* Loading ok, update default load address */
|
||||
|
||||
load_addr = addr;
|
||||
|
@ -939,6 +949,10 @@ int do_nandboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
ulong offset = 0;
|
||||
image_header_t *hdr;
|
||||
int rcode = 0;
|
||||
#if defined(CONFIG_FIT)
|
||||
const void *fit_hdr;
|
||||
#endif
|
||||
|
||||
show_boot_progress (52);
|
||||
switch (argc) {
|
||||
case 1:
|
||||
|
@ -997,26 +1011,25 @@ int do_nandboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
switch (genimg_get_format ((void *)addr)) {
|
||||
case IMAGE_FORMAT_LEGACY:
|
||||
hdr = (image_header_t *)addr;
|
||||
image_print_contents (hdr);
|
||||
|
||||
if (image_check_magic (hdr)) {
|
||||
|
||||
image_print_contents (hdr);
|
||||
|
||||
cnt = image_get_image_size (hdr);
|
||||
cnt -= SECTORSIZE;
|
||||
} else {
|
||||
printf ("\n** Bad Magic Number 0x%x **\n",
|
||||
image_get_magic (hdr));
|
||||
show_boot_progress (-57);
|
||||
return 1;
|
||||
}
|
||||
cnt = image_get_image_size (hdr);
|
||||
cnt -= SECTORSIZE;
|
||||
break;
|
||||
#if defined(CONFIG_FIT)
|
||||
case IMAGE_FORMAT_FIT:
|
||||
fit_unsupported ("nboot");
|
||||
return 1;
|
||||
fit_hdr = (const void *)addr;
|
||||
if (!fit_check_format (fit_hdr)) {
|
||||
puts ("** Bad FIT image format\n");
|
||||
return 1;
|
||||
}
|
||||
puts ("Fit image detected...\n");
|
||||
|
||||
cnt = fit_get_size (fit_hdr);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
show_boot_progress (-57);
|
||||
puts ("** Unknown image type\n");
|
||||
return 1;
|
||||
}
|
||||
|
@ -1031,6 +1044,12 @@ int do_nandboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
}
|
||||
show_boot_progress (58);
|
||||
|
||||
#if defined(CONFIG_FIT)
|
||||
/* This cannot be done earlier, we need complete FIT image in RAM first */
|
||||
if (genimg_get_format ((void *)addr) == IMAGE_FORMAT_FIT)
|
||||
fit_print_contents ((const void *)addr);
|
||||
#endif
|
||||
|
||||
/* Loading ok, update default load address */
|
||||
|
||||
load_addr = addr;
|
||||
|
|
|
@ -211,6 +211,9 @@ int do_scsiboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
disk_partition_t info;
|
||||
image_header_t *hdr;
|
||||
int rcode = 0;
|
||||
#if defined(CONFIG_FIT)
|
||||
const void *fit_hdr;
|
||||
#endif
|
||||
|
||||
switch (argc) {
|
||||
case 1:
|
||||
|
@ -277,11 +280,6 @@ int do_scsiboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
case IMAGE_FORMAT_LEGACY:
|
||||
hdr = (image_header_t *)addr;
|
||||
|
||||
if (!image_check_magic (hdr)) {
|
||||
printf("\n** Bad Magic Number **\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!image_check_hcrc (hdr)) {
|
||||
puts ("\n** Bad Header Checksum **\n");
|
||||
return 1;
|
||||
|
@ -292,8 +290,15 @@ int do_scsiboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
break;
|
||||
#if defined(CONFIG_FIT)
|
||||
case IMAGE_FORMAT_FIT:
|
||||
fit_unsupported ("scsi");
|
||||
return 1;
|
||||
fit_hdr = (const void *)addr;
|
||||
if (!fit_check_format (fit_hdr)) {
|
||||
puts ("** Bad FIT image format\n");
|
||||
return 1;
|
||||
}
|
||||
puts ("Fit image detected...\n");
|
||||
|
||||
cnt = fit_get_size (fit_hdr);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
puts ("** Unknown image type\n");
|
||||
|
@ -309,6 +314,13 @@ int do_scsiboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
printf ("** Read error on %d:%d\n", dev, part);
|
||||
return 1;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_FIT)
|
||||
/* This cannot be done earlier, we need complete FIT image in RAM first */
|
||||
if (genimg_get_format ((void *)addr) == IMAGE_FORMAT_FIT)
|
||||
fit_print_contents ((const void *)addr);
|
||||
#endif
|
||||
|
||||
/* Loading ok, update default load address */
|
||||
load_addr = addr;
|
||||
|
||||
|
|
|
@ -315,7 +315,9 @@ int do_usbboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
disk_partition_t info;
|
||||
image_header_t *hdr;
|
||||
block_dev_desc_t *stor_dev;
|
||||
|
||||
#if defined(CONFIG_FIT)
|
||||
const void *fit_hdr;
|
||||
#endif
|
||||
|
||||
switch (argc) {
|
||||
case 1:
|
||||
|
@ -390,11 +392,6 @@ int do_usbboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
case IMAGE_FORMAT_LEGACY:
|
||||
hdr = (image_header_t *)addr;
|
||||
|
||||
if (!image_check_magic (hdr)) {
|
||||
printf("\n** Bad Magic Number **\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!image_check_hcrc (hdr)) {
|
||||
puts ("\n** Bad Header Checksum **\n");
|
||||
return 1;
|
||||
|
@ -406,8 +403,15 @@ int do_usbboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
break;
|
||||
#if defined(CONFIG_FIT)
|
||||
case IMAGE_FORMAT_FIT:
|
||||
fit_unsupported ("usbboot");
|
||||
return 1;
|
||||
fit_hdr = (const void *)addr;
|
||||
if (!fit_check_format (fit_hdr)) {
|
||||
puts ("** Bad FIT image format\n");
|
||||
return 1;
|
||||
}
|
||||
puts ("Fit image detected...\n");
|
||||
|
||||
cnt = fit_get_size (fit_hdr);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
puts ("** Unknown image type\n");
|
||||
|
@ -423,6 +427,13 @@ int do_usbboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
|
|||
printf ("\n** Read error on %d:%d\n", dev, part);
|
||||
return 1;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_FIT)
|
||||
/* This cannot be done earlier, we need complete FIT image in RAM first */
|
||||
if (genimg_get_format ((void *)addr) == IMAGE_FORMAT_FIT)
|
||||
fit_print_contents ((const void *)addr);
|
||||
#endif
|
||||
|
||||
/* Loading ok, update default load address */
|
||||
load_addr = addr;
|
||||
|
||||
|
|
Loading…
Reference in a new issue