[U-Boot] [PATCH 5/7] bootcount: add support for bootcounter on EXT filesystem
Martyn Welch
martyn at welchs.me.uk
Thu Oct 26 14:48:03 UTC 2017
From: Ian Ray <ian.ray at ge.com>
Add support for bootcounter on an EXT filesystem.
Sync configuration whitelist.
Signed-off-by: Ian Ray <ian.ray at ge.com>
Signed-off-by: Martyn Welch <martyn.welch at collabora.co.uk>
Signed-off-by: Martyn Welch <martyn at welchs.me.uk>
---
README | 7 +++++
drivers/bootcount/Makefile | 1 +
drivers/bootcount/bootcount_ext.c | 59 +++++++++++++++++++++++++++++++++++++++
scripts/config_whitelist.txt | 4 +++
4 files changed, 71 insertions(+)
create mode 100644 drivers/bootcount/bootcount_ext.c
diff --git a/README b/README
index f288176..6336c5c 100644
--- a/README
+++ b/README
@@ -2362,6 +2362,13 @@ The following options need to be configured:
CONFIG_SYS_BOOTCOUNT_ADDR = i2c addr which is used for
the bootcounter.
CONFIG_BOOTCOUNT_ALEN = address len
+ CONFIG_BOOTCOUNT_EXT
+ enable support for the bootcounter in EXT filesystem
+ CONFIG_SYS_BOOTCOUNT_ADDR = RAM address used for read
+ and write.
+ CONFIG_SYS_BOOTCOUNT_EXT_INTERFACE = interface
+ CONFIG_SYS_BOOTCOUNT_EXT_DEVPART = device and part
+ CONFIG_SYS_BOOTCOUNT_EXT_NAME = filename
- Show boot progress:
CONFIG_SHOW_BOOT_PROGRESS
diff --git a/drivers/bootcount/Makefile b/drivers/bootcount/Makefile
index ed9659a..45445d2 100644
--- a/drivers/bootcount/Makefile
+++ b/drivers/bootcount/Makefile
@@ -9,3 +9,4 @@ obj-$(CONFIG_BOOTCOUNT_AM33XX) += bootcount_davinci.o
obj-$(CONFIG_BOOTCOUNT_RAM) += bootcount_ram.o
obj-$(CONFIG_BOOTCOUNT_ENV) += bootcount_env.o
obj-$(CONFIG_BOOTCOUNT_I2C) += bootcount_i2c.o
+obj-$(CONFIG_BOOTCOUNT_EXT) += bootcount_ext.o
diff --git a/drivers/bootcount/bootcount_ext.c b/drivers/bootcount/bootcount_ext.c
new file mode 100644
index 0000000..d36bb0e
--- /dev/null
+++ b/drivers/bootcount/bootcount_ext.c
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2017 General Electric Company. All rights reserved.
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <bootcount.h>
+#include <fs.h>
+#include <mapmem.h>
+
+#define BC_MAGIC 0xbc
+
+void bootcount_store(ulong a)
+{
+ uint8_t *buf;
+ loff_t len;
+ int ret;
+
+ if (fs_set_blk_dev(CONFIG_SYS_BOOTCOUNT_EXT_INTERFACE, CONFIG_SYS_BOOTCOUNT_EXT_DEVPART, FS_TYPE_EXT)) {
+ puts("Error selecting device\n");
+ return;
+ }
+
+ buf = map_sysmem(CONFIG_SYS_BOOTCOUNT_ADDR, 2);
+ buf[0] = BC_MAGIC;
+ buf[1] = (a & 0xff);
+ unmap_sysmem(buf);
+
+ ret = fs_write(CONFIG_SYS_BOOTCOUNT_EXT_NAME, CONFIG_SYS_BOOTCOUNT_ADDR, 0, 2, &len);
+ if (ret != 0) {
+ puts("Error storing bootcount\n");
+ }
+}
+
+ulong bootcount_load(void)
+{
+ uint8_t *buf;
+ loff_t len_read;
+ int ret;
+
+ if (fs_set_blk_dev(CONFIG_SYS_BOOTCOUNT_EXT_INTERFACE, CONFIG_SYS_BOOTCOUNT_EXT_DEVPART, FS_TYPE_EXT)) {
+ puts("Error selecting device\n");
+ return 0;
+ }
+
+ ret = fs_read(CONFIG_SYS_BOOTCOUNT_EXT_NAME, CONFIG_SYS_BOOTCOUNT_ADDR, 0, 2, &len_read);
+ if (ret != 0 || len_read != 2) {
+ puts("Error loading bootcount\n");
+ return 0;
+ }
+
+ buf = map_sysmem(CONFIG_SYS_BOOTCOUNT_ADDR, 2);
+ if (buf[0] == BC_MAGIC) {
+ ret = buf[1];
+ }
+ unmap_sysmem(buf);
+
+ return ret;
+}
diff --git a/scripts/config_whitelist.txt b/scripts/config_whitelist.txt
index 5ee1601..b9580b9 100644
--- a/scripts/config_whitelist.txt
+++ b/scripts/config_whitelist.txt
@@ -175,6 +175,7 @@ CONFIG_BOOTCOMMAND
CONFIG_BOOTCOUNT_ALEN
CONFIG_BOOTCOUNT_AM33XX
CONFIG_BOOTCOUNT_ENV
+CONFIG_BOOTCOUNT_EXT
CONFIG_BOOTCOUNT_I2C
CONFIG_BOOTCOUNT_LIMIT
CONFIG_BOOTCOUNT_RAM
@@ -2368,6 +2369,9 @@ CONFIG_SYS_BOARD_VERSION
CONFIG_SYS_BOOK3E_HV
CONFIG_SYS_BOOTCOUNT_ADDR
CONFIG_SYS_BOOTCOUNT_BE
+CONFIG_SYS_BOOTCOUNT_EXT_DEVPART
+CONFIG_SYS_BOOTCOUNT_EXT_INTERFACE
+CONFIG_SYS_BOOTCOUNT_EXT_NAME
CONFIG_SYS_BOOTCOUNT_LE
CONFIG_SYS_BOOTCOUNT_SINGLEWORD
CONFIG_SYS_BOOTFILE_PREFIX
--
2.1.4
More information about the U-Boot
mailing list