From b0493bb75a4c5ab8c729dd714bc8a4b2e93eb35b Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Tue, 4 Aug 2020 10:05:47 +0100 Subject: [PATCH] env/ext4.c: allow loading from an EXT4 partition on the MMC boot device This parallels what I added for FAT in commit 6731bef6966, allowing the environment to be found in a specific partition on the device that the board's mmc_get_env_dev() returns. On the Banana Pi R2 that means the device that U-Boot was loaded from; either the internal eMMC or an SD card. Signed-off-by: David Woodhouse --- env/Kconfig | 4 ++++ env/ext4.c | 14 ++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/env/Kconfig b/env/Kconfig index c6ba08878d..aa63fae021 100644 --- a/env/Kconfig +++ b/env/Kconfig @@ -477,6 +477,10 @@ config ENV_EXT4_DEVICE_AND_PART If none, first valid partition in device D. If no partition table then means device D. + If ENV_EXT4_INTERFACE is set to "mmc" then device 'D' can be omitted, + leaving the string starting with a colon, and the boot device will + be used. + config ENV_EXT4_FILE string "Name of the EXT4 file to use for the environment" depends on ENV_IS_IN_EXT4 diff --git a/env/ext4.c b/env/ext4.c index f823b69409..e666f7b945 100644 --- a/env/ext4.c +++ b/env/ext4.c @@ -41,7 +41,21 @@ __weak const char *env_ext4_get_intf(void) __weak const char *env_ext4_get_dev_part(void) { +#ifdef CONFIG_MMC + static char *part_str; + + if (!part_str) { + part_str = CONFIG_ENV_EXT4_DEVICE_AND_PART; + if (!strcmp(CONFIG_ENV_EXT4_INTERFACE, "mmc") && part_str[0] == ':') { + part_str = "0" CONFIG_ENV_EXT4_DEVICE_AND_PART; + part_str[0] += mmc_get_env_dev(); + } + } + + return part_str; +#else return (const char *)CONFIG_ENV_EXT4_DEVICE_AND_PART; +#endif } static int env_ext4_save_buffer(env_t *env_new)