[PATCH] ARM: imx9: support env in fat and ext4

Peng Fan peng.fan at oss.nxp.com
Wed Apr 12 10:38:48 CEST 2023



On 4/12/2023 1:27 AM, Oleksandr Suvorov wrote:
> Change boot device logic to also allow environment stored in fat and
> in ext4 when booting from SD or eMMC.
> 
> As the boot device check for SD and for eMMC was depending on
> ENV_IS_IN_MMC being defined, change the ifdef blocks at
> env_get_location to use IS_ENABLED instead for all modes, returning
> NOWHERE when no valid mode is found.
> 
> This solution is based on (with added SPL support):
> Link: https://lore.kernel.org/all/20211020191626.3648540-1-ricardo@foundries.io/
> Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov at foundries.io>

Reviewed-by: Peng Fan <peng.fan at nxp.com>

> ---
> 
>   arch/arm/mach-imx/imx9/soc.c | 28 ++++++++++++----------------
>   1 file changed, 12 insertions(+), 16 deletions(-)
> 
> diff --git a/arch/arm/mach-imx/imx9/soc.c b/arch/arm/mach-imx/imx9/soc.c
> index a16e22ea6bb..2dfce1492bb 100644
> --- a/arch/arm/mach-imx/imx9/soc.c
> +++ b/arch/arm/mach-imx/imx9/soc.c
> @@ -286,35 +286,31 @@ int timer_init(void)
>   enum env_location env_get_location(enum env_operation op, int prio)
>   {
>   	enum boot_device dev = get_boot_device();
> -	enum env_location env_loc = ENVL_UNKNOWN;
>   
>   	if (prio)
> -		return env_loc;
> +		return ENVL_UNKNOWN;
>   
>   	switch (dev) {
> -#if defined(CONFIG_ENV_IS_IN_SPI_FLASH)
>   	case QSPI_BOOT:
> -		env_loc = ENVL_SPI_FLASH;
> -		break;
> -#endif
> -#if defined(CONFIG_ENV_IS_IN_MMC)
> +		if (CONFIG_IS_ENABLED(ENV_IS_IN_SPI_FLASH))
> +			return ENVL_SPI_FLASH;
> +		return ENVL_NOWHERE;
>   	case SD1_BOOT:
>   	case SD2_BOOT:
>   	case SD3_BOOT:
>   	case MMC1_BOOT:
>   	case MMC2_BOOT:
>   	case MMC3_BOOT:
> -		env_loc =  ENVL_MMC;
> -		break;
> -#endif
> +		if (CONFIG_IS_ENABLED(ENV_IS_IN_MMC))
> +			return ENVL_MMC;
> +		else if (CONFIG_IS_ENABLED(ENV_IS_IN_EXT4))
> +			return ENVL_EXT4;
> +		else if (CONFIG_IS_ENABLED(ENV_IS_IN_FAT))
> +			return ENVL_FAT;
> +		return ENVL_NOWHERE;
>   	default:
> -#if defined(CONFIG_ENV_IS_NOWHERE)
> -		env_loc = ENVL_NOWHERE;
> -#endif
> -		break;
> +		return ENVL_NOWHERE;
>   	}
> -
> -	return env_loc;
>   }
>   
>   static int mix_power_init(enum mix_power_domain pd)


More information about the U-Boot mailing list