Skip to content

Commit

Permalink
sysbuild: Add support for sysbuild-assigned MCUboot image IDs
Browse files Browse the repository at this point in the history
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]>
  • Loading branch information
nordicjm committed Oct 7, 2024
1 parent a4e07f8 commit d140108
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 6 deletions.
5 changes: 4 additions & 1 deletion modules/mcuboot/boot/zephyr/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,10 @@ config BOOT_ERASE_PROGRESSIVELY

config BOOT_IMAGE_ACCESS_HOOKS
bool
default y if UPDATEABLE_IMAGE_NUMBER > 1 && SOC_NRF5340_CPUAPP && PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY
# Child/parent check
default y if UPDATEABLE_IMAGE_NUMBER > 1 && SOC_NRF5340_CPUAPP && PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY && MCUBOOT_APPLICATION_IMAGE_NUMBER = -1
# Sysbuild check
default y if MCUBOOT_NETWORK_CORE_IMAGE_NUMBER != -1
depends on MCUBOOT

config BOOT_IMAGE_ACCESS_HOOK_NRF5340
Expand Down
1 change: 1 addition & 0 deletions subsys/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,5 @@ rsource "sdfw_services/Kconfig"
rsource "suit/Kconfig"
rsource "dult/Kconfig"
rsource "nrf_compress/Kconfig"
rsource "mcuboot_ids/Kconfig"
endmenu
32 changes: 32 additions & 0 deletions subsys/mcuboot_ids/Kconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#
# Copyright (c) 2024 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
#

menu "MCUboot IDs (informative only, do not change)"

config MCUBOOT_APPLICATION_IMAGE_NUMBER
int "Application image number (informative only, do not change)"
default -1

config MCUBOOT_NETWORK_CORE_IMAGE_NUMBER
int "Netcore core image number (informative only, do not change)"
# depends on SOC_NRF5340_CPUAPP
default -1

config MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER
int "WiFi patches image number (informative only, do not change)"
default -1

config MCUBOOT_QSPI_XIP_IMAGE_NUMBER
int "QSPI XIP image number (informative only, do not change)"
# depends on SOC_NRF52840 || SOC_NRF5340_CPUAPP || SOC_SERIES_NRF91X
default -1

config MCUBOOT_MCUBOOT_IMAGE_NUMBER
int "MCUboot (S0/S1) image number (informative only, do not change)"
# depends on MCUBOOT
default -1

endmenu
16 changes: 15 additions & 1 deletion sysbuild/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,9 @@ function(${SYSBUILD_CURRENT_MODULE_NAME}_pre_cmake)
endif()
endif()

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

set_property(TARGET mcuboot APPEND_STRING PROPERTY CONFIG "CONFIG_UPDATEABLE_IMAGE_NUMBER=${mcuboot_total_images}\n")

if(SB_CONFIG_MCUBOOT_APP_SYNC_UPDATEABLE_IMAGES)
set_property(TARGET ${DEFAULT_IMAGE} APPEND_STRING PROPERTY CONFIG "CONFIG_UPDATEABLE_IMAGE_NUMBER=${SB_CONFIG_MCUBOOT_UPDATEABLE_IMAGES}\n")
Expand Down Expand Up @@ -315,6 +317,18 @@ function(${SYSBUILD_CURRENT_MODULE_NAME}_pre_cmake)
if(SB_CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY)
add_overlay_config(mcuboot ${ZEPHYR_NRF_MODULE_DIR}/subsys/partition_manager/ext_flash_mcuboot_secondary.conf)
endif()

# Provide MCUboot image IDs to main application and MCUboot
set_property(TARGET mcuboot APPEND_STRING PROPERTY CONFIG "CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER=${SB_CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER}\n")
set_property(TARGET mcuboot APPEND_STRING PROPERTY CONFIG "CONFIG_MCUBOOT_NETWORK_CORE_IMAGE_NUMBER=${SB_CONFIG_MCUBOOT_NETWORK_CORE_IMAGE_NUMBER}\n")
set_property(TARGET mcuboot APPEND_STRING PROPERTY CONFIG "CONFIG_MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER=${SB_CONFIG_MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER}\n")
set_property(TARGET mcuboot APPEND_STRING PROPERTY CONFIG "CONFIG_MCUBOOT_QSPI_XIP_IMAGE_NUMBER=${SB_CONFIG_MCUBOOT_QSPI_XIP_IMAGE_NUMBER}\n")
set_property(TARGET mcuboot APPEND_STRING PROPERTY CONFIG "CONFIG_MCUBOOT_MCUBOOT_IMAGE_NUMBER=${SB_CONFIG_MCUBOOT_MCUBOOT_IMAGE_NUMBER}\n")

set_property(TARGET ${DEFAULT_IMAGE} APPEND_STRING PROPERTY CONFIG "CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER=${SB_CONFIG_MCUBOOT_APPLICATION_IMAGE_NUMBER}\n")
set_property(TARGET ${DEFAULT_IMAGE} APPEND_STRING PROPERTY CONFIG "CONFIG_MCUBOOT_NETWORK_CORE_IMAGE_NUMBER=${SB_CONFIG_MCUBOOT_NETWORK_CORE_IMAGE_NUMBER}\n")
set_property(TARGET ${DEFAULT_IMAGE} APPEND_STRING PROPERTY CONFIG "CONFIG_MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER=${SB_CONFIG_MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER}\n")
set_property(TARGET ${DEFAULT_IMAGE} APPEND_STRING PROPERTY CONFIG "CONFIG_MCUBOOT_QSPI_XIP_IMAGE_NUMBER=${SB_CONFIG_MCUBOOT_QSPI_XIP_IMAGE_NUMBER}\n")
endif()

