114 lines
3.5 KiB
Plaintext
114 lines
3.5 KiB
Plaintext
* Generic DMA Controller and DMA request bindings
|
|
|
|
Generic binding to provide a way for a driver using DMA Engine to retrieve the
|
|
DMA request or channel information that goes from a hardware device to a DMA
|
|
controller.
|
|
|
|
|
|
* DMA controller
|
|
|
|
Required property:
|
|
- #dma-cells: Must be at least 1. Used to provide DMA controller
|
|
specific information. See DMA client binding below for
|
|
more details.
|
|
|
|
Optional properties:
|
|
- dma-channels: Number of DMA channels supported by the controller.
|
|
- dma-requests: Number of DMA request signals supported by the
|
|
controller.
|
|
- dma-channel-mask: Bitmask of available DMA channels in ascending order
|
|
that are not reserved by firmware and are available to
|
|
the kernel. i.e. first channel corresponds to LSB.
|
|
|
|
Example:
|
|
|
|
dma: dma@48000000 {
|
|
compatible = "ti,omap-sdma";
|
|
reg = <0x48000000 0x1000>;
|
|
interrupts = <0 12 0x4
|
|
0 13 0x4
|
|
0 14 0x4
|
|
0 15 0x4>;
|
|
#dma-cells = <1>;
|
|
dma-channels = <32>;
|
|
dma-requests = <127>;
|
|
dma-channel-mask = <0xfffe>
|
|
};
|
|
|
|
* DMA router
|
|
|
|
DMA routers are transparent IP blocks used to route DMA request lines from
|
|
devices to the DMA controller. Some SoCs (like TI DRA7x) have more peripherals
|
|
integrated with DMA requests than what the DMA controller can handle directly.
|
|
|
|
Required property:
|
|
- dma-masters: phandle of the DMA controller or list of phandles for
|
|
the DMA controllers the router can direct the signal to.
|
|
- #dma-cells: Must be at least 1. Used to provide DMA router specific
|
|
information. See DMA client binding below for more
|
|
details.
|
|
|
|
Optional properties:
|
|
- dma-requests: Number of incoming request lines the router can handle.
|
|
- In the node pointed by the dma-masters:
|
|
- dma-requests: The router driver might need to look for this in order
|
|
to configure the routing.
|
|
|
|
Example:
|
|
sdma_xbar: dma-router@4a002b78 {
|
|
compatible = "ti,dra7-dma-crossbar";
|
|
reg = <0x4a002b78 0xfc>;
|
|
#dma-cells = <1>;
|
|
dma-requests = <205>;
|
|
ti,dma-safe-map = <0>;
|
|
dma-masters = <&sdma>;
|
|
};
|
|
|
|
* DMA client
|
|
|
|
Client drivers should specify the DMA property using a phandle to the controller
|
|
followed by DMA controller specific data.
|
|
|
|
Required property:
|
|
- dmas: List of one or more DMA specifiers, each consisting of
|
|
- A phandle pointing to DMA controller node
|
|
- A number of integer cells, as determined by the
|
|
#dma-cells property in the node referenced by phandle
|
|
containing DMA controller specific information. This
|
|
typically contains a DMA request line number or a
|
|
channel number, but can contain any data that is
|
|
required for configuring a channel.
|
|
- dma-names: Contains one identifier string for each DMA specifier in
|
|
the dmas property. The specific strings that can be used
|
|
are defined in the binding of the DMA client device.
|
|
Multiple DMA specifiers can be used to represent
|
|
alternatives and in this case the dma-names for those
|
|
DMA specifiers must be identical (see examples).
|
|
|
|
Examples:
|
|
|
|
1. A device with one DMA read channel, one DMA write channel:
|
|
|
|
i2c1: i2c@1 {
|
|
...
|
|
dmas = <&dma 2 /* read channel */
|
|
&dma 3>; /* write channel */
|
|
dma-names = "rx", "tx";
|
|
...
|
|
};
|
|
|
|
2. A single read-write channel with three alternative DMA controllers:
|
|
|
|
dmas = <&dma1 5
|
|
&dma2 7
|
|
&dma3 2>;
|
|
dma-names = "rx-tx", "rx-tx", "rx-tx";
|
|
|
|
3. A device with three channels, one of which has two alternatives:
|
|
|
|
dmas = <&dma1 2 /* read channel */
|
|
&dma1 3 /* write channel */
|
|
&dma2 0 /* error read */
|
|
&dma3 0>; /* alternative error read */
|
|
dma-names = "rx", "tx", "error", "error";
|