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 <[email protected]> --- 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 1fe083ae94f..f39f2e90e55 100644 --- a/arch/arm/mach-imx/imx8m/soc.c +++ b/arch/arm/mach-imx/imx8m/soc.c @@ -1472,6 +1472,71 @@ void reset_cpu(void) #endif #if IS_ENABLED(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)) { @@ -1483,6 +1548,8 @@ int arch_misc_init(void) printf("Failed to initialize caam_jr: %d\n", ret); } + setup_boot_mode(); + return 0; } #endif -- 2.47.3

