
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@ti.com
Tested-by: Andreas Dannenberg dannenberg@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