From: Benjamin Szőke <[email protected]>

Improve "mmcautodetect=yes" boot mode autodetection to able to use it
if CONFIG_ENV_IS_NOWHERE=y is used for i.MX9 SoCs and i.MX93 EVK board.

If both CONFIG_ENV_IS_IN_MMC=y and CONFIG_ENV_IS_NOWHERE=y are in the
defconfig, CONFIG_ENV_IS_IN_MMC=y will be overiden default
CONFIG_ENV_IS_NOWHERE settings.

Goal is in this patch to able to use the boot mode autodetection
if defconfig use only CONFIG_ENV_IS_NOWHERE=y option
(without CONFIG_ENV_IS_IN_MMC) for any i.MX9 SoC.

Signed-off-by: Benjamin Szőke <[email protected]>
---
 arch/arm/mach-imx/imx9/soc.c          | 12 +++++++++---
 board/freescale/imx93_evk/imx93_evk.c |  2 +-
 include/configs/imx93_evk.h           |  8 +++++++-
 3 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/arch/arm/mach-imx/imx9/soc.c b/arch/arm/mach-imx/imx9/soc.c
index 7c28fa39e14e..21e0e7dd1e80 100644
--- a/arch/arm/mach-imx/imx9/soc.c
+++ b/arch/arm/mach-imx/imx9/soc.c
@@ -42,12 +42,18 @@ DECLARE_GLOBAL_DATA_PTR;
 
 struct rom_api *g_rom_api = (struct rom_api *)0x1980;
 
-#ifdef CONFIG_ENV_IS_IN_MMC
+#if CONFIG_IS_ENABLED(ENV_IS_IN_MMC) || CONFIG_IS_ENABLED(ENV_IS_NOWHERE)
 __weak int board_mmc_get_env_dev(int devno)
 {
        return devno;
 }
 
+#ifdef CONFIG_SYS_MMC_ENV_DEV
+#define IMX9_MMC_ENV_DEV CONFIG_SYS_MMC_ENV_DEV
+#else
+#define IMX9_MMC_ENV_DEV 0
+#endif
+
 int mmc_get_env_dev(void)
 {
        int ret;
@@ -59,7 +65,7 @@ int mmc_get_env_dev(void)
 
        if (ret != ROM_API_OKAY) {
                puts("ROMAPI: failure at query_boot_info\n");
-               return CONFIG_SYS_MMC_ENV_DEV;
+               return IMX9_MMC_ENV_DEV;
        }
 
        boot_type = boot >> 16;
@@ -69,7 +75,7 @@ int mmc_get_env_dev(void)
 
        /* If not boot from sd/mmc, use default value */
        if (boot_type != BOOT_TYPE_SD && boot_type != BOOT_TYPE_MMC)
-               return env_get_ulong("mmcdev", 10, CONFIG_SYS_MMC_ENV_DEV);
+               return env_get_ulong("mmcdev", 10, IMX9_MMC_ENV_DEV);
 
        return board_mmc_get_env_dev(boot_instance);
 }
diff --git a/board/freescale/imx93_evk/imx93_evk.c 
b/board/freescale/imx93_evk/imx93_evk.c
index 341831a7d30d..c9171df330e2 100644
--- a/board/freescale/imx93_evk/imx93_evk.c
+++ b/board/freescale/imx93_evk/imx93_evk.c
@@ -58,7 +58,7 @@ int board_init(void)
 
 int board_late_init(void)
 {
-#ifdef CONFIG_ENV_IS_IN_MMC
+#if CONFIG_IS_ENABLED(ENV_IS_IN_MMC) || CONFIG_IS_ENABLED(ENV_IS_NOWHERE)
        board_late_mmc_env_init();
 #endif
 
diff --git a/include/configs/imx93_evk.h b/include/configs/imx93_evk.h
index 53fb8c9b1ba8..260a5043d537 100644
--- a/include/configs/imx93_evk.h
+++ b/include/configs/imx93_evk.h
@@ -27,6 +27,12 @@
 #define BOOTENV
 #endif
 
+#ifdef CONFIG_SYS_MMC_ENV_DEV
+#define IMX93_EVK_MMC_ENV_DEV CONFIG_SYS_MMC_ENV_DEV
+#else
+#define IMX93_EVK_MMC_ENV_DEV 0
+#endif
+
 /* Initial environment variables */
 #define CFG_EXTRA_ENV_SETTINGS         \
        BOOTENV \
@@ -42,7 +48,7 @@
        "boot_fit=no\0" \
        "fdtfile=" CONFIG_DEFAULT_FDT_FILE "\0" \
        "bootm_size=0x10000000\0" \
-       "mmcdev=" __stringify(CONFIG_SYS_MMC_ENV_DEV)"\0" \
+       "mmcdev=" __stringify(IMX93_EVK_MMC_ENV_DEV)"\0" \
        "mmcpart=1\0" \
        "mmcroot=/dev/mmcblk1p2 rootwait rw\0" \
        "mmcautodetect=yes\0" \

Reply via email to