Skip to content
Snippets Groups Projects
Commit 168de20f authored by Tom Rini's avatar Tom Rini
Browse files

Revert "fw_printenv: Don't bail out directly after one env read error"


As pointed out by Wolfgang Denk, the problem with this fix is that while
interactive users will see that we have found one part of the
environment failed and are using the other, progmatic use will not see
this and can lead to problems.

Signed-off-by: default avatarTom Rini <trini@konsulko.com>
parent 3fcb00be
No related branches found
No related tags found
No related merge requests found
...@@ -1427,21 +1427,14 @@ int fw_env_open(struct env_opts *opts) ...@@ -1427,21 +1427,14 @@ int fw_env_open(struct env_opts *opts)
} }
dev_current = 0; dev_current = 0;
if (flash_io(O_RDONLY)) {
if (!flash_io(O_RDONLY)) {
crc0 = crc32(0, (uint8_t *)environment.data, ENV_SIZE);
crc0_ok = (crc0 == *environment.crc);
} else if (have_redund_env) {
/*
* to give the redundant env a chance, maybe it's good:
* mark env crc0 invalid then test below if crc1 is ok
*/
crc0_ok = 0;
} else {
ret = -EIO; ret = -EIO;
goto open_cleanup; goto open_cleanup;
} }
crc0 = crc32(0, (uint8_t *)environment.data, ENV_SIZE);
crc0_ok = (crc0 == *environment.crc);
if (!have_redund_env) { if (!have_redund_env) {
if (!crc0_ok) { if (!crc0_ok) {
fprintf(stderr, fprintf(stderr,
...@@ -1469,10 +1462,8 @@ int fw_env_open(struct env_opts *opts) ...@@ -1469,10 +1462,8 @@ int fw_env_open(struct env_opts *opts)
*/ */
environment.image = addr1; environment.image = addr1;
if (flash_io(O_RDONLY)) { if (flash_io(O_RDONLY)) {
crc1_ok = 0; ret = -EIO;
} else { goto open_cleanup;
crc1 = crc32(0, (uint8_t *)redundant->data, ENV_SIZE);
crc1_ok = (crc1 == redundant->crc);
} }
/* Check flag scheme compatibility */ /* Check flag scheme compatibility */
...@@ -1498,6 +1489,9 @@ int fw_env_open(struct env_opts *opts) ...@@ -1498,6 +1489,9 @@ int fw_env_open(struct env_opts *opts)
goto open_cleanup; goto open_cleanup;
} }
crc1 = crc32(0, (uint8_t *)redundant->data, ENV_SIZE);
crc1_ok = (crc1 == redundant->crc);
flag1 = redundant->flags; flag1 = redundant->flags;
if (crc0_ok && !crc1_ok) { if (crc0_ok && !crc1_ok) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment