dmaengine: dw: Set DMA device max segment size parameter
authorSerge Semin <Sergey.Semin@baikalelectronics.ru>
Thu, 23 Jul 2020 00:58:45 +0000 (03:58 +0300)
committerVinod Koul <vkoul@kernel.org>
Mon, 27 Jul 2020 09:00:55 +0000 (14:30 +0530)
Maximum block size DW DMAC configuration corresponds to the max segment
size DMA parameter in the DMA core subsystem notation. Lets set it with a
value specific to the probed DW DMA controller. It shall help the DMA
clients to create size-optimized SG-list items for the controller. This in
turn will cause less dw_desc allocations, less LLP reinitializations,
better DMA device performance.

Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20200723005848.31907-8-Sergey.Semin@baikalelectronics.ru
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/dw/core.c

index 33e99d9..fb95920 100644 (file)
@@ -1229,6 +1229,13 @@ int do_dma_probe(struct dw_dma_chip *chip)
                             BIT(DMA_MEM_TO_MEM);
        dw->dma.residue_granularity = DMA_RESIDUE_GRANULARITY_BURST;
 
+       /*
+        * For now there is no hardware with non uniform maximum block size
+        * across all of the device channels, so we set the maximum segment
+        * size as the block size found for the very first channel.
+        */
+       dma_set_max_seg_size(dw->dma.dev, dw->chan[0].block_size);
+
        err = dma_async_device_register(&dw->dma);
        if (err)
                goto err_dma_register;