|
@@ -1204,6 +1204,12 @@ static void xilinx_cdma_start_transfer(struct xilinx_dma_chan *chan)
|
|
|
}
|
|
|
|
|
|
if (chan->has_sg) {
|
|
|
+ dma_ctrl_clr(chan, XILINX_DMA_REG_DMACR,
|
|
|
+ XILINX_CDMA_CR_SGMODE);
|
|
|
+
|
|
|
+ dma_ctrl_set(chan, XILINX_DMA_REG_DMACR,
|
|
|
+ XILINX_CDMA_CR_SGMODE);
|
|
|
+
|
|
|
xilinx_write(chan, XILINX_DMA_REG_CURDESC,
|
|
|
head_desc->async_tx.phys);
|
|
|
|
|
@@ -2052,6 +2058,10 @@ static int xilinx_dma_terminate_all(struct dma_chan *dchan)
|
|
|
chan->cyclic = false;
|
|
|
}
|
|
|
|
|
|
+ if ((chan->xdev->dma_config->dmatype == XDMA_TYPE_CDMA) && chan->has_sg)
|
|
|
+ dma_ctrl_clr(chan, XILINX_DMA_REG_DMACR,
|
|
|
+ XILINX_CDMA_CR_SGMODE);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|