env: Load env when ENV_IS_NOWHERE is only location selected

This patch prevent u-boot from hanging on a UltraZed EG board (zynqmp).

Without the patch,
(drv = env_driver_lookup(ENVOP_INIT, prio))
evaluates to 0, causing prio = 0
Then, (!prio) is hit, returning -ENODEV causing a stall.

With the patch,
instead of returning -ENODEV and causing a stall, we
set gd->env_addr (is this really needed?)
and then
mark gd->env_valid = ENV_INVALID to use the default env.
This commit is contained in:
Felix.Vietmeyer@jila.colorado.edu 2021-04-20 20:04:26 -06:00 committed by Tom Rini
parent 545eceb520
commit 8d61237edb

13
env/env.c vendored
View File

@ -322,17 +322,18 @@ int env_init(void)
debug("%s: Environment %s init done (ret=%d)\n", __func__, debug("%s: Environment %s init done (ret=%d)\n", __func__,
drv->name, ret); drv->name, ret);
if (gd->env_valid == ENV_INVALID)
ret = -ENOENT;
} }
if (!prio) if (!prio) {
return -ENODEV; gd->env_addr = (ulong)&default_environment[0];
gd->env_valid = ENV_INVALID;
return 0;
}
if (ret == -ENOENT) { if (ret == -ENOENT) {
gd->env_addr = (ulong)&default_environment[0]; gd->env_addr = (ulong)&default_environment[0];
gd->env_valid = ENV_VALID; gd->env_valid = ENV_INVALID;
return 0; return 0;
} }