linux-yocto/drivers/spi
James Clark 822c05444f 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 16:03:09 +02:00
..
atmel-quadspi.c spi: atmel-qspi: Memory barriers after memory-mapped I/O 2025-02-17 09:40:41 +01:00
internals.h
Kconfig spi: spi-zynqmp-gqspi: fix driver kconfig dependencies 2024-01-25 15:35:14 -08:00
Makefile Add cs42l43 PC focused SoundWire CODEC 2023-08-18 22:46:19 +01:00
spi-altera-core.c
spi-altera-dfl.c
spi-altera-platform.c
spi-amd.c spi: amd: fix Wvoid-pointer-to-enum-cast warning 2023-08-14 13:11:15 +01:00
spi-amlogic-spifc-a1.c spi: amlogic-spifc-a1: switch to use devm_spi_alloc_host() 2023-08-14 13:10:48 +01:00
spi-ar934x.c spi: Explicitly include correct DT includes 2023-07-14 20:53:00 +01:00
spi-armada-3700.c spi: Explicitly include correct DT includes 2023-07-14 20:53:00 +01:00
spi-aspeed-smc.c spi: aspeed: Fix an error handling path in aspeed_spi_[read|write]_user() 2024-12-19 18:11:29 +01:00
spi-at91-usart.c spi: at91-usart: Use PTR_ERR_OR_ZERO() to simplify code 2023-08-22 13:51:35 +01:00
spi-ath79.c spi: Rename SPI_MASTER_GPIO_SS to SPI_CONTROLLER_GPIO_SS 2023-07-11 14:12:56 +01:00
spi-atmel.c spi: atmel: Fix clock issue when using devices with different polarities 2024-01-01 12:42:44 +00:00
spi-au1550.c spi: au1550: switch to use modern name 2023-08-14 13:10:49 +01:00
spi-axi-spi-engine.c spi: axi-spi-engine: fix version format string 2024-05-17 12:02:01 +02:00
spi-bcm-qspi.c spi: bcm-qspi: fix SFDP BFPT read by usig mspi read 2024-01-31 16:19:13 -08:00
spi-bcm-qspi.h
spi-bcm63xx-hsspi.c spi: bcm63xx-hsspi: fix shared reset 2025-06-19 15:28:32 +02:00
spi-bcm63xx.c spi: bcm63xx-spi: fix shared reset 2025-06-19 15:28:32 +02:00
spi-bcm2835.c spi: switch to use modern name 2023-08-07 21:59:25 +01:00
spi-bcm2835aux.c spi: switch to use modern name 2023-08-07 21:59:25 +01:00
spi-bcmbca-hsspi.c spi: bcmbca-hsspi: Fix missing pm_runtime_disable() 2024-10-04 16:29:03 +02:00
spi-bitbang-txrx.h spi: Get rid of old SPI_MASTER_NO_TX & SPI_MASTER_NO_RX 2023-07-11 13:41:20 +01:00
spi-bitbang.c spi: Rename SPI_MASTER_GPIO_SS to SPI_CONTROLLER_GPIO_SS 2023-07-11 14:12:56 +01:00
spi-brcmstb-qspi.c
spi-butterfly.c spi: butterfly: switch to use modern name 2023-08-07 14:38:25 +01:00
spi-cadence-quadspi.c spi: spi-cadence-quadspi: Fix pm runtime unbalance 2025-07-06 11:00:16 +02:00
spi-cadence-xspi.c spi: cadence: Ensure data lines set to low during dummy-cycle period 2024-07-11 12:49:21 +02:00
spi-cadence.c spi: spi-cadence: Fix missing spi_controller_is_target() check 2024-10-10 11:57:40 +02:00
spi-cavium-octeon.c spi: octeon: switch to use modern name 2023-08-07 14:38:29 +01:00
spi-cavium-thunderx.c spi: spi-cavium-thunderx: switch to use modern name 2023-08-07 14:38:30 +01:00
spi-cavium.c
spi-cavium.h
spi-clps711x.c spi: clps711x: switch to use modern name 2023-08-07 14:38:28 +01:00
spi-coldfire-qspi.c spi: coldfire-qspi: Remove an erroneous clk_disable_unprepare() from the remove function 2024-01-25 15:35:55 -08:00
spi-cs42l43.c spi: cs42l43: Correct SPI root clock speed 2024-06-27 13:49:08 +02:00
spi-davinci.c spi: davinci: switch to use modern name 2023-08-07 14:38:31 +01:00
spi-dln2.c spi: dln2: switch to use modern name 2023-08-07 14:38:32 +01:00
spi-dw-bt1.c
spi-dw-core.c spi: dw: switch to use modern name 2023-08-07 14:38:33 +01:00
spi-dw-dma.c spi: dw: switch to use modern name 2023-08-07 14:38:33 +01:00
spi-dw-mmio.c spi: dw-mmio: keep old name same as documentation 2023-08-16 12:58:07 +01:00
spi-dw-pci.c
spi-dw.h spi: dw: switch to use modern name 2023-08-07 14:38:33 +01:00
spi-ep93xx.c spi: ep93xx: switch to use modern name 2023-08-14 13:10:50 +01:00
spi-falcon.c spi: falcon: switch to use modern name 2023-08-14 13:10:51 +01:00
spi-fsi.c spi: fsi: switch to use spi_alloc_host() 2023-08-14 13:10:52 +01:00
spi-fsl-cpm.c spi: fsl-cpm: Properly define and use IO pointers 2023-08-09 12:52:49 +01:00
spi-fsl-cpm.h
spi-fsl-dspi.c spi: spi-fsl-dspi: Clear completion counter before initiating transfer 2025-07-10 16:03:09 +02:00
spi-fsl-espi.c spi: fsl-espi: switch to use modern name 2023-08-14 13:10:54 +01:00
spi-fsl-lib.c spi: Explicitly include correct DT includes 2023-07-14 20:53:00 +01:00
spi-fsl-lib.h spi: fsl: Remove unused extern declarations 2023-07-25 17:40:28 +01:00
spi-fsl-lpspi.c spi: spi-fsl-lpspi: Adjust type of scldiv 2024-12-14 19:59:59 +01:00
spi-fsl-qspi.c spi: fsl-qspi: switch to use modern name 2023-08-14 13:10:55 +01:00
spi-fsl-spi.c spi: fsl-spi: switch to use modern name 2023-08-14 13:10:56 +01:00
spi-fsl-spi.h
spi-geni-qcom.c spi: geni-qcom: Fix boot warning related to pm_runtime and devres 2024-11-08 16:28:17 +01:00
spi-gpio.c spi: gpio: switch to use modern name 2023-08-14 13:10:57 +01:00
spi-gxp.c spi: spi-gxp: BUG: Correct spi write return value 2023-09-27 17:06:36 +02:00
spi-hisi-kunpeng.c spi: hisi-kunpeng: Add verification for the max_frequency provided by the firmware 2024-09-12 11:11:38 +02:00
spi-hisi-sfc-v3xx.c spi: hisi-sfc-v3xx: Return IRQ_NONE if no interrupts were detected 2024-03-01 13:34:49 +01:00
spi-img-spfi.c spi: img-spfi: switch to use modern name 2023-08-14 13:11:01 +01:00
spi-imx.c spi: spi-imx: Add check for spi_imx_setupxfer() 2025-05-02 07:51:02 +02:00
spi-ingenic.c spi: ingenic: switch to use devm_spi_alloc_host() 2023-08-14 13:11:03 +01:00
spi-intel-pci.c spi: intel: Add Panther Lake SPI controller support 2025-01-02 10:32:05 +01:00
spi-intel-platform.c
spi-intel.c spi: intel: switch to use modern name 2023-08-14 13:11:04 +01:00
spi-intel.h
spi-iproc-qspi.c spi: bcm-qspi: Simplify logic by using devm_platform_ioremap_resource_byname() 2023-08-21 13:10:56 +01:00
spi-jcore.c spi: jcore: switch to use modern name 2023-08-14 13:11:05 +01:00
spi-lantiq-ssc.c spi: lantiq: switch to use modern name 2023-08-14 13:11:06 +01:00
spi-lm70llp.c
spi-loongson-core.c spi: loongson: add bus driver for the loongson spi controller 2023-07-31 15:57:09 +01:00
spi-loongson-pci.c spi: loongson: add bus driver for the loongson spi controller 2023-07-31 15:57:09 +01:00
spi-loongson-plat.c spi: loongson: add bus driver for the loongson spi controller 2023-07-31 15:57:09 +01:00
spi-loongson.h spi: loongson: add bus driver for the loongson spi controller 2023-07-31 15:57:09 +01:00
spi-loopback-test.c spi: loopback-test: Do not split 1024-byte hexdumps 2025-05-22 14:12:15 +02:00
spi-lp8841-rtc.c spi: Explicitly include correct DT includes 2023-07-14 20:53:00 +01:00
spi-mem.c
spi-meson-spicc.c spi: Explicitly include correct DT includes 2023-07-14 20:53:00 +01:00
spi-meson-spifc.c
spi-microchip-core-qspi.c spi: microchip-core-qspi: fix setting spi bus clock rate 2024-05-17 12:02:36 +02:00
spi-microchip-core.c spi: microchip-core: ensure TX and RX FIFOs are empty at start of a transfer 2024-08-03 08:54:40 +02:00
spi-mpc52xx-psc.c spi: spi-mpc52xx-psc: Fix an unsigned comparison that can never be negative 2023-08-07 18:37:54 +01:00
spi-mpc52xx.c spi: mpc52xx: Add cancel_work_sync before module remove 2024-12-14 19:59:49 +01:00
spi-mpc512x-psc.c spi: mpc5xxx-psc: Fix unsigned expression compared with zero 2023-08-03 17:07:09 +01:00
spi-mt65xx.c spi: spi-mt65xx: Fix NULL pointer access in interrupt handler 2024-03-26 18:20:13 -04:00
spi-mt7621.c spi: Explicitly include correct DT includes 2023-07-14 20:53:00 +01:00
spi-mtk-nor.c spi: Explicitly include correct DT includes 2023-07-14 20:53:00 +01:00
spi-mtk-snfi.c spi: Explicitly include correct DT includes 2023-07-14 20:53:00 +01:00
spi-mux.c spi: mux: set ctlr->bits_per_word_mask 2024-07-25 09:50:56 +02:00
spi-mxic.c
spi-mxs.c spi-mxs: Fix chipselect glitch 2025-03-13 12:58:40 +01:00
spi-npcm-fiu.c spi: npcm-fiu: Fix UMA reads when dummy.nbytes == 0 2023-10-02 15:03:19 +01:00
spi-npcm-pspi.c
spi-nxp-fspi.c spi: fspi: add support for imx8ulp 2024-10-04 16:30:03 +02:00
spi-oc-tiny.c
spi-omap-uwire.c spi: Convert to SPI_CONTROLLER_HALF_DUPLEX 2023-07-11 14:14:31 +01:00
spi-omap2-mcspi.c spi: omap2-mcspi: Correctly handle devm_clk_get_optional() errors 2025-02-08 09:52:22 +01:00
spi-orion.c spi: orion: switch to use modern name 2023-08-21 14:29:18 +01:00
spi-pci1xxxx.c spi: mchp-pci1xxx: Fix a possible null pointer dereference in pci1xxx_spi_probe 2024-04-10 16:36:01 +02:00
spi-pic32-sqi.c spi: pic32-sqi: switch to use modern name 2023-08-21 14:29:20 +01:00
spi-pic32.c spi: pic32: switch to use modern name 2023-08-21 14:29:21 +01:00
spi-pl022.c spi: spl022: switch to use modern name 2023-08-21 14:29:22 +01:00
spi-ppc4xx.c spi: ppc4xx: Avoid returning 0 when failed to parse and map IRQ 2024-10-04 16:29:02 +02:00
spi-pxa2xx-dma.c
spi-pxa2xx-pci.c
spi-pxa2xx.c spi: pxa2xx: switch to use modern name 2023-08-21 14:29:24 +01:00
spi-pxa2xx.h
spi-qcom-qspi.c spi: spi-qcom-qspi: switch to use modern name 2023-08-21 14:29:25 +01:00
spi-qup.c spi: qup: switch to use modern name 2023-08-21 14:29:26 +01:00
spi-rb4xx.c spi: rb4xx: switch to use modern name 2023-08-21 14:29:27 +01:00
spi-realtek-rtl.c spi: realtek-rtl: switch to use devm_spi_alloc_host() 2023-08-21 14:29:28 +01:00
spi-rockchip-sfc.c spi: rockchip-sfc: switch to use modern name 2023-08-21 14:29:29 +01:00
spi-rockchip.c spi-rockchip: Fix register out of bounds access 2025-06-04 14:41:55 +02:00
spi-rpc-if.c spi: rpc-if: Add missing MODULE_DEVICE_TABLE 2024-10-10 11:57:41 +02:00
spi-rspi.c spi: rspi: switch to use spi_alloc_host() 2023-08-21 14:29:30 +01:00
spi-rzv2m-csi.c spi: rzv2m-csi: switch to use devm_spi_alloc_host() 2023-08-21 14:29:31 +01:00
spi-s3c64xx.c spi: s3c64xx: fix timeout counters in flush_fifo 2024-10-10 11:57:40 +02:00
spi-sc18is602.c spi: sc18is602: switch to use modern name 2023-08-21 14:29:33 +01:00
spi-sh-hspi.c spi: sh-hspi: switch to use modern name 2023-08-21 14:29:34 +01:00
spi-sh-msiof.c spi: sh-msiof: Fix maximum DMA transfer size 2025-06-19 15:28:05 +02:00
spi-sh-sci.c spi: sh-sci: switch to use modern name 2023-08-21 14:29:36 +01:00
spi-sh.c spi: sh: switch to use modern name 2023-08-21 14:29:37 +01:00
spi-sifive.c spi: sifive: switch to use modern name 2023-08-21 14:29:38 +01:00
spi-slave-mt27xx.c spi: Get rid of old SPI_MASTER_MUST_TX & SPI_MASTER_MUST_RX 2023-07-11 13:41:25 +01:00
spi-slave-system-control.c
spi-slave-time.c
spi-sn-f-ospi.c spi: sn-f-ospi: Fix division by zero 2025-02-21 13:57:06 +01:00
spi-sprd-adi.c spi: Explicitly include correct DT includes 2023-07-14 20:53:00 +01:00
spi-sprd.c spi: Explicitly include correct DT includes 2023-07-14 20:53:00 +01:00
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:49:14 +02:00
spi-stm32.c spi: stm32: Don't warn about spurious interrupts 2024-06-12 11:12:59 +02:00
spi-sun4i.c spi: spi-sun4i: fix early activation 2025-06-04 14:42:25 +02:00
spi-sun6i.c spi: Fixes for v6.6 2023-09-07 15:49:20 -07: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-07-26 16:30:19 +01:00
spi-tegra20-slink.c spi: tegra: Fix missing IRQ check in tegra_slink_probe() 2023-11-20 11:59:04 +01:00
spi-tegra114.c spi: tegra114: Use value to check for invalid delays 2025-05-22 14:12:22 +02:00
spi-tegra210-quad.c spi: tegra210-quad: modify chip select (CS) deactivation 2025-06-19 15:28:04 +02:00
spi-test.h
spi-ti-qspi.c spi: Explicitly include correct DT includes 2023-07-14 20:53:00 +01:00
spi-tle62x0.c
spi-topcliff-pch.c
spi-uniphier.c
spi-wpcm-fiu.c spi: Explicitly include correct DT includes 2023-07-14 20:53:00 +01:00
spi-xcomm.c spi: Convert to SPI_CONTROLLER_HALF_DUPLEX 2023-07-11 14:14:31 +01:00
spi-xilinx.c
spi-xlp.c
spi-xtensa-xtfpga.c spi: Get rid of old SPI_MASTER_NO_TX & SPI_MASTER_NO_RX 2023-07-11 13:41:20 +01:00
spi-zynq-qspi.c spi: zynq-qspi: Add check for clk_enable() 2025-02-08 09:51:50 +01:00
spi-zynqmp-gqspi.c spi: zynqmp-gqspi: Always acknowledge interrupts 2025-06-04 14:42:15 +02:00
spi.c spi: Fix acpi deferred irq probe 2024-12-09 10:32:47 +01:00
spidev.c spi: spidev: Add missing spi_device_id for jg10309-01 2024-09-30 16:25:12 +02:00