Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions boards/nordic/nrf54h20dk/nrf54h20dk_nrf54h20-memory_map.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -166,5 +166,13 @@
periphconf_partition: partition@1ae000 {
reg = <0x1ae000 DT_SIZE_K(8)>;
};

secondary_partition: partition@1b0000 {
reg = <0x1b0000 DT_SIZE_K(64)>;
};

secondary_periphconf_partition: partition@1c0000 {
reg = <0x1c0000 DT_SIZE_K(8)>;
};
};
};
3 changes: 3 additions & 0 deletions scripts/ci/check_compliance.py
Original file line number Diff line number Diff line change
Expand Up @@ -1231,6 +1231,9 @@ def check_no_undef_outside_kconfig(self, kconf):
"FOO_LOG_LEVEL",
"FOO_SETTING_1",
"FOO_SETTING_2",
"GEN_UICR_GENERATE_PERIPHCONF", # Used in specialized build tool, not part of main Kconfig
"GEN_UICR_SECONDARY", # Used in specialized build tool, not part of main Kconfig
"GEN_UICR_SECONDARY_GENERATE_PERIPHCONF", # Used in specialized build tool, not part of main Kconfig
"HEAP_MEM_POOL_ADD_SIZE_", # Used as an option matching prefix
"HUGETLBFS", # Linux, in boards/xtensa/intel_adsp_cavs25/doc
"IAR_BUFFERED_WRITE",
Expand Down
20 changes: 0 additions & 20 deletions scripts/west_commands/runners/nrf_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -433,26 +433,6 @@ def program_hex(self):
core='Application',
)

if self.build_conf.getboolean("CONFIG_NRF_HALTIUM_GENERATE_UICR"):
zephyr_build_dir = Path(self.cfg.build_dir) / 'zephyr'

self.op_program(
str(zephyr_build_dir / 'uicr.hex'),
'ERASE_NONE',
None,
defer=True,
core='Application',
)

if self.build_conf.getboolean("CONFIG_NRF_HALTIUM_UICR_PERIPHCONF"):
self.op_program(
str(zephyr_build_dir / 'periphconf.hex'),
'ERASE_NONE',
None,
defer=True,
core='Application',
)

if not self.erase and regtool_generated_uicr:
self.exec_op('erase', core=core, kind='uicr')
else:
Expand Down
1 change: 1 addition & 0 deletions soc/nordic/Kconfig.sysbuild
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
config HAS_NORDIC_VPR_LAUNCHER_IMAGE
bool

rsource "common/uicr/Kconfig.sysbuild"
rsource "common/vpr/Kconfig.sysbuild"
orsource "*/Kconfig.sysbuild"
4 changes: 1 addition & 3 deletions soc/nordic/common/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@

add_subdirectory_ifdef(CONFIG_RISCV_CORE_NORDIC_VPR vpr)

if(CONFIG_NRF_PERIPHCONF_SECTION OR CONFIG_NRF_HALTIUM_GENERATE_UICR)
add_subdirectory(uicr)
endif()
add_subdirectory(uicr)

# Let SystemInit() be called in place of soc_reset_hook() by default.
zephyr_linker_symbol(SYMBOL soc_reset_hook EXPR "@SystemInit@")
Expand Down
46 changes: 20 additions & 26 deletions soc/nordic/common/uicr/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,26 @@ if(CONFIG_NRF_PERIPHCONF_SECTION)
zephyr_linker_sources(SECTIONS uicr.ld)
endif()

if(CONFIG_NRF_HALTIUM_GENERATE_UICR)
if(CONFIG_NRF_PERIPHCONF_SECTION)
set(in_periphconf_elf_arg
--in-periphconf-elf $<TARGET_FILE:${ZEPHYR_LINK_STAGE_EXECUTABLE}>
)
endif()

if(CONFIG_NRF_HALTIUM_UICR_PERIPHCONF)
set(periphconf_hex_file ${PROJECT_BINARY_DIR}/periphconf.hex)
set(out_periphconf_hex_arg
--out-periphconf-hex ${periphconf_hex_file}
)
list(APPEND optional_byproducts ${periphconf_hex_file})
endif()

