• Yoshihiro Shimoda's avatar
    dmaengine: sh: rcar-dmac: avoid to write CHCR.TE to 1 if TCR is set to 0 · 538603c6
    Yoshihiro Shimoda authored
    This patch fixes an issue that unexpected retransfering happens
    if TCR is set to 0 before rcar_dmac_sync_tcr() writes DE bit to
    the CHCR register. For example, sh-sci driver can reproduce this
    issue like below:
    
     In rx_timer_fn():		/* CHCR DE bit may be set to 1 */
      dmaengine_tx_status()
       rcar_dmac_tx_status()
        rcar_dmac_chan_get_residue()
         rcar_dmac_sync_tcr()	/* TCR is possible to be set to 0 */
    
    According to the description of commit 73a47bd0 ("dmaengine:
    rcar-dmac: use TCRB instead of TCR for residue"), "this buffered data
    will be transferred if CHCR::DE bit was cleared". So, this patch
    doesn't need to check TCRB register.
    
    Fixes: 73a47bd0
    
     ("dmaengine: rcar-dmac: use TCRB instead of TCR for residue")
    Signed-off-by: default avatarYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
    Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
    538603c6
rcar-dmac.c 51.8 KB