summaryrefslogtreecommitdiff
path: root/common/cmd_doc.c
diff options
context:
space:
mode:
authorBartlomiej Sieka <tur@semihalf.com>2008-03-26 08:38:06 (GMT)
committerBartlomiej Sieka <tur@semihalf.com>2008-03-26 08:38:06 (GMT)
commit27f33e9f45ef7f9685cbdc65066a1828e85dde4f (patch)
tree5828044d71e5caa3bec4d05c6c48793df0cd17a3 /common/cmd_doc.c
parent18e69a35efbb078403db0c0063986470dad7d082 (diff)
parent388b82fddc7c05596f3f615f190da0448227dc82 (diff)
downloadu-boot-27f33e9f45ef7f9685cbdc65066a1828e85dde4f.tar.xz
Merge branch 'new-image' of git://www.denx.de/git/u-boot-testing
Conflicts: common/cmd_bootm.c cpu/mpc8xx/cpu.c Signed-off-by: Bartlomiej Sieka <tur@semihalf.com>
Diffstat (limited to 'common/cmd_doc.c')
-rw-r--r--common/cmd_doc.c38
1 files changed, 31 insertions, 7 deletions
diff --git a/common/cmd_doc.c b/common/cmd_doc.c
index 3d717c0..83aba37 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) {
@@ -261,21 +264,36 @@ int do_docboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
}
show_boot_progress (38);
- hdr = (image_header_t *)addr;
+ switch (genimg_get_format ((void *)addr)) {
+ case IMAGE_FORMAT_LEGACY:
+ hdr = (image_header_t *)addr;
- if (hdr->ih_magic == IH_MAGIC) {
+ image_print_contents (hdr);
- print_image_hdr (hdr);
+ cnt = image_get_image_size (hdr);
+ break;
+#if defined(CONFIG_FIT)
+ case IMAGE_FORMAT_FIT:
+ fit_hdr = (const void *)addr;
+ if (!fit_check_format (fit_hdr)) {
+ show_boot_progress (-130);
+ puts ("** Bad FIT image format\n");
+ return 1;
+ }
+ show_boot_progress (131);
+ puts ("Fit image detected...\n");
- cnt = (ntohl(hdr->ih_size) + sizeof(image_header_t));
- cnt -= SECTORSIZE;
- } else {
- puts ("\n** Bad Magic Number **\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);
@@ -284,6 +302,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;