[PATCH] arm: imx: imx8m: soc: Add support for 'boot_device' and 'boot_instance' environment variables
William MARTIN
william.martin at muxen.fr
Fri Nov 14 15:29:59 CET 2025
Some SoCs have supports for 'boot_device' and 'boot_instance' environment
variable. Those variables help to choose the right boot media during the
execution of the boot command.
The i.MX8M SoC doesn't have support for those variables but provides
internally all the needed information to create those variables.
Fill this lack adding support for those variables in the i.MX8M SoC.
Signed-off-by: William MARTIN <william.martin at muxen.fr>
---
arch/arm/mach-imx/imx8m/soc.c | 67 +++++++++++++++++++++++++++++++++++
1 file changed, 67 insertions(+)
diff --git a/arch/arm/mach-imx/imx8m/soc.c b/arch/arm/mach-imx/imx8m/soc.c
index 85dc8b51a14..66c2cddf3bc 100644
--- a/arch/arm/mach-imx/imx8m/soc.c
+++ b/arch/arm/mach-imx/imx8m/soc.c
@@ -1471,6 +1471,71 @@ void reset_cpu(void)
#endif
#if defined(CONFIG_ARCH_MISC_INIT)
+static void setup_boot_mode(void)
+{
+ enum boot_device dev = get_boot_device();
+
+ log_debug("setup_boot_mode = %u\n", dev);
+
+ switch (dev) {
+ case USB_BOOT:
+ env_set("boot_device", "usb");
+ env_set("boot_instance", "0");
+ break;
+
+ case QSPI_BOOT:
+ env_set("boot_device", "spi-nand");
+ env_set("boot_instance", "0");
+ break;
+
+ case SPI_NOR_BOOT:
+ env_set("boot_device", "nor");
+ env_set("boot_instance", "0");
+ break;
+
+ case NAND_BOOT:
+ env_set("boot_device", "nand");
+ env_set("boot_instance", "0");
+ break;
+
+ case SD1_BOOT:
+ env_set("boot_device", "sdcard");
+ env_set("boot_instance", "1");
+ break;
+
+ case SD2_BOOT:
+ env_set("boot_device", "sdcard");
+ env_set("boot_instance", "2");
+ break;
+
+ case SD3_BOOT:
+ env_set("boot_device", "sdcard");
+ env_set("boot_instance", "3");
+ break;
+
+ case MMC1_BOOT:
+ env_set("boot_device", "mmc");
+ env_set("boot_instance", "1");
+ break;
+
+ case MMC2_BOOT:
+ env_set("boot_device", "mmc");
+ env_set("boot_instance", "2");
+ break;
+
+ case MMC3_BOOT:
+ env_set("boot_device", "mmc");
+ env_set("boot_instance", "3");
+ break;
+
+ default:
+ env_set("boot_device", "invalid");
+ env_set("boot_instance", "");
+ log_err("unexpected boot mode = %x\n", dev);
+ break;
+ }
+}
+
int arch_misc_init(void)
{
if (IS_ENABLED(CONFIG_FSL_CAAM)) {
@@ -1482,6 +1547,8 @@ int arch_misc_init(void)
printf("Failed to initialize caam_jr: %d\n", ret);
}
+ setup_boot_mode();
+
return 0;
}
#endif
--
2.47.3
More information about the U-Boot
mailing list