[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