diff options
author | Fiach Antaw <fiach.antaw@uqconnect.edu.au> | 2017-01-25 18:53:12 +1000 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2017-07-22 15:36:17 -0400 |
commit | 9d364af23ea26414afd09152e85d62a0d950a50d (patch) | |
tree | 5fd910d02642adfde2be9cdf23b99fe90b29a529 /common/env_ubi.c | |
parent | 76768f5f080316d33c25f96e4aaa50d0144f990a (diff) |
env: Switch env_nand, env_mmc and env_ubi to env_import_redund
The env_nand, env_mmc and env_ubi implementations all implement
redundancy using an identical serial-number scheme. This commit
migrates them to use the implementation in env_common, which is
functionally identical.
Signed-off-by: Fiach Antaw <fiach.antaw@uqconnect.edu.au>
Reviewed-by: Tom Rini <trini@konsulko.com>
Diffstat (limited to 'common/env_ubi.c')
-rw-r--r-- | common/env_ubi.c | 39 |
1 files changed, 2 insertions, 37 deletions
diff --git a/common/env_ubi.c b/common/env_ubi.c index 0ac2f65f0b..95b527ddca 100644 --- a/common/env_ubi.c +++ b/common/env_ubi.c @@ -33,8 +33,6 @@ int env_init(void) #ifdef CONFIG_CMD_SAVEENV #ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT -static unsigned char env_flags; - int saveenv(void) { ALLOC_CACHE_ALIGN_BUFFER(env_t, env_new, 1); @@ -50,8 +48,6 @@ int saveenv(void) return 1; } - env_new->flags = ++env_flags; /* increase the serial */ - if (gd->env_valid == 1) { puts("Writing to redundant UBI... "); if (ubi_volume_write(CONFIG_ENV_UBI_VOLUME_REDUND, @@ -112,8 +108,7 @@ void env_relocate_spec(void) { ALLOC_CACHE_ALIGN_BUFFER(char, env1_buf, CONFIG_ENV_SIZE); ALLOC_CACHE_ALIGN_BUFFER(char, env2_buf, CONFIG_ENV_SIZE); - int crc1_ok = 0, crc2_ok = 0; - env_t *ep, *tmp_env1, *tmp_env2; + env_t *tmp_env1, *tmp_env2; /* * In case we have restarted u-boot there is a chance that buffer @@ -148,37 +143,7 @@ void env_relocate_spec(void) CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME_REDUND); } - crc1_ok = crc32(0, tmp_env1->data, ENV_SIZE) == tmp_env1->crc; - crc2_ok = crc32(0, tmp_env2->data, ENV_SIZE) == tmp_env2->crc; - - if (!crc1_ok && !crc2_ok) { - set_default_env("!bad CRC"); - return; - } else if (crc1_ok && !crc2_ok) { - gd->env_valid = 1; - } else if (!crc1_ok && crc2_ok) { - gd->env_valid = 2; - } else { - /* both ok - check serial */ - if (tmp_env1->flags == 255 && tmp_env2->flags == 0) - gd->env_valid = 2; - else if (tmp_env2->flags == 255 && tmp_env1->flags == 0) - gd->env_valid = 1; - else if (tmp_env1->flags > tmp_env2->flags) - gd->env_valid = 1; - else if (tmp_env2->flags > tmp_env1->flags) - gd->env_valid = 2; - else /* flags are equal - almost impossible */ - gd->env_valid = 1; - } - - if (gd->env_valid == 1) - ep = tmp_env1; - else - ep = tmp_env2; - - env_flags = ep->flags; - env_import((char *)ep, 0); + env_import_redund((char *)tmp_env1, (char *)tmp_env2); } #else /* ! CONFIG_SYS_REDUNDAND_ENVIRONMENT */ void env_relocate_spec(void) |