Unverified Commit 5ff4d5d1 authored by Johan Hovold's avatar Johan Hovold Committed by Mark Brown
Browse files

spi: cadence-quadspi: fix runtime pm disable imbalance on probe failure



A recent attempt to fix the probe error handling introduced a runtime PM
disable depth imbalance by incorrectly disabling runtime PM on early
failures (e.g. probe deferral).

Fixes: f18c8cfa ("spi: cadence-qspi: Fix probe error path and remove")
Cc: stable@vger.kernel.org	# 7.0
Cc: Miquel Raynal (Schneider Electric) <miquel.raynal@bootlin.com>
Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
Link: https://patch.msgid.link/20260421125354.1534871-2-johan@kernel.org


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 922f8c28
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -1867,7 +1867,7 @@ static int cqspi_probe(struct platform_device *pdev)
	ret = clk_bulk_prepare_enable(CLK_QSPI_NUM, cqspi->clks);
	if (ret) {
		dev_err(dev, "Cannot enable QSPI clocks.\n");
		goto disable_rpm;
		return ret;
	}

	/* Obtain QSPI reset control */
@@ -1977,7 +1977,7 @@ static int cqspi_probe(struct platform_device *pdev)
		ret = cqspi_request_mmap_dma(cqspi);
		if (ret == -EPROBE_DEFER) {
			dev_err_probe(&pdev->dev, ret, "Failed to request mmap DMA\n");
			goto disable_controller;
			goto disable_rpm;
		}
	}

@@ -1995,14 +1995,13 @@ static int cqspi_probe(struct platform_device *pdev)
release_dma_chan:
	if (cqspi->rx_chan)
		dma_release_channel(cqspi->rx_chan);
disable_controller:
disable_rpm:
	if (!(ddata && (ddata->quirks & CQSPI_DISABLE_RUNTIME_PM)))
		pm_runtime_disable(dev);
	cqspi_controller_enable(cqspi, 0);
disable_clks:
	if (pm_runtime_get_sync(&pdev->dev) >= 0)
		clk_bulk_disable_unprepare(CLK_QSPI_NUM, cqspi->clks);
disable_rpm:
	if (!(ddata && (ddata->quirks & CQSPI_DISABLE_RUNTIME_PM)))
		pm_runtime_disable(dev);

	return ret;
}