Merge tag 'acpi-5.1-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael...
[sfrench/cifs-2.6.git] / Documentation / devicetree / bindings / dma / dma.txt
1 * Generic DMA Controller and DMA request bindings
2
3 Generic binding to provide a way for a driver using DMA Engine to retrieve the
4 DMA request or channel information that goes from a hardware device to a DMA
5 controller.
6
7
8 * DMA controller
9
10 Required property:
11 - #dma-cells:           Must be at least 1. Used to provide DMA controller
12                         specific information. See DMA client binding below for
13                         more details.
14
15 Optional properties:
16 - dma-channels:         Number of DMA channels supported by the controller.
17 - dma-requests:         Number of DMA request signals supported by the
18                         controller.
19 - dma-channel-mask:     Bitmask of available DMA channels in ascending order
20                         that are not reserved by firmware and are available to
21                         the kernel. i.e. first channel corresponds to LSB.
22
23 Example:
24
25         dma: dma@48000000 {
26                 compatible = "ti,omap-sdma";
27                 reg = <0x48000000 0x1000>;
28                 interrupts = <0 12 0x4
29                               0 13 0x4
30                               0 14 0x4
31                               0 15 0x4>;
32                 #dma-cells = <1>;
33                 dma-channels = <32>;
34                 dma-requests = <127>;
35                 dma-channel-mask = <0xfffe>
36         };
37
38 * DMA router
39
40 DMA routers are transparent IP blocks used to route DMA request lines from
41 devices to the DMA controller. Some SoCs (like TI DRA7x) have more peripherals
42 integrated with DMA requests than what the DMA controller can handle directly.
43
44 Required property:
45 - dma-masters:          phandle of the DMA controller or list of phandles for
46                         the DMA controllers the router can direct the signal to.
47 - #dma-cells:           Must be at least 1. Used to provide DMA router specific
48                         information. See DMA client binding below for more
49                         details.
50
51 Optional properties:
52 - dma-requests:         Number of incoming request lines the router can handle.
53 - In the node pointed by the dma-masters:
54         - dma-requests: The router driver might need to look for this in order
55                         to configure the routing.
56
57 Example:
58         sdma_xbar: dma-router@4a002b78 {
59                 compatible = "ti,dra7-dma-crossbar";
60                 reg = <0x4a002b78 0xfc>;
61                 #dma-cells = <1>;
62                 dma-requests = <205>;
63                 ti,dma-safe-map = <0>;
64                 dma-masters = <&sdma>;
65         };
66
67 * DMA client
68
69 Client drivers should specify the DMA property using a phandle to the controller
70 followed by DMA controller specific data.
71
72 Required property:
73 - dmas:                 List of one or more DMA specifiers, each consisting of
74                         - A phandle pointing to DMA controller node
75                         - A number of integer cells, as determined by the
76                           #dma-cells property in the node referenced by phandle
77                           containing DMA controller specific information. This
78                           typically contains a DMA request line number or a
79                           channel number, but can contain any data that is
80                           required for configuring a channel.
81 - dma-names:            Contains one identifier string for each DMA specifier in
82                         the dmas property. The specific strings that can be used
83                         are defined in the binding of the DMA client device.
84                         Multiple DMA specifiers can be used to represent
85                         alternatives and in this case the dma-names for those
86                         DMA specifiers must be identical (see examples).
87
88 Examples:
89
90 1. A device with one DMA read channel, one DMA write channel:
91
92         i2c1: i2c@1 {
93                 ...
94                 dmas = <&dma 2          /* read channel */
95                         &dma 3>;        /* write channel */
96                 dma-names = "rx", "tx";
97                 ...
98         };
99
100 2. A single read-write channel with three alternative DMA controllers:
101
102         dmas = <&dma1 5
103                 &dma2 7
104                 &dma3 2>;
105         dma-names = "rx-tx", "rx-tx", "rx-tx";
106
107 3. A device with three channels, one of which has two alternatives:
108
109         dmas = <&dma1 2                 /* read channel */
110                 &dma1 3                 /* write channel */
111                 &dma2 0                 /* error read */
112                 &dma3 0>;               /* alternative error read */
113         dma-names = "rx", "tx", "error", "error";