[new uImage] Add new uImage format handling to other bootm related commands
authorMarian Balakowicz <m8@semihalf.com>
Wed, 12 Mar 2008 09:33:01 +0000 (10:33 +0100)
committerMarian Balakowicz <m8@semihalf.com>
Wed, 12 Mar 2008 09:33:01 +0000 (10:33 +0100)
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>
common/cmd_doc.c
common/cmd_fdc.c
common/cmd_ide.c
common/cmd_nand.c
common/cmd_scsi.c
common/cmd_usb.c

index 293b1aa6745eab3fc6c3cc5eb24cdc72a630f7cf..bf2f0a95fb2a40d98742193f266dbe87555b154a 100644 (file)
@@ -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;
index 80301b9d527e07241d0bc519be795c966fc782c3..bf283702d315077290194d23f20e372986d9a10d 100644 (file)
@@ -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];
index 79b7dfb7fc7299bf0f7fd37b5bab0f46e98f31ff..6a67dd69f31d3674c93b1413efcec315181028f4 100644 (file)
@@ -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 */
 
index 86959dc2c011d6f28487e10e6fa339c7e6ae3562..9a168eab2f3d8390d7b7afd1d9a0aa80e68c982c 100644 (file)
@@ -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;
index 786880521b9c4a4a42ee09cea30e941beaa5ca95..f49531e96b708d5d0de7fd2cc665e2216f48905a 100644 (file)
@@ -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;
 
index 8ee7d27675eb18393e7cd1b790cb95375ad68194..bf56c6ac16b843763d79faf7f725c64308d515e0 100644 (file)
@@ -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;