Skip to content

Commit b07f349

Browse files
Khairul Anuar Romlibroonie
authored andcommitted
spi: spi-cadence-quadspi: Fix pm runtime unbalance
Having PM put sync in remove function is causing PM underflow during remove operation. This is caused by the function, runtime_pm_get_sync, not being called anywhere during the op. Ensure that calls to pm_runtime_enable()/pm_runtime_disable() and pm_runtime_get_sync()/pm_runtime_put_sync() match. echo 108d2000.spi > /sys/bus/platform/drivers/cadence-qspi/unbind [ 49.644256] Deleting MTD partitions on "108d2000.spi.0": [ 49.649575] Deleting u-boot MTD partition [ 49.684087] Deleting root MTD partition [ 49.724188] cadence-qspi 108d2000.spi: Runtime PM usage count underflow! Continuous bind/unbind will result in an "Unbalanced pm_runtime_enable" error. Subsequent unbind attempts will return a "No such device" error, while bind attempts will return a "Resource temporarily unavailable" error. [ 47.592434] cadence-qspi 108d2000.spi: Runtime PM usage count underflow! [ 49.592233] cadence-qspi 108d2000.spi: detected FIFO depth (1024) different from config (128) [ 53.232309] cadence-qspi 108d2000.spi: Runtime PM usage count underflow! [ 55.828550] cadence-qspi 108d2000.spi: detected FIFO depth (1024) different from config (128) [ 57.940627] cadence-qspi 108d2000.spi: Runtime PM usage count underflow! [ 59.912490] cadence-qspi 108d2000.spi: detected FIFO depth (1024) different from config (128) [ 61.876243] cadence-qspi 108d2000.spi: Runtime PM usage count underflow! [ 61.883000] platform 108d2000.spi: Unbalanced pm_runtime_enable! [ 532.012270] cadence-qspi 108d2000.spi: probe with driver cadence-qspi failed1 Also, change clk_disable_unprepare() to clk_disable() since continuous bind and unbind operations will trigger a warning indicating that the clock is already unprepared. Fixes: 4892b37 ("mtd: spi-nor: cadence-quadspi: Add runtime PM support") cc: [email protected] # 6.6+ Signed-off-by: Khairul Anuar Romli <[email protected]> Reviewed-by: Matthew Gerlach <[email protected]> Link: https://patch.msgid.link/4e7a4b8aba300e629b45a04f90bddf665fbdb335.1749601877.git.khairul.anuar.romli@altera.com Signed-off-by: Mark Brown <[email protected]>
1 parent 86731a2 commit b07f349

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

drivers/spi/spi-cadence-quadspi.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1958,10 +1958,10 @@ static int cqspi_probe(struct platform_device *pdev)
19581958
goto probe_setup_failed;
19591959
}
19601960

1961-
ret = devm_pm_runtime_enable(dev);
1962-
if (ret) {
1963-
if (cqspi->rx_chan)
1964-
dma_release_channel(cqspi->rx_chan);
1961+
pm_runtime_enable(dev);
1962+
1963+
if (cqspi->rx_chan) {
1964+
dma_release_channel(cqspi->rx_chan);
19651965
goto probe_setup_failed;
19661966
}
19671967

@@ -1981,6 +1981,7 @@ static int cqspi_probe(struct platform_device *pdev)
19811981
return 0;
19821982
probe_setup_failed:
19831983
cqspi_controller_enable(cqspi, 0);
1984+
pm_runtime_disable(dev);
19841985
probe_reset_failed:
19851986
if (cqspi->is_jh7110)
19861987
cqspi_jh7110_disable_clk(pdev, cqspi);
@@ -1999,7 +2000,8 @@ static void cqspi_remove(struct platform_device *pdev)
19992000
if (cqspi->rx_chan)
20002001
dma_release_channel(cqspi->rx_chan);
20012002

2002-
clk_disable_unprepare(cqspi->clk);
2003+
if (pm_runtime_get_sync(&pdev->dev) >= 0)
2004+
clk_disable(cqspi->clk);
20032005

20042006
if (cqspi->is_jh7110)
20052007
cqspi_jh7110_disable_clk(pdev, cqspi);

0 commit comments

Comments
 (0)