Skip to content

Commit 4528054

Browse files
nordicjmcarlescufi
authored andcommitted
sysbuild: Add support for sysbuild-assigned MCUboot image IDs
Adds support for MCUboot to assign IDs to which images are which in MCUboot, which applications can also use Signed-off-by: Jamie McCrae <[email protected]>
1 parent d991c90 commit 4528054

File tree

5 files changed

+78
-6
lines changed

5 files changed

+78
-6
lines changed

modules/mcuboot/boot/zephyr/Kconfig

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,10 @@ config BOOT_ERASE_PROGRESSIVELY
103103

104104
config BOOT_IMAGE_ACCESS_HOOKS
105105
bool
106-
default y if UPDATEABLE_IMAGE_NUMBER > 1 && SOC_NRF5340_CPUAPP && PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY
106+
# Child/parent check
107+
default y if UPDATEABLE_IMAGE_NUMBER > 1 && SOC_NRF5340_CPUAPP && PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY && MCUBOOT_APPLICATION_IMAGE_NUMBER = -1
108+
# Sysbuild check
109+
default y if MCUBOOT_NETWORK_CORE_IMAGE_NUMBER != -1
107110
depends on MCUBOOT
108111

109112
config BOOT_IMAGE_ACCESS_HOOK_NRF5340

subsys/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,5 @@ rsource "sdfw_services/Kconfig"
4242
rsource "suit/Kconfig"
4343
rsource "dult/Kconfig"
4444
rsource "nrf_compress/Kconfig"
45+
rsource "mcuboot_ids/Kconfig"
4546
endmenu

subsys/mcuboot_ids/Kconfig

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#
2+
# Copyright (c) 2024 Nordic Semiconductor ASA
3+
#
4+
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
5+
#
6+
7+
menu "MCUboot IDs (informative only, do not change)"
8+
9+
config MCUBOOT_APPLICATION_IMAGE_NUMBER
10+
int "Application image number (informative only, do not change)"
11+
default -1
12+
13+
config MCUBOOT_NETWORK_CORE_IMAGE_NUMBER
14+
int "Netcore core image number (informative only, do not change)"
15+
default -1
16+
17+
config MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER
18+
int "WiFi patches image number (informative only, do not change)"
19+
default -1
20+
21+
config MCUBOOT_QSPI_XIP_IMAGE_NUMBER
22+
int "QSPI XIP image number (informative only, do not change)"
23+
default -1
24+
25+
config MCUBOOT_MCUBOOT_IMAGE_NUMBER
26+
int "MCUboot (S0/S1) image number (informative only, do not change)"
27+
depends on MCUBOOT
28+
default -1
29+
30+
endmenu

sysbuild/CMakeLists.txt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,9 @@ function(${SYSBUILD_CURRENT_MODULE_NAME}_pre_cmake)
172172
endif()
173173
endif()
174174

175-
set_property(TARGET mcuboot APPEND_STRING PROPERTY CONFIG "CONFIG_UPDATEABLE_IMAGE_NUMBER=${SB_CONFIG_MCUBOOT_UPDATEABLE_IMAGES}\n")
175+
math(EXPR mcuboot_total_images "${SB_CONFIG_MCUBOOT_UPDATEABLE_IMAGES} + ${SB_CONFIG_MCUBOOT_ADDITIONAL_UPDATEABLE_IMAGES}")
176+
177+
set_property(TARGET mcuboot APPEND_STRING PROPERTY CONFIG "CONFIG_UPDATEABLE_IMAGE_NUMBER=${mcuboot_total_images}\n")
176178

