]> git.sur5r.net Git - u-boot/commitdiff
env: sf: use env_import_redund to simplify env_sf_load
authorSimon Goldschmidt <sgoldschmidt@de.pepperl-fuchs.com>
Wed, 31 Jan 2018 13:47:13 +0000 (14:47 +0100)
committerTom Rini <trini@konsulko.com>
Thu, 1 Feb 2018 13:05:53 +0000 (08:05 -0500)
For the redundant environment configuration, env_sf_load still
contained duplicate code instead of using env_import_redund().

Simplify the code by only executing the load twice and delegating
everything else to env_import_redund.

Signed-off-by: Simon Goldschmidt <sgoldschmidt@de.pepperl-fuchs.com>
Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com>
env/sf.c

index 3dc54410df496c6ebaddcbd4c5e5e63ec6d4211c..6326b37e4646972a12e02c71a0fe2aa1b7c9e4aa 100644 (file)
--- a/env/sf.c
+++ b/env/sf.c
@@ -166,10 +166,8 @@ static int env_sf_save(void)
 static int env_sf_load(void)
 {
        int ret;
-       int crc1_ok = 0, crc2_ok = 0;
-       env_t *tmp_env1 = NULL;
-       env_t *tmp_env2 = NULL;
-       env_t *ep = NULL;
+       int read1_fail, read2_fail;
+       env_t *tmp_env1, *tmp_env2;
 
        tmp_env1 = (env_t *)memalign(ARCH_DMA_MINALIGN,
                        CONFIG_ENV_SIZE);
@@ -185,63 +183,14 @@ static int env_sf_load(void)
        if (ret)
                goto out;
 
-       ret = spi_flash_read(env_flash, CONFIG_ENV_OFFSET,
-                               CONFIG_ENV_SIZE, tmp_env1);
-       if (ret) {
-               set_default_env("!spi_flash_read() failed");
-               goto err_read;
-       }
-
-       if (crc32(0, tmp_env1->data, ENV_SIZE) == tmp_env1->crc)
-               crc1_ok = 1;
+       read1_fail = spi_flash_read(env_flash, CONFIG_ENV_OFFSET,
+                                   CONFIG_ENV_SIZE, tmp_env1);
+       read2_fail = spi_flash_read(env_flash, CONFIG_ENV_OFFSET_REDUND,
+                                   CONFIG_ENV_SIZE, tmp_env2);
 
-       ret = spi_flash_read(env_flash, CONFIG_ENV_OFFSET_REDUND,
-                               CONFIG_ENV_SIZE, tmp_env2);
-       if (!ret) {
-               if (crc32(0, tmp_env2->data, ENV_SIZE) == tmp_env2->crc)
-                       crc2_ok = 1;
-       }
+       ret = env_import_redund((char *)tmp_env1, read1_fail, (char *)tmp_env2,
+                               read2_fail);
 
-       if (!crc1_ok && !crc2_ok) {
-               set_default_env("!bad CRC");
-               ret = -EIO;
-               goto err_read;
-       } else if (crc1_ok && !crc2_ok) {
-               gd->env_valid = ENV_VALID;
-       } else if (!crc1_ok && crc2_ok) {
-               gd->env_valid = ENV_REDUND;
-       } else if (tmp_env1->flags == ACTIVE_FLAG &&
-                  tmp_env2->flags == OBSOLETE_FLAG) {
-               gd->env_valid = ENV_VALID;
-       } else if (tmp_env1->flags == OBSOLETE_FLAG &&
-                  tmp_env2->flags == ACTIVE_FLAG) {
-               gd->env_valid = ENV_REDUND;
-       } else if (tmp_env1->flags == tmp_env2->flags) {
-               gd->env_valid = ENV_VALID;
-       } else if (tmp_env1->flags == 0xFF) {
-               gd->env_valid = ENV_VALID;
-       } else if (tmp_env2->flags == 0xFF) {
-               gd->env_valid = ENV_REDUND;
-       } else {
-               /*
-                * this differs from code in env_flash.c, but I think a sane
-                * default path is desirable.
-                */
-               gd->env_valid = ENV_VALID;
-       }
-
-       if (gd->env_valid == ENV_VALID)
-               ep = tmp_env1;
-       else
-               ep = tmp_env2;
-
-       ret = env_import((char *)ep, 0);
-       if (ret) {
-               pr_err("Cannot import environment: errno = %d\n", errno);
-               set_default_env("!env_import failed");
-       }
-
-err_read:
        spi_flash_free(env_flash);
        env_flash = NULL;
 out: