mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-19 21:51:31 +00:00
bootcount: store bootcount var in environment
If no softreset save registers are found on the hardware "bootcount" is stored in the environment. To prevent a saveenv on all reboots, the environment variable "upgrade_available" is introduced. If "upgrade_available" is 0, "bootcount" is always 0 therefore no need to save the environment on u-boot boot, if "upgrade_available" is 1 "bootcount" is incremented in the environment and environment gets written on u-boot start. So the Userspace Applikation must set the "upgrade_available" and "bootcount" variable to 0 (for example with fw_setenv), if a boot was successfully. Signed-off-by: Heiko Schocher <hs@denx.de>
This commit is contained in:
parent
85b8c5c4bf
commit
eda0ba38a8
3 changed files with 46 additions and 0 deletions
16
README
16
README
|
@ -784,6 +784,22 @@ The following options need to be configured:
|
||||||
as a convenience, when switching between booting from
|
as a convenience, when switching between booting from
|
||||||
RAM and NFS.
|
RAM and NFS.
|
||||||
|
|
||||||
|
- Bootcount:
|
||||||
|
CONFIG_BOOTCOUNT_LIMIT
|
||||||
|
Implements a mechanism for detecting a repeating reboot
|
||||||
|
cycle, see:
|
||||||
|
http://www.denx.de/wiki/view/DULG/UBootBootCountLimit
|
||||||
|
|
||||||
|
CONFIG_BOOTCOUNT_ENV
|
||||||
|
If no softreset save registers are found on the hardware
|
||||||
|
"bootcount" is stored in the environment. To prevent a
|
||||||
|
saveenv on all reboots, the environment variable
|
||||||
|
"upgrade_available" is used. If "upgrade_available" is
|
||||||
|
0, "bootcount" is always 0, if "upgrade_available" is
|
||||||
|
1 "bootcount" is incremented in the environment.
|
||||||
|
So the Userspace Applikation must set the "upgrade_available"
|
||||||
|
and "bootcount" variable to 0, if a boot was successfully.
|
||||||
|
|
||||||
- Pre-Boot Commands:
|
- Pre-Boot Commands:
|
||||||
CONFIG_PREBOOT
|
CONFIG_PREBOOT
|
||||||
|
|
||||||
|
|
|
@ -8,3 +8,4 @@ obj-$(CONFIG_BLACKFIN) += bootcount_blackfin.o
|
||||||
obj-$(CONFIG_SOC_DA8XX) += bootcount_davinci.o
|
obj-$(CONFIG_SOC_DA8XX) += bootcount_davinci.o
|
||||||
obj-$(CONFIG_AM33XX) += bootcount_davinci.o
|
obj-$(CONFIG_AM33XX) += bootcount_davinci.o
|
||||||
obj-$(CONFIG_BOOTCOUNT_RAM) += bootcount_ram.o
|
obj-$(CONFIG_BOOTCOUNT_RAM) += bootcount_ram.o
|
||||||
|
obj-$(CONFIG_BOOTCOUNT_ENV) += bootcount_env.o
|
||||||
|
|
29
drivers/bootcount/bootcount_env.c
Normal file
29
drivers/bootcount/bootcount_env.c
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
/*
|
||||||
|
* (C) Copyright 2013
|
||||||
|
* Heiko Schocher, DENX Software Engineering, hs@denx.de.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-2.0+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
|
||||||
|
void bootcount_store(ulong a)
|
||||||
|
{
|
||||||
|
int upgrade_available = getenv_ulong("upgrade_available", 10, 0);
|
||||||
|
|
||||||
|
if (upgrade_available) {
|
||||||
|
setenv_ulong("bootcount", a);
|
||||||
|
saveenv();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ulong bootcount_load(void)
|
||||||
|
{
|
||||||
|
int upgrade_available = getenv_ulong("upgrade_available", 10, 0);
|
||||||
|
ulong val = 0;
|
||||||
|
|
||||||
|
if (upgrade_available)
|
||||||
|
val = getenv_ulong("bootcount", 10, 0);
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue