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