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