env: Invert gd->env_valid for env_mmc_save
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 e589d5822c ("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.
This commit is contained in:
committed by
Tom Rini
parent
0f865ab5d6
commit
813a0df27a
2
env/mmc.c
vendored
2
env/mmc.c
vendored
@@ -371,7 +371,7 @@ static int env_mmc_save(void)
|
|||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_ENV_REDUNDANT))
|
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:
|
||||||
fini_mmc_for_env(mmc);
|
fini_mmc_for_env(mmc);
|
||||||
|
|||||||
Reference in New Issue
Block a user