Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

drivers: mbox: add initial drivers for nRF VEVIF & BELLBOARD #69303

Merged
merged 15 commits into from Mar 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
36 changes: 36 additions & 0 deletions boards/nordic/nrf54h20pdk/nrf54h20pdk_nrf54h20-ipc_conf.dtsi
@@ -0,0 +1,36 @@
/*
* Copyright (c) 2024 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/

/ {
ipc {
cpusec_cpuapp_ipc: ipc-1-2 {
compatible = "zephyr,ipc-icmsg";
status = "disabled";
mboxes = <&cpusec_bellboard 12>,
<&cpuapp_bellboard 0>;
};

cpusec_cpurad_ipc: ipc-1-3 {
compatible = "zephyr,ipc-icmsg";
status = "disabled";
mboxes = <&cpusec_bellboard 18>,
<&cpurad_bellboard 0>;
};

cpuapp_cpurad_ipc: ipc-2-3 {
status = "disabled";
mboxes = <&cpuapp_bellboard 18>,
<&cpurad_bellboard 12>;
};

cpuapp_cpuppr_ipc: ipc-2-13 {
compatible = "zephyr,ipc-icmsg";
status = "disabled";
mboxes = <&cpuapp_bellboard 13>,
<&cpuppr_vevif 12>;
};
};
};
100 changes: 99 additions & 1 deletion boards/nordic/nrf54h20pdk/nrf54h20pdk_nrf54h20-memory_map.dtsi
Expand Up @@ -6,6 +6,96 @@

/ {
reserved-memory {
cpuapp_ram0x_region: memory@2f000000 {
compatible = "nordic,owned-memory";
reg = <0x2f000000 DT_SIZE_K(260)>;
status = "disabled";
perm-read;
perm-write;
perm-secure;
#address-cells = <1>;
#size-cells = <1>;
ranges = <0x0 0x2f000000 0x41000>;

cpusec_cpuapp_ipc_shm: memory@0 {
reg = <0x0 DT_SIZE_K(2)>;
};

cpuapp_cpusec_ipc_shm: memory@800 {
reg = <0x800 DT_SIZE_K(2)>;
};

cpuapp_data: memory@1000 {
reg = <0x1000 DT_SIZE_K(256)>;
};
};

cpurad_ram0x_region: memory@2f041000 {
compatible = "nordic,owned-memory";
reg = <0x2f041000 DT_SIZE_K(4)>;
status = "disabled";
perm-read;
perm-write;
perm-secure;
#address-cells = <1>;
#size-cells = <1>;
ranges = <0x0 0x2f041000 0x1000>;

cpusec_cpurad_ipc_shm: memory@0 {
reg = <0x0 DT_SIZE_K(2)>;
};

cpurad_cpusec_ipc_shm: memory@800 {
reg = <0x800 DT_SIZE_K(2)>;
};
};

cpuapp_cpurad_ram0x_region: memory@2f0bf000 {
compatible = "nordic,owned-memory";
reg = <0x2f0bf000 DT_SIZE_K(4)>;
status = "disabled";
perm-read;
perm-write;
#address-cells = <1>;
#size-cells = <1>;
ranges = <0x0 0x2f0bf000 0x1000>;

cpuapp_cpurad_ipc_shm: memory@0 {
reg = <0x0 DT_SIZE_K(2)>;
};

cpurad_cpuapp_ipc_shm: memory@800 {
reg = <0x800 DT_SIZE_K(2)>;
};
};

shared_ram20_region: memory@2f88f000 {
compatible = "nordic,owned-memory";
reg = <0x2f88f000 DT_SIZE_K(4)>;
status = "disabled";
perm-read;
perm-write;
#address-cells = <1>;
#size-cells = <1>;
ranges = <0x0 0x2f88f000 0x1000>;

cpuapp_cpusys_ipc_shm: memory@ce0 {
reg = <0xce0 0x80>;
};

cpusys_cpuapp_ipc_shm: memory@d60 {
reg = <0xd60 0x80>;
};

cpurad_cpusys_ipc_shm: memory@e00 {
reg = <0xe00 0x80>;
};

cpusys_cpurad_ipc_shm: memory@e80 {
reg = <0xe80 0x80>;
};
};

cpuppr_ram3x_region: memory@2fc00000 {
compatible = "nordic,owned-memory";
reg = <0x2fc00000 DT_SIZE_K(28)>;
Expand All @@ -15,7 +105,7 @@
perm-execute;
};

ram3x_dma_region: memory@2fc07000 {
shared_ram3x_region: memory@2fc07000 {
compatible = "nordic,owned-memory";
reg = <0x2fc07000 DT_SIZE_K(4)>;
status = "disabled";
Expand All @@ -25,6 +115,14 @@
#size-cells = <1>;
ranges = <0x0 0x2fc07000 0x1000>;

cpuapp_cpuppr_ipc_shm: memory@0 {
reg = <0x0 0x340>;
};

cpuppr_cpuapp_ipc_shm: memory@340 {
reg = <0x340 0x340>;
};

cpuapp_dma_region: memory@680 {
compatible = "zephyr,memory-region";
reg = <0x680 DT_SIZE_K(2)>;
Expand Down
37 changes: 35 additions & 2 deletions boards/nordic/nrf54h20pdk/nrf54h20pdk_nrf54h20_cpuapp.dts
Expand Up @@ -8,8 +8,11 @@

#include <nordic/nrf54h20_enga_cpuapp.dtsi>
#include "nrf54h20pdk_nrf54h20-memory_map.dtsi"
#include "nrf54h20pdk_nrf54h20-ipc_conf.dtsi"
#include "nrf54h20pdk_nrf54h20-pinctrl.dtsi"

/delete-node/ &cpusec_cpurad_ipc;

/ {
compatible = "nordic,nrf54h20pdk_nrf54h20-cpuapp";
model = "Nordic nRF54H20 PDK nRF54H20 Application MCU";
Expand All @@ -18,7 +21,7 @@
zephyr,console = &uart136;
zephyr,code-partition = &cpuapp_slot0_partition;
zephyr,flash = &mram1x;
zephyr,sram = &cpuapp_ram0;
zephyr,sram = &cpuapp_data;
};

aliases {
Expand Down Expand Up @@ -85,10 +88,40 @@
};
};

&ram3x_dma_region {
&cpuapp_ram0x_region {
status = "okay";
};

&shared_ram3x_region {
status = "okay";
};

&cpuapp_bellboard {
interrupts = <96 NRF_DEFAULT_IRQ_PRIORITY>;
interrupt-names = "irq0";
/* irq0: 0: cpuapp-cpusec, 13: cpuapp-cpuppr, 18: cpuapp-cpurad */
nordic,interrupt-mapping = <0x00042001 0>;
};

