RE: [PATCH v2 1/3] spi: nxp-fspi: use devm runtime PM enablement
Bough Chen <[email protected]> Wed, 29 Jul 2026 07:50:52 +0000
| Newsgroups | org.kernel.vger.linux-spi,dev.linux.lists.imx,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <DU2PR04MB8677D6D6256032D9BE5A45FE90CA2@DU2PR04MB8677.eurprd04.prod.outlook.com> |
> -----Original Message----- > From: Jiawen Liu <[email protected]> > Sent: 2026年7月28日 16:05 > To: Han Xu <[email protected]>; Bough Chen <[email protected]>; Yogesh > Gaur <[email protected]>; Mark Brown <[email protected]> > Cc: [email protected]; [email protected]; > [email protected]; Jiawen Liu <[email protected]> > Subject: [PATCH v2 1/3] spi: nxp-fspi: use devm runtime PM enablement > > nxp_fspi_probe() enables runtime PM and then gets the device active for the > initial register setup. If that get fails, the old open-coded > pm_runtime_get_sync() path needs manual cleanup of both the usage > counter and runtime PM enablement. > > Follow the newer spi-nxp-xspi pattern instead: use > devm_pm_runtime_enable() for managed runtime PM disablement, and use > PM_RUNTIME_ACQUIRE_AUTOSUSPEND() for the initial active window. This > keeps the error path simple and avoids leaving runtime PM state behind > when the initial resume fails. > > Signed-off-by: Jiawen Liu <[email protected]> > --- > drivers/spi/spi-nxp-fspi.c | 12 +++++------- > 1 file changed, 5 insertions(+), 7 deletions(-) > > diff --git a/drivers/spi/spi-nxp-fspi.c b/drivers/spi/spi-nxp-fspi.c index > 1e36ae084dd8..6be78712b534 100644 > --- a/drivers/spi/spi-nxp-fspi.c > +++ b/drivers/spi/spi-nxp-fspi.c > @@ -1275,7 +1275,6 @@ static void nxp_fspi_cleanup(void *data) > /* disable the hardware */ > fspi_writel(f, FSPI_MCR0_MDIS, f->iobase + FSPI_MCR0); > > - pm_runtime_disable(f->dev); > pm_runtime_put_noidle(f->dev); > nxp_fspi_clk_disable_unprep(f); > > @@ -1345,12 +1344,15 @@ static int nxp_fspi_probe(struct platform_device > *pdev) > if (irq < 0) > return dev_err_probe(dev, irq, "Failed to get irq source"); > > - pm_runtime_enable(dev); > pm_runtime_set_autosuspend_delay(dev, FSPI_RPM_TIMEOUT); > pm_runtime_use_autosuspend(dev); > + ret = devm_pm_runtime_enable(dev); > + if (ret) > + return ret; > > /* enable clock */ > - ret = pm_runtime_get_sync(f->dev); > + PM_RUNTIME_ACQUIRE_AUTOSUSPEND(dev, pm); > + ret = PM_RUNTIME_ACQUIRE_ERR(&pm); > if (ret < 0) > return dev_err_probe(dev, ret, "Failed to enable clock"); > > @@ -1361,10 +1363,6 @@ static int nxp_fspi_probe(struct platform_device > *pdev) > > nxp_fspi_default_setup(f); > > - ret = pm_runtime_put_sync(dev); > - if (ret < 0) > - return dev_err_probe(dev, ret, "Failed to disable clock"); You forget to delete the following code: err_disable_pm: pm_runtime_dont_use_autosuspend(dev); pm_runtime_disable(dev); return ret; Regards Haibo Chen > - > init_completion(&f->c); > ret = devm_request_irq(dev, irq, > nxp_fspi_irq_handler, 0, pdev->name, f); > -- > 2.34.1