env: sf: fix init function behaviour
authorHeiko Schocher <hs@denx.de>
Tue, 3 Nov 2020 14:22:36 +0000 (15:22 +0100)
committerTom Rini <trini@konsulko.com>
Tue, 3 Nov 2020 15:04:25 +0000 (10:04 -0500)
commit46ce9e777c1314ccb78906992b94001194eaa87b
treec05f2f20efd6b0463e1dc1908207983c27bc2ddf
parent7a8ac9df5dc0c23620d07933288fc5bea1941c29
env: sf: fix init function behaviour

Michael wrote:
commit 92765f45bb95 ("env: Access Environment in SPI flashes before
relocation") at least breaks the Kontron sl28 board. I guess it also
breaks others which use a (late) SPI environment.

reason is, that env_init() sets the init bit, if there
is no init function defined in an environment driver,
and use default return value -ENOENT in this case
later for setting the default environment.

Change:
Environment driver can now implement an init
function and return, if this function does nothing,
simply -ENOENT.

env_init() now handles -ENOENT correct by setting the
inited bit for the environment driver. And if there
is no other environment driver whose init function
returns 0, load than the default environment.

This prevents that each environment driver needs to set the
default environment.

Fixes: 92765f45bb95 ("env: Access Environment in SPI flashes before relocation")
Reported-by: Michael Walle <michael@walle.cc>
Tested-by: Michael Walle <michael@walle.cc> [For the SF environment]
Signed-off-by: Heiko Schocher <hs@denx.de>
env/env.c
env/sf.c