• Akinobu Mita's avatar
    dmaengine: xilinx: fix device_terminate_all() callback for AXI CDMA · 676f9c26
    Akinobu Mita authored
    The device_terminate_all() callback for this driver stops current DMA
    operations by clearing RUNSTOP bit in the control register and waiting
    HALTED bit set in the status register.
    
    But AXI CDMA which is one of the supported DMA engine by this driver
    does not provide the run / stop controls and those bits in the control
    and status registers are reserved.  So when device_terminate_all() is
    called, the error message is printed and the channel is marked as having
    errors in xilinx_dma_halt().
    
    This change adds stop_transfer() callback which differentiates CDMA and
    other DMA engine.  The CDMA's one avoids the unsupported operations and
    instead polls the status register to check if the DMA operations are in
    progress for AXI CDMA.
    
    Cc: Vinod Koul <vinod.koul@intel.com>
    Cc: Kedareswara rao Appana <appana.durga.rao@xilinx.com>
    Cc: Michal Simek <monstr@monstr.eu>
    Signed-off-by: default avatarAkinobu Mita <akinobu.mita@gmail.com>
    Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
    676f9c26
xilinx_dma.c 73 KB