diff mbox series

[U-Boot,5/7] bootcount: add support for bootcounter on EXT filesystem

Message ID 1509029285-27071-6-git-send-email-martyn@welchs.me.uk
State Superseded
Delegated to: Stefano Babic
Headers show
Series Add support for GE PPD | expand

Commit Message

Martyn Welch Oct. 26, 2017, 2:48 p.m. UTC
From: Ian Ray <ian.ray@ge.com>

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

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

Comments

Calvin Johnson Oct. 27, 2017, 6:23 p.m. UTC | #1
> -----Original Message-----

> From: U-Boot [mailto:u-boot-bounces@lists.denx.de] On Behalf Of Martyn

> Welch

> Sent: Thursday, October 26, 2017 8:18 PM


> 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


I think you have add these new configs to Kconfig instead of config_whitelist.txt.

Calvin
diff mbox series

Patch

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