From a20dbbb0711ef144703848105dd0500b16ba7eae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Paulo=20Gon=C3=A7alves?= Date: Mon, 11 Aug 2025 09:57:50 -0300 Subject: [PATCH 1/3] arm: imx: imx9: soc: Fix env location when booting from USB MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On i.MX9 platforms, when booting from USB, the U-Boot environment is always assumed to be in RAM. However, this causes the boot to hang when `CONFIG_ENV_IS_NOWHERE` is not enabled. The boot also hangs even if the environment is present in another storage media (for example, eMMC). Fix the issue by correctly handling the U-Boot environment's location when booting from USB. Also for i.MX95, set the environment location based on the ENV config and not solely based on the boot device type. Suggested-by: Frieder Schrempf Signed-off-by: João Paulo Gonçalves --- arch/arm/mach-imx/imx9/scmi/soc.c | 13 ++++++++++--- arch/arm/mach-imx/imx9/soc.c | 8 +++++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/arch/arm/mach-imx/imx9/scmi/soc.c b/arch/arm/mach-imx/imx9/scmi/soc.c index 13f13ca7d10..f973652d0cb 100644 --- a/arch/arm/mach-imx/imx9/scmi/soc.c +++ b/arch/arm/mach-imx/imx9/scmi/soc.c @@ -635,7 +635,8 @@ enum env_location env_get_location(enum env_operation op, int prio) switch (dev) { case QSPI_BOOT: - env_loc = ENVL_SPI_FLASH; + if (IS_ENABLED(CONFIG_ENV_IS_IN_SPI_FLASH)) + env_loc = ENVL_SPI_FLASH; break; case SD1_BOOT: case SD2_BOOT: @@ -643,10 +644,16 @@ enum env_location env_get_location(enum env_operation op, int prio) case MMC1_BOOT: case MMC2_BOOT: case MMC3_BOOT: - env_loc = ENVL_MMC; + if (IS_ENABLED(CONFIG_ENV_IS_IN_MMC)) + env_loc = ENVL_MMC; break; default: - env_loc = ENVL_NOWHERE; + if (IS_ENABLED(CONFIG_ENV_IS_NOWHERE)) + env_loc = ENVL_NOWHERE; + else if (IS_ENABLED(CONFIG_ENV_IS_IN_SPI_FLASH)) + env_loc = ENVL_SPI_FLASH; + else if (IS_ENABLED(CONFIG_ENV_IS_IN_MMC)) + env_loc = ENVL_MMC; break; } diff --git a/arch/arm/mach-imx/imx9/soc.c b/arch/arm/mach-imx/imx9/soc.c index 9fb82644f12..3f7dafdcce5 100644 --- a/arch/arm/mach-imx/imx9/soc.c +++ b/arch/arm/mach-imx/imx9/soc.c @@ -809,7 +809,13 @@ enum env_location env_get_location(enum env_operation op, int prio) return ENVL_FAT; return ENVL_NOWHERE; default: - return ENVL_NOWHERE; + if (IS_ENABLED(CONFIG_ENV_IS_NOWHERE)) + return ENVL_NOWHERE; + else if (IS_ENABLED(CONFIG_ENV_IS_IN_SPI_FLASH)) + return ENVL_SPI_FLASH; + else if (IS_ENABLED(CONFIG_ENV_IS_IN_MMC)) + return ENVL_MMC; + return ENVL_UNKNOWN; } } From a7528da151489d87582d70f2628256f4d59e2740 Mon Sep 17 00:00:00 2001 From: Primoz Fiser Date: Tue, 19 Aug 2025 07:39:41 +0200 Subject: [PATCH 2/3] board: phytec: phycore-imx93: Fix EEPROM bus mismatch in SPL Fix PHYTEC EEPROM bus mismatch between SPL and U-Boot proper by enabling CONFIG_SPL_DM_SEQ_ALIAS=y on phyCORE-i.MX93 boards. This way, both the SPL and U-Boot proper will respect the device-tree aliases for I2C devs and use the same I2C bus number for phytec_eeprom_data_setup() function calls. This makes code less confusing and more robust. Fixes an issue apparent since commit 79f3e77133bd ("Subtree merge tag 'v6.16-dts' of dts repo [1] into dts/upstream") where SPL would spew the following error: phytec_eeprom_read: i2c EEPROM not found: -110. phytec_eeprom_data_setup: EEPROM data init failed While later in U-Boot proper, EEPROM would be successfully read out. This happens because Linux device-tree for phyBOARD-Segin-i.MX93 since aforementioned commit enables I2C bus 2 (lpi2c2 is used for audio codec and RTC) which breaks SPL I2C bus number ordering and I2C EEPROM bus is shifted by +1. Now, lets prevent this from happening again by utilizing device-tree aliases also in the SPL. Signed-off-by: Primoz Fiser --- board/phytec/phycore_imx93/spl.c | 3 +-- configs/imx93-phycore_defconfig | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/board/phytec/phycore_imx93/spl.c b/board/phytec/phycore_imx93/spl.c index 7b5d38d438f..beaa536c600 100644 --- a/board/phytec/phycore_imx93/spl.c +++ b/board/phytec/phycore_imx93/spl.c @@ -52,8 +52,7 @@ void spl_dram_init(void) int ret; enum phytec_imx93_ddr_eeprom_code ddr_opt = PHYTEC_IMX93_DDR_INVALID; - /* NOTE: In SPL lpi2c3 is mapped to bus 0 */ - ret = phytec_eeprom_data_setup(NULL, 0, EEPROM_ADDR); + ret = phytec_eeprom_data_setup(NULL, 2, EEPROM_ADDR); if (ret && !IS_ENABLED(CONFIG_PHYCORE_IMX93_RAM_TYPE_FIX)) goto out; diff --git a/configs/imx93-phycore_defconfig b/configs/imx93-phycore_defconfig index 6210be64672..af149128ed4 100644 --- a/configs/imx93-phycore_defconfig +++ b/configs/imx93-phycore_defconfig @@ -92,6 +92,7 @@ CONFIG_USE_ETHPRIME=y CONFIG_ETHPRIME="eth1" CONFIG_NET_RANDOM_ETHADDR=y CONFIG_SPL_DM=y +CONFIG_SPL_DM_SEQ_ALIAS=y CONFIG_SPL_CLK_IMX93=y CONFIG_CLK_IMX93=y CONFIG_DFU_MMC=y From cb5f3e4f5288f27c44753503ca6c75bd17d8a1f8 Mon Sep 17 00:00:00 2001 From: Ye Li Date: Wed, 20 Aug 2025 15:08:51 +0200 Subject: [PATCH 3/3] imx: imx93_{evk, frdm, qsb}: Fix conflict SPL early malloc address MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Because the early malloc pool size is set to 0x18000, so using this start address may cause conflict with ATF, then corrupt the heap data. So we delete the definition to use the default early malloc pool from CONFIG_SPL_STACK to avoid any conflict Signed-off-by: Ye Li Cherry picked from nxp-imx/uboot-imx commit 1ba675df122627a19debe1d807877052705372c6 Jérémie Dautheribes: applied the same patch to the frdm and qsb imx93-based boards Signed-off-by: Jérémie Dautheribes --- include/configs/imx93_evk.h | 4 ---- include/configs/imx93_frdm.h | 4 ---- include/configs/imx93_qsb.h | 4 ---- 3 files changed, 12 deletions(-) diff --git a/include/configs/imx93_evk.h b/include/configs/imx93_evk.h index e7db0161126..ffd72a38bcb 100644 --- a/include/configs/imx93_evk.h +++ b/include/configs/imx93_evk.h @@ -11,10 +11,6 @@ #define CFG_SYS_UBOOT_BASE \ (QSPI0_AMBA_BASE + CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR * 512) -#ifdef CONFIG_XPL_BUILD -#define CFG_MALLOC_F_ADDR 0x204D0000 -#endif - #ifdef CONFIG_ENV_MMC_DEVICE_INDEX #define IMX93_EVK_MMC_ENV_DEV CONFIG_ENV_MMC_DEVICE_INDEX #else diff --git a/include/configs/imx93_frdm.h b/include/configs/imx93_frdm.h index 987fcacb999..c98c10774cb 100644 --- a/include/configs/imx93_frdm.h +++ b/include/configs/imx93_frdm.h @@ -11,10 +11,6 @@ #define CFG_SYS_UBOOT_BASE \ (QSPI0_AMBA_BASE + CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR * 512) -#ifdef CONFIG_XPL_BUILD -#define CFG_MALLOC_F_ADDR 0x204D0000 -#endif - /* Link Definitions */ #define CFG_SYS_INIT_RAM_ADDR 0x80000000 diff --git a/include/configs/imx93_qsb.h b/include/configs/imx93_qsb.h index 5ddc191d17c..a7b94f7ab57 100644 --- a/include/configs/imx93_qsb.h +++ b/include/configs/imx93_qsb.h @@ -9,10 +9,6 @@ #define CFG_SYS_UBOOT_BASE \ (QSPI0_AMBA_BASE + CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR * 512) -#ifdef CONFIG_SPL_BUILD -#define CFG_MALLOC_F_ADDR 0x204D0000 -#endif - #define CFG_SYS_INIT_RAM_ADDR 0x80000000 #define CFG_SYS_INIT_RAM_SIZE 0x200000