From 8d61237edbf6314a701cf78da2c5893a73ff5438 Mon Sep 17 00:00:00 2001 From: "Felix.Vietmeyer@jila.colorado.edu" Date: Tue, 20 Apr 2021 20:04:26 -0600 Subject: [PATCH] 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. --- env/env.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/env/env.c b/env/env.c index e4dfb92e15..7168cb9d31 100644 --- a/env/env.c +++ b/env/env.c @@ -322,17 +322,18 @@ int env_init(void) debug("%s: Environment %s init done (ret=%d)\n", __func__, drv->name, ret); - - if (gd->env_valid == ENV_INVALID) - ret = -ENOENT; } - if (!prio) - return -ENODEV; + if (!prio) { + gd->env_addr = (ulong)&default_environment[0]; + gd->env_valid = ENV_INVALID; + + return 0; + } if (ret == -ENOENT) { gd->env_addr = (ulong)&default_environment[0]; - gd->env_valid = ENV_VALID; + gd->env_valid = ENV_INVALID; return 0; } -- 2.39.5