dts: Add initial support for nRF54H20 EngA SoC
Add definition of the nRF54H20 SoC revision EngA with its Application,
Radio, and Peripheral Processor (PPR) cores and basic peripherals:
GRTC, GPIOs, GPIOTE, and UARTs.
Signed-off-by: Grzegorz Swiderski <grzegorz.swiderski@nordicsemi.no>
Signed-off-by: Gerard Marull-Paretas <gerard@teslabs.com>
Signed-off-by: Andrzej Głąbek <andrzej.glabek@nordicsemi.no>
diff --git a/dts/arm/nordic/nrf54h20_enga_cpuapp.dtsi b/dts/arm/nordic/nrf54h20_enga_cpuapp.dtsi
new file mode 100644
index 0000000..f51528d
--- /dev/null
+++ b/dts/arm/nordic/nrf54h20_enga_cpuapp.dtsi
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2024 Nordic Semiconductor ASA
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include <nordic/nrf54h20_enga.dtsi>
+
+cpu: &cpuapp {};
+systick: &cpuapp_systick {};
+nvic: &cpuapp_nvic {};
+
+/delete-node/ &cpuppr;
+/delete-node/ &cpurad;
+/delete-node/ &cpurad_peripherals;
+/delete-node/ &cpurad_ppb;
+/delete-node/ &cpurad_ram0;
+
+/ {
+ soc {
+ compatible = "simple-bus";
+ interrupt-parent = <&cpuapp_nvic>;
+ ranges;
+ };
+};
+
+&cpuapp_ppb {
+ compatible = "simple-bus";
+ ranges;
+};
+
+&gpiote130 {
+ interrupts = <105 NRF_DEFAULT_IRQ_PRIORITY>;
+};
+
+&grtc {
+ interrupts = <109 NRF_DEFAULT_IRQ_PRIORITY>;
+};
diff --git a/dts/arm/nordic/nrf54h20_enga_cpurad.dtsi b/dts/arm/nordic/nrf54h20_enga_cpurad.dtsi
new file mode 100644
index 0000000..cb27673
--- /dev/null
+++ b/dts/arm/nordic/nrf54h20_enga_cpurad.dtsi
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2024 Nordic Semiconductor ASA
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include <nordic/nrf54h20_enga.dtsi>
+
+cpu: &cpurad {};
+systick: &cpurad_systick {};
+nvic: &cpurad_nvic {};
+
+/delete-node/ &cpuapp;
+/delete-node/ &cpuapp_peripherals;
+/delete-node/ &cpuapp_ppb;
+/delete-node/ &cpuapp_ram0;
+/delete-node/ &cpuppr;
+
+/ {
+ soc {
+ compatible = "simple-bus";
+ interrupt-parent = <&cpurad_nvic>;
+ ranges;
+ };
+};
+
+&cpurad_ppb {
+ compatible = "simple-bus";
+ ranges;
+};
+
+&gpiote130 {
+ interrupts = <105 NRF_DEFAULT_IRQ_PRIORITY>;
+};
+
+&grtc {
+ interrupts = <109 NRF_DEFAULT_IRQ_PRIORITY>;
+};
diff --git a/dts/common/nordic/nrf54h20_enga.dtsi b/dts/common/nordic/nrf54h20_enga.dtsi
new file mode 100644
index 0000000..1b8f7b6
--- /dev/null
+++ b/dts/common/nordic/nrf54h20_enga.dtsi
@@ -0,0 +1,310 @@
+/*
+ * Copyright (c) 2024 Nordic Semiconductor ASA
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include <mem.h>
+#include <nordic/nrf_common.dtsi>
+
+#include <zephyr/dt-bindings/misc/nordic-nrf-ficr-nrf54h20-enga.h>
+
+/delete-node/ &sw_pwm;
+
+/ {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ cpuapp: cpu@2 {
+ compatible = "arm,cortex-m33";
+ reg = <2>;
+ device_type = "cpu";
+ clock-frequency = <DT_FREQ_M(320)>;
+ };
+
+ cpurad: cpu@3 {
+ compatible = "arm,cortex-m33";
+ reg = <3>;
+ device_type = "cpu";
+ clock-frequency = <DT_FREQ_M(256)>;
+ };
+
+ cpuppr: cpu@d {
+ compatible = "nordic,vpr";
+ reg = <13>;
+ device_type = "cpu";
+ clock-frequency = <DT_FREQ_M(16)>;
+ riscv,isa = "rv32emc";
+ nordic,bus-width = <32>;
+ };
+ };
+
+ reserved-memory {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ cpurad_uicr_ext: memory@e1ff000 {
+ reg = <0xe1ff000 DT_SIZE_K(2)>;
+ };
+
+ cpuapp_uicr_ext: memory@e1ff800 {
+ reg = <0xe1ff800 DT_SIZE_K(2)>;
+ };
+ };
+
+ clocks {
+ fll16m: fll16m {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <DT_FREQ_M(16)>;
+ };
+ };
+
+ soc {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ mram1x: mram@e000000 {
+ compatible = "nordic,mram";
+ reg = <0xe000000 DT_SIZE_K(2048)>;
+ write-block-size = <16>;
+ };
+
+ cpuapp_uicr: uicr@fff8000 {
+ compatible = "nordic,nrf-uicr-v2";
+ reg = <0xfff8000 DT_SIZE_K(2)>;
+ domain = <2>;
+ ptr-ext-uicr = <&cpuapp_uicr_ext>;
+ };
+
+ cpurad_uicr: uicr@fffa000 {
+ compatible = "nordic,nrf-uicr-v2";
+ reg = <0xfffa000 DT_SIZE_K(2)>;
+ domain = <3>;
+ ptr-ext-uicr = <&cpurad_uicr_ext>;
+ };
+
+ ficr: ficr@fffe000 {
+ compatible = "nordic,nrf-ficr";
+ reg = <0xfffe000 DT_SIZE_K(2)>;
+ #nordic,ficr-cells = <1>;
+ };
+
+ cpuapp_ram0: sram@22000000 {
+ compatible = "mmio-sram";
+ reg = <0x22000000 DT_SIZE_K(32)>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges = <0x0 0x22000000 0x8000>;
+ };
+
+ cpurad_ram0: sram@23000000 {
+ compatible = "mmio-sram";
+ reg = <0x23000000 DT_SIZE_K(64)>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges = <0x0 0x23000000 0x10000>;
+ };
+
+ cpuapp_peripherals: peripheral@52000000 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges = <0x0 0x52000000 0x1000000>;
+
+ cpuapp_hsfll: clock@d000 {
+ compatible = "nordic,nrf-hsfll";
+ #clock-cells = <0>;
+ reg = <0xd000 0x1000>;
+ clocks = <&fll16m>;
+ clock-frequency = <DT_FREQ_M(320)>;
+ nordic,ficrs =
+ <&ficr NRF_FICR_TRIM_APPLICATION_HSFLL_TRIM_VSUP>,
+ <&ficr NRF_FICR_TRIM_APPLICATION_HSFLL_TRIM_COARSE_0>,
+ <&ficr NRF_FICR_TRIM_APPLICATION_HSFLL_TRIM_FINE_0>;
+ nordic,ficr-names = "vsup", "coarse", "fine";
+ };
+ };
+
+ cpurad_peripherals: peripheral@53000000 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges = <0x0 0x53000000 0x1000000>;
+
+ cpurad_hsfll: clock@d000 {
+ compatible = "nordic,nrf-hsfll";
+ #clock-cells = <0>;
+ reg = <0xd000 0x1000>;
+ clocks = <&fll16m>;
+ clock-frequency = <DT_FREQ_M(256)>;
+ nordic,ficrs =
+ <&ficr NRF_FICR_TRIM_RADIOCORE_HSFLL_TRIM_VSUP>,
+ <&ficr NRF_FICR_TRIM_RADIOCORE_HSFLL_TRIM_COARSE_1>,
+ <&ficr NRF_FICR_TRIM_RADIOCORE_HSFLL_TRIM_FINE_1>;
+ nordic,ficr-names = "vsup", "coarse", "fine";
+ };
+ };
+
+ global_peripherals: peripheral@5f000000 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges = <0x0 0x5f000000 0x1000000>;
+
+ cpuppr_vpr: vpr@908000 {
+ compatible = "nordic,nrf-vpr-coprocessor";
+ reg = <0x908000 0x1000>;
+ status = "disabled";
+ cpu = <13>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges = <0x0 0x908000 0x4000>;
+
+ cpuppr_clic: interrupt-controller@1000 {
+ compatible = "nordic,nrf-clic";
+ reg = <0x1000 0x3000>;
+ status = "disabled";
+ #interrupt-cells = <2>;
+ interrupt-controller;
+ #address-cells = <1>;
+ };
+ };
+
+ gpiote130: gpiote@934000 {
+ compatible = "nordic,nrf-gpiote";
+ reg = <0x934000 0x1000>;
+ status = "disabled";
+ instance = <130>;
+ };
+
+ gpio0: gpio@938000 {
+ compatible = "nordic,nrf-gpio";
+ reg = <0x938000 0x200>;
+ status = "disabled";
+ #gpio-cells = <2>;
+ gpio-controller;
+ gpiote-instance = <&gpiote130>;
+ ngpios = <12>;
+ port = <0>;
+ };
+
+ gpio1: gpio@938200 {
+ compatible = "nordic,nrf-gpio";
+ reg = <0x938200 0x200>;
+ status = "disabled";
+ #gpio-cells = <2>;
+ gpio-controller;
+ gpiote-instance = <&gpiote130>;
+ ngpios = <12>;
+ port = <1>;
+ };
+
+ gpio2: gpio@938400 {
+ compatible = "nordic,nrf-gpio";
+ reg = <0x938400 0x200>;
+ status = "disabled";
+ #gpio-cells = <2>;
+ gpio-controller;
+ gpiote-instance = <&gpiote130>;
+ ngpios = <12>;
+ port = <2>;
+ };
+
+ gpio6: gpio@938c00 {
+ compatible = "nordic,nrf-gpio";
+ reg = <0x938c00 0x200>;
+ status = "disabled";
+ #gpio-cells = <2>;
+ gpio-controller;
+ ngpios = <14>;
+ port = <6>;
+ };
+
+ gpio7: gpio@938e00 {
+ compatible = "nordic,nrf-gpio";
+ reg = <0x938e00 0x200>;
+ status = "disabled";
+ #gpio-cells = <2>;
+ gpio-controller;
+ ngpios = <8>;
+ port = <7>;
+ };
+
+ gpio9: gpio@939200 {
+ compatible = "nordic,nrf-gpio";
+ reg = <0x939200 0x200>;
+ status = "disabled";
+ #gpio-cells = <2>;
+ gpio-controller;
+ gpiote-instance = <&gpiote130>;
+ ngpios = <6>;
+ port = <9>;
+ };
+
+ grtc: grtc@99c000 {
+ compatible = "nordic,nrf-grtc";
+ reg = <0x99c000 0x1000>;
+ status = "disabled";
+ cc-num = <16>;
+ };
+
+ uart135: uart@9c6000 {
+ compatible = "nordic,nrf-uarte";
+ reg = <0x9c6000 0x1000>;
+ status = "disabled";
+ current-speed = <115200>;
+ interrupts = <454 NRF_DEFAULT_IRQ_PRIORITY>;
+ };
+
+ uart136: uart@9d5000 {
+ compatible = "nordic,nrf-uarte";
+ reg = <0x9d5000 0x1000>;
+ status = "disabled";
+ current-speed = <115200>;
+ interrupts = <469 NRF_DEFAULT_IRQ_PRIORITY>;
+ };
+ };
+ };
+
+ cpuapp_ppb: cpuapp-ppb-bus {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ cpuapp_systick: timer@e000e010 {
+ compatible = "arm,armv8m-systick";
+ reg = <0xe000e010 0x10>;
+ status = "disabled";
+ };
+
+ cpuapp_nvic: interrupt-controller@e000e100 {
+ compatible = "arm,v8m-nvic";
+ reg = <0xe000e100 0xc00>;
+ arm,num-irq-priority-bits = <3>;
+ #interrupt-cells = <2>;
+ interrupt-controller;
+ #address-cells = <1>;
+ };
+ };
+
+ cpurad_ppb: cpurad-ppb-bus {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ cpurad_systick: timer@e000e010 {
+ compatible = "arm,armv8m-systick";
+ reg = <0xe000e010 0x10>;
+ status = "disabled";
+ };
+
+ cpurad_nvic: interrupt-controller@e000e100 {
+ compatible = "arm,v8m-nvic";
+ reg = <0xe000e100 0xc00>;
+ arm,num-irq-priority-bits = <3>;
+ #interrupt-cells = <2>;
+ interrupt-controller;
+ #address-cells = <1>;
+ };
+ };
+};
diff --git a/dts/riscv/nordic/nrf54h20_enga_cpuppr.dtsi b/dts/riscv/nordic/nrf54h20_enga_cpuppr.dtsi
new file mode 100644
index 0000000..d42a815
--- /dev/null
+++ b/dts/riscv/nordic/nrf54h20_enga_cpuppr.dtsi
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2024 Nordic Semiconductor ASA
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include <nordic/nrf54h20_enga.dtsi>
+
+cpu: &cpuppr {};
+clic: &cpuppr_clic {};
+
+/delete-node/ &cpuapp;
+/delete-node/ &cpuapp_peripherals;
+/delete-node/ &cpuapp_ppb;
+/delete-node/ &cpuapp_ram0;
+/delete-node/ &cpurad;
+/delete-node/ &cpurad_peripherals;
+/delete-node/ &cpurad_ppb;
+/delete-node/ &cpurad_ram0;
+
+/ {
+ soc {
+ compatible = "simple-bus";
+ interrupt-parent = <&cpuppr_clic>;
+ ranges;
+ };
+};
+
+&gpiote130 {
+ interrupts = <104 NRF_DEFAULT_IRQ_PRIORITY>;
+};
+
+&grtc {
+ interrupts = <108 NRF_DEFAULT_IRQ_PRIORITY>;
+};