summaryrefslogtreecommitdiff
path: root/env
diff options
context:
space:
mode:
authorMarek Vasut <marex@denx.de>2021-10-06 18:29:53 +0200
committerTom Rini <trini@konsulko.com>2021-10-25 14:29:37 -0400
commitf47f87f257b790bbc9b071de433324dab2305d7d (patch)
tree6527d379bbee61b66c77ddd56ac1b85b7a433307 /env
parent397b35f09794e40d62d5e4f53992e2a711dc8be1 (diff)
env: mmc: Add missing eMMC bootpart restoration to env erase
If the environment is stored in eMMC hardware boot partition, the environment driver first stores the currently selected eMMC boot partition, then does the requested operation, and then restores the original boot partition settings. In case the environment operation fails, the boot partition settings are also restored. The 'env erase' implementation in the MMC environment driver lacks the path which restores the boot partition. This could lead to various failure modes, like the system boots the wrong copy of bootloader etc. Fix this by filling in the missing restoration path. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Fabio Estevam <festevam@gmail.com> Cc: Jaehoon Chung <jh80.chung@samsung.com> Cc: Peng Fan <peng.fan@nxp.com> Cc: Stefano Babic <sbabic@denx.de>
Diffstat (limited to 'env')
-rw-r--r--env/mmc.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/env/mmc.c b/env/mmc.c
index c4cb163991..e111d8e588 100644
--- a/env/mmc.c
+++ b/env/mmc.c
@@ -263,20 +263,26 @@ static int env_mmc_erase(void)
return 1;
}
- if (mmc_get_env_addr(mmc, copy, &offset))
- return CMD_RET_FAILURE;
+ if (mmc_get_env_addr(mmc, copy, &offset)) {
+ ret = CMD_RET_FAILURE;
+ goto fini;
+ }
ret = erase_env(mmc, CONFIG_ENV_SIZE, offset);
#ifdef CONFIG_ENV_OFFSET_REDUND
copy = 1;
- if (mmc_get_env_addr(mmc, copy, &offset))
- return CMD_RET_FAILURE;
+ if (mmc_get_env_addr(mmc, copy, &offset)) {
+ ret = CMD_RET_FAILURE;
+ goto fini;
+ }
ret |= erase_env(mmc, CONFIG_ENV_SIZE, offset);
#endif
+fini:
+ fini_mmc_for_env(mmc);
return ret;
}
#endif /* CONFIG_CMD_SAVEENV && !CONFIG_SPL_BUILD */