diff mbox series

env: Load env when ENV_IS_NOWHERE is only location selected

Message ID 02f1e164b5d59237dd8cd221c9f7f96a.squirrel@jilau1.colorado.edu
State Needs Review / ACK
Delegated to: Tom Rini
Headers show
Series env: Load env when ENV_IS_NOWHERE is only location selected | expand

Commit Message

Felix.Vietmeyer@jila.colorado.edu April 21, 2021, 2:04 a.m. UTC
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 mbox series

Patch

diff --git a/env/env.c b/env/env.c
index e534008006..44a65ab216 100644
--- a/env/env.c
+++ b/env/env.c
@@ -335,17 +335,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;
 	}