blob: d54140f18d34056b04253c1592c22e2b0ee3ccab [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/dma/fsl,edma.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Freescale enhanced Direct Memory Access(eDMA) Controller
8
9description: |
10 The eDMA channels have multiplex capability by programmable
11 memory-mapped registers. channels are split into two groups, called
12 DMAMUX0 and DMAMUX1, specific DMA request source can only be multiplexed
13 by any channel of certain group, DMAMUX0 or DMAMUX1, but not both.
14
15maintainers:
16 - Peng Fan <peng.fan@nxp.com>
17
18properties:
19 compatible:
20 oneOf:
21 - enum:
22 - fsl,vf610-edma
23 - fsl,imx7ulp-edma
Tom Rini53633a82024-02-29 12:33:36 -050024 - fsl,imx8qm-edma
Tom Rini762f85b2024-07-20 11:15:10 -060025 - fsl,imx8ulp-edma
Tom Rini53633a82024-02-29 12:33:36 -050026 - fsl,imx93-edma3
27 - fsl,imx93-edma4
Tom Rini6bb92fc2024-05-20 09:54:58 -060028 - fsl,imx95-edma5
Tom Rini53633a82024-02-29 12:33:36 -050029 - items:
30 - const: fsl,ls1028a-edma
31 - const: fsl,vf610-edma
32
33 reg:
34 minItems: 1
35 maxItems: 3
36
37 interrupts:
38 minItems: 1
39 maxItems: 64
40
41 interrupt-names:
42 minItems: 1
43 maxItems: 64
44
45 "#dma-cells":
Tom Rini762f85b2024-07-20 11:15:10 -060046 description: |
47 Specifies the number of cells needed to encode an DMA channel.
48
49 Encode for cells number 2:
50 cell 0: index of dma channel mux instance.
51 cell 1: peripheral dma request id.
52
53 Encode for cells number 3:
54 cell 0: peripheral dma request id.
55 cell 1: dma channel priority.
56 cell 2: bitmask, defined at include/dt-bindings/dma/fsl-edma.h
Tom Rini53633a82024-02-29 12:33:36 -050057 enum:
58 - 2
59 - 3
60
61 dma-channels:
Tom Rini762f85b2024-07-20 11:15:10 -060062 minimum: 1
63 maximum: 64
Tom Rini53633a82024-02-29 12:33:36 -050064
65 clocks:
66 minItems: 1
Tom Rini762f85b2024-07-20 11:15:10 -060067 maxItems: 33
Tom Rini53633a82024-02-29 12:33:36 -050068
69 clock-names:
70 minItems: 1
Tom Rini762f85b2024-07-20 11:15:10 -060071 maxItems: 33
72
73 power-domains:
74 description:
75 The number of power domains matches the number of channels, arranged
76 in ascending order according to their associated DMA channels.
77 minItems: 1
78 maxItems: 64
Tom Rini53633a82024-02-29 12:33:36 -050079
80 big-endian:
81 description: |
82 If present registers and hardware scatter/gather descriptors of the
83 eDMA are implemented in big endian mode, otherwise in little mode.
84 type: boolean
85
86required:
87 - "#dma-cells"
88 - compatible
89 - reg
90 - interrupts
Tom Rini53633a82024-02-29 12:33:36 -050091 - dma-channels
92
93allOf:
94 - $ref: dma-controller.yaml#
95 - if:
96 properties:
97 compatible:
98 contains:
99 enum:
Tom Rini53633a82024-02-29 12:33:36 -0500100 - fsl,imx8qm-edma
101 - fsl,imx93-edma3
102 - fsl,imx93-edma4
Tom Rini6bb92fc2024-05-20 09:54:58 -0600103 - fsl,imx95-edma5
Tom Rini53633a82024-02-29 12:33:36 -0500104 then:
105 properties:
106 "#dma-cells":
107 const: 3
108 # It is not necessary to write the interrupt name for each channel.
109 # instead, you can simply maintain the sequential IRQ numbers as
110 # defined for the DMA channels.
111 interrupt-names: false
112 clock-names:
113 items:
114 - const: dma
115 clocks:
116 maxItems: 1
117
118 - if:
119 properties:
120 compatible:
121 contains:
122 const: fsl,vf610-edma
123 then:
124 properties:
125 clocks:
126 minItems: 2
Tom Rini762f85b2024-07-20 11:15:10 -0600127 maxItems: 2
Tom Rini53633a82024-02-29 12:33:36 -0500128 clock-names:
129 items:
130 - const: dmamux0
131 - const: dmamux1
132 interrupts:
133 minItems: 2
134 maxItems: 2
135 interrupt-names:
136 items:
137 - const: edma-tx
138 - const: edma-err
139 reg:
140 minItems: 2
141 maxItems: 3
142 "#dma-cells":
143 const: 2
144 dma-channels:
145 const: 32
146
147 - if:
148 properties:
149 compatible:
150 contains:
151 const: fsl,imx7ulp-edma
152 then:
153 properties:
154 clock:
155 minItems: 2
Tom Rini762f85b2024-07-20 11:15:10 -0600156 maxItems: 2
Tom Rini53633a82024-02-29 12:33:36 -0500157 clock-names:
158 items:
159 - const: dma
160 - const: dmamux0
161 interrupts:
162 minItems: 2
163 maxItems: 17
164 reg:
165 minItems: 2
166 maxItems: 2
167 "#dma-cells":
168 const: 2
169 dma-channels:
170 const: 32
171
Tom Rini762f85b2024-07-20 11:15:10 -0600172 - if:
173 properties:
174 compatible:
175 contains:
176 const: fsl,imx8ulp-edma
177 then:
178 properties:
179 clocks:
180 minItems: 33
181 clock-names:
182 minItems: 33
183 items:
184 oneOf:
185 - const: dma
186 - pattern: "^ch(0[0-9]|[1-2][0-9]|3[01])$"
187
188 interrupt-names: false
189 interrupts:
190 minItems: 32
191 "#dma-cells":
192 const: 3
193
194 - if:
195 properties:
196 compatible:
197 contains:
198 enum:
199 - fsl,vf610-edma
200 - fsl,imx7ulp-edma
201 - fsl,imx93-edma3
202 - fsl,imx93-edma4
203 - fsl,imx95-edma5
204 - fsl,imx8ulp-edma
205 - fsl,ls1028a-edma
206 then:
207 required:
208 - clocks
209
210 - if:
211 properties:
212 compatible:
213 contains:
214 enum:
215 - fsl,imx8qm-adma
216 - fsl,imx8qm-edma
217 then:
218 required:
219 - power-domains
220 else:
221 properties:
222 power-domains: false
223
Tom Rini53633a82024-02-29 12:33:36 -0500224unevaluatedProperties: false
225
226examples:
227 - |
228 #include <dt-bindings/interrupt-controller/arm-gic.h>
229 #include <dt-bindings/clock/vf610-clock.h>
230
231 edma0: dma-controller@40018000 {
232 #dma-cells = <2>;
233 compatible = "fsl,vf610-edma";
234 reg = <0x40018000 0x2000>,
235 <0x40024000 0x1000>,
236 <0x40025000 0x1000>;
237 interrupts = <0 8 IRQ_TYPE_LEVEL_HIGH>,
238 <0 9 IRQ_TYPE_LEVEL_HIGH>;
239 interrupt-names = "edma-tx", "edma-err";
240 dma-channels = <32>;
241 clock-names = "dmamux0", "dmamux1";
242 clocks = <&clks VF610_CLK_DMAMUX0>, <&clks VF610_CLK_DMAMUX1>;
243 };
244
245 - |
246 #include <dt-bindings/interrupt-controller/arm-gic.h>
247 #include <dt-bindings/clock/imx7ulp-clock.h>
248
249 edma1: dma-controller@40080000 {
250 #dma-cells = <2>;
251 compatible = "fsl,imx7ulp-edma";
252 reg = <0x40080000 0x2000>,
253 <0x40210000 0x1000>;
254 dma-channels = <32>;
255 interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
256 <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>,
257 <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>,
258 <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>,
259 <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>,
260 <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>,
261 <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>,
262 <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>,
263 <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>,
264 <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>,
265 <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>,
266 <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>,
267 <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>,
268 <GIC_SPI 13 IRQ_TYPE_LEVEL_HIGH>,
269 <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>,
270 <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
271 /* last is eDMA2-ERR interrupt */
272 <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>;
273 clock-names = "dma", "dmamux0";
274 clocks = <&pcc2 IMX7ULP_CLK_DMA1>, <&pcc2 IMX7ULP_CLK_DMA_MUX1>;
275 };
276
277 - |
278 #include <dt-bindings/interrupt-controller/arm-gic.h>
Tom Rini762f85b2024-07-20 11:15:10 -0600279 #include <dt-bindings/firmware/imx/rsrc.h>
Tom Rini53633a82024-02-29 12:33:36 -0500280
Tom Rini762f85b2024-07-20 11:15:10 -0600281 dma-controller@5a9f0000 {
282 compatible = "fsl,imx8qm-edma";
283 reg = <0x5a9f0000 0x90000>;
Tom Rini53633a82024-02-29 12:33:36 -0500284 #dma-cells = <3>;
Tom Rini762f85b2024-07-20 11:15:10 -0600285 dma-channels = <8>;
286 interrupts = <GIC_SPI 424 IRQ_TYPE_LEVEL_HIGH>,
287 <GIC_SPI 425 IRQ_TYPE_LEVEL_HIGH>,
288 <GIC_SPI 426 IRQ_TYPE_LEVEL_HIGH>,
289 <GIC_SPI 427 IRQ_TYPE_LEVEL_HIGH>,
290 <GIC_SPI 428 IRQ_TYPE_LEVEL_HIGH>,
291 <GIC_SPI 429 IRQ_TYPE_LEVEL_HIGH>,
292 <GIC_SPI 430 IRQ_TYPE_LEVEL_HIGH>,
293 <GIC_SPI 431 IRQ_TYPE_LEVEL_HIGH>;
294 power-domains = <&pd IMX_SC_R_DMA_3_CH0>,
295 <&pd IMX_SC_R_DMA_3_CH1>,
296 <&pd IMX_SC_R_DMA_3_CH2>,
297 <&pd IMX_SC_R_DMA_3_CH3>,
298 <&pd IMX_SC_R_DMA_3_CH4>,
299 <&pd IMX_SC_R_DMA_3_CH5>,
300 <&pd IMX_SC_R_DMA_3_CH6>,
301 <&pd IMX_SC_R_DMA_3_CH7>;
Tom Rini53633a82024-02-29 12:33:36 -0500302 };