]> git.sur5r.net Git - u-boot/blobdiff - env/sf.c
env: make env drivers propagate env_import return value
[u-boot] / env / sf.c
index 6f74371c098203e2ba9c805227da7a9a492bae7a..3dc54410df496c6ebaddcbd4c5e5e63ec6d4211c 100644 (file)
--- a/env/sf.c
+++ b/env/sf.c
@@ -34,6 +34,7 @@
 
 #ifndef CONFIG_SPL_BUILD
 #define CMD_SAVEENV
+#define INITENV
 #endif
 
 #ifdef CONFIG_ENV_OFFSET_REDUND
@@ -235,8 +236,8 @@ static int env_sf_load(void)
                ep = tmp_env2;
 
        ret = env_import((char *)ep, 0);
-       if (!ret) {
-               error("Cannot import environment: errno = %d\n", errno);
+       if (ret) {
+               pr_err("Cannot import environment: errno = %d\n", errno);
                set_default_env("!env_import failed");
        }
 
@@ -335,7 +336,7 @@ static int env_sf_load(void)
        }
 
        ret = env_import(buf, 1);
-       if (ret)
+       if (!ret)
                gd->env_valid = ENV_VALID;
 
 err_read:
@@ -348,6 +349,23 @@ out:
 }
 #endif
 
+#if defined(INITENV) && defined(CONFIG_ENV_ADDR)
+static int env_sf_init(void)
+{
+       env_t *env_ptr = (env_t *)(CONFIG_ENV_ADDR);
+
+       if (crc32(0, env_ptr->data, ENV_SIZE) == env_ptr->crc) {
+               gd->env_addr    = (ulong)&(env_ptr->data);
+               gd->env_valid   = 1;
+       } else {
+               gd->env_addr = (ulong)&default_environment[0];
+               gd->env_valid = 1;
+       }
+
+       return 0;
+}
+#endif
+
 U_BOOT_ENV_LOCATION(sf) = {
        .location       = ENVL_SPI_FLASH,
        ENV_NAME("SPI Flash")
@@ -355,4 +373,7 @@ U_BOOT_ENV_LOCATION(sf) = {
 #ifdef CMD_SAVEENV
        .save           = env_save_ptr(env_sf_save),
 #endif
+#if defined(INITENV) && defined(CONFIG_ENV_ADDR)
+       .init           = env_sf_init,
+#endif
 };