aboutsummaryrefslogtreecommitdiff
path: root/env
diff options
context:
space:
mode:
authorPatrick Delaunay2022-12-14 16:51:31 +0100
committerTom Rini2023-01-11 15:02:24 -0500
commit91fc785834194c7cf2f686a8861a67154e56e817 (patch)
treeff8d11612ac3e09e37c27f8eaeeafe51287f7b63 /env
parente64289e1ec7c66a2d858aff65c0af501557d538b (diff)
env: ubi: add support of command env erase
Add support of opts erase for ubi env backend, this opts is used by command 'env erase'. This command only zero-fill the env UBI volume CONFIG_ENV_UBI_VOLUME and CONFIG_ENV_UBI_VOLUME_REDUND, so the saved environment becomes invalid. This patch introduces a local define ENV_UBI_VOLUME_REDUND only to avoid #if in the code, as CONFIG_ENV_UBI_VOLUME_REDUND is only defined when CONFIG_SYS_REDUNDAND_ENVIRONMENT is defined. Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com> Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com> Reviewed-by: Heiko Schocher <hs@denx.de>
Diffstat (limited to 'env')
-rw-r--r--env/ubi.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/env/ubi.c b/env/ubi.c
index eb21c4f38b4..445d34fedb8 100644
--- a/env/ubi.c
+++ b/env/ubi.c
@@ -28,6 +28,12 @@
DECLARE_GLOBAL_DATA_PTR;
+#if CONFIG_SYS_REDUNDAND_ENVIRONMENT
+#define ENV_UBI_VOLUME_REDUND CONFIG_ENV_UBI_VOLUME_REDUND
+#else
+#define ENV_UBI_VOLUME_REDUND "invalid"
+#endif
+
#ifdef CONFIG_CMD_SAVEENV
#ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT
static int env_ubi_save(void)
@@ -177,9 +183,43 @@ static int env_ubi_load(void)
}
#endif /* CONFIG_SYS_REDUNDAND_ENVIRONMENT */
+static int env_ubi_erase(void)
+{
+ ALLOC_CACHE_ALIGN_BUFFER(char, env_buf, CONFIG_ENV_SIZE);
+ int ret = 0;
+
+ if (ubi_part(CONFIG_ENV_UBI_PART, UBI_VID_OFFSET)) {
+ printf("\n** Cannot find mtd partition \"%s\"\n",
+ CONFIG_ENV_UBI_PART);
+ return 1;
+ }
+
+ memset(env_buf, 0x0, CONFIG_ENV_SIZE);
+
+ if (ubi_volume_write(CONFIG_ENV_UBI_VOLUME,
+ (void *)env_buf, CONFIG_ENV_SIZE)) {
+ printf("\n** Unable to erase env to %s:%s **\n",
+ CONFIG_ENV_UBI_PART,
+ CONFIG_ENV_UBI_VOLUME);
+ ret = 1;
+ }
+ if (IS_ENABLED(CONFIG_SYS_REDUNDAND_ENVIRONMENT)) {
+ if (ubi_volume_write(ENV_UBI_VOLUME_REDUND,
+ (void *)env_buf, CONFIG_ENV_SIZE)) {
+ printf("\n** Unable to erase env to %s:%s **\n",
+ CONFIG_ENV_UBI_PART,
+ ENV_UBI_VOLUME_REDUND);
+ ret = 1;
+ }
+ }
+
+ return ret;
+}
+
U_BOOT_ENV_LOCATION(ubi) = {
.location = ENVL_UBI,
ENV_NAME("UBI")
.load = env_ubi_load,
.save = env_save_ptr(env_ubi_save),
+ .erase = ENV_ERASE_PTR(env_ubi_erase),
};