On 4/25/25 15:15, Patrice Chotard wrote:
> Use the boot instance to select the correct mmc device identifier,
> this patch only to save the environment on eMMC = MMC(1) on
> STMicroelectronics boards.
> 
> Set the CONFIG_SYS_MMC_ENV_DEV to -1 to select the mmc boot instance
> by default.
> 
> Signed-off-by: Patrick Delaunay <patrick.delau...@foss.st.com>
> Signed-off-by: Patrice Chotard <patrice.chot...@foss.st.com>
> ---
> 
> (no changes since v1)
> 
>  board/st/stm32mp2/stm32mp2.c | 37 ++++++++++++++++++++++++++++++++++++
>  configs/stm32mp25_defconfig  |  2 +-
>  2 files changed, 38 insertions(+), 1 deletion(-)
> 
> diff --git a/board/st/stm32mp2/stm32mp2.c b/board/st/stm32mp2/stm32mp2.c
> index c70ffaf5dbd..8446b8fd3d6 100644
> --- a/board/st/stm32mp2/stm32mp2.c
> +++ b/board/st/stm32mp2/stm32mp2.c
> @@ -10,6 +10,7 @@
>  #include <fdt_support.h>
>  #include <log.h>
>  #include <misc.h>
> +#include <mmc.h>
>  #include <asm/global_data.h>
>  #include <asm/arch/sys_proto.h>
>  #include <dm/device.h>
> @@ -78,6 +79,42 @@ enum env_location env_get_location(enum env_operation op, 
> int prio)
>       }
>  }
>  
> +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);
> +};
> +
> +int mmc_get_env_dev(void)
> +{
> +     const int mmc_env_dev = CONFIG_IS_ENABLED(ENV_IS_IN_MMC, 
> (CONFIG_SYS_MMC_ENV_DEV), (-1));
> +
> +     if (mmc_env_dev >= 0)
> +             return mmc_env_dev;
> +
> +     /* use boot instance to select the correct mmc device identifier */
> +     return mmc_get_boot();
> +}
> +
>  int board_late_init(void)
>  {
>       const void *fdt_compat;
> diff --git a/configs/stm32mp25_defconfig b/configs/stm32mp25_defconfig
> index d11910f139f..fd5c36ec3e2 100644
> --- a/configs/stm32mp25_defconfig
> +++ b/configs/stm32mp25_defconfig
> @@ -36,7 +36,7 @@ CONFIG_CMD_LOG=y
>  CONFIG_OF_LIVE=y
>  CONFIG_ENV_IS_NOWHERE=y
>  CONFIG_ENV_IS_IN_MMC=y
> -CONFIG_SYS_MMC_ENV_DEV=1
> +CONFIG_SYS_MMC_ENV_DEV=-1
>  CONFIG_NO_NET=y
>  CONFIG_SYS_64BIT_LBA=y
>  CONFIG_GPIO_HOG=y
Applied to u-boot-stm32/master

Thanks
Patrice

Reply via email to