Thread (5 messages) 5 messages, 3 authors, 2026-02-25

Re: [PATCH v2 2/2] media: rockchip: rkcif: comply with minimum number of buffers requirement

From: Paul Elder <paul.elder@ideasonboard.com>
Date: 2026-02-25 03:19:03
Also in: linux-media, linux-rockchip, lkml

Hi Michael,

Thanks for the patch.

Quoting Michael Riesch via B4 Relay (2026-02-20 17:15:08)
From: Michael Riesch <michael.riesch@collabora.com>

Each stream requires CIF_REQ_BUFS_MIN=1 buffers to enable streaming.
However, it failed with only one buffer provided.

Comply with the minimum number of buffers requirement and accept
exactly one buffer.

Fixes: 501802e2ad51 ("media: rockchip: rkcif: add abstraction for dma blocks")
Cc: stable@kernel.org
Tested-by: Paul Elder <paul.elder@ideasonboard.com>
Tested-by: Chen-Yu Tsai <wens@kernel.org>
Signed-off-by: Michael Riesch <michael.riesch@collabora.com>
Looks good to me.

Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
quoted hunk ↗ jump to hunk
---
 .../media/platform/rockchip/rkcif/rkcif-stream.c   | 44 +++++++++++-----------
 1 file changed, 22 insertions(+), 22 deletions(-)
diff --git a/drivers/media/platform/rockchip/rkcif/rkcif-stream.c b/drivers/media/platform/rockchip/rkcif/rkcif-stream.c
index e00010a91e8b..f15bee4f7cd7 100644
--- a/drivers/media/platform/rockchip/rkcif/rkcif-stream.c
+++ b/drivers/media/platform/rockchip/rkcif/rkcif-stream.c
@@ -106,42 +106,42 @@ static int rkcif_stream_init_buffers(struct rkcif_stream *stream)
 {
        struct v4l2_pix_format_mplane *pix = &stream->pix;
 
-       stream->buffers[0] = rkcif_stream_pop_buffer(stream);
-       if (!stream->buffers[0])
-               goto err_buff_0;
-
-       stream->buffers[1] = rkcif_stream_pop_buffer(stream);
-       if (!stream->buffers[1])
-               goto err_buff_1;
-
-       if (stream->queue_buffer) {
-               stream->queue_buffer(stream, 0);
-               stream->queue_buffer(stream, 1);
-       }
-
        stream->dummy.size = pix->num_planes * pix->plane_fmt[0].sizeimage;
        stream->dummy.vaddr =
                dma_alloc_attrs(stream->rkcif->dev, stream->dummy.size,
                                &stream->dummy.buffer.buff_addr[0], GFP_KERNEL,
                                DMA_ATTR_NO_KERNEL_MAPPING);
        if (!stream->dummy.vaddr)
-               goto err_dummy;
+               return -ENOMEM;
 
        for (unsigned int i = 1; i < pix->num_planes; i++)
                stream->dummy.buffer.buff_addr[i] =
                        stream->dummy.buffer.buff_addr[i - 1] +
                        pix->plane_fmt[i - 1].bytesperline * pix->height;
 
-       return 0;
+       stream->buffers[0] = rkcif_stream_pop_buffer(stream);
+       if (!stream->buffers[0])
+               goto err_dummy_free;
+
+       stream->buffers[1] = rkcif_stream_pop_buffer(stream);
+       if (!stream->buffers[1]) {
+               stream->buffers[1] = &stream->dummy.buffer;
+               stream->buffers[1]->is_dummy = true;
+       }
 
-err_dummy:
-       rkcif_stream_return_buffer(stream->buffers[1], VB2_BUF_STATE_QUEUED);
-       stream->buffers[1] = NULL;
+       if (stream->queue_buffer) {
+               stream->queue_buffer(stream, 0);
+               stream->queue_buffer(stream, 1);
+       }
+
+       return 0;
 
-err_buff_1:
-       rkcif_stream_return_buffer(stream->buffers[0], VB2_BUF_STATE_QUEUED);
-       stream->buffers[0] = NULL;
-err_buff_0:
+err_dummy_free:
+       dma_free_attrs(stream->rkcif->dev, stream->dummy.size,
+                      stream->dummy.vaddr,
+                      stream->dummy.buffer.buff_addr[0],
+                      DMA_ATTR_NO_KERNEL_MAPPING);
+       stream->dummy.vaddr = NULL;
        return -EINVAL;
 }
 
-- 
2.39.5
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help