All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v4 0/4] add command env erase
@ 2019-04-28  8:51 Frank Wunderlich
  2019-04-28  8:51 ` [U-Boot] [PATCH v4 1/4] env: register erase command Frank Wunderlich
                   ` (4 more replies)
  0 siblings, 5 replies; 13+ messages in thread
From: Frank Wunderlich @ 2019-04-28  8:51 UTC (permalink / raw)
  To: u-boot

sometimes it is needed to erase the non-volatile environment
e.g. for boot-up with builtin-environment or after resizing env

this series add basic functionality for erasing environment from storage
as a first storage-driver mmc is introduced, other needs to be added later

changes since v3:
 - fixes
 - Kconfig-option as suggested by Simon Goldschmidt
 - including CONFIG_ENV_OFFSET_REDUND (4/4 is RFC)

Frank Wunderlich (4):
  env: register erase command
  env: mmc: add erase-function
  env: add option to use redundant offset
  [RFC] env: call env_erase twice if CONFIG_ENV_OFFSET_REDUND is set

 cmd/Kconfig           |  8 ++++++++
 cmd/nvedit.c          | 26 ++++++++++++++++++++++++++
 env/env.c             | 30 ++++++++++++++++++++++++++++++
 env/mmc.c             | 36 ++++++++++++++++++++++++++++++++++++
 include/environment.h | 17 +++++++++++++++++
 5 files changed, 117 insertions(+)

--
2.17.1

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v4 1/4] env: register erase command
  2019-04-28  8:51 [U-Boot] [PATCH v4 0/4] add command env erase Frank Wunderlich
@ 2019-04-28  8:51 ` Frank Wunderlich
  2019-06-24 19:26   ` Simon Goldschmidt
  2019-04-28  8:51 ` [U-Boot] [PATCH v4 2/4] env: mmc: add erase-function Frank Wunderlich
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 13+ messages in thread
From: Frank Wunderlich @ 2019-04-28  8:51 UTC (permalink / raw)
  To: u-boot

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 <frank-w@public-files.de>

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

Suggested-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
---
 cmd/Kconfig           |  8 ++++++++
 cmd/nvedit.c          | 19 +++++++++++++++++++
 env/env.c             | 30 ++++++++++++++++++++++++++++++
 include/environment.h | 17 +++++++++++++++++
 4 files changed, 74 insertions(+)

diff --git a/cmd/Kconfig b/cmd/Kconfig
index 0b07b3b9d7..e8a99cb5a3 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -397,6 +397,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
diff --git a/cmd/nvedit.c b/cmd/nvedit.c
index 24a6cf7824..0cbd8e8984 100644
--- a/cmd/nvedit.c
+++ b/cmd/nvedit.c
@@ -761,6 +761,19 @@ 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 */

@@ -1207,6 +1220,9 @@ static cmd_tbl_t cmd_env_sub[] = {
 #endif
 #if defined(CONFIG_CMD_SAVEENV) && !defined(CONFIG_ENV_IS_NOWHERE)
 	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)
@@ -1282,6 +1298,9 @@ static char env_help_text[] =
 #endif
 #if defined(CONFIG_CMD_SAVEENV) && !defined(CONFIG_ENV_IS_NOWHERE)
 	"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"
diff --git a/env/env.c b/env/env.c
index 4b417b90a2..d3cbe2f915 100644
--- a/env/env.c
+++ b/env/env.c
@@ -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;
 	}
@@ -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;
diff --git a/include/environment.h b/include/environment.h
index cd96676141..de67cf4f0e 100644
--- a/include/environment.h
+++ b/include/environment.h
@@ -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 {
@@ -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
 	 *
@@ -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
  */
--
2.17.1

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v4 2/4] env: mmc: add erase-function
  2019-04-28  8:51 [U-Boot] [PATCH v4 0/4] add command env erase Frank Wunderlich
  2019-04-28  8:51 ` [U-Boot] [PATCH v4 1/4] env: register erase command Frank Wunderlich
