Handling of devm_clk_get() suggests that the driver should support lack of priv->clk. But imx_mu_probe() fails on clk_prepare_enable(NULL) in that case.
The patch removes the try to enable absent clk and adds error handling for mbox_controller_register(). Found by Linux Driver Verification project (linuxtesting.org). Signed-off-by: Alexey Khoroshilov <khoroshi...@ispras.ru> --- drivers/mailbox/imx-mailbox.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/drivers/mailbox/imx-mailbox.c b/drivers/mailbox/imx-mailbox.c index 363d35d5e49d..ddde398f576e 100644 --- a/drivers/mailbox/imx-mailbox.c +++ b/drivers/mailbox/imx-mailbox.c @@ -292,10 +292,12 @@ static int imx_mu_probe(struct platform_device *pdev) priv->clk = NULL; } - ret = clk_prepare_enable(priv->clk); - if (ret) { - dev_err(dev, "Failed to enable clock\n"); - return ret; + if (priv->clk) { + ret = clk_prepare_enable(priv->clk); + if (ret) { + dev_err(dev, "Failed to enable clock\n"); + return ret; + } } for (i = 0; i < IMX_MU_CHANS; i++) { @@ -324,7 +326,13 @@ static int imx_mu_probe(struct platform_device *pdev) imx_mu_init_generic(priv); - return mbox_controller_register(&priv->mbox); + ret = mbox_controller_register(&priv->mbox); + if (ret) { + clk_disable_unprepare(priv->clk); + return ret; + } + + return 0; } static int imx_mu_remove(struct platform_device *pdev) -- 2.7.4