diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-01-13 13:59:52 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-01-13 13:59:52 -0500 |
commit | d6a322774cb7096ca683fc46ddc9482e02ee6133 (patch) | |
tree | 0e5b95d9899eefa5c58f23af8ecadd7e93010586 /drivers/dma/at_xdmac.c | |
parent | 4c257ec37bc365614933c7f0a7fe9b0688dfd1e7 (diff) | |
parent | 8b648436eb45c1f561164b24aafd35fb2bee9cfc (diff) |
Merge tag 'dmaengine-4.5-rc1' of git://git.infradead.org/users/vkoul/slave-dma
Pull dmaengine updates from Vinod Koul:
"This round we have few new features, new driver and updates to few
drivers.
The new features to dmaengine core are:
- Synchronized transfer termination API to terminate the dmaengine
transfers in synchronized and async fashion as required by users.
We have its user now in ALSA dmaengine lib, img, at_xdma, axi_dmac
drivers.
- Universal API for channel request and start consolidation of
request flows. It's user is ompa-dma driver.
- Introduce reuse of descriptors and use in pxa_dma driver
Add/Remove:
- New STM32 DMA driver
- Removal of unused R-Car HPB-DMAC driver
Updates:
- ti-dma-crossbar updates for supporting eDMA
- tegra-apb pm updates
- idma64
- mv_xor updates
- ste_dma updates"
* tag 'dmaengine-4.5-rc1' of git://git.infradead.org/users/vkoul/slave-dma: (54 commits)
dmaengine: mv_xor: add suspend/resume support
dmaengine: mv_xor: de-duplicate mv_chan_set_mode*()
dmaengine: mv_xor: remove mv_xor_chan->current_type field
dmaengine: omap-dma: Add support for DMA filter mapping to slave devices
dmaengine: edma: Add support for DMA filter mapping to slave devices
dmaengine: core: Introduce new, universal API to request a channel
dmaengine: core: Move and merge the code paths using private_candidate
dmaengine: core: Skip mask matching when it is not provided to private_candidate
dmaengine: mdc: Correct terminate_all handling
dmaengine: edma: Add probe callback to edma_tptc_driver
dmaengine: dw: fix potential memory leak in dw_dma_parse_dt()
dmaengine: stm32-dma: Fix unchecked deference of chan->desc
dmaengine: sh: Remove unused R-Car HPB-DMAC driver
dmaengine: usb-dmac: Document SoC specific compatibility strings
ste_dma40: Delete an unnecessary variable initialisation in d40_probe()
ste_dma40: Delete another unnecessary check in d40_probe()
ste_dma40: Delete an unnecessary check before the function call "kmem_cache_destroy"
dmaengine: tegra-apb: Free interrupts before killing tasklets
dmaengine: tegra-apb: Update driver to use GFP_NOWAIT
dmaengine: tegra-apb: Only save channel state for those in use
...
Diffstat (limited to 'drivers/dma/at_xdmac.c')
-rw-r--r-- | drivers/dma/at_xdmac.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/drivers/dma/at_xdmac.c b/drivers/dma/at_xdmac.c index 370c661c7d7b..39f59666f93f 100644 --- a/drivers/dma/at_xdmac.c +++ b/drivers/dma/at_xdmac.c | |||
@@ -863,8 +863,12 @@ at_xdmac_interleaved_queue_desc(struct dma_chan *chan, | |||
863 | * access. Hopefully we can access DDR through both ports (at least on | 863 | * access. Hopefully we can access DDR through both ports (at least on |
864 | * SAMA5D4x), so we can use the same interface for source and dest, | 864 | * SAMA5D4x), so we can use the same interface for source and dest, |
865 | * that solves the fact we don't know the direction. | 865 | * that solves the fact we don't know the direction. |
866 | * ERRATA: Even if useless for memory transfers, the PERID has to not | ||
867 | * match the one of another channel. If not, it could lead to spurious | ||
868 | * flag status. | ||
866 | */ | 869 | */ |
867 | u32 chan_cc = AT_XDMAC_CC_DIF(0) | 870 | u32 chan_cc = AT_XDMAC_CC_PERID(0x3f) |
871 | | AT_XDMAC_CC_DIF(0) | ||
868 | | AT_XDMAC_CC_SIF(0) | 872 | | AT_XDMAC_CC_SIF(0) |
869 | | AT_XDMAC_CC_MBSIZE_SIXTEEN | 873 | | AT_XDMAC_CC_MBSIZE_SIXTEEN |
870 | | AT_XDMAC_CC_TYPE_MEM_TRAN; | 874 | | AT_XDMAC_CC_TYPE_MEM_TRAN; |
@@ -1041,8 +1045,12 @@ at_xdmac_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dest, dma_addr_t src, | |||
1041 | * access DDR through both ports (at least on SAMA5D4x), so we can use | 1045 | * access DDR through both ports (at least on SAMA5D4x), so we can use |
1042 | * the same interface for source and dest, that solves the fact we | 1046 | * the same interface for source and dest, that solves the fact we |
1043 | * don't know the direction. | 1047 | * don't know the direction. |
1048 | * ERRATA: Even if useless for memory transfers, the PERID has to not | ||
1049 | * match the one of another channel. If not, it could lead to spurious | ||
1050 | * flag status. | ||
1044 | */ | 1051 | */ |
1045 | u32 chan_cc = AT_XDMAC_CC_DAM_INCREMENTED_AM | 1052 | u32 chan_cc = AT_XDMAC_CC_PERID(0x3f) |
1053 | | AT_XDMAC_CC_DAM_INCREMENTED_AM | ||
1046 | | AT_XDMAC_CC_SAM_INCREMENTED_AM | 1054 | | AT_XDMAC_CC_SAM_INCREMENTED_AM |
1047 | | AT_XDMAC_CC_DIF(0) | 1055 | | AT_XDMAC_CC_DIF(0) |
1048 | | AT_XDMAC_CC_SIF(0) | 1056 | | AT_XDMAC_CC_SIF(0) |
@@ -1143,8 +1151,12 @@ static struct at_xdmac_desc *at_xdmac_memset_create_desc(struct dma_chan *chan, | |||
1143 | * access. Hopefully we can access DDR through both ports (at least on | 1151 | * access. Hopefully we can access DDR through both ports (at least on |
1144 | * SAMA5D4x), so we can use the same interface for source and dest, | 1152 | * SAMA5D4x), so we can use the same interface for source and dest, |
1145 | * that solves the fact we don't know the direction. | 1153 | * that solves the fact we don't know the direction. |
1154 | * ERRATA: Even if useless for memory transfers, the PERID has to not | ||
1155 | * match the one of another channel. If not, it could lead to spurious | ||
1156 | * flag status. | ||
1146 | */ | 1157 | */ |
1147 | u32 chan_cc = AT_XDMAC_CC_DAM_UBS_AM | 1158 | u32 chan_cc = AT_XDMAC_CC_PERID(0x3f) |
1159 | | AT_XDMAC_CC_DAM_UBS_AM | ||
1148 | | AT_XDMAC_CC_SAM_INCREMENTED_AM | 1160 | | AT_XDMAC_CC_SAM_INCREMENTED_AM |
1149 | | AT_XDMAC_CC_DIF(0) | 1161 | | AT_XDMAC_CC_DIF(0) |
1150 | | AT_XDMAC_CC_SIF(0) | 1162 | | AT_XDMAC_CC_SIF(0) |
@@ -1998,8 +2010,6 @@ static int at_xdmac_remove(struct platform_device *pdev) | |||
1998 | dma_async_device_unregister(&atxdmac->dma); | 2010 | dma_async_device_unregister(&atxdmac->dma); |
1999 | clk_disable_unprepare(atxdmac->clk); | 2011 | clk_disable_unprepare(atxdmac->clk); |
2000 | 2012 | ||
2001 | synchronize_irq(atxdmac->irq); | ||
2002 | |||
2003 | free_irq(atxdmac->irq, atxdmac->dma.dev); | 2013 | free_irq(atxdmac->irq, atxdmac->dma.dev); |
2004 | 2014 | ||
2005 | for (i = 0; i < atxdmac->dma.chancnt; i++) { | 2015 | for (i = 0; i < atxdmac->dma.chancnt; i++) { |