mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 03:11:11 -04:00
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: f18c8cfa4f ("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: Johan Hovold <johan@kernel.org>
Link: https://patch.msgid.link/20260421125354.1534871-2-johan@kernel.org
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user