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 <[email protected]> --- 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

