summaryrefslogtreecommitdiff
authorSunny Luo <sunny.luo@amlogic.com>2019-09-19 11:21:34 (GMT)
committer Jianxin Pan <jianxin.pan@amlogic.com>2019-10-21 09:30:28 (GMT)
commit5aadc0407c52584f10d3990d22e821f0b455f20c (patch)
tree31018ede494018815173890a974c89317e3a97f2
parent43db4e3141e9ee7b81706b76e99db081ad12ae56 (diff)
downloadcommon-5aadc0407c52584f10d3990d22e821f0b455f20c.zip
common-5aadc0407c52584f10d3990d22e821f0b455f20c.tar.gz
common-5aadc0407c52584f10d3990d22e821f0b455f20c.tar.bz2
spicc: fix the condition issue of dma [1/1]
PD#SH-1213 Problem: spicc will not run dma if bits_per_word isn't 64, though dma mapped by the slave driver. Solution: change to run dma once dma mapped Verify: axg s400 Change-Id: I8625f973bdd5a2d69831e2c766dd43bc0417e0a5 Signed-off-by: Sunny Luo <sunny.luo@amlogic.com>
Diffstat
-rw-r--r--drivers/spi/spi-meson-spicc.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/spi/spi-meson-spicc.c b/drivers/spi/spi-meson-spicc.c
index ea35284..987316a 100644
--- a/drivers/spi/spi-meson-spicc.c
+++ b/drivers/spi/spi-meson-spicc.c
@@ -555,9 +555,9 @@ static void meson_spicc_setup_xfer(struct meson_spicc_device *spicc,
meson_spicc_auto_io_delay(spicc);
spicc->using_dma = 0;
- if ((xfer->bits_per_word == 64)
- && (spicc->message->is_dma_mapped
- || !meson_spicc_dma_map(spicc, xfer))) {
+ if (spicc->message->is_dma_mapped ||
+ ((xfer->bits_per_word == 64) &&
+ !meson_spicc_dma_map(spicc, xfer))) {
spicc->using_dma = 1;
writel_relaxed(xfer->tx_dma, spicc->base + SPICC_DRADDR);
writel_relaxed(xfer->rx_dma, spicc->base + SPICC_DWADDR);
@@ -585,6 +585,9 @@ static int meson_spicc_transfer_one(struct spi_master *master,
spicc->bytes_per_word =
DIV_ROUND_UP(spicc->xfer->bits_per_word, 8);
+ if (spicc->message->is_dma_mapped)
+ spicc->bytes_per_word = 8;
+
if (xfer->len % spicc->bytes_per_word)
return -EINVAL;