Hello Simon,

Am 10.11.2019 um 15:51 schrieb Simon Goldschmidt:


Heiko Schocher <h...@denx.de <mailto:h...@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 <h...@denx.de <mailto:h...@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: h...@denx.de
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to