From: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
To: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Cc: tomm.merciai@gmail.com, linux-renesas-soc@vger.kernel.org,
biju.das.jz@bp.renesas.com,
Sakari Ailus <sakari.ailus@linux.intel.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>,
Philipp Zabel <p.zabel@pengutronix.de>,
linux-media@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 3/9] media: rzg2l-cru: Use bulk reset API in rzg2l_cru_start_streaming_vq()
Date: Mon, 27 Jul 2026 21:32:15 +0200 [thread overview]
Message-ID: <ameyP13Gv-Mr3grj@tom-desktop> (raw)
In-Reply-To: <amcqq4dJxdpdbnzc@zed>
Hi Jacopo,
Thanks for your review.
On Mon, Jul 27, 2026 at 11:55:17AM +0200, Jacopo Mondi wrote:
> 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 <tommaso.merciai.xr@bp.renesas.com>
> > ---
> > .../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 ?
Even if there is no constraint on de-assertion ordering, I think you
are right: using reset_control_bulk_deassert() the de-assertion order
is changed.
reset_control_bulk_deassert() deasserts the last element of the array
first.
Good catch!
I will fix that in v2.
>
> > /* 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' ?
We have:
rzg2l_cru_stop_streaming_vq()
rzg2l_cru_set_stream(cru, 0)
sd = remote pad subdev (= "ip" subdev)
v4l2_subdev_call(sd, video, s_stream, 0)
rzg2l_cru_ip_s_stream(sd, enable=0) rzg2l-ip.c:191
v4l2_subdev_call(cru->ip.remote, video, s_stream, 0)
v4l2_subdev_call(cru->ip.remote, video, post_streamoff)
rzg2l_cru_stop_image_processing(cru)
reset_control_assert(cru->aresetn) <-- ARESETN
reset_control_assert(cru->presetn) <-- PRESETN
Then both resets are asserted during rzg2l_cru_stop_streaming_vq().
Please correct me if I'm wrong.
Kind Regards,
Tommaso
>
> > err_vclk_disable:
> > clk_disable_unprepare(cru->vclk);
> > --
> > 2.54.0
> >
next prev parent reply other threads:[~2026-07-27 19:32 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-16 17:05 [PATCH 0/9] media: rzg2l-cru: Add suspend/resume support Tommaso Merciai
2026-06-16 17:05 ` [PATCH 1/9] media: rzg2l-cru: Add device_link from CRU to CSI-2 Tommaso Merciai
2026-07-27 9:45 ` Jacopo Mondi
2026-07-27 15:02 ` Tommaso Merciai
2026-07-27 9:50 ` Jacopo Mondi
2026-07-27 15:17 ` Tommaso Merciai
2026-06-16 17:05 ` [PATCH 2/9] media: rzg2l-cru: csi2: Add device_link from CSI-2 to sensor Tommaso Merciai
2026-07-27 9:48 ` Jacopo Mondi
2026-07-27 15:41 ` Tommaso Merciai
2026-06-16 17:05 ` [PATCH 3/9] media: rzg2l-cru: Use bulk reset API in rzg2l_cru_start_streaming_vq() Tommaso Merciai
2026-07-27 9:55 ` Jacopo Mondi
2026-07-27 19:32 ` Tommaso Merciai [this message]
2026-06-16 17:05 ` [PATCH 4/9] media: rzg2l-cru: Drop stop streaming function Tommaso Merciai
2026-07-27 9:55 ` Jacopo Mondi
2026-06-16 17:05 ` [PATCH 5/9] media: rzg2l-cru: Move active_slot reset into rzg2l_cru_set_stream() Tommaso Merciai
2026-07-27 10:11 ` Jacopo Mondi
2026-07-27 19:34 ` Tommaso Merciai
2026-06-16 17:05 ` [PATCH 6/9] media: rzg2l-cru: Add suspend/resume support Tommaso Merciai
2026-07-27 10:20 ` Jacopo Mondi
2026-06-16 17:05 ` [PATCH 7/9] media: rzg2l-cru: csi2: Add system sleep PM support Tommaso Merciai
2026-06-16 17:05 ` [PATCH 8/9] media: i2c: ov5645: Switch to RUNTIME_PM_OPS() and pm_ptr() Tommaso Merciai
2026-06-16 17:05 ` [PATCH 9/9] media: i2c: ov5645: Add suspend/resume support Tommaso Merciai
2026-07-15 8:47 ` [PATCH 0/9] media: rzg2l-cru: " Tommaso Merciai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ameyP13Gv-Mr3grj@tom-desktop \
--to=tommaso.merciai.xr@bp.renesas.com \
--cc=biju.das.jz@bp.renesas.com \
--cc=jacopo.mondi@ideasonboard.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=p.zabel@pengutronix.de \
--cc=prabhakar.mahadev-lad.rj@bp.renesas.com \
--cc=sakari.ailus@linux.intel.com \
--cc=tomm.merciai@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.