]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
env: Invert gd->env_valid for env_mmc_save 815/head
authorJasper Orschulko <jasper@fancydomain.eu>
Fri, 10 May 2024 11:38:34 +0000 (13:38 +0200)
committerTom Rini <trini@konsulko.com>
Tue, 21 Oct 2025 19:18:46 +0000 (13:18 -0600)
The A/B update strategy of the env's has a gap in the first 2 calls of saveenv.
The env's are stored twice on the first memory area if:
gd->env_valid == ENV_INVALID.

u-boot=> saveenv
Saving Environment to MMC... Writing to MMC(1)... OK
u-boot=> saveenv
Saving Environment to MMC... Writing to MMC(1)... OK  <-- !!!
u-boot=> saveenv
Saving Environment to MMC... Writing to redundant MMC(1)... OK
u-boot=> saveenv
Saving Environment to MMC... Writing to MMC(1)... OK

This is the same issue as resolved in commit e589d5822cac ("env: spi:
Fix gd->env_valid for the first write")

Signed-off-by: Michael Glembotzki <Michael.Glembotzki@iris-sensing.com>
Signed-off-by: Jasper Orschulko <jasper@fancydomain.eu>
Signed-off-by: Michael Heimpold <mhei@heimpold.de>
[trini: Amend the commit message]
---
Changes in v2:
- Rebase to current master
- Amend the commit message to reference the SPI version of this fix,
  which had significant follow-up discussion.

env/mmc.c

index 46ffa6386d6d2cc5a3853b05a5342defab481c20..1eddba3b0f8067a009396154e865e8781808a561 100644 (file)
--- a/env/mmc.c
+++ b/env/mmc.c
@@ -371,7 +371,7 @@ static int env_mmc_save(void)
        ret = 0;
 
        if (IS_ENABLED(CONFIG_ENV_REDUNDANT))
-               gd->env_valid = gd->env_valid == ENV_REDUND ? ENV_VALID : ENV_REDUND;
+               gd->env_valid = gd->env_valid == ENV_VALID ? ENV_REDUND : ENV_VALID;
 
 fini:
        fini_mmc_for_env(mmc);