diff options
-rw-r--r-- | drivers/dma/pl330.c | 27 |
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 | |||
2865 | static 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 | |||
2858 | static int | 2884 | static int |
2859 | pl330_probe(struct amba_device *adev, const struct amba_id *id) | 2885 | pl330_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) { |