if(SB_CONFIG_MCUBOOT_HARDWARE_DOWNGRADE_PREVENTION)
Expand Down
34 changes: 30 additions & 4 deletions sysbuild/Kconfig.mcuboot
Original file line number Diff line number Diff line change
Expand Up @@ -70,27 +70,53 @@ config MCUBOOT_QSPI_XIP_IMAGE_NUMBER
default 1 if QSPI_XIP_SPLIT_IMAGE
default -1

config MCUBOOT_MCUBOOT_IMAGE_NUMBER
int
default 4 if SECURE_BOOT_APPCORE && MCUBOOT_NETWORK_CORE_IMAGE_NUMBER != -1 && MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER != -1 && MCUBOOT_QSPI_XIP_IMAGE_NUMBER != 1
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))
default 2 if SECURE_BOOT_APPCORE && (MCUBOOT_NETWORK_CORE_IMAGE_NUMBER != -1 || MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER != -1 || MCUBOOT_QSPI_XIP_IMAGE_NUMBER != -1)
default 1 if SECURE_BOOT_APPCORE
default -1

config MCUBOOT_MIN_UPDATEABLE_IMAGES
int
default 4 if MCUBOOT_NETWORK_CORE_IMAGE_NUMBER != -1 && MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER != -1 && MCUBOOT_QSPI_XIP_IMAGE_NUMBER != -1
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)
default 2 if MCUBOOT_NETWORK_CORE_IMAGE_NUMBER != -1 || MCUBOOT_WIFI_PATCHES_IMAGE_NUMBER != -1 || MCUBOOT_QSPI_XIP_IMAGE_NUMBER != -1
default 1

config MCUBOOT_MIN_ADDITIONAL_UPDATEABLE_IMAGES
int
default 1 if MCUBOOT_MCUBOOT_IMAGE_NUMBER != -1
default 0

config MCUBOOT_UPDATEABLE_IMAGES
int "Updateable images"
range MCUBOOT_MIN_UPDATEABLE_IMAGES MCUBOOT_MAX_UPDATEABLE_IMAGES
default 2 if SOC_SERIES_NRF91X && SECURE_BOOT_APPCORE && (MCUBOOT_MODE_SWAP_WITHOUT_SCRATCH || MCUBOOT_MODE_SWAP_SCRATCH || MCUBOOT_MODE_OVERWRITE_ONLY)
# default 2 if SOC_SERIES_NRF91X && SECURE_BOOT_APPCORE && (MCUBOOT_MODE_SWAP_WITHOUT_SCRATCH || MCUBOOT_MODE_SWAP_SCRATCH || MCUBOOT_MODE_OVERWRITE_ONLY)
help
The number of images that MCUboot will be built with.
The number of images that MCUboot will be built with. Note that if
``MCUBOOT_ADDITIONAL_UPDATEABLE_IMAGES`` is set to a non-zero value then that value will
be added to the MCUboot updateable image number but not the application, this is to allow
for features like NSIB updates of MCUboot itself.

config MCUBOOT_ADDITIONAL_UPDATEABLE_IMAGES
int "Additional MCUboot-only updateable images"
range MCUBOOT_MIN_ADDITIONAL_UPDATEABLE_IMAGES MCUBOOT_MIN_ADDITIONAL_UPDATEABLE_IMAGES
default MCUBOOT_MIN_ADDITIONAL_UPDATEABLE_IMAGES
help
The number of additional images that MCUboot will be built with.

config MCUBOOT_APP_SYNC_UPDATEABLE_IMAGES
bool "Sync updateable image value to main application"
default n if SOC_SERIES_NRF91X && SECURE_BOOT_APPCORE && (MCUBOOT_MODE_SWAP_WITHOUT_SCRATCH || MCUBOOT_MODE_SWAP_SCRATCH || MCUBOOT_MODE_OVERWRITE_ONLY)
# default n if SOC_SERIES_NRF91X && SECURE_BOOT_APPCORE && (MCUBOOT_MODE_SWAP_WITHOUT_SCRATCH || MCUBOOT_MODE_SWAP_SCRATCH || MCUBOOT_MODE_OVERWRITE_ONLY)
default y
help
If enabled then will synchronise the value of ``MCUBOOT_UPDATEABLE_IMAGES`` to MCUboot
and the main application, if disable then will only set this value to MCUboot
and the main application, if disabled then will only set this value to MCUboot.

Note: ``MCUBOOT_MIN_ADDITIONAL_UPDATEABLE_IMAGES`` will be applied to MCUboot only
irrespective of this option.

config SECURE_BOOT_MCUBOOT_VERSION
string "MCUboot S0/S1 image update version"
Expand Down

0 comments on commit d140108

Please sign in to comment.