1#
2# Boot count configuration
3#
4
5menuconfig BOOTCOUNT_LIMIT
6	bool "Enable support for checking boot count limit"
7	help
8	  Enable checking for exceeding the boot count limit.
9	  More information: http://www.denx.de/wiki/DULG/UBootBootCountLimit
10
11if BOOTCOUNT_LIMIT
12
13choice
14	prompt "Boot count device"
15	default BOOTCOUNT_AM33XX if AM33XX || SOC_DA8XX
16	default BOOTCOUNT_AT91 if AT91SAM9XE
17	default BOOTCOUNT_GENERIC
18
19config BOOTCOUNT_GENERIC
20	bool "Generic default boot counter"
21	help
22	  Generic bootcount stored at SYS_BOOTCOUNT_ADDR.
23
24	  SYS_BOOTCOUNT_ADDR:
25	    Set to the address where the bootcount and bootcount magic
26	    will be stored.
27
28config BOOTCOUNT_EXT
29	bool "Boot counter on EXT filesystem"
30	depends on FS_EXT4
31	select EXT4_WRITE
32	help
33	  Add support for maintaining boot count in a file on an EXT
34	  filesystem.
35
36config BOOTCOUNT_AM33XX
37	bool "Boot counter in AM33XX RTC IP block"
38	depends on AM33XX || SOC_DA8XX
39	select SPL_AM33XX_ENABLE_RTC32K_OSC if AM33XX
40	help
41	  A bootcount driver for the RTC IP block found on many TI platforms.
42	  This requires the RTC clocks, etc, to be enabled prior to use and
43	  not all boards with this IP block on it will have the RTC in use.
44
45config BOOTCOUNT_AM33XX_NVMEM
46	bool "Boot counter in AM33XX RTC IP block with upgrade_available flag"
47	depends on AM33XX
48        select SPL_AM33XX_ENABLE_RTC32K_OSC if AM33XX
49	help
50	  Add support for maintaining bootcount,upgrade_available,
51	  version and BOOTMAGIC in a AM33xx RTC IP block
52	  scratch register2.
53
54	  A bootcount driver for the RTC IP block found on many TI platforms.
55	  This requires the RTC clocks, etc, to be enabled prior to use and
56	  not all boards with this IP block on it will have the RTC in use.
57
58	  If there is upgrade in software then "upgrade_available" is 1,
59	  "bootcount" is incremented otherwise "upgrade_available" and
60	  "bootcount" is  always 0. So the Userspace Application must set
61	  the "upgrade_available" and "bootcount" variable to 0, if a boot
62	  was successfully.
63
64config BOOTCOUNT_ENV
65	bool "Boot counter in environment"
66	help
67	  If no softreset save registers are found on the hardware
68	  "bootcount" is stored in the environment. To prevent a
69	  saveenv on all reboots, the environment variable
70	  "upgrade_available" is used. If "upgrade_available" is
71	  0, "bootcount" is always 0. If "upgrade_available" is 1,
72          "bootcount" is incremented in the environment.
73	  So the Userspace Application must set the "upgrade_available"
74	  and "bootcount" variables to 0, if the system booted successfully.
75
76config BOOTCOUNT_RAM
77	bool "Boot counter in RAM"
78	help
79	  Store the bootcount in DRAM protected against bit errors
80	  due to short power loss or holding a system in RESET.
81
82config BOOTCOUNT_AT91
83	bool "Boot counter for Atmel AT91SAM9XE"
84	depends on AT91SAM9XE
85
86config DM_BOOTCOUNT
87        bool "Boot counter in a device-model device"
88	help
89	  Enables reading/writing the bootcount in a device-model based
90	  backing store.  If an entry in /chosen/u-boot,bootcount-device
91	  exists, this will be the preferred bootcount device; otherwise
92	  the first available bootcount device will be used.
93
94endchoice
95
96if DM_BOOTCOUNT
97
98menu "Backing stores for device-model backed bootcount"
99config DM_BOOTCOUNT_RTC
100	bool "Support RTC devices as a backing store for bootcount"
101	depends on DM_RTC
102	help
103	  Enabled reading/writing the bootcount in a DM RTC device.
104	  The wrapper device is to be specified with the compatible string
105	  'u-boot,bootcount-rtc' and the 'rtc'-property (a phandle pointing
106	  to the underlying RTC device) and an optional 'offset' property
107	  are supported.
108
109	  Accesses to the backing store are performed using the write16
110	  and read16 ops of DM RTC devices.
111
112config DM_BOOTCOUNT_I2C
113	bool "Driver Model boot counter on I2C device"
114	depends on DM_I2C
115	help
116	  Enable support for the bootcounter on a generic i2c device, like a RTC
117	  or PMIC. The bootcounter is configured in the device tree using the
118	  "u-boot,bootcount-i2c" compatible string. It requires a phandle
119	  'i2cbcdev' for the i2c device and an 'offset' property used within the
120	  device.
121
122config DM_BOOTCOUNT_I2C_EEPROM
123	bool "Support i2c eeprom devices as a backing store for bootcount"
124	depends on I2C_EEPROM
125	help
126	  Enabled reading/writing the bootcount in a DM i2c eeprom device.
127	  The wrapper device is to be specified with the compatible string
128	  'u-boot,bootcount-i2c-eeprom' and the 'i2c-eeprom'-property (a phandle
129	  pointing to the underlying i2c eeprom device) and an optional 'offset'
130	  property are supported.
131
132config DM_BOOTCOUNT_PMIC_PFUZE100
133	bool "Enable Bootcount driver for PMIC PFUZE100"
134	depends on DM_PMIC_PFUZE100
135	help
136	  Enable support for the bootcounter using PMIC PFUZE100 registers.
137	  This works only, if the PMIC is not connected to a battery.
138
139config DM_BOOTCOUNT_SPI_FLASH
140	bool "Support SPI flash devices as a backing store for bootcount"
141	depends on DM_SPI_FLASH
142	help
143	  Enabled reading/writing the bootcount in a DM SPI flash device.
144	  The wrapper device is to be specified with the compatible string
145	  'u-boot,bootcount-spi-flash' and the 'spi-flash'-property (a phandle
146	  pointing to the underlying SPI flash device) and an optional 'offset'
147	  property are supported.
148
149config BOOTCOUNT_MEM
150	bool "Support memory based bootcounter"
151	help
152	  Enabling Memory based bootcount, typically in a SoC register which
153	  is not cleared on softreset.
154	  compatible = "u-boot,bootcount";
155
156config DM_BOOTCOUNT_SYSCON
157	bool "Support SYSCON devices as a backing store for bootcount"
158	select REGMAP
159	select SYSCON
160	help
161	  Enable reading/writing the bootcount value in a DM SYSCON device.
162	  The driver supports a fixed 32 bits size register using the native
163	  endianness. However, this can be controlled from the SYSCON DT node
164	  configuration.
165
166	  Accessing the backend is done using the regmap interface.
167
168endmenu
169
170endif
171
172config BOOTCOUNT_BOOTLIMIT
173	int "Maximum number of reboot cycles allowed"
174	default 0
175	help
176	  Set the Maximum number of reboot cycles allowed without the boot
177	  counter being cleared.
178	  If set to 0, do not set a boot limit in the environment.
179
180config SYS_BOOTCOUNT_SINGLEWORD
181	bool "Use single word to pack boot count and magic value"
182	depends on BOOTCOUNT_GENERIC
183	help
184	  This option enables packing boot count magic value and boot count
185	  into single word (32 bits).
186
187config SYS_BOOTCOUNT_EXT_INTERFACE
188	string "Interface on which to find boot counter EXT filesystem"
189	default "mmc"
190	depends on BOOTCOUNT_EXT
191	help
192	  Set the interface to use when locating the filesystem to use for the
193	  boot counter.
194
195config SYS_BOOTCOUNT_EXT_DEVPART
196	string "Partition of the boot counter EXT filesystem"
197	default "0:1"
198	depends on BOOTCOUNT_EXT
199	help
200	  Set the partition to use when locating the filesystem to use for the
201	  boot counter.
202
203config SYS_BOOTCOUNT_EXT_NAME
204	string "Path and filename of the EXT filesystem based boot counter"
205	default "/boot/failures"
206	depends on BOOTCOUNT_EXT
207	help
208	  Set the filename and path of the file used to store the boot counter.
209
210config SYS_BOOTCOUNT_ADDR
211	hex "RAM address used for reading and writing the boot counter"
212	default 0x44E3E000 if BOOTCOUNT_AM33XX || BOOTCOUNT_AM33XX_NVMEM
213	default 0xE0115FF8 if ARCH_LS1043A || ARCH_LS1021A
214	depends on BOOTCOUNT_AM33XX || BOOTCOUNT_GENERIC || BOOTCOUNT_EXT || \
215		   BOOTCOUNT_AM33XX_NVMEM
216	help
217	  Set the address used for reading and writing the boot counter.
218
219config SYS_BOOTCOUNT_MAGIC
220	hex "Magic value for the boot counter"
221	default 0xB001C041 if BOOTCOUNT_GENERIC || BOOTCOUNT_EXT || \
222			      BOOTCOUNT_AM33XX || BOOTCOUNT_ENV || \
223			      BOOTCOUNT_RAM || BOOTCOUNT_AT91 || DM_BOOTCOUNT
224	default 0xB0 if BOOTCOUNT_AM33XX_NVMEM
225	depends on BOOTCOUNT_GENERIC || BOOTCOUNT_EXT || \
226		   BOOTCOUNT_AM33XX || BOOTCOUNT_ENV || \
227		   BOOTCOUNT_RAM || BOOTCOUNT_AT91 || DM_BOOTCOUNT || \
228		   BOOTCOUNT_AM33XX_NVMEM
229	help
230	  Set the magic value used for the boot counter.
231
232choice
233	prompt "Endianness of bootcount accessors"
234	default SYS_BOOTCOUNT_LE
235
236config SYS_BOOTCOUNT_LE
237	bool "Little endian accessors"
238
239config SYS_BOOTCOUNT_BE
240	bool "Big endian accessors"
241
242endchoice
243endif
244