[U-Boot] [PATCH] env: Access Environment in SPI flashes before relocation

Heiko Schocher hs at denx.de
Mon Nov 11 06:15:30 UTC 2019


Hello Simon,

Am 10.11.2019 um 15:51 schrieb Simon Goldschmidt:
> 
> 
> Heiko Schocher <hs at denx.de <mailto:hs at denx.de>> schrieb am Sa., 9. Nov. 2019, 05:02:
> 
>     Enable the new Kconfig option ENV_SPI_EARLY if you want
>     to use Environment in SPI flash before relocation.
>     Call env_init() and than you can use env_get_f() for
>     accessing Environment variables.
> 
>     Signed-off-by: Heiko Schocher <hs at denx.de <mailto:hs at denx.de>>
> 
>     ---
>     travis build:
>     https://travis-ci.org/hsdenx/u-boot-test/builds/609101712
> 
>       env/Kconfig |   8 ++++
>       env/sf.c    | 109 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>       2 files changed, 117 insertions(+)
> 
>     diff --git a/env/Kconfig b/env/Kconfig
>     index bc03816bc8..f2e1e1ba87 100644
>     --- a/env/Kconfig
>     +++ b/env/Kconfig
>     @@ -370,6 +370,14 @@ config ENV_SPI_MODE
>                Value of the SPI work mode for environment.
>                See include/spi.h for value.
> 
>     +config ENV_SPI_EARLY
>     +       bool "Access Environment in SPI flashes before relocation"
>     +       depends on ENV_IS_IN_SPI_FLASH
>     +       help
>     +         Enable this if you want to use Environment in SPI flash
>     +         before relocation. Call env_init() and than you can use
>     +         env_get_f() for accessing Environment variables.
>     +
>       config ENV_IS_IN_UBI
>              bool "Environment in a UBI volume"
>              depends on !CHAIN_OF_TRUST
>     diff --git a/env/sf.c b/env/sf.c
>     index 590d0cedd8..c4dd7dc611 100644
>     --- a/env/sf.c
>     +++ b/env/sf.c
>     @@ -308,6 +308,113 @@ static int env_sf_init(void)
[...]
> 
> 
> Sorry I haven't looked at the file in detail yet, but doesn't this duplicate quite a lot of env 
> decision code?

Yes, correct, I take a look to remove this duplication ...

Hmm... just detected when booting with invalid environment in spi nor flash,
that the board selects correct the default environment (before relocation)
but I see in U-Boot commandshell:

=> printenv

Environment size: 1/12283 bytes
=>

and even worser, saveenv never calls the save function for the spi nor...
it seems, the reason is:

diff --git a/env/env.c b/env/env.c
index 9237bb9c74..6faef1136d 100644
--- a/env/env.c
+++ b/env/env.c
@@ -189,7 +189,7 @@ int env_load(void)
                 if (!drv->load)
                         continue;

-               if (!env_has_inited(drv->location))
+               if (env_has_inited(drv->location))
                         continue;

                 printf("Loading Environment from %s... ", drv->name);

With this change, all is fine again. This seems a bug to me ... but wonder
why this does not pop up on other boards ... what do you think?

bye,
Heiko

> 
> Regards,
> Simon
> 
>     +
>       U_BOOT_ENV_LOCATION(sf) = {
>              .location       = ENVL_SPI_FLASH,
>              ENV_NAME("SPI Flash")
>     @@ -317,5 +424,7 @@ U_BOOT_ENV_LOCATION(sf) = {
>       #endif
>       #if defined(INITENV) && defined(CONFIG_ENV_ADDR)
>              .init           = env_sf_init,
>     +#elif defined(CONFIG_ENV_SPI_EARLY)
>     +       .init           = env_sf_init_early,
>       #endif
>       };
>     -- 
>     2.21.0
> 

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-52   Fax: +49-8142-66989-80   Email: hs at denx.de


More information about the U-Boot mailing list