diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-18 11:49:20 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-18 11:49:20 -0500 |
commit | ce1d3fde87d1a21f1ec1147dde32b2825dd3a276 (patch) | |
tree | 6ffab43e47e3a22a76bf9bf4efeecdf1b90dcb6f /Documentation | |
parent | 928fce2f6d8152d897790c1a5bbeef5642f69e0e (diff) | |
parent | 88987d2c7534a0269f567fb101e6d71a08f0f01d (diff) |
Merge branch 'for-linus' of git://git.infradead.org/users/vkoul/slave-dma
Pull dmaengine updates from Vinod Koul:
"This update brings:
- the big cleanup up by Maxime for device control and slave
capabilities. This makes the API much cleaner.
- new IMG MDC driver by Andrew
- new Renesas R-Car Gen2 DMA Controller driver by Laurent along with
bunch of fixes on rcar drivers
- odd fixes and updates spread over driver"
* 'for-linus' of git://git.infradead.org/users/vkoul/slave-dma: (130 commits)
dmaengine: pl330: add DMA_PAUSE feature
dmaengine: pl330: improve pl330_tx_status() function
dmaengine: rcar-dmac: Disable channel 0 when using IOMMU
dmaengine: rcar-dmac: Work around descriptor mode IOMMU errata
dmaengine: rcar-dmac: Allocate hardware descriptors with DMAC device
dmaengine: rcar-dmac: Fix oops due to unintialized list in error ISR
dmaengine: rcar-dmac: Fix spinlock issues in interrupt
dmaenegine: edma: fix sparse warnings
dmaengine: rcar-dmac: Fix uninitialized variable usage
dmaengine: shdmac: extend PM methods
dmaengine: shdmac: use SET_RUNTIME_PM_OPS()
dmaengine: pl330: fix bug that cause start the same descs in cyclic
dmaengine: at_xdmac: allow muliple dwidths when doing slave transfers
dmaengine: at_xdmac: simplify channel configuration stuff
dmaengine: at_xdmac: introduce save_cc field
dmaengine: at_xdmac: wait for in-progress transaction to complete after pausing a channel
ioat: fail self-test if wait_for_completion times out
dmaengine: dw: define DW_DMA_MAX_NR_MASTERS
dmaengine: dw: amend description of dma_dev field
dmatest: move src_off, dst_off, len inside loop
...
Diffstat (limited to 'Documentation')
4 files changed, 113 insertions, 46 deletions
diff --git a/Documentation/devicetree/bindings/dma/img-mdc-dma.txt b/Documentation/devicetree/bindings/dma/img-mdc-dma.txt new file mode 100644 index 000000000000..28c1341db346 --- /dev/null +++ b/Documentation/devicetree/bindings/dma/img-mdc-dma.txt | |||
@@ -0,0 +1,57 @@ | |||
1 | * IMG Multi-threaded DMA Controller (MDC) | ||
2 | |||
3 | Required properties: | ||
4 | - compatible: Must be "img,pistachio-mdc-dma". | ||
5 | - reg: Must contain the base address and length of the MDC registers. | ||
6 | - interrupts: Must contain all the per-channel DMA interrupts. | ||
7 | - clocks: Must contain an entry for each entry in clock-names. | ||
8 | See ../clock/clock-bindings.txt for details. | ||
9 | - clock-names: Must include the following entries: | ||
10 | - sys: MDC system interface clock. | ||
11 | - img,cr-periph: Must contain a phandle to the peripheral control syscon | ||
12 | node which contains the DMA request to channel mapping registers. | ||
13 | - img,max-burst-multiplier: Must be the maximum supported burst size multiplier. | ||
14 | The maximum burst size is this value multiplied by the hardware-reported bus | ||
15 | width. | ||
16 | - #dma-cells: Must be 3: | ||
17 | - The first cell is the peripheral's DMA request line. | ||
18 | - The second cell is a bitmap specifying to which channels the DMA request | ||
19 | line may be mapped (i.e. bit N set indicates channel N is usable). | ||
20 | - The third cell is the thread ID to be used by the channel. | ||
21 | |||
22 | Optional properties: | ||
23 | - dma-channels: Number of supported DMA channels, up to 32. If not specified | ||
24 | the number reported by the hardware is used. | ||
25 | |||
26 | Example: | ||
27 | |||
28 | mdc: dma-controller@18143000 { | ||
29 | compatible = "img,pistachio-mdc-dma"; | ||
30 | reg = <0x18143000 0x1000>; | ||
31 | interrupts = <GIC_SHARED 27 IRQ_TYPE_LEVEL_HIGH>, | ||
32 | <GIC_SHARED 28 IRQ_TYPE_LEVEL_HIGH>, | ||
33 | <GIC_SHARED 29 IRQ_TYPE_LEVEL_HIGH>, | ||
34 | <GIC_SHARED 30 IRQ_TYPE_LEVEL_HIGH>, | ||
35 | <GIC_SHARED 31 IRQ_TYPE_LEVEL_HIGH>, | ||
36 | <GIC_SHARED 32 IRQ_TYPE_LEVEL_HIGH>, | ||
37 | <GIC_SHARED 33 IRQ_TYPE_LEVEL_HIGH>, | ||
38 | <GIC_SHARED 34 IRQ_TYPE_LEVEL_HIGH>, | ||
39 | <GIC_SHARED 35 IRQ_TYPE_LEVEL_HIGH>, | ||
40 | <GIC_SHARED 36 IRQ_TYPE_LEVEL_HIGH>, | ||
41 | <GIC_SHARED 37 IRQ_TYPE_LEVEL_HIGH>, | ||
42 | <GIC_SHARED 38 IRQ_TYPE_LEVEL_HIGH>; | ||
43 | clocks = <&system_clk>; | ||
44 | clock-names = "sys"; | ||
45 | |||
46 | img,max-burst-multiplier = <16>; | ||
47 | img,cr-periph = <&cr_periph>; | ||
48 | |||
49 | #dma-cells = <3>; | ||
50 | }; | ||
51 | |||
52 | spi@18100f00 { | ||
53 | ... | ||
54 | dmas = <&mdc 9 0xffffffff 0>, <&mdc 10 0xffffffff 0>; | ||
55 | dma-names = "tx", "rx"; | ||
56 | ... | ||
57 | }; | ||
diff --git a/Documentation/devicetree/bindings/dma/renesas,rcar-dmac.txt b/Documentation/devicetree/bindings/dma/renesas,rcar-dmac.txt index f7e21b1c2a05..09daeef1ff22 100644 --- a/Documentation/devicetree/bindings/dma/renesas,rcar-dmac.txt +++ b/Documentation/devicetree/bindings/dma/renesas,rcar-dmac.txt | |||
@@ -5,9 +5,6 @@ controller instances named DMAC capable of serving multiple clients. Channels | |||
5 | can be dedicated to specific clients or shared between a large number of | 5 | can be dedicated to specific clients or shared between a large number of |
6 | clients. | 6 | clients. |
7 | 7 | ||
8 | DMA clients are connected to the DMAC ports referenced by an 8-bit identifier | ||
9 | called MID/RID. | ||
10 | |||
11 | Each DMA client is connected to one dedicated port of the DMAC, identified by | 8 | Each DMA client is connected to one dedicated port of the DMAC, identified by |
12 | an 8-bit port number called the MID/RID. A DMA controller can thus serve up to | 9 | an 8-bit port number called the MID/RID. A DMA controller can thus serve up to |
13 | 256 clients in total. When the number of hardware channels is lower than the | 10 | 256 clients in total. When the number of hardware channels is lower than the |
diff --git a/Documentation/devicetree/bindings/dma/snps-dma.txt b/Documentation/devicetree/bindings/dma/snps-dma.txt index d58675ea1abf..c261598164a7 100644 --- a/Documentation/devicetree/bindings/dma/snps-dma.txt +++ b/Documentation/devicetree/bindings/dma/snps-dma.txt | |||
@@ -38,7 +38,7 @@ Example: | |||
38 | chan_allocation_order = <1>; | 38 | chan_allocation_order = <1>; |
39 | chan_priority = <1>; | 39 | chan_priority = <1>; |
40 | block_size = <0xfff>; | 40 | block_size = <0xfff>; |
41 | data_width = <3 3 0 0>; | 41 | data_width = <3 3>; |
42 | }; | 42 | }; |
43 | 43 | ||
44 | DMA clients connected to the Designware DMA controller must use the format | 44 | DMA clients connected to the Designware DMA controller must use the format |
diff --git a/Documentation/dmaengine/provider.txt b/Documentation/dmaengine/provider.txt index 766658ccf235..05d2280190f1 100644 --- a/Documentation/dmaengine/provider.txt +++ b/Documentation/dmaengine/provider.txt | |||
@@ -113,6 +113,31 @@ need to initialize a few fields in there: | |||
113 | * channels: should be initialized as a list using the | 113 | * channels: should be initialized as a list using the |
114 | INIT_LIST_HEAD macro for example | 114 | INIT_LIST_HEAD macro for example |
115 | 115 | ||
116 | * src_addr_widths: | ||
117 | - should contain a bitmask of the supported source transfer width | ||
118 | |||
119 | * dst_addr_widths: | ||
120 | - should contain a bitmask of the supported destination transfer | ||
121 | width | ||
122 | |||
123 | * directions: | ||
124 | - should contain a bitmask of the supported slave directions | ||
125 | (i.e. excluding mem2mem transfers) | ||
126 | |||
127 | * residue_granularity: | ||
128 | - Granularity of the transfer residue reported to dma_set_residue. | ||
129 | - This can be either: | ||
130 | + Descriptor | ||
131 | -> Your device doesn't support any kind of residue | ||
132 | reporting. The framework will only know that a particular | ||
133 | transaction descriptor is done. | ||
134 | + Segment | ||
135 | -> Your device is able to report which chunks have been | ||
136 | transferred | ||
137 | + Burst | ||
138 | -> Your device is able to report which burst have been | ||
139 | transferred | ||
140 | |||
116 | * dev: should hold the pointer to the struct device associated | 141 | * dev: should hold the pointer to the struct device associated |
117 | to your current driver instance. | 142 | to your current driver instance. |
118 | 143 | ||
@@ -274,48 +299,36 @@ supported. | |||
274 | account the current period. | 299 | account the current period. |
275 | - This function can be called in an interrupt context. | 300 | - This function can be called in an interrupt context. |
276 | 301 | ||
277 | * device_control | 302 | * device_config |
278 | - Used by client drivers to control and configure the channel it | 303 | - Reconfigures the channel with the configuration given as |
279 | has a handle on. | 304 | argument |
280 | - Called with a command and an argument | 305 | - This command should NOT perform synchronously, or on any |
281 | + The command is one of the values listed by the enum | 306 | currently queued transfers, but only on subsequent ones |
282 | dma_ctrl_cmd. The valid commands are: | 307 | - In this case, the function will receive a dma_slave_config |
283 | + DMA_PAUSE | 308 | structure pointer as an argument, that will detail which |
284 | + Pauses a transfer on the channel | 309 | configuration to use. |
285 | + This command should operate synchronously on the channel, | 310 | - Even though that structure contains a direction field, this |
286 | pausing right away the work of the given channel | 311 | field is deprecated in favor of the direction argument given to |
287 | + DMA_RESUME | 312 | the prep_* functions |
288 | + Restarts a transfer on the channel | 313 | - This call is mandatory for slave operations only. This should NOT be |
289 | + This command should operate synchronously on the channel, | 314 | set or expected to be set for memcpy operations. |
290 | resuming right away the work of the given channel | 315 | If a driver support both, it should use this call for slave |
291 | + DMA_TERMINATE_ALL | 316 | operations only and not for memcpy ones. |
292 | + Aborts all the pending and ongoing transfers on the | 317 | |
293 | channel | 318 | * device_pause |
294 | + This command should operate synchronously on the channel, | 319 | - Pauses a transfer on the channel |
295 | terminating right away all the channels | 320 | - This command should operate synchronously on the channel, |
296 | + DMA_SLAVE_CONFIG | 321 | pausing right away the work of the given channel |
297 | + Reconfigures the channel with passed configuration | 322 | |
298 | + This command should NOT perform synchronously, or on any | 323 | * device_resume |
299 | currently queued transfers, but only on subsequent ones | 324 | - Resumes a transfer on the channel |
300 | + In this case, the function will receive a | 325 | - This command should operate synchronously on the channel, |
301 | dma_slave_config structure pointer as an argument, that | 326 | pausing right away the work of the given channel |
302 | will detail which configuration to use. | 327 | |
303 | + Even though that structure contains a direction field, | 328 | * device_terminate_all |
304 | this field is deprecated in favor of the direction | 329 | - Aborts all the pending and ongoing transfers on the channel |
305 | argument given to the prep_* functions | 330 | - This command should operate synchronously on the channel, |
306 | + FSLDMA_EXTERNAL_START | 331 | terminating right away all the channels |
307 | + TODO: Why does that even exist? | ||
308 | + The argument is an opaque unsigned long. This actually is a | ||
309 | pointer to a struct dma_slave_config that should be used only | ||
310 | in the DMA_SLAVE_CONFIG. | ||
311 | |||
312 | * device_slave_caps | ||
313 | - Called through the framework by client drivers in order to have | ||
314 | an idea of what are the properties of the channel allocated to | ||
315 | them. | ||
316 | - Such properties are the buswidth, available directions, etc. | ||
317 | - Required for every generic layer doing DMA transfers, such as | ||
318 | ASoC. | ||
319 | 332 | ||
320 | Misc notes (stuff that should be documented, but don't really know | 333 | Misc notes (stuff that should be documented, but don't really know |
321 | where to put them) | 334 | where to put them) |