linux-yocto/drivers/spi
James Clark aa93890d2d spi: spi-fsl-dspi: Clear completion counter before initiating transfer
[ Upstream commit fa60c094c1 ]

In target mode, extra interrupts can be received between the end of a
transfer and halting the module if the host continues sending more data.
If the interrupt from this occurs after the reinit_completion() then the
completion counter is left at a non-zero value. The next unrelated
transfer initiated by userspace will then complete immediately without
waiting for the interrupt or writing to the RX buffer.

Fix it by resetting the counter before the transfer so that lingering
values are cleared. This is done after clearing the FIFOs and the
status register but before the transfer is initiated, so no interrupts
should be received at this point resulting in other race conditions.

Fixes: 4f5ee75ea1 ("spi: spi-fsl-dspi: Replace interruptible wait queue with a simple completion")
Signed-off-by: James Clark <james.clark@linaro.org>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Link: https://patch.msgid.link/20250627-james-nxp-spi-dma-v4-1-178dba20c120@linaro.org
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2025-07-10 15:59:47 +02:00
..
atmel-quadspi.c spi: atmel-quadspi: Fix wrong register value written to MR 2025-03-07 16:56:41 +01:00
internals.h
Kconfig spi: spi-zynqmp-gqspi: fix driver kconfig dependencies 2024-01-25 15:27:19 -08:00
Makefile
spi-altera-core.c
spi-altera-dfl.c
spi-altera-platform.c
spi-amd.c
spi-ar934x.c
spi-armada-3700.c
spi-aspeed-smc.c spi: aspeed: Fix an error handling path in aspeed_spi_[read|write]_user() 2024-12-19 18:08:55 +01:00
spi-at91-usart.c
spi-ath79.c
spi-atmel.c spi: atmel: Fix clock issue when using devices with different polarities 2024-01-05 15:18:38 +01:00
spi-au1550.c
spi-axi-spi-engine.c spi: axi-spi-engine: fix version format string 2024-05-17 11:55:57 +02:00
spi-bcm-qspi.c spi: bcm-qspi: fix SFDP BFPT read by usig mspi read 2024-01-31 16:17:12 -08:00
spi-bcm-qspi.h
spi-bcm63xx-hsspi.c spi: bcm63xx-hsspi: fix shared reset 2025-06-27 11:07:17 +01:00
spi-bcm63xx.c spi: bcm63xx-spi: fix shared reset 2025-06-27 11:07:17 +01:00
spi-bcm2835.c
spi-bcm2835aux.c
spi-bitbang-txrx.h
spi-bitbang.c
spi-brcmstb-qspi.c
spi-butterfly.c
spi-cadence-quadspi.c spi: cadence-qspi: fix pointer reference in runtime PM hooks 2025-05-22 14:10:11 +02:00
spi-cadence-xspi.c spi: cadence: Ensure data lines set to low during dummy-cycle period 2024-07-11 12:47:18 +02:00
spi-cadence.c
spi-cavium-octeon.c
spi-cavium-thunderx.c
spi-cavium.c
spi-cavium.h
spi-clps711x.c
spi-coldfire-qspi.c
spi-davinci.c
spi-dln2.c
spi-dw-bt1.c
spi-dw-core.c spi: dw: Round of n_bytes to power of 2 2023-07-19 16:21:05 +02:00
spi-dw-dma.c
spi-dw-mmio.c spi: dw: Remove misleading comment for Mount Evans SoC 2023-07-27 08:50:50 +02:00
spi-dw-pci.c
spi-dw.h
spi-ep93xx.c
spi-falcon.c
spi-fsi.c
spi-fsl-cpm.c spi: fsl-cpm: Use 16 bit mode for large transfers with even size 2023-05-17 11:54:00 +02:00
spi-fsl-cpm.h
spi-fsl-dspi.c spi: spi-fsl-dspi: Clear completion counter before initiating transfer 2025-07-10 15:59:47 +02:00
spi-fsl-espi.c
spi-fsl-lib.c
spi-fsl-lib.h
spi-fsl-lpspi.c spi: spi-fsl-lpspi: Use IRQF_NO_AUTOEN flag in request_irq() 2024-12-14 19:53:20 +01:00
spi-fsl-qspi.c
spi-fsl-spi.c spi: fsl-cpm: Use 16 bit mode for large transfers with even size 2023-05-17 11:54:00 +02:00
spi-fsl-spi.h
spi-geni-qcom.c spi: geni-qcom: Fix incorrect free_irq() sequence 2024-09-18 19:23:06 +02:00
spi-gpio.c
spi-gxp.c spi: spi-gxp: BUG: Correct spi write return value 2023-10-06 14:56:46 +02:00
spi-hisi-kunpeng.c spi: hisi-kunpeng: Delete the dump interface of data registers in debugfs 2024-05-17 11:55:58 +02:00
spi-hisi-sfc-v3xx.c spi: hisi-sfc-v3xx: Return IRQ_NONE if no interrupts were detected 2024-03-01 13:26:25 +01:00
spi-img-spfi.c
spi-imx.c spi: spi-imx: Add check for spi_imx_setupxfer() 2025-05-02 07:47:08 +02:00
spi-ingenic.c
spi-intel-pci.c spi: intel-pci: Add support for Granite Rapids SPI serial flash 2023-10-06 14:56:55 +02:00
spi-intel-platform.c
spi-intel.c
spi-intel.h
spi-iproc-qspi.c
spi-jcore.c
spi-lantiq-ssc.c
spi-lm70llp.c
spi-loopback-test.c spi: loopback-test: Do not split 1024-byte hexdumps 2025-05-22 14:10:02 +02:00
spi-lp8841-rtc.c
spi-mem.c
spi-meson-spicc.c
spi-meson-spifc.c
spi-microchip-core-qspi.c spi: microchip-core-qspi: fix setting spi bus clock rate 2024-05-17 11:56:22 +02:00
spi-microchip-core.c spi: microchip-core: fix init function not setting the master and motorola modes 2024-08-03 08:49:51 +02:00
spi-mpc52xx-psc.c
spi-mpc52xx.c spi: mpc52xx: Add cancel_work_sync before module remove 2024-12-14 19:54:30 +01:00
spi-mpc512x-psc.c
spi-mt65xx.c spi: spi-mt65xx: Fix NULL pointer access in interrupt handler 2024-03-26 18:21:02 -04:00
spi-mt7621.c
spi-mtk-nor.c
spi-mtk-snfi.c
spi-mux.c spi: mux: set ctlr->bits_per_word_mask 2024-07-25 09:49:19 +02:00
spi-mxic.c
spi-mxs.c spi-mxs: Fix chipselect glitch 2025-03-13 12:53:24 +01:00
spi-npcm-fiu.c spi: npcm-fiu: Fix UMA reads when dummy.nbytes == 0 2023-11-08 14:10:59 +01:00
spi-npcm-pspi.c
spi-nxp-fspi.c spi: nxp-fspi: fix the KASAN report out-of-bounds bug 2024-09-18 19:23:06 +02:00
spi-oc-tiny.c
spi-omap-100k.c
spi-omap-uwire.c
spi-omap2-mcspi.c
spi-orion.c
spi-pic32-sqi.c
spi-pic32.c
spi-pl022.c
spi-ppc4xx.c spi: ppc4xx: Avoid returning 0 when failed to parse and map IRQ 2024-10-17 15:20:45 +02:00
spi-pxa2xx-dma.c
spi-pxa2xx-pci.c
spi-pxa2xx.c
spi-pxa2xx.h
spi-qcom-qspi.c
spi-qup.c spi: qup: Request DMA before enabling clocks 2023-06-14 11:15:15 +02:00
spi-rb4xx.c
spi-realtek-rtl.c
spi-rockchip-sfc.c
spi-rockchip.c spi: rockchip: Resolve unbalanced runtime PM / system PM handling 2024-09-12 11:10:18 +02:00
spi-rpc-if.c memory: renesas-rpc-if: Remove Runtime PM wrappers 2024-12-14 19:53:37 +01:00
spi-rspi.c
spi-s3c24xx-regs.h
spi-s3c24xx.c
spi-s3c64xx.c spi: s3c64xx: fix timeout counters in flush_fifo 2024-10-17 15:21:49 +02:00
spi-sc18is602.c
spi-sh-hspi.c
spi-sh-msiof.c spi: sh-msiof: Fix maximum DMA transfer size 2025-06-27 11:07:07 +01:00
spi-sh-sci.c
spi-sh.c
spi-sifive.c
spi-slave-mt27xx.c
spi-slave-system-control.c
spi-slave-time.c
spi-sprd-adi.c
spi-sprd.c
spi-st-ssc4.c
spi-stm32-qspi.c spi: stm32: qspi: Clamp stm32_qspi_get_mode() output to CCR_BUSWIDTH_4 2024-06-27 13:46:23 +02:00
spi-stm32.c spi: stm32: Don't warn about spurious interrupts 2024-06-12 11:03:58 +02:00
spi-sun4i.c spi: spi-sun4i: fix early activation 2025-06-04 14:40:26 +02:00
spi-sun6i.c spi: sun6i: fix race between DMA RX transfer completion and RX FIFO drain 2023-10-06 14:56:51 +02:00
spi-sunplus-sp7021.c
spi-synquacer.c
spi-tegra20-sflash.c spi: tegra20-sflash: fix to check return value of platform_get_irq() in tegra_sflash_probe() 2023-09-13 09:42:31 +02:00
spi-tegra20-slink.c spi: tegra: Fix missing IRQ check in tegra_slink_probe() 2023-11-20 11:51:55 +01:00
spi-tegra114.c
spi-tegra210-quad.c spi: tegra210-quad: modify chip select (CS) deactivation 2025-06-27 11:07:07 +01:00
spi-test.h
spi-ti-qspi.c
spi-tle62x0.c
spi-topcliff-pch.c
spi-uniphier.c
spi-xcomm.c
spi-xilinx.c
spi-xlp.c
spi-xtensa-xtfpga.c
spi-zynq-qspi.c spi: zynq-qspi: Add check for clk_enable() 2025-02-21 13:48:59 +01:00
spi-zynqmp-gqspi.c spi: zynqmp-gqspi: Always acknowledge interrupts 2025-06-04 14:40:17 +02:00
spi.c spi: Fix acpi deferred irq probe 2024-12-14 19:54:02 +01:00
spidev.c spi: spidev: Add missing spi_device_id for jg10309-01 2024-09-30 16:23:50 +02:00