]> git.sur5r.net Git - u-boot/blobdiff - common/cmd_usb.c
Merge branch 'master_merge_new-image' of /home/tur/git/u-boot
[u-boot] / common / cmd_usb.c
index 904df7159f42c7b5960717bcfbd6ad1df80c1ae8..23413b510352041fecc7c93cf7a7eacc99ec3ccd 100644 (file)
@@ -29,9 +29,6 @@
 #include <command.h>
 #include <asm/byteorder.h>
 #include <part.h>
-
-#if (CONFIG_COMMANDS & CFG_CMD_USB)
-
 #include <usb.h>
 
 #ifdef CONFIG_USB_STORAGE
@@ -314,11 +311,13 @@ int do_usbboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        char *boot_device = NULL;
        char *ep;
        int dev, part=1, rcode;
-       ulong addr, cnt, checksum;
+       ulong addr, cnt;
        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:
@@ -389,25 +388,36 @@ int do_usbboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
                return 1;
        }
 
-       hdr = (image_header_t *)addr;
+       switch (genimg_get_format ((void *)addr)) {
+       case IMAGE_FORMAT_LEGACY:
+               hdr = (image_header_t *)addr;
 
-       if (ntohl(hdr->ih_magic) != IH_MAGIC) {
-               printf("\n** Bad Magic Number **\n");
-               return 1;
-       }
+               if (!image_check_hcrc (hdr)) {
+                       puts ("\n** Bad Header Checksum **\n");
+                       return 1;
+               }
+
+               image_print_contents (hdr);
 
-       checksum = ntohl(hdr->ih_hcrc);
-       hdr->ih_hcrc = 0;
+               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)) {
+                       puts ("** Bad FIT image format\n");
+                       return 1;
+               }
+               puts ("Fit image detected...\n");
 
-       if (crc32 (0, (uchar *)hdr, sizeof(image_header_t)) != checksum) {
-               puts ("\n** Bad Header Checksum **\n");
+               cnt = fit_get_size (fit_hdr);
+               break;
+#endif
+       default:
+               puts ("** Unknown image type\n");
                return 1;
        }
-       hdr->ih_hcrc = htonl(checksum); /* restore checksum for later use */
 
-       print_image_hdr (hdr);
-
-       cnt = (ntohl(hdr->ih_size) + sizeof(image_header_t));
        cnt += info.blksz - 1;
        cnt /= info.blksz;
        cnt -= 1;
@@ -417,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;
 
@@ -532,8 +549,7 @@ int do_usb (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        }
 
        if (strncmp(argv[1], "stor", 4) == 0) {
-               usb_stor_info();
-               return 0;
+               return usb_stor_info();
        }
 
        if (strncmp(argv[1],"part",4) == 0) {
@@ -608,12 +624,6 @@ int do_usb (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        return 1;
 }
 
-
-#endif /* (CONFIG_COMMANDS & CFG_CMD_USB) */
-
-
-#if (CONFIG_COMMANDS & CFG_CMD_USB)
-
 #ifdef CONFIG_USB_STORAGE
 U_BOOT_CMD(
        usb,    5,      1,      do_usb,
@@ -645,4 +655,3 @@ U_BOOT_CMD(
        "usb  info [dev] - show available USB devices\n"
 );
 #endif
-#endif