diff mbox series

[RESEND,05/10] sandbox: support the change of env location

Message ID 20200212184501.5911-6-patrick.delaunay@st.com
State Superseded
Headers show
Series env: ext4: add test for env in ext4 | expand

Commit Message

Patrick Delaunay Feb. 12, 2020, 6:44 p.m. UTC
Add support of environment location with a new sandbox command
'env_loc'.

When the user change the environment location with the command
'env_loc <location>' the env is reinitialized and saved;
the GD_FLG_ENV_DEFAULT flag is also updated.

When the user set the same env location, the environment is
re-loaded.

Signed-off-by: Patrick Delaunay <patrick.delaunay at st.com>
---

 board/sandbox/sandbox.c | 40 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 39 insertions(+), 1 deletion(-)

Comments

Simon Glass Feb. 16, 2020, 7:02 p.m. UTC | #1
Hi Patrick,

On Wed, 12 Feb 2020 at 11:45, Patrick Delaunay <patrick.delaunay at st.com> wrote:
>
> Add support of environment location with a new sandbox command
> 'env_loc'.
>
> When the user change the environment location with the command
> 'env_loc <location>' the env is reinitialized and saved;
> the GD_FLG_ENV_DEFAULT flag is also updated.
>
> When the user set the same env location, the environment is
> re-loaded.
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay at st.com>
> ---
>
>  board/sandbox/sandbox.c | 40 +++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 39 insertions(+), 1 deletion(-)
>
> diff --git a/board/sandbox/sandbox.c b/board/sandbox/sandbox.c
> index 01f356be31..023a71d5f0 100644
> --- a/board/sandbox/sandbox.c
> +++ b/board/sandbox/sandbox.c
> @@ -21,6 +21,9 @@
>   */
>  gd_t *gd;
>
> +/* env location: current location used during test */
> +static enum env_location sandbox_env_location = ENVL_NOWHERE;
> +
>  /* Add a simple GPIO device */
>  U_BOOT_DEVICE(gpio_sandbox) = {
>         .name = "gpio_sandbox",
> @@ -53,9 +56,44 @@ enum env_location env_get_location(enum env_operation op, int prio)
>
>         gd->env_load_prio = 0;
>
> -       return ENVL_NOWHERE;
> +       return sandbox_env_location;
>  }
>
> +static int do_env_loc(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])

This should be a sub-command of 'env' I think.

Regards,
Simon
diff mbox series

Patch

diff --git a/board/sandbox/sandbox.c b/board/sandbox/sandbox.c
index 01f356be31..023a71d5f0 100644
--- a/board/sandbox/sandbox.c
+++ b/board/sandbox/sandbox.c
@@ -21,6 +21,9 @@ 
  */
 gd_t *gd;
 
+/* env location: current location used during test */
+static enum env_location sandbox_env_location = ENVL_NOWHERE;
+
 /* Add a simple GPIO device */
 U_BOOT_DEVICE(gpio_sandbox) = {
 	.name = "gpio_sandbox",
@@ -53,9 +56,44 @@  enum env_location env_get_location(enum env_operation op, int prio)
 
 	gd->env_load_prio = 0;
 
-	return ENVL_NOWHERE;
+	return sandbox_env_location;
 }
 
+static int do_env_loc(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+	enum env_location loc;
+
+	if (argc < 2)
+		return CMD_RET_USAGE;
+
+	loc = (enum env_location)simple_strtoul(argv[1], NULL, 10);
+	if (loc >= ENVL_COUNT)
+		return CMD_RET_FAILURE;
+
+	if (sandbox_env_location != loc) {
+		sandbox_env_location = loc;
+		if (loc == ENVL_NOWHERE) {
+			gd->flags |= GD_FLG_ENV_DEFAULT;
+			gd->env_valid = ENV_VALID;
+		} else {
+			if (gd->flags & GD_FLG_ENV_DEFAULT) {
+				gd->flags &= ~GD_FLG_ENV_DEFAULT;
+				if (!env_init())
+					env_save();
+			}
+		}
+	} else {
+		if (!env_init())
+			env_load();
+	}
+
+	return CMD_RET_SUCCESS;
+}
+
+U_BOOT_CMD(env_loc, 2, 1, do_env_loc,
+	   "set the environment location", "[loc]"
+);
+
 int dram_init(void)
 {
 	gd->ram_size = CONFIG_SYS_SDRAM_SIZE;