linux/drivers/spi
Thierry Reding d57e92dd66
spi: tegra210-qspi: Remove cache operations
The DMA memory for this driver is allocated using dma_alloc_coherent(),
which ends up mapping the allocated memory as uncached. Performing the
various dma_sync_*() operations on this memory causes issues during SPI
flashing:

[    7.818017] pc : dcache_inval_poc+0x40/0x58
[    7.822128] lr : arch_sync_dma_for_cpu+0x2c/0x4c
[    7.826854] sp : ffff80008193bcf0
[    7.830267] x29: ffff80008193bcf0 x28: ffffa3fe5ff1e908 x27: ffffa3fe627bb130
[    7.837528] x26: ffff000086952180 x25: ffff00008015c8ac x24: ffff000086c9b480
[    7.844878] x23: ffff00008015c800 x22: 0000000000000002 x21: 0000000000010000
[    7.852229] x20: 0000000106dae000 x19: ffff000080112410 x18: 0000000000000001
[    7.859580] x17: ffff000080159400 x16: ffffa3fe607a9bd8 x15: ffff0000eac1b180
[    7.866753] x14: 000000000000000c x13: 0000000000000001 x12: 000000000000025a
[    7.874104] x11: 0000000000000000 x10: 7f73e96357f6a07f x9 : db1fc8072a7f5e3a
[    7.881365] x8 : ffff000086c9c588 x7 : ffffa3fe607a9bd8 x6 : ffff80008193bc28
[    7.888630] x5 : 000000000000ffff x4 : 0000000000000009 x3 : 000000000000003f
[    7.895892] x2 : 0000000000000040 x1 : ffff000086dbe000 x0 : ffff000086db0000
[    7.903155] Call trace:
[    7.905606]  dcache_inval_poc+0x40/0x58 (P)
[    7.909804]  iommu_dma_sync_single_for_cpu+0xb4/0xb8
[    7.914617]  __dma_sync_single_for_cpu+0x158/0x194
[    7.919428]  __this_module+0x5b020/0x5baf8 [spi_tegra210_quad]
[    7.925291]  irq_thread_fn+0x2c/0xc0
[    7.928966]  irq_thread+0x16c/0x318
[    7.932467]  kthread+0x12c/0x214

Fix this by removing all calls to the dma_sync_*() functions. This isn't
ideal because DMA is used only for relatively large (> 64 words or 256
bytes) and using uncached memory for this might be slow. Reworking this
to use cached memory for faster access and reintroducing the cache
maintenance calls is probably worth a follow-up patch.

