summaryrefslogtreecommitdiff
path: root/env/nand.c
diff options
context:
space:
mode:
authorYe Li <ye.li@nxp.com>2019-07-16 01:39:40 -0700
committerYe Li <ye.li@nxp.com>2020-04-26 23:36:19 -0700
commit9dca18a27d97d0df6dd5f70e3c5a50c3a7bc0839 (patch)
tree121d0f9ffd9c48274c7a8b992af77692609b07c5 /env/nand.c
parent5f2274d57bcb391701ba2690c018d4b691a86393 (diff)
MLK-22279-1 env: Add env_get_offset to override static env offset
Add env_get_offset interface to override static CONFIG_ENV_OFFSET, and update env location driver to use env_get_offset. So for different storage medium, we are able to store the env at different offset. We don't support this feature when CONFIG_ENV_IS_EMBEDDED is set. Signed-off-by: Ye Li <ye.li@nxp.com> (cherry picked from commit 5b12d7cabb14bab9a95af7460b36c6c85db1b328) (cherry picked from commit 565d9002ac59b03d5bc77c6d88f2b93492166b66)
Diffstat (limited to 'env/nand.c')
-rw-r--r--env/nand.c32
1 files changed, 12 insertions, 20 deletions
diff --git a/env/nand.c b/env/nand.c
index 8b0027d3047..5ff5fa1e5df 100644
--- a/env/nand.c
+++ b/env/nand.c
@@ -153,7 +153,7 @@ static int writeenv(size_t offset, u_char *buf)
struct nand_env_location {
const char *name;
- const nand_erase_options_t erase_opts;
+ nand_erase_options_t erase_opts;
};
static int erase_and_write_env(const struct nand_env_location *location,
@@ -182,25 +182,17 @@ static int env_nand_save(void)
int ret = 0;
ALLOC_CACHE_ALIGN_BUFFER(env_t, env_new, 1);
int env_idx = 0;
- static const struct nand_env_location location[] = {
- {
- .name = "NAND",
- .erase_opts = {
- .length = CONFIG_ENV_RANGE,
- .offset = CONFIG_ENV_OFFSET,
- },
- },
+ static struct nand_env_location location[2] = {0};
+
+ location[0].name = "NAND";
+ location[0].erase_opts.length = CONFIG_ENV_RANGE;
+ location[0].erase_opts.offset = env_get_offset(CONFIG_ENV_OFFSET);
+
#ifdef CONFIG_ENV_OFFSET_REDUND
- {
- .name = "redundant NAND",
- .erase_opts = {
- .length = CONFIG_ENV_RANGE,
- .offset = CONFIG_ENV_OFFSET_REDUND,
- },
- },
+ location[1].name = "redundant NAND";
+ location[1].erase_opts.length = CONFIG_ENV_RANGE;
+ location[1].erase_opts.offset = CONFIG_ENV_OFFSET_REDUND;
#endif
- };
-
if (CONFIG_ENV_RANGE < CONFIG_ENV_SIZE)
return 1;
@@ -327,7 +319,7 @@ static int env_nand_load(void)
goto done;
}
- read1_fail = readenv(CONFIG_ENV_OFFSET, (u_char *) tmp_env1);
+ read1_fail = readenv(env_get_offset(CONFIG_ENV_OFFSET), (u_char *) tmp_env1);
read2_fail = readenv(CONFIG_ENV_OFFSET_REDUND, (u_char *) tmp_env2);
ret = env_import_redund((char *)tmp_env1, read1_fail, (char *)tmp_env2,
@@ -366,7 +358,7 @@ static int env_nand_load(void)
}
#endif
- ret = readenv(CONFIG_ENV_OFFSET, (u_char *)buf);
+ ret = readenv(env_get_offset(CONFIG_ENV_OFFSET), (u_char *)buf);
if (ret) {
env_set_default("readenv() failed", 0);
return -EIO;