diff options
Diffstat (limited to 'board/st/stm32mp1')
-rw-r--r-- | board/st/stm32mp1/stm32mp1.c | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/board/st/stm32mp1/stm32mp1.c b/board/st/stm32mp1/stm32mp1.c index 18b8870269..2faf5c81b4 100644 --- a/board/st/stm32mp1/stm32mp1.c +++ b/board/st/stm32mp1/stm32mp1.c @@ -841,6 +841,31 @@ const char *env_ext4_get_intf(void) } } +int mmc_get_boot(void) +{ + struct udevice *dev; + u32 boot_mode = get_bootmode(); + unsigned int instance = (boot_mode & TAMP_BOOT_INSTANCE_MASK) - 1; + char cmd[20]; + const u32 sdmmc_addr[] = { + STM32_SDMMC1_BASE, + STM32_SDMMC2_BASE, + STM32_SDMMC3_BASE + }; + + if (instance > ARRAY_SIZE(sdmmc_addr)) + return 0; + + /* search associated sdmmc node in devicetree */ + snprintf(cmd, sizeof(cmd), "mmc@%x", sdmmc_addr[instance]); + if (uclass_get_device_by_name(UCLASS_MMC, cmd, &dev)) { + log_err("mmc%d = %s not found in device tree!\n", instance, cmd); + return 0; + } + + return dev_seq(dev); +}; + const char *env_ext4_get_dev_part(void) { static char *const env_dev_part = @@ -854,22 +879,16 @@ const char *env_ext4_get_dev_part(void) if (strlen(env_dev_part) > 0) return env_dev_part; - u32 bootmode = get_bootmode(); - - return dev_part[(bootmode & TAMP_BOOT_INSTANCE_MASK) - 1]; + return dev_part[mmc_get_boot()]; } int mmc_get_env_dev(void) { - u32 bootmode; - if (CONFIG_SYS_MMC_ENV_DEV >= 0) return CONFIG_SYS_MMC_ENV_DEV; - bootmode = get_bootmode(); - /* use boot instance to select the correct mmc device identifier */ - return (bootmode & TAMP_BOOT_INSTANCE_MASK) - 1; + return mmc_get_boot(); } #if defined(CONFIG_OF_BOARD_SETUP) |