summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-k3/am62ax/am62a7_init.c4
-rw-r--r--arch/arm/mach-k3/am62px/am62p5_init.c4
-rw-r--r--arch/arm/mach-k3/am62x/am625_init.c4
-rw-r--r--arch/arm/mach-k3/common.h1
-rw-r--r--arch/arm/mach-k3/r5/common.c17
5 files changed, 29 insertions, 1 deletions
diff --git a/arch/arm/mach-k3/am62ax/am62a7_init.c b/arch/arm/mach-k3/am62ax/am62a7_init.c
index 48d578e7d6f..7de23461163 100644
--- a/arch/arm/mach-k3/am62ax/am62a7_init.c
+++ b/arch/arm/mach-k3/am62ax/am62a7_init.c
@@ -240,5 +240,9 @@ 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();
+#else
return get_boot_device();
+#endif
}
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..02b7414e21c 100644
--- a/arch/arm/mach-k3/am62x/am625_init.c
+++ b/arch/arm/mach-k3/am62x/am625_init.c
@@ -327,5 +327,9 @@ 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();
+#else
return get_boot_device();
+#endif
}
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 f0654102737..bf5e7903dcb 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 (loader && bootdev.boot_device != loader->boot_device)