[PATCH] arm: imx: imx9: scmi: Fix booting from USB
João Paulo Gonçalves
jpaulo.silvagoncalves at gmail.com
Thu Jul 31 20:47:12 CEST 2025
Hello,
On Mon, Jul 28, 2025 at 11:25:04AM -0300, Fabio Estevam wrote:
> What confuses me about João's patch is that it was not tested against
> the mainline U-Boot.
In the end, the code is nearly identical between the downstream and
mainline U-Boot.
On Wed, Jul 30, 2025 at 08:35:40AM +0200, Frieder Schrempf wrote:
> I have the below patch in our downstream fork to fix the issue mentioned
> here for i.MX93. It is derived from Fabio's patch [1]. I'm not sure if
> it's correct, though.
We are also doing something similar on our branch.
I have two proposals. My goal is to prevent the board from hanging when
booting from USB if CONFIG_ENV_IS_NOWHERE=n (since the current code
assumes it is always enabled) and/or if the environment is defined
elsewhere:
1) Imply CONFIG_ENV_IS_NOWHERE for i.MX9 (as mentioned earlier), to make
it clear that it is required by ARCH.
or
2) Doing something similar to what Frieder showed for USB boot (which is
almost the same on i.MX8MM/i.MX8MP), but preserving the current
behavior:
diff --git a/arch/arm/mach-imx/imx9/scmi/soc.c b/arch/arm/mach-imx/imx9/scmi/soc.c
index 13f13ca7d105..f973652d0cbe 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;
}
With this patch, I believe Peng's concerns are addressed, and it also
works for our use case.
What do you think?
Best Regards,
João Paulo
More information about the U-Boot
mailing list