]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
env: Discern environment coming from external storage
authorMarek Vasut <marex@denx.de>
Tue, 7 Jul 2020 18:51:35 +0000 (20:51 +0200)
committerTom Rini <trini@konsulko.com>
Fri, 31 Jul 2020 14:13:00 +0000 (10:13 -0400)
Add another custom environment flag which discerns environment coming
from external storage from environment set by U-Boot itself.

Signed-off-by: Marek Vasut <marex@denx.de>
Reviewed-by: Tom Rini <trini@konsulko.com>
15 files changed:
env/common.c
env/eeprom.c
env/ext4.c
env/fat.c
env/flash.c
env/mmc.c
env/nand.c
env/nvram.c
env/onenand.c
env/remote.c
env/sata.c
env/sf.c
env/ubi.c
include/env.h
include/search.h

index 0db56e610a2f84449a1c4f847e9e6b2f00645cd3..ed18378000f8ad5d22f8e2f32af8370a70dd6458 100644 (file)
@@ -110,7 +110,7 @@ int env_set_default_vars(int nvars, char * const vars[], int flags)
  * Check if CRC is valid and (if yes) import the environment.
  * Note that "buf" may or may not be aligned.
  */
-int env_import(const char *buf, int check)
+int env_import(const char *buf, int check, int flags)
 {
        env_t *ep = (env_t *)buf;
 
@@ -125,7 +125,7 @@ int env_import(const char *buf, int check)
                }
        }
 
-       if (himport_r(&env_htab, (char *)ep->data, ENV_SIZE, '\0', 0, 0,
+       if (himport_r(&env_htab, (char *)ep->data, ENV_SIZE, '\0', flags, 0,
                        0, NULL)) {
                gd->flags |= GD_FLG_ENV_READY;
                return 0;
@@ -142,7 +142,8 @@ int env_import(const char *buf, int check)
 static unsigned char env_flags;
 
 int env_import_redund(const char *buf1, int buf1_read_fail,
-                     const char *buf2, int buf2_read_fail)
+                     const char *buf2, int buf2_read_fail,
+                     int flags)
 {
        int crc1_ok, crc2_ok;
        env_t *ep, *tmp_env1, *tmp_env2;
@@ -162,10 +163,10 @@ int env_import_redund(const char *buf1, int buf1_read_fail,
                return -EIO;
        } else if (!buf1_read_fail && buf2_read_fail) {
                gd->env_valid = ENV_VALID;
-               return env_import((char *)tmp_env1, 1);
+               return env_import((char *)tmp_env1, 1, flags);
        } else if (buf1_read_fail && !buf2_read_fail) {
                gd->env_valid = ENV_REDUND;
-               return env_import((char *)tmp_env2, 1);
+               return env_import((char *)tmp_env2, 1, flags);
        }
 
        crc1_ok = crc32(0, tmp_env1->data, ENV_SIZE) ==
@@ -200,7 +201,7 @@ int env_import_redund(const char *buf1, int buf1_read_fail,
                ep = tmp_env2;
 
        env_flags = ep->flags;
-       return env_import((char *)ep, 0);
+       return env_import((char *)ep, 0, flags);
 }
 #endif /* CONFIG_SYS_REDUNDAND_ENVIRONMENT */
 
index e8126cfe3974695787e5cd11fe00fc9860d29406..e300470ad0fc271ca5b8dc0d4ca5863e991b3224 100644 (file)
@@ -188,7 +188,7 @@ static int env_eeprom_load(void)
        eeprom_bus_read(CONFIG_SYS_DEF_EEPROM_ADDR,
                off, (uchar *)buf_env, CONFIG_ENV_SIZE);
 
-       return env_import(buf_env, 1);
+       return env_import(buf_env, 1, H_EXTERNAL);
 }
 
 static int env_eeprom_save(void)
index cc36504154f3e7ebdec55fe8bd294fbe2f4e2129..f823b694099bbe95e056f0cc462a912a0e15c409 100644 (file)
@@ -156,7 +156,7 @@ static int env_ext4_load(void)
                goto err_env_relocate;
        }
 
-       err = env_import(buf, 1);
+       err = env_import(buf, 1, H_EXTERNAL);
        if (!err)
                gd->env_valid = ENV_VALID;
 
index 63aced93179a9430ccc34914e27dfda043aad915..71bf8bfa18f9f99f158688f50706e85a99197ce9 100644 (file)
--- a/env/fat.c
+++ b/env/fat.c
@@ -144,7 +144,7 @@ static int env_fat_load(void)
                goto err_env_relocate;
        }
 
