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>2019-07-17 00:14:12 -0700
commit5b12d7cabb14bab9a95af7460b36c6c85db1b328 (patch)
treecc0106359b91f80dca99f238d5ff7f73b8a479e5 /env
parent7a7702da2786e0678bbba41edd4d470dcea5fa35 (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>
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.c6
-rw-r--r--env/sata.c4
-rw-r--r--env/sf.c14
6 files changed, 29 insertions, 22 deletions
diff --git a/env/eeprom.c b/env/eeprom.c
index 63842d6ff3..de7958ffa2 100644
--- a/env/eeprom.c
+++ b/env/eeprom.c
@@ -67,7 +67,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)
@@ -82,7 +82,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;
@@ -92,7 +92,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++) {
@@ -152,7 +152,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;
@@ -162,7 +162,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;
@@ -175,7 +175,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;
@@ -191,7 +191,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 = OBSOLETE_FLAG;
@@ -204,7 +204,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 = ACTIVE_FLAG;
diff --git a/env/env.c b/env/env.c
index 042a8c65fa..a2a65bde5e 100644
--- a/env/env.c
+++ b/env/env.c
@@ -245,3 +245,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 6f11deccb1..6b561e42bf 100644
--- a/env/mmc.c
+++ b/env/mmc.c
@@ -87,7 +87,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)
@@ -101,7 +101,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 904f1c40d6..d4d03a4fc9 100644
--- a/env/nand.c
+++ b/env/nand.c
@@ -193,7 +193,7 @@ static int env_nand_save(void)
.name = "NAND",
.erase_opts = {
.length = CONFIG_ENV_RANGE,
- .offset = CONFIG_ENV_OFFSET,
+ .offset = env_get_offset(CONFIG_ENV_OFFSET),
},
},
#ifdef CONFIG_ENV_OFFSET_REDUND
@@ -333,7 +333,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,
@@ -372,7 +372,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) {
set_default_env("!readenv() failed");
return -EIO;
diff --git a/env/sata.c b/env/sata.c
index fed799b817..d605a22b34 100644
--- a/env/sata.c
+++ b/env/sata.c
@@ -68,7 +68,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;
}
@@ -108,7 +108,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)) {
set_default_env(NULL);
return -EIO;
}
diff --git a/env/sf.c b/env/sf.c
index 6326b37e46..b10c1e312f 100644
--- a/env/sf.c
+++ b/env/sf.c
@@ -101,9 +101,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;
}
@@ -183,7 +183,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);
@@ -215,7 +215,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;
@@ -233,13 +233,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;
@@ -278,7 +278,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) {
set_default_env("!spi_flash_read() failed");
goto err_read;