#
# Boot count configuration
#

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

if BOOTCOUNT_LIMIT

choice
	prompt "Boot count device"
	default BOOTCOUNT_AM33XX if AM33XX || SOC_DA8XX

config BOOTCOUNT_EXT
	bool "Boot counter on EXT filesystem"
	help
	  Add support for maintaining boot count in a file on an EXT
	  filesystem.

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_ALEN = address len

endchoice

config SYS_BOOTCOUNT_SINGLEWORD
	bool "Use single word to pack boot count and magic value"
	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"
	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
