[PATCH] sunxi: Select environment MMC based on boot device

Andre Przywara andre.przywara at arm.com
Mon Apr 19 17:35:04 CEST 2021


On Sun, 18 Apr 2021 22:16:21 -0500
Samuel Holland <samuel at sholland.org> wrote:

(CC:ing Maxime)

Hi,

> Currently, the environment is always stored in eMMC if eMMC is enabled
> in the config. This means images written to SD and eMMC will cross-
> contaminate their environments unless the configuration is changed.
> 
> By dropping the device number from the environment location string and
> implementing mmc_get_env_dev, we will always use the environment from
> the boot device when booting from SD/eMMC.

Yeah, indeed, thanks for sending this. I will have a closer look and
test tonight.

AFAIR Maxime had reservations towards this approach in the past, he
mentioned that this fixed environment location had a use case?

Maxime, can you comment whether this is still needed? I think being
able to just "dd" (or "mmc write" in U-Boot) the very same image to an
eMMC is a very compelling use case, to install firmware from a bootable 
SD card. I have patches to a similar effect, including loading the env
from SPI when booting from SPI, and a U-Boot menu to make this user
friendly, so would like to know whether we can push this forward.

Cheers,
Andre.

> 
> Signed-off-by: Samuel Holland <samuel at sholland.org>
> ---
>  board/sunxi/board.c | 14 ++++++++++++++
>  env/Kconfig         |  3 +--
>  2 files changed, 15 insertions(+), 2 deletions(-)
> 
> diff --git a/board/sunxi/board.c b/board/sunxi/board.c
> index 718bc313ae..59f7c2c5f1 100644
> --- a/board/sunxi/board.c
> +++ b/board/sunxi/board.c
> @@ -624,6 +624,20 @@ int board_mmc_init(struct bd_info *bis)
>  
>  	return 0;
>  }
> +
> +#if CONFIG_MMC_SUNXI_SLOT_EXTRA != -1
> +int mmc_get_env_dev(void)
> +{
> +	switch (sunxi_get_boot_device()) {
> +	case BOOT_DEVICE_MMC1:
> +		return 0;
> +	case BOOT_DEVICE_MMC2:
> +		return 1;
> +	default:
> +		return CONFIG_SYS_MMC_ENV_DEV;
> +	}
> +}
> +#endif
>  #endif
>  
>  #ifdef CONFIG_SPL_BUILD
> diff --git a/env/Kconfig b/env/Kconfig
> index b473d7cfe1..d7c787ad84 100644
> --- a/env/Kconfig
> +++ b/env/Kconfig
> @@ -430,10 +430,9 @@ config ENV_FAT_INTERFACE
>  config ENV_FAT_DEVICE_AND_PART
>  	string "Device and partition for where to store the environemt in FAT"
>  	depends on ENV_IS_IN_FAT
> +	default ":auto" if ARCH_SUNXI
>  	default "0:1" if TI_COMMON_CMD_OPTIONS
>  	default "0:auto" if ARCH_ZYNQ || ARCH_ZYNQMP
> -	default "0:auto" if ARCH_SUNXI && MMC_SUNXI_SLOT_EXTRA = -1
> -	default "1:auto" if ARCH_SUNXI && MMC_SUNXI_SLOT_EXTRA != -1
>  	default "0" if ARCH_AT91
>  	help
>  	  Define this to a string to specify the partition of the device. It can



More information about the U-Boot mailing list