Reported-by: Brad Griffis <bgriffis@nvidia.com>
Fixes: 017f1b0bae ("spi: tegra210-quad: Add support for internal DMA")
Signed-off-by: Thierry Reding <treding@nvidia.com>
Link: https://patch.msgid.link/20250613123037.2082788-1-thierry.reding@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
2025-06-13 17:30:56 +01:00
..
atmel-quadspi.c Add more devm_ functions to fix PM imbalance in 2025-05-12 11:28:54 +09:00
internals.h spi: Rework per message DMA mapped flag to be per transfer 2024-06-10 12:49:03 +01:00
Kconfig spi: spi_amd: Update Kconfig dependencies 2025-05-19 13:13:38 +01:00
Makefile spi: spi_amd: Add PCI-based driver for AMD HID2 SPI controller 2025-04-06 23:26:10 +01:00
spi-airoha-snfi.c Linux 6.12-rc2 2024-10-07 14:53:15 +01:00
spi-altera-core.c spi: add missing MODULE_DESCRIPTION() macros 2024-06-10 12:49:05 +01:00
spi-altera-dfl.c spi: spi-altera-dfl: switch to use modern name 2022-12-29 13:22:04 +00:00
spi-altera-platform.c spi: altera: Drop unneeded MODULE_ALIAS 2024-04-15 10:17:25 +09:00
spi-amd-pci.c spi: spi_amd: Fix an IS_ERR() vs NULL check in probe 2025-04-09 13:47:45 +01:00
spi-amd.c spi: spi_amd: Add HIDDMA basic write support 2025-05-19 13:13:37 +01: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: Support per spi-mem operation frequency switches 2025-01-09 20:16:26 +00:00
spi-apple.c spi: apple: Set use_gpio_descriptors to true 2024-12-02 00:29:47 +00:00
spi-ar934x.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
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: spi-mem: Introduce a default ->exec_op() debug log 2025-03-20 12:37:11 +00:00
spi-at91-usart.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-ath79.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-atmel.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02: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: axi-spi-engine: omit SYNC from offload instructions 2025-04-30 09:38:40 +09:00
spi-bcm-qspi.c spi: bcm-qspi: fix SFDP BFPT read by usig mspi read 2024-01-23 13:28:03 +00:00
spi-bcm-qspi.h spi: bcm-qspi: Make bcm_qspi_remove() return void 2022-10-18 19:16:53 +01:00
spi-bcm63xx-hsspi.c spi: bcm63xx-hsspi: fix shared reset 2025-05-30 11:42:38 +01:00
spi-bcm63xx.c spi: bcm63xx-spi: fix shared reset 2025-05-30 11:42:38 +01:00
spi-bcm2835.c spi: bcm2835: Restore native CS probing when pinctrl-bcm2835 is absent 2025-04-02 12:55:32 +01:00
spi-bcm2835aux.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-bcmbca-hsspi.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +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: bitbang: Implement support for MOSI idle state configuration 2024-07-29 01:19:52 +01:00
spi-brcmstb-qspi.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-butterfly.c parport: Remove parport_driver.devmodel 2024-07-03 16:44:22 +02:00
spi-cadence-quadspi.c spi: cadence-quadspi: Assume device could match via platform 2025-05-05 19:31:28 +09:00
spi-cadence-xspi.c spi: cadence: Fix out-of-bounds array access in cdns_mrvl_xspi_setup_clock() 2025-03-31 16:38:32 +01:00
spi-cadence.c Linux 6.12-rc2 2024-10-07 14:53:15 +01:00
spi-cavium-octeon.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-cavium-thunderx.c spi: spi-cavium-thunderx: Use non-hybrid PCI devres API 2025-04-17 12:25:42 +01:00
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: ch341: switch to use devm_spi_alloc_host() 2024-09-30 01:12:04 +02:00
spi-clps711x.c spi: clps711x: switch to use modern name 2023-08-07 14:38:28 +01:00
spi-coldfire-qspi.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-cs42l43.c spi: cs42l43: Make handling missing spk-id GPIOs explicit 2025-05-05 19:31:28 +09:00
spi-davinci.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-dln2.c Linux 6.12-rc2 2024-10-07 14:53:15 +01:00
spi-dw-bt1.c module: Convert symbol namespace to string literal 2024-12-02 11:34:44 -08:00
spi-dw-core.c spi: dw: Use spi_bpw_to_bytes() helper 2025-04-17 17:30:41 +01:00
spi-dw-dma.c module: Convert symbol namespace to string literal 2024-12-02 11:34:44 -08:00
spi-dw-mmio.c module: Convert symbol namespace to string literal 2024-12-02 11:34:44 -08:00
spi-dw-pci.c module: Convert symbol namespace to string literal 2024-12-02 11:34:44 -08:00
spi-dw.h spi: dw: Convert dw_spi::num_cs to u32 2024-05-03 11:09:24 +09:00
spi-ep93xx.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-falcon.c spi: falcon: switch to use modern name 2023-08-14 13:10:51 +01:00
spi-fsi.c spi: fsi: Batch TX operations 2025-02-03 19:24:44 +00: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: remove is_dma_mapped checks 2024-03-28 21:09:46 +00:00
spi-fsl-dspi.c spi: spi-fsl-dspi: Reset SR flags before sending a new message 2025-05-22 16:05:26 +01:00
spi-fsl-espi.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-fsl-lib.c spi: add missing MODULE_DESCRIPTION() macros 2024-06-10 12:49:05 +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: convert timeouts to secs_to_jiffies() 2025-02-26 11:42:56 +00:00
spi-fsl-qspi.c spi: fsl-qspi: Optimize fsl_qspi struct 2025-04-13 20:27:02 +01:00
spi-fsl-spi.c spi: fsl-spi: Remove display of virtual address 2025-01-09 12:03:29 +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: gpio: fix const issue in spi_to_spi_gpio() 2025-05-22 12:03:34 +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: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-hisi-sfc-v3xx.c spi: fix typo in the comment 2024-09-30 01:12:21 +02:00
spi-img-spfi.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-imx.c spi: spi-imx: Add check for spi_imx_setupxfer() 2025-04-17 12:25:12 +01: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: Improve resource mapping 2025-04-24 12:56:59 +01:00
spi-intel-platform.c spi: intel: Improve resource mapping 2025-04-24 12:56:59 +01:00
spi-intel.c spi: intel: Improve resource mapping 2025-04-24 12:56:59 +01:00
spi-intel.h spi: intel: Improve resource mapping 2025-04-24 12:56:59 +01:00
spi-iproc-qspi.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-jcore.c spi: jcore: switch to use modern name 2023-08-14 13:11:05 +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: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-ljca.c module: Convert symbol namespace to string literal 2024-12-02 11:34:44 -08:00
spi-lm70llp.c parport: Remove parport_driver.devmodel 2024-07-03 16:44:22 +02:00
spi-loongson-core.c spi: loongson: Fix build warnings about export.h 2025-06-08 23:30:04 +01:00
spi-loongson-pci.c module: Convert symbol namespace to string literal 2024-12-02 11:34:44 -08:00
spi-loongson-plat.c module: Convert symbol namespace to string literal 2024-12-02 11:34:44 -08: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: Updates for v6.16 2025-05-27 15:53:55 -07:00
spi-lp8841-rtc.c spi: lp-8841: switch to use modern name 2023-09-11 01:31:31 +01:00
spi-mem.c spi: spi-mem: Add fix to avoid divide error 2025-04-25 13:19:56 +01:00
spi-meson-spicc.c spi: meson-spicc: add DMA support 2025-04-24 19:11:49 +01:00
spi-meson-spifc.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-microchip-core-qspi.c spi: microchip-core-qspi: Support per spi-mem operation frequency switches 2025-01-09 20:16:30 +00:00
spi-microchip-core.c spi: microchip-core: prevent RX overflows when transmit size > FIFO size 2025-03-03 12:10:03 +00:00
spi-mpc52xx-psc.c spi: fix typo in the comment 2024-09-30 01:12:21 +02:00
spi-mpc52xx.c spi: mpc52xx: Add cancel_work_sync before module remove 2024-12-02 00:29:46 +00:00
spi-mpc512x-psc.c spi: mpc512x-psc: switch to use modern name 2023-09-11 01:31:35 +01:00
spi-mt65xx.c spi: mt65xx: add PM QoS support 2025-03-11 13:11:29 +00:00
spi-mt7621.c spi: mt7621: allow GPIO chip select lines 2024-03-25 15:03:02 +00:00
spi-mtk-nor.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-mtk-snfi.c spi: spi-mem: Introduce a default ->exec_op() debug log 2025-03-20 12:37:11 +00:00
spi-mux.c spi: spi-mux: Fix coverity issue, unchecked return value 2025-03-16 23:34:25 +00:00
spi-mxic.c spi: mxic: Support per spi-mem operation frequency switches 2025-01-09 20:16:32 +00:00
spi-mxs.c spi: mxs: support effective_speed_hz 2024-12-09 13:14:36 +00:00
spi-npcm-fiu.c spi: spi-mem: Introduce a default ->exec_op() debug log 2025-03-20 12:37:11 +00:00
spi-npcm-pspi.c Linux 6.12-rc2 2024-10-07 14:53:15 +01:00
spi-nxp-fspi.c spi: nxp-fspi: use devm instead of remove for driver detach 2025-05-06 23:17:31 +09:00
spi-oc-tiny.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-offload-trigger-pwm.c spi: spi-offload-trigger-pwm: add extra headers 2025-02-11 13:15:29 +00:00
spi-offload.c spi: offload: check offload ops existence before disabling the trigger 2025-06-09 13:31:50 +01:00
spi-omap-uwire.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-omap2-mcspi.c spi: omap2-mcspi: Disable multi-mode when the previous message kept CS asserted 2025-06-08 23:29:52 +01:00
spi-orion.c Linux 6.12-rc2 2024-10-07 14:53:15 +01:00
spi-pci1xxxx.c spi: spi-pci1xxxx: Drop MSI-X usage as unsupported by DMA engine 2025-06-13 12:25:31 +01:00
spi-pic32-sqi.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-pic32.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-pl022.c spi: fix typo in the comment 2024-09-30 01:12:21 +02:00
spi-ppc4xx.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02: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 module: Convert symbol namespace to string literal 2024-12-02 11:34:44 -08:00
spi-pxa2xx-platform.c module: Convert symbol namespace to string literal 2024-12-02 11:34:44 -08:00
spi-pxa2xx.c spi: pxa2xx: Fix regression when toggling chip select on LPSS devices 2025-02-04 19:09:07 +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: Use of_property_present() for non-boolean properties 2024-11-04 19:18:19 +00:00
spi-qpic-snand.c spi: Updates for v6.16 2025-06-06 13:22:31 -07:00
spi-qup.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-rb4xx.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-realtek-rtl-snand.c spi: realtek-rtl-snand: Drop unneeded assignment for cache_type 2025-02-03 00:41:38 +00: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-nand/spi-mem DTR support 2025-01-10 15:01:33 +00:00
spi-rockchip.c spi-rockchip: Fix register out of bounds access 2025-03-26 13:31:00 +00:00
spi-rpc-if.c spi: rpc-if: Add write support for memory-mapped area 2025-05-08 23:12:38 +09:00
spi-rspi.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-rzv2m-csi.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-s3c64xx.c spi: s3c64xx: extend description of compatible's fifo_depth 2025-02-19 23:08:36 +00:00
spi-sc18is602.c spi: sc18is602: Switch to generic firmware properties and drop of_match_ptr() 2024-12-02 00:32:30 +00:00
spi-sg2044-nor.c spi: sg2044-nor: fix a couple static checker bugs 2025-03-18 14:37:39 +00:00
spi-sh-hspi.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-sh-msiof.c spi: sh-msiof: Move register definitions to <linux/spi/sh_msiof.h> 2025-05-19 11:55:37 +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: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-slave-mt27xx.c spi: replace and remove 2024-09-30 22:43: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-06 11:33:51 +00:00
spi-sprd-adi.c spi: sprd-adi: switch to use spi_alloc_host() 2023-12-11 12:54:53 +00:00
spi-sprd.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-st-ssc4.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-stm32-ospi.c spi: stm32-ospi: clean up on error in probe() 2025-06-11 16:47:53 +01:00
spi-stm32-qspi.c spi: spi-mem: Introduce a default ->exec_op() debug log 2025-03-20 12:37:11 +00:00
spi-stm32.c spi: stm32: fix missing device mode capability in stm32mp25 2024-10-10 15:22:37 +01:00
spi-sun4i.c spi: spi-sun4i: fix early activation 2025-05-14 10:56:43 +02:00
spi-sun6i.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-sunplus-sp7021.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-synquacer.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-tegra20-sflash.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-tegra20-slink.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-tegra114.c spi: tegra114: Use value to check for invalid delays 2025-05-08 10:32:40 +09:00
spi-tegra210-quad.c spi: tegra210-qspi: Remove cache operations 2025-06-13 17:30:56 +01:00
spi-test.h
spi-ti-qspi.c spi: ti-qspi: Use syscon_regmap_lookup_by_phandle_args 2025-01-14 15:18:40 +00:00
spi-tle62x0.c
spi-topcliff-pch.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-uniphier.c Linux 6.12-rc2 2024-10-07 14:53:15 +01:00
spi-wpcm-fiu.c spi: wpcm-fiu: Simplify with dev_err_probe() 2024-08-28 22:22:24 +01:00
spi-xcomm.c spi: xcomm: use new GPIO line value setter callbacks 2025-04-08 12:16:10 +01:00
spi-xilinx.c spi: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
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: Switch back to struct platform_driver::remove() 2024-09-30 01:12:23 +02:00
spi-zynq-qspi.c spi: spi-mem: Introduce a default ->exec_op() debug log 2025-03-20 12:37:11 +00:00
spi-zynqmp-gqspi.c spi: spi-mem: Introduce a default ->exec_op() debug log 2025-03-20 12:37:11 +00:00
spi.c spi: Introduce and use spi_bpw_to_bytes() 2025-04-18 05:11:47 +01:00
spidev.c spi: spidev: Add an entry for the gocontroll moduline module slot 2025-03-13 22:43:18 +00:00