@ 2019-04-28  8:51 ` Frank Wunderlich
  2019-06-24 19:40   ` Simon Goldschmidt
  2019-04-28  8:51 ` [U-Boot] [PATCH v4 3/4] env: add option to use redundant offset Frank Wunderlich
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 13+ messages in thread
From: Frank Wunderlich @ 2019-04-28  8:51 UTC (permalink / raw)
  To: u-boot

this adds erase environment for mmc storage

Signed-off-by: Frank Wunderlich <frank-w@public-files.de>

squashed fixes:
 - fix bogus indent
 - add CONFIG_CMD_ERASEENV

Suggested-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
---
 env/mmc.c | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/env/mmc.c b/env/mmc.c
index c3cf35d01b..9ae9b1a66a 100644
--- a/env/mmc.c
+++ b/env/mmc.c
@@ -242,6 +242,34 @@ fini:
 	fini_mmc_for_env(mmc);
 	return ret;
 }
+
+#if defined(CONFIG_CMD_ERASEENV)
+static int env_mmc_erase(void)
+{
+	int dev = mmc_get_env_dev();
+	struct mmc *mmc = find_mmc_device(dev);
+	int n, blk, cnt;
+
+	if (!mmc)
+		return CMD_RET_FAILURE;
+
+	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",
+	       dev, blk, blk * mmc->read_bl_len,
+	       cnt, cnt * mmc->read_bl_len);
+
+	if (mmc_getwp(mmc) == 1) {
+		printf("Error: card is write protected!\n");
+		return CMD_RET_FAILURE;
+	}
+	n = blk_derase(mmc_get_blk_desc(mmc), blk, cnt);
+	printf("%d blocks erased: %s\n", n, (n == cnt) ? "OK" : "ERROR");
+
+	return (n == cnt) ? CMD_RET_SUCCESS : CMD_RET_FAILURE;
+}
+#endif /* CONFIG_CMD_ERASEENV */
 #endif /* CONFIG_CMD_SAVEENV && !CONFIG_SPL_BUILD */

 static inline int read_env(struct mmc *mmc, unsigned long size,
@@ -351,5 +379,8 @@ U_BOOT_ENV_LOCATION(mmc) = {
 	.load		= env_mmc_load,
 #ifndef CONFIG_SPL_BUILD
 	.save		= env_save_ptr(env_mmc_save),
+#if defined(CONFIG_CMD_ERASEENV)
+	.erase		= env_mmc_erase,
+#endif
 #endif
 };
--
2.17.1

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v4 3/4] env: add option to use redundant offset
  2019-04-28  8:51 [U-Boot] [PATCH v4 0/4] add command env erase Frank Wunderlich
  2019-04-28  8:51 ` [U-Boot] [PATCH v4 1/4] env: register erase command Frank Wunderlich
  2019-04-28  8:51 ` [U-Boot] [PATCH v4 2/4] env: mmc: add erase-function Frank Wunderlich
@ 2019-04-28  8:51 ` Frank Wunderlich
  2019-04-28  8:51 ` [U-Boot] [PATCH v4 4/4] [RFC] env: call env_erase twice if CONFIG_ENV_OFFSET_REDUND is set Frank Wunderlich
  2019-05-20 18:34 ` [U-Boot] [PATCH v4 0/4] add command env erase Frank Wunderlich
  4 siblings, 0 replies; 13+ messages in thread
From: Frank Wunderlich @ 2019-04-28  8:51 UTC (permalink / raw)
  To: u-boot

allow env erase on secondary offset using CONFIG_ENV_OFFSET_REDUND

Suggested-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
Signed-off-by: Frank Wunderlich <frank-w@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

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v4 4/4] [RFC] env: call env_erase twice if CONFIG_ENV_OFFSET_REDUND is set
  2019-04-28  8:51 [U-Boot] [PATCH v4 0/4] add command env erase Frank Wunderlich
                   ` (2 preceding siblings ...)
  2019-04-28  8:51 ` [U-Boot] [PATCH v4 3/4] env: add option to use redundant offset Frank Wunderlich
@ 2019-04-28  8:51 ` Frank Wunderlich
  2019-05-20 18:34 ` [U-Boot] [PATCH v4 0/4] add command env erase Frank Wunderlich
  4 siblings, 0 replies; 13+ messages in thread
From: Frank Wunderlich @ 2019-04-28  8:51 UTC (permalink / raw)
  To: u-boot

erase also the redundant environment location if offset is defined

