• Jiada Wang's avatar
    dmaengine: imx: correct sdmac->status for cyclic dma tx · ffe59b29
    Jiada Wang authored
    In cyclic dma tx's handler sdma_handle_channel_loop(),
    SDMA channel statue is set to either DMA_ERROR or DMA_IN_PROGRESS
    based on each period's status. This has the following issues:
    
    1) If one period's status is BD_RROR, then channel status
       will be set to DMA_ERROR, but it will be overwritten to DMA_IN_PROGRESS
       if the following periods are OK.
    2) DMA client may call sdma_control(DMA_TERMINATE_ALL) to stop the cyclic dma
       operation, sdma channel status will be set to DMA_ERROR,
       but if after this handler is called, then again the channel status will be overwritten
       to DMA_IN_PROGRESS. Then the following dmaengine_prep_dma_cyclic() will always fail,
       as channel status is DMA_IN_PROGRESS.
    
    As in cyclic dma tx, channel status will be initially set to DMA_IN_PROGRESS,
    driver only needs to change it to DMA_ERROR, when something wrong happens
    (one period status is wrong, or stoped by client explicitly).
    Signed-off-by: default avatarJiada Wang <jiada_wang@mentor.com>
    Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
    ffe59b29
imx-sdma.c 40.8 KB