@@ -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
@@ -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
new file mode 100644
@@ -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;
+}
@@ -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