android_kernel_motorola_sm6225/drivers/spi
Stephan Gerhold 7434af0995 spi: qup: Request DMA before enabling clocks
[ Upstream commit 0c331fd1dccfba657129380ee084b95c1cedfbef ]

It is usually better to request all necessary resources (clocks,
regulators, ...) before starting to make use of them. That way they do
not change state in case one of the resources is not available yet and
probe deferral (-EPROBE_DEFER) is necessary. This is particularly
important for DMA channels and IOMMUs which are not enforced by
fw_devlink yet (unless you use fw_devlink.strict=1).

spi-qup does this in the wrong order, the clocks are enabled and
disabled again when the DMA channels are not available yet.

This causes issues in some cases: On most SoCs one of the SPI QUP
clocks is shared with the UART controller. When using earlycon UART is
actively used during boot but might not have probed yet, usually for
the same reason (waiting for the DMA controller). In this case, the
brief enable/disable cycle ends up gating the clock and further UART
console output will halt the system completely.

Avoid this by requesting the DMA channels before changing the clock
state.

Fixes: 612762e82a ("spi: qup: Add DMA capabilities")
Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
Link: https://lore.kernel.org/r/20230518-spi-qup-clk-defer-v1-1-f49fc9ca4e02@gerhold.net
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-06-14 10:57:12 +02:00
..
internals.h spi: Add an helper to flush the message queue 2018-04-23 15:48:18 +01:00
Kconfig spi: Prevent adding devices below an unregistering controller 2020-08-26 10:31:00 +02:00
Makefile spi: add SPI controller driver for UniPhier SoC 2018-08-01 11:22:37 +01:00
spi-altera.c
spi-armada-3700.c spi: change clk_disable_unprepare to clk_unprepare 2021-12-29 12:20:43 +01:00
spi-ath79.c spi: add flags parameter to txrx_word function pointers 2018-08-01 14:50:24 +01:00
spi-atmel.c spi: atmel: Put allocated master before return 2021-03-04 09:39:44 +01:00
spi-au1550.c
spi-axi-spi-engine.c
spi-bcm-qspi.c spi: bcm-qspi: fix MSPI only access with bcm_qspi_exec_mem_op() 2022-04-15 14:15:05 +02:00
spi-bcm-qspi.h
spi-bcm63xx-hsspi.c spi: bcm63xx-hsspi: Fix multi-bit mode setting 2023-03-11 16:31:41 +01:00
spi-bcm63xx.c
spi-bcm2835.c spi: bcm2835: Release the DMA channel if probe fails after dma_init 2020-12-11 13:25:03 +01:00
spi-bcm2835aux.c spi: bcm2835aux: Restore err assignment in bcm2835aux_spi_probe 2020-12-30 11:25:37 +01:00
spi-bitbang-txrx.h
spi-bitbang.c spi: bitbang: Fix NULL pointer dereference in spi_unregister_master 2019-07-10 09:53:32 +02:00
spi-brcmstb-qspi.c
spi-butterfly.c spi: add flags parameter to txrx_word function pointers 2018-08-01 14:50:24 +01:00
spi-cadence.c spi: cadence: Correct initialisation of runtime PM again 2021-07-28 11:13:48 +02:00
spi-cavium-octeon.c
spi-cavium-thunderx.c spi: spi-cavium-thunderx: Add missing pci_release_regions() 2020-01-12 12:17:11 +01:00
spi-cavium.c
spi-cavium.h
spi-clps711x.c
spi-coldfire-qspi.c
spi-davinci.c spi: davinci: Fix use-after-free on unbind 2020-12-30 11:26:14 +01:00
spi-dln2.c spi: dln2: Fix reference leak to master 2021-05-22 10:59:15 +02:00
spi-dw-mid.c spi: dw: Return any value retrieved from the dma_transfer callback 2020-06-22 09:05:20 +02:00
spi-dw-mmio.c spi: dw-mmio: add MSCC Ocelot support 2018-07-30 12:02:08 +01:00
spi-dw-pci.c
spi-dw.c spi: dw: Return any value retrieved from the dma_transfer callback 2020-06-22 09:05:20 +02:00
spi-dw.h spi: spi-dw: Add lock protect dw_spi rx/tx to prevent concurrent calls 2020-02-01 09:37:08 +00:00
spi-efm32.c
spi-ep93xx.c spi: spi-ep93xx: Use dma_data_direction for ep93xx_spi_dma_{finish,prepare} 2018-11-13 11:08:22 -08:00
spi-falcon.c
spi-fsl-cpm.c spi: fsl-cpm: Use 16 bit mode for large transfers with even size 2023-05-30 12:42:13 +01:00
spi-fsl-cpm.h
spi-fsl-dspi.c spi: spi-fsl-dspi: Fix issue with uninitialized dma_slave_config 2021-09-22 11:47:51 +02:00
spi-fsl-espi.c spi: fsl-espi: Only process interrupts for expected events 2020-10-07 08:00:07 +02:00
spi-fsl-lib.c
spi-fsl-lib.h
spi-fsl-lpspi.c spi: fsl-lpspi: Prevent FIFO under/overrun by default 2019-11-24 08:20:55 +01:00
spi-fsl-spi.c spi: fsl-cpm: Use 16 bit mode for large transfers with even size 2023-05-30 12:42:13 +01:00
spi-fsl-spi.h
spi-gpio.c spi: gpio: Don't leak SPI master in probe error path 2021-06-03 08:38:07 +02:00
spi-img-spfi.c spi: img-spfi: Fix pm_runtime_get_sync() error checking 2022-06-14 16:59:20 +02:00
spi-imx.c spi: spi-imx: fix MX51_ECSPI_* macros when cs > 3 2023-05-30 12:42:09 +01:00
spi-iproc-qspi.c
spi-jcore.c spi: jcore: disable ref_clk after getting its rate 2018-03-18 17:57:42 -07:00
spi-lantiq-ssc.c spi: lantiq: fix: Rx overflow error in full duplex mode 2020-08-19 08:14:50 +02:00
spi-lm70llp.c spi: add flags parameter to txrx_word function pointers 2018-08-01 14:50:24 +01:00
spi-loopback-test.c spi: spi-loopback-test: Fix 'tx_buf' might be 'rx_buf' 2021-07-20 16:15:43 +02:00
spi-lp8841-rtc.c
spi-mem.c spi: spi-mem: Fix inverted logic in op sanity check 2020-02-14 16:33:24 -05:00
spi-meson-spicc.c spi: meson-spicc: add IRQ check in meson_spicc_probe 2022-02-08 18:23:16 +01:00
spi-meson-spifc.c spi: spi-meson-spifc: Add missing pm_runtime_disable() in meson_spifc_probe 2022-01-27 09:04:21 +01:00
spi-mpc52xx-psc.c
spi-mpc52xx.c spi: mpc52xx: Use gpio_is_valid() 2018-04-27 12:05:39 +01:00
spi-mpc512x-psc.c
spi-mt65xx.c spi: mediatek: Avoid NULL pointer crash in interrupt 2022-02-08 18:23:15 +01:00
spi-mxs.c spi: mxs: fix reference leak in mxs_spi_probe 2020-12-30 11:25:54 +01:00
spi-nuc900.c
spi-oc-tiny.c treewide: devm_kzalloc() -> devm_kcalloc() 2018-06-12 16:19:22 -07:00
spi-omap-100k.c spi/omap100k:Fix PM disable depth imbalance in omap1_spi100k_probe 2022-10-26 13:19:25 +02:00
spi-omap-uwire.c
spi-omap2-mcspi.c spi: omap2-mcspi: Fix DMA and FIFO event trigger size mismatch 2019-12-01 09:17:33 +01:00
spi-orion.c spi: orion: fix CS GPIO handling again 2018-06-19 13:06:51 +01:00
spi-pic32-sqi.c
spi-pic32.c spi: spi-pic32: Fix issue with uninitialized dma_slave_config 2021-09-22 11:47:51 +02:00
spi-pl022.c spi: spl022: fix Microwire full duplex mode 2021-11-26 11:35:59 +01:00
spi-ppc4xx.c
spi-pxa2xx-dma.c spi: pxa2xx: Use core message processing loop 2018-04-17 17:11:30 +01:00
spi-pxa2xx-pci.c spi: pxa2xx-pci: Balance reference count for PCI DMA device 2022-04-15 14:14:43 +02:00
spi-pxa2xx.c spi: pxa2xx: Fix use-after-free on unbind 2021-01-17 14:04:20 +01:00
spi-pxa2xx.h spi: pxa2xx: Allow 64-bit DMA 2018-04-24 16:10:12 +01:00
spi-qup.c spi: qup: Request DMA before enabling clocks 2023-06-14 10:57:12 +02:00
spi-rb4xx.c spi: rb4xx: Don't leak SPI master in probe error path 2020-12-30 11:26:14 +01:00
spi-rockchip.c spi: rockchip: initialize dma_slave_config properly 2019-11-24 08:21:05 +01:00
spi-rspi.c spi: rspi: Fix sequencer reset during initialization 2019-05-31 06:46:34 -07:00
spi-s3c24xx-fiq.h
spi-s3c24xx-fiq.S ARM: s3c: fix fiq for clang IAS 2021-03-04 09:39:35 +01:00
spi-s3c24xx.c
spi-s3c64xx.c spi: s3c64xx: Fix large transfers with DMA 2022-10-26 13:19:26 +02:00
spi-sc18is602.c spi: sc18is602: Don't leak SPI master in probe error path 2020-12-30 11:26:14 +01:00
spi-sh-hspi.c
spi-sh-msiof.c spi: sh-msiof: fix deferred probing 2019-12-01 09:16:20 +01:00
spi-sh-sci.c spi: add flags parameter to txrx_word function pointers 2018-08-01 14:50:24 +01:00
spi-sh.c spi: spi-sh: Fix use-after-free on unbind 2020-12-30 11:26:14 +01:00
spi-sirf.c
spi-slave-system-control.c
spi-slave-time.c
spi-sprd-adi.c spi: sprd: Fix the wrong WDG_LOAD_VAL 2021-09-22 11:47:51 +02:00
spi-st-ssc4.c spi: st-ssc4: Fix unbalanced pm_runtime_disable() in probe error path 2020-12-30 11:26:14 +01:00
spi-stm32.c spi: stm32: fix stm32_spi_prepare_mbr() that halves spi clk for every run 2022-12-08 11:18:28 +01:00
spi-sun4i.c
spi-sun6i.c spi: spi-sun6i: Fix chipselect/clock bug 2021-07-20 16:15:48 +02:00
spi-tegra20-sflash.c spi: tegra20-sflash: fix reference leak in tegra_sflash_resume 2020-12-30 11:25:52 +01:00
spi-tegra20-slink.c spi: tegra20: Use of_device_get_match_data() 2022-04-15 14:14:54 +02:00
spi-tegra114.c spi: tegra114: Add missing IRQ check in tegra_spi_probe 2022-04-15 14:14:42 +02:00
spi-test.h
spi-ti-qspi.c spi: spi-ti-qspi: Fix return value handling of wait_for_completion_timeout 2022-06-14 16:59:19 +02:00
spi-tle62x0.c
spi-topcliff-pch.c spi: spi-topcliff-pch: Fix potential double free in pch_spi_process_messages() 2021-07-20 16:15:43 +02:00
spi-txx9.c
spi-uniphier.c spi: uniphier: remove unnecessary include headers 2018-08-02 11:08:06 +01:00
spi-xcomm.c
spi-xilinx.c
spi-xlp.c
spi-xtensa-xtfpga.c spi: add flags parameter to txrx_word function pointers 2018-08-01 14:50:24 +01:00
spi-zynqmp-gqspi.c spi/zynqmp: remove entry that causes a cs glitch 2020-03-25 08:06:06 +01:00
spi.c spi: Fix erroneous sgs value with min_t() 2022-04-15 14:14:37 +02:00
spidev.c spi: spidev: Align buffers for DMA 2020-08-19 08:15:06 +02:00