diff options
author | Ye Li <ye.li@nxp.com> | 2019-07-16 01:39:40 -0700 |
---|---|---|
committer | Ye Li <ye.li@nxp.com> | 2020-04-26 23:36:19 -0700 |
commit | 9dca18a27d97d0df6dd5f70e3c5a50c3a7bc0839 (patch) | |
tree | 121d0f9ffd9c48274c7a8b992af77692609b07c5 /env | |
parent | 5f2274d57bcb391701ba2690c018d4b691a86393 (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.c | 16 | ||||
-rw-r--r-- | env/env.c | 7 | ||||
-rw-r--r-- | env/mmc.c | 4 | ||||
-rw-r--r-- | env/nand.c | 32 | ||||
-rw-r--r-- | env/sata.c | 4 | ||||
-rw-r--r-- | env/sf.c | 14 |
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; @@ -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 @@ -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; } @@ -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; |