From 98baa942b080f107f542675960bad169c68c6829 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 7 Aug 2021 10:21:20 +0200 Subject: [PATCH] 4.19-stable patches added patches: spi-mediatek-fix-fifo-transfer.patch --- ...revert-spi-mediatek-fix-fifo-rx-mode.patch | 52 -------------- queue-4.19/series | 2 +- .../spi-mediatek-fix-fifo-transfer.patch | 68 +++++++++++++++++++ 3 files changed, 69 insertions(+), 53 deletions(-) delete mode 100644 queue-4.19/revert-spi-mediatek-fix-fifo-rx-mode.patch create mode 100644 queue-4.19/spi-mediatek-fix-fifo-transfer.patch diff --git a/queue-4.19/revert-spi-mediatek-fix-fifo-rx-mode.patch b/queue-4.19/revert-spi-mediatek-fix-fifo-rx-mode.patch deleted file mode 100644 index 41acc07307d..00000000000 --- a/queue-4.19/revert-spi-mediatek-fix-fifo-rx-mode.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 568f12594bc88a1b8f9e697c9bf6a3a5b6b6d134 Mon Sep 17 00:00:00 2001 -From: Greg Kroah-Hartman -Date: Thu, 5 Aug 2021 20:53:50 +0200 -Subject: Revert "spi: mediatek: fix fifo rx mode" - -From: Greg Kroah-Hartman - -This reverts commit bd0447f72de0963129612bf18202204d5b25e133 which is -commit 3a70dd2d050331ee4cf5ad9d5c0a32d83ead9a43 upstream. - -It has been found to have problems. - -Reported-by: Guenter Roeck -Cc: Peter Hess -Cc: Frank Wunderlich -Cc: Mark Brown -Cc: Sasha Levin -Link: https://lore.kernel.org/r/efee3a58-a4d2-af22-0931-e81b877ab539@roeck-us.net -Signed-off-by: Greg Kroah-Hartman ---- - drivers/spi/spi-mt65xx.c | 16 +++------------- - 1 file changed, 3 insertions(+), 13 deletions(-) - ---- a/drivers/spi/spi-mt65xx.c -+++ b/drivers/spi/spi-mt65xx.c -@@ -392,23 +392,13 @@ static int mtk_spi_fifo_transfer(struct - mtk_spi_setup_packet(master); - - cnt = xfer->len / 4; -- 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); -+ iowrite32_rep(mdata->base + SPI_TX_DATA_REG, xfer->tx_buf, cnt); - - remainder = xfer->len % 4; - if (remainder > 0) { - reg_val = 0; -- 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); -- } -+ memcpy(®_val, xfer->tx_buf + (cnt * 4), remainder); -+ writel(reg_val, mdata->base + SPI_TX_DATA_REG); - } - - mtk_spi_enable_transfer(master); diff --git a/queue-4.19/series b/queue-4.19/series index fe49cfee7ed..3d458b5d3d9 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -7,10 +7,10 @@ net-fix-zero-copy-head-len-calculation.patch bdi-move-bdi_dev_name-out-of-line.patch bdi-use-bdi_dev_name-to-get-device-name.patch bdi-add-a-dev_name-field-to-struct-backing_dev_info.patch -revert-spi-mediatek-fix-fifo-rx-mode.patch revert-bluetooth-shutdown-controller-after-workqueues-are-flushed-or-cancelled.patch drm-i915-ensure-intel_engine_init_execlist-builds-with-clang.patch firmware-arm_scmi-ensure-drivers-provide-a-probe-function.patch revert-watchdog-itco_wdt-account-for-rebooting-on-second-timeout.patch padata-validate-cpumask-without-removed-cpu-during-offline.patch padata-add-separate-cpuhp-node-for-cpuhp_padata_dead.patch +spi-mediatek-fix-fifo-transfer.patch diff --git a/queue-4.19/spi-mediatek-fix-fifo-transfer.patch b/queue-4.19/spi-mediatek-fix-fifo-transfer.patch new file mode 100644 index 00000000000..ef418271791 --- /dev/null +++ b/queue-4.19/spi-mediatek-fix-fifo-transfer.patch @@ -0,0 +1,68 @@ +From 0d5c3954b35eddff0da0436c31e8d721eceb7dc2 Mon Sep 17 00:00:00 2001 +From: Guenter Roeck +Date: Sun, 1 Aug 2021 20:00:23 -0700 +Subject: spi: mediatek: Fix fifo transfer + +From: Guenter Roeck + +commit 0d5c3954b35eddff0da0436c31e8d721eceb7dc2 upstream. + +Commit 3a70dd2d0503 ("spi: mediatek: fix fifo rx mode") claims that +fifo RX mode was never handled, and adds the presumably missing code +to the FIFO transfer function. However, the claim that receive data +was not handled is incorrect. It was handled as part of interrupt +handling after the transfer was complete. The code added with the above +mentioned commit reads data from the receive FIFO before the transfer +is started, which is wrong. This results in an actual transfer error +on a Hayato Chromebook. + +Remove the code trying to handle receive data before the transfer is +started to fix the problem. + +Fixes: 3a70dd2d0503 ("spi: mediatek: fix fifo rx mode") +Cc: Peter Hess +Cc: Frank Wunderlich +Cc: Tzung-Bi Shih +Cc: Hsin-Yi Wang +Signed-off-by: Guenter Roeck +Tested-by: Hsin-Yi Wang +Tested-by: Tzung-Bi Shih +Link: https://lore.kernel.org/r/20210802030023.1748777-1-linux@roeck-us.net +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman +--- + drivers/spi/spi-mt65xx.c | 19 +++++-------------- + 1 file changed, 5 insertions(+), 14 deletions(-) + +--- a/drivers/spi/spi-mt65xx.c ++++ b/drivers/spi/spi-mt65xx.c +@@ -391,24 +391,15 @@ static int mtk_spi_fifo_transfer(struct + mtk_spi_prepare_transfer(master, xfer); + mtk_spi_setup_packet(master); + +- cnt = xfer->len / 4; +- if (xfer->tx_buf) ++ if (xfer->tx_buf) { ++ cnt = xfer->len / 4; + 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; +- if (xfer->tx_buf) { ++ 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->rx_buf) { +- reg_val = readl(mdata->base + SPI_RX_DATA_REG); +- memcpy(xfer->rx_buf + (cnt * 4), ®_val, remainder); +- } + } + + mtk_spi_enable_transfer(master); -- 2.47.3