From: Ian Ray <ian....@ge.com>

Add support for bootcounter on an EXT filesystem.
Sync configuration whitelist.

Signed-off-by: Ian Ray <ian....@ge.com>
Signed-off-by: Martyn Welch <martyn.we...@collabora.co.uk>
Signed-off-by: Martyn Welch <mar...@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

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to