mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-20 22:21:41 +00:00
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>
This commit is contained in:
parent
3419af770d
commit
5e8397dd94
1 changed files with 4 additions and 2 deletions
|
@ -188,15 +188,17 @@ void env_relocate_spec(void)
|
||||||
tmp_env2->flags == ACTIVE_FLAG) {
|
tmp_env2->flags == ACTIVE_FLAG) {
|
||||||
gd->env_valid = 2;
|
gd->env_valid = 2;
|
||||||
} else if (tmp_env1->flags == tmp_env2->flags) {
|
} else if (tmp_env1->flags == tmp_env2->flags) {
|
||||||
gd->env_valid = 2;
|
gd->env_valid = 1;
|
||||||
} else if (tmp_env1->flags == 0xFF) {
|
} else if (tmp_env1->flags == 0xFF) {
|
||||||
|
gd->env_valid = 1;
|
||||||
|
} else if (tmp_env2->flags == 0xFF) {
|
||||||
gd->env_valid = 2;
|
gd->env_valid = 2;
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* this differs from code in env_flash.c, but I think a sane
|
* this differs from code in env_flash.c, but I think a sane
|
||||||
* default path is desirable.
|
* default path is desirable.
|
||||||
*/
|
*/
|
||||||
gd->env_valid = 2;
|
gd->env_valid = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gd->env_valid == 1)
|
if (gd->env_valid == 1)
|
||||||
|
|
Loading…
Add table
Reference in a new issue