[PATCH v9 4/8] mach-k3: common: support only MMC in R5 falcon mode
Andrew Davis
afd at ti.com
Thu Oct 30 14:55:40 CET 2025
On 10/30/25 12:19 AM, Anshul Dalal wrote:
> To simplify the boot process and prevent the R5 SPL size from growing,
> this patch restricts the boot media to load the next stage payload
> (tifalcon.bin and kernel FIT) from MMC only.
>
Is R5 SPL size the only reason? This seems rather restrictive to only
support one boot mode with all this..
> Signed-off-by: Anshul Dalal <anshuld at ti.com>
> ---
> arch/arm/mach-k3/am62ax/am62a7_init.c | 3 +++
> arch/arm/mach-k3/am62px/am62p5_init.c | 4 ++++
> arch/arm/mach-k3/am62x/am625_init.c | 3 +++
> arch/arm/mach-k3/common.h | 1 +
> arch/arm/mach-k3/r5/common.c | 17 ++++++++++++++++-
> 5 files changed, 27 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm/mach-k3/am62ax/am62a7_init.c b/arch/arm/mach-k3/am62ax/am62a7_init.c
> index 48d578e7d6f..1c8a5fd2a35 100644
> --- a/arch/arm/mach-k3/am62ax/am62a7_init.c
> +++ b/arch/arm/mach-k3/am62ax/am62a7_init.c
> @@ -240,5 +240,8 @@ u32 spl_mmc_boot_mode(struct mmc *mmc, const u32 boot_device)
>
> u32 spl_boot_device(void)
> {
> +#if IS_ENABLED(CONFIG_SPL_OS_BOOT_SECURE) && !IS_ENABLED(CONFIG_ARM64)
The check for CONFIG_ARM64 might not be needed, what if we want to
falcon boot from A53 SPL right into Linux?
> + return k3_r5_falcon_bootmode();
> +#endif
This should be an #else capturing the below return call, otherwise
think about what the function looks like after the preprocessor step
if the above is true:
u32 spl_boot_device(void)
{
return k3_r5_falcon_bootmode();
return get_boot_device();
}
just seems odd.
Andrew
> return get_boot_device();
> }
> diff --git a/arch/arm/mach-k3/am62px/am62p5_init.c b/arch/arm/mach-k3/am62px/am62p5_init.c
> index aebd5200b0d..4c215d5cebe 100644
> --- a/arch/arm/mach-k3/am62px/am62p5_init.c
> +++ b/arch/arm/mach-k3/am62px/am62p5_init.c
> @@ -375,6 +375,10 @@ u32 spl_boot_device(void)
> u32 devstat = readl(CTRLMMR_MAIN_DEVSTAT);
> u32 bootmedia;
>
> +#if IS_ENABLED(CONFIG_SPL_OS_BOOT_SECURE) && !IS_ENABLED(CONFIG_ARM64)
> + return k3_r5_falcon_bootmode();
> +#endif
> +
> if (bootindex == K3_PRIMARY_BOOTMODE)
> bootmedia = __get_primary_bootmedia(devstat);
> else
> diff --git a/arch/arm/mach-k3/am62x/am625_init.c b/arch/arm/mach-k3/am62x/am625_init.c
> index 14f93ac998f..44b8d2654b2 100644
> --- a/arch/arm/mach-k3/am62x/am625_init.c
> +++ b/arch/arm/mach-k3/am62x/am625_init.c
> @@ -327,5 +327,8 @@ u32 spl_mmc_boot_mode(struct mmc *mmc, const u32 boot_device)
>
> u32 spl_boot_device(void)
> {
> +#if IS_ENABLED(CONFIG_SPL_OS_BOOT_SECURE) && !IS_ENABLED(CONFIG_ARM64)
> + return k3_r5_falcon_bootmode();
> +#endif
> return get_boot_device();
> }
> diff --git a/arch/arm/mach-k3/common.h b/arch/arm/mach-k3/common.h
> index 5807d358464..cd3e19374dc 100644
> --- a/arch/arm/mach-k3/common.h
> +++ b/arch/arm/mach-k3/common.h
> @@ -54,6 +54,7 @@ int shutdown_mcu_r5_core1(void);
>
> #if IS_ENABLED(CONFIG_SPL_OS_BOOT_SECURE) && !IS_ENABLED(CONFIG_ARM64)
> int k3_r5_falcon_bootmode(void);
> +int k3_r5_falcon_prep(void);
> #endif
>
> #if (IS_ENABLED(CONFIG_K3_QOS))
> diff --git a/arch/arm/mach-k3/r5/common.c b/arch/arm/mach-k3/r5/common.c
> index 439dd92ef54..aa94c0c1956 100644
> --- a/arch/arm/mach-k3/r5/common.c
> +++ b/arch/arm/mach-k3/r5/common.c
> @@ -391,6 +391,21 @@ int spl_start_uboot(void)
> return 0;
> }
>
> +int k3_r5_falcon_bootmode(void)
> +{
> + char *mmcdev = env_get("mmcdev");
> +
> + if (!mmcdev)
> + return BOOT_DEVICE_NOBOOT;
> +
> + if (strncmp(mmcdev, "0", sizeof("0")) == 0)
> + return BOOT_DEVICE_MMC1;
> + else if (strncmp(mmcdev, "1", sizeof("1")) == 0)
> + return BOOT_DEVICE_MMC2;
> + else
> + return BOOT_DEVICE_NOBOOT;
> +}
> +
> int k3_r5_falcon_prep(void)
> {
> struct spl_image_loader *loader, *drv;
> @@ -402,7 +417,7 @@ int k3_r5_falcon_prep(void)
> memset(&kernel_image, '\0', sizeof(kernel_image));
> drv = ll_entry_start(struct spl_image_loader, spl_image_loader);
> n_ents = ll_entry_count(struct spl_image_loader, spl_image_loader);
> - bootdev.boot_device = spl_boot_device();
> + bootdev.boot_device = k3_r5_falcon_bootmode();
>
> for (loader = drv; loader != drv + n_ents; loader++) {
> if (bootdev.boot_device != loader->boot_device)
More information about the U-Boot
mailing list