[U-Boot] [PATCH PATCH v4 01/15] spl: fit: don't load the firmware twice

Andreas Dannenberg dannenberg at ti.com
Tue Aug 13 20:56:52 UTC 2019


On Mon, Aug 05, 2019 at 11:43:56AM +0200, Jean-Jacques Hiblot wrote:
> When u-boot.img is a FIT image generated automatically by mkimage, the
> configuration node has the following structure:
> conf-1 {
>    description = "k3-am654-base-board";
>    firmware = "firmware-1";
>    loadables = "firmware-1";
>    fdt = "fdt-1";
> };
> 
> The firmware is referenced twice. Once by the 'firmware' property and
> once by the 'loadables' property. Currently this result in the firmware
> being loaded twice. This is not a big problem but has an impact on the
> boot time.
> Fixing it by not loading a loadable image if it is also the firmware image.
> 
> Signed-off-by: Jean-Jacques Hiblot <jjhiblot at ti.com>
> ---


Tested-by: Andreas Dannenberg <dannenberg at ti.com>


I was working on getting UART boot to work on TI's AM654x devices and
just ran into this very issue (took a while to root cause). Unlike when
booting from MMC it's not just redundant to load the same image (U-Boot
proper in my case) twice -- it simply won't work.

--
Andreas Dannenberg
Texas Instruments Inc



> 
> Changes in v4: New
> 
>  common/spl/spl_fit.c | 10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c
> index 969f7775c1..0de18e3975 100644
> --- a/common/spl/spl_fit.c
> +++ b/common/spl/spl_fit.c
> @@ -361,6 +361,7 @@ int spl_load_simple_fit(struct spl_image_info *spl_image,
>  	int images, ret;
>  	int base_offset, hsize, align_len = ARCH_DMA_MINALIGN - 1;
>  	int index = 0;
> +	int firmware_node;
>  
>  	/*
>  	 * For FIT with external data, figure out where the external images
> @@ -490,6 +491,7 @@ int spl_load_simple_fit(struct spl_image_info *spl_image,
>  		spl_fit_append_fdt(spl_image, info, sector, fit,
>  				   images, base_offset);
>  
> +	firmware_node = node;
>  	/* Now check if there are more images for us to load */
>  	for (; ; index++) {
>  		uint8_t os_type = IH_OS_INVALID;
> @@ -498,6 +500,14 @@ int spl_load_simple_fit(struct spl_image_info *spl_image,
>  		if (node < 0)
>  			break;
>  
> +		/*
> +		 * if the firmware is also a loadable, skip it because
> +		 * it already has been loaded. This is typically the case with
> +		 * u-boot.img generated by mkimage.
> +		 */
> +		if (firmware_node == node)
> +			continue;
> +
>  		ret = spl_load_fit_image(info, sector, fit, base_offset, node,
>  					 &image_info);
>  		if (ret < 0)
> -- 
> 2.17.1
> 


More information about the U-Boot mailing list