set(uicr_hex_file ${PROJECT_BINARY_DIR}/uicr.hex)
set_property(GLOBAL APPEND PROPERTY extra_post_build_commands
COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=${ZEPHYR_BASE}/scripts/dts/python-devicetree/src
${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/gen_uicr.py
--in-config ${DOTCONFIG}
--in-edt-pickle ${EDT_PICKLE}
${in_periphconf_elf_arg}
${out_periphconf_hex_arg}
--out-uicr-hex ${uicr_hex_file}
if(CONFIG_NRF_PERIPHCONF_GENERATE_ENTRIES)
set(periphconf_entries_c_file ${PROJECT_BINARY_DIR}/periphconf_entries_generated.c)
execute_process(
COMMAND
${CMAKE_COMMAND} -E env ZEPHYR_BASE=${ZEPHYR_BASE}
${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/gen_periphconf_entries.py
--soc ${CONFIG_SOC}
--in-edt-pickle ${EDT_PICKLE}
--out-periphconf-source ${periphconf_entries_c_file}
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
COMMAND_ERROR_IS_FATAL ANY
)
set_property(GLOBAL APPEND PROPERTY extra_post_build_byproducts
${uicr_hex_file} ${optional_byproducts}
zephyr_sources(${periphconf_entries_c_file})
message(STATUS "Generated ${periphconf_entries_c_file} from ${EDT_PICKLE}")
endif()

if(CONFIG_NRF_PERIPHCONF_SECTION AND NOT SYSBUILD)
message(WARNING "CONFIG_NRF_PERIPHCONF_SECTION is enabled, but Sysbuild is not being used. "
"The global peripheral configuration will not be applied unless artifacts "
"are generated manually/externally. To enable automatic generation, build with "
"Sysbuild and ensure that SB_CONFIG_NRF_HALTIUM_GENERATE_UICR=y."
)
endif()
31 changes: 10 additions & 21 deletions soc/nordic/common/uicr/Kconfig
Original file line number Diff line number Diff line change
@@ -1,31 +1,20 @@
# Copyright (c) 2025 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

config NRF_HALTIUM_GENERATE_UICR
bool "Generate UICR file"
depends on SOC_NRF54H20_CPUAPP
default y
help
Generate UICR HEX file.

if NRF_HALTIUM_GENERATE_UICR

config NRF_HALTIUM_UICR_PERIPHCONF
bool "Initialize global domain peripherals"
default y
help
Generates a blob containing static global domain peripheral initialization
values extracted from the build artifacts, and configures UICR.PERIPHCONF
to point at the blob. The initialization values are then loaded ahead of
ahead of the application boot.

endif

config NRF_PERIPHCONF_SECTION
bool "Populate global peripheral initialization section"
default y if SOC_NRF54H20_CPUAPP
default y if SOC_NRF54H20_CPUAPP || SOC_NRF54H20_CPURAD
depends on LINKER_DEVNULL_SUPPORT
imply LINKER_DEVNULL_MEMORY
help
Include static global domain peripheral initialization values from the
build in a dedicated section in the devnull region.

config NRF_PERIPHCONF_GENERATE_ENTRIES
bool "Generate PERIPHCONF entries source file"
default y if SOC_NRF54H20_CPUAPP || SOC_NRF54H20_CPURAD
depends on NRF_PERIPHCONF_SECTION
depends on NRF_PLATFORM_HALTIUM
help
Generate a C file containing PERIPHCONF entries based on the
device configuration in the devicetree.
9 changes: 9 additions & 0 deletions soc/nordic/common/uicr/Kconfig.sysbuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Copyright (c) 2025 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

config NRF_HALTIUM_GENERATE_UICR
bool "Generate UICR file"
depends on SOC_SERIES_NRF54HX
default y
help
Generate UICR HEX file.
Loading
Loading