[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