aboutsummaryrefslogtreecommitdiff
path: root/env/env.c
diff options
context:
space:
mode:
authorHeiko Schocher <hs@denx.de>2020-11-03 15:22:36 +0100
committerTom Rini <trini@konsulko.com>2020-11-03 10:04:25 -0500
commit46ce9e777c1314ccb78906992b94001194eaa87b (patch)
treec05f2f20efd6b0463e1dc1908207983c27bc2ddf /env/env.c
parent7a8ac9df5dc0c23620d07933288fc5bea1941c29 (diff)
downloadu-boot-46ce9e777c1314ccb78906992b94001194eaa87b.zip
u-boot-46ce9e777c1314ccb78906992b94001194eaa87b.tar.gz
u-boot-46ce9e777c1314ccb78906992b94001194eaa87b.tar.bz2
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>
Diffstat (limited to 'env/env.c')
-rw-r--r--env/env.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/env/env.c b/env/env.c
index 42c7d81..37b4b54 100644
--- a/env/env.c
+++ b/env/env.c
@@ -329,6 +329,8 @@ int env_init(void)
for (prio = 0; (drv = env_driver_lookup(ENVOP_INIT, prio)); prio++) {
if (!drv->init || !(ret = drv->init()))
env_set_inited(drv->location);
+ if (ret == -ENOENT)
+ env_set_inited(drv->location);
debug("%s: Environment %s init done (ret=%d)\n", __func__,
drv->name, ret);