Introudce fallback pio way at spi core level so that the tx/rx buffer
mapped by spi core for dma could be unmap and fallback pio again. Hence no
need the below patch where 'dma_sync_sg_for_devic' to sync fresh data back
into 'device' memory and sync to 'cpu' again in spi core.
https://www.spinics.net/lists/arm-kernel/msg812236.html

If you want to use this fallback feature, please set xfer->error with
SPI_TRANS_FAIL_NO_START in case dma transfer failed(but no any data push
into spi bus yet) in spi client driver and add 'master->fallback' checking
in your can_dma() to ensure spi core can fallback to pio next time.

change from:
v2: 
  1. Add error flag in stuct spi_transfer and fallback to pio if spi client
     return SPI_TRANS_FAIL_NO_START failure before dma transfer start.
  2. Remove SPI_MASTER_FALLBACK set on master->flags since the above error
     flag could ensure no any impact for other spi client drivers which don't
     need this feature.

Robin Gong (2):
  spi: introduce fallback to pio
  spi: imx: add fallback feature

 drivers/spi/spi-imx.c   | 23 +++++------------------
 drivers/spi/spi.c       | 11 +++++++++++
 include/linux/spi/spi.h |  4 ++++
 3 files changed, 20 insertions(+), 18 deletions(-)

-- 
2.7.4

Reply via email to