spi: sh-msiof: Add DMA support
authorGeert Uytterhoeven <geert+renesas@glider.be>
Mon, 30 Jun 2014 10:10:24 +0000 (12:10 +0200)
committerSimon Horman <horms@verge.net.au>
Fri, 5 Dec 2014 00:24:22 +0000 (09:24 +0900)
commitdddd84fad1d1b9cafa13f1eaa9fbd448fbcc7db9
tree955bfbee1fced3f6eec49eb4f231c3137bc0157d
parent005e5ca7ac57199889d2b003f41eee6807218e7c
spi: sh-msiof: Add DMA support

Add DMA support to the MSIOF driver using platform data.

As MSIOF DMA is limited to 32-bit words (requiring byte/wordswapping for
smaller wordsizes), and the group length is limited to 256 words, DMA is
performed on two fixed pages, allocated and mapped at driver initialization
time.

Performance figures (in Mbps) on r8a7791/koelsch at different SPI clock
frequencies for 1024-byte and 4096-byte transfers:

                   1024 bytes           4096 bytes
  -  3.25 MHz: PIO  2.1, DMA  2.6 | PIO  2.8, DMA  3.1
  -  6.5  MHz: PIO  3.2, DMA  4.4 | PIO  5.0, DMA  5.9
  - 13    MHz: PIO  4.2, DMA  6.6 | PIO  8.2, DMA 10.7
  - 26    MHz: PIO  5.9, DMA 10.4 | PIO 12.4, DMA 18.4

Note that DMA is only faster than PIO for transfers that exceed the FIFO
size (typically 64 words / 256 bytes).

Also note that large transfers (larger than the group length for DMA, or
larger than the FIFO size for PIO), should use cs-gpio (with the
appropriate pinmux setup), as the hardware chipselect will be deasserted in
between chunks.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit b0d0ce8b6b91a0f6f99045b6019fc4c824634fb4)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
drivers/spi/spi-sh-msiof.c
include/linux/spi/sh_msiof.h