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

Heiko Schocher hs at denx.de
Tue Nov 12 07:07:52 UTC 2019


Hello Simon,

Am 11.11.2019 um 21:07 schrieb Simon Goldschmidt:
> 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.

Yes, you are right, sorry for your time. I try to find out, whats going
wrong...

bye,
Heiko
-- 
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