|
@@ -138,7 +138,8 @@ int env_import(const char *buf, int check)
|
|
|
#ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT
|
|
|
static unsigned char env_flags;
|
|
|
|
|
|
-int env_import_redund(const char *buf1, const char *buf2)
|
|
|
+int env_import_redund(const char *buf1, int buf1_read_fail,
|
|
|
+ const char *buf2, int buf2_read_fail)
|
|
|
{
|
|
|
int crc1_ok, crc2_ok;
|
|
|
env_t *ep, *tmp_env1, *tmp_env2;
|
|
@@ -146,6 +147,24 @@ int env_import_redund(const char *buf1, const char *buf2)
|
|
|
tmp_env1 = (env_t *)buf1;
|
|
|
tmp_env2 = (env_t *)buf2;
|
|
|
|
|
|
+ if (buf1_read_fail && buf2_read_fail) {
|
|
|
+ puts("*** Error - No Valid Environment Area found\n");
|
|
|
+ } else if (buf1_read_fail || buf2_read_fail) {
|
|
|
+ puts("*** Warning - some problems detected ");
|
|
|
+ puts("reading environment; recovered successfully\n");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (buf1_read_fail && buf2_read_fail) {
|
|
|
+ set_default_env("!bad env area");
|
|
|
+ return -EIO;
|
|
|
+ } else if (!buf1_read_fail && buf2_read_fail) {
|
|
|
+ gd->env_valid = ENV_VALID;
|
|
|
+ return env_import((char *)tmp_env1, 1);
|
|
|
+ } else if (buf1_read_fail && !buf2_read_fail) {
|
|
|
+ gd->env_valid = ENV_REDUND;
|
|
|
+ return env_import((char *)tmp_env2, 1);
|
|
|
+ }
|
|
|
+
|
|
|
crc1_ok = crc32(0, tmp_env1->data, ENV_SIZE) ==
|
|
|
tmp_env1->crc;
|
|
|
crc2_ok = crc32(0, tmp_env2->data, ENV_SIZE) ==
|