mirror of
https://github.com/torvalds/linux.git
synced 2024-12-19 17:41:29 +00:00
56f13c0d95
DMA routers are transparent devices used to mux DMA requests from peripherals to DMA controllers. They are used when the SoC integrates more devices with DMA requests then their controller can handle. DRA7x is one example of such SoC, where the sDMA can hanlde 128 DMA request lines, but in SoC level it has 205 DMA requests. The of_dma_router will be registered as of_dma_controller with special xlate function and additional parameters. The driver for the router is responsible to craft the dma_spec (in the of_dma_route_allocate callback) which can be used to requests a DMA channel from the real DMA controller. This way the router can be transparent for the system while remaining generic enough to be used in different environments. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
110 lines
3.3 KiB
Plaintext
110 lines
3.3 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.
|
|
|
|
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 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";
|