1# Copyright (c) 2017-2020 Linaro Limited
2# Copyright (c) 2020 Arm Limited
3# Copyright (c) 2017-2023 Nordic Semiconductor ASA
4#
5# SPDX-License-Identifier: Apache-2.0
6
7menuconfig MCUBOOT_SERIAL
8	bool "MCUboot serial recovery"
9	default n
10	select REBOOT
11	select SERIAL
12	select UART_INTERRUPT_DRIVEN
13	select BASE64
14	select CRC
15	select ZCBOR
16	depends on !BOOT_FIRMWARE_LOADER
17	help
18	  If y, enables a serial-port based update mode. This allows
19	  MCUboot itself to load update images into flash over a UART.
20	  If unsure, leave at the default value.
21
22if MCUBOOT_SERIAL
23
24choice BOOT_SERIAL_DEVICE
25	prompt "Serial device"
26	default BOOT_SERIAL_UART if !BOARD_NRF52840DONGLE_NRF52840
27	default BOOT_SERIAL_CDC_ACM if BOARD_NRF52840DONGLE_NRF52840
28
29config BOOT_SERIAL_UART
30	bool "UART"
31	# SERIAL and UART_INTERRUPT_DRIVEN already selected
32	help
33	  The serial device to use will be fist selected via chosen
34	  node "zephyr,uart-mcumgr", when such node does not exist
35	  the "zephyr,console" is used.  In case when
36	  the "zephyr,uart-mcumgr" points to the same device as
37	  the "zephyr,console" compilation error will be triggered.
38
39config BOOT_SERIAL_CDC_ACM
40	bool "CDC ACM"
41	select USB_DEVICE_STACK
42	help
43	  This setting will choose CDC ACM for serial recovery unless chosen
44	  "zephyr,uart-mcumgr" is present, in which case the chosen takes
45	  precedence and redirects serial recovery to uart pointed by
46	  the chosen, leaving console on CDC ACM.
47
48endchoice
49
50config MCUBOOT_SERIAL_DIRECT_IMAGE_UPLOAD
51	bool "Allow to select image number for DFU"
52	depends on !SINGLE_APPLICATION_SLOT
53	help
54	  With the option enabled, the mcuboot serial recovery will
55	  respect the "image" field in mcumgr image update frame
56	  header.
57	  The mapping of image number to partition is as follows:
58	    0 -> default behaviour, same as 1;
59	    1 -> image-0 (primary slot of the first image);
60	    2 -> image-1 (secondary slot of the first image);
61	    3 -> image-2;
62	    4 -> image-3.
63	  Note that 0 is default upload target when no explicit
64	  selection is done.
65
66config BOOT_SERIAL_UNALIGNED_BUFFER_SIZE
67	int "Stack buffer for unaligned memory writes"
68	default 64
69	range 0 128
70	help
71	  Specifies the stack usage for a buffer which is used for unaligned
72	  memory access when data is written to a device with memory alignment
73	  requirements. Set to 0 to disable.
74
75config BOOT_MAX_LINE_INPUT_LEN
76	int "Maximum input line length"
77	default 128
78	help
79	  Maximum length of input serial port buffer (SMP serial transport uses
80	  fragments of 128-bytes, this should not need to be changed unless a
81	  different value is used for the transport).
82
83config BOOT_LINE_BUFS
84	int "Number of receive buffers"
85	range 2 128
86	default 8
87	help
88	  Number of receive buffers for data received via the serial port.
89
90config BOOT_SERIAL_MAX_RECEIVE_SIZE
91	int "Maximum command line length"
92	default 1024
93	help
94	  Maximum length of received commands via the serial port (this should
95	  be equal to the maximum line length, BOOT_MAX_LINE_INPUT_LEN times
96	  by the number of receive buffers, BOOT_LINE_BUFS to allow for
97	  optimal data transfer speeds).
98
99config BOOT_ERASE_PROGRESSIVELY
100	bool "Erase flash progressively when receiving new firmware"
101	default y if SOC_FAMILY_NRF
102	help
103	 If enabled, flash is erased as necessary when receiving new firmware,
104	 instead of erasing the whole image slot at once. This is necessary
105	 on some hardware that has long erase times, to prevent long wait
106	 times at the beginning of the DFU process.
107
108config BOOT_MGMT_ECHO
109	bool "Enable echo command"
110	help
111	  if enabled, support for the mcumgr echo command is being added.
112
113menuconfig ENABLE_MGMT_PERUSER
114	bool "Enable system specific mcumgr commands"
115	help
116	  The option enables processing of system specific mcumgr commands;
117	  system specific commands are within group MGMT_GROUP_ID_PERUSER (64)
118	  and above, as defined within mcumgr library.
119	  These are system specific command and system specific implementation
120	  function is required to process these commands.
121
122if ENABLE_MGMT_PERUSER
123
124config BOOT_MGMT_CUSTOM_STORAGE_ERASE
125	bool "Enable storage erase command"
126	help
127	  The option enables mcumgr command that allows to erase storage
128	  partition.
129	  Note that the storage partition needs to be defined, in DTS, otherwise
130	  enabling the option will cause a compilation to fail.
131
132endif # ENABLE_MGMT_PERUSER
133
134menu "Entrance methods"
135
136menuconfig BOOT_SERIAL_ENTRANCE_GPIO
137	bool "GPIO"
138	default y
139	depends on GPIO
140	help
141	  Use a GPIO to enter serial recovery mode.
142
143config BOOT_SERIAL_DETECT_DELAY
144	int "Serial detect pin detection delay time [ms]"
145	default 0
146	depends on BOOT_SERIAL_ENTRANCE_GPIO
147	help
148	  Used to prevent the bootloader from loading on button press.
149	  Useful for powering on when using the same button as
150	  the one used to place the device in bootloader mode.
151
152menuconfig BOOT_SERIAL_WAIT_FOR_DFU
153	bool "Wait a prescribed duration to see if DFU is invoked by receiving a MCUmgr comand"
154	depends on BOOT_SERIAL_UART || BOOT_SERIAL_CDC_ACM
155	help
156	  If y, MCUboot waits for a prescribed duration of time to allow
157	  for DFU to be invoked. The serial recovery can be entered by receiving any
158	  mcumgr command.
159
160config BOOT_SERIAL_WAIT_FOR_DFU_TIMEOUT
161	int "Duration to wait for the serial DFU timeout in ms"
162	default 500
163	depends on BOOT_SERIAL_WAIT_FOR_DFU
164	help
165	  Timeout in ms for MCUboot to wait to allow for DFU to be invoked.
166
167config BOOT_SERIAL_BOOT_MODE
168	bool "Check boot mode via retention subsystem"
169	depends on RETENTION_BOOT_MODE
170	help
171	  Allows for entering serial recovery mode by using Zephyr's boot mode
172	  retention system (i.e. an application must set the boot mode to stay
173	  in serial recovery mode and reboot the module).
174
175config BOOT_SERIAL_NO_APPLICATION
176	bool "Stay in bootloader if no application"
177	help
178	  Allows for entering serial recovery mode if there is no bootable
179	  application that the bootloader can jump to.
180
181config BOOT_SERIAL_PIN_RESET
182	bool "Check for device reset by pin"
183	select HWINFO
184	help
185	  Checks if the module reset was caused by the reset pin and will
186	  remain in bootloader serial recovery mode if it was.
187
188endmenu
189
190config BOOT_SERIAL_IMG_GRP_HASH
191	bool "Image list hash support"
192	default y
193	help
194	  If y, image list responses will include the image hash (adds ~100
195	  bytes of flash).
196
197config BOOT_SERIAL_IMG_GRP_IMAGE_STATE
198	bool "Image state support"
199	depends on !SINGLE_APPLICATION_SLOT
200	select BOOT_SERIAL_IMG_GRP_HASH if UPDATEABLE_IMAGE_NUMBER > 1
201	help
202	  If y, image states will be included with image lists and the set
203	  state command can be used to mark an image as test/confirmed.
204
205endif # MCUBOOT_SERIAL
206