Skip to content

media: iris: Fix DMA coherency and frame interval enumeration issues - #1640

Open
gouravk-qualcomm wants to merge 2 commits into
qualcomm-linux:tech/mm/videofrom
gouravk-qualcomm:multiple-fixes
Open

media: iris: Fix DMA coherency and frame interval enumeration issues#1640
gouravk-qualcomm wants to merge 2 commits into
qualcomm-linux:tech/mm/videofrom
gouravk-qualcomm:multiple-fixes

Conversation

@gouravk-qualcomm

@gouravk-qualcomm gouravk-qualcomm commented Aug 4, 2026

Copy link
Copy Markdown

This series contains two independent fixes for the Qualcomm iris video driver:

  • DMA coherency fix for sc7280 venus node (dt-bindings ): The venus DT node was missing dma-coherent, so DMA buffers shared between the CPU and the venus hardware were not guaranteed I/O coherent. This caused hardware faults with high-resolution clips and data corruption in captured output. Adds dma-coherent to the binding and to the sc7280 venus node.

  • Frame interval enumeration fix (iris_vidc.c): iris_enum_frameintervals() used V4L2_FRMIVAL_TYPE_STEPWISE with a fixed step of 1/480, which only allowed framerates that are exact divisors of 480 fps (480, 240, 120, 60, 30, ...). Non-divisor framerates like 29 or 25 fps were rejected, breaking GStreamer caps negotiation ("internal data stream error"). Switches to V4L2_FRMIVAL_TYPE_CONTINUOUS so any integer framerate in [1, max_fps] is accepted, as there's no hardware restriction to divisor framerates.

CRs-fixed: 4515234,4446385
Depends-On: #1641

Vishnu Reddy added 2 commits August 5, 2026 00:47
…perty

While testing with some higher resolution clips, the venus hardware
triggers a fault due to wrong input data being received. Corruption
was also observed in the captured output when the client dumped it
to a file.

On debugging, this was traced to the venus node not declaring
dma-coherent. As a result, DMA buffers shared between the CPU and the
venus video hardware/controller are not guaranteed to be I/O coherent:
CPU writes to an input buffer can remain in CPU caches without being
visible to the video hardware when it reads the same buffer, so the
hardware receives input data that does not match what the CPU wrote.
Likewise, on the capture path, data written by the video hardware to
the output buffer may not be visible to the CPU, so the client reads
stale or partial data, resulting in corruption.

Add the dma-coherent property to the venus node so that DMA buffers
shared between the CPU and the video hardware and controller remain
coherent.

Link: https://lore.kernel.org/all/20260801-iris-fixes-dma-pseq-fint-v1-1-aba0cb22f6ab@oss.qualcomm.com/
Fixes: 37613ae ("arm64: dts: qcom: sc7280: Add venus DT node")
Cc: stable@vger.kernel.org
Signed-off-by: Vishnu Reddy <busanna.reddy@oss.qualcomm.com>
… framerates

iris_enum_frameintervals() advertised frame intervals using
V4L2_FRMIVAL_TYPE_STEPWISE with step=1/MAXIMUM_FPS where MAXIMUM_FPS
is 480. This caused client to enumerate only framerates of the form
MAXIMUM_FPS/n (where n is a positive integer), restricting support to
exact divisors of MAXIMUM_FPS (e.g., 480, 240, 160, 120, 96, 80, 60,
30, 24, 1).

Framerates that are not exact divisors of MAXIMUM_FPS, such as 29 fps,
25 fps, were excluded from the enumerated list. There is no hardware
restriction to framerates that are exact divisors of MAXIMUM_FPS. This
caused GStreamer caps negotiation to fail with an "internal data
stream error" when encoding content at such framerates.

Fix this by using V4L2_FRMIVAL_TYPE_CONTINUOUS. With CONTINUOUS type,
GStreamer creates a continuous framerate range [1, max_fps], allowing
any integer framerate within the range to pass caps negotiation. The
step field is set to 1/1 as required by the V4L2 specification for
continuous frame intervals.

Link: https://lore.kernel.org/all/20260801-iris-fixes-dma-pseq-fint-v1-4-aba0cb22f6ab@oss.qualcomm.com/
Fixes: a688243 ("media: iris: Add support for ENUM_FRAMESIZES/FRAMEINTERVALS for encoder")
Cc: stable@vger.kernel.org
Signed-off-by: Vishnu Reddy <busanna.reddy@oss.qualcomm.com>
@qcomlnxci
qcomlnxci requested review from a team, dikshita-agarwal and vgarodia and removed request for a team August 4, 2026 19:28
@qcomlnxci
qcomlnxci requested a review from a team August 4, 2026 19:30
@qlijarvis

Copy link
Copy Markdown

🔨 Build Failure Analysis — PR #1640

PR: #1640
Build run: https://github.com/qualcomm-linux/kernel-config/actions/runs/30943564294

# Error File:Line PR-introduced? Root Cause
1 Missing header file arch/arm64/boot/dts/qcom/hamoa.dtsi:20 No Pre-existing: hamoa.dtsi includes dt-bindings/media/qcom,sm8550-iris.h which doesn't exist in the tree. PR only modifies qcom,sc7280-venus.yaml and iris_vidc.c, neither of which are related to this DTS file or the missing header.

Verdict

0 of 1 errors are introduced by this PR; 1 is pre-existing. The build failure is unrelated to PR #1640 changes.

📎 Detailed analysis: Full report

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants