]> git.hungrycats.org Git - linux/commit
spi: atmel: Fix interrupt setup for PDC transfers
authorTorsten Fleischer <torfl6749@gmail.com>
Tue, 24 Feb 2015 15:32:57 +0000 (16:32 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 26 Mar 2015 12:59:43 +0000 (13:59 +0100)
commit5d581084067d7f5d16a73210d2219ac711a8a987
tree5c8423050967357761ebba412fc6b9b8200d3cb5
parent5bbd2846646689008d534b0a68178956dc70a579
spi: atmel: Fix interrupt setup for PDC transfers

commit 76e1d14b316d6f501ebc001e7a5d86b24ce5b615 upstream.

Additionally to the current DMA transfer the PDC allows to set up a next DMA
transfer. This is useful for larger SPI transfers.

The driver currently waits for ENDRX as end of the transfer. But ENDRX is set
when the current DMA transfer is done (RCR = 0), i.e. it doesn't include the
next DMA transfer.
Thus a subsequent SPI transfer could be started although there is currently a
transfer in progress. This can cause invalid accesses to the SPI slave devices
and to SPI transfer errors.

This issue has been observed on a hardware with a M25P128 SPI NOR flash.

So instead of ENDRX we should wait for RXBUFF. This flag is set if there is
no more DMA transfer in progress (RCR = RNCR = 0).

Signed-off-by: Torsten Fleischer <torfl6749@gmail.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/spi/spi-atmel.c