diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/bootcount/Kconfig | 95 | ||||
-rw-r--r-- | drivers/bootcount/Makefile | 5 | ||||
-rw-r--r-- | drivers/bootcount/bootcount.c | 16 |
3 files changed, 75 insertions, 41 deletions
diff --git a/drivers/bootcount/Kconfig b/drivers/bootcount/Kconfig index d82289f57b..73972b7f9c 100644 --- a/drivers/bootcount/Kconfig +++ b/drivers/bootcount/Kconfig @@ -2,28 +2,28 @@ # 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. - -config BOOTCOUNT_LIMIT +menuconfig BOOTCOUNT_LIMIT bool "Enable support for checking boot count limit" help Enable checking for exceeding the boot count limit. More information: http://www.denx.de/wiki/DULG/UBootBootCountLimit -config SYS_BOOTCOUNT_SINGLEWORD - bool "Use single word to pack boot count and magic value" +if BOOTCOUNT_LIMIT + +choice + prompt "Boot count device" + default BOOTCOUNT_AM33XX if AM33XX || SOC_DA8XX + default BOOTCOUNT_AT91 if AT91SAM9XE + default BOOTCOUNT_GENERIC + +config BOOTCOUNT_GENERIC + bool "Generic default boot counter" help - This option enables packing boot count magic value and boot count - into single word (32 bits). + Generic bootcount stored at SYS_BOOTCOUNT_ADDR. -if BOOTCOUNT + SYS_BOOTCOUNT_ADDR: + Set to the address where the bootcount and bootcount magic + will be stored. config BOOTCOUNT_EXT bool "Boot counter on EXT filesystem" @@ -31,7 +31,60 @@ config BOOTCOUNT_EXT Add support for maintaining boot count in a file on an EXT filesystem. -if BOOTCOUNT_EXT +config BOOTCOUNT_AM33XX + bool "Boot counter in AM33XX RTC IP block" + depends on AM33XX || SOC_DA8XX + help + A bootcount driver for the RTC IP block found on many TI platforms. + This requires the RTC clocks, etc, to be enabled prior to use and + not all boards with this IP block on it will have the RTC in use. + +config BOOTCOUNT_ENV + bool "Boot counter in environment" + help + If no softreset save registers are found on the hardware + "bootcount" is stored in the environment. To prevent a + saveenv on all reboots, the environment variable + "upgrade_available" is used. If "upgrade_available" is + 0, "bootcount" is always 0, if "upgrade_available" is + 1 "bootcount" is incremented in the environment. + So the Userspace Application must set the "upgrade_available" + and "bootcount" variable to 0, if a boot was successfully. + +config BOOTCOUNT_RAM + bool "Boot counter in RAM" + help + Store the bootcount in DRAM protected against against bit errors + due to short power loss or holding a system in RESET. + +config BOOTCOUNT_I2C + bool "Boot counter on I2C device" + help + Enable support for the bootcounter on an i2c (like RTC) device. + CONFIG_SYS_I2C_RTC_ADDR = i2c chip address + CONFIG_SYS_BOOTCOUNT_ADDR = i2c addr which is used for + the bootcounter. + +config BOOTCOUNT_AT91 + bool "Boot counter for Atmel AT91SAM9XE" + depends on AT91SAM9XE + +endchoice + +config BOOTCOUNT_ALEN + int "I2C address length" + default 1 + depends on BOOTCOUNT_I2C + help + Length of the the I2C address at SYS_BOOTCOUNT_ADDR for storing + the boot counter. + +config SYS_BOOTCOUNT_SINGLEWORD + bool "Use single word to pack boot count and magic value" + depends on BOOTCOUNT_GENERIC + help + This option enables packing boot count magic value and boot count + into single word (32 bits). config SYS_BOOTCOUNT_EXT_INTERFACE string "Interface on which to find boot counter EXT filesystem" @@ -58,13 +111,11 @@ config SYS_BOOTCOUNT_EXT_NAME config SYS_BOOTCOUNT_ADDR hex "RAM address used for reading and writing the boot counter" - default 0x7000A000 - depends on BOOTCOUNT_EXT + default 0x44E3E000 if BOOTCOUNT_AM33XX + default 0xE0115FF8 if ARCH_LS1043A || ARCH_LS1021A + depends on BOOTCOUNT_AM33XX || BOOTCOUNT_GENERIC || BOOTCOUNT_EXT || \ + BOOTCOUNT_I2C help Set the address used for reading and writing the boot counter. endif - -endif - -endmenu diff --git a/drivers/bootcount/Makefile b/drivers/bootcount/Makefile index 45445d24bf..3e1ae8c884 100644 --- a/drivers/bootcount/Makefile +++ b/drivers/bootcount/Makefile @@ -2,9 +2,8 @@ # SPDX-License-Identifier: GPL-2.0+ # -obj-y += bootcount.o -obj-$(CONFIG_AT91SAM9XE) += bootcount_at91.o -obj-$(CONFIG_SOC_DA8XX) += bootcount_davinci.o +obj-$(CONFIG_BOOTCOUNT_GENERIC) += bootcount.o +obj-$(CONFIG_BOOTCOUNT_AT91) += bootcount_at91.o obj-$(CONFIG_BOOTCOUNT_AM33XX) += bootcount_davinci.o obj-$(CONFIG_BOOTCOUNT_RAM) += bootcount_ram.o obj-$(CONFIG_BOOTCOUNT_ENV) += bootcount_env.o diff --git a/drivers/bootcount/bootcount.c b/drivers/bootcount/bootcount.c index 8b499fe128..67554fa4a9 100644 --- a/drivers/bootcount/bootcount.c +++ b/drivers/bootcount/bootcount.c @@ -8,22 +8,7 @@ #include <bootcount.h> #include <linux/compiler.h> -/* - * Only override CONFIG_SYS_BOOTCOUNT_ADDR if not already defined. This - * way, some boards can define it directly in their config header. - */ -#if !defined(CONFIG_SYS_BOOTCOUNT_ADDR) - -#if defined(CONFIG_QE) -#include <linux/immap_qe.h> -#define CONFIG_SYS_BOOTCOUNT_ADDR (CONFIG_SYS_IMMR + 0x110000 + \ - QE_MURAM_SIZE - 2 * sizeof(u32)) -#endif /* defined(CONFIG_QE) */ - -#endif /* !defined(CONFIG_SYS_BOOTCOUNT_ADDR) */ - /* Now implement the generic default functions */ -#if defined(CONFIG_SYS_BOOTCOUNT_ADDR) __weak void bootcount_store(ulong a) { void *reg = (void *)CONFIG_SYS_BOOTCOUNT_ADDR; @@ -54,4 +39,3 @@ __weak ulong bootcount_load(void) return raw_bootcount_load(reg); #endif /* defined(CONFIG_SYS_BOOTCOUNT_SINGLEWORD) */ } -#endif /* defined(CONFIG_SYS_BOOTCOUNT_ADDR) */ |