diff --git a/modules/hal_nordic/Kconfig.nrf_regtool b/modules/hal_nordic/Kconfig.nrf_regtool index 791971452fe..396ec2050a0 100644 --- a/modules/hal_nordic/Kconfig.nrf_regtool +++ b/modules/hal_nordic/Kconfig.nrf_regtool @@ -26,11 +26,4 @@ config NRF_REGTOOL_VERBOSITY 3. Print even more details, which are typically only useful for nrf-regtool developers. -config NRF_REGTOOL_EXTRA_GENERATE_ARGS - string "Extra arguments to 'nrf-regtool generate'" - help - List of additional arguments to every nrf-regtool invocation used for - generating hex files. Example value: "--fill all --fill-byte 0xff". - Run "nrf-regtool generate -h" to see all of the available options. - endmenu diff --git a/modules/hal_nordic/nrf-regtool/nrf-regtoolConfig.cmake b/modules/hal_nordic/nrf-regtool/nrf-regtoolConfig.cmake index 0ff0a8ba6dd..6bcaa453cce 100644 --- a/modules/hal_nordic/nrf-regtool/nrf-regtoolConfig.cmake +++ b/modules/hal_nordic/nrf-regtool/nrf-regtoolConfig.cmake @@ -1,16 +1,26 @@ # Copyright (c) 2024 Nordic Semiconductor ASA # SPDX-License-Identifier: Apache-2.0 -function(nrf_regtool_generate_hex_from_dts peripheral) - string(TOLOWER "${peripheral}.hex" generated_hex_name) - string(TOLOWER "${peripheral}_merged.hex" merged_hex_name) +function(nrf_regtool_generate_uicr generated_hex_file) + string(REPEAT "-v;" ${CONFIG_NRF_REGTOOL_VERBOSITY} verbosity) + execute_process( + COMMAND + ${CMAKE_COMMAND} -E env PYTHONPATH=${ZEPHYR_BASE}/scripts/dts/python-devicetree/src + ${NRF_REGTOOL} ${verbosity} uicr-compile + --edt-pickle-file ${EDT_PICKLE} + --product-name ${CONFIG_SOC} + --output-file ${generated_hex_file} + WORKING_DIRECTORY ${APPLICATION_SOURCE_DIR} + COMMAND_ERROR_IS_FATAL ANY + ) + message(STATUS "Generated UICR hex file: ${generated_hex_file}") +endfunction() +function(nrf_regtool_generate_peripheral peripheral generated_hex_file) # Prepare common argument sub-lists. string(REPEAT "-v;" ${CONFIG_NRF_REGTOOL_VERBOSITY} verbosity) list(TRANSFORM CACHED_DTS_ROOT_BINDINGS PREPEND "--bindings-dir;" OUTPUT_VARIABLE bindings_dirs) - separate_arguments(extra_args UNIX_COMMAND "${CONFIG_NRF_REGTOOL_EXTRA_GENERATE_ARGS}") - set(generated_hex_file ${PROJECT_BINARY_DIR}/${generated_hex_name}) execute_process( COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=${ZEPHYR_BASE}/scripts/dts/python-devicetree/src @@ -25,25 +35,29 @@ function(nrf_regtool_generate_hex_from_dts peripheral) COMMAND_ERROR_IS_FATAL ANY ) message(STATUS "Generated ${peripheral} hex file: ${generated_hex_file}") - - set(merged_hex_file ${PROJECT_BINARY_DIR}/${merged_hex_name}) - set_property(GLOBAL APPEND PROPERTY extra_post_build_commands - COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/scripts/build/mergehex.py - -o ${merged_hex_file} - ${generated_hex_file} - ${PROJECT_BINARY_DIR}/${KERNEL_HEX_NAME} - ) - set_property(TARGET runners_yaml_props_target PROPERTY hex_file ${merged_hex_file}) endfunction() +get_property(version GLOBAL PROPERTY nrf_regtool_version) foreach(component IN LISTS ${CMAKE_FIND_PACKAGE_NAME}_FIND_COMPONENTS) - string(REGEX MATCH "(^.*):(.*$)" match ${component}) - set(operation "${CMAKE_MATCH_1}") - set(peripheral "${CMAKE_MATCH_2}") + if(component STREQUAL "GENERATE:UICR") + set(generated_hex_file ${PROJECT_BINARY_DIR}/uicr.hex) + if(version VERSION_GREATER_EQUAL 7.0.0) + nrf_regtool_generate_uicr(${generated_hex_file}) + else() + nrf_regtool_generate_peripheral(UICR ${generated_hex_file}) + endif() + + # UICR must be flashed together with the Zephyr binary. + set(merged_hex_file ${PROJECT_BINARY_DIR}/uicr_merged.hex) + set_property(GLOBAL APPEND PROPERTY extra_post_build_commands + COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/scripts/build/mergehex.py + -o ${merged_hex_file} + ${generated_hex_file} + ${PROJECT_BINARY_DIR}/${KERNEL_HEX_NAME} + ) + set_property(TARGET runners_yaml_props_target PROPERTY hex_file ${merged_hex_file}) - if(operation STREQUAL "GENERATE") - nrf_regtool_generate_hex_from_dts(${peripheral}) else() message(FATAL_ERROR "Unrecognized package component: \"${component}\"") endif() diff --git a/modules/hal_nordic/nrf-regtool/nrf-regtoolConfigVersion.cmake b/modules/hal_nordic/nrf-regtool/nrf-regtoolConfigVersion.cmake index e147d1b0532..81345c1ae50 100644 --- a/modules/hal_nordic/nrf-regtool/nrf-regtoolConfigVersion.cmake +++ b/modules/hal_nordic/nrf-regtool/nrf-regtoolConfigVersion.cmake @@ -22,6 +22,7 @@ if(NRF_REGTOOL) "Found nrf-regtool (found suitable version \"${PACKAGE_VERSION}\", " "minimum required is \"${PACKAGE_FIND_VERSION}\")" ) + set_property(GLOBAL PROPERTY nrf_regtool_version ${PACKAGE_VERSION}) return() endif() endif()