RE: [PATCH v9 RESEND 01/13] spi: imx: add dma_sync_sg_for_device after fallback from dma
From: Robin Gong <hidden>
Date: 2020-06-08 15:08:54
Also in:
dmaengine, linux-devicetree, linux-spi, lkml
On 2020/06/08 22:35 Mark Brown [off-list ref] wrote:
On Sun, Jun 07, 2020 at 07:21:05AM +0800, Robin Gong wrote:quoted
In case dma transfer failed and fallback to pio, tx_buf/rx_buf need to be taken care cache since they have already been maintained by spi.cIs this needed as part of this series? This looks like an independent fix and it seems better to get this in independently.
But that's used to fix one patch [05/13]of the v8 patch set. To be honest, I'm also not sure how to handle it so that I merged both into first v9....For now, I think you are right, since 'fallback pio' patch could be independent this series. Will resend in v10.
quoted
Fixes: bcd8e7761ec9("spi: imx: fallback to PIO if dma setup failure") Signed-off-by: Robin Gong <redacted> Reported-by: Matthias Schiffer <redacted> Link: https://lore.kernel.org/linux-arm-kernel/5d246dd81607bb6e5cb9af86ad4e5 3f7a7a99c50.camel@ew.tq-group.com/The Link is usually to the patch on the list.
Okay, will remove it.
quoted
--- a/drivers/spi/spi-imx.c +++ b/drivers/spi/spi-imx.c@@ -1456,6 +1456,13 @@ static int spi_imx_pio_transfer(struct spi_device*spi,quoted
return -ETIMEDOUT; } + if (transfer->rx_sg.sgl) { + struct device *rx_dev = spi->controller->dma_rx->device->dev; + + dma_sync_sg_for_device(rx_dev, transfer->rx_sg.sgl, + transfer->rx_sg.nents, DMA_TO_DEVICE); + } + return transfer->len; }This is confusing - why are we DMA mapping to the device after doing a PIO transfer?
'transfer->rx_sg.sgl' condition check that's the case fallback PIO after DMA transfer failed. But the spi core still think the buffer should be in 'device' while spi driver touch it by PIO(CPU), so sync it back to device to ensure all received data flush to DDR. _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel