linux-yocto/drivers/spi
James Clark 3832ddc2fa 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:04:49 +02:00
..
atmel-quadspi.c spi: atmel-qspi: Memory barriers after memory-mapped I/O 2025-02-17 10:05:46 +01:00
internals.h spi: Rework per message DMA mapped flag to be per transfer 2024-06-10 12:49:03 +01:00
Kconfig spi: cadence: Add 64BIT Kconfig dependency 2024-07-30 14:23:14 +01:00
Makefile spi: add ch341a usb2spi driver 2024-07-08 17:01:10 +01:00
spi-airoha-snfi.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
spi-altera-core.c spi: add missing MODULE_DESCRIPTION() macros 2024-06-10 12:49:05 +01:00
spi-altera-dfl.c
spi-altera-platform.c spi: altera: Drop unneeded MODULE_ALIAS 2024-04-15 10:17:25 +09:00
spi-amd.c spi: spi_amd: Add support for SPI MEM framework 2024-03-25 20:30:06 +00:00
spi-amlogic-spifc-a1.c
spi-ar934x.c
spi-armada-3700.c spi: armada-3700: use 'time_left' variable with wait_for_completion_timeout() 2024-04-30 23:57:26 +09:00
spi-aspeed-smc.c spi: aspeed: Fix an error handling path in aspeed_spi_[read|write]_user() 2024-12-19 18:13:14 +01:00
spi-at91-usart.c
spi-ath79.c
spi-atmel.c spi: remove struct spi_message::is_dma_mapped 2024-03-25 20:30:07 +00:00
spi-au1550.c spi: au1550: t->{tx,rx}_dma checks 2024-03-28 21:09:45 +00:00
spi-axi-spi-engine.c Add support for AD4000 series of ADCs 2024-07-29 16:48:44 +01:00
spi-bcm-qspi.c
spi-bcm-qspi.h
spi-bcm63xx-hsspi.c spi: bcm63xx-hsspi: fix shared reset 2025-06-19 15:32:15 +02:00
spi-bcm63xx.c spi: bcm63xx-spi: fix shared reset 2025-06-19 15:32:15 +02:00
spi-bcm2835.c spi: bcm2835: Restore native CS probing when pinctrl-bcm2835 is absent 2025-04-10 14:39:33 +02:00
spi-bcm2835aux.c
spi-bcmbca-hsspi.c spi: bcmbca-hsspi: Use devm_spi_alloc_host() 2024-08-28 20:39:08 +01:00
spi-bitbang-txrx.h
spi-bitbang.c spi: bitbang: Implement support for MOSI idle state configuration 2024-07-29 01:19:52 +01:00
spi-brcmstb-qspi.c
spi-butterfly.c parport: Remove parport_driver.devmodel 2024-07-03 16:44:22 +02:00
spi-cadence-quadspi.c spi: spi-cadence-quadspi: Fix pm runtime unbalance 2025-07-06 11:01:43 +02:00
spi-cadence-xspi.c spi: cadence: Fix out-of-bounds array access in cdns_mrvl_xspi_setup_clock() 2025-04-10 14:39:32 +02:00
spi-cadence.c spi: spi-cadence: Fix missing spi_controller_is_target() check 2024-09-30 21:55:00 +01:00
spi-cavium-octeon.c
spi-cavium-thunderx.c
spi-cavium.c spi: cavium: Follow renaming of SPI "master" to "controller" 2024-02-08 11:54:50 +00:00
spi-cavium.h spi: cavium: Follow renaming of SPI "master" to "controller" 2024-02-08 11:54:50 +00:00
spi-ch341.c spi: add ch341a usb2spi driver 2024-07-08 17:01:10 +01:00
spi-clps711x.c
spi-coldfire-qspi.c spi: coldfire-qspi: drop driver owner assignment 2024-03-28 13:58:41 +00:00
spi-cs42l43.c spi: cs42l43: Add speaker id support to the bridge configuration 2024-06-20 21:10:15 +01:00
spi-davinci.c spi: davinci: Adapt transfer's timeout to transfer's length 2024-08-28 13:38:02 +01:00
spi-dln2.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
spi-dw-bt1.c spi: dw: differentiate between unsupported and invalid requests 2024-05-27 01:33:04 +01:00
spi-dw-core.c spi: dw: Use new spi_xfer_is_dma_mapped() helper 2024-06-10 12:48:58 +01:00
spi-dw-dma.c spi: dw: remove redundant assignment to variable len 2024-02-15 14:17:19 +00:00
spi-dw-mmio.c spi: dw: Bail out early on unsupported target mode 2024-05-09 17:48:06 +02:00
spi-dw-pci.c
spi-dw.h spi: dw: Convert dw_spi::num_cs to u32 2024-05-03 11:09:24 +09:00
spi-ep93xx.c spi: ep93xx: update kerneldoc comments for ep93xx_spi 2024-09-12 14:33:12 +00:00
spi-falcon.c
spi-fsi.c
spi-fsl-cpm.c spi: add missing MODULE_DESCRIPTION() macros 2024-06-10 12:49:05 +01:00
spi-fsl-cpm.h spi: fsl: remove is_dma_mapped checks 2024-03-28 21:09:46 +00:00
spi-fsl-dspi.c spi: spi-fsl-dspi: Clear completion counter before initiating transfer 2025-07-10 16:04:49 +02:00
spi-fsl-espi.c
spi-fsl-lib.c spi: add missing MODULE_DESCRIPTION() macros 2024-06-10 12:49:05 +01:00
spi-fsl-lib.h
spi-fsl-lpspi.c spi: spi-fsl-lpspi: Adjust type of scldiv 2024-12-14 20:03:38 +01:00
spi-fsl-qspi.c spi: fsl-qspi: Fix double cleanup in probe error path 2025-07-06 11:01:50 +02:00
spi-fsl-spi.c spi: fsl: remove is_dma_mapped checks 2024-03-28 21:09:46 +00:00
spi-fsl-spi.h
spi-geni-qcom.c spi: geni-qcom: Fix boot warning related to pm_runtime and devres 2024-10-22 20:49:02 +01:00
spi-gpio.c spi: spi-gpio: Add support for MOSI idle state configuration 2024-07-29 01:19:53 +01:00
spi-gxp.c
spi-hisi-kunpeng.c spi: hisi-kunpeng: Add verification for the max_frequency provided by the firmware 2024-07-30 13:27:38 +01:00
spi-hisi-sfc-v3xx.c
spi-img-spfi.c
spi-imx.c spi: spi-imx: Add check for spi_imx_setupxfer() 2025-05-02 07:59:28 +02:00
spi-ingenic.c spi: ingenic: Use new spi_xfer_is_dma_mapped() helper 2024-06-10 12:48:59 +01:00
spi-intel-pci.c spi: intel: Add Panther Lake SPI controller support 2025-01-02 10:34:19 +01:00
spi-intel-platform.c
spi-intel.c spi: intel: Add check devm_kasprintf() returned value 2024-08-30 12:28:17 +01:00
spi-intel.h
spi-iproc-qspi.c
spi-jcore.c
spi-lantiq-ssc.c
spi-ljca.c
spi-lm70llp.c parport: Remove parport_driver.devmodel 2024-07-03 16:44:22 +02:00
spi-loongson-core.c
spi-loongson-pci.c
spi-loongson-plat.c
spi-loongson.h
spi-loopback-test.c spi: loopback-test: Do not split 1024-byte hexdumps 2025-05-22 14:29:38 +02:00
spi-lp8841-rtc.c
spi-mem.c spi: Fix error code checking in spi_mem_exec_op() 2024-03-14 14:14:20 +00:00
spi-meson-spicc.c spi: meson-spicc: convert comma to semicolon 2024-07-29 01:23:24 +01:00
spi-meson-spifc.c
spi-microchip-core-qspi.c spi: microchip-core-qspi: fix setting spi bus clock rate 2024-05-09 06:59:19 +02:00
spi-microchip-core.c spi: microchip-core: prevent RX overflows when transmit size > FIFO size 2025-03-22 12:54:23 -07:00
spi-mpc52xx-psc.c
spi-mpc52xx.c spi: mpc52xx: Add cancel_work_sync before module remove 2024-12-14 20:03:15 +01:00
spi-mpc512x-psc.c
spi-mt65xx.c spi: spi-mt65xx: Use threaded interrupt for non-SPIMEM transfer 2024-07-29 01:23:25 +01:00
spi-mt7621.c spi: mt7621: allow GPIO chip select lines 2024-03-25 15:03:02 +00:00
spi-mtk-nor.c
spi-mtk-snfi.c spi: mtk-snfi: fix kerneldoc for mtk_snand_is_page_ops() 2024-10-21 15:33:19 +01:00
spi-mux.c spi: spi-mux: Fix coverity issue, unchecked return value 2025-05-29 11:02:16 +02:00
spi-mxic.c spi: mxic: differentiate between unsupported and invalid requests 2024-05-27 01:33:05 +01:00
spi-mxs.c spi: mxs: Switch to RUNTIME/SYSTEM_SLEEP_PM_OPS() 2024-09-03 22:07:58 +01:00
spi-npcm-fiu.c
spi-npcm-pspi.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
spi-nxp-fspi.c spi: Updates for v6.12 2024-09-17 10:31:31 +02:00
spi-oc-tiny.c spi: oc-tiny: Remove unused of_gpio.h 2024-04-17 23:01:11 +09:00
spi-omap-uwire.c spi: add missing MODULE_DESCRIPTION() macros 2024-06-10 12:49:05 +01:00
spi-omap2-mcspi.c spi: omap2-mcspi: Disable multi-mode when the previous message kept CS asserted 2025-06-19 15:32:27 +02:00
spi-orion.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
spi-pci1xxxx.c spi: pci1xxxx: Use new spi_xfer_is_dma_mapped() helper 2024-06-10 12:49:01 +01:00
spi-pic32-sqi.c spi: pic32-sqi: use 'time_left' variable with wait_for_completion_timeout() 2024-04-30 23:57:29 +09:00
spi-pic32.c spi: pic32: use 'time_left' variable with wait_for_completion_timeout() 2024-04-30 23:57:30 +09:00
spi-pl022.c
spi-ppc4xx.c spi: ppc4xx: Sort headers 2024-09-02 12:56:31 +01:00
spi-pxa2xx-dma.c spi: pxa2xx: Remove DMA parameters from struct chip_data 2024-05-03 11:11:36 +09:00
spi-pxa2xx-pci.c spi: Revert "spi: Insert the missing pci_dev_put()before return" 2024-09-03 12:37:20 +01:00
spi-pxa2xx-platform.c spi: pxa2xx: Move PM runtime handling to the glue drivers 2024-08-22 13:34:06 +01:00
spi-pxa2xx.c spi: pxa2xx: Move PM runtime handling to the glue drivers 2024-08-22 13:34:06 +01:00
spi-pxa2xx.h spi: pxa2xx: Do not override dev->platform_data on probe 2024-08-22 13:34:05 +01:00
spi-qcom-qspi.c
spi-qup.c spi: Rework DMA mapped flag 2024-06-11 11:38:25 +01:00
spi-rb4xx.c
spi-realtek-rtl.c
spi-rockchip-sfc.c
spi-rockchip.c spi-rockchip: Fix register out of bounds access 2025-05-29 11:02:06 +02:00
spi-rpc-if.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
spi-rspi.c spi: rspi: Get rid of unused struct rspi_plat_data 2024-03-25 17:18:22 +00:00
spi-rzv2m-csi.c
spi-s3c64xx.c spi: s3c64xx: fix timeout counters in flush_fifo 2024-10-01 19:02:01 +01:00
spi-sc18is602.c
spi-sh-hspi.c
spi-sh-msiof.c spi: sh-msiof: Fix maximum DMA transfer size 2025-06-19 15:31:33 +02:00
spi-sh-sci.c
spi-sh.c
spi-sifive.c
spi-slave-mt27xx.c spi: slave-mt27xx: switch to use target_abort 2024-09-10 12:41:40 +01:00
spi-slave-system-control.c spi: slave-system-control: switch to use spi_target_abort() 2024-09-10 12:41:38 +01:00
spi-slave-time.c spi: slave-time: switch to use spi_target_abort() 2024-09-10 12:41:37 +01:00
spi-sn-f-ospi.c spi: sn-f-ospi: Fix division by zero 2025-02-21 14:01:16 +01:00
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-18 14:48:26 +01:00
spi-stm32.c spi: stm32: fix missing device mode capability in stm32mp25 2024-10-10 12:15:18 +01:00
spi-sun4i.c spi: spi-sun4i: fix early activation 2025-06-04 14:43:53 +02:00
spi-sun6i.c spi: sun6i: use 'time_left' variable with wait_for_completion_timeout() 2024-04-30 23:57:31 +09:00
spi-sunplus-sp7021.c
spi-synquacer.c
spi-tegra20-sflash.c
spi-tegra20-slink.c
spi-tegra114.c spi: tegra114: Use value to check for invalid delays 2025-05-22 14:29:49 +02:00
spi-tegra210-quad.c spi: tegra210-quad: modify chip select (CS) deactivation 2025-06-19 15:31:31 +02:00
spi-test.h
spi-ti-qspi.c
spi-tle62x0.c
spi-topcliff-pch.c
spi-uniphier.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
spi-wpcm-fiu.c spi: wpcm-fiu: Simplify with dev_err_probe() 2024-08-28 22:22:24 +01:00
spi-xcomm.c move asm/unaligned.h to linux/unaligned.h 2024-10-02 17:23:23 -04:00
spi-xilinx.c
spi-xlp.c spi: xlp: use 'time_left' variable with wait_for_completion_timeout() 2024-04-30 23:57:32 +09:00
spi-xtensa-xtfpga.c
spi-zynq-qspi.c spi: zynq-qspi: Add check for clk_enable() 2025-02-08 09:57:03 +01:00
spi-zynqmp-gqspi.c spi: zynqmp-gqspi: Always acknowledge interrupts 2025-05-29 11:03:06 +02:00
spi.c spi: Fix acpi deferred irq probe 2024-12-05 14:02:51 +01:00
spidev.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00