&cpusec_cpuapp_ipc {
mbox-names = "tx", "rx";
tx-region = <&cpuapp_cpusec_ipc_shm>;
rx-region = <&cpusec_cpuapp_ipc_shm>;
};

&cpuapp_cpurad_ipc {
compatible = "zephyr,ipc-icmsg-me-initiator";
mbox-names = "rx", "tx";
tx-region = <&cpuapp_cpurad_ipc_shm>;
rx-region = <&cpurad_cpuapp_ipc_shm>;
};

&cpuapp_cpuppr_ipc {
mbox-names = "rx", "tx";
tx-region = <&cpuapp_cpuppr_ipc_shm>;
rx-region = <&cpuppr_cpuapp_ipc_shm>;
};

&cpuapp_dma_region {
status = "okay";
};
Expand Down
11 changes: 11 additions & 0 deletions boards/nordic/nrf54h20pdk/nrf54h20pdk_nrf54h20_cpuppr.dts
Expand Up @@ -8,8 +8,13 @@

#include <nordic/nrf54h20_enga_cpuppr.dtsi>
#include "nrf54h20pdk_nrf54h20-memory_map.dtsi"
#include "nrf54h20pdk_nrf54h20-ipc_conf.dtsi"
#include "nrf54h20pdk_nrf54h20-pinctrl.dtsi"

/delete-node/ &cpuapp_cpurad_ipc;
/delete-node/ &cpusec_cpuapp_ipc;
/delete-node/ &cpusec_cpurad_ipc;

/ {
compatible = "nordic,nrf54h20pdk_nrf54h20-cpuppr";
model = "Nordic nRF54H20 PDK nRF54H20 Peripheral Processor MCU";
Expand All @@ -24,6 +29,12 @@
};
};

&cpuapp_cpuppr_ipc {
mbox-names = "tx", "rx";
tx-region = <&cpuppr_cpuapp_ipc_shm>;
rx-region = <&cpuapp_cpuppr_ipc_shm>;
};

&grtc {
status = "okay";
owned-channels = <5>;
Expand Down
26 changes: 25 additions & 1 deletion boards/nordic/nrf54h20pdk/nrf54h20pdk_nrf54h20_cpurad.dts
Expand Up @@ -8,8 +8,12 @@

#include <nordic/nrf54h20_enga_cpurad.dtsi>
#include "nrf54h20pdk_nrf54h20-memory_map.dtsi"
#include "nrf54h20pdk_nrf54h20-ipc_conf.dtsi"
#include "nrf54h20pdk_nrf54h20-pinctrl.dtsi"

/delete-node/ &cpuapp_cpuppr_ipc;
/delete-node/ &cpusec_cpuapp_ipc;

/ {
compatible = "nordic,nrf54h20pdk_nrf54h20-cpurad";
model = "Nordic nRF54H20 PDK nRF54H20 Radio MCU";
Expand All @@ -22,10 +26,30 @@
};
};

