Skip to content

Commit

Permalink
env: register erase command
Browse files Browse the repository at this point in the history
this patch adds basic changes for adding a erase-subcommand to env

with this command the environment stored on non-volatile storage written
by saveenv can be cleared.

Signed-off-by: Frank Wunderlich <[email protected]>

squashed fixes
 - start message with "Erasing"
 - mark erase-function as optional
 - env: separate eraseenv from saveenv

Suggested-by: Simon Goldschmidt <[email protected]>
Reviewed-by: Simon Goldschmidt <[email protected]>
  • Loading branch information
frank-w authored and trini committed Jul 18, 2019
1 parent 4225f83 commit cd121bd
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 0 deletions.
8 changes: 8 additions & 0 deletions cmd/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -408,6 +408,14 @@ config CMD_SAVEENV
Save all environment variables into the compiled-in persistent
storage.

config CMD_ERASEENV
bool "eraseenv"
default n
depends on CMD_SAVEENV
help
Erase environment variables from the compiled-in persistent
storage.

config CMD_ENV_EXISTS
bool "env exists"
default y
Expand Down
20 changes: 20 additions & 0 deletions cmd/nvedit.c
Original file line number Diff line number Diff line change
Expand Up @@ -767,6 +767,20 @@ U_BOOT_CMD(
"save environment variables to persistent storage",
""
);

#if defined(CONFIG_CMD_ERASEENV)
static int do_env_erase(cmd_tbl_t *cmdtp, int flag, int argc,
char * const argv[])
{
return env_erase() ? 1 : 0;
}

U_BOOT_CMD(
eraseenv, 1, 0, do_env_erase,
"erase environment variables from persistent storage",
""
);
#endif
#endif
#endif /* CONFIG_SPL_BUILD */

Expand Down Expand Up @@ -1316,6 +1330,9 @@ static cmd_tbl_t cmd_env_sub[] = {
#endif
#if defined(CONFIG_CMD_SAVEENV) && defined(ENV_IS_IN_DEVICE)
U_BOOT_CMD_MKENT(save, 1, 0, do_env_save, "", ""),
#if defined(CONFIG_CMD_ERASEENV)
U_BOOT_CMD_MKENT(erase, 1, 0, do_env_erase, "", ""),
#endif
#endif
U_BOOT_CMD_MKENT(set, CONFIG_SYS_MAXARGS, 0, do_env_set, "", ""),
#if defined(CONFIG_CMD_ENV_EXISTS)
Expand Down Expand Up @@ -1396,6 +1413,9 @@ static char env_help_text[] =
#endif
#if defined(CONFIG_CMD_SAVEENV) && defined(ENV_IS_IN_DEVICE)
"env save - save environment\n"
#if defined(CONFIG_CMD_ERASEENV)
"env erase - erase environment\n"
#endif
#endif
#if defined(CONFIG_CMD_NVEDIT_EFI)
"env set -e name [arg ...] - set UEFI variable; unset if 'arg' not specified\n"
Expand Down
30 changes: 30 additions & 0 deletions env/env.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,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;
}
Expand Down Expand Up @@ -254,6 +256,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;
Expand Down
17 changes: 17 additions & 0 deletions include/environment.h
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,7 @@ enum env_operation {
ENVOP_INIT, /* we want to call the init function */
ENVOP_LOAD, /* we want to call the load function */
ENVOP_SAVE, /* we want to call the save function */
ENVOP_ERASE, /* we want to call the erase function */
};

struct env_driver {
Expand All @@ -225,6 +226,15 @@ struct env_driver {
*/
int (*save)(void);

/**
* erase() - Erase the environment on storage
*
* This method is optional and required for 'eraseenv' to work.
*
* @return 0 if OK, -ve on error
*/
int (*erase)(void);

/**
* init() - Set up the initial pre-relocation environment
*
Expand Down Expand Up @@ -303,6 +313,13 @@ int env_load(void);
*/
int env_save(void);

/**
* env_erase() - Erase the environment on storage
*
* @return 0 if OK, -ve on error
*/
int env_erase(void);

/**
* env_fix_drivers() - Updates envdriver as per relocation
*/
Expand Down

0 comments on commit cd121bd

Please sign in to comment.