mirror of https://github.com/torvalds/linux.git
spi: spi-cadence-quadspi: Enable pm runtime earlier to avoid imbalance
The "probe_setup_failed" label calls pm_runtime_disable(), but
pm_runtime_enable() was placed after a possible jump to this label.
When cqspi_setup_flash() fails, control jumps to the label without
pm_runtime_enable() being called, leading to unbalanced PM runtime
reference counting.
Move pm_runtime_enable() and associated calls above the first
possible branch to "probe_setup_failed" to ensure balanced
enable/disable calls across all error paths.
Fixes: 30dbc1c8d5 ("spi: cadence-qspi: defer runtime support on socfpga if reset bit is enabled")
Signed-off-by: Anurag Dutta <a-dutta@ti.com>
Link: https://patch.msgid.link/20251105161146.2019090-2-a-dutta@ti.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
66e9feb03e
commit
f1eb4e792b
|
|
@ -1981,6 +1981,13 @@ static int cqspi_probe(struct platform_device *pdev)
|
||||||
cqspi->current_cs = -1;
|
cqspi->current_cs = -1;
|
||||||
cqspi->sclk = 0;
|
cqspi->sclk = 0;
|
||||||
|
|
||||||
|
if (!(ddata && (ddata->quirks & CQSPI_DISABLE_RUNTIME_PM))) {
|
||||||
|
pm_runtime_enable(dev);
|
||||||
|
pm_runtime_set_autosuspend_delay(dev, CQSPI_AUTOSUSPEND_TIMEOUT);
|
||||||
|
pm_runtime_use_autosuspend(dev);
|
||||||
|
pm_runtime_get_noresume(dev);
|
||||||
|
}
|
||||||
|
|
||||||
ret = cqspi_setup_flash(cqspi);
|
ret = cqspi_setup_flash(cqspi);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "failed to setup flash parameters %d\n", ret);
|
dev_err(dev, "failed to setup flash parameters %d\n", ret);
|
||||||
|
|
@ -1998,13 +2005,6 @@ static int cqspi_probe(struct platform_device *pdev)
|
||||||
goto probe_dma_failed;
|
goto probe_dma_failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(ddata && (ddata->quirks & CQSPI_DISABLE_RUNTIME_PM))) {
|
|
||||||
pm_runtime_enable(dev);
|
|
||||||
pm_runtime_set_autosuspend_delay(dev, CQSPI_AUTOSUSPEND_TIMEOUT);
|
|
||||||
pm_runtime_use_autosuspend(dev);
|
|
||||||
pm_runtime_get_noresume(dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = spi_register_controller(host);
|
ret = spi_register_controller(host);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(&pdev->dev, "failed to register SPI ctlr %d\n", ret);
|
dev_err(&pdev->dev, "failed to register SPI ctlr %d\n", ret);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue