summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMattijs Korpershoek <mkorpershoek@baylibre.com>2024-07-19 17:38:54 +0200
committerTom Rini <trini@konsulko.com>2024-07-31 11:19:20 -0600
commitb2345dbdaa864b71cd58bd20b1b9e8440de639c7 (patch)
tree09b8254162a00468f87d5faddaadfc2bdba65557
parentc9860d7ac530971e81e36c0b993fbfb02a42afb3 (diff)
downloadu-boot-b2345dbdaa864b71cd58bd20b1b9e8440de639c7.tar.gz
u-boot-b2345dbdaa864b71cd58bd20b1b9e8440de639c7.tar.bz2
u-boot-b2345dbdaa864b71cd58bd20b1b9e8440de639c7.zip
env: mmc: Fix env loading with CONFIG_SYS_MMC_ENV_PART
When CONFIG_SYS_MMC_ENV_PART=2, the environment is loaded from the USER partition (hwpart=0) instead of from the BOOT1 partition (hwpart=2). IS_ENABLED() cannot be used for non-boolean KConfig options. Its documentation states: > * IS_ENABLED(CONFIG_FOO) evaluates to 1 if CONFIG_FOO is set to 'y', > * 0 otherwise. So in our case, IS_ENABLED(CONFIG_SYS_MMC_ENV_PART) evaluates to 0. Because of this, the hwpart variable is never assigned and mmc_offset() ends up switching back to the USER hwpart (0) instead of BOOT1 (2). Fix it by using #define instead. Tested with: # have CONFIG_SYS_MMC_ENV_PART=2 in defconfig # 1. Erase mmc0boot1 => mmc dev 0 2 => mmc erase 0 400 => mmc read ${loadaddr} 0 400 => md ${loadaddr} 4 82000000: 00000000 00000000 00000000 00000000 ................ # 2. Restore default environment and save to MMC => env default -a -f => saveenv # 3. Read back mmc0boot1 and confirm the env is present => mmc read ${loadaddr} 0 400 => md ${loadaddr} 4 82000000: 13e0632e 72646461 7469665f 3978303d .c..addr_fit=0x9 Fixes: 5b4acb0ff79d ("env: mmc: Apply GPT only on eMMC user HW partition") Signed-off-by: Mattijs Korpershoek <mkorpershoek@baylibre.com> Reviewed-by: Tom Rini <trini@konsulko.com>
-rw-r--r--env/mmc.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/env/mmc.c b/env/mmc.c
index 776df0786b..0338aa6c56 100644
--- a/env/mmc.c
+++ b/env/mmc.c
@@ -110,8 +110,9 @@ static inline s64 mmc_offset(struct mmc *mmc, int copy)
int hwpart = 0;
int err;
- if (IS_ENABLED(CONFIG_SYS_MMC_ENV_PART))
- hwpart = mmc_get_env_part(mmc);
+#if defined(CONFIG_SYS_MMC_ENV_PART)
+ hwpart = mmc_get_env_part(mmc);
+#endif
#if defined(CONFIG_ENV_MMC_PARTITION)
str = CONFIG_ENV_MMC_PARTITION;