linux/drivers/spi
Frieder Schrempf 3d743adf09
spi: fsl-qspi: Reprogram the clock rate when the operation frequency changes
fsl_qspi_select_mem() returns early when the chip select has not changed,
which happens before it reaches clk_set_rate(). Since the rate is now
taken from the spi-mem operation rather than from the SPI device, the
controller honours op->max_freq exactly once per chip select and ignores
it for every operation after that.

q->selected is only reset to -1 in fsl_qspi_default_setup(), i.e. at probe
and on resume, so on the common single chip select board the very first
operation latches a rate that all subsequent operations inherit, whatever
frequency they asked for.

This results in operations being issued with the wrong frequency.

Cache the operation frequency the clock was programmed for next to the
selected chip select, and redo the clock setup when either changes.

Fixes: 2438db5253 ("spi: fsl-qspi: Support per spi-mem operation frequency switches")
Cc: stable@vger.kernel.org
Assisted-by: Claude:claude-opus-5
Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Acked-by: Han Xu <han.xu@nxp.com>
Link: https://patch.msgid.link/20260917-fsl-qspi-freq-op-fix-v1-1-5fbe6b02f738@kontron.de
Signed-off-by: Mark Brown <broonie@kernel.org>
2026-09-17 19:46:29 +01:00
..
tests spi: Add KUnit coverage for DMA mapping error paths 2026-08-14 16:48:52 +01:00
.kunitconfig spi: Add KUnit coverage for DMA mapping error paths 2026-08-14 16:48:52 +01:00
atmel-quadspi.c spi: atmel-quadspi: use modern PM macros 2026-08-07 18:57:40 +01:00
internals.h spi: Add KUnit coverage for DMA mapping error paths 2026-08-14 16:48:52 +01:00
Kconfig spi: Add KUnit coverage for DMA mapping error paths 2026-08-14 16:48:52 +01:00
Makefile spi: Add KUnit coverage for DMA mapping error paths 2026-08-14 16:48:52 +01:00
spi-airoha-snfi.c spi: spi-mem: Transform the read operation template 2026-05-04 15:02:07 +02: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: Simplify with dev_err_probe() 2026-07-14 12:50:51 +01:00
spi-amd-pci.c spi: spi_amd: Remove the use of dev_err_probe() 2025-08-19 13:05:58 +01:00
spi-amd.c spi: amd: Set correct bus number in ACPI probe path 2026-05-11 09:29:12 +09:00
spi-amd.h spi: spi_amd: Add PCI-based driver for AMD HID2 SPI controller 2025-04-06 23:26:10 +01:00
spi-amlogic-spifc-a1.c spi: amlogic-spifc-a1: use modern PM macros 2026-08-07 18:57:41 +01:00
spi-amlogic-spifc-a4.c spi: amlogic: spifc-a4: unregister ECC engine on probe failure and remove() callback 2026-03-30 18:53:06 +01:00
spi-amlogic-spisg.c spi: amlogic-spisg: Make sure clk_init_data is fully initialized 2026-08-20 13:11:44 +01:00
spi-apple.c spi: Drop duplicate of_node assignment 2026-01-19 14:42:52 +00:00
spi-ar934x.c spi: Drop duplicate of_node assignment 2026-01-19 14:42:52 +00:00
spi-armada-3700.c spi: armada-3700: switch to managed controller allocation 2026-05-18 10:19:42 +01:00
spi-aspeed-smc.c Aside from preparation changes in the SPI NAND core, the changes carried 2026-06-12 14:00:51 +01:00
spi-at91-usart.c spi: at91-usart: use modern PM macros 2026-08-07 18:57:42 +01:00
spi-atcspi200.c spi: Few cleanups while looking at num-cs 2026-08-04 18:51:38 +01:00
spi-ath79.c spi: ath79: use devm everywhere in probe 2026-08-05 00:11:46 +01:00
spi-atmel.c spi: atmel: fix DMA channel and bounce buffer leaks 2026-06-01 15:03:02 +01:00
spi-au1550.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-axi-spi-engine.c spi: Use trace_call__##name() at guarded tracepoint call sites 2026-03-26 10:24:39 -04:00
spi-axiado.c spi: axiado: use modern PM macros 2026-08-07 18:57:43 +01:00
spi-axiado.h spi: axiado: fix kernel-doc comments 2026-07-19 23:55:49 +01:00
spi-bcm-qspi.c spi: bcm-qspi: use modern PM macros 2026-08-07 18:57:44 +01:00
spi-bcm-qspi.h
spi-bcm63xx-hsspi.c spi: use modern PM macros 2026-08-07 18:58:32 +01:00
spi-bcm63xx.c spi: bcm63xx: disable clock on resume failure 2026-08-04 19:31:32 +01:00
spi-bcm2835.c spi: bcm2835: make read-only const array pinctrl_compats static 2026-07-14 22:20:22 +01:00
spi-bcm2835aux.c spi: Drop duplicate of_node assignment 2026-01-19 14:42:52 +00:00
spi-bcmbca-hsspi.c spi: use modern PM macros 2026-08-07 18:58:32 +01:00
spi-bitbang-txrx.h
spi-bitbang.c spi: fix controller registration API inconsistency 2026-05-21 12:25:55 +01:00
spi-brcmstb-qspi.c spi: bcm-qspi: use modern PM macros 2026-08-07 18:57:44 +01:00
spi-butterfly.c parport: Remove parport_driver.devmodel 2024-07-03 16:44:22 +02:00
spi-cadence-quadspi.c spi: cadence-quadspi: Fix indirect write timeout when DMA read mode is enabled 2026-07-14 12:54:50 +01:00
spi-cadence-xspi.c spi: cadence-xspi: only use readsq/writesq under 64BIT 2026-08-04 14:17:32 +01:00
spi-cadence.c spi: cadence: use modern PM macros 2026-08-07 18:57:47 +01:00
spi-cavium-octeon.c spi: octeon: switch to managed controller allocation 2026-05-04 22:09:21 +09:00
spi-cavium-thunderx.c spi: cavium-thunderx: switch to managed controller allocation 2026-05-04 22:09:22 +09:00
spi-cavium.c
spi-cavium.h
spi-ch341.c spi: ch341: correct company name in MODULE_DESCRIPTION 2026-05-06 23:09:33 +09:00
spi-clps711x.c spi: clps711x: switch to managed controller allocation 2026-05-18 10:19:43 +01:00
spi-coldfire-qspi.c spi: coldfire-qspi: use modern PM macros 2026-08-07 18:57:48 +01:00
spi-cs42l43.c Replace <linux/mod_devicetable.h> by more specific <linux/device-id/*.h> (c files) 2026-07-03 07:38:17 +02:00
spi-davinci.c spi: davinci: switch to managed controller allocation 2026-07-29 16:34:07 +01:00
spi-dln2.c spi: dln2: use modern PM macros 2026-08-07 18:57:49 +01:00
spi-dw-core.c spi: dw: Remove shadowed dws in dw_spi_setup() 2026-08-14 13:22:11 +01:00
spi-dw-dma.c spi: dw-dma: Wait for controller idle before completing Tx 2026-07-14 12:15:51 +01:00
spi-dw-mmio.c spi: dw: Add support for StarFive JHB100 SoC SFC 2026-08-04 13:47:01 +01:00
spi-dw-pci.c spi: dw-pci: use modern PM macros 2026-08-07 18:57:49 +01:00
spi-dw.h spi: Updates for v7.3 2026-08-19 09:47:41 -07:00
spi-ep93xx.c spi: ep93xx: fix double-free of zeropage on DMA setup failure 2026-06-08 19:03:40 +01:00
spi-falcon.c spi: falcon: switch to managed controller allocation 2026-05-18 10:19:44 +01:00
spi-fsi.c spi: fsi: switch to managed controller allocation 2026-05-18 10:19:45 +01:00
spi-fsl-cpm.c spi: add missing MODULE_DESCRIPTION() macros 2024-06-10 12:49:05 +01:00
spi-fsl-cpm.h
spi-fsl-dspi.c spi: spi-fsl-dspi: use modern PM macros 2026-08-07 18:57:50 +01:00
spi-fsl-espi.c spi: fsl-espi: use modern PM macros 2026-08-07 18:57:51 +01:00
spi-fsl-lib.c spi: Drop duplicate of_node assignment 2026-01-19 14:42:52 +00:00
spi-fsl-lib.h
spi-fsl-lpspi.c spi: fsl-lpspi: use modern PM macros 2026-08-07 18:57:52 +01:00
spi-fsl-qspi.c spi: fsl-qspi: Reprogram the clock rate when the operation frequency changes 2026-09-17 19:46:29 +01:00
spi-fsl-spi.c spi: fsl: switch to managed controller allocation 2026-05-04 22:09:26 +09:00
spi-fsl-spi.h
spi-geni-qcom.c spi: qcom-geni: use modern PM macros 2026-08-07 18:57:53 +01:00
spi-gpio.c Replace <linux/mod_devicetable.h> by more specific <linux/device-id/*.h> (c files) 2026-07-03 07:38:17 +02:00
spi-gxp.c spi: Drop duplicate of_node assignment 2026-01-19 14:42:52 +00:00
spi-hisi-kunpeng.c spi: Fix mismatched DT property access types 2026-06-14 01:18:29 +01:00
spi-hisi-sfc-v3xx.c spi: hisi-sfc-v3xx: Propagate errors from optional IRQ lookup 2026-08-11 16:41:49 +01:00
spi-img-spfi.c spi: img-spfi: don't disable runtime PM on DMA deferred probe 2026-08-12 19:51:21 +01:00
spi-imx.c spi: imx: reconfigure for PIO when DMA cannot be started 2026-06-24 17:52:44 +01:00
spi-ingenic.c spi: Drop duplicate of_node assignment 2026-01-19 14:42:52 +00:00
spi-intel-pci.c spi: Consistently define pci_device_ids using named initializers 2026-05-05 10:08:08 +09:00
spi-intel-platform.c spi: intel: Improve resource mapping 2025-04-24 12:56:59 +01:00
spi-intel.c spi: spi-mem: Transform the read operation template 2026-05-04 15:02:07 +02:00
spi-intel.h spi: intel: Improve resource mapping 2025-04-24 12:56:59 +01:00
spi-iproc-qspi.c spi: bcm-qspi: use modern PM macros 2026-08-07 18:57:44 +01:00
spi-jcore.c spi: jcore: switch to managed controller allocation 2026-05-18 10:19:47 +01:00
spi-kspi2.c spi: spi-kspi2: Add KEBA SPI controller support 2024-12-04 16:25:22 +00:00
spi-lantiq-ssc.c spi: lantiq-ssc: switch to managed controller allocation 2026-05-04 22:09:29 +09:00
spi-ljca.c spi: Drop duplicate device_set_node() call 2026-01-19 14:42:54 +00:00
spi-lm70llp.c parport: Remove parport_driver.devmodel 2024-07-03 16:44:22 +02:00
spi-loongson-core.c spi: loongson: pm: add .freeze .poweroff .thaw .restore 2026-08-20 13:14:02 +01:00
spi-loongson-pci.c spi: loongson: use modern PM macros 2026-08-07 18:57:55 +01:00
spi-loongson-plat.c spi: loongson: use modern PM macros 2026-08-07 18:57:55 +01:00
spi-loongson.h
spi-loopback-test.c Replace <linux/mod_devicetable.h> by more specific <linux/device-id/*.h> (c files) 2026-07-03 07:38:17 +02:00
spi-lp8841-rtc.c spi: lp8841-rtc: drop unused ifdef 2026-05-18 10:19:49 +01:00
spi-ma35d1-qspi.c spi: ma35d1-qspi: Use the existing update helper 2026-08-14 13:36:57 +01:00
spi-mem.c spi: spi-mem: Flag DQS capability 2026-08-10 18:00:47 +01:00
spi-meson-spicc.c spi: Use FIELD_MODIFY() for bitfield operations 2026-05-11 21:05:13 +09:00
spi-meson-spifc.c spi: meson-spifc: use devm_pm_runtime_set_active_enabled 2026-08-11 15:04:28 +01:00
spi-microchip-core-qspi.c spi: switch to managed controller allocation (part 2/3) 2026-05-11 09:55:56 +09:00
spi-microchip-core-spi.c spi: microchip-core-spi: fix controller deregistration 2026-04-09 20:08:13 +01:00
spi-mpc52xx-psc.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
spi-mpc52xx.c spi: spi-mpc52xx: use platform_get_irq_optional for IRQ lookup 2026-07-30 12:53:17 +01:00
spi-mpc512x-psc.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
spi-mpfs.c spi: mpfs: fix controller deregistration 2026-04-09 20:08:14 +01:00
spi-mt65xx.c spi: mt65xx: use modern PM macros 2026-08-07 18:57:57 +01:00
spi-mt7621.c spi: Drop duplicate of_node assignment 2026-01-19 14:42:52 +00:00
spi-mtk-nor.c spi: mtk-nor: Propagate errors from IRQ request 2026-08-12 19:47:42 +01:00
spi-mtk-snfi.c spi: mtk-snfi: Fix resource leak in mtk_snand_read_page_cache() 2026-05-16 11:27:08 +09:00
spi-mux.c spi: mux: switch to managed controller allocation 2026-05-18 10:19:51 +01:00
spi-mxic.c spi: mxic: use modern PM macros 2026-08-07 18:57:59 +01:00
spi-mxs.c spi: mxs: switch to managed controller allocation 2026-05-04 22:09:30 +09:00
spi-npcm-fiu.c spi: npcm-fiu: support dual and quad UMA writes 2026-06-29 17:45:35 +01:00
spi-npcm-pspi.c spi: npcm-pspi: switch to managed controller allocation 2026-05-04 22:09:31 +09:00
spi-nxp-fspi.c spi: Add support for StarFive JHB100 SFC 2026-08-04 13:47:02 +01:00
spi-nxp-xspi.c spi: nxp-xspi: Improve AHB read performance with DMA 2026-07-23 15:23:13 +01:00
spi-oc-tiny.c spi: oc-tiny: switch to managed controller allocation 2026-07-27 18:41:24 +01:00
spi-offload-trigger-adi-util-sigma-delta.c Replace <linux/mod_devicetable.h> by more specific <linux/device-id/*.h> (c files) 2026-07-03 07:38:17 +02:00
spi-offload-trigger-pwm.c Replace <linux/mod_devicetable.h> by more specific <linux/device-id/*.h> (c files) 2026-07-03 07:38:17 +02:00
spi-offload.c treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
spi-omap-uwire.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
spi-omap2-mcspi.c spi: omap2-mcspi: use modern PM macros 2026-08-07 18:58:00 +01:00
spi-orion.c spi: orion: use modern PM macros 2026-08-07 18:58:01 +01:00
spi-pci1xxxx.c spi: Consistently define pci_device_ids using named initializers 2026-05-05 10:08:08 +09:00
spi-pic32-sqi.c spi: pic32-sqi: switch to managed controller allocation 2026-05-11 09:55:40 +09:00
spi-pic32.c spi: pic32: switch to managed controller allocation 2026-05-11 09:55:39 +09:00
spi-pl022.c spi: pl022: use modern PM macros 2026-08-07 18:58:02 +01:00
spi-ppc4xx.c spi: ppc4xx: use of_property_read_u32 for clock frequency 2026-07-30 19:42:36 +01:00
spi-pxa2xx-dma.c spi: pxa2xx: update outdated reference to pump_transfers() 2026-03-24 19:55:23 +00:00
spi-pxa2xx-pci.c module: Convert symbol namespace to string literal 2024-12-02 11:34:44 -08:00
spi-pxa2xx-platform.c Replace <linux/mod_devicetable.h> by more specific <linux/device-id/*.h> (c files) 2026-07-03 07:38:17 +02:00
spi-pxa2xx.c spi: pxa2xx: use min() instead of min_t() 2026-02-23 19:10:26 +00: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: spi-qcom-qspi: use modern PM macros 2026-08-07 18:58:03 +01:00
spi-qpic-snand.c spi: spi-qpic-snand: avoid writing QPIC_EBI2_ECC_BUF_CFG register 2026-09-14 00:41:31 +01:00
spi-qup.c spi: qup: use modern PM macros 2026-08-07 18:58:04 +01:00
spi-rb4xx.c spi: Drop duplicate of_node assignment 2026-01-19 14:42:52 +00:00
spi-realtek-rtl-snand.c Replace <linux/mod_devicetable.h> by more specific <linux/device-id/*.h> (c files) 2026-07-03 07:38:17 +02:00
spi-realtek-rtl.c spi: realtek-rtl: change to __raw reads and writes 2026-07-16 13:59:27 +01:00
spi-rockchip-sfc.c spi: rockchip-sfc: use modern PM macros 2026-08-07 18:58:06 +01:00
spi-rockchip.c spi: rockchip: use modern PM macros 2026-08-07 18:58:14 +01:00
spi-rpc-if.c spi: spi-rpc-if: Implement 200ms runtime PM autosuspend delay 2026-07-20 14:19:17 +01:00
spi-rspi.c spi: Use named initializers for platform_device_id arrays 2026-06-09 22:44:23 +01:00
spi-rzv2h-rspi.c spi: Fixes for v7.2 2026-07-05 05:24:06 -10:00
spi-rzv2m-csi.c spi: Drop duplicate device_set_node() call 2026-01-19 14:42:54 +00:00
spi-s3c64xx.c spi: s3c64xx: use modern PM macros 2026-08-07 18:58:15 +01:00
spi-sc18is602.c Replace <linux/mod_devicetable.h> by more specific <linux/device-id/*.h> (c files) 2026-07-03 07:38:17 +02:00
spi-sg2044-nor.c spi: Drop duplicate of_node assignment 2026-01-19 14:42:52 +00:00
spi-sh-hspi.c spi: sh-hspi: switch to managed controller allocation 2026-05-11 09:55:43 +09:00
spi-sh-msiof.c spi: sh-msiof: abort transfers when reset times out 2026-06-25 13:49:00 +01:00
spi-sh-sci.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-sh.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-sifive.c spi: sifive: switch to managed controller allocation 2026-05-11 09:55:45 +09:00
spi-slave-mt27xx.c spi: slave-mt27xx: use modern PM macros 2026-08-07 18:58:16 +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: Use FIELD_MODIFY() 2026-05-11 21:05:08 +09:00
spi-spacemit-k1.c spi: Merge up fixes 2026-07-29 12:59:46 +01:00
spi-sprd-adi.c spi: sprd-adi: Fix probe succeeding without registering the controller 2026-08-11 15:02:03 +01:00
spi-sprd.c spi: sprd: use modern PM macros 2026-08-07 18:58:18 +01:00
spi-st-ssc4.c spi: st-ssc4: switch to managed controller allocation 2026-05-11 09:55:47 +09:00
spi-stm32-ospi.c Aside from preparation changes in the SPI NAND core, the changes carried 2026-06-12 14:00:51 +01:00
spi-stm32-qspi.c Aside from preparation changes in the SPI NAND core, the changes carried 2026-06-12 14:00:51 +01:00
spi-stm32.c spi: stm32: Simplify clock handling with devm_clk_get_enabled() 2026-03-23 19:47:42 +00:00
spi-sun4i.c spi: sun4i: switch to managed controller allocation 2026-05-11 09:55:48 +09:00
spi-sun6i.c spi: sun6i: switch to managed controller allocation 2026-05-11 09:55:49 +09:00
spi-sunplus-sp7021.c spi: sunplus-sp7021: use modern PM macros 2026-08-07 18:58:20 +01:00
spi-synquacer.c spi: syncuacer: use modern PM macros 2026-08-07 18:58:22 +01:00
spi-tegra20-sflash.c spi: tegra20-sflash: use modern PM macros 2026-08-07 18:58:25 +01:00
spi-tegra20-slink.c spi: tegra20-slink: use modern PM macros 2026-08-07 18:58:26 +01:00
spi-tegra114.c spi: tegra114: use modern PM macros 2026-08-07 18:58:23 +01:00
spi-tegra210-quad.c spi: tegra210-quad: use modern PM macros 2026-08-07 18:58:28 +01:00
spi-test.h
spi-ti-qspi.c spi: Merge up fixes 2026-05-19 09:44:41 +01:00
spi-tle62x0.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
spi-topcliff-pch.c spi: topcliff-pch: use modern PM macros 2026-08-07 18:58:29 +01:00
spi-uniphier.c spi: uniphier: Fix completion initialization order before devm_request_irq() 2026-06-16 21:25:14 +01:00
spi-virtio.c spi: virtio: Use the per-transfer bits per word 2026-09-15 17:37:50 +01:00
spi-wpcm-fiu.c Replace <linux/mod_devicetable.h> by more specific <linux/device-id/*.h> (c files) 2026-07-03 07:38:17 +02:00
spi-xcomm.c spi: Use named initializers for arrays of i2c_device_data 2026-05-22 12:12:11 +01:00
spi-xilinx.c spi: xilinx: use FIFO occupancy register to determine buffer size 2026-06-12 14:21:28 +01:00
spi-xlp.c spi: xlp: switch to managed controller allocation 2026-05-18 10:19:52 +01:00
spi-xtensa-xtfpga.c spi: fix controller registration API inconsistency 2026-05-21 12:25:55 +01:00
spi-zynq-qspi.c spi: zync-qspi: switch to managed controller allocation 2026-05-11 09:55:55 +09:00
spi-zynqmp-gqspi.c spi: spi-zynqmp-gqspi: stop the controller on shutdown 2026-09-16 18:28:43 +01:00
spi.c spi: Add KUnit coverage for DMA mapping error paths 2026-08-14 16:48:52 +01:00
spidev.c Replace <linux/mod_devicetable.h> by more specific <linux/device-id/*.h> (c files) 2026-07-03 07:38:17 +02:00