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

Simon Goldschmidt simon.k.r.goldschmidt at gmail.com
Mon Nov 11 20:07:24 UTC 2019


On Mon, Nov 11, 2019 at 7:15 AM Heiko Schocher <hs at denx.de> wrote:
>
> 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?

I don't think I really get what your problem is, yet. But the code above looks
correct: only call load/save/erase on env drivers that have successfully been
initialized via env_init.

Regards,
Simon

>
> 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