dmaengine_terminate_sync(dws->rxchan);
                dma_release_channel(dws->rxchan);
        }
+
+       dw_writel(dws, DW_SPI_DMACR, 0);
 }
 
 static irqreturn_t dma_transfer(struct dw_spi *dws)
        clear_bit(TX_BUSY, &dws->dma_chan_busy);
        if (test_bit(RX_BUSY, &dws->dma_chan_busy))
                return;
+
+       dw_writel(dws, DW_SPI_DMACR, 0);
        spi_finalize_current_transfer(dws->master);
 }
 
        clear_bit(RX_BUSY, &dws->dma_chan_busy);
        if (test_bit(TX_BUSY, &dws->dma_chan_busy))
                return;
+
+       dw_writel(dws, DW_SPI_DMACR, 0);
        spi_finalize_current_transfer(dws->master);
 }
 
                dmaengine_terminate_sync(dws->rxchan);
                clear_bit(RX_BUSY, &dws->dma_chan_busy);
        }
+
+       dw_writel(dws, DW_SPI_DMACR, 0);
 }
 
 static const struct dw_spi_dma_ops mfld_dma_ops = {