All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heiko Schocher <hs@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 1/5] bootcount: store bootcount var in environment
Date: Mon,  4 Nov 2013 08:02:35 +0100	[thread overview]
Message-ID: <1383548559-8233-2-git-send-email-hs@denx.de> (raw)
In-Reply-To: <1383548559-8233-1-git-send-email-hs@denx.de>

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>
---
- no changes for v2

 README                            | 16 ++++++++++++++++
 drivers/bootcount/Makefile        |  1 +
 drivers/bootcount/bootcount_env.c | 29 +++++++++++++++++++++++++++++
 3 files changed, 46 insertions(+)
 create mode 100644 drivers/bootcount/bootcount_env.c

diff --git a/README b/README
index 232c96a..2558e42 100644
--- a/README
+++ b/README
@@ -784,6 +784,22 @@ The following options need to be configured:
 		as a convenience, when switching between booting from
 		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:
 		CONFIG_PREBOOT
 
diff --git a/drivers/bootcount/Makefile b/drivers/bootcount/Makefile
index 2b517b6..8ec0423 100644
--- a/drivers/bootcount/Makefile
+++ b/drivers/bootcount/Makefile
@@ -11,6 +11,7 @@ COBJS-$(CONFIG_AT91SAM9XE)	+= bootcount_at91.o
 COBJS-$(CONFIG_BLACKFIN)	+= bootcount_blackfin.o
 COBJS-$(CONFIG_SOC_DA8XX)	+= bootcount_davinci.o
 COBJS-$(CONFIG_BOOTCOUNT_RAM)	+= bootcount_ram.o
+COBJS-$(CONFIG_BOOTCOUNT_ENV)	+= bootcount_env.o
 
 COBJS	:= $(COBJS-y)
 SRCS 	:= $(COBJS:.o=.c)
diff --git a/drivers/bootcount/bootcount_env.c b/drivers/bootcount/bootcount_env.c
new file mode 100644
index 0000000..2d6e8db
--- /dev/null
+++ b/drivers/bootcount/bootcount_env.c
@@ -0,0 +1,29 @@
+/*
+ * (C) Copyright 2013
+ * Heiko Schocher, DENX Software Engineering, hs at 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;
+}
-- 
1.8.3.1

  reply	other threads:[~2013-11-04  7:02 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-04  7:02 [U-Boot] [PATCH v2 0/5] arm, am33xx: update for the am33xx based siemens boards Heiko Schocher
2013-11-04  7:02 ` Heiko Schocher [this message]
2013-11-04  7:02 ` [U-Boot] [PATCH v2 2/5] arm, am33x: make RTC32K OSC enable configurable Heiko Schocher
2013-11-04  7:02 ` [U-Boot] [PATCH v2 3/5] usb, g_dnl: make iSerialNumber board configurable Heiko Schocher
2013-11-04 11:05   ` Lukasz Majewski
2013-11-04  7:02 ` [U-Boot] [PATCH v2 4/5] usb, g_dnl: make bcdDevice value configurable Heiko Schocher
2013-11-04  7:02 ` [U-Boot] [PATCH v2 5/5] arm, am335x: update for the siemens boards Heiko Schocher
2013-11-04 12:45 ` [U-Boot] [PATCH v2 0/5] arm, am33xx: update for the am33xx based " Vaibhav Bedia
2013-11-04 13:15   ` Heiko Schocher
2013-11-04 13:24     ` Vaibhav Bedia
2013-11-04 17:34       ` Marek Vasut
2013-11-04 19:45         ` Vaibhav Bedia
2013-11-05  3:30           ` Heiko Schocher
2013-11-06 12:18             ` Vaibhav Bedia

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1383548559-8233-2-git-send-email-hs@denx.de \
    --to=hs@denx.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.