blob: d8f72a37dde15ff68ecaeeee94b2c8fb31fe0dad [file] [log] [blame]
Andrzej Puzdrowski64ad0922017-09-22 11:33:41 +02001# Copyright (c) 2017 Linaro Limited
David Vinczec3084132020-02-18 14:50:47 +01002# Copyright (c) 2020 Arm Limited
Andrzej Puzdrowski64ad0922017-09-22 11:33:41 +02003#
4# SPDX-License-Identifier: Apache-2.0
5#
6
Marti Bolivar0e091c92018-04-12 11:23:16 -04007mainmenu "MCUboot configuration"
Andrzej Puzdrowski64ad0922017-09-22 11:33:41 +02008
Marti Bolivar0e091c92018-04-12 11:23:16 -04009comment "MCUboot-specific configuration options"
Andrzej Puzdrowski64ad0922017-09-22 11:33:41 +020010
Emanuele Di Santo865777d2018-11-08 11:28:15 +010011# Hidden option to mark a project as MCUboot
12config MCUBOOT
13 default y
14 bool
Rajavardhan Gundi07ba28f2018-12-10 15:44:48 +053015 select MPU_ALLOW_FLASH_WRITE if ARM_MPU
Andrzej Puzdrowski23d3c662019-03-18 14:12:22 +010016 select USE_CODE_PARTITION if HAS_FLASH_LOAD_OFFSET
Emanuele Di Santo865777d2018-11-08 11:28:15 +010017
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -040018config BOOT_USE_MBEDTLS
19 bool
20 # Hidden option
21 default n
22 help
23 Use mbedTLS for crypto primitives.
24
25config BOOT_USE_TINYCRYPT
26 bool
27 # Hidden option
28 default n
Sebastian Bøe913a3852019-01-22 13:53:12 +010029 # When building for ECDSA, we use our own copy of mbedTLS, so the
30 # Zephyr one must not be enabled or the MBEDTLS_CONFIG_FILE macros
31 # will collide.
32 depends on ! MBEDTLS
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -040033 help
34 Use TinyCrypt for crypto primitives.
35
Sigvart Hovlandebd05032019-03-21 10:47:32 +010036config BOOT_USE_CC310
37 bool
38 # Hidden option
39 default n
40 # When building for ECDSA, we use our own copy of mbedTLS, so the
41 # Zephyr one must not be enabled or the MBEDTLS_CONFIG_FILE macros
42 # will collide.
43 depends on ! MBEDTLS
44 help
45 Use cc310 for crypto primitives.
46
47config BOOT_USE_NRF_CC310_BL
48 bool
49 default n
50
51config NRFXLIB_CRYPTO
52 bool
53 default n
54
55config NRF_CC310_BL
56 bool
57 default n
58
Andrzej Puzdrowski97543282018-04-12 15:16:56 +020059menu "MCUBoot settings"
60
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -040061choice
62 prompt "Signature type"
63 default BOOT_SIGNATURE_TYPE_RSA
64
65config BOOT_SIGNATURE_TYPE_RSA
66 bool "RSA signatures"
67 select BOOT_USE_MBEDTLS
Marti Bolivara4818a52018-04-12 13:02:38 -040068 select MBEDTLS
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -040069
Fabio Utzig105b59a2019-05-13 15:08:12 -070070if BOOT_SIGNATURE_TYPE_RSA
71config BOOT_SIGNATURE_TYPE_RSA_LEN
72 int "RSA signature length"
73 range 2048 3072
74 default 2048
75endif
76
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -040077config BOOT_SIGNATURE_TYPE_ECDSA_P256
78 bool "Elliptic curve digital signatures with curve P-256"
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -040079
Sigvart Hovlandebd05032019-03-21 10:47:32 +010080if BOOT_SIGNATURE_TYPE_ECDSA_P256
81choice
82 prompt "Ecdsa implementation"
Fabio Utzig34e93a52020-02-03 09:59:53 -030083 default BOOT_ECDSA_TINYCRYPT
84config BOOT_ECDSA_TINYCRYPT
Sigvart Hovlandebd05032019-03-21 10:47:32 +010085 bool "Use tinycrypt"
86 select BOOT_USE_TINYCRYPT
87config BOOT_CC310
88 bool "Use CC310"
89 select BOOT_USE_NRF_CC310_BL if HAS_HW_NRF_CC310
90 select NRF_CC310_BL if HAS_HW_NRF_CC310
91 select NRFXLIB_CRYPTO if SOC_FAMILY_NRF
92 select BOOT_USE_CC310
93endchoice
94endif
Fabio Utzig34e93a52020-02-03 09:59:53 -030095
96config BOOT_SIGNATURE_TYPE_ED25519
97 bool "Edwards curve digital signatures using ed25519"
98
99if BOOT_SIGNATURE_TYPE_ED25519
100choice
101 prompt "Ecdsa implementation"
102 default BOOT_ED25519_TINYCRYPT
103config BOOT_ED25519_TINYCRYPT
104 bool "Use tinycrypt"
105 select BOOT_USE_TINYCRYPT
106config BOOT_ED25519_MBEDTLS
107 bool "Use mbedTLS"
108 select BOOT_USE_MBEDTLS
109 select MBEDTLS
110endchoice
111endif
112
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -0400113endchoice
114
Fabio Utzigc690c762018-04-26 10:51:09 -0300115config BOOT_SIGNATURE_KEY_FILE
116 string "PEM key file"
117 default ""
118 help
119 The key file will be parsed by imgtool's getpub command and a .c source
120 with the public key information will be written in a format expected by
121 MCUboot.
122
Marti Bolivara4818a52018-04-12 13:02:38 -0400123config MBEDTLS_CFG_FILE
124 default "mcuboot-mbedtls-cfg.h"
125
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -0400126config BOOT_VALIDATE_SLOT0
David Vincze2d736ad2019-02-18 11:50:22 +0100127 bool "Validate image in the primary slot on every boot"
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -0400128 default y
129 help
David Vincze2d736ad2019-02-18 11:50:22 +0100130 If y, the bootloader attempts to validate the signature of the
131 primary slot every boot. This adds the signature check time to
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -0400132 every boot, but can mitigate against some changes that are
133 able to modify the flash image itself.
134
135config BOOT_UPGRADE_ONLY
136 bool "Overwrite image updates instead of swapping"
137 default n
138 help
David Vincze2d736ad2019-02-18 11:50:22 +0100139 If y, overwrite the primary slot with the upgrade image instead
140 of swapping them. This prevents the fallback recovery, but
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -0400141 uses a much simpler code path.
142
Fabio Utzigc58842e2019-11-28 10:30:01 -0300143config BOOT_SWAP_USING_MOVE
Fabio Utzigdd2b6802020-01-06 09:10:45 -0300144 bool "Swap mode that can run without a scratch partition"
Håkon Øye Amundsen09be7832020-01-24 14:34:49 +0000145 default y if SOC_FAMILY_NRF
Fabio Utzigc58842e2019-11-28 10:30:01 -0300146 default n
147 help
148 If y, the swap upgrade is done in two steps, where first every
149 sector of the primary slot is moved up one sector, then for
150 each sector X in the secondary slot, it is moved to index X in
151 the primary slot, then the sector at X+1 in the primary is
152 moved to index X in the secondary.
153 This allows a swap upgrade without using a scratch partition,
154 but is currently limited to all sectors in both slots being of
155 the same size.
156
Fabio Utzigd0533ed2018-12-19 07:56:33 -0200157config BOOT_BOOTSTRAP
Sam Bristowd0ca0ff2019-10-30 20:51:35 +1300158 bool "Bootstrap erased the primary slot from the secondary slot"
Fabio Utzigd0533ed2018-12-19 07:56:33 -0200159 default n
160 help
161 If y, enables bootstraping support. Bootstrapping allows an erased
David Vincze2d736ad2019-02-18 11:50:22 +0100162 primary slot to be initialized from a valid image in the secondary slot.
Fabio Utzigd0533ed2018-12-19 07:56:33 -0200163 If unsure, leave at the default value.
164
Fabio Utzigca8ead22019-12-20 07:06:04 -0300165config BOOT_SWAP_SAVE_ENCTLV
166 bool "Save encrypted key TLVs instead of plaintext keys in swap metadata"
167 default n
168 help
169 If y, instead of saving the encrypted image keys in plaintext in the
170 swap resume metadata, save the encrypted image TLVs. This should be used
171 when there is no security mechanism protecting the data in the primary
172 slot from being dumped. If n is selected (default), the keys are written
173 after being decrypted from the image TLVs and could be read by an
174 attacker who has access to the flash contents of the primary slot (eg
175 JTAG/SWD or primary slot in external flash).
176 If unsure, leave at the default value.
177
Fabio Utzig5fe874c2018-08-31 07:41:50 -0300178config BOOT_ENCRYPT_RSA
Fabio Utzig42cc29a2019-11-05 07:54:41 -0300179 bool "Support for encrypted upgrade images using RSA"
Fabio Utzig5fe874c2018-08-31 07:41:50 -0300180 default n
181 help
David Vincze2d736ad2019-02-18 11:50:22 +0100182 If y, images in the secondary slot can be encrypted and are decrypted
183 on the fly when upgrading to the primary slot, as well as encrypted
Fabio Utzig42cc29a2019-11-05 07:54:41 -0300184 back when swapping from the primary slot to the secondary slot. The
185 encryption mechanism used in this case is RSA-OAEP (2048 bits).
186
187config BOOT_ENCRYPT_EC256
188 bool "Support for encrypted upgrade images using ECIES-P256"
189 default n
190 help
191 If y, images in the secondary slot can be encrypted and are decrypted
192 on the fly when upgrading to the primary slot, as well as encrypted
193 back when swapping from the primary slot to the secondary slot. The
194 encryption mechanism used in this case is ECIES using primitives
195 described under "ECIES-P256 encryption" in docs/encrypted_images.md.
Fabio Utzig5fe874c2018-08-31 07:41:50 -0300196
Marti Bolivar0e091c92018-04-12 11:23:16 -0400197config BOOT_MAX_IMG_SECTORS
198 int "Maximum number of sectors per image slot"
199 default 128
200 help
201 This option controls the maximum number of sectors that each of
202 the two image areas can contain. Smaller values reduce MCUboot's
203 memory usage; larger values allow it to support larger images.
204 If unsure, leave at the default value.
205
Emanuele Di Santo205c8c62018-07-20 11:42:31 +0200206config BOOT_ERASE_PROGRESSIVELY
207 bool "Erase flash progressively when receiving new firmware"
208 default y if SOC_NRF52840
209 help
210 If enabled, flash is erased as necessary when receiving new firmware,
211 instead of erasing the whole image slot at once. This is necessary
212 on some hardware that has long erase times, to prevent long wait
213 times at the beginning of the DFU process.
214
Rajavardhan Gundi51c9d702019-02-20 14:08:52 +0530215config BOOT_WAIT_FOR_USB_DFU
216 bool "Wait for a prescribed duration to see if USB DFU is invoked"
217 default n
218 select USB
219 select USB_DFU_CLASS
220 select IMG_MANAGER
221 help
222 If y, MCUboot waits for a prescribed duration of time to allow
223 for USB DFU to be invoked. Please note DFU always updates the
224 slot1 image.
225
Marti Bolivarbc2fa4e2018-04-12 12:18:32 -0400226config ZEPHYR_TRY_MASS_ERASE
227 bool "Try to mass erase flash when flashing MCUboot image"
228 default y
229 help
230 If y, attempt to configure the Zephyr build system's "flash"
231 target to mass-erase the flash device before flashing the
232 MCUboot image. This ensures the scratch and other partitions
233 are in a consistent state.
234
235 This is not available for all targets.
236
David Brownf6d14c22019-12-10 15:36:36 -0700237config BOOT_USE_BENCH
238 bool "Enable benchmark code"
239 default n
240 help
241 If y, adds support for simple benchmarking that can record
242 time intervals between two calls. The time printed depends
243 on the particular Zephyr target, and is generally ticks of a
244 specific board-specific timer.
245
Michael Scott74ceae52019-02-01 14:01:09 -0800246module = MCUBOOT
Piotr Mienkowski15aa6ef2019-04-08 22:48:15 +0200247module-str = MCUBoot bootloader
Michael Scott74ceae52019-02-01 14:01:09 -0800248source "subsys/logging/Kconfig.template.log_config"
Michael Scott74ceae52019-02-01 14:01:09 -0800249
Marti Bolivar0e091c92018-04-12 11:23:16 -0400250menuconfig MCUBOOT_SERIAL
251 bool "MCUboot serial recovery"
252 default n
253 select REBOOT
Emanuele Di Santo30a92652019-01-16 14:01:08 +0100254 select GPIO
Marti Bolivar0e091c92018-04-12 11:23:16 -0400255 select SERIAL
Emanuele Di Santo30a92652019-01-16 14:01:08 +0100256 select UART_INTERRUPT_DRIVEN
Marti Bolivar0e091c92018-04-12 11:23:16 -0400257 select BASE64
258 select TINYCBOR
259 help
260 If y, enables a serial-port based update mode. This allows
261 MCUboot itself to load update images into flash over a UART.
262 If unsure, leave at the default value.
263
264if MCUBOOT_SERIAL
265
Emanuele Di Santoc4bf7802018-07-20 11:39:57 +0200266choice
267 prompt "Serial device"
268 default BOOT_SERIAL_UART if !BOARD_NRF52840_PCA10059
269 default BOOT_SERIAL_CDC_ACM if BOARD_NRF52840_PCA10059
270
271config BOOT_SERIAL_UART
272 bool "UART"
273 # SERIAL and UART_INTERRUPT_DRIVEN already selected
274
275config BOOT_SERIAL_CDC_ACM
276 bool "CDC ACM"
277 select USB
278 select USB_DEVICE_STACK
279 select USB_CDC_ACM
280
281endchoice
282
Marti Bolivar0e091c92018-04-12 11:23:16 -0400283config BOOT_MAX_LINE_INPUT_LEN
284 int "Maximum command line length"
285 default 512
286 help
287 Maximum length of commands transported over the serial port.
288
289config BOOT_SERIAL_DETECT_PORT
290 string "GPIO device to trigger serial recovery mode"
291 default GPIO_0 if SOC_FAMILY_NRF
292 help
293 Zephyr GPIO device which contains the pin used to trigger
294 serial recovery mode.
295
296config BOOT_SERIAL_DETECT_PIN
297 int "Pin to trigger serial recovery mode"
Andreas Vibeto704b8ba2019-04-25 10:51:23 +0200298 default 6 if BOARD_NRF9160_PCA10090
Marti Bolivar0e091c92018-04-12 11:23:16 -0400299 default 11 if BOARD_NRF52840_PCA10056
300 default 13 if BOARD_NRF52_PCA10040
Håkon Øye Amundsen6fc25952020-01-02 15:15:42 +0000301 default 23 if BOARD_NRF5340_DK_NRF5340_CPUAPP || BOARD_NRF5340_DK_NRF5340_CPUAPPNS
Marti Bolivar0e091c92018-04-12 11:23:16 -0400302 help
303 Pin on the serial detect port which triggers serial recovery mode.
304
305config BOOT_SERIAL_DETECT_PIN_VAL
306 int "Serial detect pin trigger value"
307 default 0
308 range 0 1
309 help
310 Logic value of the detect pin which triggers serial recovery
311 mode.
312
Andrzej Puzdrowskif0004802019-10-01 14:13:35 +0200313# Workaround for not being able to have commas in macro arguments
314DT_CHOSEN_Z_CONSOLE := zephyr,console
315
316config RECOVERY_UART_DEV_NAME
317 string "UART Device Name for Recovery UART"
318 default "$(dt_chosen_label,$(DT_CHOSEN_Z_CONSOLE))" if HAS_DTS
319 default "UART_0"
320 depends on BOOT_SERIAL_UART
321 help
322 This option specifies the name of UART device to be used for
323 serial recovery.
324
Marti Bolivar0e091c92018-04-12 11:23:16 -0400325endif # MCUBOOT_SERIAL
Andrzej Puzdrowski64ad0922017-09-22 11:33:41 +0200326
Andrzej Puzdrowski97543282018-04-12 15:16:56 +0200327endmenu
328
Carles Cufi84ede582018-01-29 15:12:00 +0100329config MCUBOOT_DEVICE_SETTINGS
330 # Hidden selector for device-specific settings
331 bool
332 default y
333 # CPU options
334 select MCUBOOT_DEVICE_CPU_CORTEX_M0 if CPU_CORTEX_M0
Carles Cufi67c792e2018-01-29 15:14:31 +0100335 # Enable flash page layout if available
336 select FLASH_PAGE_LAYOUT if FLASH_HAS_PAGE_LAYOUT
Andrzej Puzdrowskib788c712018-04-12 12:42:49 +0200337 # Enable flash_map module as flash I/O back-end
338 select FLASH_MAP
Carles Cufi84ede582018-01-29 15:12:00 +0100339
340config MCUBOOT_DEVICE_CPU_CORTEX_M0
341 # Hidden selector for Cortex-M0 settings
342 bool
343 default n
344 select SW_VECTOR_RELAY if !CPU_CORTEX_M0_HAS_VECTOR_TABLE_REMAP
345
Marti Bolivar0e091c92018-04-12 11:23:16 -0400346comment "Zephyr configuration options"
Andrzej Puzdrowski64ad0922017-09-22 11:33:41 +0200347
Marti Bolivarf84cc4b2019-08-20 16:06:56 -0700348# Disabling MULTITHREADING provides a code size advantage, but
349# it requires peripheral drivers (particularly a flash driver)
350# that works properly with the option enabled.
351#
352# If you know for sure that your hardware will work, you can default
353# it to n here. Otherwise, having it on by default makes the most
354# hardware work.
355config MULTITHREADING
Andrzej Puzdrowski9a4946c2020-02-20 12:39:12 +0100356 default y if BOOT_SERIAL_CDC_ACM #usb driver requires MULTITHREADING
Marti Bolivarf84cc4b2019-08-20 16:06:56 -0700357 default n if SOC_FAMILY_NRF
358 default y
359
Andrzej Puzdrowski9a4946c2020-02-20 12:39:12 +0100360config LOG_IMMEDIATE
361 default n if MULTITHREADING
362
Håkon Øye Amundsen954dd2b2019-09-23 09:24:13 +0000363config UPDATEABLE_IMAGE_NUMBER
364 int "Number of updateable images"
365 default 1
366 help
367 Enables support of multi image update.
368
David Vinczec3084132020-02-18 14:50:47 +0100369choice
370 prompt "Downgrade prevention"
371 optional
372
Håkon Øye Amundsen2d1bac12020-01-03 13:08:09 +0000373config MCUBOOT_DOWNGRADE_PREVENTION
David Vinczec3084132020-02-18 14:50:47 +0100374 bool "SW based downgrade prevention"
Håkon Øye Amundsen2d1bac12020-01-03 13:08:09 +0000375 depends on BOOT_UPGRADE_ONLY
376 help
377 Prevent downgrades by enforcing incrementing version numbers.
378 When this option is set, any upgrade must have greater major version
379 or greater minor version with equal major version. This mechanism
380 only protects against some attacks against version downgrades (for
381 example, a JTAG could be used to write an older version).
382
David Vinczec3084132020-02-18 14:50:47 +0100383config MCUBOOT_HW_DOWNGRADE_PREVENTION
384 bool "HW based downgrade prevention"
385 help
386 Prevent undesirable/malicious software downgrades. When this option is
387 set, any upgrade must have greater or equal security counter value.
388 Because of the acceptance of equal values it allows for software
389 downgrade to some extent.
390
391endchoice
392
Robert Lubos1b19d2a2020-01-31 14:05:35 +0100393source "Kconfig.zephyr"