this is a possible implementation without adding additional parameter
to env erase command

Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
---
 cmd/nvedit.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/cmd/nvedit.c b/cmd/nvedit.c
index 2071bcf443..f11972e8f1 100644
--- a/cmd/nvedit.c
+++ b/cmd/nvedit.c
@@ -766,8 +766,15 @@ U_BOOT_CMD(
 static int do_env_erase(cmd_tbl_t *cmdtp, int flag, int argc,
 			char * const argv[])
 {
-	return env_erase(false) ? 1 : 0;
+	int ret;
+
+	ret = env_erase(false) ? 1 : 0;
+	#ifdef CONFIG_ENV_OFFSET_REDUND
+		ret = ret || (env_erase(true) ? 1 : 0);
+	#endif
+	return ret;
 }
+
 U_BOOT_CMD(
 	eraseenv, 1, 0,	do_env_erase,
 	"erase environment variables from persistent storage",
--
2.17.1

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v4 0/4] add command env erase
  2019-04-28  8:51 [U-Boot] [PATCH v4 0/4] add command env erase Frank Wunderlich
                   ` (3 preceding siblings ...)
  2019-04-28  8:51 ` [U-Boot] [PATCH v4 4/4] [RFC] env: call env_erase twice if CONFIG_ENV_OFFSET_REDUND is set Frank Wunderlich
@ 2019-05-20 18:34 ` Frank Wunderlich
  2019-06-24 10:30   ` Frank Wunderlich
  4 siblings, 1 reply; 13+ messages in thread
From: Frank Wunderlich @ 2019-05-20 18:34 UTC (permalink / raw)
  To: u-boot

Hi,

Just a friendly reminder.

Any comments on my patches?

Regards Frank

Am 28. April 2019 10:51:24 MESZ schrieb Frank Wunderlich <frank-w@public-files.de>:
>sometimes it is needed to erase the non-volatile environment
>e.g. for boot-up with builtin-environment or after resizing env
>
>this series add basic functionality for erasing environment from
>storage
>as a first storage-driver mmc is introduced, other needs to be added
>later
>
>changes since v3:
> - fixes
> - Kconfig-option as suggested by Simon Goldschmidt
> - including CONFIG_ENV_OFFSET_REDUND (4/4 is RFC)
>
>Frank Wunderlich (4):
>  env: register erase command
>  env: mmc: add erase-function
>  env: add option to use redundant offset
>  [RFC] env: call env_erase twice if CONFIG_ENV_OFFSET_REDUND is set
>
> cmd/Kconfig           |  8 ++++++++
> cmd/nvedit.c          | 26 ++++++++++++++++++++++++++
> env/env.c             | 30 ++++++++++++++++++++++++++++++
> env/mmc.c             | 36 ++++++++++++++++++++++++++++++++++++
> include/environment.h | 17 +++++++++++++++++
> 5 files changed, 117 insertions(+)
>
>--
>2.17.1

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v4 0/4] add command env erase
  2019-05-20 18:34 ` [U-Boot] [PATCH v4 0/4] add command env erase Frank Wunderlich
@ 2019-06-24 10:30   ` Frank Wunderlich
  2019-06-24 18:16     ` Tom Rini
  2019-06-24 19:25     ` Simon Goldschmidt
  0 siblings, 2 replies; 13+ messages in thread
From: Frank Wunderlich @ 2019-06-24 10:30 UTC (permalink / raw)
  To: u-boot

no opinion about the last version?

regards Frank

