
Hello Simon,
Am 10.11.2019 um 15:51 schrieb Simon Goldschmidt:
Heiko Schocher <hs@denx.de mailto:hs@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@denx.de <mailto:hs@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