Skip to content

Commit 5b1689a

Browse files
jhovoldbroonie
authored andcommitted
spi: cadence: fix unclocked access on unbind
Make sure that the controller is runtime resumed before disabling it during driver unbind to avoid unclocked register access and unbalanced clock disable. Also restore the autosuspend setting. This issue was flagged by Sashiko when reviewing a controller deregistration fix. Fixes: d36ccd9 ("spi: cadence: Runtime pm adaptation") Cc: stable@vger.kernel.org # 4.7 Cc: Shubhrajyoti Datta <shubhrajyoti.datta@xilinx.com> Link: https://sashiko.dev/#/patchset/20260414134319.978196-1-johan%40kernel.org?part=1 Signed-off-by: Johan Hovold <johan@kernel.org> Link: https://patch.msgid.link/20260421123615.1533617-2-johan@kernel.org Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent 254f496 commit 5b1689a

1 file changed

Lines changed: 8 additions & 1 deletion

File tree

drivers/spi/spi-cadence.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -776,16 +776,23 @@ static void cdns_spi_remove(struct platform_device *pdev)
776776
{
777777
struct spi_controller *ctlr = platform_get_drvdata(pdev);
778778
struct cdns_spi *xspi = spi_controller_get_devdata(ctlr);
779+
int ret = 0;
780+
781+
if (!spi_controller_is_target(ctlr))
782+
ret = pm_runtime_get_sync(&pdev->dev);
779783

780784
spi_controller_get(ctlr);
781785

782786
spi_unregister_controller(ctlr);
783787

784-
cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_DISABLE);
788+
if (ret >= 0)
789+
cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_DISABLE);
785790

786791
if (!spi_controller_is_target(ctlr)) {
787792
pm_runtime_disable(&pdev->dev);
788793
pm_runtime_set_suspended(&pdev->dev);
794+
pm_runtime_put_noidle(&pdev->dev);
795+
pm_runtime_dont_use_autosuspend(&pdev->dev);
789796
}
790797

791798
spi_controller_put(ctlr);

0 commit comments

Comments
 (0)