From 38520a93d3f0e11ee54e9ae326d8139bd17e8ac0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrzej=20G=C5=82=C4=85bek?= Date: Tue, 23 Jan 2024 17:54:45 +0100 Subject: [PATCH] boards: arm: Add initial support for nRF54H20 PDK MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add targets that allows building for the Application and Radio cores in the nRF54H20 SoC on the nRF54H20 PDK board. Signed-off-by: Grzegorz Swiderski Signed-off-by: Gerard Marull-Paretas Signed-off-by: Andrzej Głąbek --- boards/arm/nrf54h20pdk_nrf54h20/Kconfig.board | 10 ++ .../nrf54h20pdk_nrf54h20/Kconfig.defconfig | 14 ++ boards/arm/nrf54h20pdk_nrf54h20/board.cmake | 3 + .../doc/img/nrf54h20pdk_nrf54h20.webp | Bin 0 -> 27232 bytes boards/arm/nrf54h20pdk_nrf54h20/doc/index.rst | 148 ++++++++++++++++++ .../nrf54h20pdk_nrf54h20-memory_map.dtsi | 79 ++++++++++ .../nrf54h20pdk_nrf54h20-pinctrl.dtsi | 53 +++++++ .../nrf54h20pdk_nrf54h20_cpuapp.dts | 137 ++++++++++++++++ .../nrf54h20pdk_nrf54h20_cpuapp.yaml | 15 ++ .../nrf54h20pdk_nrf54h20_cpuapp_defconfig | 33 ++++ .../nrf54h20pdk_nrf54h20_cpurad.dts | 58 +++++++ .../nrf54h20pdk_nrf54h20_cpurad.yaml | 15 ++ .../nrf54h20pdk_nrf54h20_cpurad_defconfig | 30 ++++ 13 files changed, 595 insertions(+) create mode 100644 boards/arm/nrf54h20pdk_nrf54h20/Kconfig.board create mode 100644 boards/arm/nrf54h20pdk_nrf54h20/Kconfig.defconfig create mode 100644 boards/arm/nrf54h20pdk_nrf54h20/board.cmake create mode 100644 boards/arm/nrf54h20pdk_nrf54h20/doc/img/nrf54h20pdk_nrf54h20.webp create mode 100644 boards/arm/nrf54h20pdk_nrf54h20/doc/index.rst create mode 100644 boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20-memory_map.dtsi create mode 100644 boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20-pinctrl.dtsi create mode 100644 boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpuapp.dts create mode 100644 boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpuapp.yaml create mode 100644 boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpuapp_defconfig create mode 100644 boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpurad.dts create mode 100644 boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpurad.yaml create mode 100644 boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpurad_defconfig diff --git a/boards/arm/nrf54h20pdk_nrf54h20/Kconfig.board b/boards/arm/nrf54h20pdk_nrf54h20/Kconfig.board new file mode 100644 index 00000000000..b76cfce6800 --- /dev/null +++ b/boards/arm/nrf54h20pdk_nrf54h20/Kconfig.board @@ -0,0 +1,10 @@ +# Copyright (c) 2024 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_NRF54H20PDK_NRF54H20_CPUAPP + bool "nRF54H20 PDK nRF54H20 Application MCU" + depends on SOC_NRF54H20_ENGA_CPUAPP + +config BOARD_NRF54H20PDK_NRF54H20_CPURAD + bool "nRF54H20 PDK nRF54H20 Radio MCU" + depends on SOC_NRF54H20_ENGA_CPURAD diff --git a/boards/arm/nrf54h20pdk_nrf54h20/Kconfig.defconfig b/boards/arm/nrf54h20pdk_nrf54h20/Kconfig.defconfig new file mode 100644 index 00000000000..954276ec829 --- /dev/null +++ b/boards/arm/nrf54h20pdk_nrf54h20/Kconfig.defconfig @@ -0,0 +1,14 @@ +# Copyright (c) 2024 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +config BOARD + default "nrf54h20pdk_nrf54h20_cpuapp" if BOARD_NRF54H20PDK_NRF54H20_CPUAPP + default "nrf54h20pdk_nrf54h20_cpurad" if BOARD_NRF54H20PDK_NRF54H20_CPURAD + +if BOARD_NRF54H20PDK_NRF54H20_CPUAPP || BOARD_NRF54H20PDK_NRF54H20_CPURAD + +# Data cache is disabled due to a HW issue in the EngA SoC revision. +config DCACHE + default n + +endif # BOARD_NRF54H20PDK_NRF54H20_CPUAPP || BOARD_NRF54H20PDK_NRF54H20_CPURAD diff --git a/boards/arm/nrf54h20pdk_nrf54h20/board.cmake b/boards/arm/nrf54h20pdk_nrf54h20/board.cmake new file mode 100644 index 00000000000..4c63f1dd05e --- /dev/null +++ b/boards/arm/nrf54h20pdk_nrf54h20/board.cmake @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: Apache-2.0 + +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/boards/arm/nrf54h20pdk_nrf54h20/doc/img/nrf54h20pdk_nrf54h20.webp b/boards/arm/nrf54h20pdk_nrf54h20/doc/img/nrf54h20pdk_nrf54h20.webp new file mode 100644 index 0000000000000000000000000000000000000000..bcda6b0732b3acefe24e83332692e8ae898d47b4 GIT binary patch literal 27232 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 + status = "disabled"; + perm-read; + perm-write; + perm-execute; + }; + + ram3x_dma_region: memory@2fc07000 { + compatible = "nordic,owned-memory"; + reg = <0x2fc07000 DT_SIZE_K(4)>; + status = "disabled"; + perm-read; + perm-write; + #address-cells = <1>; + #size-cells = <1>; + ranges = <0x0 0x2fc07000 0x1000>; + + cpuapp_dma_region: memory@680 { + compatible = "zephyr,memory-region"; + reg = <0x680 DT_SIZE_K(2)>; + status = "disabled"; + #memory-region-cells = <0>; + zephyr,memory-region = "DMA_RAM3x_APP"; + }; + + cpurad_dma_region: memory@e80 { + compatible = "zephyr,memory-region"; + reg = <0xe80 0x80>; + status = "disabled"; + #memory-region-cells = <0>; + zephyr,memory-region = "DMA_RAM3x_RAD"; + }; + }; + }; +}; + +&mram1x { + cpurad_rx_partitions: cpurad-rx-partitions { + compatible = "nordic,owned-partitions", "fixed-partitions"; + status = "disabled"; + perm-read; + perm-execute; + perm-secure; + #address-cells = <1>; + #size-cells = <1>; + + cpurad_slot0_partition: partition@66000 { + reg = <0x66000 DT_SIZE_K(256)>; + }; + }; + + cpuapp_rx_partitions: cpuapp-rx-partitions { + compatible = "nordic,owned-partitions", "fixed-partitions"; + status = "disabled"; + perm-read; + perm-execute; + perm-secure; + #address-cells = <1>; + #size-cells = <1>; + + cpuapp_slot0_partition: partition@a6000 { + reg = <0xa6000 DT_SIZE_K(512)>; + }; + + cpuppr_code_partition: partition@126000 { + reg = <0x126000 DT_SIZE_K(28)>; + }; + }; +}; diff --git a/boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20-pinctrl.dtsi b/boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20-pinctrl.dtsi new file mode 100644 index 00000000000..d3b79120322 --- /dev/null +++ b/boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20-pinctrl.dtsi @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +&pinctrl { + /omit-if-no-ref/ uart135_default: uart135_default { + group1 { + psels = , + ; + }; + + group2 { + bias-pull-up; + psels = , + ; + }; + }; + + /omit-if-no-ref/ uart135_sleep: uart135_sleep { + group1 { + low-power-enable; + psels = , + , + , + ; + }; + }; + + /omit-if-no-ref/ uart136_default: uart136_default { + group1 { + psels = , + ; + }; + + group2 { + bias-pull-up; + psels = , + ; + }; + }; + + /omit-if-no-ref/ uart136_sleep: uart136_sleep { + group1 { + low-power-enable; + psels = , + , + , + ; + }; + }; +}; diff --git a/boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpuapp.dts b/boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpuapp.dts new file mode 100644 index 00000000000..359c1f84307 --- /dev/null +++ b/boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpuapp.dts @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include "nrf54h20pdk_nrf54h20-memory_map.dtsi" +#include "nrf54h20pdk_nrf54h20-pinctrl.dtsi" + +/ { + compatible = "nordic,nrf54h20pdk_nrf54h20-cpuapp"; + model = "Nordic nRF54H20 PDK nRF54H20 Application MCU"; + + chosen { + zephyr,console = &uart136; + zephyr,code-partition = &cpuapp_slot0_partition; + zephyr,flash = &mram1x; + zephyr,sram = &cpuapp_ram0; + }; + + aliases { + led0 = &led0; + led1 = &led1; + led2 = &led2; + led3 = &led3; + sw0 = &button0; + sw1 = &button1; + sw2 = &button2; + sw3 = &button3; + }; + + buttons { + compatible = "gpio-keys"; + + button0: button_0 { + gpios = <&gpio0 8 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "Push button 0"; + zephyr,code = ; + }; + + button1: button_1 { + gpios = <&gpio0 9 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "Push button 1"; + zephyr,code = ; + }; + + button2: button_2 { + gpios = <&gpio0 10 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "Push button 2"; + zephyr,code = ; + }; + + button3: button_3 { + gpios = <&gpio0 11 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "Push button 3"; + zephyr,code = ; + }; + }; + + leds { + compatible = "gpio-leds"; + + led0: led_0 { + gpios = <&gpio9 0 GPIO_ACTIVE_HIGH>; + label = "Green LED 0"; + }; + + led1: led_1 { + gpios = <&gpio9 1 GPIO_ACTIVE_HIGH>; + label = "Green LED 1"; + }; + + led2: led_2 { + gpios = <&gpio9 2 GPIO_ACTIVE_HIGH>; + label = "Green LED 2"; + }; + + led3: led_3 { + gpios = <&gpio9 3 GPIO_ACTIVE_HIGH>; + label = "Green LED 3"; + }; + }; +}; + +&ram3x_dma_region { + status = "okay"; +}; + +&cpuapp_dma_region { + status = "okay"; +}; + +&cpuapp_rx_partitions { + status = "okay"; +}; + +&cpuppr_vpr { + source-memory = <&cpuppr_code_partition>; + execution-memory = <&cpuppr_ram3x_region>; +}; + +&gpiote130 { + status = "okay"; + owned-channels = <0 1 2 3 4 5 6 7>; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio9 { + status = "okay"; +}; + +&grtc { + status = "okay"; + child-owned-channels = <5 6>; + nonsecure-channels = <5 6>; + owned-channels = <4 5 6>; +}; + +&uart135 { + pinctrl-0 = <&uart135_default>; + pinctrl-1 = <&uart135_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&uart136 { + status = "okay"; + memory-regions = <&cpuapp_dma_region>; + pinctrl-0 = <&uart136_default>; + pinctrl-1 = <&uart136_sleep>; + pinctrl-names = "default", "sleep"; +}; diff --git a/boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpuapp.yaml b/boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpuapp.yaml new file mode 100644 index 00000000000..a364c2863d3 --- /dev/null +++ b/boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpuapp.yaml @@ -0,0 +1,15 @@ +# Copyright (c) 2024 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +identifier: nrf54h20pdk_nrf54h20_cpuapp +name: nRF54H20-PDK-nRF54H20-Application +type: mcu +arch: arm +toolchain: + - gnuarmemb + - xtools + - zephyr +ram: 32 +flash: 368 +supported: + - gpio diff --git a/boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpuapp_defconfig b/boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpuapp_defconfig new file mode 100644 index 00000000000..1f7ef38a7fc --- /dev/null +++ b/boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpuapp_defconfig @@ -0,0 +1,33 @@ +# Copyright (c) 2024 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_SOC_SERIES_NRF54HX=y +CONFIG_SOC_NRF54H20=y +CONFIG_SOC_NRF54H20_ENGA_CPUAPP=y +CONFIG_BOARD_NRF54H20PDK_NRF54H20_CPUAPP=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 + +# Enable GPIO +CONFIG_GPIO=y + +# Enable UART driver +CONFIG_SERIAL=y + +# Enable console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y diff --git a/boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpurad.dts b/boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpurad.dts new file mode 100644 index 00000000000..02213d88645 --- /dev/null +++ b/boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpurad.dts @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2024 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include "nrf54h20pdk_nrf54h20-memory_map.dtsi" +#include "nrf54h20pdk_nrf54h20-pinctrl.dtsi" + +/ { + compatible = "nordic,nrf54h20pdk_nrf54h20-cpurad"; + model = "Nordic nRF54H20 PDK nRF54H20 Radio MCU"; + + chosen { + zephyr,console = &uart135; + zephyr,code-partition = &cpurad_slot0_partition; + zephyr,flash = &mram1x; + zephyr,sram = &cpurad_ram0; + }; +}; + +&ram3x_dma_region { + status = "okay"; +}; + +&cpurad_dma_region { + status = "okay"; +}; + +&cpurad_rx_partitions { + status = "okay"; +}; + +&grtc { + status = "okay"; + child-owned-channels = <8 9 10 11 12>; + interrupts = <109 NRF_DEFAULT_IRQ_PRIORITY>, + <108 NRF_DEFAULT_IRQ_PRIORITY>; + nonsecure-channels = <8 9 10 11 12>; + owned-channels = <7 8 9 10 11 12 13 14>; +}; + +&uart135 { + status = "okay"; + memory-regions = <&cpurad_dma_region>; + pinctrl-0 = <&uart135_default>; + pinctrl-1 = <&uart135_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&uart136 { + pinctrl-0 = <&uart136_default>; + pinctrl-1 = <&uart136_sleep>; + pinctrl-names = "default", "sleep"; +}; diff --git a/boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpurad.yaml b/boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpurad.yaml new file mode 100644 index 00000000000..d1c8548d07d --- /dev/null +++ b/boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpurad.yaml @@ -0,0 +1,15 @@ +# Copyright (c) 2024 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +identifier: nrf54h20pdk_nrf54h20_cpurad +name: nRF54H20-PDK-nRF54H20-Radio +type: mcu +arch: arm +toolchain: + - gnuarmemb + - xtools + - zephyr +ram: 32 +flash: 368 +supported: + - gpio diff --git a/boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpurad_defconfig b/boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpurad_defconfig new file mode 100644 index 00000000000..254d8656e61 --- /dev/null +++ b/boards/arm/nrf54h20pdk_nrf54h20/nrf54h20pdk_nrf54h20_cpurad_defconfig @@ -0,0 +1,30 @@ +# Copyright (c) 2024 Nordic Semiconductor ASA +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_SOC_SERIES_NRF54HX=y +CONFIG_SOC_NRF54H20=y +CONFIG_SOC_NRF54H20_ENGA_CPURAD=y +CONFIG_BOARD_NRF54H20PDK_NRF54H20_CPURAD=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 + +# Enable UART driver +CONFIG_SERIAL=y + +# Enable console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y