From f33fd44c6aafb94be3410e14dfc98f30fd8d8e7c Mon Sep 17 00:00:00 2001 From: Jamie McCrae Date: Tue, 26 Aug 2025 14:16:34 +0100 Subject: [PATCH 1/5] boards: nordic: bm_nrf54l15dk: Select SoftDevice Kconfig Now selects the SoftDevice Kconfig for all board targets rather than just the MCUboot board variants Signed-off-by: Jamie McCrae --- boards/nordic/bm_nrf54l15dk/Kconfig.sysbuild | 22 ++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/boards/nordic/bm_nrf54l15dk/Kconfig.sysbuild b/boards/nordic/bm_nrf54l15dk/Kconfig.sysbuild index 92227764b2..fe89bff61c 100644 --- a/boards/nordic/bm_nrf54l15dk/Kconfig.sysbuild +++ b/boards/nordic/bm_nrf54l15dk/Kconfig.sysbuild @@ -7,6 +7,17 @@ config PARTITION_MANAGER default n +if BOARD_BM_NRF54L15DK_NRF54L05_CPUAPP_S115_SOFTDEVICE || \ + BOARD_BM_NRF54L15DK_NRF54L10_CPUAPP_S115_SOFTDEVICE || \ + BOARD_BM_NRF54L15DK_NRF54L15_CPUAPP_S115_SOFTDEVICE || \ + BOARD_BM_NRF54L15DK_NRF54L05_CPUAPP_S115_SOFTDEVICE_MCUBOOT || \ + BOARD_BM_NRF54L15DK_NRF54L10_CPUAPP_S115_SOFTDEVICE_MCUBOOT || \ + BOARD_BM_NRF54L15DK_NRF54L15_CPUAPP_S115_SOFTDEVICE_MCUBOOT + +choice SOFTDEVICE_SELECTION + default SOFTDEVICE_S115 +endchoice + if BOARD_BM_NRF54L15DK_NRF54L05_CPUAPP_S115_SOFTDEVICE_MCUBOOT || \ BOARD_BM_NRF54L15DK_NRF54L10_CPUAPP_S115_SOFTDEVICE_MCUBOOT || \ BOARD_BM_NRF54L15DK_NRF54L15_CPUAPP_S115_SOFTDEVICE_MCUBOOT @@ -15,10 +26,6 @@ choice BM_BOOTLOADER default BM_BOOTLOADER_MCUBOOT endchoice -choice SOFTDEVICE_SELECTION - default SOFTDEVICE_S115 -endchoice - choice BM_FIRMWARE_LOADER default BM_FIRMWARE_LOADER_BT_MCUMGR endchoice @@ -29,3 +36,10 @@ config BM_BOOTLOADER_MCUBOOT_FIRMWARE_LOADER_ENTRANCE_BOOT_MODE endif # BOARD_BM_NRF54L15DK_NRF54L05_CPUAPP_S115_SOFTDEVICE_MCUBOOT || # BOARD_BM_NRF54L15DK_NRF54L10_CPUAPP_S115_SOFTDEVICE_MCUBOOT || # BOARD_BM_NRF54L15DK_NRF54L15_CPUAPP_S115_SOFTDEVICE_MCUBOOT + +endif # BOARD_BM_NRF54L15DK_NRF54L05_CPUAPP_S115_SOFTDEVICE || + # BOARD_BM_NRF54L15DK_NRF54L10_CPUAPP_S115_SOFTDEVICE || + # BOARD_BM_NRF54L15DK_NRF54L15_CPUAPP_S115_SOFTDEVICE || + # BOARD_BM_NRF54L15DK_NRF54L05_CPUAPP_S115_SOFTDEVICE_MCUBOOT || + # BOARD_BM_NRF54L15DK_NRF54L10_CPUAPP_S115_SOFTDEVICE_MCUBOOT || + # BOARD_BM_NRF54L15DK_NRF54L15_CPUAPP_S115_SOFTDEVICE_MCUBOOT From 57d5b684ee0f1bc79b1bb3f6c1a2d0138c608d7e Mon Sep 17 00:00:00 2001 From: Jamie McCrae Date: Tue, 26 Aug 2025 14:17:43 +0100 Subject: [PATCH 2/5] sysbuild: Pass SoftDevice Kconfig selection over Selects the Kconfig in target images indicating what SoftDevice is selected Signed-off-by: Jamie McCrae --- subsys/softdevice/Kconfig | 2 +- sysbuild/CMakeLists.txt | 31 ++++++++++++++++++++++++++++--- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/subsys/softdevice/Kconfig b/subsys/softdevice/Kconfig index d64b95b1a1..a7e4d329ac 100644 --- a/subsys/softdevice/Kconfig +++ b/subsys/softdevice/Kconfig @@ -24,7 +24,7 @@ config SOFTDEVICE_QOS_CHANNEL_SURVEY_REPORT if SOFTDEVICE config SOFTDEVICE_S115 - bool + bool "s115 SoftDevice" depends on SOC_SERIES_NRF54LX select SOFTDEVICE_PERIPHERAL select SOFTDEVICE_DATA_LENGTH_UPDATE diff --git a/sysbuild/CMakeLists.txt b/sysbuild/CMakeLists.txt index 3dd258ee97..63b46421a7 100644 --- a/sysbuild/CMakeLists.txt +++ b/sysbuild/CMakeLists.txt @@ -165,6 +165,25 @@ function(${SYSBUILD_CURRENT_MODULE_NAME}_pre_cmake) endif() endif() endforeach() + + if(SB_CONFIG_SOFTDEVICE_NONE) + set_config_bool(${DEFAULT_IMAGE} CONFIG_SOFTDEVICE n) + + if(NOT DEFINED SB_CONFIG_BM_BOOTLOADER_NONE AND NOT DEFINED SB_CONFIG_BM_FIRMWARE_LOADER_NONE) + set_config_bool(${SB_CONFIG_BM_FIRMWARE_LOADER_IMAGE_NAME} CONFIG_SOFTDEVICE n) + endif() + else() + foreach(option SOFTDEVICE_S115) + if(SB_CONFIG_${option}) + set_config_bool(${DEFAULT_IMAGE} CONFIG_${option} y) + + if(NOT DEFINED SB_CONFIG_BM_BOOTLOADER_NONE AND NOT DEFINED SB_CONFIG_BM_FIRMWARE_LOADER_NONE AND NOT DEFINED SB_CONFIG_BM_FIRMWARE_LOADER_UART_MCUMGR) + set_config_bool(${SB_CONFIG_BM_FIRMWARE_LOADER_IMAGE_NAME} CONFIG_${option} y) + endif() + break() + endif() + endforeach() + endif() endfunction() function(${SYSBUILD_CURRENT_MODULE_NAME}_post_cmake) @@ -174,12 +193,18 @@ function(${SYSBUILD_CURRENT_MODULE_NAME}_post_cmake) cmake_parse_arguments(PRE_CMAKE "" "" "IMAGES" ${ARGN}) - if(NOT SB_CONFIG_SOFTDEVICE_NONE) - set(check_targets mcuboot;installer;${SB_CONFIG_BM_FIRMWARE_LOADER_IMAGE_NAME};${DEFAULT_IMAGE}) + if(NOT DEFINED SB_CONFIG_BM_BOOTLOADER_NONE) + set(check_targets mcuboot;${DEFAULT_IMAGE}) set(dependency_targets ${SB_CONFIG_SOFTDEVICE_FILE}) - set(production_targets mcuboot;${SB_CONFIG_BM_FIRMWARE_LOADER_IMAGE_NAME};${DEFAULT_IMAGE}) + set(production_targets mcuboot;${DEFAULT_IMAGE}) set(production_files) + if(NOT DEFINED SB_CONFIG_BM_FIRMWARE_LOADER_NONE) + list(APPEND check_targets installer) + list(APPEND check_targets ${SB_CONFIG_BM_FIRMWARE_LOADER_IMAGE_NAME}) + list(APPEND production_targets ${SB_CONFIG_BM_FIRMWARE_LOADER_IMAGE_NAME}) + endif() + foreach(image ${check_targets}) sysbuild_get(${image}_kernel_bin_name IMAGE ${image} VAR CONFIG_KERNEL_BIN_NAME KCONFIG) sysbuild_get(${image}_binary_dir IMAGE ${image} VAR APPLICATION_BINARY_DIR CACHE) From c225b35a77c5d40920e298dd6d89949d7cf49abf Mon Sep 17 00:00:00 2001 From: Andreas Moltumyr Date: Tue, 26 Aug 2025 16:54:06 +0200 Subject: [PATCH 3/5] cmake: flash_metadata: remove duplicate custom command depends Remove a duplicate custom command dependency item. Signed-off-by: Andreas Moltumyr --- cmake/flash_metadata.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/cmake/flash_metadata.cmake b/cmake/flash_metadata.cmake index c42c2b2920..eb2ade5131 100644 --- a/cmake/flash_metadata.cmake +++ b/cmake/flash_metadata.cmake @@ -36,7 +36,6 @@ if(CONFIG_BOOT_FIRMWARE_LOADER) ${CMAKE_BINARY_DIR}/../softdevice.signed.hex ${sysbuild_dir}/flash_metadata.hex DEPENDS - ${ZEPHYR_BINARY_DIR}/${KERNEL_NAME}.hex flash_metadata_generation signed_softdevice_target ${ZEPHYR_BINARY_DIR}/${KERNEL_NAME}.hex From 28dbc3393fb707395c758f3f229609c1eafade4a Mon Sep 17 00:00:00 2001 From: Andreas Moltumyr Date: Tue, 26 Aug 2025 18:26:21 +0200 Subject: [PATCH 4/5] scripts: ci: license_allow_list: Add MAIN_image_default to file list Allow apache 2.0 license for this forked file Signed-off-by: Andreas Moltumyr --- scripts/ci/license_allow_list.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/ci/license_allow_list.yaml b/scripts/ci/license_allow_list.yaml index ade294d0db..df6c98f66d 100644 --- a/scripts/ci/license_allow_list.yaml +++ b/scripts/ci/license_allow_list.yaml @@ -37,6 +37,7 @@ Apache-2.0: | ^nrf-bm/drivers/flash/soc_flash_nrf_rram.c ^nrf-bm/subsys/storage/flash_map/ ^nrf-bm/lib/zephyr_queue/src/queue.c + ^nrf-bm/sysbuild/image_configurations/MAIN_image_default.cmake ^nrf-bm/subsys/mgmt/mcumgr/CMakeLists.txt ^nrf-bm/subsys/mgmt/mcumgr/Kconfig ^nrf-bm/subsys/mgmt/mcumgr/grp/CMakeLists.txt From f26022fb2e5c05e91ee5e9ac831e37ad7b00ba50 Mon Sep 17 00:00:00 2001 From: Andreas Moltumyr Date: Wed, 20 Aug 2025 09:32:10 +0200 Subject: [PATCH 5/5] CMake: program SoftDevice with application when not using bootloader Add a new Kconfig option CONFIG_PROGRAM_SOFTDEVICE_WITH_APP. When enabled, the SoftDevice hex will be programmed together with the application image. This only applies to the none MCUboot board variants. For the MCUboot board variants, the SoftDevice is already programmed together with the MCUboot bootloader. Signed-off-by: Andreas Moltumyr --- CMakeLists.txt | 1 + Kconfig.nrf_bm | 9 +++++ cmake/merge_app_softdevice.cmake | 33 +++++++++++++++++++ .../MAIN_image_default.cmake | 2 ++ 4 files changed, 45 insertions(+) create mode 100644 cmake/merge_app_softdevice.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 541b55eef7..363e0a48e0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,7 @@ if(CONFIG_NCS_BM) zephyr_include_directories(include) + include(cmake/merge_app_softdevice.cmake) include(cmake/version.cmake) add_subdirectory(drivers) diff --git a/Kconfig.nrf_bm b/Kconfig.nrf_bm index d570807087..49cc819ae2 100644 --- a/Kconfig.nrf_bm +++ b/Kconfig.nrf_bm @@ -17,4 +17,13 @@ rsource "samples/Kconfig" rsource "subsys/Kconfig" # zephyr-keep-sorted-stop +config PROGRAM_SOFTDEVICE_WITH_APP + bool "Program SoftDevice together with application (none MCUboot board variant)" + depends on !BOOTLOADER_MCUBOOT + depends on SOFTDEVICE + default y + +config SOFTDEVICE_FILE + string "SoftDevice file (DO NOT ALTER)" + endif # NCS_BM diff --git a/cmake/merge_app_softdevice.cmake b/cmake/merge_app_softdevice.cmake new file mode 100644 index 0000000000..fff34c0258 --- /dev/null +++ b/cmake/merge_app_softdevice.cmake @@ -0,0 +1,33 @@ +# +# Copyright (c) 2025 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# + +if(CONFIG_PROGRAM_SOFTDEVICE_WITH_APP) + add_custom_target(app_softdevice_merged + ALL + DEPENDS ${ZEPHYR_BINARY_DIR}/${KERNEL_NAME}_softdevice_merged.hex + ) + + add_custom_command(OUTPUT ${ZEPHYR_BINARY_DIR}/${KERNEL_NAME}_softdevice_merged.hex + COMMAND + ${PYTHON_EXECUTABLE} + ${ZEPHYR_BASE}/scripts/build/mergehex.py + -o ${ZEPHYR_BINARY_DIR}/${KERNEL_NAME}_softdevice_merged.hex + ${ZEPHYR_BINARY_DIR}/${KERNEL_NAME}.hex + ${CONFIG_SOFTDEVICE_FILE} + DEPENDS + ${ZEPHYR_BINARY_DIR}/${KERNEL_NAME}.hex + ${CONFIG_SOFTDEVICE_FILE} + ) + + set_target_properties(runners_yaml_props_target PROPERTIES "hex_file" + "${ZEPHYR_BINARY_DIR}/${KERNEL_NAME}_softdevice_merged.hex" + ) + set(BYPRODUCT_KERNEL_APP_SD_HEX_NAME + "${ZEPHYR_BINARY_DIR}/${KERNEL_NAME}_softdevice_merged.hex" + CACHE FILEPATH "Application with SoftDevice hex file" FORCE + ) + +endif() diff --git a/sysbuild/image_configurations/MAIN_image_default.cmake b/sysbuild/image_configurations/MAIN_image_default.cmake index f1ec7fa2b6..b3b83c6fc7 100644 --- a/sysbuild/image_configurations/MAIN_image_default.cmake +++ b/sysbuild/image_configurations/MAIN_image_default.cmake @@ -24,3 +24,5 @@ if(SB_CONFIG_BM_BOOTLOADER_MCUBOOT) set_config_bool(${ZCMAKE_APPLICATION} CONFIG_MCUBOOT_BOOTLOADER_MODE_SINGLE_APP y) endif() endif() + +set_config_string(${ZCMAKE_APPLICATION} CONFIG_SOFTDEVICE_FILE "${SB_CONFIG_SOFTDEVICE_FILE}")