&ram3x_dma_region {
&shared_ram3x_region {
status = "okay";
};

&cpurad_bellboard {
interrupts = <96 NRF_DEFAULT_IRQ_PRIORITY>;
interrupt-names = "irq0";
/* irq0: 0: cpurad-cpusec, 12: cpurad-cpuapp */
nordic,interrupt-mapping = <0x00001001 0>;
};

&cpusec_cpurad_ipc {
mbox-names = "tx", "rx";
tx-region = <&cpurad_cpusec_ipc_shm>;
rx-region = <&cpusec_cpurad_ipc_shm>;
};

&cpuapp_cpurad_ipc {
compatible = "zephyr,ipc-icmsg-me-follower";
mbox-names = "tx", "rx";
tx-region = <&cpurad_cpuapp_ipc_shm>;
rx-region = <&cpuapp_cpurad_ipc_shm>;
};

&cpurad_dma_region {
status = "okay";
};
Expand Down
4 changes: 4 additions & 0 deletions drivers/mbox/CMakeLists.txt
Expand Up @@ -10,3 +10,7 @@ zephyr_library_sources_ifdef(CONFIG_MBOX_NXP_S32_MRU mbox_nxp_s32_mru.c)
zephyr_library_sources_ifdef(CONFIG_MBOX_NXP_IMX_MU mbox_nxp_imx_mu.c)
zephyr_library_sources_ifdef(CONFIG_MBOX_NXP_MAILBOX mbox_nxp_mailbox.c)
zephyr_library_sources_ifdef(CONFIG_MBOX_ANDES_PLIC_SW mbox_andes_plic_sw.c)
zephyr_library_sources_ifdef(CONFIG_MBOX_NRF_VEVIF_LOCAL mbox_nrf_vevif_local.c)
zephyr_library_sources_ifdef(CONFIG_MBOX_NRF_VEVIF_REMOTE mbox_nrf_vevif_remote.c)
zephyr_library_sources_ifdef(CONFIG_MBOX_NRF_BELLBOARD_LOCAL mbox_nrf_bellboard_local.c)
zephyr_library_sources_ifdef(CONFIG_MBOX_NRF_BELLBOARD_REMOTE mbox_nrf_bellboard_remote.c)
2 changes: 2 additions & 0 deletions drivers/mbox/Kconfig
Expand Up @@ -17,6 +17,8 @@ source "drivers/mbox/Kconfig.nxp_s32"
source "drivers/mbox/Kconfig.nxp_imx"
source "drivers/mbox/Kconfig.nxp_mailbox"
source "drivers/mbox/Kconfig.andes"
source "drivers/mbox/Kconfig.nrf_vevif"
source "drivers/mbox/Kconfig.nrf_bellboard"

config MBOX_INIT_PRIORITY
int "MBOX init priority"
Expand Down
16 changes: 16 additions & 0 deletions drivers/mbox/Kconfig.nrf_bellboard
@@ -0,0 +1,16 @@
# Copyright (c) 2024 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

config MBOX_NRF_BELLBOARD_LOCAL
bool "nRF BELLBOARD local driver"
depends on DT_HAS_NORDIC_NRF_BELLBOARD_LOCAL_ENABLED
default y
help
Mailbox driver for local Nordic nRF BELLBOARD

config MBOX_NRF_BELLBOARD_REMOTE
bool "nRF BELLBOARD remote driver"
depends on DT_HAS_NORDIC_NRF_BELLBOARD_REMOTE_ENABLED
default y
help
Mailbox driver for remote Nordic nRF BELLBOARD
16 changes: 16 additions & 0 deletions drivers/mbox/Kconfig.nrf_vevif
@@ -0,0 +1,16 @@
# Copyright (c) 2024 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

config MBOX_NRF_VEVIF_LOCAL
bool "nRF VEVIF local driver"
depends on DT_HAS_NORDIC_NRF_VEVIF_LOCAL_ENABLED
default y
help
Mailbox driver for local Nordic nRF VEVIF (VPR Event Interface)

config MBOX_NRF_VEVIF_REMOTE
bool "nRF VEVIF remote driver"
depends on DT_HAS_NORDIC_NRF_VEVIF_REMOTE_ENABLED
default y
help
Mailbox driver for remote Nordic nRF VEVIF (VPR Event Interface)