spl: ymodem: Add support for loading full fitImages
authorMarek Vasut <marex@denx.de>
Wed, 6 Mar 2019 21:04:31 +0000 (22:04 +0100)
committerTom Rini <trini@konsulko.com>
Mon, 22 Apr 2019 22:13:23 +0000 (18:13 -0400)
Add support for loading fully featured fitImages over YModem in SPL.
This is useful when various advanced features of full fitImages are
needed in SPL.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Tom Rini <trini@konsulko.com>
common/spl/spl_ymodem.c

index 25226e9a33565d0c1d14076e187a38b63094d664..fa539ecd7af4f4f3989c2704084c8bfb1bcb13fc 100644 (file)
@@ -89,7 +89,25 @@ static int spl_ymodem_load_image(struct spl_image_info *spl_image,
        if (res <= 0)
                goto end_stream;
 
-       if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) &&
+       if (IS_ENABLED(CONFIG_SPL_LOAD_FIT_FULL) &&
+           image_get_magic((struct image_header *)buf) == FDT_MAGIC) {
+               addr = CONFIG_SYS_LOAD_ADDR;
+               ih = (struct image_header *)addr;
+
+               memcpy((void *)addr, buf, res);
+               size += res;
+               addr += res;
+
+               while ((res = xyzModem_stream_read(buf, BUF_SIZE, &err)) > 0) {
+                       memcpy((void *)addr, buf, res);
+                       size += res;
+                       addr += res;
+               }
+
+               ret = spl_parse_image_header(spl_image, ih);
+               if (ret)
+                       return ret;
+       } else if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) &&
            image_get_magic((struct image_header *)buf) == FDT_MAGIC) {
                struct spl_load_info load;
                struct ymodem_fit_info info;