diff mbox series

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

Message ID 20190306210431.9210-1-marex@denx.de
State Accepted
Commit 792dd5709144278d5e314f7010578c2947719a1f
Delegated to: Tom Rini
Headers show
Series [U-Boot] spl: ymodem: Add support for loading full fitImages | expand

Commit Message

Marek Vasut March 6, 2019, 9:04 p.m. UTC
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(-)

Comments

Lokesh Vutla March 7, 2019, 4:59 a.m. UTC | #1
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;
>
Marek Vasut March 7, 2019, 8:16 a.m. UTC | #2
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;
>>
Tom Rini April 24, 2019, 1:22 p.m. UTC | #3
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!
diff mbox series

Patch

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;