All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yaniv Levinsky <yaniv.levinsky@compulab.co.il>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 4/4] env: common: accept flags on reset to default env
Date: Sun, 24 Jun 2018 19:16:57 +0300	[thread overview]
Message-ID: <20180624161657.32632-5-yaniv.levinsky@compulab.co.il> (raw)
In-Reply-To: <20180624161657.32632-1-yaniv.levinsky@compulab.co.il>

The function set_default_env() sets the hashtable flags for import_r().
Formally set_default_env() doesn't accept flags from its callers. In
practice the caller can (un)set the H_INTERACTIVE flag, but it has to be
done using the first character of the function's string argument. Other
flags like H_FORCE can't be set by the caller.

Change the function to accept flags argument. The benefits are:
1. The caller will have to explicitly set the H_INTERACTIVE flag,
   instead of un-setting it using a special char in a string.
2. Add the ability to propagate flags from the caller to himport(),
   especially the H_FORCE flag from do_env_default() in nvedit.c that
   currently gets ignored for "env default -a -f" commands.
3. Flags and messages will not be coupled together. A caller will be
   able to set flags without passing a string and vice versa.

Please note:
The propagation of H_FORCE from do_env_default() does not introduce any
functional changes, because currently himport_r() is set to destroy the
old environment regardless if H_FORCE flag is set or not. More changes
are needed to utilize the propagation of H_FORCE.

Signed-off-by: Yaniv Levinsky <yaniv.levinsky@compulab.co.il>
Acked-by: Igor Grinberg <grinberg@compulab.co.il>
---
 arch/arm/mach-imx/mx6/opos6ul.c |  2 +-
 cmd/nvedit.c                    |  3 ++-
 common/board_r.c                |  2 +-
 common/spl/spl_dfu.c            |  2 +-
 env/common.c                    | 22 +++++++++-------------
 env/ext4.c                      |  2 +-
 env/fat.c                       |  2 +-
 env/mmc.c                       | 12 ++++++------
 env/nand.c                      |  6 +++---
 env/sata.c                      |  2 +-
 env/sf.c                        | 10 +++++-----
 env/ubi.c                       |  6 +++---
 include/environment.h           |  2 +-
 13 files changed, 35 insertions(+), 38 deletions(-)

diff --git a/arch/arm/mach-imx/mx6/opos6ul.c b/arch/arm/mach-imx/mx6/opos6ul.c
index af3384d10e..94a3d71201 100644
--- a/arch/arm/mach-imx/mx6/opos6ul.c
+++ b/arch/arm/mach-imx/mx6/opos6ul.c
@@ -127,7 +127,7 @@ int board_late_init(void)
 
 	/* In bootstrap don't use the env vars */
 	if (((reg & 0x3000000) >> 24) == 0x1) {
-		set_default_env(NULL);
+		set_default_env(NULL, 0);
 		env_set("preboot", "");
 	}
 
diff --git a/cmd/nvedit.c b/cmd/nvedit.c
index 8b73c606ca..796867c62c 100644
--- a/cmd/nvedit.c
+++ b/cmd/nvedit.c
@@ -802,7 +802,8 @@ static int do_env_default(cmd_tbl_t *cmdtp, int flag,
 	debug("Final value for argc=%d\n", argc);
 	if (all && (argc == 0)) {
 		/* Reset the whole environment */
-		set_default_env("## Resetting to default environment\n");
+		set_default_env("## Resetting to default environment\n",
+				env_flag);
 		return 0;
 	}
 	if (!all && (argc > 0)) {
diff --git a/common/board_r.c b/common/board_r.c
index 6b297068bd..8495777953 100644
--- a/common/board_r.c
+++ b/common/board_r.c
@@ -454,7 +454,7 @@ static int initr_env(void)
 	if (should_load_env())
 		env_relocate();
 	else
-		set_default_env(NULL);
+		set_default_env(NULL, 0);
 #ifdef CONFIG_OF_CONTROL
 	env_set_addr("fdtcontroladdr", gd->fdt_blob);
 #endif
diff --git a/common/spl/spl_dfu.c b/common/spl/spl_dfu.c
index b8e3a6c89e..01178f611f 100644
--- a/common/spl/spl_dfu.c
+++ b/common/spl/spl_dfu.c
@@ -38,7 +38,7 @@ int spl_dfu_cmd(int usbctrl, char *dfu_alt_info, char *interface, char *devstr)
 	int ret;
 
 	/* set default environment */
-	set_default_env(0);
+	set_default_env(NULL, 0);
 	str_env = env_get(dfu_alt_info);
 	if (!str_env) {
 		pr_err("\"dfu_alt_info\" env variable not defined!\n");
diff --git a/env/common.c b/env/common.c
index 05183a4af0..1430100c85 100644
--- a/env/common.c
+++ b/env/common.c
@@ -58,22 +58,18 @@ char *env_get_default(const char *name)
 	return ret_val;
 }
 
-void set_default_env(const char *s)
+void set_default_env(const char *s, int flags)
 {
-	int flags = 0;
-
 	if (sizeof(default_environment) > ENV_SIZE) {
 		puts("*** Error - default environment is too large\n\n");
 		return;
 	}
 
 	if (s) {
-		if (*s == '!') {
+		if ((flags & H_INTERACTIVE) == 0) {
 			printf("*** Warning - %s, "
-				"using default environment\n\n",
-				s + 1);
+				"using default environment\n\n", s);
 		} else {
-			flags = H_INTERACTIVE;
 			puts(s);
 		}
 	} else {
@@ -117,7 +113,7 @@ int env_import(const char *buf, int check)
 		memcpy(&crc, &ep->crc, sizeof(crc));
 
 		if (crc32(0, ep->data, ENV_SIZE) != crc) {
-			set_default_env("!bad CRC");
+			set_default_env("bad CRC", 0);
 			return -EIO;
 		}
 	}
@@ -130,7 +126,7 @@ int env_import(const char *buf, int check)
 
 	pr_err("Cannot import environment: errno = %d\n", errno);
 
-	set_default_env("!import failed");
+	set_default_env("import failed", 0);
 
 	return -EIO;
 }
@@ -155,7 +151,7 @@ int env_import_redund(const char *buf1, int buf1_read_fail,
 	}
 
 	if (buf1_read_fail && buf2_read_fail) {
-		set_default_env("!bad env area");
+		set_default_env("bad env area", 0);
 		return -EIO;
 	} else if (!buf1_read_fail && buf2_read_fail) {
 		gd->env_valid = ENV_VALID;
@@ -171,7 +167,7 @@ int env_import_redund(const char *buf1, int buf1_read_fail,
 			tmp_env2->crc;
 
 	if (!crc1_ok && !crc2_ok) {
-		set_default_env("!bad CRC");
+		set_default_env("bad CRC", 0);
 		return -EIO;
 	} else if (crc1_ok && !crc2_ok) {
 		gd->env_valid = ENV_VALID;
@@ -233,10 +229,10 @@ void env_relocate(void)
 	if (gd->env_valid == ENV_INVALID) {
 #if defined(CONFIG_ENV_IS_NOWHERE) || defined(CONFIG_SPL_BUILD)
 		/* Environment not changable */
-		set_default_env(NULL);
+		set_default_env(NULL, 0);
 #else
 		bootstage_error(BOOTSTAGE_ID_NET_CHECKSUM);
-		set_default_env("!bad CRC");
+		set_default_env("bad CRC", 0);
 #endif
 	} else {
 		env_load();
diff --git a/env/ext4.c b/env/ext4.c
index 7626784ca6..09c5e4a491 100644
--- a/env/ext4.c
+++ b/env/ext4.c
@@ -119,7 +119,7 @@ static int env_ext4_load(void)
 	return env_import(buf, 1);
 
 err_env_relocate:
-	set_default_env(NULL);
+	set_default_env(NULL, 0);
 
 	return -EIO;
 }
diff --git a/env/fat.c b/env/fat.c
index 5e5b1efe89..7f74c64dfe 100644
--- a/env/fat.c
+++ b/env/fat.c
@@ -122,7 +122,7 @@ static int env_fat_load(void)
 	return env_import(buf, 1);
 
 err_env_relocate:
-	set_default_env(NULL);
+	set_default_env(NULL, 0);
 
 	return -EIO;
 }
diff --git a/env/mmc.c b/env/mmc.c
index 5e3da6dca7..c3cf35d01b 100644
--- a/env/mmc.c
+++ b/env/mmc.c
@@ -155,19 +155,19 @@ static inline int mmc_set_env_part(struct mmc *mmc) {return 0; };
 static const char *init_mmc_for_env(struct mmc *mmc)
 {
 	if (!mmc)
-		return "!No MMC card found";
+		return "No MMC card found";
 
 #if CONFIG_IS_ENABLED(BLK)
 	struct udevice *dev;
 
 	if (blk_get_from_parent(mmc->dev, &dev))
-		return "!No block device";
+		return "No block device";
 #else
 	if (mmc_init(mmc))
-		return "!MMC init failed";
+		return "MMC init failed";
 #endif
 	if (mmc_set_env_part(mmc))
-		return "!MMC partition switch failed";
+		return "MMC partition switch failed";
 
 	return NULL;
 }
@@ -298,7 +298,7 @@ fini:
 	fini_mmc_for_env(mmc);
 err:
 	if (ret)
-		set_default_env(errmsg);
+		set_default_env(errmsg, 0);
 
 #endif
 	return ret;
@@ -339,7 +339,7 @@ fini:
 	fini_mmc_for_env(mmc);
 err:
 	if (ret)
-		set_default_env(errmsg);
+		set_default_env(errmsg, 0);
 #endif
 	return ret;
 }
diff --git a/env/nand.c b/env/nand.c
index aecf445c21..3698e68957 100644
--- a/env/nand.c
+++ b/env/nand.c
@@ -327,7 +327,7 @@ static int env_nand_load(void)
 	tmp_env2 = (env_t *)malloc(CONFIG_ENV_SIZE);
 	if (tmp_env1 == NULL || tmp_env2 == NULL) {
 		puts("Can't allocate buffers for environment\n");
-		set_default_env("!malloc() failed");
+		set_default_env("malloc() failed", 0);
 		ret = -EIO;
 		goto done;
 	}
@@ -366,14 +366,14 @@ static int env_nand_load(void)
 	if (mtd && !get_nand_env_oob(mtd, &nand_env_oob_offset)) {
 		printf("Found Environment offset in OOB..\n");
 	} else {
-		set_default_env("!no env offset in OOB");
+		set_default_env("no env offset in OOB", 0);
 		return;
 	}
 #endif
 
 	ret = readenv(CONFIG_ENV_OFFSET, (u_char *)buf);
 	if (ret) {
-		set_default_env("!readenv() failed");
+		set_default_env("readenv() failed", 0);
 		return -EIO;
 	}
 
diff --git a/env/sata.c b/env/sata.c
index e5715e6d51..59aedf4d76 100644
--- a/env/sata.c
+++ b/env/sata.c
@@ -106,7 +106,7 @@ static void env_sata_load(void)
 	}
 
 	if (read_env(sata, CONFIG_ENV_SIZE, CONFIG_ENV_OFFSET, buf)) {
-		set_default_env(NULL);
+		set_default_env(NULL, 0);
 		return -EIO;
 	}
 
diff --git a/env/sf.c b/env/sf.c
index 7f7f731992..494510533a 100644
--- a/env/sf.c
+++ b/env/sf.c
@@ -60,7 +60,7 @@ static int setup_flash_device(void)
 	ret = spi_flash_probe_bus_cs(CONFIG_ENV_SPI_BUS, CONFIG_ENV_SPI_CS,
 				     0, 0, &new);
 	if (ret) {
-		set_default_env("!spi_flash_probe_bus_cs() failed");
+		set_default_env("spi_flash_probe_bus_cs() failed", 0);
 		return ret;
 	}
 
@@ -72,7 +72,7 @@ static int setup_flash_device(void)
 			CONFIG_ENV_SPI_CS,
 			CONFIG_ENV_SPI_MAX_HZ, CONFIG_ENV_SPI_MODE);
 		if (!env_flash) {
-			set_default_env("!spi_flash_probe() failed");
+			set_default_env("spi_flash_probe() failed", 0);
 			return -EIO;
 		}
 	}
