Re: [PATCH 3/9] media: rzg2l-cru: Use bulk reset API in rzg2l_cru_start_streaming_vq()

Jacopo Mondi <[email protected]> Mon, 27 Jul 2026 11:55:17 +0200
Newsgroups org.kernel.vger.linux-renesas-soc,org.kernel.vger.linux-kernel,org.kernel.vger.linux-media
Message-ID <amcqq4dJxdpdbnzc@zed>
Hi Tommaso

On Tue, Jun 16, 2026 at 07:05:33PM +0200, Tommaso Merciai wrote:
> Replace individual reset_control_deassert() calls for aresetn and presetn
> with reset_control_bulk_deassert(), and consolidate the error path labels
> into a single err_assert_resets using reset_control_bulk_assert().
>
> No functional changes intended.
>
> Signed-off-by: Tommaso Merciai <[email protected]>
> ---
>  .../platform/renesas/rzg2l-cru/rzg2l-video.c  | 23 ++++++++-----------
>  1 file changed, 9 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
> index 5185a547461d..bf61a74f8f74 100644
> --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
> +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
> @@ -672,6 +672,10 @@ irqreturn_t rzg3e_cru_irq(int irq, void *data)
>  static int rzg2l_cru_start_streaming_vq(struct vb2_queue *vq, unsigned int count)
>  {
>  	struct rzg2l_cru_dev *cru = vb2_get_drv_priv(vq);
> +	struct reset_control_bulk_data resets[] = {
> +		{ .rstc = cru->aresetn },
> +		{ .rstc = cru->presetn },
> +	};
>  	int ret;
>
>  	ret = pm_runtime_resume_and_get(cru->dev);
> @@ -683,19 +687,12 @@ static int rzg2l_cru_start_streaming_vq(struct vb2_queue *vq, unsigned int count
>  		goto err_pm_put;
>
>  	/* Release reset state */
> -	ret = reset_control_deassert(cru->aresetn);
> +	ret = reset_control_bulk_deassert(ARRAY_SIZE(resets), resets);
>  	if (ret) {
> -		dev_err(cru->dev, "failed to deassert aresetn\n");
> +		dev_err(cru->dev, "failed to deassert resets\n");
>  		goto err_vclk_disable;
>  	}
>
> -	ret = reset_control_deassert(cru->presetn);
> -	if (ret) {
> -		reset_control_assert(cru->aresetn);
> -		dev_err(cru->dev, "failed to deassert presetn\n");
> -		goto assert_aresetn;
> -	}
> -

Is there any ordering requirement in the reset signal de-assertion ?

>  	/* Allocate scratch buffer */
>  	cru->scratch = dma_alloc_coherent(cru->dev, cru->format.sizeimage,
>  					  &cru->scratch_phys, GFP_KERNEL);
> @@ -703,7 +700,7 @@ static int rzg2l_cru_start_streaming_vq(struct vb2_queue *vq, unsigned int count
>  		rzg2l_cru_return_buffers(cru, VB2_BUF_STATE_QUEUED);
>  		dev_err(cru->dev, "Failed to allocate scratch buffer\n");
>  		ret = -ENOMEM;
> -		goto assert_presetn;
> +		goto err_assert_resets;
>  	}
>
>  	cru->active_slot = 0;
> @@ -722,11 +719,9 @@ static int rzg2l_cru_start_streaming_vq(struct vb2_queue *vq, unsigned int count
>  	if (ret)
>  		dma_free_coherent(cru->dev, cru->format.sizeimage, cru->scratch,
>  				  cru->scratch_phys);
> -assert_presetn:
> -	reset_control_assert(cru->presetn);
>
> -assert_aresetn:
> -	reset_control_assert(cru->aresetn);
> +err_assert_resets:
> +	reset_control_bulk_assert(ARRAY_SIZE(resets), resets);
>

Do you happen to know why rzg2l_cru_stop_streaming_vq() only assert
'presetn' and not 'aresetn' ?

>  err_vclk_disable:
>  	clk_disable_unprepare(cru->vclk);
> --
> 2.54.0
>