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