]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
env: sf: Allow to use env_sf_init_addr() at any stage
authorPali Rohár <pali@kernel.org>
Wed, 2 Mar 2022 11:47:51 +0000 (12:47 +0100)
committerStefan Roese <sr@denx.de>
Mon, 2 May 2022 05:28:25 +0000 (07:28 +0200)
In some cases it makes sense to use env_sf_init_addr() also in SPL mode.
Allow it for boards by providing custom implementation of weak function
env_sf_get_env_addr(). When this function returns NULL it signals that
address is invalid, like config option CONFIG_ENV_ADDR.

There is no change in default behavior or in config options.

Signed-off-by: Pali Rohár <pali@kernel.org>
env/sf.c

index 6a4bb756f006136af19ab24f925c1612d994aad6..d2c07cd71687a4697f823e55d1f05672aa37c1c6 100644 (file)
--- a/env/sf.c
+++ b/env/sf.c
 #include <dm/device-internal.h>
 #include <u-boot/crc.h>
 
-#ifndef CONFIG_SPL_BUILD
-#define INITENV
-#endif
-
 #define        OFFSET_INVALID          (~(u32)0)
 
 #ifdef CONFIG_ENV_OFFSET_REDUND
@@ -322,14 +318,15 @@ done:
        return ret;
 }
 
-#if CONFIG_ENV_ADDR != 0x0
 __weak void *env_sf_get_env_addr(void)
 {
+#ifndef CONFIG_SPL_BUILD
        return (void *)CONFIG_ENV_ADDR;
-}
+#else
+       return NULL;
 #endif
+}
 
-#if defined(INITENV) && (CONFIG_ENV_ADDR != 0x0)
 /*
  * check if Environment on CONFIG_ENV_ADDR is valid.
  */
@@ -337,6 +334,9 @@ static int env_sf_init_addr(void)
 {
        env_t *env_ptr = (env_t *)env_sf_get_env_addr();
 
+       if (!env_ptr)
+               return -ENOENT;
+
        if (crc32(0, env_ptr->data, ENV_SIZE) == env_ptr->crc) {
                gd->env_addr = (ulong)&(env_ptr->data);
                gd->env_valid = ENV_VALID;
@@ -346,7 +346,6 @@ static int env_sf_init_addr(void)
 
        return 0;
 }
-#endif
 
 #if defined(CONFIG_ENV_SPI_EARLY)
 /*
@@ -432,9 +431,10 @@ out:
 
 static int env_sf_init(void)
 {
-#if defined(INITENV) && (CONFIG_ENV_ADDR != 0x0)
-       return env_sf_init_addr();
-#elif defined(CONFIG_ENV_SPI_EARLY)
+       int ret = env_sf_init_addr();
+       if (ret != -ENOENT)
+               return ret;
+#ifdef CONFIG_ENV_SPI_EARLY
        return env_sf_init_early();
 #endif
        /*