aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/dma/pl330.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
index 593827b3fdd4..7c02e83c7308 100644
--- a/drivers/dma/pl330.c
+++ b/drivers/dma/pl330.c
@@ -2855,6 +2855,32 @@ static irqreturn_t pl330_irq_handler(int irq, void *data)
2855 return IRQ_NONE; 2855 return IRQ_NONE;
2856} 2856}
2857 2857
2858#define PL330_DMA_BUSWIDTHS \
2859 BIT(DMA_SLAVE_BUSWIDTH_UNDEFINED) | \
2860 BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) | \
2861 BIT(DMA_SLAVE_BUSWIDTH_2_BYTES) | \
2862 BIT(DMA_SLAVE_BUSWIDTH_4_BYTES) | \
2863 BIT(DMA_SLAVE_BUSWIDTH_8_BYTES)
2864
2865static int pl330_dma_device_slave_caps(struct dma_chan *dchan,
2866 struct dma_slave_caps *caps)
2867{
2868 caps->src_addr_widths = PL330_DMA_BUSWIDTHS;
2869 caps->dstn_addr_widths = PL330_DMA_BUSWIDTHS;
2870 caps->directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV);
2871 caps->cmd_pause = false;
2872 caps->cmd_terminate = true;
2873
2874 /*
2875 * This is the limit for transfers with a buswidth of 1, larger
2876 * buswidths will have larger limits.
2877 */
2878 caps->max_sg_len = 1900800;
2879 caps->max_sg_nr = 0;
2880
2881 return 0;
2882}
2883
2858static int 2884static int
2859pl330_probe(struct amba_device *adev, const struct amba_id *id) 2885pl330_probe(struct amba_device *adev, const struct amba_id *id)
2860{ 2886{
@@ -2959,6 +2985,7 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id)
2959 pd->device_prep_slave_sg = pl330_prep_slave_sg; 2985 pd->device_prep_slave_sg = pl330_prep_slave_sg;
2960 pd->device_control = pl330_control; 2986 pd->device_control = pl330_control;
2961 pd->device_issue_pending = pl330_issue_pending; 2987 pd->device_issue_pending = pl330_issue_pending;
2988 pd->device_slave_caps = pl330_dma_device_slave_caps;
2962 2989
2963 ret = dma_async_device_register(pd); 2990 ret = dma_async_device_register(pd);
2964 if (ret) { 2991 if (ret) {