From 3925b2ac97b50b1facab096ac98243615683c295 Mon Sep 17 00:00:00 2001 From: Joe Hershberger Date: Tue, 26 Jun 2018 12:37:59 +0300 Subject: [PATCH] fw_printenv: Don't bail out directly after one env read error When using a redundant environment a read error should simply mean to not use that copy instead of giving up completely. The other copy may be just fine. Signed-off-by: Joe Hershberger Signed-off-by: Ioan-Adrian Ratiu --- tools/env/fw_env.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c index a5d75958e1..3a5ad026f0 100644 --- a/tools/env/fw_env.c +++ b/tools/env/fw_env.c @@ -1427,14 +1427,21 @@ int fw_env_open(struct env_opts *opts) } 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; goto open_cleanup; } - crc0 = crc32(0, (uint8_t *)environment.data, ENV_SIZE); - - crc0_ok = (crc0 == *environment.crc); if (!have_redund_env) { if (!crc0_ok) { fprintf(stderr, @@ -1462,8 +1469,10 @@ int fw_env_open(struct env_opts *opts) */ environment.image = addr1; if (flash_io(O_RDONLY)) { - ret = -EIO; - goto open_cleanup; + crc1_ok = 0; + } else { + crc1 = crc32(0, (uint8_t *)redundant->data, ENV_SIZE); + crc1_ok = (crc1 == redundant->crc); } /* Check flag scheme compatibility */ @@ -1489,9 +1498,6 @@ int fw_env_open(struct env_opts *opts) goto open_cleanup; } - crc1 = crc32(0, (uint8_t *)redundant->data, ENV_SIZE); - - crc1_ok = (crc1 == redundant->crc); flag1 = redundant->flags; if (crc0_ok && !crc1_ok) { -- 2.39.5