[PATCH 5/5] spl: fit: add ramdisk load

Simon Glass sjg at chromium.org
Mon May 4 14:09:31 CEST 2026


Hi Francesco,

On 2026-04-28T20:24:41, Francesco Valla <francesco at valla.it> wrote:
> spl: fit: add ramdisk load
>
> Add ramdisk loading logic to the 'full' SPL FIT loader, as well as the
> corresponding FDT fixup. This is required for proper support of falcon
> boot using FIT images, but is useless for a U-Boot launch, so make it
> depend on SPL_OS_BOOT.
>
> Signed-off-by: Francesco Valla <francesco at valla.it>
>
> common/spl/spl.c     | 17 ++++++++++++++---
>  common/spl/spl_fit.c | 18 ++++++++++++++++--
>  include/spl.h        | 20 ++++++++++++++++++++
>  3 files changed, 50 insertions(+), 5 deletions(-)

> diff --git a/common/spl/spl.c b/common/spl/spl.c
> @@ -172,6 +172,14 @@ void spl_fixup_fdt(void *fdt_blob)
>                       return;
>               }
>       }
> +
> +#if IS_ENABLED(CONFIG_SPL_OS_BOOT)
> +     err = fdt_initrd(fdt_blob, initrd_start, initrd_end);
> +     if (err) {
> +             printf(PHASE_PROMPT "fdt_initrd err - %d\n", err);
> +             return;
> +     }
> +#endif
>  #endif
>  }

Please us 'if (IS_ENABLED(CONFIG_SPL_OS_BOOT))' - we try to avoid #if
in C files for better build-coverage.

> diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c
> @@ -1011,6 +1011,20 @@ int spl_load_fit_image(struct spl_image_info *spl_image,
>               }
>       }
>
> +     if (spl_image->os != IH_OS_U_BOOT) {
> +#ifdef CONFIG_SPL_FIT_SIGNATURE
> +             images.verify = 1;
> +#endif
> +             ret = fit_image_load(&images, virt_to_phys((void *)header), NULL,
> +                                  &fit_uname_config, IH_ARCH_DEFAULT,
> +                                  IH_TYPE_RAMDISK, -1, FIT_LOAD_OPTIONAL,
> +                                  &rd_data, &rd_len);
> +             if (ret >= 0) {
> +                     spl_image->ramdisk_addr = rd_data;
> +                     spl_image->ramdisk_size = rd_len;
> +             }
> +     }
> +

There is no SPL_OS_BOOT guard here, so the ramdisk lookup is attempted
for any non-U-Boot OS (ATF, OP-TEE, OpenSBI, Linux). Is that
intentional? With FIT_LOAD_OPTIONAL it is harmless when no ramdisk
node exists, but gating on CONFIG_IS_ENABLED(OS_BOOT) would match the
consumer side in spl_fixup_fdt()

> diff --git a/include/spl.h b/include/spl.h
> @@ -288,6 +288,8 @@ struct spl_image_info {
>       ulong entry_point;
>  #if CONFIG_IS_ENABLED(LOAD_FIT) || CONFIG_IS_ENABLED(LOAD_FIT_FULL)
>       void *fdt_addr;
> +     ulong ramdisk_addr;
> +     ulong ramdisk_size;
>  #endif

Only the LOAD_FIT_FULL path populates these (spl_load_simple_fit()
does not load a ramdisk), so they could be gated on LOAD_FIT_FULL
only. Please also add a kernel-doc comment to the new
spl_image_ramdisk_start()/spl_image_ramdisk_end() helpers describing
the units and what they return when the FIT loader is not enabled -
'end' in particular is ambiguous (inclusive vs exclusive), so please
state that it is the exclusive end address expected by fdt_initrd().

Regards,
Simon


More information about the U-Boot mailing list