1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/dma/mediatek,uart-dma.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: MediaTek UART APDMA controller
8
9maintainers:
10  - Long Cheng <long.cheng@mediatek.com>
11
12description: |
13  The MediaTek UART APDMA controller provides DMA capabilities
14  for the UART peripheral bus.
15
16allOf:
17  - $ref: dma-controller.yaml#
18
19properties:
20  compatible:
21    oneOf:
22      - items:
23          - enum:
24              - mediatek,mt2712-uart-dma
25              - mediatek,mt6795-uart-dma
26              - mediatek,mt8365-uart-dma
27              - mediatek,mt8516-uart-dma
28          - const: mediatek,mt6577-uart-dma
29      - enum:
30          - mediatek,mt6577-uart-dma
31
32  reg:
33    minItems: 1
34    maxItems: 16
35
36  interrupts:
37    description: |
38      TX, RX interrupt lines for each UART APDMA channel
39    minItems: 1
40    maxItems: 16
41
42  clocks:
43    description: Must contain one entry for the APDMA main clock
44    maxItems: 1
45
46  clock-names:
47    const: apdma
48
49  "#dma-cells":
50    const: 1
51    description: |
52      The first cell specifies the UART APDMA channel number
53
54  dma-requests:
55    description: |
56      Number of virtual channels of the UART APDMA controller
57    maximum: 16
58
59  mediatek,dma-33bits:
60    type: boolean
61    description: Enable 33-bits UART APDMA support
62
63required:
64  - compatible
65  - reg
66  - interrupts
67
68additionalProperties: false
69
70if:
71  not:
72    required:
73      - dma-requests
74then:
75  properties:
76    interrupts:
77      maxItems: 8
78    reg:
79      maxItems: 8
80
81examples:
82  - |
83    #include <dt-bindings/interrupt-controller/arm-gic.h>
84    #include <dt-bindings/clock/mt2712-clk.h>
85    soc {
86        #address-cells = <2>;
87        #size-cells = <2>;
88
89        apdma: dma-controller@11000400 {
90            compatible = "mediatek,mt2712-uart-dma",
91                         "mediatek,mt6577-uart-dma";
92            reg = <0 0x11000400 0 0x80>,
93                  <0 0x11000480 0 0x80>,
94                  <0 0x11000500 0 0x80>,
95                  <0 0x11000580 0 0x80>,
96                  <0 0x11000600 0 0x80>,
97                  <0 0x11000680 0 0x80>,
98                  <0 0x11000700 0 0x80>,
99                  <0 0x11000780 0 0x80>,
100                  <0 0x11000800 0 0x80>,
101                  <0 0x11000880 0 0x80>,
102                  <0 0x11000900 0 0x80>,
103                  <0 0x11000980 0 0x80>;
104            interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_LOW>,
105                         <GIC_SPI 104 IRQ_TYPE_LEVEL_LOW>,
106                         <GIC_SPI 105 IRQ_TYPE_LEVEL_LOW>,
107                         <GIC_SPI 106 IRQ_TYPE_LEVEL_LOW>,
108                         <GIC_SPI 107 IRQ_TYPE_LEVEL_LOW>,
109                         <GIC_SPI 108 IRQ_TYPE_LEVEL_LOW>,
110                         <GIC_SPI 109 IRQ_TYPE_LEVEL_LOW>,
111                         <GIC_SPI 110 IRQ_TYPE_LEVEL_LOW>,
112                         <GIC_SPI 111 IRQ_TYPE_LEVEL_LOW>,
113                         <GIC_SPI 112 IRQ_TYPE_LEVEL_LOW>,
114                         <GIC_SPI 113 IRQ_TYPE_LEVEL_LOW>,
115                         <GIC_SPI 114 IRQ_TYPE_LEVEL_LOW>;
116            dma-requests = <12>;
117            clocks = <&pericfg CLK_PERI_AP_DMA>;
118            clock-names = "apdma";
119            mediatek,dma-33bits;
120            #dma-cells = <1>;
121        };
122    };
123
124...
125