1*4882a593Smuzhiyun* Freescale enhanced Direct Memory Access(eDMA) Controller 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun The eDMA channels have multiplex capability by programmble memory-mapped 4*4882a593Smuzhiyunregisters. channels are split into two groups, called DMAMUX0 and DMAMUX1, 5*4882a593Smuzhiyunspecific DMA request source can only be multiplexed by any channel of certain 6*4882a593Smuzhiyungroup, DMAMUX0 or DMAMUX1, but not both. 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun* eDMA Controller 9*4882a593SmuzhiyunRequired properties: 10*4882a593Smuzhiyun- compatible : 11*4882a593Smuzhiyun - "fsl,vf610-edma" for eDMA used similar to that on Vybrid vf610 SoC 12*4882a593Smuzhiyun - "fsl,imx7ulp-edma" for eDMA2 used similar to that on i.mx7ulp 13*4882a593Smuzhiyun - "fsl,ls1028a-edma" followed by "fsl,vf610-edma" for eDMA used on the 14*4882a593Smuzhiyun LS1028A SoC. 15*4882a593Smuzhiyun- reg : Specifies base physical address(s) and size of the eDMA registers. 16*4882a593Smuzhiyun The 1st region is eDMA control register's address and size. 17*4882a593Smuzhiyun The 2nd and the 3rd regions are programmable channel multiplexing 18*4882a593Smuzhiyun control register's address and size. 19*4882a593Smuzhiyun- interrupts : A list of interrupt-specifiers, one for each entry in 20*4882a593Smuzhiyun interrupt-names on vf610 similar SoC. But for i.mx7ulp per channel 21*4882a593Smuzhiyun per transmission interrupt, total 16 channel interrupt and 1 22*4882a593Smuzhiyun error interrupt(located in the last), no interrupt-names list on 23*4882a593Smuzhiyun i.mx7ulp for clean on dts. 24*4882a593Smuzhiyun- #dma-cells : Must be <2>. 25*4882a593Smuzhiyun The 1st cell specifies the DMAMUX(0 for DMAMUX0 and 1 for DMAMUX1). 26*4882a593Smuzhiyun Specific request source can only be multiplexed by specific channels 27*4882a593Smuzhiyun group called DMAMUX. 28*4882a593Smuzhiyun The 2nd cell specifies the request source(slot) ID. 29*4882a593Smuzhiyun See the SoC's reference manual for all the supported request sources. 30*4882a593Smuzhiyun- dma-channels : Number of channels supported by the controller 31*4882a593Smuzhiyun- clock-names : A list of channel group clock names. Should contain: 32*4882a593Smuzhiyun "dmamux0" - clock name of mux0 group 33*4882a593Smuzhiyun "dmamux1" - clock name of mux1 group 34*4882a593Smuzhiyun Note: No dmamux0 on i.mx7ulp, but another 'dma' clk added on i.mx7ulp. 35*4882a593Smuzhiyun- clocks : A list of phandle and clock-specifier pairs, one for each entry in 36*4882a593Smuzhiyun clock-names. 37*4882a593Smuzhiyun 38*4882a593SmuzhiyunOptional properties: 39*4882a593Smuzhiyun- big-endian: If present registers and hardware scatter/gather descriptors 40*4882a593Smuzhiyun of the eDMA are implemented in big endian mode, otherwise in little 41*4882a593Smuzhiyun mode. 42*4882a593Smuzhiyun- interrupt-names : Should contain the below on vf610 similar SoC but not used 43*4882a593Smuzhiyun on i.mx7ulp similar SoC: 44*4882a593Smuzhiyun "edma-tx" - the transmission interrupt 45*4882a593Smuzhiyun "edma-err" - the error interrupt 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun 48*4882a593SmuzhiyunExamples: 49*4882a593Smuzhiyun 50*4882a593Smuzhiyunedma0: dma-controller@40018000 { 51*4882a593Smuzhiyun #dma-cells = <2>; 52*4882a593Smuzhiyun compatible = "fsl,vf610-edma"; 53*4882a593Smuzhiyun reg = <0x40018000 0x2000>, 54*4882a593Smuzhiyun <0x40024000 0x1000>, 55*4882a593Smuzhiyun <0x40025000 0x1000>; 56*4882a593Smuzhiyun interrupts = <0 8 IRQ_TYPE_LEVEL_HIGH>, 57*4882a593Smuzhiyun <0 9 IRQ_TYPE_LEVEL_HIGH>; 58*4882a593Smuzhiyun interrupt-names = "edma-tx", "edma-err"; 59*4882a593Smuzhiyun dma-channels = <32>; 60*4882a593Smuzhiyun clock-names = "dmamux0", "dmamux1"; 61*4882a593Smuzhiyun clocks = <&clks VF610_CLK_DMAMUX0>, 62*4882a593Smuzhiyun <&clks VF610_CLK_DMAMUX1>; 63*4882a593Smuzhiyun}; /* vf610 */ 64*4882a593Smuzhiyun 65*4882a593Smuzhiyunedma1: dma-controller@40080000 { 66*4882a593Smuzhiyun #dma-cells = <2>; 67*4882a593Smuzhiyun compatible = "fsl,imx7ulp-edma"; 68*4882a593Smuzhiyun reg = <0x40080000 0x2000>, 69*4882a593Smuzhiyun <0x40210000 0x1000>; 70*4882a593Smuzhiyun dma-channels = <32>; 71*4882a593Smuzhiyun interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>, 72*4882a593Smuzhiyun <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>, 73*4882a593Smuzhiyun <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>, 74*4882a593Smuzhiyun <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>, 75*4882a593Smuzhiyun <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>, 76*4882a593Smuzhiyun <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>, 77*4882a593Smuzhiyun <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>, 78*4882a593Smuzhiyun <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>, 79*4882a593Smuzhiyun <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>, 80*4882a593Smuzhiyun <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>, 81*4882a593Smuzhiyun <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>, 82*4882a593Smuzhiyun <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>, 83*4882a593Smuzhiyun <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>, 84*4882a593Smuzhiyun <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>, 85*4882a593Smuzhiyun <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>, 86*4882a593Smuzhiyun <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>, 87*4882a593Smuzhiyun /* last is eDMA2-ERR interrupt */ 88*4882a593Smuzhiyun <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>; 89*4882a593Smuzhiyun clock-names = "dma", "dmamux0"; 90*4882a593Smuzhiyun clocks = <&pcc2 IMX7ULP_CLK_DMA1>, 91*4882a593Smuzhiyun <&pcc2 IMX7ULP_CLK_DMA_MUX1>; 92*4882a593Smuzhiyun}; /* i.mx7ulp */ 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun* DMA clients 95*4882a593SmuzhiyunDMA client drivers that uses the DMA function must use the format described 96*4882a593Smuzhiyunin the dma.txt file, using a two-cell specifier for each channel: the 1st 97*4882a593Smuzhiyunspecifies the channel group(DMAMUX) in which this request can be multiplexed, 98*4882a593Smuzhiyunand the 2nd specifies the request source. 99*4882a593Smuzhiyun 100*4882a593SmuzhiyunExamples: 101*4882a593Smuzhiyun 102*4882a593Smuzhiyunsai2: sai@40031000 { 103*4882a593Smuzhiyun compatible = "fsl,vf610-sai"; 104*4882a593Smuzhiyun reg = <0x40031000 0x1000>; 105*4882a593Smuzhiyun interrupts = <0 86 IRQ_TYPE_LEVEL_HIGH>; 106*4882a593Smuzhiyun clock-names = "sai"; 107*4882a593Smuzhiyun clocks = <&clks VF610_CLK_SAI2>; 108*4882a593Smuzhiyun dma-names = "tx", "rx"; 109*4882a593Smuzhiyun dmas = <&edma0 0 21>, 110*4882a593Smuzhiyun <&edma0 0 20>; 111*4882a593Smuzhiyun}; 112