-       return env_import(buf, 1);
+       return env_import(buf, 1, H_EXTERNAL);
 
 err_env_relocate:
        env_set_default(NULL, 0);
index 3198147c380834e8560347e271ef8122f74ccd92..722d5adf8b696637b11af03cd6a4ad6e788754b2 100644 (file)
@@ -351,7 +351,7 @@ static int env_flash_load(void)
                     "reading environment; recovered successfully\n\n");
 #endif /* CONFIG_ENV_ADDR_REDUND */
 
-       return env_import((char *)flash_addr, 1);
+       return env_import((char *)flash_addr, 1, H_EXTERNAL);
 }
 #endif /* LOADENV */
 
index aca61b75e999f9601b5da043c378a2244c9817c8..af7e5fbac3a010523b775732fee293d06d6c3466 100644 (file)
--- a/env/mmc.c
+++ b/env/mmc.c
@@ -338,7 +338,7 @@ static int env_mmc_load(void)
        read2_fail = read_env(mmc, CONFIG_ENV_SIZE, offset2, tmp_env2);
 
        ret = env_import_redund((char *)tmp_env1, read1_fail, (char *)tmp_env2,
-                               read2_fail);
+                               read2_fail, H_EXTERNAL);
 
 fini:
        fini_mmc_for_env(mmc);
@@ -380,7 +380,7 @@ static int env_mmc_load(void)
                goto fini;
        }
 
-       ret = env_import(buf, 1);
+       ret = env_import(buf, 1, H_EXTERNAL);
        if (!ret) {
                ep = (env_t *)buf;
                gd->env_addr = (ulong)&ep->data;
index 8b0027d30472fe2cef56f13c95d2fcba739436c9..0d7ee19bc23240698703b93254e509b0b0d6689b 100644 (file)
@@ -331,7 +331,7 @@ static int env_nand_load(void)
        read2_fail = readenv(CONFIG_ENV_OFFSET_REDUND, (u_char *) tmp_env2);
 
        ret = env_import_redund((char *)tmp_env1, read1_fail, (char *)tmp_env2,
-                               read2_fail);
+                               read2_fail, H_EXTERNAL);
 
 done:
        free(tmp_env1);
@@ -372,7 +372,7 @@ static int env_nand_load(void)
                return -EIO;
        }
 
-       return env_import(buf, 1);
+       return env_import(buf, 1, H_EXTERNAL);
 #endif /* ! ENV_IS_EMBEDDED */
 
        return 0;
index 1a9fcf1c069ad110b21884b5040745c4caa1d717..7c8ea26f968200f80359a7f915bdbfd570eabd02 100644 (file)
@@ -64,7 +64,7 @@ static int env_nvram_load(void)
 #else
        memcpy(buf, (void *)CONFIG_ENV_ADDR, CONFIG_ENV_SIZE);
 #endif
-       return env_import(buf, 1);
+       return env_import(buf, 1, H_EXTERNAL);
 }
 
 static int env_nvram_save(void)
index dfd4e939f8f89d816b1e9410080f811f9b0139d9..a2477cef9bed7045c7ebf4350daa71e2be57b6dc 100644 (file)
@@ -55,7 +55,7 @@ static int env_onenand_load(void)
                mtd->writesize = MAX_ONENAND_PAGESIZE;
 #endif /* !ENV_IS_EMBEDDED */
 
-       rc = env_import(buf, 1);
+       rc = env_import(buf, 1, H_EXTERNAL);
        if (!rc)
                gd->env_valid = ENV_VALID;
 
index e3f0608b16beb02785f6e649c19001005e1e9430..d93a137376e37efa59f0180be548c132ee8434e0 100644 (file)
@@ -45,7 +45,7 @@ static int env_remote_save(void)
 static int env_remote_load(void)
 {
 #ifndef ENV_IS_EMBEDDED
-       return env_import((char *)env_ptr, 1);
+       return env_import((char *)env_ptr, 1, H_EXTERNAL);
 #endif
 
        return 0;
index 8bfcc94306d3a2a8b12ba9f18379d901e0ce7628..9442cfcaf3cab666a55cb64c1cfc460cf0feadfc 100644 (file)
@@ -111,7 +111,7 @@ static void env_sata_load(void)
                return -EIO;
        }
 