@@ -173,7 +173,7 @@ static int env_sf_load(void)
 	tmp_env2 = (env_t *)memalign(ARCH_DMA_MINALIGN,
 			CONFIG_ENV_SIZE);
 	if (!tmp_env1 || !tmp_env2) {
-		set_default_env("!malloc() failed");
+		set_default_env("malloc() failed", 0);
 		ret = -EIO;
 		goto out;
 	}
@@ -268,7 +268,7 @@ static int env_sf_load(void)
 
 	buf = (char *)memalign(ARCH_DMA_MINALIGN, CONFIG_ENV_SIZE);
 	if (!buf) {
-		set_default_env("!malloc() failed");
+		set_default_env("malloc() failed", 0);
 		return -EIO;
 	}
 
@@ -279,7 +279,7 @@ static int env_sf_load(void)
 	ret = spi_flash_read(env_flash,
 		CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE, buf);
 	if (ret) {
-		set_default_env("!spi_flash_read() failed");
+		set_default_env("spi_flash_read() failed", 0);
 		goto err_read;
 	}
 
diff --git a/env/ubi.c b/env/ubi.c
index d28247b34d..eb2346f3a1 100644
--- a/env/ubi.c
+++ b/env/ubi.c
@@ -114,7 +114,7 @@ static int env_ubi_load(void)
 	if (ubi_part(CONFIG_ENV_UBI_PART, NULL)) {
 		printf("\n** Cannot find mtd partition \"%s\"\n",
 		       CONFIG_ENV_UBI_PART);
-		set_default_env(NULL);
+		set_default_env(NULL, 0);
 		return -EIO;
 	}
 
