2024. 10. 14. 2:39 keltezéssel, Peng Fan írta:
Subject: [PATCH] imx9: Improve boot device auto-selection
From: Benjamin Szőke <[email protected]>
Improve "mmcautodetect=yes" boot device auto-selection to able to
use it if CONFIG_ENV_IS_NOWHERE is enabled for i.MX9 SoC and
i.MX93 EVK board.
Would you please give more background on this, I not got
the point on why doing this?
Thanks,
Peng.
If CONFIG_ENV_IS_NOWHERE is used in u-boot config instead of
CONFIG_ENV_IS_IN_MMC, boot auto-selection does not work because of the incorrect
#ifdef usage in /arch/arm/mach-imx/imx9/soc.c.
If CONFIG_ENV_IS_IN_MMC is not used, also need to define CONFIG_SYS_MMC_ENV_DEV
to any default zero value manually, because the code of mmc_get_env_dev() of
imx9 soc like to use it, if auto detection of boot is failed or it is not in SD
or MMC boot mode.
Same things were solved in pico-imx7d source also.
https://github.com/u-boot/u-boot/blob/master/board/technexion/pico-imx7d/pico-imx7d.c#L159
Signed-off-by: Benjamin Szőke <[email protected]>
---
arch/arm/mach-imx/imx9/soc.c | 6 +++++-
board/freescale/imx93_evk/imx93_evk.c | 2 +-
include/configs/imx93_evk.h | 6 ++++++
3 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/arch/arm/mach-imx/imx9/soc.c b/arch/arm/mach-
imx/imx9/soc.c index 7c28fa39e1..79ddbc7241 100644
--- a/arch/arm/mach-imx/imx9/soc.c
+++ b/arch/arm/mach-imx/imx9/soc.c
@@ -42,12 +42,16 @@ 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;
}
+#ifndef CONFIG_SYS_MMC_ENV_DEV
+#define CONFIG_SYS_MMC_ENV_DEV 0
+#endif
+
int mmc_get_env_dev(void)
{
int ret;
diff --git a/board/freescale/imx93_evk/imx93_evk.c
b/board/freescale/imx93_evk/imx93_evk.c
index 341831a7d3..c9171df330 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 53fb8c9b1b..2a9595a261 100644
--- a/include/configs/imx93_evk.h
+++ b/include/configs/imx93_evk.h
@@ -27,6 +27,12 @@
#define BOOTENV
#endif
+#if CONFIG_IS_ENABLED(ENV_IS_NOWHERE)
+#ifndef CONFIG_SYS_MMC_ENV_DEV
+#define CONFIG_SYS_MMC_ENV_DEV 0
+#endif
+#endif
+
/* Initial environment variables */
#define CFG_EXTRA_ENV_SETTINGS \
BOOTENV \
--
2.47.0.windows.1