diff --git a/drivers/dma/Kconfig.mcux_edma b/drivers/dma/Kconfig.mcux_edma index 2eaa79d970a25..1191fdba77b17 100644 --- a/drivers/dma/Kconfig.mcux_edma +++ b/drivers/dma/Kconfig.mcux_edma @@ -1,10 +1,11 @@ # DMA configuration options -# Copyright (c) 2020, NXP +# Copyright (c) 2020, 2025 NXP # SPDX-License-Identifier: Apache-2.0 EDMA_COMPAT := $(DT_COMPAT_NXP_MCUX_EDMA) REV_PROP := nxp,version +MUX_TYPE := mux-type config DMA_MCUX_EDMA bool "MCUX DMA driver" @@ -35,6 +36,20 @@ config DMA_MCUX_EDMA_V5 help DMA version 5 driver for MCUX series SoCs. +config DMA_MCUX_EDMA_DMAMUX + bool "DMAMUX support" + default y + depends on $(dt_compat_any_has_prop,$(EDMA_COMPAT),$(MUX_TYPE),DMAMUX) + help + Enable DMAMUX support for EDMA controller. + +config DMA_MCUX_EDMA_TRGMUX + bool "TRGMUX support" + default y + depends on $(dt_compat_any_has_prop,$(EDMA_COMPAT),$(MUX_TYPE),TRGMUX) + help + Enable TRGMUX support for EDMA controller. + config DMA_MCUX_MAX_DATA_SIZE int default 64 if DMA_MCUX_EDMA_V5 || DMA_MCUX_EDMA_V4 || DMA_MCUX_EDMA_V3 diff --git a/dts/arm/nxp/nxp_k6x.dtsi b/dts/arm/nxp/nxp_k6x.dtsi index 05fc5209a3ad8..54c5078483b66 100644 --- a/dts/arm/nxp/nxp_k6x.dtsi +++ b/dts/arm/nxp/nxp_k6x.dtsi @@ -527,6 +527,7 @@ nxp,version = <2>; dma-channels = <16>; dma-requests = <64>; + mux-type = "DMAMUX"; nxp,mem2mem; reg = <0x40008000 0x1000>, <0x40021000 0x1000>; diff --git a/dts/arm/nxp/nxp_k8x.dtsi b/dts/arm/nxp/nxp_k8x.dtsi index 351a6f750efcd..7bda1212c584f 100644 --- a/dts/arm/nxp/nxp_k8x.dtsi +++ b/dts/arm/nxp/nxp_k8x.dtsi @@ -430,6 +430,7 @@ nxp,version = <2>; dma-channels = <16>; dma-requests = <64>; + mux-type = "DMAMUX"; nxp,mem2mem; reg = <0x40008000 0x1000>, <0x40021000 0x1000>; diff --git a/dts/arm/nxp/nxp_ke1xf.dtsi b/dts/arm/nxp/nxp_ke1xf.dtsi index 87ade664ce622..203dc784c682f 100644 --- a/dts/arm/nxp/nxp_ke1xf.dtsi +++ b/dts/arm/nxp/nxp_ke1xf.dtsi @@ -102,6 +102,7 @@ nxp,version = <2>; dma-channels = <16>; dma-requests = <64>; + mux-type = "DMAMUX"; nxp,mem2mem; reg = <0x40008000 0x1000>, <0x40021000 0x1000>; interrupts = <0 0>, <1 0>, <2 0>, <3 0>, diff --git a/dts/arm/nxp/nxp_ke1xz.dtsi b/dts/arm/nxp/nxp_ke1xz.dtsi index 7b182ed89e1a0..00914ca0578d6 100644 --- a/dts/arm/nxp/nxp_ke1xz.dtsi +++ b/dts/arm/nxp/nxp_ke1xz.dtsi @@ -495,6 +495,7 @@ nxp,version = <2>; dma-channels = <8>; dma-requests = <64>; + mux-type = "DMAMUX"; nxp,mem2mem; reg = <0x40008000 0x1000>, <0x40021000 0x1000>; interrupts = <0 0>, <1 0>, <2 0>, <3 0>, diff --git a/dts/arm/nxp/nxp_mcxe24x_common.dtsi b/dts/arm/nxp/nxp_mcxe24x_common.dtsi index 3fa43feb3c76d..e17c5eca25768 100644 --- a/dts/arm/nxp/nxp_mcxe24x_common.dtsi +++ b/dts/arm/nxp/nxp_mcxe24x_common.dtsi @@ -178,6 +178,7 @@ nxp,version = <2>; dma-channels = <16>; dma-requests = <64>; + mux-type = "DMAMUX"; nxp,mem2mem; reg = <0x40008000 0x1000>, <0x40021000 0x1000>; interrupts = <0 0>, <1 0>, <2 0>, <3 0>, diff --git a/dts/arm/nxp/nxp_mcxw7x_common.dtsi b/dts/arm/nxp/nxp_mcxw7x_common.dtsi index 7b25f3eb406d3..0117adf8af71a 100644 --- a/dts/arm/nxp/nxp_mcxw7x_common.dtsi +++ b/dts/arm/nxp/nxp_mcxw7x_common.dtsi @@ -431,6 +431,7 @@ nxp,version = <3>; dma-channels = <16>; dma-requests = <64>; + mux-type = "TRGMUX"; reg = <0x2000 0x140>; clocks = <&scg SCG_K4_EDMA_CLK 0x410>; interrupts = <2 0>, <3 0>, <4 0>, <5 0>, diff --git a/dts/arm/nxp/nxp_rt10xx.dtsi b/dts/arm/nxp/nxp_rt10xx.dtsi index 24fd38c070ca4..5f0c29346b72c 100644 --- a/dts/arm/nxp/nxp_rt10xx.dtsi +++ b/dts/arm/nxp/nxp_rt10xx.dtsi @@ -950,6 +950,7 @@ nxp,version = <2>; dma-channels = <32>; dma-requests = <128>; + mux-type = "DMAMUX"; nxp,mem2mem; nxp,a-on; reg = <0x400E8000 0x4000>, diff --git a/dts/arm/nxp/nxp_rt11xx.dtsi b/dts/arm/nxp/nxp_rt11xx.dtsi index c69d42f0fa629..136001dd783ea 100644 --- a/dts/arm/nxp/nxp_rt11xx.dtsi +++ b/dts/arm/nxp/nxp_rt11xx.dtsi @@ -1040,6 +1040,7 @@ nxp,version = <2>; dma-channels = <32>; dma-requests = <208>; + mux-type = "DMAMUX"; nxp,mem2mem; nxp,a-on; reg = <0x40070000 0x4000>, @@ -1059,6 +1060,7 @@ nxp,version = <2>; dma-channels = <32>; dma-requests = <208>; + mux-type = "DMAMUX"; nxp,mem2mem; nxp,a-on; reg = <0x40c14000 0x4000>, diff --git a/dts/arm/nxp/nxp_s32k344_m7.dtsi b/dts/arm/nxp/nxp_s32k344_m7.dtsi index 21553748ba66f..681099653d58e 100644 --- a/dts/arm/nxp/nxp_s32k344_m7.dtsi +++ b/dts/arm/nxp/nxp_s32k344_m7.dtsi @@ -664,6 +664,7 @@ dma-channels = <32>; dma-requests = <64>; dmamux-reg-offset = <3>; + mux-type = "DMAMUX"; channel-gap = <12 127>; #dma-cells = <2>; nxp,mem2mem; diff --git a/dts/arm/nxp/nxp_s32z27x_r52.dtsi b/dts/arm/nxp/nxp_s32z27x_r52.dtsi index 8395982969c23..8ecc0b782ef53 100644 --- a/dts/arm/nxp/nxp_s32z27x_r52.dtsi +++ b/dts/arm/nxp/nxp_s32z27x_r52.dtsi @@ -1153,6 +1153,7 @@ dma-channels = <32>; dma-requests = <64>; dmamux-reg-offset = <3>; + mux-type = "DMAMUX"; #dma-cells = <2>; nxp,mem2mem; interrupts = , @@ -1198,6 +1199,7 @@ dma-channels = <16>; dma-requests = <64>; dmamux-reg-offset = <3>; + mux-type = "DMAMUX"; #dma-cells = <2>; nxp,mem2mem; interrupts = , @@ -1227,6 +1229,7 @@ dma-channels = <32>; dma-requests = <64>; dmamux-reg-offset = <3>; + mux-type = "DMAMUX"; #dma-cells = <2>; nxp,mem2mem; interrupts = , @@ -1256,6 +1259,7 @@ dma-channels = <32>; dma-requests = <64>; dmamux-reg-offset = <3>; + mux-type = "DMAMUX"; #dma-cells = <2>; nxp,mem2mem; interrupts = , diff --git a/dts/bindings/dma/nxp,mcux-edma.yaml b/dts/bindings/dma/nxp,mcux-edma.yaml index d6e0d0c4f42c4..4ff155206a1b6 100644 --- a/dts/bindings/dma/nxp,mcux-edma.yaml +++ b/dts/bindings/dma/nxp,mcux-edma.yaml @@ -1,4 +1,4 @@ -# Copyright (c) 2020,2024 NXP +# Copyright (c) 2020,2024-2025 NXP # SPDX-License-Identifier: Apache-2.0 description: NXP MCUX EDMA controller @@ -38,6 +38,17 @@ properties: The offset value for obtaining DMAMUX register index from DMAMUX channel. Default value means DMAMUX channel is identical with DMAMUX register index + mux-type: + type: string + enum: + - "DMAMUX" + - "TRGMUX" + description: | + Specifies the type of multiplexer used for DMA request routing. + - DMAMUX: Direct Memory Access Multiplexer + - TRGMUX: Trigger Multiplexer + If not specified, no specific multiplexer type is assumed. + channel-gap: type: array description: | diff --git a/modules/hal_nxp/mcux/mcux-sdk-ng/drivers/drivers.cmake b/modules/hal_nxp/mcux/mcux-sdk-ng/drivers/drivers.cmake index bef6cf367a06f..f244da2bf7ae7 100644 --- a/modules/hal_nxp/mcux/mcux-sdk-ng/drivers/drivers.cmake +++ b/modules/hal_nxp/mcux/mcux-sdk-ng/drivers/drivers.cmake @@ -57,7 +57,8 @@ set_variable_ifdef(CONFIG_COUNTER_MCUX_RTC CONFIG_MCUX_COMPONENT_driver.rtc set_variable_ifdef(CONFIG_DAC_MCUX_DAC CONFIG_MCUX_COMPONENT_driver.dac) set_variable_ifdef(CONFIG_DAC_MCUX_DAC12 CONFIG_MCUX_COMPONENT_driver.dac12) set_variable_ifdef(CONFIG_DAC_MCUX_DAC32 CONFIG_MCUX_COMPONENT_driver.dac32) -set_variable_ifdef(CONFIG_DMA_MCUX_EDMA CONFIG_MCUX_COMPONENT_driver.dmamux) +set_variable_ifdef(CONFIG_DMA_MCUX_EDMA_DMAMUX CONFIG_MCUX_COMPONENT_driver.dmamux) +set_variable_ifdef(CONFIG_DMA_MCUX_EDMA_TRGMUX CONFIG_MCUX_COMPONENT_driver.trgmux) set_variable_ifdef(CONFIG_DMA_MCUX_EDMA CONFIG_MCUX_COMPONENT_driver.edma) set_variable_ifdef(CONFIG_DMA_MCUX_EDMA_V3 CONFIG_MCUX_COMPONENT_driver.dma3) set_variable_ifdef(CONFIG_DMA_MCUX_EDMA_V4 CONFIG_MCUX_COMPONENT_driver.edma4) @@ -232,11 +233,13 @@ if(CONFIG_SOC_MCXW716C OR CONFIG_SOC_MCXW727C OR CONFIG_SOC_MCXN947 OR CONFIG_SO set_variable_ifdef(CONFIG_SOC_FLASH_MCUX CONFIG_MCUX_COMPONENT_driver.flash_k4) endif() +if(CONFIG_DMA_MCUX_EDMA_TRGMUX) + zephyr_include_directories(${MCUX_SDK_NG_DIR}/drivers/trgmux) +endif() + if(CONFIG_SOC_MCXW716C OR CONFIG_SOC_MCXW727C) if(CONFIG_DMA) - zephyr_include_directories(${MCUX_SDK_NG_DIR}/drivers/trgmux) set_variable_ifdef(CONFIG_MBOX_NXP_IMX_MU CONFIG_MCUX_COMPONENT_driver.mu) - set(CONFIG_MCUX_COMPONENT_driver.trgmux ON) endif() endif() @@ -303,13 +306,6 @@ if(CONFIG_SOC_SERIES_IMXRT118X) set_variable_ifdef(CONFIG_WDT_MCUX_RTWDOG CONFIG_MCUX_COMPONENT_driver.src_3) endif() -if(${MCUX_DEVICE} MATCHES "S32K3") - if(CONFIG_DMA) - zephyr_include_directories(${MCUX_SDK_NG_DIR}/drivers/dmamux) - set(CONFIG_MCUX_COMPONENT_driver.dmamux ON) - endif() -endif() - if(CONFIG_SOC_FAMILY_MCXA) set(CONFIG_MCUX_COMPONENT_driver.romapi ON) endif()