177179
if(SB_CONFIG_MCUBOOT_APP_SYNC_UPDATEABLE_IMAGES)
178180
set_property(TARGET ${DEFAULT_IMAGE} APPEND_STRING PROPERTY CONFIG "CONFIG_UPDATEABLE_IMAGE_NUMBER=${SB_CONFIG_MCUBOOT_UPDATEABLE_IMAGES}\n")
@@ -315,6 +317,18 @@ function(${SYSBUILD_CURRENT_MODULE_NAME}_pre_cmake)
315317
if(SB_CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY)
316318
add_overlay_config(mcuboot ${ZEPHYR_NRF_MODULE_DIR}/subsys/partition_manager/ext_flash_mcuboot_secondary.conf)
317319
endif()
320+
321+
# Provide MCUboot image IDs to main application and MCUboot
322+
set_property(TARGET mcuboot APPEND_STRING PROPERTY CONFIG "CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER=${SB_CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER}\n")
323+
set_property(TARGET mcuboot APPEND_STRING PROPERTY CONFIG "CONFIG_MCUBOOT_NETWORK_CORE_IMAGE_NUMBER=${SB_CONFIG_MCUBOOT_NETWORK_CORE_IMAGE_NUMBER}\n")
324+
set_property(TARGET mcuboot APPEND_STRING PROPERTY CONFIG "CONFIG_MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER=${SB_CONFIG_MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER}\n")
325+
set_property(TARGET mcuboot APPEND_STRING PROPERTY CONFIG "CONFIG_MCUBOOT_QSPI_XIP_IMAGE_NUMBER=${SB_CONFIG_MCUBOOT_QSPI_XIP_IMAGE_NUMBER}\n")
326+
set_property(TARGET mcuboot APPEND_STRING PROPERTY CONFIG "CONFIG_MCUBOOT_MCUBOOT_IMAGE_NUMBER=${SB_CONFIG_MCUBOOT_MCUBOOT_IMAGE_NUMBER}\n")
327+
328+
set_property(TARGET ${DEFAULT_IMAGE} APPEND_STRING PROPERTY CONFIG "CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER=${SB_CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER}\n")
329+
set_property(TARGET ${DEFAULT_IMAGE} APPEND_STRING PROPERTY CONFIG "CONFIG_MCUBOOT_NETWORK_CORE_IMAGE_NUMBER=${SB_CONFIG_MCUBOOT_NETWORK_CORE_IMAGE_NUMBER}\n")
330+
set_property(TARGET ${DEFAULT_IMAGE} APPEND_STRING PROPERTY CONFIG "CONFIG_MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER=${SB_CONFIG_MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER}\n")
331+
set_property(TARGET ${DEFAULT_IMAGE} APPEND_STRING PROPERTY CONFIG "CONFIG_MCUBOOT_QSPI_XIP_IMAGE_NUMBER=${SB_CONFIG_MCUBOOT_QSPI_XIP_IMAGE_NUMBER}\n")
318332
endif()
319333

320334
if(SB_CONFIG_MCUBOOT_HARDWARE_DOWNGRADE_PREVENTION)

sysbuild/Kconfig.mcuboot

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,27 +79,51 @@ config MCUBOOT_QSPI_XIP_IMAGE_NUMBER
7979
default 1 if QSPI_XIP_SPLIT_IMAGE
8080
default -1
8181

