On 16.11.22 17:49, Marc Kleine-Budde wrote: > The SPI framework checks for each transfer (with the struct > spi_controller::can_dma callback) whether the driver wants to use DMA > for the transfer. If the driver returns true, the SPI framework will > map the transfer's data to the device, start the actual transfer and > map the data back. > > In commit 07e759387788 ("spi: spi-imx: add PIO polling support") the > spi-imx driver's spi_imx_transfer_one() function was extended. If the > estimated duration of a transfer does not exceed a configurable > duration, a polling transfer function is used. This check happens > before checking if the driver decided earlier for a DMA transfer. > > If spi_imx_can_dma() decided to use a DMA transfer, and the user > configured a big maximum polling duration, a polling transfer will be > used. The DMA unmap after the transfer destroys the transferred data. > > To fix this problem check in spi_imx_transfer_one() if the driver > decided for DMA transfer first, then check the limits for a polling > transfer. > > Fixes: 07e759387788 ("spi: spi-imx: add PIO polling support") > Link: https://lore.kernel.org/all/20221111003032.82371-1-festevam@xxxxxxxxx > Reported-by: Frieder Schrempf <frieder.schrempf@xxxxxxxxxx> > Reported-by: Fabio Estevam <festevam@xxxxxxxxx> > Tested-by: Fabio Estevam <festevam@xxxxxxxxx> > Cc: David Jander <david@xxxxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx> Tested-by: Frieder Schrempf <frieder.schrempf@xxxxxxxxxx> Reviewed-by: Frieder Schrempf <frieder.schrempf@xxxxxxxxxx>