diff --git a/modules/mcuboot/boot/zephyr/Kconfig b/modules/mcuboot/boot/zephyr/Kconfig index 054680802f62..c088411d1fc8 100644 --- a/modules/mcuboot/boot/zephyr/Kconfig +++ b/modules/mcuboot/boot/zephyr/Kconfig @@ -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 diff --git a/subsys/Kconfig b/subsys/Kconfig index b17cb90fd3ac..37be60487f97 100644 --- a/subsys/Kconfig +++ b/subsys/Kconfig @@ -42,4 +42,5 @@ rsource "sdfw_services/Kconfig" rsource "suit/Kconfig" rsource "dult/Kconfig" rsource "nrf_compress/Kconfig" +rsource "mcuboot_ids/Kconfig" endmenu diff --git a/subsys/mcuboot_ids/Kconfig b/subsys/mcuboot_ids/Kconfig new file mode 100644 index 000000000000..658108e3e2db --- /dev/null +++ b/subsys/mcuboot_ids/Kconfig @@ -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 diff --git a/sysbuild/CMakeLists.txt b/sysbuild/CMakeLists.txt index 48db9417867f..34ef6ef61a78 100644 --- a/sysbuild/CMakeLists.txt +++ b/sysbuild/CMakeLists.txt @@ -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") @@ -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) diff --git a/sysbuild/Kconfig.mcuboot b/sysbuild/Kconfig.mcuboot index 9af7b1d4e62a..0ee2f673a0b1 100644 --- a/sysbuild/Kconfig.mcuboot +++ b/sysbuild/Kconfig.mcuboot @@ -70,6 +70,14 @@ 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 @@ -77,20 +85,38 @@ config MCUBOOT_MIN_UPDATEABLE_IMAGES 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"