Skip to content

Commit

Permalink
env: sf: Allow to use env_sf_init_addr() at any stage
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
pali authored and stroese committed May 2, 2022
1 parent c70c010 commit f4bf81b
Showing 1 changed file with 11 additions and 11 deletions.
22 changes: 11 additions & 11 deletions env/sf.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,6 @@
#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
Expand Down Expand Up @@ -322,21 +318,25 @@ static int env_sf_erase(void)
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.
*/
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;
Expand All @@ -346,7 +346,6 @@ static int env_sf_init_addr(void)

return 0;
}
#endif

#if defined(CONFIG_ENV_SPI_EARLY)
/*
Expand Down Expand Up @@ -432,9 +431,10 @@ static int env_sf_init_early(void)

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
/*
Expand Down

0 comments on commit f4bf81b

Please sign in to comment.