> Am 28. April 2019 10:51:24 MESZ schrieb Frank Wunderlich <frank-w@public-files.de>:
> >sometimes it is needed to erase the non-volatile environment
> >e.g. for boot-up with builtin-environment or after resizing env
> >
> >this series add basic functionality for erasing environment from
> >storage
> >as a first storage-driver mmc is introduced, other needs to be added
> >later
> >
> >changes since v3:
> > - fixes
> > - Kconfig-option as suggested by Simon Goldschmidt
> > - including CONFIG_ENV_OFFSET_REDUND (4/4 is RFC)
> >
> >Frank Wunderlich (4):
> >  env: register erase command
> >  env: mmc: add erase-function
> >  env: add option to use redundant offset
> >  [RFC] env: call env_erase twice if CONFIG_ENV_OFFSET_REDUND is set
> >
> > cmd/Kconfig           |  8 ++++++++
> > cmd/nvedit.c          | 26 ++++++++++++++++++++++++++
> > env/env.c             | 30 ++++++++++++++++++++++++++++++
> > env/mmc.c             | 36 ++++++++++++++++++++++++++++++++++++
> > include/environment.h | 17 +++++++++++++++++
> > 5 files changed, 117 insertions(+)
> >
> >--
> >2.17.1
>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v4 0/4] add command env erase
  2019-06-24 10:30   ` Frank Wunderlich
@ 2019-06-24 18:16     ` Tom Rini
  2019-06-24 19:25     ` Simon Goldschmidt
  1 sibling, 0 replies; 13+ messages in thread
From: Tom Rini @ 2019-06-24 18:16 UTC (permalink / raw)
  To: u-boot

On Mon, Jun 24, 2019 at 12:30:01PM +0200, Frank Wunderlich wrote:
> no opinion about the last version?
> 
> regards Frank
> 
> > Am 28. April 2019 10:51:24 MESZ schrieb Frank Wunderlich <frank-w@public-files.de>:
> > >sometimes it is needed to erase the non-volatile environment
> > >e.g. for boot-up with builtin-environment or after resizing env
> > >
> > >this series add basic functionality for erasing environment from
> > >storage
> > >as a first storage-driver mmc is introduced, other needs to be added
> > >later
> > >
> > >changes since v3:
> > > - fixes
> > > - Kconfig-option as suggested by Simon Goldschmidt
> > > - including CONFIG_ENV_OFFSET_REDUND (4/4 is RFC)
> > >
> > >Frank Wunderlich (4):
> > >  env: register erase command
> > >  env: mmc: add erase-function
> > >  env: add option to use redundant offset
> > >  [RFC] env: call env_erase twice if CONFIG_ENV_OFFSET_REDUND is set
> > >
> > > cmd/Kconfig           |  8 ++++++++
> > > cmd/nvedit.c          | 26 ++++++++++++++++++++++++++
> > > env/env.c             | 30 ++++++++++++++++++++++++++++++
> > > env/mmc.c             | 36 ++++++++++++++++++++++++++++++++++++
> > > include/environment.h | 17 +++++++++++++++++
> > > 5 files changed, 117 insertions(+)

Seems like a reasonable concept and I believe I looked it over and
everything new is under a CONFIG guard, so, thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20190624/64eb8181/attachment.sig>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v4 0/4] add command env erase
  2019-06-24 10:30   ` Frank Wunderlich
  2019-06-24 18:16     ` Tom Rini
@ 2019-06-24 19:25     ` Simon Goldschmidt
  1 sibling, 0 replies; 13+ messages in thread
From: Simon Goldschmidt @ 2019-06-24 19:25 UTC (permalink / raw)
  To: u-boot

Hi Frank,

Am 24.06.2019 um 12:30 schrieb Frank Wunderlich:
> no opinion about the last version?

Sorry, I tried multiple times to review this but failed to find the 
time. Seems like I found the time now ;-)

I'll reply to the original patch mails.

Regards,
Simon

> 
> regards Frank
> 
>> Am 28. April 2019 10:51:24 MESZ schrieb Frank Wunderlich <frank-w@public-files.de>:
>>> sometimes it is needed to erase the non-volatile environment
>>> e.g. for boot-up with builtin-environment or after resizing env
>>>
>>> this series add basic functionality for erasing environment from
>>> storage
>>> as a first storage-driver mmc is introduced, other needs to be added
>>> later
>>>
>>> changes since v3:
>>> - fixes
>>> - Kconfig-option as suggested by Simon Goldschmidt
>>> - including CONFIG_ENV_OFFSET_REDUND (4/4 is RFC)
>>>
>>> Frank Wunderlich (4):
>>>   env: register erase command
>>>   env: mmc: add erase-function
>>>   env: add option to use redundant offset
>>>   [RFC] env: call env_erase twice if CONFIG_ENV_OFFSET_REDUND is set
>>>
>>> cmd/Kconfig           |  8 ++++++++
>>> cmd/nvedit.c          | 26 ++++++++++++++++++++++++++
>>> env/env.c             | 30 ++++++++++++++++++++++++++++++
>>> env/mmc.c             | 36 ++++++++++++++++++++++++++++++++++++
>>> include/environment.h | 17 +++++++++++++++++
>>> 5 files changed, 117 insertions(+)
>>>
>>> --
>>> 2.17.1
>>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v4 1/4] env: register erase command
  2019-04-28  8:51 ` [U-Boot] [PATCH v4 1/4] env: register erase command Frank Wunderlich
@ 2019-06-24 19:26   ` Simon Goldschmidt
  0 siblings, 0 replies; 13+ messages in thread
