[U-Boot,v6,01/13] spl: fit: don't load the firmware twice
diff mbox series

Message ID 20191022143922.10205-2-jjhiblot@ti.com
State Needs Review / ACK
Delegated to: Tom Rini
Headers show
  • Add support for applications of overlays in SPL
Related show

Commit Message

Jean-Jacques Hiblot Oct. 22, 2019, 2:39 p.m. UTC
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>
Reviewed-by: Simon Glass <sjg@chromium.org>
Tested-by: Andreas Dannenberg <dannenberg@ti.com>

Changes in v6: None
Changes in v5: None
Changes in v4: None
Changes in v3: None
Changes in v2: None

 common/spl/spl_fit.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff mbox series

diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c
index cbc00a4e7c..346f9edaa5 100644
--- a/common/spl/spl_fit.c
+++ b/common/spl/spl_fit.c
@@ -373,6 +373,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
@@ -502,6 +503,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;
@@ -510,6 +512,14 @@  int spl_load_simple_fit(struct spl_image_info *spl_image,
 		if (node < 0)
+		/*
+		 * 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,
 		if (ret < 0)