From: Rishikesh Donadkar <r-donadkar@ti.com>
To: <jai.luthra@linux.dev>, <laurent.pinchart@ideasonboard.com>,
<mripard@kernel.org>
Cc: <r-donadkar@ti.com>, <y-abhilashchandra@ti.com>,
<devarsht@ti.com>, <s-jain1@ti.com>, <vigneshr@ti.com>,
<mchehab@kernel.org>, <robh@kernel.org>, <krzk+dt@kernel.org>,
<p.zabel@pengutronix.de>, <conor+dt@kernel.org>,
<sakari.ailus@linux.intel.com>, <hverkuil-cisco@xs4all.nl>,
<tomi.valkeinen@ideasonboard.com>, <jai.luthra@ideasonboard.com>,
<changhuang.liang@starfivetech.com>, <sjoerd@collabora.com>,
<dan.carpenter@linaro.org>, <hverkuil+cisco@kernel.org>,
<linux-kernel@vger.kernel.org>, <linux-media@vger.kernel.org>,
<devicetree@vger.kernel.org>
Subject: [PATCH v12 13/17] media: ti: j721e-csi2rx: Submit all available buffers
Date: Fri, 13 Mar 2026 14:36:57 +0530 [thread overview]
Message-ID: <20260313090701.646534-14-r-donadkar@ti.com> (raw)
In-Reply-To: <20260313090701.646534-1-r-donadkar@ti.com>
From: Jai Luthra <j-luthra@ti.com>
We already make sure to submit all available buffers to DMA in each DMA
completion callback.
Move that logic in a separate function, and use it during stream start
as well, as most application queue all their buffers before stream on.
Signed-off-by: Jai Luthra <j-luthra@ti.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Reviewed-by: Yemike Abhilash Chandra <y-abhilashchandra@ti.com>
Co-developed-by: Rishikesh Donadkar <r-donadkar@ti.com>
Signed-off-by: Rishikesh Donadkar <r-donadkar@ti.com>
---
.../platform/ti/j721e-csi2rx/j721e-csi2rx.c | 42 +++++++++++--------
1 file changed, 24 insertions(+), 18 deletions(-)
diff --git a/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c b/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c
index 5f4627f8c4921..7d50b8dd8a6a4 100644
--- a/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c
+++ b/drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c
@@ -663,11 +663,32 @@ static int ti_csi2rx_drain_dma(struct ti_csi2rx_ctx *ctx)
return ret;
}
+static int ti_csi2rx_dma_submit_pending(struct ti_csi2rx_ctx *ctx)
+{
+ struct ti_csi2rx_dma *dma = &ctx->dma;
+ struct ti_csi2rx_buffer *buf;
+ int ret = 0;
+
+ /* If there are more buffers to process then start their transfer. */
+ while (!list_empty(&dma->queue)) {
+ buf = list_entry(dma->queue.next, struct ti_csi2rx_buffer, list);
+ ret = ti_csi2rx_start_dma(ctx, buf);
+ if (ret) {
+ dev_err(ctx->csi->dev,
+ "Failed to queue the next buffer for DMA\n");
+ vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
+ list_del(&buf->list);
+ } else {
+ list_move_tail(&buf->list, &dma->submitted);
+ }
+ }
+ return ret;
+}
+
static void ti_csi2rx_dma_callback(void *param)
{
struct ti_csi2rx_buffer *buf = param;
struct ti_csi2rx_ctx *ctx = buf->ctx;
- struct ti_csi2rx_dev *csi = ctx->csi;
struct ti_csi2rx_dma *dma = &ctx->dma;
unsigned long flags;
@@ -684,18 +705,7 @@ static void ti_csi2rx_dma_callback(void *param)
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
list_del(&buf->list);
- /* If there are more buffers to process then start their transfer. */
- while (!list_empty(&dma->queue)) {
- buf = list_entry(dma->queue.next, struct ti_csi2rx_buffer, list);
-
- if (ti_csi2rx_start_dma(ctx, buf)) {
- dev_err(csi->dev, "Failed to queue the next buffer for DMA\n");
- list_del(&buf->list);
- vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
- } else {
- list_move_tail(&buf->list, &dma->submitted);
- }
- }
+ ti_csi2rx_dma_submit_pending(ctx);
if (list_empty(&dma->submitted))
dma->state = TI_CSI2RX_DMA_IDLE;
@@ -1135,7 +1145,6 @@ static int ti_csi2rx_sd_enable_streams(struct v4l2_subdev *sd,
struct ti_csi2rx_ctx *ctx = &csi->ctx[pad - TI_CSI2RX_PAD_FIRST_SOURCE];
struct ti_csi2rx_dma *dma = &ctx->dma;
struct media_pad *remote_pad;
- struct ti_csi2rx_buffer *buf;
unsigned long flags;
u64 sink_streams;
int ret = 0;
@@ -1160,16 +1169,13 @@ static int ti_csi2rx_sd_enable_streams(struct v4l2_subdev *sd,
ctx->sequence = 0;
spin_lock_irqsave(&dma->lock, flags);
- buf = list_entry(dma->queue.next, struct ti_csi2rx_buffer, list);
- ret = ti_csi2rx_start_dma(ctx, buf);
+ ret = ti_csi2rx_dma_submit_pending(ctx);
if (ret) {
- dev_err(csi->dev, "Failed to start DMA: %d\n", ret);
spin_unlock_irqrestore(&dma->lock, flags);
return ret;
}
- list_move_tail(&buf->list, &dma->submitted);
dma->state = TI_CSI2RX_DMA_ACTIVE;
spin_unlock_irqrestore(&dma->lock, flags);
--
2.34.1
next prev parent reply other threads:[~2026-03-13 9:09 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-13 9:06 [PATCH v12 00/17] media: cadence,ti: CSI2RX Multistream Support Rishikesh Donadkar
2026-03-13 9:06 ` [PATCH v12 01/17] media: ti: j721e-csi2rx: Remove word size alignment on frame width Rishikesh Donadkar
2026-03-13 9:06 ` [PATCH v12 02/17] dt-bindings: media: ti,j721e-csi2rx-shim: Support 32 dma chans Rishikesh Donadkar
2026-03-13 9:06 ` [PATCH v12 03/17] media: ti: j721e-csi2rx: separate out device and context Rishikesh Donadkar
2026-03-13 9:06 ` [PATCH v12 04/17] media: ti: j721e-csi2rx: prepare SHIM code for multiple contexts Rishikesh Donadkar
2026-03-13 9:06 ` [PATCH v12 05/17] media: ti: j721e-csi2rx: allocate DMA channel based on context index Rishikesh Donadkar
2026-03-13 9:06 ` [PATCH v12 06/17] media: ti: j721e-csi2rx: add a subdev for the core device Rishikesh Donadkar
2026-03-13 9:06 ` [PATCH v12 07/17] media: cadence: csi2rx: Move to .enable/disable_streams API Rishikesh Donadkar
2026-03-13 9:06 ` [PATCH v12 08/17] media: ti: j721e-csi2rx: get number of contexts from device tree Rishikesh Donadkar
2026-03-13 9:06 ` [PATCH v12 09/17] media: cadence: csi2rx: add get_frame_desc wrapper Rishikesh Donadkar
2026-05-19 11:56 ` Sakari Ailus
2026-05-20 6:44 ` Rishikesh Donadkar
2026-05-20 7:42 ` Sakari Ailus
2026-03-13 9:06 ` [PATCH v12 10/17] media: ti: j721e-csi2rx: add support for processing virtual channels Rishikesh Donadkar
2026-05-19 11:59 ` Sakari Ailus
2026-05-20 7:34 ` Rishikesh Donadkar
2026-03-13 9:06 ` [PATCH v12 11/17] media: cadence: csi2rx: add multistream support Rishikesh Donadkar
2026-05-19 12:05 ` Sakari Ailus
2026-05-20 7:50 ` Rishikesh Donadkar
2026-03-13 9:06 ` [PATCH v12 12/17] media: ti: j721e-csi2rx: " Rishikesh Donadkar
2026-03-13 9:06 ` Rishikesh Donadkar [this message]
2026-03-13 9:06 ` [PATCH v12 14/17] media: ti: j721e-csi2rx: Change the drain architecture for multistream Rishikesh Donadkar
2026-03-13 9:06 ` [PATCH v12 15/17] media: cadence: csi2rx: Support runtime PM Rishikesh Donadkar
2026-05-19 12:29 ` Sakari Ailus
2026-05-20 8:04 ` Rishikesh Donadkar
2026-03-13 9:07 ` [PATCH v12 16/17] media: ti: j721e-csi2rx: Support runtime suspend Rishikesh Donadkar
2026-05-19 12:31 ` Sakari Ailus
2026-05-20 8:05 ` Rishikesh Donadkar
2026-03-13 9:07 ` [PATCH v12 17/17] media: ti: j721e-csi2rx: Support system suspend using pm_notifier Rishikesh Donadkar
2026-03-13 9:55 ` [PATCH v12 00/17] media: cadence,ti: CSI2RX Multistream Support Jai Luthra
2026-03-17 12:22 ` Tomi Valkeinen
2026-05-11 14:21 ` Rishikesh Donadkar
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=20260313090701.646534-14-r-donadkar@ti.com \
--to=r-donadkar@ti.com \
--cc=changhuang.liang@starfivetech.com \
--cc=conor+dt@kernel.org \
--cc=dan.carpenter@linaro.org \
--cc=devarsht@ti.com \
--cc=devicetree@vger.kernel.org \
--cc=hverkuil+cisco@kernel.org \
--cc=hverkuil-cisco@xs4all.nl \
--cc=jai.luthra@ideasonboard.com \
--cc=jai.luthra@linux.dev \
--cc=krzk+dt@kernel.org \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=mripard@kernel.org \
--cc=p.zabel@pengutronix.de \
--cc=robh@kernel.org \
--cc=s-jain1@ti.com \
--cc=sakari.ailus@linux.intel.com \
--cc=sjoerd@collabora.com \
--cc=tomi.valkeinen@ideasonboard.com \
--cc=vigneshr@ti.com \
--cc=y-abhilashchandra@ti.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox