[PATCH v3] spi: cadence-quadspi: Fix pm_runtime unbalance on dma EPROBE_DEFER

Mattijs Korpershoek posted 1 patch 2 months ago
drivers/spi/spi-cadence-quadspi.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
[PATCH v3] spi: cadence-quadspi: Fix pm_runtime unbalance on dma EPROBE_DEFER
Posted by Mattijs Korpershoek 2 months ago
In csqspi_probe(), when cqspi_request_mmap_dma() returns -EPROBE_DEFER,
we handle the error by jumping to probe_setup_failed.
In that label, we call pm_runtime_disable(), even if we never called
pm_runtime_enable() before.

Because of this, the driver cannot probe:

[    2.690018] cadence-qspi 47040000.spi: No Rx DMA available
[    2.699735] spi-nor spi0.0: resume failed with -13
[    2.699741] spi-nor: probe of spi0.0 failed with error -13

Only call pm_runtime_disable() if it was enabled by adding a new
label to handle spi_register_controller() failures.

Fixes: b07f349d1864 ("spi: spi-cadence-quadspi: Fix pm runtime unbalance")
Signed-off-by: Mattijs Korpershoek <mkorpershoek@kernel.org>
---
This has been tested on a AM69 SK board.
---
Changes in v3:
- Rebased on spi/for-6.18 (Dropped Dan's review since rebase was
  non-trivial)
- Link to v2: https://lore.kernel.org/r/20251009-cadence-quadspi-fix-pm-runtime-v2-1-8bdfefc43902@kernel.org

Changes in v2:
- Updated message to use correct Fixes tag (Dan)
- Link to v1: https://lore.kernel.org/r/20251008-cadence-quadspi-fix-pm-runtime-v1-1-33bcb4b83a2e@kernel.org
---
 drivers/spi/spi-cadence-quadspi.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/spi/spi-cadence-quadspi.c b/drivers/spi/spi-cadence-quadspi.c
index 2ce4fc136a51ce3305e478c82da6b88ad542fc8c..4209578cb3426aad6707d0a46ddb78986c5eef7d 100644
--- a/drivers/spi/spi-cadence-quadspi.c
+++ b/drivers/spi/spi-cadence-quadspi.c
@@ -2002,15 +2002,17 @@ static int cqspi_probe(struct platform_device *pdev)
 	ret = spi_register_controller(host);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to register SPI ctlr %d\n", ret);
-		goto probe_setup_failed;
+		goto probe_ctrl_failed;
 	}
 
 	pm_runtime_put_autosuspend(dev);
 
 	return 0;
+
+probe_ctrl_failed:
+	pm_runtime_disable(dev);
 probe_setup_failed:
 	cqspi_controller_enable(cqspi, 0);
-	pm_runtime_disable(dev);
 probe_reset_failed:
 	if (cqspi->is_jh7110)
 		cqspi_jh7110_disable_clk(pdev, cqspi);

---
base-commit: 18a5f1af596e6ba22cd40ada449063041f3ce6d4
change-id: 20251008-cadence-quadspi-fix-pm-runtime-bf8df9104577

Best regards,
-- 
Mattijs Korpershoek <mkorpershoek@kernel.org>
Re: [PATCH v3] spi: cadence-quadspi: Fix pm_runtime unbalance on dma EPROBE_DEFER
Posted by Mark Brown 2 months ago
On Mon, 13 Oct 2025 13:44:10 +0200, Mattijs Korpershoek wrote:
> In csqspi_probe(), when cqspi_request_mmap_dma() returns -EPROBE_DEFER,
> we handle the error by jumping to probe_setup_failed.
> In that label, we call pm_runtime_disable(), even if we never called
> pm_runtime_enable() before.
> 
> Because of this, the driver cannot probe:
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next

Thanks!

[1/1] spi: cadence-quadspi: Fix pm_runtime unbalance on dma EPROBE_DEFER
      commit: 8735696acea24ac1f9d4490992418c71941ca68c

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark