]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
media: ti: j721e-csi2rx: Change the drain architecture for multistream
authorRishikesh Donadkar <r-donadkar@ti.com>
Wed, 20 May 2026 12:00:19 +0000 (17:30 +0530)
committerSakari Ailus <sakari.ailus@linux.intel.com>
Wed, 20 May 2026 12:28:38 +0000 (15:28 +0300)
commit13ef2b0fa7e848c6d4658aa2847f6725a71c8712
treee459eaee37bc55204d993cd8348473b9389b97c3
parent7b6887a034e4586e7cb0371e192065d5740865f1
media: ti: j721e-csi2rx: Change the drain architecture for multistream

On buffer starvation the DMA is marked IDLE, and the stale data in the
internal FIFOs gets drained only on the next VIDIOC_QBUF call from the
userspace. This approach works fine for a single stream case.

But in multistream scenarios, buffer starvation for one stream can
block the shared HW FIFO of the CSI2RX IP. This can stall the pipeline
for all other streams, even if buffers are available for  them.

This patch introduces a new architecture, that continuously drains data
from the shared HW FIFO into a small (32KiB) buffer if no buffers are made
available to the driver from the userspace. This ensures independence
between different streams, where a slower downstream element for one
camera does not block streaming for other cameras.

Additionally, after we drain for a stream, the next frame will be a
partial frame, as a portion of its data will have already been drained
before a valid buffer is queued by user space to the driver.
Return the partial frame to user space with VB2_BUF_STATE_ERROR.

Use wait for completion barrier to make sure the shared hardware FIFO
is cleared of the data at the end of stream after the source has stopped
sending data.

Reviewed-by: Jai Luthra <jai.luthra@ideasonboard.com>
Reviewed-by: Yemike Abhilash Chandra <y-abhilashchandra@ti.com>
Signed-off-by: Rishikesh Donadkar <r-donadkar@ti.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
drivers/media/platform/ti/j721e-csi2rx/j721e-csi2rx.c