* Re: [PATCH] media: rzg2l-cru: rework rzg2l_cru_fill_hw_slot()
[not found] <20250918-rzg2l-cru-v1-1-fe110fdb91e5@ideasonboard.com>
@ 2025-09-29 16:08 ` Tommaso Merciai
2025-09-29 20:19 ` Dan Scally
0 siblings, 1 reply; 3+ messages in thread
From: Tommaso Merciai @ 2025-09-29 16:08 UTC (permalink / raw)
To: Daniel Scally
Cc: linux-media, laurent.pinchart+renesas, prabhakar.mahadev-lad.rj,
biju.das.jz, linux-renesas-soc
Hi Daniel,
Thank you for your patch!
On Thu, Sep 18, 2025 at 01:08:55PM +0100, Daniel Scally wrote:
> The current implementation of rzg2l_cru_fill_hw_slot() results in the
> artificial loss of frames. At present whenever a frame-complete IRQ
> is received the driver fills the hardware slot that was just written
> to with the address of the next buffer in the driver's queue. If the
> queue is empty, that hardware slot's address is set to the address of
> the scratch buffer to enable the capture loop to keep running. There
> is a minimum of a two-frame delay before that slot will be written to
> however, and in the intervening period userspace may queue more
> buffers which could be used.
>
> To resolve the issue rework rzg2l_cru_fill_hw_slot() so that it
> iteratively fills all slots from the queue which currently do not
> have a buffer assigned, until the queue is empty. The scratch
> buffer is only resorted to in the event that the queue is empty and
> the next slot that will be written to does not already have a buffer
> assigned.
>
> Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
> ---
> .../media/platform/renesas/rzg2l-cru/rzg2l-video.c | 63 +++++++++++-----------
> 1 file changed, 32 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
> index 941badc90ff55c5225644f88de1d70239eb3a247..9ffafb0239a7388104219b2b72eec9051db82078 100644
> --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
> +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
> @@ -192,45 +192,47 @@ static void rzg2l_cru_set_slot_addr(struct rzg2l_cru_dev *cru,
> }
>
> /*
> - * Moves a buffer from the queue to the HW slot. If no buffer is
> - * available use the scratch buffer. The scratch buffer is never
> - * returned to userspace, its only function is to enable the capture
> - * loop to keep running.
> + * Move as many buffers as possible from the queue to HW slots. If no buffer is
> + * available and the next slot currently lacks one then use the scratch buffer.
> + * The scratch buffer is never returned to userspace, its only function is to
> + * enable the capture loop to keep running.
> */
> -static void rzg2l_cru_fill_hw_slot(struct rzg2l_cru_dev *cru, int slot)
> +static void rzg2l_cru_fill_hw_slots(struct rzg2l_cru_dev *cru, int slot)
> {
> - struct vb2_v4l2_buffer *vbuf;
> + unsigned int from_slot = slot;
> struct rzg2l_cru_buffer *buf;
> + struct vb2_v4l2_buffer *vbuf;
> dma_addr_t phys_addr;
>
> - /* A already populated slot shall never be overwritten. */
> - if (WARN_ON(cru->queue_buf[slot]))
> - return;
> -
> - dev_dbg(cru->dev, "Filling HW slot: %d\n", slot);
> + do {
> + if (cru->queue_buf[slot]) {
> + slot = (slot + 1) % cru->num_buf;
> + continue;
> + }
>
> - if (list_empty(&cru->buf_list)) {
> - cru->queue_buf[slot] = NULL;
> - phys_addr = cru->scratch_phys;
> - } else {
> - /* Keep track of buffer we give to HW */
> - buf = list_entry(cru->buf_list.next,
> - struct rzg2l_cru_buffer, list);
> - vbuf = &buf->vb;
> - list_del_init(to_buf_list(vbuf));
> - cru->queue_buf[slot] = vbuf;
> -
> - /* Setup DMA */
> - phys_addr = vb2_dma_contig_plane_dma_addr(&vbuf->vb2_buf, 0);
> - }
> + if (list_empty(&cru->buf_list)) {
> + if (slot == from_slot)
> + phys_addr = cru->scratch_phys;
> + else
> + return;
> + } else {
> + buf = list_first_entry(&cru->buf_list,
> + struct rzg2l_cru_buffer, list);
> + vbuf = &buf->vb;
> + list_del_init(&buf->list);
> + cru->queue_buf[slot] = vbuf;
> + phys_addr = vb2_dma_contig_plane_dma_addr(&vbuf->vb2_buf, 0);
> + }
>
> - rzg2l_cru_set_slot_addr(cru, slot, phys_addr);
> + dev_dbg(cru->dev, "Filling HW slot: %d\n", slot);
> + rzg2l_cru_set_slot_addr(cru, slot, phys_addr);
> + slot = (slot + 1) % cru->num_buf;
> + } while (slot != from_slot);
> }
>
> static void rzg2l_cru_initialize_axi(struct rzg2l_cru_dev *cru)
> {
> const struct rzg2l_cru_info *info = cru->info;
> - unsigned int slot;
> u32 amnaxiattr;
>
> /*
> @@ -239,8 +241,7 @@ static void rzg2l_cru_initialize_axi(struct rzg2l_cru_dev *cru)
> */
> rzg2l_cru_write(cru, AMnMBVALID, AMnMBVALID_MBVALID(cru->num_buf - 1));
>
> - for (slot = 0; slot < cru->num_buf; slot++)
> - rzg2l_cru_fill_hw_slot(cru, slot);
> + rzg2l_cru_fill_hw_slots(cru, 0);
>
> if (info->has_stride) {
> u32 stride = cru->format.bytesperline;
> @@ -652,7 +653,7 @@ irqreturn_t rzg2l_cru_irq(int irq, void *data)
> cru->sequence++;
>
> /* Prepare for next frame */
> - rzg2l_cru_fill_hw_slot(cru, slot);
> + rzg2l_cru_fill_hw_slots(cru, (slot + 1) % cru->num_buf);
>
> done:
> spin_unlock_irqrestore(&cru->qlock, flags);
> @@ -752,7 +753,7 @@ irqreturn_t rzg3e_cru_irq(int irq, void *data)
> cru->sequence++;
>
> /* Prepare for next frame */
> - rzg2l_cru_fill_hw_slot(cru, slot);
> + rzg2l_cru_fill_hw_slots(cru, (slot + 1) % cru->num_buf);
> }
>
> return IRQ_HANDLED;
>
> ---
> base-commit: a75b8d198c55e9eb5feb6f6e155496305caba2dc
> change-id: 20250918-rzg2l-cru-0554a4352a70
>
> Best regards,
> --
> Daniel Scally <dan.scally@ideasonboard.com>
Not reviewed yet, sorry.
But testing on RZ/G3E I'm getting the following:
[ 288.873715] rzg2l-cru 16000000.video: Invalid MB address 0xeacc3e00 (out of range)
[ 288.884665] rzg2l-cru 16000000.video: Invalid MB address 0xeae57e00 (out of range)
[ 288.967963] rzg2l-cru 16000000.video: Invalid MB address 0xe9957e00 (out of range)
Tested using:
media-ctl -d /dev/media0 --set-v4l2 '"ov5645 0-003c":0[fmt:UYVY8_2X8/1280x960@1/60 field:none]'
media-ctl -d /dev/media0 --set-v4l2 '"csi-16000400.csi2":0[fmt:UYVY8_2X8/1280x960]'
media-ctl -d /dev/media0 --set-v4l2 '"cru-ip-16000000.video":0[fmt:UYVY8_2X8/1280x960]'
gst-launch-1.0 v4l2src device=/dev/video0 io-mode=dmabuf ! video/x-raw,format=UYVY,width=1280,height=960 ! videoconvert ! queue ! glimagesink sync=false
Let me gently know if I'm missing somenthing.
Thanks & Regards,
Tommaso
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] media: rzg2l-cru: rework rzg2l_cru_fill_hw_slot()
2025-09-29 16:08 ` [PATCH] media: rzg2l-cru: rework rzg2l_cru_fill_hw_slot() Tommaso Merciai
@ 2025-09-29 20:19 ` Dan Scally
2025-10-02 15:07 ` Tommaso Merciai
0 siblings, 1 reply; 3+ messages in thread
From: Dan Scally @ 2025-09-29 20:19 UTC (permalink / raw)
To: Tommaso Merciai
Cc: linux-media, laurent.pinchart+renesas, prabhakar.mahadev-lad.rj,
biju.das.jz, linux-renesas-soc
Hi Tommaso
On 29/09/2025 17:08, Tommaso Merciai wrote:
> Hi Daniel,
> Thank you for your patch!
>
> On Thu, Sep 18, 2025 at 01:08:55PM +0100, Daniel Scally wrote:
>> The current implementation of rzg2l_cru_fill_hw_slot() results in the
>> artificial loss of frames. At present whenever a frame-complete IRQ
>> is received the driver fills the hardware slot that was just written
>> to with the address of the next buffer in the driver's queue. If the
>> queue is empty, that hardware slot's address is set to the address of
>> the scratch buffer to enable the capture loop to keep running. There
>> is a minimum of a two-frame delay before that slot will be written to
>> however, and in the intervening period userspace may queue more
>> buffers which could be used.
>>
>> To resolve the issue rework rzg2l_cru_fill_hw_slot() so that it
>> iteratively fills all slots from the queue which currently do not
>> have a buffer assigned, until the queue is empty. The scratch
>> buffer is only resorted to in the event that the queue is empty and
>> the next slot that will be written to does not already have a buffer
>> assigned.
>>
>> Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
>> ---
>> .../media/platform/renesas/rzg2l-cru/rzg2l-video.c | 63 +++++++++++-----------
>> 1 file changed, 32 insertions(+), 31 deletions(-)
>>
>> diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
>> index 941badc90ff55c5225644f88de1d70239eb3a247..9ffafb0239a7388104219b2b72eec9051db82078 100644
>> --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
>> +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
>> @@ -192,45 +192,47 @@ static void rzg2l_cru_set_slot_addr(struct rzg2l_cru_dev *cru,
>> }
>>
>> /*
>> - * Moves a buffer from the queue to the HW slot. If no buffer is
>> - * available use the scratch buffer. The scratch buffer is never
>> - * returned to userspace, its only function is to enable the capture
>> - * loop to keep running.
>> + * Move as many buffers as possible from the queue to HW slots. If no buffer is
>> + * available and the next slot currently lacks one then use the scratch buffer.
>> + * The scratch buffer is never returned to userspace, its only function is to
>> + * enable the capture loop to keep running.
>> */
>> -static void rzg2l_cru_fill_hw_slot(struct rzg2l_cru_dev *cru, int slot)
>> +static void rzg2l_cru_fill_hw_slots(struct rzg2l_cru_dev *cru, int slot)
>> {
>> - struct vb2_v4l2_buffer *vbuf;
>> + unsigned int from_slot = slot;
>> struct rzg2l_cru_buffer *buf;
>> + struct vb2_v4l2_buffer *vbuf;
>> dma_addr_t phys_addr;
>>
>> - /* A already populated slot shall never be overwritten. */
>> - if (WARN_ON(cru->queue_buf[slot]))
>> - return;
>> -
>> - dev_dbg(cru->dev, "Filling HW slot: %d\n", slot);
>> + do {
>> + if (cru->queue_buf[slot]) {
>> + slot = (slot + 1) % cru->num_buf;
>> + continue;
>> + }
>>
>> - if (list_empty(&cru->buf_list)) {
>> - cru->queue_buf[slot] = NULL;
>> - phys_addr = cru->scratch_phys;
>> - } else {
>> - /* Keep track of buffer we give to HW */
>> - buf = list_entry(cru->buf_list.next,
>> - struct rzg2l_cru_buffer, list);
>> - vbuf = &buf->vb;
>> - list_del_init(to_buf_list(vbuf));
>> - cru->queue_buf[slot] = vbuf;
>> -
>> - /* Setup DMA */
>> - phys_addr = vb2_dma_contig_plane_dma_addr(&vbuf->vb2_buf, 0);
>> - }
>> + if (list_empty(&cru->buf_list)) {
>> + if (slot == from_slot)
>> + phys_addr = cru->scratch_phys;
>> + else
>> + return;
>> + } else {
>> + buf = list_first_entry(&cru->buf_list,
>> + struct rzg2l_cru_buffer, list);
>> + vbuf = &buf->vb;
>> + list_del_init(&buf->list);
>> + cru->queue_buf[slot] = vbuf;
>> + phys_addr = vb2_dma_contig_plane_dma_addr(&vbuf->vb2_buf, 0);
>> + }
>>
>> - rzg2l_cru_set_slot_addr(cru, slot, phys_addr);
>> + dev_dbg(cru->dev, "Filling HW slot: %d\n", slot);
>> + rzg2l_cru_set_slot_addr(cru, slot, phys_addr);
>> + slot = (slot + 1) % cru->num_buf;
>> + } while (slot != from_slot);
>> }
>>
>> static void rzg2l_cru_initialize_axi(struct rzg2l_cru_dev *cru)
>> {
>> const struct rzg2l_cru_info *info = cru->info;
>> - unsigned int slot;
>> u32 amnaxiattr;
>>
>> /*
>> @@ -239,8 +241,7 @@ static void rzg2l_cru_initialize_axi(struct rzg2l_cru_dev *cru)
>> */
>> rzg2l_cru_write(cru, AMnMBVALID, AMnMBVALID_MBVALID(cru->num_buf - 1));
>>
>> - for (slot = 0; slot < cru->num_buf; slot++)
>> - rzg2l_cru_fill_hw_slot(cru, slot);
>> + rzg2l_cru_fill_hw_slots(cru, 0);
>>
>> if (info->has_stride) {
>> u32 stride = cru->format.bytesperline;
>> @@ -652,7 +653,7 @@ irqreturn_t rzg2l_cru_irq(int irq, void *data)
>> cru->sequence++;
>>
>> /* Prepare for next frame */
>> - rzg2l_cru_fill_hw_slot(cru, slot);
>> + rzg2l_cru_fill_hw_slots(cru, (slot + 1) % cru->num_buf);
>>
>> done:
>> spin_unlock_irqrestore(&cru->qlock, flags);
>> @@ -752,7 +753,7 @@ irqreturn_t rzg3e_cru_irq(int irq, void *data)
>> cru->sequence++;
>>
>> /* Prepare for next frame */
>> - rzg2l_cru_fill_hw_slot(cru, slot);
>> + rzg2l_cru_fill_hw_slots(cru, (slot + 1) % cru->num_buf);
>> }
>>
>> return IRQ_HANDLED;
>>
>> ---
>> base-commit: a75b8d198c55e9eb5feb6f6e155496305caba2dc
>> change-id: 20250918-rzg2l-cru-0554a4352a70
>>
>> Best regards,
>> --
>> Daniel Scally <dan.scally@ideasonboard.com>
>
> Not reviewed yet, sorry.
No problem :)
>
> But testing on RZ/G3E I'm getting the following:
>
> [ 288.873715] rzg2l-cru 16000000.video: Invalid MB address 0xeacc3e00 (out of range)
> [ 288.884665] rzg2l-cru 16000000.video: Invalid MB address 0xeae57e00 (out of range)
> [ 288.967963] rzg2l-cru 16000000.video: Invalid MB address 0xe9957e00 (out of range)
>
> Tested using:
>
> media-ctl -d /dev/media0 --set-v4l2 '"ov5645 0-003c":0[fmt:UYVY8_2X8/1280x960@1/60 field:none]'
> media-ctl -d /dev/media0 --set-v4l2 '"csi-16000400.csi2":0[fmt:UYVY8_2X8/1280x960]'
> media-ctl -d /dev/media0 --set-v4l2 '"cru-ip-16000000.video":0[fmt:UYVY8_2X8/1280x960]'
>
> gst-launch-1.0 v4l2src device=/dev/video0 io-mode=dmabuf ! video/x-raw,format=UYVY,width=1280,height=960 ! videoconvert ! queue ! glimagesink sync=false
>
> Let me gently know if I'm missing somenthing.
Ooh. I don't think you're missing anything...does it happen every time? Let me see if I can work out
what would trigger that - thanks for testing!
Dan
>
> Thanks & Regards,
> Tommaso
>
>
>
>>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] media: rzg2l-cru: rework rzg2l_cru_fill_hw_slot()
2025-09-29 20:19 ` Dan Scally
@ 2025-10-02 15:07 ` Tommaso Merciai
0 siblings, 0 replies; 3+ messages in thread
From: Tommaso Merciai @ 2025-10-02 15:07 UTC (permalink / raw)
To: Dan Scally
Cc: linux-media, laurent.pinchart+renesas, prabhakar.mahadev-lad.rj,
biju.das.jz, linux-renesas-soc
Hi Dan,
On Mon, Sep 29, 2025 at 09:19:39PM +0100, Dan Scally wrote:
> Hi Tommaso
>
> On 29/09/2025 17:08, Tommaso Merciai wrote:
> > Hi Daniel,
> > Thank you for your patch!
> >
> > On Thu, Sep 18, 2025 at 01:08:55PM +0100, Daniel Scally wrote:
> > > The current implementation of rzg2l_cru_fill_hw_slot() results in the
> > > artificial loss of frames. At present whenever a frame-complete IRQ
> > > is received the driver fills the hardware slot that was just written
> > > to with the address of the next buffer in the driver's queue. If the
> > > queue is empty, that hardware slot's address is set to the address of
> > > the scratch buffer to enable the capture loop to keep running. There
> > > is a minimum of a two-frame delay before that slot will be written to
> > > however, and in the intervening period userspace may queue more
> > > buffers which could be used.
> > >
> > > To resolve the issue rework rzg2l_cru_fill_hw_slot() so that it
> > > iteratively fills all slots from the queue which currently do not
> > > have a buffer assigned, until the queue is empty. The scratch
> > > buffer is only resorted to in the event that the queue is empty and
> > > the next slot that will be written to does not already have a buffer
> > > assigned.
> > >
> > > Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com>
> > > ---
> > > .../media/platform/renesas/rzg2l-cru/rzg2l-video.c | 63 +++++++++++-----------
> > > 1 file changed, 32 insertions(+), 31 deletions(-)
> > >
> > > diff --git a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
> > > index 941badc90ff55c5225644f88de1d70239eb3a247..9ffafb0239a7388104219b2b72eec9051db82078 100644
> > > --- a/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
> > > +++ b/drivers/media/platform/renesas/rzg2l-cru/rzg2l-video.c
> > > @@ -192,45 +192,47 @@ static void rzg2l_cru_set_slot_addr(struct rzg2l_cru_dev *cru,
> > > }
> > > /*
> > > - * Moves a buffer from the queue to the HW slot. If no buffer is
> > > - * available use the scratch buffer. The scratch buffer is never
> > > - * returned to userspace, its only function is to enable the capture
> > > - * loop to keep running.
> > > + * Move as many buffers as possible from the queue to HW slots. If no buffer is
> > > + * available and the next slot currently lacks one then use the scratch buffer.
> > > + * The scratch buffer is never returned to userspace, its only function is to
> > > + * enable the capture loop to keep running.
> > > */
> > > -static void rzg2l_cru_fill_hw_slot(struct rzg2l_cru_dev *cru, int slot)
> > > +static void rzg2l_cru_fill_hw_slots(struct rzg2l_cru_dev *cru, int slot)
> > > {
> > > - struct vb2_v4l2_buffer *vbuf;
> > > + unsigned int from_slot = slot;
> > > struct rzg2l_cru_buffer *buf;
> > > + struct vb2_v4l2_buffer *vbuf;
> > > dma_addr_t phys_addr;
> > > - /* A already populated slot shall never be overwritten. */
> > > - if (WARN_ON(cru->queue_buf[slot]))
> > > - return;
> > > -
> > > - dev_dbg(cru->dev, "Filling HW slot: %d\n", slot);
> > > + do {
> > > + if (cru->queue_buf[slot]) {
> > > + slot = (slot + 1) % cru->num_buf;
> > > + continue;
> > > + }
> > > - if (list_empty(&cru->buf_list)) {
> > > - cru->queue_buf[slot] = NULL;
> > > - phys_addr = cru->scratch_phys;
> > > - } else {
> > > - /* Keep track of buffer we give to HW */
> > > - buf = list_entry(cru->buf_list.next,
> > > - struct rzg2l_cru_buffer, list);
> > > - vbuf = &buf->vb;
> > > - list_del_init(to_buf_list(vbuf));
> > > - cru->queue_buf[slot] = vbuf;
> > > -
> > > - /* Setup DMA */
> > > - phys_addr = vb2_dma_contig_plane_dma_addr(&vbuf->vb2_buf, 0);
> > > - }
> > > + if (list_empty(&cru->buf_list)) {
> > > + if (slot == from_slot)
> > > + phys_addr = cru->scratch_phys;
> > > + else
> > > + return;
> > > + } else {
> > > + buf = list_first_entry(&cru->buf_list,
> > > + struct rzg2l_cru_buffer, list);
> > > + vbuf = &buf->vb;
> > > + list_del_init(&buf->list);
> > > + cru->queue_buf[slot] = vbuf;
> > > + phys_addr = vb2_dma_contig_plane_dma_addr(&vbuf->vb2_buf, 0);
> > > + }
> > > - rzg2l_cru_set_slot_addr(cru, slot, phys_addr);
> > > + dev_dbg(cru->dev, "Filling HW slot: %d\n", slot);
> > > + rzg2l_cru_set_slot_addr(cru, slot, phys_addr);
> > > + slot = (slot + 1) % cru->num_buf;
> > > + } while (slot != from_slot);
> > > }
> > > static void rzg2l_cru_initialize_axi(struct rzg2l_cru_dev *cru)
> > > {
> > > const struct rzg2l_cru_info *info = cru->info;
> > > - unsigned int slot;
> > > u32 amnaxiattr;
> > > /*
> > > @@ -239,8 +241,7 @@ static void rzg2l_cru_initialize_axi(struct rzg2l_cru_dev *cru)
> > > */
> > > rzg2l_cru_write(cru, AMnMBVALID, AMnMBVALID_MBVALID(cru->num_buf - 1));
> > > - for (slot = 0; slot < cru->num_buf; slot++)
> > > - rzg2l_cru_fill_hw_slot(cru, slot);
> > > + rzg2l_cru_fill_hw_slots(cru, 0);
> > > if (info->has_stride) {
> > > u32 stride = cru->format.bytesperline;
> > > @@ -652,7 +653,7 @@ irqreturn_t rzg2l_cru_irq(int irq, void *data)
> > > cru->sequence++;
> > > /* Prepare for next frame */
> > > - rzg2l_cru_fill_hw_slot(cru, slot);
> > > + rzg2l_cru_fill_hw_slots(cru, (slot + 1) % cru->num_buf);
> > > done:
> > > spin_unlock_irqrestore(&cru->qlock, flags);
> > > @@ -752,7 +753,7 @@ irqreturn_t rzg3e_cru_irq(int irq, void *data)
> > > cru->sequence++;
> > > /* Prepare for next frame */
> > > - rzg2l_cru_fill_hw_slot(cru, slot);
> > > + rzg2l_cru_fill_hw_slots(cru, (slot + 1) % cru->num_buf);
> > > }
> > > return IRQ_HANDLED;
> > >
> > > ---
> > > base-commit: a75b8d198c55e9eb5feb6f6e155496305caba2dc
> > > change-id: 20250918-rzg2l-cru-0554a4352a70
> > >
> > > Best regards,
> > > --
> > > Daniel Scally <dan.scally@ideasonboard.com>
> >
> > Not reviewed yet, sorry.
>
> No problem :)
>
> >
> > But testing on RZ/G3E I'm getting the following:
> >
> > [ 288.873715] rzg2l-cru 16000000.video: Invalid MB address 0xeacc3e00 (out of range)
> > [ 288.884665] rzg2l-cru 16000000.video: Invalid MB address 0xeae57e00 (out of range)
> > [ 288.967963] rzg2l-cru 16000000.video: Invalid MB address 0xe9957e00 (out of range)
> >
> > Tested using:
> >
> > media-ctl -d /dev/media0 --set-v4l2 '"ov5645 0-003c":0[fmt:UYVY8_2X8/1280x960@1/60 field:none]'
> > media-ctl -d /dev/media0 --set-v4l2 '"csi-16000400.csi2":0[fmt:UYVY8_2X8/1280x960]'
> > media-ctl -d /dev/media0 --set-v4l2 '"cru-ip-16000000.video":0[fmt:UYVY8_2X8/1280x960]'
> >
> > gst-launch-1.0 v4l2src device=/dev/video0 io-mode=dmabuf ! video/x-raw,format=UYVY,width=1280,height=960 ! videoconvert ! queue ! glimagesink sync=false
> >
> > Let me gently know if I'm missing somenthing.
>
> Ooh. I don't think you're missing anything...does it happen every time? Let
> me see if I can work out what would trigger that - thanks for testing!
You are welcome! :)
Sorry for the delay.
Yes this happens every time using:
gst-launch-1.0 v4l2src device=/dev/video0 io-mode=dmabuf ! video/x-raw,format=UYVY,width=1280,height=960 ! videoconvert ! queue ! glimagesink sync=false
Thanks & Regard,
Tommaso
>
> Dan
>
> >
> > Thanks & Regards,
> > Tommaso
> >
> >
> >
> > >
>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-10-02 15:08 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20250918-rzg2l-cru-v1-1-fe110fdb91e5@ideasonboard.com>
2025-09-29 16:08 ` [PATCH] media: rzg2l-cru: rework rzg2l_cru_fill_hw_slot() Tommaso Merciai
2025-09-29 20:19 ` Dan Scally
2025-10-02 15:07 ` Tommaso Merciai
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox