• Serge Semin's avatar
    dmaengine: Introduce max SG burst capability · b1b40b8f
    Serge Semin authored
    Some devices may lack the support of the hardware accelerated SG list
    entries automatic walking through and execution. In this case a burden of
    the SG list traversal and DMA engine re-initialization lies on the
    DMA engine driver (normally implemented by using a DMA transfer completion
    IRQ to recharge the DMA device with a next SG list entry). But such
    solution may not be suitable for some DMA consumers. In particular SPI
    devices need both Tx and Rx DMA channels work synchronously in order
    to avoid the Rx FIFO overflow. In case if Rx DMA channel is paused for
    some time while the Tx DMA channel works implicitly pulling data into the
    Rx FIFO, the later will be eventually overflown, which will cause the data
    loss. So if SG list entries aren't automatically fetched by the DMA
    engine, but are one-by-one manually selected for execution in the
    ISRs/deferred work/etc., such problem will eventually happen due to the
    non-deterministic latencies of the service execution.
    
    In order to let the DMA consumer know about the DMA device capabilities
    regarding the hardware accelerated SG list traversal we introduce the
    max_sg_burst capability. It is supposed to be initialized by the DMA engine
    driver with 0 if there is no limitation of the number of SG entries
    atomically executed and with non-zero value if there is such constraints,
    so the upper limit is determined by the number set to the property.
    Suggested-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: default avatarSerge Semin <Sergey.Semin@baikalelectronics.ru>
    Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20200723005848.31907-5-Sergey.Semin@baikalelectronics.ruSigned-off-by: default avatarVinod Koul <vkoul@kernel.org>
    b1b40b8f
dmaengine.c 41.2 KB