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>master
parent
54d8d4942f
commit
f31dac4e6e
@ -0,0 +1,58 @@ |
||||
# |
||||
# Boot count configuration |
||||
# |
||||
|
||||
menu "Boot count support" |
||||
|
||||
config BOOTCOUNT |
||||
bool "Enable Boot count support" |
||||
help |
||||
Enable boot count support, which provides the ability to store the |
||||
number of times the board has booted on a number of different |
||||
persistent storage mediums. |
||||
|
||||
if BOOTCOUNT |
||||
|
||||
config BOOTCOUNT_EXT |
||||
bool "Boot counter on EXT filesystem" |
||||
help |
||||
Add support for maintaining boot count in a file on an EXT |
||||
filesystem. |
||||
|
||||
if BOOTCOUNT_EXT |
||||
|
||||
config SYS_BOOTCOUNT_EXT_INTERFACE |
||||
string "Interface on which to find boot counter EXT filesystem" |
||||
default "mmc" |
||||
depends on BOOTCOUNT_EXT |
||||
help |
||||
Set the interface to use when locating the filesystem to use for the |
||||
boot counter. |
||||
|
||||
config SYS_BOOTCOUNT_EXT_DEVPART |
||||
string "Partition of the boot counter EXT filesystem" |
||||
default "0:1" |
||||
depends on BOOTCOUNT_EXT |
||||
help |
||||
Set the partition to use when locating the filesystem to use for the |
||||
boot counter. |
||||
|
||||
config SYS_BOOTCOUNT_EXT_NAME |
||||
string "Path and filename of the EXT filesystem based boot counter" |
||||
default "/boot/failures" |
||||
depends on BOOTCOUNT_EXT |
||||
help |
||||
Set the filename and path of the file used to store the boot counter. |
||||
|
||||
config SYS_BOOTCOUNT_ADDR |
||||
hex "RAM address used for reading and writing the boot counter" |
||||
default 0x7000A000 |
||||
depends on BOOTCOUNT_EXT |
||||
help |
||||
Set the address used for reading and writing the boot counter. |
||||
|
||||
endif |
||||
|
||||
endif |
||||
|
||||
endmenu |
@ -0,0 +1,62 @@ |
||||
/*
|
||||
* 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) |
||||
{ |
||||
u8 *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) |
||||
{ |
||||
u8 *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; |
||||
} |
Loading…
Reference in new issue