[U-Boot] [PATCH 1/2] env: common: Return specific error code on bad CRC
Simon Goldschmidt
simon.k.r.goldschmidt at gmail.com
Mon Jan 21 13:36:38 UTC 2019
Am 18.01.2019 um 20:19 schrieb Sam Protsenko:
> Callers of env_import*() functions might want to check the case when we
> have incorrect environment (with bad CRC). For example, when environment
> location is being defined in env_load(), call chain may look like this:
>
> env_load() -> drv->load() = env_mmc_load() -> env_import()
>
> Return code will be passed from env_import() all way up to env_load().
> Right now both env_mmc_load() and env_import() return -EIO error code,
> so env_load() can't differentiate between two cases:
> 1. Driver reports the error, because device is not accessible
> 2. Device is actually accessible, but environment is broken
>
> Let's return -ENOMSG in env_import(), so we can distinguish two cases
> mentioned above. It will make it possible to continue working with "bad
> CRC" environment (like doing "env save"), instead of considering it not
> functional (implemented in subsequent patch).
>
> Signed-off-by: Sam Protsenko <semen.protsenko at linaro.org>
Reviewed-by: Simon Goldschmidt <simon.k.r.goldschmidt at gmail.com>
> ---
> env/common.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/env/common.c b/env/common.c
> index d1a6a52860..324502ed82 100644
> --- a/env/common.c
> +++ b/env/common.c
> @@ -115,7 +115,7 @@ int env_import(const char *buf, int check)
>
> if (crc32(0, ep->data, ENV_SIZE) != crc) {
> set_default_env("bad CRC", 0);
> - return -EIO;
> + return -ENOMSG; /* needed for env_load() */
> }
> }
>
> @@ -169,7 +169,7 @@ int env_import_redund(const char *buf1, int buf1_read_fail,
>
> if (!crc1_ok && !crc2_ok) {
> set_default_env("bad CRC", 0);
> - return -EIO;
> + return -ENOMSG; /* needed for env_load() */
> } else if (crc1_ok && !crc2_ok) {
> gd->env_valid = ENV_VALID;
> } else if (!crc1_ok && crc2_ok) {
>
More information about the U-Boot
mailing list