From: Simon Goldschmidt @ 2019-06-24 19:26 UTC (permalink / raw)
  To: u-boot

Am 28.04.2019 um 10:51 schrieb Frank Wunderlich:
> 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 <frank-w@public-files.de>

Reviewed-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>

However, due to changes, this doesn't apply any more, so a v5 is needed.

Regards,
Simon

> 
> squashed fixes
>   - start message with "Erasing"
>   - mark erase-function as optional
>   - env: separate eraseenv from saveenv
> 
> Suggested-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
> =2D--
>   cmd/Kconfig           |  8 ++++++++
>   cmd/nvedit.c          | 19 +++++++++++++++++++
>   env/env.c             | 30 ++++++++++++++++++++++++++++++
>   include/environment.h | 17 +++++++++++++++++
>   4 files changed, 74 insertions(+)
> 
> diff --git a/cmd/Kconfig b/cmd/Kconfig
> index 0b07b3b9d7..e8a99cb5a3 100644
> =2D-- a/cmd/Kconfig
> +++ b/cmd/Kconfig
> @@ -397,6 +397,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
> diff --git a/cmd/nvedit.c b/cmd/nvedit.c
> index 24a6cf7824..0cbd8e8984 100644
> =2D-- a/cmd/nvedit.c
> +++ b/cmd/nvedit.c
> @@ -761,6 +761,19 @@ 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 */
> 
> @@ -1207,6 +1220,9 @@ static cmd_tbl_t cmd_env_sub[] =3D {
>   #endif
>   #if defined(CONFIG_CMD_SAVEENV) && !defined(CONFIG_ENV_IS_NOWHERE)
>   	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)
> @@ -1282,6 +1298,9 @@ static char env_help_text[] =3D
>   #endif
>   #if defined(CONFIG_CMD_SAVEENV) && !defined(CONFIG_ENV_IS_NOWHERE)
>   	"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 speci=
> fied\n"
> diff --git a/env/env.c b/env/env.c
> index 4b417b90a2..d3cbe2f915 100644
> =2D-- a/env/env.c
> +++ b/env/env.c
> @@ -24,6 +24,8 @@ void env_fix_drivers(void)
>   			entry->load +=3D gd->reloc_off;
>   		if (entry->save)
>   			entry->save +=3D gd->reloc_off;
> +		if (entry->erase)
> +			entry->erase +=3D gd->reloc_off;
>   		if (entry->init)
>   			entry->init +=3D gd->reloc_off;
>   	}
> @@ -254,6 +256,34 @@ int env_save(void)
>   	return -ENODEV;
>   }
> 
> +int env_erase(void)
> +{
> +	struct env_driver *drv;
> +
> +	drv =3D 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 =3D 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;
> diff --git a/include/environment.h b/include/environment.h
> index cd96676141..de67cf4f0e 100644
> =2D-- a/include/environment.h
> +++ b/include/environment.h
> @@ -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 {
> @@ -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
>   	 *
> @@ -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
>    */
> =2D-
> 2.17.1
> 

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v4 2/4] env: mmc: add erase-function
  2019-04-28  8:51 ` [U-Boot] [PATCH v4 2/4] env: mmc: add erase-function Frank Wunderlich
@ 2019-06-24 19:40   ` Simon Goldschmidt
  2019-06-24 20:08     ` Frank Wunderlich
  0 siblings, 1 reply; 13+ messages in thread
From: Simon Goldschmidt @ 2019-06-24 19:40 UTC (permalink / raw)
  To: u-boot

Am 28.04.2019 um 10:51 schrieb Frank Wunderlich:
> this adds erase environment for mmc storage
> 
> Signed-off-by: Frank Wunderlich <frank-w@public-files.de>

I think this is still too complex.

I'd drop patches 3/4 and 4/4 and just erase both redundant storages here 
in env/mmc.c by calling the actual erase function twice.

To do that, it would help to do as I suggested in response to v3: copy 
the 2-function style used by the save env code, then you can just call 
that 2nd function twice with a different offset (all in env/mmc.c).

Regards,
Simon

> 
> squashed fixes:
>   - fix bogus indent
>   - add CONFIG_CMD_ERASEENV
> 
> Suggested-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
> =2D--
>   env/mmc.c | 31 +++++++++++++++++++++++++++++++
>   1 file changed, 31 insertions(+)
> 
> diff --git a/env/mmc.c b/env/mmc.c
> index c3cf35d01b..9ae9b1a66a 100644
> =2D-- a/env/mmc.c
> +++ b/env/mmc.c
> @@ -242,6 +242,34 @@ fini:
>   	fini_mmc_for_env(mmc);
>   	return ret;
>   }
> +
> +#if defined(CONFIG_CMD_ERASEENV)
> +static int env_mmc_erase(void)
> +{
> +	int dev =3D mmc_get_env_dev();
> +	struct mmc *mmc =3D find_mmc_device(dev);
> +	int n, blk, cnt;
> +
> +	if (!mmc)
> +		return CMD_RET_FAILURE;
> +
> +	blk =3D CONFIG_ENV_OFFSET / mmc->read_bl_len;
> +	cnt =3D CONFIG_ENV_SIZE / mmc->read_bl_len;
> +
> +	printf("\nMMC erase env: dev # %d, block # %d (0x%x), count %d (0x%x)\n"=
> ,
> +	       dev, blk, blk * mmc->read_bl_len,
> +	       cnt, cnt * mmc->read_bl_len);
> +
> +	if (mmc_getwp(mmc) =3D=3D 1) {
> +		printf("Error: card is write protected!\n");
> +		return CMD_RET_FAILURE;
> +	}
> +	n =3D blk_derase(mmc_get_blk_desc(mmc), blk, cnt);
> +	printf("%d blocks erased: %s\n", n, (n =3D=3D cnt) ? "OK" : "ERROR");
> +
> +	return (n =3D=3D cnt) ? CMD_RET_SUCCESS : CMD_RET_FAILURE;
> +}
> +#endif /* CONFIG_CMD_ERASEENV */
>   #endif /* CONFIG_CMD_SAVEENV && !CONFIG_SPL_BUILD */
> 
>   static inline int read_env(struct mmc *mmc, unsigned long size,
> @@ -351,5 +379,8 @@ U_BOOT_ENV_LOCATION(mmc) =3D {
>   	.load		=3D env_mmc_load,
>   #ifndef CONFIG_SPL_BUILD
>   	.save		=3D env_save_ptr(env_mmc_save),
> +#if defined(CONFIG_CMD_ERASEENV)
> +	.erase		=3D env_mmc_erase,
> +#endif
>   #endif
>   };
> =2D-
> 2.17.1
> 

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v4 2/4] env: mmc: add erase-function
  2019-06-24 19:40   ` Simon Goldschmidt
@ 2019-06-24 20:08     ` Frank Wunderlich
  2019-06-24 20:19       ` Simon Goldschmidt
  0 siblings, 1 reply; 13+ messages in thread
From: Frank Wunderlich @ 2019-06-24 20:08 UTC (permalink / raw)
  To: u-boot

You mean passing the offset (normal/redundant) instead of a bool?

Am 24. Juni 2019 21:40:36 MESZ schrieb Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>:
>Am 28.04.2019 um 10:51 schrieb Frank Wunderlich:
>> this adds erase environment for mmc storage
>> 
>> Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
>
>I think this is still too complex.
>
>I'd drop patches 3/4 and 4/4 and just erase both redundant storages
>here 
>in env/mmc.c by calling the actual erase function twice.
>
>To do that, it would help to do as I suggested in response to v3: copy 
>the 2-function style used by the save env code, then you can just call 
>that 2nd function twice with a different offset (all in env/mmc.c).
>
>Regards,
>Simon
>
>> 
>> squashed fixes:
>>   - fix bogus indent
>>   - add CONFIG_CMD_ERASEENV
>> 
>> Suggested-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
>> =2D--
>>   env/mmc.c | 31 +++++++++++++++++++++++++++++++
>>   1 file changed, 31 insertions(+)
>> 
>> diff --git a/env/mmc.c b/env/mmc.c
>> index c3cf35d01b..9ae9b1a66a 100644
>> =2D-- a/env/mmc.c
>> +++ b/env/mmc.c
>> @@ -242,6 +242,34 @@ fini:
>>   	fini_mmc_for_env(mmc);
>>   	return ret;
>>   }
>> +
>> +#if defined(CONFIG_CMD_ERASEENV)
>> +static int env_mmc_erase(void)
>> +{
>> +	int dev =3D mmc_get_env_dev();
>> +	struct mmc *mmc =3D find_mmc_device(dev);
>> +	int n, blk, cnt;
>> +
>> +	if (!mmc)
>> +		return CMD_RET_FAILURE;
>> +
>> +	blk =3D CONFIG_ENV_OFFSET / mmc->read_bl_len;
>> +	cnt =3D CONFIG_ENV_SIZE / mmc->read_bl_len;
>> +
>> +	printf("\nMMC erase env: dev # %d, block # %d (0x%x), count %d
>(0x%x)\n"=
>> ,
>> +	       dev, blk, blk * mmc->read_bl_len,
>> +	       cnt, cnt * mmc->read_bl_len);
>> +
>> +	if (mmc_getwp(mmc) =3D=3D 1) {
>> +		printf("Error: card is write protected!\n");
>> +		return CMD_RET_FAILURE;
>> +	}
>> +	n =3D blk_derase(mmc_get_blk_desc(mmc), blk, cnt);
>> +	printf("%d blocks erased: %s\n", n, (n =3D=3D cnt) ? "OK" :
>"ERROR");
>> +
>> +	return (n =3D=3D cnt) ? CMD_RET_SUCCESS : CMD_RET_FAILURE;
>> +}
>> +#endif /* CONFIG_CMD_ERASEENV */
>>   #endif /* CONFIG_CMD_SAVEENV && !CONFIG_SPL_BUILD */
>> 
>>   static inline int read_env(struct mmc *mmc, unsigned long size,
>> @@ -351,5 +379,8 @@ U_BOOT_ENV_LOCATION(mmc) =3D {
>>   	.load		=3D env_mmc_load,
>>   #ifndef CONFIG_SPL_BUILD
>>   	.save		=3D env_save_ptr(env_mmc_save),
>> +#if defined(CONFIG_CMD_ERASEENV)
>> +	.erase		=3D env_mmc_erase,
>> +#endif
>>   #endif
>>   };
>> =2D-
>> 2.17.1
>> 

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v4 2/4] env: mmc: add erase-function
  2019-06-24 20:08     ` Frank Wunderlich
@ 2019-06-24 20:19       ` Simon Goldschmidt
  0 siblings, 0 replies; 13+ messages in thread
From: Simon Goldschmidt @ 2019-06-24 20:19 UTC (permalink / raw)
  To: u-boot

Frank Wunderlich <frank-w@public-files.de> schrieb am Mo., 24. Juni 2019,
22:09:

> You mean passing the offset (normal/redundant) instead of a bool?
>

Would you mind keeping the mail style of this list and stop top-responses
please?

I don't care where you make the difference between bool and actual offset,
but you should keep all this as a changeset to env/mmc.c only to keep it
consistent to existing redundant env code. Don't expose the bool to the env
driver interface or the command file.

Regards,
Simon


> Am 24. Juni 2019 21:40:36 MESZ schrieb Simon Goldschmidt <
> simon.k.r.goldschmidt at gmail.com>:
> >Am 28.04.2019 um 10:51 schrieb Frank Wunderlich:
> >> this adds erase environment for mmc storage
> >>
> >> Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
> >
> >I think this is still too complex.
> >
> >I'd drop patches 3/4 and 4/4 and just erase both redundant storages
> >here
> >in env/mmc.c by calling the actual erase function twice.
> >
> >To do that, it would help to do as I suggested in response to v3: copy
> >the 2-function style used by the save env code, then you can just call
> >that 2nd function twice with a different offset (all in env/mmc.c).
> >
> >Regards,
> >Simon
> >
> >>
> >> squashed fixes:
> >>   - fix bogus indent
> >>   - add CONFIG_CMD_ERASEENV
> >>
> >> Suggested-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
> >> =2D--
> >>   env/mmc.c | 31 +++++++++++++++++++++++++++++++
> >>   1 file changed, 31 insertions(+)
> >>
> >> diff --git a/env/mmc.c b/env/mmc.c
> >> index c3cf35d01b..9ae9b1a66a 100644
> >> =2D-- a/env/mmc.c
> >> +++ b/env/mmc.c
> >> @@ -242,6 +242,34 @@ fini:
> >>      fini_mmc_for_env(mmc);
> >>      return ret;
> >>   }
> >> +
> >> +#if defined(CONFIG_CMD_ERASEENV)
> >> +static int env_mmc_erase(void)
> >> +{
> >> +    int dev =3D mmc_get_env_dev();
> >> +    struct mmc *mmc =3D find_mmc_device(dev);
> >> +    int n, blk, cnt;
> >> +
> >> +    if (!mmc)
> >> +            return CMD_RET_FAILURE;
> >> +
> >> +    blk =3D CONFIG_ENV_OFFSET / mmc->read_bl_len;
> >> +    cnt =3D CONFIG_ENV_SIZE / mmc->read_bl_len;
> >> +
> >> +    printf("\nMMC erase env: dev # %d, block # %d (0x%x), count %d
> >(0x%x)\n"=
> >> ,
> >> +           dev, blk, blk * mmc->read_bl_len,
> >> +           cnt, cnt * mmc->read_bl_len);
> >> +
> >> +    if (mmc_getwp(mmc) =3D=3D 1) {
> >> +            printf("Error: card is write protected!\n");
> >> +            return CMD_RET_FAILURE;
> >> +    }
> >> +    n =3D blk_derase(mmc_get_blk_desc(mmc), blk, cnt);
> >> +    printf("%d blocks erased: %s\n", n, (n =3D=3D cnt) ? "OK" :
> >"ERROR");
> >> +
> >> +    return (n =3D=3D cnt) ? CMD_RET_SUCCESS : CMD_RET_FAILURE;
> >> +}
> >> +#endif /* CONFIG_CMD_ERASEENV */
> >>   #endif /* CONFIG_CMD_SAVEENV && !CONFIG_SPL_BUILD */
> >>
> >>   static inline int read_env(struct mmc *mmc, unsigned long size,
> >> @@ -351,5 +379,8 @@ U_BOOT_ENV_LOCATION(mmc) =3D {
> >>      .load           =3D env_mmc_load,
> >>   #ifndef CONFIG_SPL_BUILD
> >>      .save           =3D env_save_ptr(env_mmc_save),
> >> +#if defined(CONFIG_CMD_ERASEENV)
> >> +    .erase          =3D env_mmc_erase,
> >> +#endif
> >>   #endif
> >>   };
> >> =2D-
> >> 2.17.1
> >>
>

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2019-06-24 20:19 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-28  8:51 [U-Boot] [PATCH v4 0/4] add command env erase Frank Wunderlich
2019-04-28  8:51 ` [U-Boot] [PATCH v4 1/4] env: register erase command Frank Wunderlich
2019-06-24 19:26   ` Simon Goldschmidt
2019-04-28  8:51 ` [U-Boot] [PATCH v4 2/4] env: mmc: add erase-function Frank Wunderlich
2019-06-24 19:40   ` Simon Goldschmidt
2019-06-24 20:08     ` Frank Wunderlich
2019-06-24 20:19       ` Simon Goldschmidt
2019-04-28  8:51 ` [U-Boot] [PATCH v4 3/4] env: add option to use redundant offset Frank Wunderlich
2019-04-28  8:51 ` [U-Boot] [PATCH v4 4/4] [RFC] env: call env_erase twice if CONFIG_ENV_OFFSET_REDUND is set Frank Wunderlich
2019-05-20 18:34 ` [U-Boot] [PATCH v4 0/4] add command env erase Frank Wunderlich
2019-06-24 10:30   ` Frank Wunderlich
2019-06-24 18:16     ` Tom Rini
2019-06-24 19:25     ` Simon Goldschmidt

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.