lkml.org 
[lkml]   [2020]   [Jul]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v7 07/11] dmaengine: dw: Set DMA device max segment size parameter
    Date
    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>
    Cc: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru>
    Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Rob Herring <robh+dt@kernel.org>
    Cc: linux-mips@vger.kernel.org
    Cc: devicetree@vger.kernel.org

    ---

    Changelog v2:
    - This is a new patch created in place of the dropped one:
    "dmaengine: dw: Add LLP and block size config accessors".

    Changelog v3:
    - Use the block_size found for the very first channel instead of looking for
    the maximum of maximum block sizes.
    - Don't define device-specific device_dma_parameters object, since it has
    already been defined by the platform device core.
    ---
    drivers/dma/dw/core.c | 7 +++++++
    1 file changed, 7 insertions(+)

    diff --git a/drivers/dma/dw/core.c b/drivers/dma/dw/core.c
    index 33e99d95b3d3..fb95920c429e 100644
    --- a/drivers/dma/dw/core.c
    +++ b/drivers/dma/dw/core.c
    @@ -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;
    --
    2.26.2
    \
     
     \ /
      Last update: 2020-07-10 00:47    [W:4.099 / U:0.228 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site