Merge https://gitlab.denx.de/u-boot/custodians/u-boot-x86
[oweals/u-boot.git] / env / env.c
index 4b417b90a2912c201f201514e840d644f03e45e7..9237bb9c742a5242940cd6248751bc5d4eef86fa 100644 (file)
--- a/env/env.c
+++ b/env/env.c
@@ -5,7 +5,8 @@
  */
 
 #include <common.h>
-#include <environment.h>
+#include <env.h>
+#include <env_internal.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -24,6 +25,8 @@ void env_fix_drivers(void)
                        entry->load += gd->reloc_off;
                if (entry->save)
                        entry->save += gd->reloc_off;
+               if (entry->erase)
+                       entry->erase += gd->reloc_off;
                if (entry->init)
                        entry->init += gd->reloc_off;
        }
@@ -254,6 +257,34 @@ int env_save(void)
        return -ENODEV;
 }
 
+int env_erase(void)
+{
+       struct env_driver *drv;
+
+       drv = env_driver_lookup(ENVOP_ERASE, gd->env_load_prio);
+       if (drv) {
+               int ret;
+
+               if (!drv->erase)
+                       return -ENODEV;
+
+               if (!env_has_inited(drv->location))
+                       return -ENODEV;
+
+               printf("Erasing Environment on %s... ", drv->name);
+               ret = drv->erase();
+               if (ret)
+                       printf("Failed (%d)\n", ret);
+               else
+                       printf("OK\n");
+
+               if (!ret)
+                       return 0;
+       }
+
+       return -ENODEV;
+}
+
 int env_init(void)
 {
        struct env_driver *drv;