From: Greg Kroah-Hartman Date: Sat, 7 Aug 2021 08:21:36 +0000 (+0200) Subject: 5.4-stable patches X-Git-Tag: v4.4.279~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3439adba5d70a008648cf3ff5e48e488b8a8a896;p=thirdparty%2Fkernel%2Fstable-queue.git 5.4-stable patches added patches: spi-mediatek-fix-fifo-transfer.patch --- diff --git a/queue-5.4/revert-spi-mediatek-fix-fifo-rx-mode.patch b/queue-5.4/revert-spi-mediatek-fix-fifo-rx-mode.patch deleted file mode 100644 index f2340d89932..00000000000 --- a/queue-5.4/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 d99aaf07365fa9b8585f49d8ecd493f658fbe9a5 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 -@@ -427,23 +427,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-5.4/series b/queue-5.4/series index 1dcfd41d824..c8d0e0f3fb4 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -10,7 +10,6 @@ qed-fix-possible-unpaired-spin_-un-lock_bh-in-_qed_m.patch net-fix-zero-copy-head-len-calculation.patch nvme-fix-nvme_setup_command-metadata-trace-event.patch acpi-fix-null-pointer-dereference.patch -revert-spi-mediatek-fix-fifo-rx-mode.patch revert-bluetooth-shutdown-controller-after-workqueues-are-flushed-or-cancelled.patch firmware-arm_scmi-ensure-drivers-provide-a-probe-function.patch firmware-arm_scmi-add-delayed-response-status-check.patch @@ -21,3 +20,4 @@ bpf-fix-leakage-under-speculation-on-mispredicted-branches.patch bpf-test_verifier-add-alu32-bounds-tracking-tests.patch bpf-selftests-add-a-verifier-test-for-assigning-32bit-reg-states-to-64bit-ones.patch bpf-selftests-adjust-few-selftest-outcomes-wrt-unreachable-code.patch +spi-mediatek-fix-fifo-transfer.patch diff --git a/queue-5.4/spi-mediatek-fix-fifo-transfer.patch b/queue-5.4/spi-mediatek-fix-fifo-transfer.patch new file mode 100644 index 00000000000..b76a733b408 --- /dev/null +++ b/queue-5.4/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 +@@ -426,24 +426,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);