diff options
author | Mario Schuknecht <mario.schuknecht@dresearch-fe.de> | 2015-03-24 08:59:00 +0100 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2015-04-07 08:41:10 -0400 |
commit | 5e8397dd94a1b55cd7577cdc24f271b71f660e7e (patch) | |
tree | 8d78cd49d1bfcbd500929276f063361d7cf024f8 | |
parent | 3419af770ddb6d3d777f651f9eb89479df4623ba (diff) | |
download | u-boot-imx-5e8397dd94a1b55cd7577cdc24f271b71f660e7e.zip u-boot-imx-5e8397dd94a1b55cd7577cdc24f271b71f660e7e.tar.gz u-boot-imx-5e8397dd94a1b55cd7577cdc24f271b71f660e7e.tar.bz2 |
env_sf: Fix recovery default
The u-boot environment is redundantly stored in a NOR flash on our boards.
Redundant means that there are two places to store the environment. But only
one of the two is active. I discovered that on one board the u-boot (env_sf)
uses the environment from the second place and the Kernel (fw_printenv) uses
the environment from the first place.
To decide which is the active environment there is a byte inside the
environment. 1 means active and 0 means obsolete. But on that board both
environments had have a 1. This can happen if a power loss or reset occurs
during writing the environment. In this situation the u-boot (env_sf)
implementation uses the second environment as default. But the Kernel
(fw_printenv) implementation uses the first environment as default.
This commit corrects the default in the u-boot env_sf implementation when a
problem was detected. Now the recovery default is the same like in all other
environment implementations. E.g. fw_printenv and env_flash. This ensures that
u-boot and Kernel use the same environment.
Signed-off-by: Mario Schuknecht <mario.schuknecht@dresearch-fe.de>
-rw-r--r-- | common/env_sf.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/common/env_sf.c b/common/env_sf.c index 5e3729c..e928f57 100644 --- a/common/env_sf.c +++ b/common/env_sf.c @@ -188,15 +188,17 @@ void env_relocate_spec(void) tmp_env2->flags == ACTIVE_FLAG) { gd->env_valid = 2; } else if (tmp_env1->flags == tmp_env2->flags) { - gd->env_valid = 2; + gd->env_valid = 1; } else if (tmp_env1->flags == 0xFF) { + gd->env_valid = 1; + } else if (tmp_env2->flags == 0xFF) { gd->env_valid = 2; } else { /* * this differs from code in env_flash.c, but I think a sane * default path is desirable. */ - gd->env_valid = 2; + gd->env_valid = 1; } if (gd->env_valid == 1) |