spl: ymodem: Move GZ handling out of YModem session

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>
This commit is contained in:
Marek Vasut 2019-03-12 04:00:09 +01:00 committed by Marek Vasut
parent 6d8dbe4862
commit d574c19b89

View 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);