Thread (19 messages) 19 messages, 4 authors, 2021-11-25

Re: [PATCH 1/7] media: hantro: add support for reset lines

From: Dan Carpenter <hidden>
Date: 2021-11-23 15:00:49
Also in: linux-arm-kernel, linux-media, linux-staging, linux-sunxi, lkml

On Tue, Nov 23, 2021 at 12:09:03PM +0100, Andrzej Pietrasiewicz wrote:
quoted
diff --git a/drivers/staging/media/hantro/hantro_drv.c b/drivers/staging/media/hantro/hantro_drv.c
index ab2467998d29..8c3de31f51b3 100644
--- a/drivers/staging/media/hantro/hantro_drv.c
+++ b/drivers/staging/media/hantro/hantro_drv.c
@@ -905,6 +905,10 @@ static int hantro_probe(struct platform_device *pdev)
  			return PTR_ERR(vpu->clocks[0].clk);
  	}
+	vpu->resets = devm_reset_control_array_get(&pdev->dev, false, true);
+	if (IS_ERR(vpu->resets))
+		return PTR_ERR(vpu->resets);
+
  	num_bases = vpu->variant->num_regs ?: 1;
  	vpu->reg_bases = devm_kcalloc(&pdev->dev, num_bases,
  				      sizeof(*vpu->reg_bases), GFP_KERNEL);
@@ -978,10 +982,16 @@ static int hantro_probe(struct platform_device *pdev)
  	pm_runtime_use_autosuspend(vpu->dev);
  	pm_runtime_enable(vpu->dev);
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
It looks like this is the pm stuff that we have to unwind on error
quoted
+	ret = reset_control_deassert(vpu->resets);
+	if (ret) {
+		dev_err(&pdev->dev, "Failed to deassert resets\n");
+		return ret;
                ^^^^^^^^^^
So this return should be a goto undo_pm_stuff

quoted
+	}
+
  	ret = clk_bulk_prepare(vpu->variant->num_clocks, vpu->clocks);
  	if (ret) {
  		dev_err(&pdev->dev, "Failed to prepare clocks\n");
-		return ret;
And this return should also have been a goto so it's a bug in the
original code.
quoted
+		goto err_rst_assert;
Before your patch is applied if clk_bulk_prepare() fails, we
simply return on the spot. After the patch is applied not only
do you...
quoted
  	}
  	ret = v4l2_device_register(&pdev->dev, &vpu->v4l2_dev);
@@ -1037,6 +1047,8 @@ static int hantro_probe(struct platform_device *pdev)
  	v4l2_device_unregister(&vpu->v4l2_dev);
  err_clk_unprepare:
  	clk_bulk_unprepare(vpu->variant->num_clocks, vpu->clocks);
+err_rst_assert:
+	reset_control_assert(vpu->resets);
...revert the effect of reset_control_deassert(), you also...
quoted
  	pm_runtime_dont_use_autosuspend(vpu->dev);
  	pm_runtime_disable(vpu->dev);
... do pm_*() stuff. Is there any reason why this is needed?
So, yes, it's needed, but you're correct to spot that it's not
consistent.

regards,
dan carpenter
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help