-       return env_import(buf, 1);
+       return env_import(buf, 1, H_EXTERNAL);
 }
 
 U_BOOT_ENV_LOCATION(sata) = {
index a059561cb09a6cb16b68577cb76725bdebaf29ac..937778aa37d5b9aa6f22485b2d7e33b1023e60e6 100644 (file)
--- a/env/sf.c
+++ b/env/sf.c
@@ -172,7 +172,7 @@ static int env_sf_load(void)
                                    CONFIG_ENV_SIZE, tmp_env2);
 
        ret = env_import_redund((char *)tmp_env1, read1_fail, (char *)tmp_env2,
-                               read2_fail);
+                               read2_fail, H_EXTERNAL);
 
        spi_flash_free(env_flash);
        env_flash = NULL;
@@ -265,7 +265,7 @@ static int env_sf_load(void)
                goto err_read;
        }
 
-       ret = env_import(buf, 1);
+       ret = env_import(buf, 1, H_EXTERNAL);
        if (!ret)
                gd->env_valid = ENV_VALID;
 
index 08aac47df2b6a7c5e7c04f1d9232f6db62e43bac..5502efe28b6231f7e397fd13b43d3f55bbab49d2 100644 (file)
--- a/env/ubi.c
+++ b/env/ubi.c
@@ -141,7 +141,7 @@ static int env_ubi_load(void)
                       CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME_REDUND);
 
        return env_import_redund((char *)tmp_env1, read1_fail, (char *)tmp_env2,
-                                                        read2_fail);
+                                read2_fail, H_EXTERNAL);
 }
 #else /* ! CONFIG_SYS_REDUNDAND_ENVIRONMENT */
 static int env_ubi_load(void)
@@ -172,7 +172,7 @@ static int env_ubi_load(void)
                return -EIO;
        }
 
-       return env_import(buf, 1);
+       return env_import(buf, 1, H_EXTERNAL);
 }
 #endif /* CONFIG_SYS_REDUNDAND_ENVIRONMENT */
 
index 665857f032c230e8784b6bca4d8c3b272cc3e58c..af405955b0f3ec406e90e4b9c4c2f7538d576733 100644 (file)
@@ -302,10 +302,11 @@ int env_select(const char *name);
  * @buf: Buffer containing the environment (struct environemnt_s *)
  * @check: non-zero to check the CRC at the start of the environment, 0 to
  *     ignore it
+ * @flags: Flags controlling matching (H_... - see search.h)
  * @return 0 if imported successfully, -ENOMSG if the CRC was bad, -EIO if
  *     something else went wrong
  */
-int env_import(const char *buf, int check);
+int env_import(const char *buf, int check, int flags);
 
 /**
  * env_export() - Export the environment to a buffer
@@ -324,10 +325,12 @@ int env_export(struct environment_s *env_out);
  * @buf1_read_fail: 0 if buf1 is valid, non-zero if invalid
  * @buf2: Second environment (struct environemnt_s *)
  * @buf2_read_fail: 0 if buf2 is valid, non-zero if invalid
+ * @flags: Flags controlling matching (H_... - see search.h)
  * @return 0 if OK, -EIO if no environment is valid, -ENOMSG if the CRC was bad
  */
 int env_import_redund(const char *buf1, int buf1_read_fail,
-                     const char *buf2, int buf2_read_fail);
+                     const char *buf2, int buf2_read_fail,
+                     int flags);
 
 /**
  * env_get_default() - Look up a variable from the default environment
index c4b50c9630be95a6e6abb2bf090155a055ee64b8..e56843c26fdab07973b93c37c7501e64b00bd963 100644 (file)
@@ -113,5 +113,6 @@ int hwalk_r(struct hsearch_data *htab,
 #define H_PROGRAMMATIC (1 << 9) /* indicate that an import is from env_set() */
 #define H_ORIGIN_FLAGS (H_INTERACTIVE | H_PROGRAMMATIC)
 #define H_DEFAULT      (1 << 10) /* indicate that an import is default env */
+#define H_EXTERNAL     (1 << 11) /* indicate that an import is external env */
 
 #endif /* _SEARCH_H_ */