50 lines
1.7 KiB
Diff
50 lines
1.7 KiB
Diff
From 3a70dd2d050331ee4cf5ad9d5c0a32d83ead9a43 Mon Sep 17 00:00:00 2001
|
|
From: Peter Hess <peter.hess@ph-home.de>
|
|
Date: Tue, 6 Jul 2021 14:16:09 +0200
|
|
Subject: spi: mediatek: fix fifo rx mode
|
|
|
|
In FIFO mode were two problems:
|
|
- RX mode was never handled and
|
|
- in this case the tx_buf pointer was NULL and caused an exception
|
|
|
|
fix this by handling RX mode in mtk_spi_fifo_transfer
|
|
|
|
Fixes: a568231f4632 ("spi: mediatek: Add spi bus for Mediatek MT8173")
|
|
Signed-off-by: Peter Hess <peter.hess@ph-home.de>
|
|
Signed-off-by: Frank Wunderlich <frank-w@public-files.de>
|
|
Link: https://lore.kernel.org/r/20210706121609.680534-1-linux@fw-web.de
|
|
Signed-off-by: Mark Brown <broonie@kernel.org>
|
|
---
|
|
drivers/spi/spi-mt65xx.c | 16 +++++++++++++---
|
|
1 file changed, 13 insertions(+), 3 deletions(-)
|
|
|
|
--- a/drivers/spi/spi-mt65xx.c
|
|
+++ b/drivers/spi/spi-mt65xx.c
|
|
@@ -434,13 +434,23 @@ static int mtk_spi_fifo_transfer(struct
|
|
mtk_spi_setup_packet(master);
|
|
|
|
cnt = xfer->len / 4;
|
|
- iowrite32_rep(mdata->base + SPI_TX_DATA_REG, xfer->tx_buf, cnt);
|
|
+ if (xfer->tx_buf)
|
|
+ iowrite32_rep(mdata->base + SPI_TX_DATA_REG, xfer->tx_buf, cnt);
|
|
+
|
|
+ if (xfer->rx_buf)
|
|
+ ioread32_rep(mdata->base + SPI_RX_DATA_REG, xfer->rx_buf, cnt);
|
|
|
|
remainder = xfer->len % 4;
|
|
if (remainder > 0) {
|
|
reg_val = 0;
|
|
- memcpy(®_val, xfer->tx_buf + (cnt * 4), remainder);
|
|
- writel(reg_val, mdata->base + SPI_TX_DATA_REG);
|
|
+ if (xfer->tx_buf) {
|
|
+ memcpy(®_val, xfer->tx_buf + (cnt * 4), remainder);
|
|
+ writel(reg_val, mdata->base + SPI_TX_DATA_REG);
|
|
+ }
|
|
+ if (xfer->rx_buf) {
|
|
+ reg_val = readl(mdata->base + SPI_RX_DATA_REG);
|
|
+ memcpy(xfer->rx_buf + (cnt * 4), ®_val, remainder);
|
|
+ }
|
|
}
|
|
|
|
mtk_spi_enable_transfer(master);
|