[PATCH v2 2/9] mailbox: imx: Use devm_pm_runtime_enable()
Sebastian Andrzej Siewior
bigeasy at linutronix.de
Wed Jun 3 06:05:05 PDT 2026
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().
Signed-off-by: Sebastian Andrzej Siewior <bigeasy at linutronix.de>
---
drivers/mailbox/imx-mailbox.c | 31 ++++++++++++++-----------------
1 file changed, 14 insertions(+), 17 deletions(-)
diff --git a/drivers/mailbox/imx-mailbox.c b/drivers/mailbox/imx-mailbox.c
index 34edc2f31dcb5..24cf704b4f9bd 100644
--- a/drivers/mailbox/imx-mailbox.c
+++ b/drivers/mailbox/imx-mailbox.c
@@ -965,28 +965,28 @@ static int imx_mu_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, priv);
+ ret = devm_pm_runtime_enable(dev);
+ if (ret < 0)
+ goto disable_clk;
+
+ ret = pm_runtime_resume_and_get(dev);
+ if (ret < 0)
+ goto disable_clk;
+
+ ret = pm_runtime_put_sync(dev);
+ if (ret < 0)
+ goto disable_clk;
+
+ clk_disable_unprepare(priv->clk);
+
ret = devm_mbox_controller_register(dev, &priv->mbox);
if (ret)
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;
-
- ret = pm_runtime_put_sync(dev);
- if (ret < 0)
- goto disable_runtime_pm;
-
- clk_disable_unprepare(priv->clk);
-
return 0;
-disable_runtime_pm:
- pm_runtime_disable(dev);
disable_clk:
clk_disable_unprepare(priv->clk);
return ret;
@@ -994,9 +994,6 @@ static int imx_mu_probe(struct platform_device *pdev)
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 = {
--
2.53.0
More information about the linux-arm-kernel
mailing list