82+
config MCUBOOT_MCUBOOT_IMAGE_NUMBER
83+
int
84+
default 4 if SECURE_BOOT_APPCORE && MCUBOOT_NETWORK_CORE_IMAGE_NUMBER != -1 && MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER != -1 && MCUBOOT_QSPI_XIP_IMAGE_NUMBER != 1
85+
default 3 if SECURE_BOOT_APPCORE && ((MCUBOOT_QSPI_XIP_IMAGE_NUMBER != -1 && (MCUBOOT_NETWORK_CORE_IMAGE_NUMBER != -1 || MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER != -1)) || (MCUBOOT_NETWORK_CORE_IMAGE_NUMBER != -1 && MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER != -1))
86+
default 2 if SECURE_BOOT_APPCORE && (MCUBOOT_NETWORK_CORE_IMAGE_NUMBER != -1 || MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER != -1 || MCUBOOT_QSPI_XIP_IMAGE_NUMBER != -1)
87+
default 1 if SECURE_BOOT_APPCORE
88+
default -1
89+
8290
config MCUBOOT_MIN_UPDATEABLE_IMAGES
8391
int
8492
default 4 if MCUBOOT_NETWORK_CORE_IMAGE_NUMBER != -1 && MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER != -1 && MCUBOOT_QSPI_XIP_IMAGE_NUMBER != -1
8593
default 3 if (MCUBOOT_NETWORK_CORE_IMAGE_NUMBER != -1 && MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER != -1) || (MCUBOOT_NETWORK_CORE_IMAGE_NUMBER != -1 && MCUBOOT_QSPI_XIP_IMAGE_NUMBER != -1) || (MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER != -1 && MCUBOOT_QSPI_XIP_IMAGE_NUMBER != -1)
8694
default 2 if MCUBOOT_NETWORK_CORE_IMAGE_NUMBER != -1 || MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER != -1 || MCUBOOT_QSPI_XIP_IMAGE_NUMBER != -1
8795
default 1
8896

97+
config MCUBOOT_MIN_ADDITIONAL_UPDATEABLE_IMAGES
98+
int
99+
default 1 if MCUBOOT_MCUBOOT_IMAGE_NUMBER != -1
100+
default 0
101+
89102
config MCUBOOT_UPDATEABLE_IMAGES
90103
int "Updateable images"
91104
range MCUBOOT_MIN_UPDATEABLE_IMAGES MCUBOOT_MAX_UPDATEABLE_IMAGES
92-
default 2 if SOC_SERIES_NRF91X && SECURE_BOOT_APPCORE && (MCUBOOT_MODE_SWAP_WITHOUT_SCRATCH || MCUBOOT_MODE_SWAP_SCRATCH || MCUBOOT_MODE_OVERWRITE_ONLY)
93105
help
94-
The number of images that MCUboot will be built with.
106+
The number of images that MCUboot will be built with. Note that if
107+
``MCUBOOT_ADDITIONAL_UPDATEABLE_IMAGES`` is set to a non-zero value then that value will
108+
be added to the MCUboot updateable image number but not the application, this is to allow
109+
for features like NSIB updates of MCUboot itself.
110+
111+
config MCUBOOT_ADDITIONAL_UPDATEABLE_IMAGES
112+
int "Additional MCUboot-only updateable images"
113+
range MCUBOOT_MIN_ADDITIONAL_UPDATEABLE_IMAGES MCUBOOT_MIN_ADDITIONAL_UPDATEABLE_IMAGES
114+
default MCUBOOT_MIN_ADDITIONAL_UPDATEABLE_IMAGES
115+
help
116+
The number of additional images that MCUboot will be built with.
95117

96118
config MCUBOOT_APP_SYNC_UPDATEABLE_IMAGES
97119
bool "Sync updateable image value to main application"
98-
default n if SOC_SERIES_NRF91X && SECURE_BOOT_APPCORE && (MCUBOOT_MODE_SWAP_WITHOUT_SCRATCH || MCUBOOT_MODE_SWAP_SCRATCH || MCUBOOT_MODE_OVERWRITE_ONLY)
99120
default y
100121
help
101122
If enabled then will synchronise the value of ``MCUBOOT_UPDATEABLE_IMAGES`` to MCUboot
102-
and the main application, if disable then will only set this value to MCUboot
123+
and the main application, if disabled then will only set this value to MCUboot.
124+
125+
Note: ``MCUBOOT_MIN_ADDITIONAL_UPDATEABLE_IMAGES`` will be applied to MCUboot only
126+
irrespective of this option.
103127

104128
config SECURE_BOOT_MCUBOOT_VERSION
105129
string "MCUboot S0/S1 image update version"

0 commit comments

Comments
 (0)