spl: ymodem: Move GZ handling out of YModem session
authorMarek Vasut <marek.vasut+renesas@gmail.com>
Tue, 12 Mar 2019 03:00:09 +0000 (04:00 +0100)
committerMarek Vasut <marex@denx.de>
Tue, 9 Apr 2019 16:19:09 +0000 (18:19 +0200)
In case the gunzip() call fails, it will print an error message.
If that happens within the YModem session, the error message will
not be displayed and would be useless. Move the gunzip() call out
of the YModem session to make those possible error messages visible.

Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Tom Rini <trini@konsulko.com>
common/spl/spl_ymodem.c

index 8058fd6a7c79f2dae6735b9cfe0bd88049faaf56..25226e9a33565d0c1d14076e187a38b63094d664 100644 (file)
@@ -75,7 +75,7 @@ static int spl_ymodem_load_image(struct spl_image_info *spl_image,
        int ret;
        connection_info_t info;
        char buf[BUF_SIZE];
-       struct image_header *ih;
+       struct image_header *ih = NULL;
        ulong addr = 0;
 
        info.mode = xyzModem_ymodem;
@@ -128,18 +128,6 @@ static int spl_ymodem_load_image(struct spl_image_info *spl_image,
                        size += res;
                        addr += res;
                }
-
-#ifdef CONFIG_SPL_GZIP
-               if (ih->ih_comp == IH_COMP_GZIP) {
-                       if (gunzip((void *)(spl_image->load_addr + sizeof(*ih)),
-                                  CONFIG_SYS_BOOTM_LEN,
-                                  (void *)(CONFIG_SYS_LOAD_ADDR + sizeof(*ih)),
-                                  &size)) {
-                               puts("Uncompressing error\n");
-                               return -EIO;
-                       }
-               }
-#endif
        }
 
 end_stream:
@@ -148,6 +136,20 @@ end_stream:
 
        printf("Loaded %lu bytes\n", size);
 
+#ifdef CONFIG_SPL_GZIP
+       if (!(IS_ENABLED(CONFIG_SPL_LOAD_FIT) &&
+             image_get_magic((struct image_header *)buf) == FDT_MAGIC) &&
+           (ih->ih_comp == IH_COMP_GZIP)) {
+               if (gunzip((void *)(spl_image->load_addr + sizeof(*ih)),
+                          CONFIG_SYS_BOOTM_LEN,
+                          (void *)(CONFIG_SYS_LOAD_ADDR + sizeof(*ih)),
+                          &size)) {
+                       puts("Uncompressing error\n");
+                       return -EIO;
+               }
+       }
+#endif
+
        return ret;
 }
 SPL_LOAD_IMAGE_METHOD("UART", 0, BOOT_DEVICE_UART, spl_ymodem_load_image);