From: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
To: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Cc: "Lad, Prabhakar" <prabhakar.csengg@gmail.com>,
"Mauro Carvalho Chehab" <mchehab@kernel.org>,
"Laurent Pinchart" <laurent.pinchart+renesas@ideasonboard.com>,
"Biju Das" <biju.das.jz@bp.renesas.com>,
"Hans Verkuil" <hverkuil+cisco@kernel.org>,
"Sakari Ailus" <sakari.ailus@linux.intel.com>,
"Tommaso Merciai" <tommaso.merciai.xr@bp.renesas.com>,
"Daniel Scally" <dan.scally@ideasonboard.com>,
"Barnabás Pőcze" <pobrn@protonmail.com>,
"Lad Prabhakar" <prabhakar.mahadev-lad.rj@bp.renesas.com>,
linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
"Jacopo Mondi" <jacopo.mondi+renesas@ideasonboard.com>
Subject: Re: [PATCH 10/14] media: rzg2l-cru: Manually track active slot number
Date: Tue, 31 Mar 2026 12:05:59 +0200 [thread overview]
Message-ID: <acucYIklJbl2AR8D@zed> (raw)
In-Reply-To: <acubeMB6k88yLqlD@zed>
On Tue, Mar 31, 2026 at 12:03:22PM +0200, Jacopo Mondi wrote:
> Hi Prabhakar
>
> On Tue, Mar 31, 2026 at 09:30:02AM +0100, Lad, Prabhakar wrote:
> > Hi Jacopo,
> >
> > Thank you for the patch.
> >
> > On Fri, Mar 27, 2026 at 5:27 PM Jacopo Mondi
> > <jacopo.mondi@ideasonboard.com> wrote:
> > >
> > > From: Jacopo Mondi <jacopo.mondi+renesas@ideasonboard.com>
> > >
> > > The CRU cycles over the hardware slots where the destination address for
> > > the next frame has to be programmed.
> > >
> > > The RZ/G2L version of the IP has a register that tells which is the
> > > last used slot by the hardware but, unfortunately, such register is not
> > > available on RZ/G3E and RZ/V2H(P).
> > >
> > > The driver currently compares the value of the AMnMADRSL/H register
> > > which report "the memory address which the current video data was
> > > written to" and compares it with the address programmed in the slots.
> > >
> > > This heuristic requires a bit of book keeping and proper locking. As the
> > > driver handles the FrameEnd interrupt, it's way easier to keep track
> > > of the slot that has been used by ourselves with a driver variable.
> > >
> > > Signed-off-by: Jacopo Mondi <jacopo.mondi+renesas@ideasonboard.com>
> > > ---
> > > .../media/platform/renesas/rzg2l-cru/rzg2l-cru.h | 7 +++--
> > > .../media/platform/renesas/rzg2l-cru/rzg2l-video.c | 35 ++++------------------
> > > 2 files changed, 10 insertions(+), 32 deletions(-)
> > >
> > > diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h
> > > index b46696a0012b..bc66b0c8c15e 100644
> > > --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h
> > > +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-cru.h
> > > @@ -108,6 +108,7 @@ struct rzg2l_cru_info {
> > > * @vdev: V4L2 video device associated with CRU
> > > * @v4l2_dev: V4L2 device
> > > * @num_buf: Holds the current number of buffers enabled
> > > + *
> > stray change.
> >
>
> As replied to Tommaso, all the other comments have a blank line that
> match the one in the structure's members declarations.
>
BUt you're both right this change might not be strictly related to
this patch. As both of you had the same comment, I'll drop it.
Sorry for the noise.
> > > * @svc_channel: SVC0/1/2/3 to use for RZ/G3E
> > > * @notifier: V4L2 asynchronous subdevs notifier
> > > *
> > > @@ -117,9 +118,10 @@ struct rzg2l_cru_info {
> > > * @mdev_lock: protects the count, notifier and csi members
> > > * @pad: media pad for the video device entity
> > > *
> > > - * @hw_lock: protects the slot counter, hardware programming of
> > > - * slot addresses and the @buf_addr[] list
> > > + * @hw_lock: protects the @active_slot counter, hardware programming
> > > + * of slot addresses and the @buf_addr[] list
> > > * @buf_addr: Memory addresses where current video data is written
> > > + * @active_slot: The slot in use
> > > *
> > > * @lock: protects @queue
> > > * @queue: vb2 buffers queue
> > > @@ -160,6 +162,7 @@ struct rzg2l_cru_dev {
> > >
> > > spinlock_t hw_lock;
> > > dma_addr_t buf_addr[RZG2L_CRU_HW_BUFFER_DEFAULT];
> > > + unsigned int active_slot;
> > >
> > > struct mutex lock;
> > > struct vb2_queue queue;
> > > diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
> > > index 9406a089ec9f..17e0153052e1 100644
> > > --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
> > > +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
> > > @@ -637,31 +637,6 @@ irqreturn_t rzg2l_cru_irq(int irq, void *data)
> > > return IRQ_RETVAL(handled);
> > > }
> > >
> > > -static int rzg3e_cru_get_current_slot(struct rzg2l_cru_dev *cru)
> > > -{
> > > - u64 amnmadrs;
> > > - int slot;
> > > -
> > > - /*
> > > - * When AMnMADRSL is read, AMnMADRSH of the higher-order
> > > - * address also latches the address.
> > > - *
> > > - * AMnMADRSH must be read after AMnMADRSL has been read.
> > > - */
> > > - amnmadrs = rzg2l_cru_read(cru, AMnMADRSL);
> > > - amnmadrs |= (u64)rzg2l_cru_read(cru, AMnMADRSH) << 32;
> > > -
> > > - /* Ensure amnmadrs is within this buffer range */
> > > - for (slot = 0; slot < cru->num_buf; slot++) {
> > > - if (amnmadrs >= cru->buf_addr[slot] &&
> > > - amnmadrs < cru->buf_addr[slot] + cru->format.sizeimage)
> > > - return slot;
> > > - }
> > > -
> > > - dev_err(cru->dev, "Invalid MB address 0x%llx (out of range)\n", amnmadrs);
> > > - return -EINVAL;
> > > -}
> > > -
> > > irqreturn_t rzg3e_cru_irq(int irq, void *data)
> > > {
> > > struct rzg2l_cru_dev *cru = data;
> > > @@ -693,9 +668,8 @@ irqreturn_t rzg3e_cru_irq(int irq, void *data)
> > > return IRQ_HANDLED;
> > > }
> > >
> > > - slot = rzg3e_cru_get_current_slot(cru);
> > > - if (slot < 0)
> > > - return IRQ_HANDLED;
> > > + slot = cru->active_slot;
> > > + cru->active_slot = (cru->active_slot + 1) % cru->num_buf;
> > >
> > > dev_dbg(cru->dev, "Current written slot: %d\n", slot);
> > > cru->buf_addr[slot] = 0;
> > > @@ -762,6 +736,9 @@ static int rzg2l_cru_start_streaming_vq(struct vb2_queue *vq, unsigned int count
> > > goto assert_aresetn;
> > > }
> > >
> > > + cru->active_slot = 0;
> > > + cru->sequence = 0;
> > > +
> > > /* Allocate scratch buffer */
> > > cru->scratch = dma_alloc_coherent(cru->dev, cru->format.sizeimage,
> > > &cru->scratch_phys, GFP_KERNEL);
> > > @@ -772,8 +749,6 @@ static int rzg2l_cru_start_streaming_vq(struct vb2_queue *vq, unsigned int count
> > > goto assert_presetn;
> > > }
> > >
> > > - cru->sequence = 0;
> > > -
> > Maybe we can move cru->active_slot assignment here and keep
> > cru->sequence assignment as is. With that fixed,
> >
> > Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
>
> I can do that
>
> Thanks
> j
>
> >
> > Cheers,
> > Prabhakar
> >
> > > ret = rzg2l_cru_set_stream(cru, 1);
> > > if (ret) {
> > > return_unused_buffers(cru, VB2_BUF_STATE_QUEUED);
> > >
> > > --
> > > 2.53.0
> > >
> > >
next prev parent reply other threads:[~2026-03-31 10:06 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-27 17:10 [PATCH 00/14] media: rzg2l-cru: Rework slot programming for V2H/G3E Jacopo Mondi
2026-03-27 17:10 ` [PATCH 01/14] media: rzg2l-cru: Skip ICnMC configuration when ICnSVC is used Jacopo Mondi
2026-03-30 15:51 ` Lad, Prabhakar
2026-03-27 17:10 ` [PATCH 02/14] media: rzg2l-cru: Use only frame end interrupts Jacopo Mondi
2026-03-30 15:55 ` Lad, Prabhakar
2026-03-27 17:10 ` [PATCH 03/14] media: rzg2l-cru: Modernize spin_lock usage with cleanup.h Jacopo Mondi
2026-03-30 7:30 ` Dan Scally
2026-03-30 11:12 ` Tommaso Merciai
2026-03-30 11:41 ` Biju Das
2026-03-31 7:18 ` Jacopo Mondi
2026-03-30 18:43 ` Lad, Prabhakar
2026-03-27 17:10 ` [PATCH 04/14] media: rzg2l-cru: Use proper guard() in irq handler Jacopo Mondi
2026-03-30 7:32 ` Dan Scally
2026-03-30 11:15 ` Tommaso Merciai
2026-03-30 19:00 ` Lad, Prabhakar
2026-03-27 17:10 ` [PATCH 05/14] media: rzg2l-cru: Remove locking from start/stop routines Jacopo Mondi
2026-03-30 13:29 ` Tommaso Merciai
2026-03-30 13:47 ` Dan Scally
2026-03-30 19:04 ` Lad, Prabhakar
2026-03-27 17:10 ` [PATCH 06/14] media: rzg2l-cru: Do not use irqsave when not needed Jacopo Mondi
2026-03-30 7:50 ` Dan Scally
2026-03-30 13:52 ` Tommaso Merciai
2026-03-31 7:46 ` Lad, Prabhakar
2026-03-27 17:10 ` [PATCH 07/14] media: rzg2l-cru: Remove wrong locking comment Jacopo Mondi
2026-03-30 7:38 ` Dan Scally
2026-03-30 13:54 ` Tommaso Merciai
2026-03-31 7:47 ` Lad, Prabhakar
2026-03-27 17:10 ` [PATCH 08/14] media: rz2gl-cru: Introduce a spinlock for hw operations Jacopo Mondi
2026-03-30 10:46 ` Dan Scally
2026-03-30 16:17 ` Tommaso Merciai
2026-03-31 8:11 ` Lad, Prabhakar
2026-03-27 17:10 ` [PATCH 09/14] media: rzg2l-cru: Split hw locking from buffers Jacopo Mondi
2026-03-30 11:19 ` Dan Scally
2026-03-30 16:09 ` Tommaso Merciai
2026-03-27 17:10 ` [PATCH 10/14] media: rzg2l-cru: Manually track active slot number Jacopo Mondi
2026-03-30 13:39 ` Dan Scally
2026-03-30 16:25 ` Tommaso Merciai
2026-03-31 7:43 ` Jacopo Mondi
2026-03-31 8:30 ` Lad, Prabhakar
2026-03-31 10:03 ` Jacopo Mondi
2026-03-31 10:05 ` Jacopo Mondi [this message]
2026-03-27 17:10 ` [PATCH 11/14] media: rz2gl-cru: Return pending buffers in order Jacopo Mondi
2026-03-30 13:52 ` Dan Scally
2026-03-30 17:14 ` Tommaso Merciai
2026-03-27 17:10 ` [PATCH 12/14] media: rzg2l-cru: Rework rzg2l_cru_fill_hw_slot() Jacopo Mondi
2026-03-27 17:10 ` [PATCH 13/14] media: rzg2l-cru: Remove the 'state' variable Jacopo Mondi
2026-03-30 11:55 ` Dan Scally
2026-03-31 7:45 ` Jacopo Mondi
2026-03-27 17:10 ` [PATCH 14/14] media: rzg2l-cru: Simplify irq return value handling Jacopo Mondi
2026-03-30 11:55 ` Dan Scally
2026-03-30 17:24 ` Tommaso Merciai
2026-03-27 17:25 ` [PATCH 00/14] media: rzg2l-cru: Rework slot programming for V2H/G3E Lad, Prabhakar
2026-03-28 11:55 ` Jacopo Mondi
2026-03-28 12:56 ` Lad, Prabhakar
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=acucYIklJbl2AR8D@zed \
--to=jacopo.mondi@ideasonboard.com \
--cc=biju.das.jz@bp.renesas.com \
--cc=dan.scally@ideasonboard.com \
--cc=hverkuil+cisco@kernel.org \
--cc=jacopo.mondi+renesas@ideasonboard.com \
--cc=laurent.pinchart+renesas@ideasonboard.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=pobrn@protonmail.com \
--cc=prabhakar.csengg@gmail.com \
--cc=prabhakar.mahadev-lad.rj@bp.renesas.com \
--cc=sakari.ailus@linux.intel.com \
--cc=tommaso.merciai.xr@bp.renesas.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.