From 79fcc5944d82237a376c42b90cd750674f46c5c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Amundsen?= Date: Tue, 15 Apr 2025 08:46:55 +0200 Subject: [PATCH 1/6] [nrf fromtree] boards: nordic: nrf54h20dk: fix debugging for iron board variant MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The required jlink script was not added due to missing entry in the board check. Also change the check for app vs rad to be on SOC level. Signed-off-by: Håkon Amundsen (cherry picked from commit 4edc003b9c8d6612381c9615b197418f6a5a3a3a) --- boards/nordic/nrf54h20dk/board.cmake | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/boards/nordic/nrf54h20dk/board.cmake b/boards/nordic/nrf54h20dk/board.cmake index 80963356dc9..5ad6557c003 100644 --- a/boards/nordic/nrf54h20dk/board.cmake +++ b/boards/nordic/nrf54h20dk/board.cmake @@ -2,8 +2,9 @@ include(${ZEPHYR_BASE}/boards/common/nrfutil.board.cmake) -if(CONFIG_BOARD_NRF54H20DK_NRF54H20_CPUAPP OR CONFIG_BOARD_NRF54H20DK_NRF54H20_CPURAD) - if(CONFIG_BOARD_NRF54H20DK_NRF54H20_CPUAPP) +if(CONFIG_BOARD_NRF54H20DK_NRF54H20_CPUAPP OR CONFIG_BOARD_NRF54H20DK_NRF54H20_CPURAD + OR CONFIG_BOARD_NRF54H20DK_NRF54H20_CPUAPP_IRON) + if(CONFIG_SOC_NRF54H20_CPUAPP) set(JLINKSCRIPTFILE ${CMAKE_CURRENT_LIST_DIR}/support/nrf54h20_cpuapp.JLinkScript) else() set(JLINKSCRIPTFILE ${CMAKE_CURRENT_LIST_DIR}/support/nrf54h20_cpurad.JLinkScript) From 261c8c28c038333b0d1f4985e312a69a8a9e475b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20B=C3=B8e?= Date: Tue, 22 Apr 2025 17:11:39 +0200 Subject: [PATCH 2/6] [nrf fromlist] boards: nordic: add 'iron' board variant for radio MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is needed for next generation Secure Domain firmware. Upstream PR #: 88908 Signed-off-by: Sebastian Bøe --- boards/nordic/nrf54h20dk/Kconfig.nrf54h20dk | 6 ++-- boards/nordic/nrf54h20dk/board.cmake | 6 ++-- boards/nordic/nrf54h20dk/board.yml | 2 ++ .../nrf54h20dk_nrf54h20_cpurad_iron.dts | 30 ++++++++++++++++++ ...nrf54h20dk_nrf54h20_cpurad_iron_0_9_0.yaml | 20 ++++++++++++ .../nrf54h20dk_nrf54h20_cpurad_iron_defconfig | 31 +++++++++++++++++++ 6 files changed, 91 insertions(+), 4 deletions(-) create mode 100644 boards/nordic/nrf54h20dk/nrf54h20dk_nrf54h20_cpurad_iron.dts create mode 100644 boards/nordic/nrf54h20dk/nrf54h20dk_nrf54h20_cpurad_iron_0_9_0.yaml create mode 100644 boards/nordic/nrf54h20dk/nrf54h20dk_nrf54h20_cpurad_iron_defconfig diff --git a/boards/nordic/nrf54h20dk/Kconfig.nrf54h20dk b/boards/nordic/nrf54h20dk/Kconfig.nrf54h20dk index de513858e9c..c509f968db6 100644 --- a/boards/nordic/nrf54h20dk/Kconfig.nrf54h20dk +++ b/boards/nordic/nrf54h20dk/Kconfig.nrf54h20dk @@ -4,9 +4,11 @@ config BOARD_NRF54H20DK select SOC_NRF54H20_CPUAPP if (BOARD_NRF54H20DK_NRF54H20_CPUAPP || \ BOARD_NRF54H20DK_NRF54H20_CPUAPP_IRON) - select SOC_NRF54H20_CPURAD if BOARD_NRF54H20DK_NRF54H20_CPURAD + select SOC_NRF54H20_CPURAD if (BOARD_NRF54H20DK_NRF54H20_CPURAD || \ + BOARD_NRF54H20DK_NRF54H20_CPURAD_IRON) select SOC_NRF54H20_CPUPPR if (BOARD_NRF54H20DK_NRF54H20_CPUPPR || \ BOARD_NRF54H20DK_NRF54H20_CPUPPR_XIP) select SOC_NRF54H20_CPUFLPR if (BOARD_NRF54H20DK_NRF54H20_CPUFLPR || \ BOARD_NRF54H20DK_NRF54H20_CPUFLPR_XIP) - select SOC_NRF54H20_IRON if BOARD_NRF54H20DK_NRF54H20_CPUAPP_IRON + select SOC_NRF54H20_IRON if (BOARD_NRF54H20DK_NRF54H20_CPUAPP_IRON || \ + BOARD_NRF54H20DK_NRF54H20_CPURAD_IRON) diff --git a/boards/nordic/nrf54h20dk/board.cmake b/boards/nordic/nrf54h20dk/board.cmake index 5ad6557c003..093155e9322 100644 --- a/boards/nordic/nrf54h20dk/board.cmake +++ b/boards/nordic/nrf54h20dk/board.cmake @@ -2,8 +2,10 @@ include(${ZEPHYR_BASE}/boards/common/nrfutil.board.cmake) -if(CONFIG_BOARD_NRF54H20DK_NRF54H20_CPUAPP OR CONFIG_BOARD_NRF54H20DK_NRF54H20_CPURAD - OR CONFIG_BOARD_NRF54H20DK_NRF54H20_CPUAPP_IRON) +if(CONFIG_BOARD_NRF54H20DK_NRF54H20_CPUAPP OR + CONFIG_BOARD_NRF54H20DK_NRF54H20_CPURAD OR + CONFIG_BOARD_NRF54H20DK_NRF54H20_CPUAPP_IRON OR + CONFIG_BOARD_NRF54H20DK_NRF54H20_CPURAD_IRON) if(CONFIG_SOC_NRF54H20_CPUAPP) set(JLINKSCRIPTFILE ${CMAKE_CURRENT_LIST_DIR}/support/nrf54h20_cpuapp.JLinkScript) else() diff --git a/boards/nordic/nrf54h20dk/board.yml b/boards/nordic/nrf54h20dk/board.yml index 2009cc6130b..a54cf1ae549 100644 --- a/boards/nordic/nrf54h20dk/board.yml +++ b/boards/nordic/nrf54h20dk/board.yml @@ -11,6 +11,8 @@ board: cpucluster: cpuflpr - name: iron cpucluster: cpuapp + - name: iron + cpucluster: cpurad revision: format: major.minor.patch default: "0.9.0" diff --git a/boards/nordic/nrf54h20dk/nrf54h20dk_nrf54h20_cpurad_iron.dts b/boards/nordic/nrf54h20dk/nrf54h20dk_nrf54h20_cpurad_iron.dts new file mode 100644 index 00000000000..32e6a6fdb84 --- /dev/null +++ b/boards/nordic/nrf54h20dk/nrf54h20dk_nrf54h20_cpurad_iron.dts @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "nrf54h20dk_nrf54h20_cpurad.dts" + +/delete-node/&cpurad_rx_partitions; +/delete-node/&cpuapp_rx_partitions; + +/ { + chosen { + zephyr,code-partition = &cpurad_slot0_partition; + zephyr,uart-mcumgr = &uart135; + }; +}; + +&mram1x { + cpurad_rx_partitions: cpurad-rx-partitions { + compatible = "nordic,owned-partitions", "fixed-partitions"; + nordic,access = ; + #address-cells = <1>; + #size-cells = <1>; + + cpurad_slot0_partition: partition@54000 { + reg = < 0x54000 0x40000 >; + }; + }; +}; diff --git a/boards/nordic/nrf54h20dk/nrf54h20dk_nrf54h20_cpurad_iron_0_9_0.yaml b/boards/nordic/nrf54h20dk/nrf54h20dk_nrf54h20_cpurad_iron_0_9_0.yaml new file mode 100644 index 00000000000..398ea7b20a7 --- /dev/null +++ b/boards/nordic/nrf54h20dk/nrf54h20dk_nrf54h20_cpurad_iron_0_9_0.yaml @@ -0,0 +1,20 @@ +# Copyright (c) 2025 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +identifier: nrf54h20dk/nrf54h20/cpurad/iron +name: nRF54H20-DK-nRF54H20-Radio (IRONside SE compatible) (revision 0.9.0) +type: mcu +arch: arm +toolchain: + - gnuarmemb + - xtools + - zephyr +sysbuild: true +ram: 192 +flash: 256 +supported: + - counter + - gpio + - pwm + - retained_mem + - spi diff --git a/boards/nordic/nrf54h20dk/nrf54h20dk_nrf54h20_cpurad_iron_defconfig b/boards/nordic/nrf54h20dk/nrf54h20dk_nrf54h20_cpurad_iron_defconfig new file mode 100644 index 00000000000..b64eb360e17 --- /dev/null +++ b/boards/nordic/nrf54h20dk/nrf54h20dk_nrf54h20_cpurad_iron_defconfig @@ -0,0 +1,31 @@ +# Copyright (c) 2025 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +# Enable UART driver +CONFIG_SERIAL=y + +# Enable console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +CONFIG_USE_DT_CODE_PARTITION=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# Enable hardware stack protection +CONFIG_HW_STACK_PROTECTION=y + +# MPU-based null-pointer dereferencing detection cannot be applied +# as the (0x0 - 0x400) region is unmapped for this target. +CONFIG_NULL_POINTER_EXCEPTION_DETECTION_NONE=y + +# Enable cache +CONFIG_CACHE_MANAGEMENT=y +CONFIG_EXTERNAL_CACHE=y + +# GPD is built on top of NRFS and NRFS support requires SSFv2 +CONFIG_SOC_NRF54H20_GPD=n + +# UICR generation is not supported, and when reintroduced will not use nrf-regtool. +CONFIG_NRF_REGTOOL_GENERATE_UICR=n From ae0719d6b90bf1bc00c12f838c0d97af2d8ddc36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20B=C3=B8e?= Date: Thu, 24 Apr 2025 09:47:35 +0200 Subject: [PATCH 3/6] [nrf fromlist] boards: nordic: nrf54h20dk iron board radiocore support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Encode the radiocore's address into the application's DT as the application needs to instruct IRONside SE about where the radiocore should be booted from. Upstream PR #: 89009 Signed-off-by: Sebastian Bøe --- boards/nordic/nrf54h20dk/nrf54h20dk_nrf54h20_cpuapp_iron.dts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/boards/nordic/nrf54h20dk/nrf54h20dk_nrf54h20_cpuapp_iron.dts b/boards/nordic/nrf54h20dk/nrf54h20dk_nrf54h20_cpuapp_iron.dts index 47fffbeb4fc..7aea6e8022b 100644 --- a/boards/nordic/nrf54h20dk/nrf54h20dk_nrf54h20_cpuapp_iron.dts +++ b/boards/nordic/nrf54h20dk/nrf54h20dk_nrf54h20_cpuapp_iron.dts @@ -52,6 +52,10 @@ reg = <0xe4000 DT_SIZE_K(64)>; }; + cpurad_slot0_partition: partition@54000 { + reg = <0x54000 DT_SIZE_K(256)>; + }; + cpuflpr_code_partition: partition@f4000 { reg = <0xf4000 DT_SIZE_K(48)>; }; From 98d12ca7b933512111bd83775e4bf2524d498a95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20B=C3=B8e?= Date: Fri, 25 Apr 2025 12:16:43 +0200 Subject: [PATCH 4/6] [nrf fromlist] soc: nrf54: Port SYS_INIT to use soc_early_init_hook MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Port SYS_INIT to use soc_early_init_hook as SYS_INITs are legacy. Upstream PR #: 88908 Signed-off-by: Sebastian Bøe --- soc/nordic/nrf54h/Kconfig | 1 + soc/nordic/nrf54h/soc.c | 10 ++-------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/soc/nordic/nrf54h/Kconfig b/soc/nordic/nrf54h/Kconfig index 57961c1b98f..f3a9dc38e87 100644 --- a/soc/nordic/nrf54h/Kconfig +++ b/soc/nordic/nrf54h/Kconfig @@ -7,6 +7,7 @@ config SOC_SERIES_NRF54HX select HAS_NRFS select HAS_NRFX select HAS_NORDIC_DRIVERS + select SOC_EARLY_INIT_HOOK if ARM select NRF_PLATFORM_HALTIUM config SOC_NRF54H20_CPUAPP_COMMON diff --git a/soc/nordic/nrf54h/soc.c b/soc/nordic/nrf54h/soc.c index 43c84e1b9a7..36250eec4a5 100644 --- a/soc/nordic/nrf54h/soc.c +++ b/soc/nordic/nrf54h/soc.c @@ -125,7 +125,7 @@ bool z_arm_on_enter_cpu_idle(void) } #endif -static int nordicsemi_nrf54h_init(void) +void soc_early_init_hook(void) { int err; @@ -137,9 +137,7 @@ static int nordicsemi_nrf54h_init(void) trim_hsfll(); err = dmm_init(); - if (err < 0) { - return err; - } + __ASSERT_NO_MSG(err >= 0); #if DT_NODE_HAS_STATUS_OKAY(DT_NODELABEL(ccm030)) /* DMASEC is set to non-secure by default, which prevents CCM from @@ -150,13 +148,9 @@ static int nordicsemi_nrf54h_init(void) nrf_spu_periph_perm_dmasec_set(spu, nrf_address_slave_get(ccm030_addr), true); #endif - - return 0; } void arch_busy_wait(uint32_t time_us) { nrfx_coredep_delay_us(time_us); } - -SYS_INIT(nordicsemi_nrf54h_init, PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); From e24441cc9ef3e52335365ba5e3e541172de715d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20B=C3=B8e?= Date: Fri, 25 Apr 2025 12:20:49 +0200 Subject: [PATCH 5/6] [nrf fromlist] cpuconf: Boot the radiocore from the app in soc_late_init_hook MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Boot the radiocore from the app in soc_late_init_hook. Upstream PR #: 88908 Signed-off-by: Sebastian Bøe --- soc/nordic/nrf54h/Kconfig | 9 +++++++++ soc/nordic/nrf54h/soc.c | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/soc/nordic/nrf54h/Kconfig b/soc/nordic/nrf54h/Kconfig index f3a9dc38e87..bd76ea51263 100644 --- a/soc/nordic/nrf54h/Kconfig +++ b/soc/nordic/nrf54h/Kconfig @@ -8,6 +8,7 @@ config SOC_SERIES_NRF54HX select HAS_NRFX select HAS_NORDIC_DRIVERS select SOC_EARLY_INIT_HOOK if ARM + select SOC_LATE_INIT_HOOK if SOC_NRF54H20_CPURAD_ENABLE select NRF_PLATFORM_HALTIUM config SOC_NRF54H20_CPUAPP_COMMON @@ -64,6 +65,14 @@ config SOC_NRF54H20_CPURAD_COMMON select HAS_PM select HAS_POWEROFF +config SOC_NRF54H20_CPURAD_ENABLE + bool "Boot the nRF54H20 Radio core" + default y if NRF_802154_SER_HOST + help + This will at application boot time enable clock to the + Radiocore, and also power will be requested to the Radiocore + subsystem. The Radiocore will then start executing instructions. + config SOC_NRF54H20_CPURAD select SOC_NRF54H20_CPURAD_COMMON diff --git a/soc/nordic/nrf54h/soc.c b/soc/nordic/nrf54h/soc.c index 36250eec4a5..da643a78411 100644 --- a/soc/nordic/nrf54h/soc.c +++ b/soc/nordic/nrf54h/soc.c @@ -21,6 +21,7 @@ #include #include #include +#include LOG_MODULE_REGISTER(soc, CONFIG_SOC_LOG_LEVEL); @@ -150,6 +151,23 @@ void soc_early_init_hook(void) #endif } +void soc_late_init_hook(void) +{ +#if defined(CONFIG_SOC_NRF54H20_CPURAD_ENABLE) + int err; + + /* The msg will be used for communication prior to IPC + * communication being set up. But at this moment no such + * communication is required. + */ + uint8_t *msg = NULL; + size_t msg_size = 0; + + err = ironside_se_cpuconf_boot_radiocore(msg, msg_size); + __ASSERT_NO_MSG(err == 0); +#endif +} + void arch_busy_wait(uint32_t time_us) { nrfx_coredep_delay_us(time_us); From 30837c754c482bfee0c07403e8bd29dae580d35b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20B=C3=B8e?= Date: Thu, 24 Apr 2025 10:16:22 +0200 Subject: [PATCH 6/6] [nrf fromlist] samples: sysbuild: Add support for nrf54h20dk/nrf54h20/cpuapp/iron MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add support for nrf54h20dk/nrf54h20/cpuapp/iron to the samples/sysbuild/hello_world sample. Upstream PR #: 88908 Signed-off-by: Sebastian Bøe --- .../hello_world/boards/nrf54h20dk_nrf54h20_cpuapp_iron.conf | 4 ++++ samples/sysbuild/hello_world/sample.yaml | 5 +++++ .../sysbuild/nrf54h20dk_nrf54h20_cpurad_iron.conf | 1 + 3 files changed, 10 insertions(+) create mode 100644 samples/sysbuild/hello_world/boards/nrf54h20dk_nrf54h20_cpuapp_iron.conf create mode 100644 samples/sysbuild/hello_world/sysbuild/nrf54h20dk_nrf54h20_cpurad_iron.conf diff --git a/samples/sysbuild/hello_world/boards/nrf54h20dk_nrf54h20_cpuapp_iron.conf b/samples/sysbuild/hello_world/boards/nrf54h20dk_nrf54h20_cpuapp_iron.conf new file mode 100644 index 00000000000..ca2bc07e4f2 --- /dev/null +++ b/samples/sysbuild/hello_world/boards/nrf54h20dk_nrf54h20_cpuapp_iron.conf @@ -0,0 +1,4 @@ +# Copyright (c) 2024 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_SOC_NRF54H20_CPURAD_ENABLE=y diff --git a/samples/sysbuild/hello_world/sample.yaml b/samples/sysbuild/hello_world/sample.yaml index 68eae58739c..7361a045c05 100644 --- a/samples/sysbuild/hello_world/sample.yaml +++ b/samples/sysbuild/hello_world/sample.yaml @@ -27,6 +27,11 @@ tests: - nrf54h20dk/nrf54h20/cpuapp extra_args: SB_CONF_FILE=sysbuild/nrf54h20dk_nrf54h20_cpurad.conf + sample.sysbuild.hello_world.nrf54h20dk_cpuapp_cpurad.iron: + platform_allow: + - nrf54h20dk/nrf54h20/cpuapp/iron + extra_args: SB_CONF_FILE=sysbuild/nrf54h20dk_nrf54h20_cpurad_iron.conf + sample.sysbuild.hello_world.nrf54h20dk_cpuapp_cpuppr: platform_allow: - nrf54h20dk/nrf54h20/cpuapp diff --git a/samples/sysbuild/hello_world/sysbuild/nrf54h20dk_nrf54h20_cpurad_iron.conf b/samples/sysbuild/hello_world/sysbuild/nrf54h20dk_nrf54h20_cpurad_iron.conf new file mode 100644 index 00000000000..8d4a230adbe --- /dev/null +++ b/samples/sysbuild/hello_world/sysbuild/nrf54h20dk_nrf54h20_cpurad_iron.conf @@ -0,0 +1 @@ +SB_CONFIG_REMOTE_BOARD="nrf54h20dk/nrf54h20/cpurad/iron"