[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