@@ -151,14 +151,14 @@ static int env_ubi_load(void)
 	if (ubi_part(CONFIG_ENV_UBI_PART, NULL)) {
 		printf("\n** Cannot find mtd partition \"%s\"\n",
 		       CONFIG_ENV_UBI_PART);
-		set_default_env(NULL);
+		set_default_env(NULL, 0);
 		return -EIO;
 	}
 
 	if (ubi_volume_read(CONFIG_ENV_UBI_VOLUME, buf, CONFIG_ENV_SIZE)) {
 		printf("\n** Unable to read env from %s:%s **\n",
 		       CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME);
-		set_default_env(NULL);
+		set_default_env(NULL, 0);
 		return -EIO;
 	}
 
diff --git a/include/environment.h b/include/environment.h
index 2fe1f3eb48..5e90f157e8 100644
--- a/include/environment.h
+++ b/include/environment.h
@@ -272,7 +272,7 @@ void env_crc_update(void);
 char *env_get_default(const char *name);
 
 /* [re]set to the default environment */
-void set_default_env(const char *s);
+void set_default_env(const char *s, int flags);
 
 /* [re]set individual variables to their value in the default environment */
 int set_default_vars(int nvars, char * const vars[], int flags);
-- 
2.17.1

  parent reply	other threads:[~2018-06-24 16:16 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-24 16:16 [U-Boot] [PATCH 0/4] fix propagation of flags from do_env_default() Yaniv Levinsky
2018-06-24 16:16 ` [U-Boot] [PATCH 1/4] cmd: nvedit: rename flags in do_env_default Yaniv Levinsky
2018-07-20 12:35   ` [U-Boot] [U-Boot, " Tom Rini
2018-06-24 16:16 ` [U-Boot] [PATCH 2/4] cmd: nvedit: propagate envflag to set_default_vars Yaniv Levinsky
2018-07-20 12:35   ` [U-Boot] [U-Boot, " Tom Rini
2018-06-24 16:16 ` [U-Boot] [PATCH 3/4] cmd: nvedit: set H_INTERACTIVE in do_env_default Yaniv Levinsky
2018-07-20 12:35   ` [U-Boot] [U-Boot, " Tom Rini
2018-06-24 16:16 ` Yaniv Levinsky [this message]
2018-07-20 12:35   ` [U-Boot] [U-Boot, 4/4] env: common: accept flags on reset to default env Tom Rini
2018-07-11 15:21 ` [U-Boot] [PATCH 0/4] fix propagation of flags from do_env_default() Yaniv Levinsky

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180624161657.32632-5-yaniv.levinsky@compulab.co.il \
    --to=yaniv.levinsky@compulab.co.il \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.