linux/drivers/spi
Marc Kleine-Budde 07e7593877
spi: spi-imx: add PIO polling support
The driver supports several modes, one of them is PIO/IRQ
"spi_imx_pio_transfer()". The data is exchanged with the IP core using
PIO, an IRQ is setup to signal empty/full FIFOs and the end of the
transfer. The IRQ and scheduling overhead for short transfers is
significant. Using polling instead of IRQs can be beneficial to reduce
the overall CPU load, especially on small transfer workloads.

On an imx6 single core, a given RX workload of the mcp251xfd driver
results in 40% CPU load. Using polling mode reduces the CPU load to
30%.

This patch adds PIO polling support to the driver. For transfers with
a duration of less than 30 µs the polling mode instead of IRQ based
PIO mode is used. 30 µs seems to be a good compromise, which is used
the by the SPI drivers for the raspberry Pi (spi-bcm2835,
spi-bcm2835), too.

Co-developed-by: David Jander <david@protonic.nl>
Signed-off-by: David Jander <david@protonic.nl>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Link: https://lore.kernel.org/r/20220502175457.1977983-9-mkl@pengutronix.de
Signed-off-by: Mark Brown <broonie@kernel.org>
2022-05-09 18:18:15 +01:00
..
atmel-quadspi.c spi: atmel-quadspi: Remove duplicated DTR checks 2022-04-13 16:43:13 +01:00
internals.h
Kconfig spi: spi-imx: replace struct spi_imx_data::bitbang by pointer to struct spi_controller 2022-05-09 18:18:14 +01:00
Makefile spi: add driver for MTK SPI NAND Flash Interface 2022-04-27 17:22:53 +01:00
spi-altera-core.c spi: altera: separate core code from platform code 2021-04-20 17:26:40 +01:00
spi-altera-dfl.c spi: altera: Change to dynamic allocation of spi id 2021-10-20 01:53:15 +01:00
spi-altera-platform.c spi: altera: Change to dynamic allocation of spi id 2021-10-20 01:53:15 +01:00
spi-amd.c spi: amd: Fix building without ACPI enabled 2022-02-16 16:34:25 +00:00
spi-ar934x.c spi: ar934x: fix transfer size 2022-01-04 14:59:40 +00:00
spi-armada-3700.c spi: change clk_disable_unprepare to clk_unprepare 2022-01-26 12:58:14 +00:00
spi-at91-usart.c spi: at91-usart: replacing legacy gpio interface for gpiod 2021-10-20 00:23:21 +01:00
spi-ath79.c spi: ath79: add mem_ops for fast-read 2022-02-08 13:40:18 +00:00
spi-atmel.c spi: atmel: Fix typo 2022-01-07 13:36:37 +00:00
spi-au1550.c spi: spi-au1550: Fix various whitespace warnings 2021-01-22 16:26:21 +00:00
spi-axi-spi-engine.c spi: spi-axi-spi-engine: remove usage of delay_usecs 2021-03-12 14:30:42 +00:00
spi-bcm63xx-hsspi.c spi: bcm63xx-hsspi: fix pm_runtime 2021-03-10 12:25:12 +00:00
spi-bcm63xx.c spi: bcm63xx-spi: don't check 'delay_usecs' field 2021-03-12 14:30:43 +00:00
spi-bcm2835.c spi: spi-bcm2835: Fix deadlock 2021-07-20 13:34:05 +01:00
spi-bcm2835aux.c spi: bcm2835aux: Convert to use GPIO descriptors 2022-02-01 16:08:47 +00:00
spi-bcm-qspi.c spi: bcm-qspi: fix MSPI only access with bcm_qspi_exec_mem_op() 2022-04-06 15:50:11 +01:00
spi-bcm-qspi.h
spi-bitbang-txrx.h spi: gpio: Implement LSB First bitbang support 2022-02-22 11:56:41 +00:00
spi-bitbang.c spi: Cleanup on failure of initial setup 2021-06-01 14:03:12 +01:00
spi-brcmstb-qspi.c
spi-butterfly.c spi: butterfly: Switch to use module_parport_driver() 2021-03-10 12:46:05 +00:00
spi-cadence-quadspi.c spi: spi-cadence-quadspi: using pm_runtime_resume_and_get instead of pm_runtime_get_sync 2022-04-25 14:01:07 +01:00
spi-cadence-xspi.c spi: cadence: fix platform_get_irq.cocci warning 2022-03-07 13:16:07 +00:00
spi-cadence.c spi: spi-cadence: Fix kernel-doc format for resume/suspend 2022-04-06 15:50:29 +01:00
spi-cavium-octeon.c
spi-cavium-thunderx.c
spi-cavium.c
spi-cavium.h
spi-clps711x.c spi: clps711x: Use syscon_regmap_lookup_by_phandle 2022-04-25 14:01:09 +01:00
spi-coldfire-qspi.c spi: coldfire-qspi: Use clk_disable_unprepare in the remove function 2021-08-19 18:20:10 +01:00
spi-davinci.c spi: davinci: invoke chipselect callback 2021-08-24 20:53:24 +01:00
spi-dln2.c spi: dln2: Propagate firmware node 2021-12-23 13:38:38 +00:00
spi-dw-bt1.c spi: dw: Put the driver entities naming in order 2021-11-16 14:30:05 +00:00
spi-dw-core.c spi: dw: Propagate firmware node 2021-12-23 13:38:39 +00:00
spi-dw-dma.c spi: dw: Put the driver entities naming in order 2021-11-16 14:30:05 +00:00
spi-dw-mmio.c spi: dw: Replace DWC_HSSI capability with IP-core version checker 2021-11-16 14:30:09 +00:00
spi-dw-pci.c spi: dw: Put the driver entities naming in order 2021-11-16 14:30:05 +00:00
spi-dw.h spi: dw: Define the capabilities in a continuous bit-flags set 2021-11-16 14:30:10 +00:00
spi-ep93xx.c spi: spi-ep93xx: Prepare clock before using it 2021-08-03 18:27:24 +01:00
spi-falcon.c spi: spi-falcon: remove check for 'delay_usecs' 2021-03-12 14:30:48 +00:00
spi-fsi.c spi: fsi: Implement a timeout for polling status 2022-03-18 16:05:08 +00:00
spi-fsl-cpm.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
spi-fsl-cpm.h
spi-fsl-dspi.c spi: spi-fsl-dspi: Fix issue with uninitialized dma_slave_config 2021-08-10 13:22:19 +01:00
spi-fsl-espi.c spi: fsl-espi: remove usage of 'delay_usecs' field 2021-03-12 14:30:49 +00:00
spi-fsl-lib.c
spi-fsl-lib.h
spi-fsl-lpspi.c spi: lpspi: release requested DMA channels 2021-11-15 13:27:16 +00:00
spi-fsl-qspi.c spi: spi-fsl-qspi: check return value after calling platform_get_resource_byname() 2022-05-09 12:48:47 +01:00
spi-fsl-spi.c spi: Cleanup on failure of initial setup 2021-06-01 14:03:12 +01:00
spi-fsl-spi.h
spi-geni-qcom.c spi: qcom: geni: Simplify DMA setting 2022-01-28 16:00:24 +00:00
spi-gpio.c spi: gpio: Implement LSB First bitbang support 2022-02-22 11:56:41 +00:00
spi-hisi-kunpeng.c spi: hisi-kunpeng: Fix the debugfs directory name incorrect 2021-11-17 13:04:54 +00:00
spi-hisi-sfc-v3xx.c spi: hisi-sfc-v3xx: drop unnecessary ACPI_PTR and related ifendif protection 2021-04-12 17:07:38 +01:00
spi-img-spfi.c spi: img-spfi: Fix pm_runtime_get_sync() error checking 2022-04-22 12:37:36 +01:00
spi-imx.c spi: spi-imx: add PIO polling support 2022-05-09 18:18:15 +01:00
spi-ingenic.c spi: ingenic: Add support for new Ingenic SoCs. 2022-04-25 14:00:51 +01:00
spi-intel-pci.c spi: intel: Add support for Raptor Lake-S SPI serial flash 2022-04-13 13:47:37 +01:00
spi-intel-platform.c mtd: spi-nor: intel-spi: Convert to SPI MEM 2022-02-14 12:53:09 +00:00
spi-intel.c spi: intel: Implement dirmap hooks 2022-04-20 14:25:20 +01:00
spi-intel.h mtd: spi-nor: intel-spi: Convert to SPI MEM 2022-02-14 12:53:09 +00:00
spi-iproc-qspi.c
spi-jcore.c spi: jcore: Fix trailing statements should be on next line 2021-03-24 19:51:09 +00:00
spi-lantiq-ssc.c spi: Use of_device_get_match_data() 2022-02-21 13:25:19 +00:00
spi-lm70llp.c spi: lm70llp: add parenthesis for sizeof 2021-05-20 18:00:34 +01:00
spi-loopback-test.c spi: spi-loopback-test: Fix 'tx_buf' might be 'rx_buf' 2021-05-10 13:07:53 +01:00
spi-lp8841-rtc.c
spi-mem.c spi: spi-cadence-quadspi: using pm_runtime_resume_and_get instead of pm_runtime_get_sync 2022-04-19 13:13:43 +01:00
spi-meson-spicc.c spi: meson-spicc: add IRQ check in meson_spicc_probe 2022-01-26 13:32:36 +00:00
spi-meson-spifc.c spi: spi-meson-spifc: Add missing pm_runtime_disable() in meson_spifc_probe 2022-01-07 13:36:38 +00:00
spi-mpc52xx-psc.c spi: Prepare cleanup of powerpc's asm/prom.h 2022-04-05 10:21:55 +01:00
spi-mpc52xx.c spi: Prepare cleanup of powerpc's asm/prom.h 2022-04-05 10:21:55 +01:00
spi-mpc512x-psc.c spi: mpc512x-psc: Fix compile errors 2022-02-02 16:09:29 +00:00
spi-mt65xx.c spi: mt65xx: Fix definitions indentation 2022-04-19 16:32:14 +01:00
spi-mt7621.c spi: mt7621: Don't leak SPI master in probe error path 2020-12-07 14:18:59 +00:00
spi-mtk-nor.c spi: spi-mtk-nor: initialize spi controller after resume 2022-04-12 17:18:51 +01:00
spi-mtk-snfi.c spi: mtk-snfi: preserve dma_mapping_error() error codes 2022-05-03 14:00:38 +01:00
spi-mux.c spi-mux: Fix false-positive lockdep splats 2021-10-14 13:32:19 +01:00
spi-mxic.c spi: mxic: Fix an error handling path in mxic_spi_probe() 2022-04-04 08:45:14 +01:00
spi-mxs.c spi: mxs: using pm_runtime_resume_and_get instead of pm_runtime_get_sync 2022-04-25 14:00:59 +01:00
spi-npcm-fiu.c spi: npcm-fiu: Fix typo ("npxm") 2022-03-07 13:16:58 +00:00
spi-npcm-pspi.c spi: npcm-pspi: Use SPI_MODE_X_MASK 2021-05-11 15:42:48 +01:00
spi-nxp-fspi.c spi: spi-nxp-fspi: don't depend on a specific node name erratum workaround 2021-10-02 01:31:49 +01:00
spi-oc-tiny.c spi: oc-tiny: Use SPI_MODE_X_MASK 2021-05-11 15:42:49 +01:00
spi-omap2-mcspi.c spi: omap2-mcspi: add support for interword delay 2022-05-04 16:02:36 +01:00
spi-omap-100k.c spi: fix some invalid char occurrences 2021-05-20 17:58:33 +01:00
spi-omap-uwire.c Merge branch 'for-5.13' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi into spi-5.14 2021-06-01 18:33:33 +01:00
spi-orion.c spi: orion: Add of_node_put() before goto 2021-10-15 16:10:59 +01:00
spi-pic32-sqi.c
spi-pic32.c spi: pic32: Convert to use GPIO descriptors 2022-01-31 15:17:30 +00:00
spi-pl022.c spi: spl022: fix Microwire full duplex mode 2021-10-26 11:53:57 +01:00
spi-ppc4xx.c spi: ppc4xx: add parenthesis for sizeof 2021-05-20 18:00:40 +01:00
spi-pxa2xx-dma.c spi: pxa2xx: Fix style of and typos in the comments and messages 2021-05-18 14:05:35 +01:00
spi-pxa2xx-pci.c spi: pxa2xx-pci: Constify struct pxa_spi_info variables 2022-02-28 12:10:27 +00:00
spi-pxa2xx.c spi: pxa2xx: Add support for Intel Raptor Lake PCH-S 2022-02-16 16:34:26 +00:00
spi-pxa2xx.h spi: pxa2xx: Get rid of unused ->cs_control() 2021-11-29 12:19:59 +00:00
spi-qcom-qspi.c spi: spi-qcom-qspi: Convert to use resource-managed OPP API 2021-03-16 10:14:11 +05:30
spi-qup.c spi: qup: replace spin_lock_irqsave by spin_lock in hard IRQ 2022-03-07 13:16:08 +00:00
spi-rb4xx.c spi: rb4xx: Don't leak SPI master in probe error path 2020-12-07 14:18:55 +00:00
spi-realtek-rtl.c spi: realtek-rtl: Add support for Realtek RTL838x/RTL839x SPI controllers 2021-02-04 18:45:57 +00:00
spi-rockchip-sfc.c spi: rockchip-sfc: fix platform_get_irq.cocci warning 2022-03-10 12:17:56 +00:00
spi-rockchip.c spi: rockchip: fix missing error on unsupported SPI_CS_HIGH 2022-04-25 14:01:01 +01:00
spi-rpc-if.c spi: rpc-if: Fix RPM imbalance in probe error path 2022-04-04 08:38:59 +01:00
spi-rspi.c spi: spi-rspi: Remove setting {src,dst}_{addr,addr_width} based on DMA direction 2022-04-12 17:17:22 +01:00
spi-s3c24xx-regs.h ARM: s3c24xx: move regs-spi.h into spi driver 2020-08-19 21:40:14 +02:00
spi-s3c24xx.c spi: s3c24xx: Convert to GPIO descriptors 2022-01-24 13:37:34 +00:00
spi-s3c64xx.c spi: Tesla FSD support 2022-03-08 20:07:09 +00:00
spi-sc18is602.c spi: sc18is602: implement .max_{transfer,message}_size() for the controller 2021-05-21 13:13:33 +01:00
spi-sh-hspi.c
spi-sh-msiof.c spi: sh-msiof: drop unneeded MODULE_ALIAS 2021-09-17 13:17:50 +01:00
spi-sh-sci.c
spi-sh.c spi: spi-sh: replace 'delay_usecs' with 'delay.value' in pr_debug 2021-03-12 14:30:45 +00:00
spi-sifive.c
spi-slave-mt27xx.c spi: mediatek: add mt8195 spi slave support 2021-03-23 17:19:45 +00:00
spi-slave-system-control.c spi: make remove callback a void function 2022-02-09 13:00:45 +00:00
spi-slave-time.c spi: make remove callback a void function 2022-02-09 13:00:45 +00:00
spi-sprd-adi.c spi: sprd: Add ADI r3 support 2021-08-26 12:09:38 +01:00
spi-sprd.c spi: spi-sprd: using pm_runtime_resume_and_get instead of pm_runtime_get_sync 2022-04-25 14:00:57 +01:00
spi-st-ssc4.c spi: st-ssc4: Covert to use GPIO descriptors 2022-02-01 16:08:45 +00:00
spi-stm32-qspi.c spi: spi-stm32-qspi: using pm_runtime_resume_and_get instead of pm_runtime_get_sync 2022-04-12 17:17:19 +01:00
spi-stm32.c spi: stm32: using pm_runtime_resume_and_get instead of pm_runtime_get_sync 2022-04-25 14:01:08 +01:00
spi-sun4i.c spi: sun4i: fix typos in comments 2022-03-15 12:03:58 +00:00
spi-sun6i.c spi: spi-sun6i: Fix chipselect/clock bug 2021-06-23 11:48:36 +01:00
spi-sunplus-sp7021.c spi: remove spin_lock_irq and variable in the irq procress 2022-04-19 13:13:42 +01:00
spi-synquacer.c spi: spi-synquacer: fix set_cs handling 2021-02-03 16:23:07 +00:00
spi-tegra20-sflash.c spi: spi-tegra20-sflash: using pm_runtime_resume_and_get instead of pm_runtime_get_sync 2022-04-25 14:01:03 +01:00
spi-tegra20-slink.c spi: spi-tegra20-slink: using pm_runtime_resume_and_get instead of pm_runtime_get_sync 2022-04-25 14:01:06 +01:00
spi-tegra114.c spi: spi-tegra114: using pm_runtime_resume_and_get instead of pm_runtime_get_sync 2022-04-19 13:13:44 +01:00
spi-tegra210-quad.c spi: tegra210-quad: combined sequence mode 2022-03-08 12:28:05 +00:00
spi-test.h
spi-ti-qspi.c spi: spi-ti-qspi: using pm_runtime_resume_and_get instead of pm_runtime_get_sync 2022-04-19 13:13:45 +01:00
spi-tle62x0.c spi: make remove callback a void function 2022-02-09 13:00:45 +00:00
spi-topcliff-pch.c spi: topcliff-pch: Prevent usage of potentially stale DMA device 2022-03-08 12:28:07 +00:00
spi-uniphier.c spi: uniphier: fix reference count leak in uniphier_spi_probe() 2022-01-26 15:52:05 +00:00
spi-xcomm.c
spi-xilinx.c spi: xilinx: Fix info message during probe 2020-09-17 19:56:01 +01:00
spi-xlp.c spi: xlp: Remove Netlogic XLP variants 2021-11-15 13:27:17 +00:00
spi-xtensa-xtfpga.c
spi-zynq-qspi.c spi: spi-zynq-qspi: Fix a NULL pointer dereference in zynq_qspi_exec_mem_op() 2022-02-08 13:37:50 +00:00
spi-zynqmp-gqspi.c spi: spi-zynqmp-gqspi: Handle error for dma_set_mask 2022-03-02 13:45:36 +00:00
spi.c spi: using pm_runtime_resume_and_get instead of pm_runtime_get_sync 2022-04-19 13:13:50 +01:00
spidev.c spi: spidev: add SPI_RX_CPHA_FLIP 2022-04-19 13:13:48 +01:00