summaryrefslogtreecommitdiff
path: root/env
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
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')
-rw-r--r--env/eeprom.c16
-rw-r--r--env/env.c7
-rw-r--r--env/mmc.c4
-rw-r--r--env/nand.c32
-rw-r--r--env/sata.c4
-rw-r--r--env/sf.c14
6 files changed, 38 insertions, 39 deletions
diff --git a/env/eeprom.c b/env/eeprom.c
index e8126cfe39..b12bdec652 100644
--- a/env/eeprom.c
+++ b/env/eeprom.c
@@ -69,7 +69,7 @@ static int eeprom_bus_write(unsigned dev_addr, unsigned offset,
int env_eeprom_get_char(int index)
{
uchar c;
- unsigned int off = CONFIG_ENV_OFFSET;
+ unsigned int off = env_get_offset(CONFIG_ENV_OFFSET);
#ifdef CONFIG_ENV_OFFSET_REDUND
if (gd->env_valid == ENV_REDUND)
@@ -84,7 +84,7 @@ int env_eeprom_get_char(int index)
static int env_eeprom_load(void)
{
char buf_env[CONFIG_ENV_SIZE];
- unsigned int off = CONFIG_ENV_OFFSET;
+ unsigned int off = env_get_offset(CONFIG_ENV_OFFSET);
#ifdef CONFIG_ENV_OFFSET_REDUND
ulong len, crc[2], crc_tmp;
@@ -94,7 +94,7 @@ static int env_eeprom_load(void)
eeprom_init(-1); /* prepare for EEPROM read/write */
- off_env[0] = CONFIG_ENV_OFFSET;
+ off_env[0] = env_get_offset(CONFIG_ENV_OFFSET);
off_env[1] = CONFIG_ENV_OFFSET_REDUND;
for (i = 0; i < 2; i++) {
@@ -156,7 +156,7 @@ static int env_eeprom_load(void)
/* read old CRC */
eeprom_bus_read(CONFIG_SYS_DEF_EEPROM_ADDR,
- CONFIG_ENV_OFFSET + offsetof(env_t, crc),
+ env_get_offset(CONFIG_ENV_OFFSET) + offsetof(env_t, crc),
(uchar *)&crc, sizeof(ulong));
new = 0;
@@ -166,7 +166,7 @@ static int env_eeprom_load(void)
int n = (len > sizeof(rdbuf)) ? sizeof(rdbuf) : len;
eeprom_bus_read(CONFIG_SYS_DEF_EEPROM_ADDR,
- CONFIG_ENV_OFFSET + off, rdbuf, n);
+ env_get_offset(CONFIG_ENV_OFFSET) + off, rdbuf, n);
new = crc32(new, rdbuf, n);
len -= n;
off += n;
@@ -179,7 +179,7 @@ static int env_eeprom_load(void)
}
#endif /* CONFIG_ENV_OFFSET_REDUND */
- off = CONFIG_ENV_OFFSET;
+ off = env_get_offset(CONFIG_ENV_OFFSET);
#ifdef CONFIG_ENV_OFFSET_REDUND
if (gd->env_valid == ENV_REDUND)
off = CONFIG_ENV_OFFSET_REDUND;
@@ -195,7 +195,7 @@ static int env_eeprom_save(void)
{
env_t env_new;
int rc;
- unsigned int off = CONFIG_ENV_OFFSET;
+ unsigned int off = env_get_offset(CONFIG_ENV_OFFSET);
#ifdef CONFIG_ENV_OFFSET_REDUND
unsigned int off_red = CONFIG_ENV_OFFSET_REDUND;
char flag_obsolete = ENV_REDUND_OBSOLETE;
@@ -208,7 +208,7 @@ static int env_eeprom_save(void)
#ifdef CONFIG_ENV_OFFSET_REDUND
if (gd->env_valid == ENV_VALID) {
off = CONFIG_ENV_OFFSET_REDUND;
- off_red = CONFIG_ENV_OFFSET;
+ off_red = env_get_offset(CONFIG_ENV_OFFSET);
}
env_new.flags = ENV_REDUND_ACTIVE;
diff --git a/env/env.c b/env/env.c
index 9237bb9c74..b9febeca51 100644
--- a/env/env.c
+++ b/env/env.c
@@ -311,3 +311,10 @@ int env_init(void)
return ret;
}
+
+#ifndef ENV_IS_EMBEDDED
+__weak long long env_get_offset(long long defautl_offset)
+{
+ return defautl_offset;
+}
+#endif
diff --git a/env/mmc.c b/env/mmc.c
index 251ad07d7c..5f73e7abfb 100644
--- a/env/mmc.c
+++ b/env/mmc.c
@@ -78,7 +78,7 @@ static inline s64 mmc_offset(int copy)
return val;
}
- defvalue = CONFIG_ENV_OFFSET;
+ defvalue = env_get_offset(CONFIG_ENV_OFFSET);
propname = dt_prop.offset;
#if defined(CONFIG_ENV_OFFSET_REDUND)
@@ -92,7 +92,7 @@ static inline s64 mmc_offset(int copy)
#else
static inline s64 mmc_offset(int copy)
{
- s64 offset = CONFIG_ENV_OFFSET;
+ s64 offset = env_get_offset(CONFIG_ENV_OFFSET);
#if defined(CONFIG_ENV_OFFSET_REDUND)
if (copy)
diff --git a/env/nand.c b/env/nand.c
index 8b0027d304..5ff5fa1e5d 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;
diff --git a/env/sata.c b/env/sata.c
index 23ed3decb5..cb52322891 100644
--- a/env/sata.c
+++ b/env/sata.c
@@ -66,7 +66,7 @@ static int env_sata_save(void)
return 1;
printf("Writing to SATA(%d)...", env_sata);
- if (write_env(sata, CONFIG_ENV_SIZE, CONFIG_ENV_OFFSET, (u_char *)env_new)) {
+ if (write_env(sata, CONFIG_ENV_SIZE, env_get_offset(CONFIG_ENV_OFFSET), (u_char *)env_new)) {
puts("failed\n");
return 1;
}
@@ -106,7 +106,7 @@ static int env_sata_load(void)
return -EIO;
}
- if (read_env(sata, CONFIG_ENV_SIZE, CONFIG_ENV_OFFSET, buf)) {
+ if (read_env(sata, CONFIG_ENV_SIZE, env_get_offset(CONFIG_ENV_OFFSET), buf)) {
env_set_default(NULL, 0);
return -EIO;
}
diff --git a/env/sf.c b/env/sf.c
index 5ef4055219..7951c654d5 100644
--- a/env/sf.c
+++ b/env/sf.c
@@ -88,9 +88,9 @@ static int env_sf_save(void)
if (gd->env_valid == ENV_VALID) {
env_new_offset = CONFIG_ENV_OFFSET_REDUND;
- env_offset = CONFIG_ENV_OFFSET;
+ env_offset = env_get_offset(CONFIG_ENV_OFFSET);
} else {
- env_new_offset = CONFIG_ENV_OFFSET;
+ env_new_offset = env_get_offset(CONFIG_ENV_OFFSET);
env_offset = CONFIG_ENV_OFFSET_REDUND;
}
@@ -170,7 +170,7 @@ static int env_sf_load(void)
if (ret)
goto out;
- read1_fail = spi_flash_read(env_flash, CONFIG_ENV_OFFSET,
+ read1_fail = spi_flash_read(env_flash, env_get_offset(CONFIG_ENV_OFFSET),
CONFIG_ENV_SIZE, tmp_env1);
read2_fail = spi_flash_read(env_flash, CONFIG_ENV_OFFSET_REDUND,
CONFIG_ENV_SIZE, tmp_env2);
@@ -202,7 +202,7 @@ static int env_sf_save(void)
/* Is the sector larger than the env (i.e. embedded) */
if (CONFIG_ENV_SECT_SIZE > CONFIG_ENV_SIZE) {
saved_size = CONFIG_ENV_SECT_SIZE - CONFIG_ENV_SIZE;
- saved_offset = CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE;
+ saved_offset = env_get_offset(CONFIG_ENV_OFFSET) + CONFIG_ENV_SIZE;
saved_buffer = malloc(saved_size);
if (!saved_buffer)
goto done;
@@ -220,13 +220,13 @@ static int env_sf_save(void)
sector = DIV_ROUND_UP(CONFIG_ENV_SIZE, CONFIG_ENV_SECT_SIZE);
puts("Erasing SPI flash...");
- ret = spi_flash_erase(env_flash, CONFIG_ENV_OFFSET,
+ ret = spi_flash_erase(env_flash, env_get_offset(CONFIG_ENV_OFFSET),
sector * CONFIG_ENV_SECT_SIZE);
if (ret)
goto done;
puts("Writing to SPI flash...");
- ret = spi_flash_write(env_flash, CONFIG_ENV_OFFSET,
+ ret = spi_flash_write(env_flash, env_get_offset(CONFIG_ENV_OFFSET),
CONFIG_ENV_SIZE, &env_new);
if (ret)
goto done;
@@ -265,7 +265,7 @@ static int env_sf_load(void)
goto out;
ret = spi_flash_read(env_flash,
- CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE, buf);
+ env_get_offset(CONFIG_ENV_OFFSET), CONFIG_ENV_SIZE, buf);
if (ret) {
env_set_default("spi_flash_read() failed", 0);
goto err_read;