Message ID | 20230101193605.50285-1-samuel@sholland.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] dmaengine: sun6i: Set the maximum segment size | expand |
On 01-01-23, 13:36, Samuel Holland wrote: > The sun6i DMA engine supports segment sizes up to 2^25-1 bytes. This is > explicitly stated in newer SoC documentation (H6, D1), and it is implied > in older documentation by the 25-bit width of the "bytes left in the > current segment" register field. > > Exposing the real segment size limit (instead of the 64k default) > reduces the number of SG list segments needed for a transaction. Applied, thanks
diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c index b7557f437936..30667d251e97 100644 --- a/drivers/dma/sun6i-dma.c +++ b/drivers/dma/sun6i-dma.c @@ -9,6 +9,7 @@ #include <linux/clk.h> #include <linux/delay.h> +#include <linux/dma-mapping.h> #include <linux/dmaengine.h> #include <linux/dmapool.h> #include <linux/interrupt.h> @@ -1334,6 +1335,8 @@ static int sun6i_dma_probe(struct platform_device *pdev) INIT_LIST_HEAD(&sdc->pending); spin_lock_init(&sdc->lock); + dma_set_max_seg_size(&pdev->dev, SZ_32M - 1); + dma_cap_set(DMA_PRIVATE, sdc->slave.cap_mask); dma_cap_set(DMA_MEMCPY, sdc->slave.cap_mask); dma_cap_set(DMA_SLAVE, sdc->slave.cap_mask);