[U-Boot] [PATCH] spl: ymodem: Add support for loading full fitImages

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 | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/common/spl/spl_ymodem.c b/common/spl/spl_ymodem.c index 577fdc69af..4c2e84e07d 100644 --- a/common/spl/spl_ymodem.c +++ b/common/spl/spl_ymodem.c @@ -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;

On 07/03/19 2:34 AM, Marek Vasut wrote:
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 | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/common/spl/spl_ymodem.c b/common/spl/spl_ymodem.c index 577fdc69af..4c2e84e07d 100644 --- a/common/spl/spl_ymodem.c +++ b/common/spl/spl_ymodem.c @@ -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;
}
okay, but you are not parsing the FIT image here. Is this even booting? or you are doing some parsing after loading?
Also this code looks very much similar to the one available in the else part. Can we re use it?
Thanks and regards, Lokesh
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;

On 3/7/19 5:59 AM, Lokesh Vutla wrote:
On 07/03/19 2:34 AM, Marek Vasut wrote:
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 | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/common/spl/spl_ymodem.c b/common/spl/spl_ymodem.c index 577fdc69af..4c2e84e07d 100644 --- a/common/spl/spl_ymodem.c +++ b/common/spl/spl_ymodem.c @@ -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;
}
okay, but you are not parsing the FIT image here. Is this even booting? or you are doing some parsing after loading?
Yes, it's booting since I'm using it for that purpose. I am doing some parsing after loading, see spl_parse_image_header(spl_image, ih); right below.
Also this code looks very much similar to the one available in the else part. Can we re use it?
No, that'd become a mess real quick, I don't want to mix those two use cases.
Thanks and regards, Lokesh
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;

On Wed, Mar 06, 2019 at 10:04:31PM +0100, Marek Vasut wrote:
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
Applied to u-boot/master, thanks!
participants (3)
-
Lokesh Vutla
-
Marek Vasut
-
Tom Rini