]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mailbox: imx: Use devm_pm_runtime_enable()
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Wed, 17 Jun 2026 06:55:28 +0000 (08:55 +0200)
committerJassi Brar <jassisinghbrar@gmail.com>
Sun, 21 Jun 2026 02:18:38 +0000 (21:18 -0500)
sashiko complained about early usage of the device while probe isn't
completed. This can be mitigated by delaying the pm_runtime_enable()
into the removal path instead doing it early. This ensures that in an
error case the device is removed (and imx_mu_shutdown()) before
pm_runtime_disable() so we don't have to do this manually.

For the order to work, lets move devm_mbox_controller_register() until
after the pm-runtime part. So the reverse order will be mbox-controller
removal followed by disabling pm runtime.

Use devm_pm_runtime_enable(), remove manual pm_runtime_disable()
invocations and move the pm_runtime handling in probe before
devm_mbox_controller_register().

Reviewed-by: Peng Fan <peng.fan@nxp.com>
Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
drivers/mailbox/imx-mailbox.c

index e261b382d5c90a75fc2e8ca7171403c511c0df28..516a05b64daa1213948a2bd63991641c5ac02091 100644 (file)
@@ -966,38 +966,36 @@ static int imx_mu_probe(struct platform_device *pdev)
 
        platform_set_drvdata(pdev, priv);
 
-       ret = devm_mbox_controller_register(dev, &priv->mbox);
-       if (ret)
+       ret = devm_pm_runtime_enable(dev);
+       if (ret < 0)
                goto disable_clk;
 
-       of_platform_populate(dev->of_node, NULL, NULL, dev);
-
-       pm_runtime_enable(dev);
-
        ret = pm_runtime_resume_and_get(dev);
        if (ret < 0)
-               goto disable_runtime_pm;
+               goto disable_clk;
 
        ret = pm_runtime_put_sync(dev);
        if (ret < 0)
-               goto disable_runtime_pm;
+               goto disable_clk;
 
        clk_disable_unprepare(priv->clk);
 
+       ret = devm_mbox_controller_register(dev, &priv->mbox);
+       if (ret)
+               goto err_out;
+
+       of_platform_populate(dev->of_node, NULL, NULL, dev);
+
        return 0;
 
-disable_runtime_pm:
-       pm_runtime_disable(dev);
 disable_clk:
        clk_disable_unprepare(priv->clk);
+err_out:
        return ret;
 }
 
 static void imx_mu_remove(struct platform_device *pdev)
 {
-       struct imx_mu_priv *priv = platform_get_drvdata(pdev);
-
-       pm_runtime_disable(priv->dev);
 }
 
 static const struct imx_mu_dcfg imx_mu_cfg_imx6sx = {