summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorMarian Balakowicz <m8@semihalf.com>2008-03-12 10:33:01 +0100
committerMarian Balakowicz <m8@semihalf.com>2008-03-12 10:33:01 +0100
commit09475f7527460e426c0e0628fc5b8f3754fbaa23 (patch)
tree6b1936334756e2e5d526f799b2324baab12d3b24 /common
parent1b7897f28d49a80d78d760ec6f6f11dc0f914338 (diff)
[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>
Diffstat (limited to 'common')
-rw-r--r--common/cmd_doc.c34
-rw-r--r--common/cmd_fdc.c27
-rw-r--r--common/cmd_ide.c25
-rw-r--r--common/cmd_nand.c65
-rw-r--r--common/cmd_scsi.c26
-rw-r--r--common/cmd_usb.c27
6 files changed, 140 insertions, 64 deletions
diff --git a/common/cmd_doc.c b/common/cmd_doc.c
index 293b1aa6745..bf2f0a95fb2 100644
--- a/common/cmd_doc.c
+++ b/common/cmd_doc.c
@@ -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;
diff --git a/common/cmd_fdc.c b/common/cmd_fdc.c
index 80301b9d527..bf283702d31 100644
--- a/common/cmd_fdc.c
+++ b/common/cmd_fdc.c
@@ -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];
diff --git a/common/cmd_ide.c b/common/cmd_ide.c
index 79b7dfb7fc7..6a67dd69f31 100644
--- a/common/cmd_ide.c
+++ b/common/cmd_ide.c
@@ -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 */
diff --git a/common/cmd_nand.c b/common/cmd_nand.c
index 86959dc2c01..9a168eab2f3 100644
--- a/common/cmd_nand.c
+++ b/common/cmd_nand.c
@@ -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;
diff --git a/common/cmd_scsi.c b/common/cmd_scsi.c
index 786880521b9..f49531e96b7 100644
--- a/common/cmd_scsi.c
+++ b/common/cmd_scsi.c
@@ -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;
diff --git a/common/cmd_usb.c b/common/cmd_usb.c
index 8ee7d27675e..bf56c6ac16b 100644
--- a/common/cmd_usb.c
+++ b/common/cmd_usb.c
@@ -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;