diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-09 22:10:41 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-09 22:10:41 -0400 |
| commit | b7e97d22113bcaafff93774e3085f5b567eaba9c (patch) | |
| tree | 1d3a13574310bde064fceb4408cf91a44c59c078 | |
| parent | 943c2acea53784c45fb291498d04d5188fdea891 (diff) | |
| parent | d0fc905429f7f5f3ad365466669c55b04b92c1e5 (diff) | |
Merge branch 'next' of git://git.infradead.org/users/vkoul/slave-dma
Pull slave-dmaengine updates from Vinod Koul:
"This time we have Andy updates on dw_dmac which is attempting to make
this IP block available as PCI and platform device though not fully
complete this time.
We also have TI EDMA moving the dma driver to use dmaengine APIs, also
have a new driver for mmp-tdma, along with bunch of small updates.
Now for your excitement the merge is little unusual here, while
merging the auto merge on linux-next picks wrong choice for pl330
(drivers/dma/pl330.c) and this causes build failure. The correct
resolution is in linux-next. (DMA: PL330: Fix build error) I didn't
back merge your tree this time as you are better than me so no point
in doing that for me :)"
Fixed the pl330 conflict as in linux-next, along with trivial header
file conflicts due to changed includes.
* 'next' of git://git.infradead.org/users/vkoul/slave-dma: (29 commits)
dma: tegra: fix interrupt name issue with apb dma.
dw_dmac: fix a regression in dwc_prep_dma_memcpy
dw_dmac: introduce software emulation of LLP transfers
dw_dmac: autoconfigure data_width or get it via platform data
dw_dmac: autoconfigure block_size or use platform data
dw_dmac: get number of channels from hardware if possible
dw_dmac: fill optional encoded parameters in register structure
dw_dmac: mark dwc_dump_chan_regs as inline
DMA: PL330: return ENOMEM instead of 0 from pl330_alloc_chan_resources
DMA: PL330: Remove redundant runtime_suspend/resume functions
DMA: PL330: Remove controller clock enable/disable
dmaengine: use kmem_cache_zalloc instead of kmem_cache_alloc/memset
DMA: PL330: Set the capability of pdm0 and pdm1 as DMA_PRIVATE
ARM: EXYNOS: Set the capability of pdm0 and pdm1 as DMA_PRIVATE
dma: tegra: use list_move_tail instead of list_del/list_add_tail
mxs/dma: Enlarge the CCW descriptor area to 4 pages
dw_dmac: utilize slave_id to pass request line
dmaengine: mmp_tdma: add dt support
dmaengine: mmp-pdma support
spi: davici - make davinci select edma
...
| -rw-r--r-- | arch/arm/mach-exynos/dma.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-spear13xx/spear13xx.c | 3 | ||||
| -rw-r--r-- | arch/avr32/mach-at32ap/at32ap700x.c | 3 | ||||
| -rw-r--r-- | drivers/dma/Kconfig | 17 | ||||
| -rw-r--r-- | drivers/dma/Makefile | 2 | ||||
| -rw-r--r-- | drivers/dma/amba-pl08x.c | 2 | ||||
| -rw-r--r-- | drivers/dma/dw_dmac.c | 258 | ||||
| -rw-r--r-- | drivers/dma/dw_dmac_regs.h | 48 | ||||
| -rw-r--r-- | drivers/dma/edma.c | 671 | ||||
| -rw-r--r-- | drivers/dma/ioat/dma_v2.c | 3 | ||||
| -rw-r--r-- | drivers/dma/ioat/pci.c | 22 | ||||
| -rw-r--r-- | drivers/dma/mmp_pdma.c | 875 | ||||
| -rw-r--r-- | drivers/dma/mmp_tdma.c | 51 | ||||
| -rw-r--r-- | drivers/dma/mxs-dma.c | 14 | ||||
| -rw-r--r-- | drivers/dma/pl330.c | 78 | ||||
| -rw-r--r-- | drivers/dma/sirf-dma.c | 23 | ||||
| -rw-r--r-- | drivers/dma/ste_dma40.c | 14 | ||||
| -rw-r--r-- | drivers/dma/tegra20-apb-dma.c | 12 | ||||
| -rw-r--r-- | drivers/spi/Kconfig | 1 | ||||
| -rw-r--r-- | drivers/spi/spi-davinci.c | 292 | ||||
| -rw-r--r-- | include/linux/dw_dmac.h | 7 | ||||
| -rw-r--r-- | include/linux/edma.h | 29 | ||||
| -rw-r--r-- | include/linux/platform_data/mmp_dma.h | 19 |
23 files changed, 2085 insertions, 361 deletions
diff --git a/arch/arm/mach-exynos/dma.c b/arch/arm/mach-exynos/dma.c index f60b66dbcf84..21d568b3b149 100644 --- a/arch/arm/mach-exynos/dma.c +++ b/arch/arm/mach-exynos/dma.c | |||
| @@ -303,10 +303,12 @@ static int __init exynos_dma_init(void) | |||
| 303 | 303 | ||
| 304 | dma_cap_set(DMA_SLAVE, exynos_pdma0_pdata.cap_mask); | 304 | dma_cap_set(DMA_SLAVE, exynos_pdma0_pdata.cap_mask); |
| 305 | dma_cap_set(DMA_CYCLIC, exynos_pdma0_pdata.cap_mask); | 305 | dma_cap_set(DMA_CYCLIC, exynos_pdma0_pdata.cap_mask); |
| 306 | dma_cap_set(DMA_PRIVATE, exynos_pdma0_pdata.cap_mask); | ||
| 306 | amba_device_register(&exynos_pdma0_device, &iomem_resource); | 307 | amba_device_register(&exynos_pdma0_device, &iomem_resource); |
| 307 | 308 | ||
| 308 | dma_cap_set(DMA_SLAVE, exynos_pdma1_pdata.cap_mask); | 309 | dma_cap_set(DMA_SLAVE, exynos_pdma1_pdata.cap_mask); |
| 309 | dma_cap_set(DMA_CYCLIC, exynos_pdma1_pdata.cap_mask); | 310 | dma_cap_set(DMA_CYCLIC, exynos_pdma1_pdata.cap_mask); |
| 311 | dma_cap_set(DMA_PRIVATE, exynos_pdma1_pdata.cap_mask); | ||
| 310 | amba_device_register(&exynos_pdma1_device, &iomem_resource); | 312 | amba_device_register(&exynos_pdma1_device, &iomem_resource); |
| 311 | 313 | ||
| 312 | dma_cap_set(DMA_MEMCPY, exynos_mdma1_pdata.cap_mask); | 314 | dma_cap_set(DMA_MEMCPY, exynos_mdma1_pdata.cap_mask); |
diff --git a/arch/arm/mach-spear13xx/spear13xx.c b/arch/arm/mach-spear13xx/spear13xx.c index e10648801b2e..5633d698f1e1 100644 --- a/arch/arm/mach-spear13xx/spear13xx.c +++ b/arch/arm/mach-spear13xx/spear13xx.c | |||
| @@ -78,6 +78,9 @@ struct dw_dma_platform_data dmac_plat_data = { | |||
| 78 | .nr_channels = 8, | 78 | .nr_channels = 8, |
| 79 | .chan_allocation_order = CHAN_ALLOCATION_DESCENDING, | 79 | .chan_allocation_order = CHAN_ALLOCATION_DESCENDING, |
| 80 | .chan_priority = CHAN_PRIORITY_DESCENDING, | 80 | .chan_priority = CHAN_PRIORITY_DESCENDING, |
| 81 | .block_size = 4095U, | ||
| 82 | .nr_masters = 2, | ||
| 83 | .data_width = { 3, 3, 0, 0 }, | ||
| 81 | }; | 84 | }; |
| 82 | 85 | ||
| 83 | void __init spear13xx_l2x0_init(void) | 86 | void __init spear13xx_l2x0_init(void) |
diff --git a/arch/avr32/mach-at32ap/at32ap700x.c b/arch/avr32/mach-at32ap/at32ap700x.c index 0445c4fd67e3..b323d8d3185b 100644 --- a/arch/avr32/mach-at32ap/at32ap700x.c +++ b/arch/avr32/mach-at32ap/at32ap700x.c | |||
| @@ -605,6 +605,9 @@ static void __init genclk_init_parent(struct clk *clk) | |||
| 605 | 605 | ||
| 606 | static struct dw_dma_platform_data dw_dmac0_data = { | 606 | static struct dw_dma_platform_data dw_dmac0_data = { |
| 607 | .nr_channels = 3, | 607 | .nr_channels = 3, |
| 608 | .block_size = 4095U, | ||
| 609 | .nr_masters = 2, | ||
| 610 | .data_width = { 2, 2, 0, 0 }, | ||
| 608 | }; | 611 | }; |
| 609 | 612 | ||
| 610 | static struct resource dw_dmac0_resource[] = { | 613 | static struct resource dw_dmac0_resource[] = { |
diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig index d06ea2950dd9..677cd6e4e1a1 100644 --- a/drivers/dma/Kconfig +++ b/drivers/dma/Kconfig | |||
| @@ -208,6 +208,16 @@ config SIRF_DMA | |||
| 208 | help | 208 | help |
| 209 | Enable support for the CSR SiRFprimaII DMA engine. | 209 | Enable support for the CSR SiRFprimaII DMA engine. |
| 210 | 210 | ||
| 211 | config TI_EDMA | ||
| 212 | tristate "TI EDMA support" | ||
| 213 | depends on ARCH_DAVINCI | ||
| 214 | select DMA_ENGINE | ||
| 215 | select DMA_VIRTUAL_CHANNELS | ||
| 216 | default n | ||
| 217 | help | ||
| 218 | Enable support for the TI EDMA controller. This DMA | ||
| 219 | engine is found on TI DaVinci and AM33xx parts. | ||
| 220 | |||
| 211 | config ARCH_HAS_ASYNC_TX_FIND_CHANNEL | 221 | config ARCH_HAS_ASYNC_TX_FIND_CHANNEL |
| 212 | bool | 222 | bool |
| 213 | 223 | ||
| @@ -292,6 +302,13 @@ config DMA_OMAP | |||
| 292 | select DMA_ENGINE | 302 | select DMA_ENGINE |
| 293 | select DMA_VIRTUAL_CHANNELS | 303 | select DMA_VIRTUAL_CHANNELS |
| 294 | 304 | ||
| 305 | config MMP_PDMA | ||
| 306 | bool "MMP PDMA support" | ||
| 307 | depends on (ARCH_MMP || ARCH_PXA) | ||
| 308 | select DMA_ENGINE | ||
| 309 | help | ||
| 310 | Support the MMP PDMA engine for PXA and MMP platfrom. | ||
| 311 | |||
| 295 | config DMA_ENGINE | 312 | config DMA_ENGINE |
| 296 | bool | 313 | bool |
| 297 | 314 | ||
diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile index 4cf6b128ab9a..7428feaa8705 100644 --- a/drivers/dma/Makefile +++ b/drivers/dma/Makefile | |||
| @@ -23,6 +23,7 @@ obj-$(CONFIG_IMX_DMA) += imx-dma.o | |||
| 23 | obj-$(CONFIG_MXS_DMA) += mxs-dma.o | 23 | obj-$(CONFIG_MXS_DMA) += mxs-dma.o |
| 24 | obj-$(CONFIG_TIMB_DMA) += timb_dma.o | 24 | obj-$(CONFIG_TIMB_DMA) += timb_dma.o |
| 25 | obj-$(CONFIG_SIRF_DMA) += sirf-dma.o | 25 | obj-$(CONFIG_SIRF_DMA) += sirf-dma.o |
| 26 | obj-$(CONFIG_TI_EDMA) += edma.o | ||
| 26 | obj-$(CONFIG_STE_DMA40) += ste_dma40.o ste_dma40_ll.o | 27 | obj-$(CONFIG_STE_DMA40) += ste_dma40.o ste_dma40_ll.o |
| 27 | obj-$(CONFIG_TEGRA20_APB_DMA) += tegra20-apb-dma.o | 28 | obj-$(CONFIG_TEGRA20_APB_DMA) += tegra20-apb-dma.o |
| 28 | obj-$(CONFIG_PL330_DMA) += pl330.o | 29 | obj-$(CONFIG_PL330_DMA) += pl330.o |
| @@ -32,3 +33,4 @@ obj-$(CONFIG_EP93XX_DMA) += ep93xx_dma.o | |||
| 32 | obj-$(CONFIG_DMA_SA11X0) += sa11x0-dma.o | 33 | obj-$(CONFIG_DMA_SA11X0) += sa11x0-dma.o |
| 33 | obj-$(CONFIG_MMP_TDMA) += mmp_tdma.o | 34 | obj-$(CONFIG_MMP_TDMA) += mmp_tdma.o |
| 34 | obj-$(CONFIG_DMA_OMAP) += omap-dma.o | 35 | obj-$(CONFIG_DMA_OMAP) += omap-dma.o |
| 36 | obj-$(CONFIG_MMP_PDMA) += mmp_pdma.o | ||
diff --git a/drivers/dma/amba-pl08x.c b/drivers/dma/amba-pl08x.c index 6fbeebb9486f..d1cc5791476b 100644 --- a/drivers/dma/amba-pl08x.c +++ b/drivers/dma/amba-pl08x.c | |||
| @@ -1892,6 +1892,7 @@ static int pl08x_probe(struct amba_device *adev, const struct amba_id *id) | |||
| 1892 | pl08x->pd = dev_get_platdata(&adev->dev); | 1892 | pl08x->pd = dev_get_platdata(&adev->dev); |
| 1893 | if (!pl08x->pd) { | 1893 | if (!pl08x->pd) { |
| 1894 | dev_err(&adev->dev, "no platform data supplied\n"); | 1894 | dev_err(&adev->dev, "no platform data supplied\n"); |
| 1895 | ret = -EINVAL; | ||
| 1895 | goto out_no_platdata; | 1896 | goto out_no_platdata; |
| 1896 | } | 1897 | } |
| 1897 | 1898 | ||
| @@ -1943,6 +1944,7 @@ static int pl08x_probe(struct amba_device *adev, const struct amba_id *id) | |||
| 1943 | dev_err(&adev->dev, "%s failed to allocate " | 1944 | dev_err(&adev->dev, "%s failed to allocate " |
| 1944 | "physical channel holders\n", | 1945 | "physical channel holders\n", |
| 1945 | __func__); | 1946 | __func__); |
| 1947 | ret = -ENOMEM; | ||
| 1946 | goto out_no_phychans; | 1948 | goto out_no_phychans; |
| 1947 | } | 1949 | } |
| 1948 | 1950 | ||
diff --git a/drivers/dma/dw_dmac.c b/drivers/dma/dw_dmac.c index d3c5a5a88f1e..c4b0eb3cde81 100644 --- a/drivers/dma/dw_dmac.c +++ b/drivers/dma/dw_dmac.c | |||
| @@ -36,12 +36,22 @@ | |||
| 36 | * which does not support descriptor writeback. | 36 | * which does not support descriptor writeback. |
| 37 | */ | 37 | */ |
| 38 | 38 | ||
| 39 | static inline unsigned int dwc_get_dms(struct dw_dma_slave *slave) | ||
| 40 | { | ||
| 41 | return slave ? slave->dst_master : 0; | ||
| 42 | } | ||
| 43 | |||
| 44 | static inline unsigned int dwc_get_sms(struct dw_dma_slave *slave) | ||
| 45 | { | ||
| 46 | return slave ? slave->src_master : 1; | ||
| 47 | } | ||
| 48 | |||
| 39 | #define DWC_DEFAULT_CTLLO(_chan) ({ \ | 49 | #define DWC_DEFAULT_CTLLO(_chan) ({ \ |
| 40 | struct dw_dma_slave *__slave = (_chan->private); \ | 50 | struct dw_dma_slave *__slave = (_chan->private); \ |
| 41 | struct dw_dma_chan *_dwc = to_dw_dma_chan(_chan); \ | 51 | struct dw_dma_chan *_dwc = to_dw_dma_chan(_chan); \ |
| 42 | struct dma_slave_config *_sconfig = &_dwc->dma_sconfig; \ | 52 | struct dma_slave_config *_sconfig = &_dwc->dma_sconfig; \ |
| 43 | int _dms = __slave ? __slave->dst_master : 0; \ | ||
