allow env erase on secondary offset using CONFIG_ENV_OFFSET_REDUND

Suggested-by: Simon Goldschmidt <simon.k.r.goldschm...@gmail.com>
Signed-off-by: Frank Wunderlich <fran...@public-files.de>
---
 cmd/nvedit.c          | 2 +-
 env/env.c             | 4 ++--
 env/mmc.c             | 9 +++++++--
 include/environment.h | 4 ++--
 4 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/cmd/nvedit.c b/cmd/nvedit.c
index 0cbd8e8984..2071bcf443 100644
--- a/cmd/nvedit.c
+++ b/cmd/nvedit.c
@@ -766,7 +766,7 @@ U_BOOT_CMD(
 static int do_env_erase(cmd_tbl_t *cmdtp, int flag, int argc,
                        char * const argv[])
 {
-       return env_erase() ? 1 : 0;
+       return env_erase(false) ? 1 : 0;
 }
 U_BOOT_CMD(
        eraseenv, 1, 0, do_env_erase,
diff --git a/env/env.c b/env/env.c
index d3cbe2f915..bf7f3b9684 100644
--- a/env/env.c
+++ b/env/env.c
@@ -256,7 +256,7 @@ int env_save(void)
        return -ENODEV;
 }

-int env_erase(void)
+int env_erase(bool use_redund)
 {
        struct env_driver *drv;

@@ -271,7 +271,7 @@ int env_erase(void)
                        return -ENODEV;

                printf("Erasing Environment on %s... ", drv->name);
-               ret = drv->erase();
+               ret = drv->erase(use_redund);
                if (ret)
                        printf("Failed (%d)\n", ret);
                else
diff --git a/env/mmc.c b/env/mmc.c
index 9ae9b1a66a..647bc693fa 100644
--- a/env/mmc.c
+++ b/env/mmc.c
@@ -244,7 +244,7 @@ fini:
 }

 #if defined(CONFIG_CMD_ERASEENV)
-static int env_mmc_erase(void)
+static int env_mmc_erase(bool use_redund)
 {
        int dev = mmc_get_env_dev();
        struct mmc *mmc = find_mmc_device(dev);
@@ -253,7 +253,12 @@ static int env_mmc_erase(void)
        if (!mmc)
                return CMD_RET_FAILURE;

-       blk = CONFIG_ENV_OFFSET / mmc->read_bl_len;
+#ifdef CONFIG_ENV_OFFSET_REDUND
+       if (use_redund)
+               blk = CONFIG_ENV_OFFSET_REDUND / mmc->read_bl_len;
+       else
+#endif
+               blk = CONFIG_ENV_OFFSET / mmc->read_bl_len;
        cnt = CONFIG_ENV_SIZE / mmc->read_bl_len;

        printf("\nMMC erase env: dev # %d, block # %d (0x%x), count %d 
(0x%x)\n",
diff --git a/include/environment.h b/include/environment.h
index de67cf4f0e..a823948da2 100644
--- a/include/environment.h
+++ b/include/environment.h
@@ -233,7 +233,7 @@ struct env_driver {
         *
         * @return 0 if OK, -ve on error
         */
-       int (*erase)(void);
+       int (*erase)(bool use_redund);

        /**
         * init() - Set up the initial pre-relocation environment
@@ -318,7 +318,7 @@ int env_save(void);
  *
  * @return 0 if OK, -ve on error
  */
-int env_erase(void);
+int env_erase(bool use_redund);

 /**
  * env_fix_drivers() - Updates envdriver as per relocation
--
2.17.1

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to