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

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

From: Andrzej Pietrasiewicz <hidden>
Date: 2021-11-23 16:37:34
Also in: linux-arm-kernel, linux-devicetree, linux-media, linux-sunxi, lkml

Hi Dan, hi Jernej,

W dniu 23.11.2021 o 15:59, Dan Carpenter pisze:
On Tue, Nov 23, 2021 at 12:09:03PM +0100, Andrzej Pietrasiewicz wrote:
quoted
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
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
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.
So we probably want a separate patch addressing that first, and then
the series proper on top of that.

Regards,

Andrzej
quoted
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