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