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/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 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 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/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 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) 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}")