Hi,
On 11/10/25 9:34 PM, Marco Felsch wrote:
> Add support to handover the BL32 and BL33 entrypoints via the TF-A
> struct::bl_params in arg0. This eliminates the requirement to share the
> different load addresses between multiple binaries to lower the BSP
> integration effort.
>
> In addition to the entriespoints, this commit also adds the support to
> pass the builtin barebox DTB to OP-TEE if enabled.
>
> Signed-off-by: Marco Felsch <[email protected]>
> ---
> +config ARCH_IMX_ATF_PASS_BL_PARAMS
> + bool "Pass BL3x bl_params as arg0 to TF-A"
> + depends on ARCH_IMX_ATF
> + select ARM_ATF
> + select ARCH_HAS_EARLY_FDT_SUPPORT
> + help
> + Enable this option if you are using an upstream TF-A that uses
> + the struct::bl_params to handover all required BL32 and BL33
> + information required to start the BL32 and BL33 image.
> +
> + Since upstream TF-A v2.12 all i.MX8M support this feature except for
> + the i.MX8MQ.
I think the help text is misleading, because you still need to enable
the PBL_EARLY_FDT_LOAD option for this to actually work.
What you want instead is for the SoC symbols for i.MX8M[MNQ] to select
ARCH_HAS_EARLY_FDT_SUPPORT and then this symbol here would select
PBL_EARLY_FDT_LOAD.
PBL_EARLY_FDT_LOAD itself would lose its prompt, but you probably will
want to keep a
prompt "Include Early FDT loading support" if COMPILE_TEST
So it has coverage from the static analyzers running for sandbox.
> + if (!IS_ENABLED(CONFIG_ARCH_IMX_ATF_PASS_BL_PARAMS) || cpu_is_mx8mq()) {
Ok, good thing this is guarded, so I think that answers my questions
regarding the LIBFDT dependency.
> + ret = pbl_load_fdt(fdt, buf, bufsz);
Did you consider replacing the uncompressed DT in the handoff data if we
already spent the time to decompress it here?
> + if (!ret) {
> + unsigned long mem_base = MX8M_DDR_CSD1_BASE_ADDR;
> + unsigned long mem_sz;
> +
> + if (cpu_is_mx8mn())
> + mem_sz = imx8m_ddrc_sdram_size(16);
> + else
> + mem_sz = imx8m_ddrc_sdram_size(32);
> +
> + fdt = buf;
> + ret = fdt_fixup_mem(fdt, &mem_base, &mem_sz, 1);
> + if (ret) {
> + pr_warn("Failed to fixup FDT memory node,
> continue without\n");
> + fdt = NULL;
> + }
Ok, that answers my question about the memory being inaccurate.
Keep in mind that all this runs without MMU enabled, so it will be
slower. A FIXME comment may be apt to alert to this fact.
Thanks,
Ahmad
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |