From: Dave Jiang Date: Mon, 11 Jun 2018 19:49:03 +0000 (-0700) Subject: dmaengine: ioatdma: set the completion address register after channel reset X-Git-Tag: android-x86-8.1-r1~432^2~8^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=4cb0e60112168594da2ac8a7752b0250c4387733;p=android-x86%2Fkernel.git dmaengine: ioatdma: set the completion address register after channel reset It seems that starting with Skylake Xeon, channel reset clears the completion address register. Make sure the completion address register is set again after reset. Signed-off-by: Dave Jiang Signed-off-by: Vinod Koul --- diff --git a/drivers/dma/ioat/dma.c b/drivers/dma/ioat/dma.c index 8b5b23a8ace9..23fb2fa04000 100644 --- a/drivers/dma/ioat/dma.c +++ b/drivers/dma/ioat/dma.c @@ -688,6 +688,12 @@ static void ioat_restart_channel(struct ioatdma_chan *ioat_chan) { u64 phys_complete; + /* set the completion address register again */ + writel(lower_32_bits(ioat_chan->completion_dma), + ioat_chan->reg_base + IOAT_CHANCMP_OFFSET_LOW); + writel(upper_32_bits(ioat_chan->completion_dma), + ioat_chan->reg_base + IOAT_CHANCMP_OFFSET_HIGH); + ioat_quiesce(ioat_chan, 0); if (ioat_cleanup_preamble(ioat_chan, &phys_complete)) __cleanup(ioat_chan, phys_complete);