Hi All,
This patch series adds initial support for the HEVC(H.265) and VP9 codecs in iris decoder. The objective of this work is to extend the decoder's capabilities to handle HEVC and VP9 codec streams, including necessary format handling and buffer management. In addition, the series also includes a set of fixes to address issues identified during testing of these additional codecs.
These patches also address the comments and feedback received from the RFC patches previously sent. I have made the necessary improvements based on the community's suggestions.
Changes sinces RFC: - Added additional fixes to address issues identified during further testing. - Moved typo fix to a seperate patch [Neil] - Reordered the patches for better logical flow and clarity [Neil, Dmitry] - Added fixes tag wherever applicable [Neil, Dmitry] - Removed the default case in the switch statement for codecs [Bryan] - Replaced if-else statements with switch-case [Bryan] - Added comments for mbpf [Bryan] - RFC: https://lore.kernel.org/linux-media/20250305104335.3629945-1-quic_dikshita@q...
These patches are tested on SM8250 and SM8550 with v4l2-ctl and Gstreamer for HEVC and VP9 decoders, at the same time ensured that the existing H264 decoder functionality remains uneffected.
Note: 1 of the fluster compliance test is fixed with firmware [1] [1]: https://lore.kernel.org/linux-firmware/1a511921-446d-cdc4-0203-084c88a5dc1e@...
The result of fluster test on SM8550: 131/147 testcases passed while testing JCT-VC-HEVC_V1 with GStreamer-H.265-V4L2-Gst1.0. The failing test case: - 10 testcases failed due to unsupported 10 bit format. - DBLK_A_MAIN10_VIXS_4 - INITQP_B_Main10_Sony_1 - TSUNEQBD_A_MAIN10_Technicolor_2 - WP_A_MAIN10_Toshiba_3 - WP_MAIN10_B_Toshiba_3 - WPP_A_ericsson_MAIN10_2 - WPP_B_ericsson_MAIN10_2 - WPP_C_ericsson_MAIN10_2 - WPP_E_ericsson_MAIN10_2 - WPP_F_ericsson_MAIN10_2 - 4 testcase failed due to unsupported resolution - PICSIZE_A_Bossen_1 - PICSIZE_B_Bossen_1 - WPP_D_ericsson_MAIN10_2 - WPP_D_ericsson_MAIN_2 - 1 testcase failed as bitstream is invalid (this fails with reference as well) - RAP_B_Bossen_2 - 1 testcase failed due to CRC mismatch - RAP_A_docomo_6 Analysis - First few frames in this discarded by firmware and are sent to driver with 0 filled length. Driver send such buffers to client with timestamp 0 and payload set to 0 and make buf state to VB2_BUF_STATE_ERROR. Such buffers should be dropped by GST. But instead, the first frame displayed as green frame and when a valid buffer is sent to client later with same 0 timestamp, its dropped, leading to CRC mismatch for first frame.
235/305 testcases passed while testing VP9-TEST-VECTORS with GStreamer-VP9-V4L2-Gst1.0. The failing test case: - 64 testcases failed due to unsupported resolution - vp90-2-02-size-08x08.webm - vp90-2-02-size-08x10.webm - vp90-2-02-size-08x16.webm - vp90-2-02-size-08x18.webm - vp90-2-02-size-08x32.webm - vp90-2-02-size-08x34.webm - vp90-2-02-size-08x64.webm - vp90-2-02-size-08x66.webm - vp90-2-02-size-10x08.webm - vp90-2-02-size-10x10.webm - vp90-2-02-size-10x16.webm - vp90-2-02-size-10x18.webm - vp90-2-02-size-10x32.webm - vp90-2-02-size-10x34.webm - vp90-2-02-size-10x64.webm - vp90-2-02-size-10x66.webm - vp90-2-02-size-16x08.webm - vp90-2-02-size-16x10.webm - vp90-2-02-size-16x16.webm - vp90-2-02-size-16x18.webm - vp90-2-02-size-16x32.webm - vp90-2-02-size-16x34.webm - vp90-2-02-size-16x64.webm - vp90-2-02-size-16x66.webm - vp90-2-02-size-18x08.webm - vp90-2-02-size-18x10.webm - vp90-2-02-size-18x16.webm - vp90-2-02-size-18x18.webm - vp90-2-02-size-18x32.webm - vp90-2-02-size-18x34.webm - vp90-2-02-size-18x64.webm - vp90-2-02-size-18x66.webm - vp90-2-02-size-32x08.webm - vp90-2-02-size-32x10.webm - vp90-2-02-size-32x16.webm - vp90-2-02-size-32x18.webm - vp90-2-02-size-32x32.webm - vp90-2-02-size-32x34.webm - vp90-2-02-size-32x64.webm - vp90-2-02-size-32x66.webm - vp90-2-02-size-34x08.webm - vp90-2-02-size-34x10.webm - vp90-2-02-size-34x16.webm - vp90-2-02-size-34x18.webm - vp90-2-02-size-34x32.webm - vp90-2-02-size-34x34.webm - vp90-2-02-size-34x64.webm - vp90-2-02-size-34x66.webm - vp90-2-02-size-64x08.webm - vp90-2-02-size-64x10.webm - vp90-2-02-size-64x16.webm - vp90-2-02-size-64x18.webm - vp90-2-02-size-64x32.webm - vp90-2-02-size-64x34.webm - vp90-2-02-size-64x64.webm - vp90-2-02-size-64x66.webm - vp90-2-02-size-66x08.webm - vp90-2-02-size-66x10.webm - vp90-2-02-size-66x16.webm - vp90-2-02-size-66x18.webm - vp90-2-02-size-66x32.webm - vp90-2-02-size-66x34.webm - vp90-2-02-size-66x64.webm - vp90-2-02-size-66x66.webm - 2 testcases failed due to unsupported format - vp91-2-04-yuv422.webm - vp91-2-04-yuv444.webm - 1 testcase failed with CRC mismatch (fails with ref decoder as well) - vp90-2-22-svc_1280x720_3.ivf - 2 testcase failed due to unsupported resolution after sequence change - vp90-2-21-resize_inter_320x180_5_1-2.webm - vp90-2-21-resize_inter_320x180_7_1-2.webm - 1 testcase failed due to unsupported stream - vp90-2-16-intra-only.webm Note: There is a timing issue with the clips having multiple resolution change. Where firmware returned all the buffers with previous sequence and has no buffer left to attach the LAST flag to. At the same time, client is not queueing any further buffers, so there is deadlock where client is waiting for LAST flag, while firmware doesn't have any capture buffer to attach LAST flag to. Ideally client should keep queueing the buffers on capture queue untill the LAST flag is received.
The result of fluster test on SM8250: 132/147 testcases passed while testing JCT-VC-HEVC_V1 with GStreamer-H.265-V4L2-Gst1.0. The failing test case: - 10 testcases failed due to unsupported 10 bit format. - DBLK_A_MAIN10_VIXS_4 - INITQP_B_Main10_Sony_1 - TSUNEQBD_A_MAIN10_Technicolor_2 - WP_A_MAIN10_Toshiba_3 - WP_MAIN10_B_Toshiba_3 - WPP_A_ericsson_MAIN10_2 - WPP_B_ericsson_MAIN10_2 - WPP_C_ericsson_MAIN10_2 - WPP_E_ericsson_MAIN10_2 - WPP_F_ericsson_MAIN10_2 - 4 testcase failed due to unsupported resolution - PICSIZE_A_Bossen_1 - PICSIZE_B_Bossen_1 - WPP_D_ericsson_MAIN10_2 - WPP_D_ericsson_MAIN_2 - 1 testcase failed as bitstream is invalid (this fails with reference as well) - RAP_B_Bossen_2
232/305 testcases passed while testing VP9-TEST-VECTORS with GStreamer-VP9-V4L2-Gst1.0. The failing test case: - 64 testcases failed due to unsupported resolution - vp90-2-02-size-08x08.webm - vp90-2-02-size-08x10.webm - vp90-2-02-size-08x16.webm - vp90-2-02-size-08x18.webm - vp90-2-02-size-08x32.webm - vp90-2-02-size-08x34.webm - vp90-2-02-size-08x64.webm - vp90-2-02-size-08x66.webm - vp90-2-02-size-10x08.webm - vp90-2-02-size-10x10.webm - vp90-2-02-size-10x16.webm - vp90-2-02-size-10x18.webm - vp90-2-02-size-10x32.webm - vp90-2-02-size-10x34.webm - vp90-2-02-size-10x64.webm - vp90-2-02-size-10x66.webm - vp90-2-02-size-16x08.webm - vp90-2-02-size-16x10.webm - vp90-2-02-size-16x16.webm - vp90-2-02-size-16x18.webm - vp90-2-02-size-16x32.webm - vp90-2-02-size-16x34.webm - vp90-2-02-size-16x64.webm - vp90-2-02-size-16x66.webm - vp90-2-02-size-18x08.webm - vp90-2-02-size-18x10.webm - vp90-2-02-size-18x16.webm - vp90-2-02-size-18x18.webm - vp90-2-02-size-18x32.webm - vp90-2-02-size-18x34.webm - vp90-2-02-size-18x64.webm - vp90-2-02-size-18x66.webm - vp90-2-02-size-32x08.webm - vp90-2-02-size-32x10.webm - vp90-2-02-size-32x16.webm - vp90-2-02-size-32x18.webm - vp90-2-02-size-32x32.webm - vp90-2-02-size-32x34.webm - vp90-2-02-size-32x64.webm - vp90-2-02-size-32x66.webm - vp90-2-02-size-34x08.webm - vp90-2-02-size-34x10.webm - vp90-2-02-size-34x16.webm - vp90-2-02-size-34x18.webm - vp90-2-02-size-34x32.webm - vp90-2-02-size-34x34.webm - vp90-2-02-size-34x64.webm - vp90-2-02-size-34x66.webm - vp90-2-02-size-64x08.webm - vp90-2-02-size-64x10.webm - vp90-2-02-size-64x16.webm - vp90-2-02-size-64x18.webm - vp90-2-02-size-64x32.webm - vp90-2-02-size-64x34.webm - vp90-2-02-size-64x64.webm - vp90-2-02-size-64x66.webm - vp90-2-02-size-66x08.webm - vp90-2-02-size-66x10.webm - vp90-2-02-size-66x16.webm - vp90-2-02-size-66x18.webm - vp90-2-02-size-66x32.webm - vp90-2-02-size-66x34.webm - vp90-2-02-size-66x64.webm - vp90-2-02-size-66x66.webm - 2 testcases failed due to unsupported format - vp91-2-04-yuv422.webm - vp91-2-04-yuv444.webm - 1 testcase failed with CRC mismatch (fails with ref decoder as well) - vp90-2-22-svc_1280x720_3.ivf - 5 testcase failed due to unsupported resolution after sequence change - vp90-2-21-resize_inter_320x180_5_1-2.webm - vp90-2-21-resize_inter_320x180_7_1-2.webm - vp90-2-21-resize_inter_320x240_5_1-2.webm - vp90-2-21-resize_inter_320x240_7_1-2.webm - vp90-2-18-resize.ivf - 1 testcase failed with CRC mismatch - vp90-2-16-intra-only.webm Analysis: First few frames are marked by firmware as NO_SHOW frame. Driver make buf state to VB2_BUF_STATE_ERROR for such frames. Such buffers should be dropped by GST. But instead, the first frame is being displayed and when a valid buffer is sent to client later with same timestamp, its dropped, leading to CRC mismatch for first frame. Note: Same timing issue as observed on SM8550 is seen on SM8250 as well.
Signed-off-by: Dikshita Agarwal quic_dikshita@quicinc.com --- Dikshita Agarwal (20): media: iris: Skip destroying internal buffer if not dequeued media: iris: Update CAPTURE format info based on OUTPUT format media: iris: Add handling for corrupt and drop frames media: iris: Avoid updating frame size to firmware during reconfig media: iris: Send V4L2_BUF_FLAG_ERROR for buffers with 0 filled length media: iris: Add handling for no show frames media: iris: Improve last flag handling media: iris: Skip flush on first sequence change media: iris: Prevent HFI queue writes when core is in deinit state media: iris: Remove redundant buffer count check in stream off media: iris: Remove deprecated property setting to firmware media: iris: Fix missing function pointer initialization media: iris: Fix NULL pointer dereference media: iris: Fix typo in depth variable media: iris: Add a comment to explain usage of MBPS media: iris: Add HEVC and VP9 formats for decoder media: iris: Add platform capabilities for HEVC and VP9 decoders media: iris: Set mandatory properties for HEVC and VP9 decoders. media: iris: Add internal buffer calculation for HEVC and VP9 decoders media: iris: Add codec specific check for VP9 decoder drain handling
drivers/media/platform/qcom/iris/iris_buffer.c | 22 +- drivers/media/platform/qcom/iris/iris_ctrls.c | 35 +- drivers/media/platform/qcom/iris/iris_hfi_common.h | 1 + .../platform/qcom/iris/iris_hfi_gen1_command.c | 44 ++- .../platform/qcom/iris/iris_hfi_gen1_defines.h | 5 +- .../platform/qcom/iris/iris_hfi_gen1_response.c | 22 +- .../platform/qcom/iris/iris_hfi_gen2_command.c | 143 +++++++- .../platform/qcom/iris/iris_hfi_gen2_defines.h | 5 + .../platform/qcom/iris/iris_hfi_gen2_response.c | 57 ++- drivers/media/platform/qcom/iris/iris_hfi_queue.c | 2 +- drivers/media/platform/qcom/iris/iris_instance.h | 6 + .../platform/qcom/iris/iris_platform_common.h | 28 +- .../platform/qcom/iris/iris_platform_sm8250.c | 15 +- .../platform/qcom/iris/iris_platform_sm8550.c | 143 +++++++- drivers/media/platform/qcom/iris/iris_vb2.c | 3 +- drivers/media/platform/qcom/iris/iris_vdec.c | 113 +++--- drivers/media/platform/qcom/iris/iris_vdec.h | 11 + drivers/media/platform/qcom/iris/iris_vidc.c | 3 - drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 397 ++++++++++++++++++++- drivers/media/platform/qcom/iris/iris_vpu_buffer.h | 46 ++- 20 files changed, 948 insertions(+), 153 deletions(-) --- base-commit: 7824b91d23e9f255f0e9d2acaa74265c9cac2e9c change-id: 20250402-iris-dec-hevc-vp9-2654a1fc4d0d
Best regards,
Firmware might hold the DPB buffers for reference in case of sequence change, so skip destroying buffers for which QUEUED flag is not removed.
Cc: stable@vger.kernel.org Fixes: 73702f45db81 ("media: iris: allocate, initialize and queue internal buffers") Signed-off-by: Dikshita Agarwal quic_dikshita@quicinc.com --- drivers/media/platform/qcom/iris/iris_buffer.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/drivers/media/platform/qcom/iris/iris_buffer.c b/drivers/media/platform/qcom/iris/iris_buffer.c index e5c5a564fcb8..75fe63cc2327 100644 --- a/drivers/media/platform/qcom/iris/iris_buffer.c +++ b/drivers/media/platform/qcom/iris/iris_buffer.c @@ -396,6 +396,13 @@ int iris_destroy_internal_buffers(struct iris_inst *inst, u32 plane) for (i = 0; i < len; i++) { buffers = &inst->buffers[internal_buf_type[i]]; list_for_each_entry_safe(buf, next, &buffers->list, list) { + /* + * skip destroying internal(DPB) buffer if firmware + * did not return it. + */ + if (buf->attr & BUF_ATTR_QUEUED) + continue; + ret = iris_destroy_internal_buffer(inst, buf); if (ret) return ret;
On 08/04/2025 16:54, Dikshita Agarwal wrote:
Firmware might hold the DPB buffers for reference in case of sequence change, so skip destroying buffers for which QUEUED flag is not removed.
Cc: stable@vger.kernel.org Fixes: 73702f45db81 ("media: iris: allocate, initialize and queue internal buffers") Signed-off-by: Dikshita Agarwal quic_dikshita@quicinc.com
drivers/media/platform/qcom/iris/iris_buffer.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/drivers/media/platform/qcom/iris/iris_buffer.c b/drivers/media/platform/qcom/iris/iris_buffer.c index e5c5a564fcb8..75fe63cc2327 100644 --- a/drivers/media/platform/qcom/iris/iris_buffer.c +++ b/drivers/media/platform/qcom/iris/iris_buffer.c @@ -396,6 +396,13 @@ int iris_destroy_internal_buffers(struct iris_inst *inst, u32 plane) for (i = 0; i < len; i++) { buffers = &inst->buffers[internal_buf_type[i]]; list_for_each_entry_safe(buf, next, &buffers->list, list) {
/*
* skip destroying internal(DPB) buffer if firmware
* did not return it.
*/
if (buf->attr & BUF_ATTR_QUEUED)
continue;
ret = iris_destroy_internal_buffer(inst, buf); if (ret) return ret;
iris_destroy_internal_buffers() is called from
- iris_vdec_streamon_output - iris_venc_streamon_output - iris_close
So if we skip releasing the buffer here, when will the memory be released ?
Particularly the kfree() in iris_destroy_internal_buffer() ?
iris_close -> iris_destroy_internal_buffers ! -> iris_destroy_buffer
Is a leak right ?
--- bod
On 11/04/2025 13:10, Bryan O'Donoghue wrote:
On 08/04/2025 16:54, Dikshita Agarwal wrote:
Firmware might hold the DPB buffers for reference in case of sequence change, so skip destroying buffers for which QUEUED flag is not removed.
Cc: stable@vger.kernel.org Fixes: 73702f45db81 ("media: iris: allocate, initialize and queue internal buffers") Signed-off-by: Dikshita Agarwal quic_dikshita@quicinc.com
drivers/media/platform/qcom/iris/iris_buffer.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/drivers/media/platform/qcom/iris/iris_buffer.c b/drivers/ media/platform/qcom/iris/iris_buffer.c index e5c5a564fcb8..75fe63cc2327 100644 --- a/drivers/media/platform/qcom/iris/iris_buffer.c +++ b/drivers/media/platform/qcom/iris/iris_buffer.c @@ -396,6 +396,13 @@ int iris_destroy_internal_buffers(struct iris_inst *inst, u32 plane) for (i = 0; i < len; i++) { buffers = &inst->buffers[internal_buf_type[i]]; list_for_each_entry_safe(buf, next, &buffers->list, list) { + /* + * skip destroying internal(DPB) buffer if firmware + * did not return it. + */ + if (buf->attr & BUF_ATTR_QUEUED) + continue;
ret = iris_destroy_internal_buffer(inst, buf); if (ret) return ret;
iris_destroy_internal_buffers() is called from
- iris_vdec_streamon_output
- iris_venc_streamon_output
- iris_close
So if we skip releasing the buffer here, when will the memory be released ?
Particularly the kfree() in iris_destroy_internal_buffer() ?
iris_close -> iris_destroy_internal_buffers ! -> iris_destroy_buffer
Is a leak right ?
bod
Thinking about this some more, I believe we should have some sort of reaping routine.
- The firmware fails to release a buffer, it is up to APSS/Linux to run some kind of reaping routine. We can debate when is the right time to reset. Perhaps instead of ignoring the buffer as you have done here we schedule work with a timeout and if the timeout expires then this triggers a reset/reap routine.
- Since Linux allocates a buffer on the APSS side, you can't have a situation where firmware can indefinitely hold memory.
- APSS is in effect the bus master here since it can assert/deassert RESET lines to the firmware, can control regulators and clocks.
So we should have some kind of watchdog logic here.
As alluded to above, what exactly do you do if firmware never returns a buffer ? Accept memory leak on the APSS side ?
Rather we should agree when it is appropriate to run a watchdog routine to
1. Timeout firmware not returning a buffer 2. Put the iris/venus hardware into reset 3. Reap leaked memory 4. Restart
I see we have IRQ based watchdog logic but, I don't see that it reaps memory.
In any case we should have the ability to reset iris and reclaim/reap memory in this type of situation.
Perhaps I'm off on a rant here but, this seems like a problem we should address with a more comprehensive solution.
--- bod
On 4/14/2025 3:56 PM, Bryan O'Donoghue wrote:
On 11/04/2025 13:10, Bryan O'Donoghue wrote:
On 08/04/2025 16:54, Dikshita Agarwal wrote:
Firmware might hold the DPB buffers for reference in case of sequence change, so skip destroying buffers for which QUEUED flag is not removed.
Cc: stable@vger.kernel.org Fixes: 73702f45db81 ("media: iris: allocate, initialize and queue internal buffers") Signed-off-by: Dikshita Agarwal quic_dikshita@quicinc.com
drivers/media/platform/qcom/iris/iris_buffer.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/drivers/media/platform/qcom/iris/iris_buffer.c b/drivers/ media/platform/qcom/iris/iris_buffer.c index e5c5a564fcb8..75fe63cc2327 100644 --- a/drivers/media/platform/qcom/iris/iris_buffer.c +++ b/drivers/media/platform/qcom/iris/iris_buffer.c @@ -396,6 +396,13 @@ int iris_destroy_internal_buffers(struct iris_inst *inst, u32 plane) for (i = 0; i < len; i++) { buffers = &inst->buffers[internal_buf_type[i]]; list_for_each_entry_safe(buf, next, &buffers->list, list) { + /* + * skip destroying internal(DPB) buffer if firmware + * did not return it. + */ + if (buf->attr & BUF_ATTR_QUEUED) + continue;
ret = iris_destroy_internal_buffer(inst, buf); if (ret) return ret;
iris_destroy_internal_buffers() is called from
- iris_vdec_streamon_output
- iris_venc_streamon_output
- iris_close
So if we skip releasing the buffer here, when will the memory be released ?
Particularly the kfree() in iris_destroy_internal_buffer() ?
iris_close -> iris_destroy_internal_buffers ! -> iris_destroy_buffer
Is a leak right ?
Good catch, Thanks!
bod
Thinking about this some more, I believe we should have some sort of reaping routine.
- The firmware fails to release a buffer, it is up to APSS/Linux
to run some kind of reaping routine. We can debate when is the right time to reset. Perhaps instead of ignoring the buffer as you have done here we schedule work with a timeout and if the timeout expires then this triggers a reset/reap routine.
- Since Linux allocates a buffer on the APSS side, you can't have a
situation where firmware can indefinitely hold memory.
- APSS is in effect the bus master here since it can assert/deassert
RESET lines to the firmware, can control regulators and clocks.
So we should have some kind of watchdog logic here.
As alluded to above, what exactly do you do if firmware never returns a buffer ? Accept memory leak on the APSS side ?
Rather we should agree when it is appropriate to run a watchdog routine to
- Timeout firmware not returning a buffer
- Put the iris/venus hardware into reset
- Reap leaked memory
- Restart
I see we have IRQ based watchdog logic but, I don't see that it reaps memory.
In any case we should have the ability to reset iris and reclaim/reap memory in this type of situation.
Perhaps I'm off on a rant here but, this seems like a problem we should address with a more comprehensive solution.
That's right, but we don't need to over complicate this.
We need to skip destroying these buffers for a running session so that the DPB buffers which are still being referenced by firmware are not lost. But these should be freed during session close which is missing in current code. Although firmware makes sure that during session close, all buffers are returned to driver and driver will release them but still we shouldn't rely for this on firmware and should handle in driver. Will fix this in next patch set.
Thanks, Dikshita
bod
Update the width, height and buffer size of CAPTURE based on the resolution set to OUTPUT via VIDIOC_S_FMT. This is required to set the updated capture resolution to firmware when S_FMT is called only for OUTPUT.
Cc: stable@vger.kernel.org Fixes: b530b95de22c ("media: iris: implement s_fmt, g_fmt and try_fmt ioctls") Signed-off-by: Dikshita Agarwal quic_dikshita@quicinc.com --- drivers/media/platform/qcom/iris/iris_vdec.c | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/drivers/media/platform/qcom/iris/iris_vdec.c b/drivers/media/platform/qcom/iris/iris_vdec.c index 4143acedfc57..c5d85936b3ae 100644 --- a/drivers/media/platform/qcom/iris/iris_vdec.c +++ b/drivers/media/platform/qcom/iris/iris_vdec.c @@ -171,6 +171,11 @@ int iris_vdec_s_fmt(struct iris_inst *inst, struct v4l2_format *f) output_fmt->fmt.pix_mp.ycbcr_enc = f->fmt.pix_mp.ycbcr_enc; output_fmt->fmt.pix_mp.quantization = f->fmt.pix_mp.quantization;
+ /* Update capture format based on new ip w/h */ + output_fmt->fmt.pix_mp.width = ALIGN(f->fmt.pix_mp.width, 128); + output_fmt->fmt.pix_mp.height = ALIGN(f->fmt.pix_mp.height, 32); + inst->buffers[BUF_OUTPUT].size = iris_get_buffer_size(inst, BUF_OUTPUT); + inst->crop.left = 0; inst->crop.top = 0; inst->crop.width = f->fmt.pix_mp.width;
On 08/04/2025 16:54, Dikshita Agarwal wrote:
Update the width, height and buffer size of CAPTURE based on the resolution set to OUTPUT via VIDIOC_S_FMT. This is required to set the updated capture resolution to firmware when S_FMT is called only for OUTPUT.
Cc: stable@vger.kernel.org Fixes: b530b95de22c ("media: iris: implement s_fmt, g_fmt and try_fmt ioctls") Signed-off-by: Dikshita Agarwal quic_dikshita@quicinc.com
drivers/media/platform/qcom/iris/iris_vdec.c | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/drivers/media/platform/qcom/iris/iris_vdec.c b/drivers/media/platform/qcom/iris/iris_vdec.c index 4143acedfc57..c5d85936b3ae 100644 --- a/drivers/media/platform/qcom/iris/iris_vdec.c +++ b/drivers/media/platform/qcom/iris/iris_vdec.c @@ -171,6 +171,11 @@ int iris_vdec_s_fmt(struct iris_inst *inst, struct v4l2_format *f) output_fmt->fmt.pix_mp.ycbcr_enc = f->fmt.pix_mp.ycbcr_enc; output_fmt->fmt.pix_mp.quantization = f->fmt.pix_mp.quantization;
/* Update capture format based on new ip w/h */
output_fmt->fmt.pix_mp.width = ALIGN(f->fmt.pix_mp.width, 128);
output_fmt->fmt.pix_mp.height = ALIGN(f->fmt.pix_mp.height, 32);
inst->buffers[BUF_OUTPUT].size = iris_get_buffer_size(inst, BUF_OUTPUT);
- inst->crop.left = 0; inst->crop.top = 0; inst->crop.width = f->fmt.pix_mp.width;
Reviewed-by: Bryan O'Donoghue bryan.odonoghue@linaro.org
The current check only considers the core error state before allowing writes to the HFI queues. However, the core can also transition to the deinit state due to a system error triggered by the response thread. In such cases, writing to the HFI queues should not be allowed.
Fix this by adding a check for the core deinit state, ensuring that writes are rejected when core is not in a valid state.
Cc: stable@vger.kernel.org Fixes: fb583a214337 ("media: iris: introduce host firmware interface with necessary hooks") Signed-off-by: Dikshita Agarwal quic_dikshita@quicinc.com --- drivers/media/platform/qcom/iris/iris_hfi_queue.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/media/platform/qcom/iris/iris_hfi_queue.c b/drivers/media/platform/qcom/iris/iris_hfi_queue.c index fac7df0c4d1a..221dcd09e1e1 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_queue.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_queue.c @@ -113,7 +113,7 @@ int iris_hfi_queue_cmd_write_locked(struct iris_core *core, void *pkt, u32 pkt_s { struct iris_iface_q_info *q_info = &core->command_queue;
- if (core->state == IRIS_CORE_ERROR) + if (core->state == IRIS_CORE_ERROR || core->state == IRIS_CORE_DEINIT) return -EINVAL;
if (!iris_hfi_queue_write(q_info, pkt, pkt_size)) {
HFI_PROPERTY_CONFIG_VDEC_POST_LOOP_DEBLOCKER is deprecated and no longer supported on current firmware, remove setting the same to firmware.
At the same time, remove the check for non-zero number of v4l2 controls as some SOC might not expose any capability which requires v4l2 control.
Cc: stable@vger.kernel.org Fixes: 79865252acb6 ("media: iris: enable video driver probe of SM8250 SoC") Signed-off-by: Dikshita Agarwal quic_dikshita@quicinc.com --- drivers/media/platform/qcom/iris/iris_ctrls.c | 6 ------ drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c | 8 -------- drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h | 1 - drivers/media/platform/qcom/iris/iris_platform_common.h | 2 +- drivers/media/platform/qcom/iris/iris_platform_sm8250.c | 9 --------- 5 files changed, 1 insertion(+), 25 deletions(-)
diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.c b/drivers/media/platform/qcom/iris/iris_ctrls.c index b690578256d5..915de101fcba 100644 --- a/drivers/media/platform/qcom/iris/iris_ctrls.c +++ b/drivers/media/platform/qcom/iris/iris_ctrls.c @@ -17,8 +17,6 @@ static inline bool iris_valid_cap_id(enum platform_inst_fw_cap_type cap_id) static enum platform_inst_fw_cap_type iris_get_cap_id(u32 id) { switch (id) { - case V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER: - return DEBLOCK; case V4L2_CID_MPEG_VIDEO_H264_PROFILE: return PROFILE; case V4L2_CID_MPEG_VIDEO_H264_LEVEL: @@ -34,8 +32,6 @@ static u32 iris_get_v4l2_id(enum platform_inst_fw_cap_type cap_id) return 0;
switch (cap_id) { - case DEBLOCK: - return V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER; case PROFILE: return V4L2_CID_MPEG_VIDEO_H264_PROFILE; case LEVEL: @@ -84,8 +80,6 @@ int iris_ctrls_init(struct iris_inst *inst) if (iris_get_v4l2_id(cap[idx].cap_id)) num_ctrls++; } - if (!num_ctrls) - return -EINVAL;
/* Adding 1 to num_ctrls to include V4L2_CID_MIN_BUFFERS_FOR_CAPTURE */
diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c index 2239708d2d7e..f9f3e2d2ce29 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c @@ -490,14 +490,6 @@ iris_hfi_gen1_packet_session_set_property(struct hfi_session_set_property_pkt *p packet->shdr.hdr.size += sizeof(u32) + sizeof(*wm); break; } - case HFI_PROPERTY_CONFIG_VDEC_POST_LOOP_DEBLOCKER: { - struct hfi_enable *en = prop_data; - u32 *in = pdata; - - en->enable = *in; - packet->shdr.hdr.size += sizeof(u32) + sizeof(*en); - break; - } default: return -EINVAL; } diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h b/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h index 93b5f838c290..adffcead58ea 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_defines.h @@ -65,7 +65,6 @@
#define HFI_PROPERTY_CONFIG_BUFFER_REQUIREMENTS 0x202001
-#define HFI_PROPERTY_CONFIG_VDEC_POST_LOOP_DEBLOCKER 0x1200001 #define HFI_PROPERTY_PARAM_VDEC_DPB_COUNTS 0x120300e #define HFI_PROPERTY_CONFIG_VDEC_ENTROPY 0x1204004
diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/drivers/media/platform/qcom/iris/iris_platform_common.h index f6b15d2805fb..c00fd4a83ba7 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_common.h +++ b/drivers/media/platform/qcom/iris/iris_platform_common.h @@ -87,7 +87,7 @@ enum platform_inst_fw_cap_type { CODED_FRAMES, BIT_DEPTH, RAP_FRAME, - DEBLOCK, + TIER, INST_FW_CAP_MAX, };
diff --git a/drivers/media/platform/qcom/iris/iris_platform_sm8250.c b/drivers/media/platform/qcom/iris/iris_platform_sm8250.c index 5c86fd7b7b6f..543fa2661539 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_sm8250.c +++ b/drivers/media/platform/qcom/iris/iris_platform_sm8250.c @@ -30,15 +30,6 @@ static struct platform_inst_fw_cap inst_fw_cap_sm8250[] = { .hfi_id = HFI_PROPERTY_PARAM_WORK_MODE, .set = iris_set_stage, }, - { - .cap_id = DEBLOCK, - .min = 0, - .max = 1, - .step_or_mask = 1, - .value = 0, - .hfi_id = HFI_PROPERTY_CONFIG_VDEC_POST_LOOP_DEBLOCKER, - .set = iris_set_u32, - }, };
static struct platform_inst_caps platform_inst_cap_sm8250 = {
The function pointers responsible for setting firmware properties were never initialized in the instance capability structure, causing it to remain NULL. As a result, the firmware properties were not being set correctly.
Fix this by properly assigning the function pointers from the core capability to the instance capability, ensuring that the properties are correctly applied to the firmware.
Cc: stable@vger.kernel.org Fixes: 3a19d7b9e08b ("media: iris: implement set properties to firmware during streamon") Signed-off-by: Dikshita Agarwal quic_dikshita@quicinc.com --- drivers/media/platform/qcom/iris/iris_ctrls.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/drivers/media/platform/qcom/iris/iris_ctrls.c b/drivers/media/platform/qcom/iris/iris_ctrls.c index 915de101fcba..13f5cf0d0e8a 100644 --- a/drivers/media/platform/qcom/iris/iris_ctrls.c +++ b/drivers/media/platform/qcom/iris/iris_ctrls.c @@ -157,6 +157,7 @@ void iris_session_init_caps(struct iris_core *core) core->inst_fw_caps[cap_id].value = caps[i].value; core->inst_fw_caps[cap_id].flags = caps[i].flags; core->inst_fw_caps[cap_id].hfi_id = caps[i].hfi_id; + core->inst_fw_caps[cap_id].set = caps[i].set; } }
A warning reported by smatch indicated a possible null pointer dereference where one of the arguments to API "iris_hfi_gen2_handle_system_error" could sometimes be null.
To fix this, add a check to validate that the argument passed is not null before accessing its members.
Cc: stable@vger.kernel.org Fixes: fb583a214337 ("media: iris: introduce host firmware interface with necessary hooks") Reported-by: Dan Carpenter dan.carpenter@linaro.org Closes: https://lore.kernel.org/linux-media/634cc9b8-f099-4b54-8556-d879fb2b5169@sta... Signed-off-by: Dikshita Agarwal quic_dikshita@quicinc.com --- drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c b/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c index de823a314efd..2267e220c9ea 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c @@ -267,7 +267,8 @@ static int iris_hfi_gen2_handle_system_error(struct iris_core *core, { struct iris_inst *instance;
- dev_err(core->dev, "received system error of type %#x\n", pkt->type); + if (pkt) + dev_err(core->dev, "received system error of type %#x\n", pkt->type);
core->state = IRIS_CORE_ERROR;
Correct a typo from "dpeth" to "depth".
Cc: stable@vger.kernel.org Fixes: 3a19d7b9e08b ("media: iris: implement set properties to firmware during streamon") Signed-off-by: Dikshita Agarwal quic_dikshita@quicinc.com --- drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c index a908b41e2868..802fa62c26eb 100644 --- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c +++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_command.c @@ -178,7 +178,7 @@ static int iris_hfi_gen2_set_crop_offsets(struct iris_inst *inst) sizeof(u64)); }
-static int iris_hfi_gen2_set_bit_dpeth(struct iris_inst *inst) +static int iris_hfi_gen2_set_bit_depth(struct iris_inst *inst) { struct iris_inst_hfi_gen2 *inst_hfi_gen2 = to_iris_inst_hfi_gen2(inst); u32 port = iris_hfi_gen2_get_port(V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE); @@ -378,7 +378,7 @@ static int iris_hfi_gen2_session_set_config_params(struct iris_inst *inst, u32 p {HFI_PROP_BITSTREAM_RESOLUTION, iris_hfi_gen2_set_bitstream_resolution }, {HFI_PROP_CROP_OFFSETS, iris_hfi_gen2_set_crop_offsets }, {HFI_PROP_CODED_FRAMES, iris_hfi_gen2_set_coded_frames }, - {HFI_PROP_LUMA_CHROMA_BIT_DEPTH, iris_hfi_gen2_set_bit_dpeth }, + {HFI_PROP_LUMA_CHROMA_BIT_DEPTH, iris_hfi_gen2_set_bit_depth }, {HFI_PROP_BUFFER_FW_MIN_OUTPUT_COUNT, iris_hfi_gen2_set_min_output_count }, {HFI_PROP_PIC_ORDER_CNT_TYPE, iris_hfi_gen2_set_picture_order_count }, {HFI_PROP_SIGNAL_COLOR_INFO, iris_hfi_gen2_set_colorspace },
Hi,
This is for Bryan and Vikash to review first, but here's some initial feedback on that report.
Le mardi 08 avril 2025 à 21:24 +0530, Dikshita Agarwal a écrit :
Hi All,
This patch series adds initial support for the HEVC(H.265) and VP9 codecs in iris decoder. The objective of this work is to extend the decoder's capabilities to handle HEVC and VP9 codec streams, including necessary format handling and buffer management. In addition, the series also includes a set of fixes to address issues identified during testing of these additional codecs.
These patches also address the comments and feedback received from the RFC patches previously sent. I have made the necessary improvements based on the community's suggestions.
Changes sinces RFC:
- Added additional fixes to address issues identified during further
testing.
- Moved typo fix to a seperate patch [Neil]
- Reordered the patches for better logical flow and clarity [Neil,
Dmitry]
- Added fixes tag wherever applicable [Neil, Dmitry]
- Removed the default case in the switch statement for codecs [Bryan]
- Replaced if-else statements with switch-case [Bryan]
- Added comments for mbpf [Bryan]
- RFC: https://lore.kernel.org/linux-media/20250305104335.3629945-1-quic_dikshita@q...
These patches are tested on SM8250 and SM8550 with v4l2-ctl and Gstreamer for HEVC and VP9 decoders, at the same time ensured that the existing H264 decoder functionality remains uneffected.
Note: 1 of the fluster compliance test is fixed with firmware [1] [1]: https://lore.kernel.org/linux-firmware/1a511921-446d-cdc4-0203-084c88a5dc1e@...
The result of fluster test on SM8550: 131/147 testcases passed while testing JCT-VC-HEVC_V1 with GStreamer-H.265-V4L2-Gst1.0. The failing test case: - 10 testcases failed due to unsupported 10 bit format. - DBLK_A_MAIN10_VIXS_4 - INITQP_B_Main10_Sony_1 - TSUNEQBD_A_MAIN10_Technicolor_2 - WP_A_MAIN10_Toshiba_3 - WP_MAIN10_B_Toshiba_3 - WPP_A_ericsson_MAIN10_2 - WPP_B_ericsson_MAIN10_2 - WPP_C_ericsson_MAIN10_2 - WPP_E_ericsson_MAIN10_2 - WPP_F_ericsson_MAIN10_2 - 4 testcase failed due to unsupported resolution - PICSIZE_A_Bossen_1 - PICSIZE_B_Bossen_1 - WPP_D_ericsson_MAIN10_2 - WPP_D_ericsson_MAIN_2 - 1 testcase failed as bitstream is invalid (this fails with reference as well) - RAP_B_Bossen_2
I was surprised of this comment, so I ran it myself through the official JCT reference decoder.
[JCT-VC-HEVC_V1] (JCT-VT-H.265) RAP_B_Bossen_2 ... Success
I'm pretty sure this stream is valid. I personally care about these reports since otherwise we cannot differentiate HW limitation, FW bugs or V4L2 API limitation. The later is really something we want to know about, since we can fix it. We cannot fix HW, and its up to the vendor to fix their firmware.
This specific test is very nice test. It changes the coding width/height but keeps the conf window the same (416x240).
Here's the coded size changes I could see:
Frame 0: 448 x 256 Frame 25: 416 x 240 Frame 70: 448 x 256
Each time, the driver must sent SRC_CHANGE, and if all went well, the decoder should reallocate. Note that all this code in GStreamer is recent, so it also a possibility, but something we can fix. I haven't tried ffmpeg much, but same.
- 1 testcase failed due to CRC mismatch - RAP_A_docomo_6 Analysis - First few frames in this discarded by firmware and are sent to driver with 0 filled length. Driver send such buffers to client with timestamp 0 and payload set to 0 and make buf state to VB2_BUF_STATE_ERROR. Such buffers should be dropped by GST. But instead, the first frame displayed as green frame and when a valid buffer is sent to client later with same 0 timestamp, its dropped, leading to CRC mismatch for first frame.
This looks like a firmware bug, even if GStreamer had drop them all, the CRC would still miss-match.
Important question is if this worked on Venus firmware ? If so, it sounds like it should be addressed.
235/305 testcases passed while testing VP9-TEST-VECTORS with GStreamer-VP9-V4L2-Gst1.0. The failing test case: - 64 testcases failed due to unsupported resolution - vp90-2-02-size-08x08.webm - vp90-2-02-size-08x10.webm - vp90-2-02-size-08x16.webm - vp90-2-02-size-08x18.webm - vp90-2-02-size-08x32.webm - vp90-2-02-size-08x34.webm - vp90-2-02-size-08x64.webm - vp90-2-02-size-08x66.webm - vp90-2-02-size-10x08.webm - vp90-2-02-size-10x10.webm - vp90-2-02-size-10x16.webm - vp90-2-02-size-10x18.webm - vp90-2-02-size-10x32.webm - vp90-2-02-size-10x34.webm - vp90-2-02-size-10x64.webm - vp90-2-02-size-10x66.webm - vp90-2-02-size-16x08.webm - vp90-2-02-size-16x10.webm - vp90-2-02-size-16x16.webm - vp90-2-02-size-16x18.webm - vp90-2-02-size-16x32.webm - vp90-2-02-size-16x34.webm - vp90-2-02-size-16x64.webm - vp90-2-02-size-16x66.webm - vp90-2-02-size-18x08.webm - vp90-2-02-size-18x10.webm - vp90-2-02-size-18x16.webm - vp90-2-02-size-18x18.webm - vp90-2-02-size-18x32.webm - vp90-2-02-size-18x34.webm - vp90-2-02-size-18x64.webm - vp90-2-02-size-18x66.webm - vp90-2-02-size-32x08.webm - vp90-2-02-size-32x10.webm - vp90-2-02-size-32x16.webm - vp90-2-02-size-32x18.webm - vp90-2-02-size-32x32.webm - vp90-2-02-size-32x34.webm - vp90-2-02-size-32x64.webm - vp90-2-02-size-32x66.webm - vp90-2-02-size-34x08.webm - vp90-2-02-size-34x10.webm - vp90-2-02-size-34x16.webm - vp90-2-02-size-34x18.webm - vp90-2-02-size-34x32.webm - vp90-2-02-size-34x34.webm - vp90-2-02-size-34x64.webm - vp90-2-02-size-34x66.webm - vp90-2-02-size-64x08.webm - vp90-2-02-size-64x10.webm - vp90-2-02-size-64x16.webm - vp90-2-02-size-64x18.webm - vp90-2-02-size-64x32.webm - vp90-2-02-size-64x34.webm - vp90-2-02-size-64x64.webm - vp90-2-02-size-64x66.webm - vp90-2-02-size-66x08.webm - vp90-2-02-size-66x10.webm - vp90-2-02-size-66x16.webm - vp90-2-02-size-66x18.webm - vp90-2-02-size-66x32.webm - vp90-2-02-size-66x34.webm - vp90-2-02-size-66x64.webm - vp90-2-02-size-66x66.webm - 2 testcases failed due to unsupported format - vp91-2-04-yuv422.webm - vp91-2-04-yuv444.webm - 1 testcase failed with CRC mismatch (fails with ref decoder as well) - vp90-2-22-svc_1280x720_3.ivf
Not completely true:
[VP9-TEST-VECTORS] (libvpx-VP9) vp90-2-22-svc_1280x720_3.ivf ... Success
But fails with the GStreamer libvpx integration. Would you mind filling an issue please ? There is clearly a GStreamer bug (not a reference one), please document it as-such in the next report.
- 2 testcase failed due to unsupported resolution after sequence change - vp90-2-21-resize_inter_320x180_5_1-2.webm - vp90-2-21-resize_inter_320x180_7_1-2.webm
Just be more precise, inter-frame resolution changes are not currently supported in V4L2 stateful decoders. The concept and internals are ready though. Basically, userpace would have to progressively re- allocate the frames as they get dequeued, before being re-queued. That is significant userspace modification, fine to not support it atm.
- 1 testcase failed due to unsupported stream - vp90-2-16-intra-only.webm Note: There is a timing issue with the clips having multiple resolution change. Where firmware returned all the buffers with previous sequence and has no buffer left to attach the LAST flag to. At the same time, client is not queueing any further buffers, so there is deadlock where client is waiting for LAST flag, while firmware doesn't have any capture buffer to attach LAST flag to. Ideally client should keep queueing the buffers on capture queue untill the LAST flag is received.
At least GStreamer do, so I slightly doubt your analyzes (happy to see a bug report with relevant demonstration showing that !). I'll read it as there is still bug with the resolution change draining process in this driver.
The result of fluster test on SM8250: 132/147 testcases passed while testing JCT-VC-HEVC_V1 with GStreamer-H.265-V4L2-Gst1.0. The failing test case: - 10 testcases failed due to unsupported 10 bit format. - DBLK_A_MAIN10_VIXS_4 - INITQP_B_Main10_Sony_1 - TSUNEQBD_A_MAIN10_Technicolor_2 - WP_A_MAIN10_Toshiba_3 - WP_MAIN10_B_Toshiba_3 - WPP_A_ericsson_MAIN10_2 - WPP_B_ericsson_MAIN10_2 - WPP_C_ericsson_MAIN10_2 - WPP_E_ericsson_MAIN10_2 - WPP_F_ericsson_MAIN10_2 - 4 testcase failed due to unsupported resolution - PICSIZE_A_Bossen_1 - PICSIZE_B_Bossen_1 - WPP_D_ericsson_MAIN10_2 - WPP_D_ericsson_MAIN_2 - 1 testcase failed as bitstream is invalid (this fails with reference as well) - RAP_B_Bossen_2
232/305 testcases passed while testing VP9-TEST-VECTORS with GStreamer-VP9-V4L2-Gst1.0. The failing test case: - 64 testcases failed due to unsupported resolution - vp90-2-02-size-08x08.webm - vp90-2-02-size-08x10.webm - vp90-2-02-size-08x16.webm - vp90-2-02-size-08x18.webm - vp90-2-02-size-08x32.webm - vp90-2-02-size-08x34.webm - vp90-2-02-size-08x64.webm - vp90-2-02-size-08x66.webm - vp90-2-02-size-10x08.webm - vp90-2-02-size-10x10.webm - vp90-2-02-size-10x16.webm - vp90-2-02-size-10x18.webm - vp90-2-02-size-10x32.webm - vp90-2-02-size-10x34.webm - vp90-2-02-size-10x64.webm - vp90-2-02-size-10x66.webm - vp90-2-02-size-16x08.webm - vp90-2-02-size-16x10.webm - vp90-2-02-size-16x16.webm - vp90-2-02-size-16x18.webm - vp90-2-02-size-16x32.webm - vp90-2-02-size-16x34.webm - vp90-2-02-size-16x64.webm - vp90-2-02-size-16x66.webm - vp90-2-02-size-18x08.webm - vp90-2-02-size-18x10.webm - vp90-2-02-size-18x16.webm - vp90-2-02-size-18x18.webm - vp90-2-02-size-18x32.webm - vp90-2-02-size-18x34.webm - vp90-2-02-size-18x64.webm - vp90-2-02-size-18x66.webm - vp90-2-02-size-32x08.webm - vp90-2-02-size-32x10.webm - vp90-2-02-size-32x16.webm - vp90-2-02-size-32x18.webm - vp90-2-02-size-32x32.webm - vp90-2-02-size-32x34.webm - vp90-2-02-size-32x64.webm - vp90-2-02-size-32x66.webm - vp90-2-02-size-34x08.webm - vp90-2-02-size-34x10.webm - vp90-2-02-size-34x16.webm - vp90-2-02-size-34x18.webm - vp90-2-02-size-34x32.webm - vp90-2-02-size-34x34.webm - vp90-2-02-size-34x64.webm - vp90-2-02-size-34x66.webm - vp90-2-02-size-64x08.webm - vp90-2-02-size-64x10.webm - vp90-2-02-size-64x16.webm - vp90-2-02-size-64x18.webm - vp90-2-02-size-64x32.webm - vp90-2-02-size-64x34.webm - vp90-2-02-size-64x64.webm - vp90-2-02-size-64x66.webm - vp90-2-02-size-66x08.webm - vp90-2-02-size-66x10.webm - vp90-2-02-size-66x16.webm - vp90-2-02-size-66x18.webm - vp90-2-02-size-66x32.webm - vp90-2-02-size-66x34.webm - vp90-2-02-size-66x64.webm - vp90-2-02-size-66x66.webm - 2 testcases failed due to unsupported format - vp91-2-04-yuv422.webm - vp91-2-04-yuv444.webm - 1 testcase failed with CRC mismatch (fails with ref decoder as well) - vp90-2-22-svc_1280x720_3.ivf - 5 testcase failed due to unsupported resolution after sequence change - vp90-2-21-resize_inter_320x180_5_1-2.webm - vp90-2-21-resize_inter_320x180_7_1-2.webm - vp90-2-21-resize_inter_320x240_5_1-2.webm - vp90-2-21-resize_inter_320x240_7_1-2.webm - vp90-2-18-resize.ivf - 1 testcase failed with CRC mismatch - vp90-2-16-intra-only.webm Analysis: First few frames are marked by firmware as NO_SHOW frame. Driver make buf state to VB2_BUF_STATE_ERROR for such frames. Such buffers should be dropped by GST. But instead, the first frame is being displayed and when a valid buffer is sent to client later with same timestamp, its dropped, leading to CRC mismatch for first frame.
I checked this one, 3 first frame are "decode only" indeed. Though, by returning these buffer with STATE_ERROR, you loose the ability to show these frame later. GStreamer should be fixed to do internal ref frame management, not silently drop these though.
What you can do instead, is leave these frames queued, and only mark them done once you hit a matching show_existing_frame. It will fix this specific stream (and most usage of show existing frame in the wild), but show-existing frame will remain broken. The other solution is to keep the reference frame internal, and output copies, but that imply some HW design, and also cost quite a lot in bandwidth.
This test hits the known V4L2 queue limitation that it can only output a frame once, and can only input a frame once (you cannot encode twice the same frame notably). I open to suggestion how to fix those, but I don't have any solutions for now.
p.s. a third solution is make the firmware stateless :-D
Note: Same timing issue as observed on SM8550 is seen on SM8250 as well.
Signed-off-by: Dikshita Agarwal quic_dikshita@quicinc.com
Dikshita Agarwal (20): media: iris: Skip destroying internal buffer if not dequeued media: iris: Update CAPTURE format info based on OUTPUT format media: iris: Add handling for corrupt and drop frames media: iris: Avoid updating frame size to firmware during reconfig media: iris: Send V4L2_BUF_FLAG_ERROR for buffers with 0 filled length media: iris: Add handling for no show frames media: iris: Improve last flag handling media: iris: Skip flush on first sequence change media: iris: Prevent HFI queue writes when core is in deinit state media: iris: Remove redundant buffer count check in stream off media: iris: Remove deprecated property setting to firmware media: iris: Fix missing function pointer initialization media: iris: Fix NULL pointer dereference media: iris: Fix typo in depth variable media: iris: Add a comment to explain usage of MBPS media: iris: Add HEVC and VP9 formats for decoder media: iris: Add platform capabilities for HEVC and VP9 decoders media: iris: Set mandatory properties for HEVC and VP9 decoders. media: iris: Add internal buffer calculation for HEVC and VP9 decoders media: iris: Add codec specific check for VP9 decoder drain handling
drivers/media/platform/qcom/iris/iris_buffer.c | 22 +- drivers/media/platform/qcom/iris/iris_ctrls.c | 35 +- drivers/media/platform/qcom/iris/iris_hfi_common.h | 1 + .../platform/qcom/iris/iris_hfi_gen1_command.c | 44 ++- .../platform/qcom/iris/iris_hfi_gen1_defines.h | 5 +- .../platform/qcom/iris/iris_hfi_gen1_response.c | 22 +- .../platform/qcom/iris/iris_hfi_gen2_command.c | 143 +++++++- .../platform/qcom/iris/iris_hfi_gen2_defines.h | 5 + .../platform/qcom/iris/iris_hfi_gen2_response.c | 57 ++- drivers/media/platform/qcom/iris/iris_hfi_queue.c | 2 +- drivers/media/platform/qcom/iris/iris_instance.h | 6 + .../platform/qcom/iris/iris_platform_common.h | 28 +- .../platform/qcom/iris/iris_platform_sm8250.c | 15 +- .../platform/qcom/iris/iris_platform_sm8550.c | 143 +++++++- drivers/media/platform/qcom/iris/iris_vb2.c | 3 +- drivers/media/platform/qcom/iris/iris_vdec.c | 113 +++--- drivers/media/platform/qcom/iris/iris_vdec.h | 11 + drivers/media/platform/qcom/iris/iris_vidc.c | 3 - drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 397 ++++++++++++++++++++- drivers/media/platform/qcom/iris/iris_vpu_buffer.h | 46 ++- 20 files changed, 948 insertions(+), 153 deletions(-)
base-commit: 7824b91d23e9f255f0e9d2acaa74265c9cac2e9c change-id: 20250402-iris-dec-hevc-vp9-2654a1fc4d0d
Best regards,
On 08/04/2025 16:54, Dikshita Agarwal wrote:
Hi All,
This patch series adds initial support for the HEVC(H.265) and VP9 codecs in iris decoder. The objective of this work is to extend the decoder's capabilities to handle HEVC and VP9 codec streams, including necessary format handling and buffer management. In addition, the series also includes a set of fixes to address issues identified during testing of these additional codecs.
These patches also address the comments and feedback received from the RFC patches previously sent. I have made the necessary improvements based on the community's suggestions.
Changes sinces RFC:
- Added additional fixes to address issues identified during further
testing.
- Moved typo fix to a seperate patch [Neil]
- Reordered the patches for better logical flow and clarity [Neil,
Dmitry]
- Added fixes tag wherever applicable [Neil, Dmitry]
- Removed the default case in the switch statement for codecs [Bryan]
- Replaced if-else statements with switch-case [Bryan]
- Added comments for mbpf [Bryan]
- RFC: https://lore.kernel.org/linux-media/20250305104335.3629945-1-quic_dikshita@q...
These patches are tested on SM8250 and SM8550 with v4l2-ctl and Gstreamer for HEVC and VP9 decoders, at the same time ensured that the existing H264 decoder functionality remains uneffected.
Note: 1 of the fluster compliance test is fixed with firmware [1] [1]: https://lore.kernel.org/linux-firmware/1a511921-446d-cdc4-0203-084c88a5dc1e@...
The result of fluster test on SM8550: 131/147 testcases passed while testing JCT-VC-HEVC_V1 with GStreamer-H.265-V4L2-Gst1.0. The failing test case:
- 10 testcases failed due to unsupported 10 bit format.
- DBLK_A_MAIN10_VIXS_4
- INITQP_B_Main10_Sony_1
- TSUNEQBD_A_MAIN10_Technicolor_2
- WP_A_MAIN10_Toshiba_3
- WP_MAIN10_B_Toshiba_3
- WPP_A_ericsson_MAIN10_2
- WPP_B_ericsson_MAIN10_2
- WPP_C_ericsson_MAIN10_2
- WPP_E_ericsson_MAIN10_2
- WPP_F_ericsson_MAIN10_2
- 4 testcase failed due to unsupported resolution
- PICSIZE_A_Bossen_1
- PICSIZE_B_Bossen_1
- WPP_D_ericsson_MAIN10_2
- WPP_D_ericsson_MAIN_2
- 1 testcase failed as bitstream is invalid (this fails with reference as well)
- RAP_B_Bossen_2
- 1 testcase failed due to CRC mismatch
- RAP_A_docomo_6 Analysis - First few frames in this discarded by firmware and are sent to driver with 0 filled length. Driver send such buffers to client with timestamp 0 and payload set to 0 and make buf state to VB2_BUF_STATE_ERROR. Such buffers should be dropped by GST. But instead, the first frame displayed as green frame and when a valid buffer is sent to client later with same 0 timestamp, its dropped, leading to CRC mismatch for first frame.
235/305 testcases passed while testing VP9-TEST-VECTORS with GStreamer-VP9-V4L2-Gst1.0. The failing test case:
- 64 testcases failed due to unsupported resolution
- vp90-2-02-size-08x08.webm
- vp90-2-02-size-08x10.webm
- vp90-2-02-size-08x16.webm
- vp90-2-02-size-08x18.webm
- vp90-2-02-size-08x32.webm
- vp90-2-02-size-08x34.webm
- vp90-2-02-size-08x64.webm
- vp90-2-02-size-08x66.webm
- vp90-2-02-size-10x08.webm
- vp90-2-02-size-10x10.webm
- vp90-2-02-size-10x16.webm
- vp90-2-02-size-10x18.webm
- vp90-2-02-size-10x32.webm
- vp90-2-02-size-10x34.webm
- vp90-2-02-size-10x64.webm
- vp90-2-02-size-10x66.webm
- vp90-2-02-size-16x08.webm
- vp90-2-02-size-16x10.webm
- vp90-2-02-size-16x16.webm
- vp90-2-02-size-16x18.webm
- vp90-2-02-size-16x32.webm
- vp90-2-02-size-16x34.webm
- vp90-2-02-size-16x64.webm
- vp90-2-02-size-16x66.webm
- vp90-2-02-size-18x08.webm
- vp90-2-02-size-18x10.webm
- vp90-2-02-size-18x16.webm
- vp90-2-02-size-18x18.webm
- vp90-2-02-size-18x32.webm
- vp90-2-02-size-18x34.webm
- vp90-2-02-size-18x64.webm
- vp90-2-02-size-18x66.webm
- vp90-2-02-size-32x08.webm
- vp90-2-02-size-32x10.webm
- vp90-2-02-size-32x16.webm
- vp90-2-02-size-32x18.webm
- vp90-2-02-size-32x32.webm
- vp90-2-02-size-32x34.webm
- vp90-2-02-size-32x64.webm
- vp90-2-02-size-32x66.webm
- vp90-2-02-size-34x08.webm
- vp90-2-02-size-34x10.webm
- vp90-2-02-size-34x16.webm
- vp90-2-02-size-34x18.webm
- vp90-2-02-size-34x32.webm
- vp90-2-02-size-34x34.webm
- vp90-2-02-size-34x64.webm
- vp90-2-02-size-34x66.webm
- vp90-2-02-size-64x08.webm
- vp90-2-02-size-64x10.webm
- vp90-2-02-size-64x16.webm
- vp90-2-02-size-64x18.webm
- vp90-2-02-size-64x32.webm
- vp90-2-02-size-64x34.webm
- vp90-2-02-size-64x64.webm
- vp90-2-02-size-64x66.webm
- vp90-2-02-size-66x08.webm
- vp90-2-02-size-66x10.webm
- vp90-2-02-size-66x16.webm
- vp90-2-02-size-66x18.webm
- vp90-2-02-size-66x32.webm
- vp90-2-02-size-66x34.webm
- vp90-2-02-size-66x64.webm
- vp90-2-02-size-66x66.webm
- 2 testcases failed due to unsupported format
- vp91-2-04-yuv422.webm
- vp91-2-04-yuv444.webm
- 1 testcase failed with CRC mismatch (fails with ref decoder as well)
- vp90-2-22-svc_1280x720_3.ivf
- 2 testcase failed due to unsupported resolution after sequence change
- vp90-2-21-resize_inter_320x180_5_1-2.webm
- vp90-2-21-resize_inter_320x180_7_1-2.webm
- 1 testcase failed due to unsupported stream
- vp90-2-16-intra-only.webm
Note: There is a timing issue with the clips having multiple resolution change. Where firmware returned all the buffers with previous sequence and has no buffer left to attach the LAST flag to. At the same time, client is not queueing any further buffers, so there is deadlock where client is waiting for LAST flag, while firmware doesn't have any capture buffer to attach LAST flag to. Ideally client should keep queueing the buffers on capture queue untill the LAST flag is received.
The result of fluster test on SM8250: 132/147 testcases passed while testing JCT-VC-HEVC_V1 with GStreamer-H.265-V4L2-Gst1.0. The failing test case:
- 10 testcases failed due to unsupported 10 bit format.
- DBLK_A_MAIN10_VIXS_4
- INITQP_B_Main10_Sony_1
- TSUNEQBD_A_MAIN10_Technicolor_2
- WP_A_MAIN10_Toshiba_3
- WP_MAIN10_B_Toshiba_3
- WPP_A_ericsson_MAIN10_2
- WPP_B_ericsson_MAIN10_2
- WPP_C_ericsson_MAIN10_2
- WPP_E_ericsson_MAIN10_2
- WPP_F_ericsson_MAIN10_2
- 4 testcase failed due to unsupported resolution
- PICSIZE_A_Bossen_1
- PICSIZE_B_Bossen_1
- WPP_D_ericsson_MAIN10_2
- WPP_D_ericsson_MAIN_2
- 1 testcase failed as bitstream is invalid (this fails with reference as well)
- RAP_B_Bossen_2
232/305 testcases passed while testing VP9-TEST-VECTORS with GStreamer-VP9-V4L2-Gst1.0. The failing test case:
- 64 testcases failed due to unsupported resolution
- vp90-2-02-size-08x08.webm
- vp90-2-02-size-08x10.webm
- vp90-2-02-size-08x16.webm
- vp90-2-02-size-08x18.webm
- vp90-2-02-size-08x32.webm
- vp90-2-02-size-08x34.webm
- vp90-2-02-size-08x64.webm
- vp90-2-02-size-08x66.webm
- vp90-2-02-size-10x08.webm
- vp90-2-02-size-10x10.webm
- vp90-2-02-size-10x16.webm
- vp90-2-02-size-10x18.webm
- vp90-2-02-size-10x32.webm
- vp90-2-02-size-10x34.webm
- vp90-2-02-size-10x64.webm
- vp90-2-02-size-10x66.webm
- vp90-2-02-size-16x08.webm
- vp90-2-02-size-16x10.webm
- vp90-2-02-size-16x16.webm
- vp90-2-02-size-16x18.webm
- vp90-2-02-size-16x32.webm
- vp90-2-02-size-16x34.webm
- vp90-2-02-size-16x64.webm
- vp90-2-02-size-16x66.webm
- vp90-2-02-size-18x08.webm
- vp90-2-02-size-18x10.webm
- vp90-2-02-size-18x16.webm
- vp90-2-02-size-18x18.webm
- vp90-2-02-size-18x32.webm
- vp90-2-02-size-18x34.webm
- vp90-2-02-size-18x64.webm
- vp90-2-02-size-18x66.webm
- vp90-2-02-size-32x08.webm
- vp90-2-02-size-32x10.webm
- vp90-2-02-size-32x16.webm
- vp90-2-02-size-32x18.webm
- vp90-2-02-size-32x32.webm
- vp90-2-02-size-32x34.webm
- vp90-2-02-size-32x64.webm
- vp90-2-02-size-32x66.webm
- vp90-2-02-size-34x08.webm
- vp90-2-02-size-34x10.webm
- vp90-2-02-size-34x16.webm
- vp90-2-02-size-34x18.webm
- vp90-2-02-size-34x32.webm
- vp90-2-02-size-34x34.webm
- vp90-2-02-size-34x64.webm
- vp90-2-02-size-34x66.webm
- vp90-2-02-size-64x08.webm
- vp90-2-02-size-64x10.webm
- vp90-2-02-size-64x16.webm
- vp90-2-02-size-64x18.webm
- vp90-2-02-size-64x32.webm
- vp90-2-02-size-64x34.webm
- vp90-2-02-size-64x64.webm
- vp90-2-02-size-64x66.webm
- vp90-2-02-size-66x08.webm
- vp90-2-02-size-66x10.webm
- vp90-2-02-size-66x16.webm
- vp90-2-02-size-66x18.webm
- vp90-2-02-size-66x32.webm
- vp90-2-02-size-66x34.webm
- vp90-2-02-size-66x64.webm
- vp90-2-02-size-66x66.webm
- 2 testcases failed due to unsupported format
- vp91-2-04-yuv422.webm
- vp91-2-04-yuv444.webm
- 1 testcase failed with CRC mismatch (fails with ref decoder as well)
- vp90-2-22-svc_1280x720_3.ivf
- 5 testcase failed due to unsupported resolution after sequence change
- vp90-2-21-resize_inter_320x180_5_1-2.webm
- vp90-2-21-resize_inter_320x180_7_1-2.webm
- vp90-2-21-resize_inter_320x240_5_1-2.webm
- vp90-2-21-resize_inter_320x240_7_1-2.webm
- vp90-2-18-resize.ivf
- 1 testcase failed with CRC mismatch
Analysis: First few frames are marked by firmware as NO_SHOW frame. Driver make buf state to VB2_BUF_STATE_ERROR for such frames. Such buffers should be dropped by GST. But instead, the first frame is being displayed and when a valid buffer is sent to client later with same timestamp, its dropped, leading to CRC mismatch for first frame.
- vp90-2-16-intra-only.webm
Note: Same timing issue as observed on SM8550 is seen on SM8250 as well.
Signed-off-by: Dikshita Agarwal quic_dikshita@quicinc.com
Dikshita Agarwal (20): media: iris: Skip destroying internal buffer if not dequeued media: iris: Update CAPTURE format info based on OUTPUT format media: iris: Add handling for corrupt and drop frames media: iris: Avoid updating frame size to firmware during reconfig media: iris: Send V4L2_BUF_FLAG_ERROR for buffers with 0 filled length media: iris: Add handling for no show frames media: iris: Improve last flag handling media: iris: Skip flush on first sequence change media: iris: Prevent HFI queue writes when core is in deinit state media: iris: Remove redundant buffer count check in stream off media: iris: Remove deprecated property setting to firmware media: iris: Fix missing function pointer initialization media: iris: Fix NULL pointer dereference media: iris: Fix typo in depth variable media: iris: Add a comment to explain usage of MBPS media: iris: Add HEVC and VP9 formats for decoder media: iris: Add platform capabilities for HEVC and VP9 decoders media: iris: Set mandatory properties for HEVC and VP9 decoders. media: iris: Add internal buffer calculation for HEVC and VP9 decoders media: iris: Add codec specific check for VP9 decoder drain handling
drivers/media/platform/qcom/iris/iris_buffer.c | 22 +- drivers/media/platform/qcom/iris/iris_ctrls.c | 35 +- drivers/media/platform/qcom/iris/iris_hfi_common.h | 1 + .../platform/qcom/iris/iris_hfi_gen1_command.c | 44 ++- .../platform/qcom/iris/iris_hfi_gen1_defines.h | 5 +- .../platform/qcom/iris/iris_hfi_gen1_response.c | 22 +- .../platform/qcom/iris/iris_hfi_gen2_command.c | 143 +++++++- .../platform/qcom/iris/iris_hfi_gen2_defines.h | 5 + .../platform/qcom/iris/iris_hfi_gen2_response.c | 57 ++- drivers/media/platform/qcom/iris/iris_hfi_queue.c | 2 +- drivers/media/platform/qcom/iris/iris_instance.h | 6 + .../platform/qcom/iris/iris_platform_common.h | 28 +- .../platform/qcom/iris/iris_platform_sm8250.c | 15 +- .../platform/qcom/iris/iris_platform_sm8550.c | 143 +++++++- drivers/media/platform/qcom/iris/iris_vb2.c | 3 +- drivers/media/platform/qcom/iris/iris_vdec.c | 113 +++--- drivers/media/platform/qcom/iris/iris_vdec.h | 11 + drivers/media/platform/qcom/iris/iris_vidc.c | 3 - drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 397 ++++++++++++++++++++- drivers/media/platform/qcom/iris/iris_vpu_buffer.h | 46 ++- 20 files changed, 948 insertions(+), 153 deletions(-)
base-commit: 7824b91d23e9f255f0e9d2acaa74265c9cac2e9c change-id: 20250402-iris-dec-hevc-vp9-2654a1fc4d0d
Best regards,
Assuming we merge Neils sm8650 stuff first, which I think we should merge first, you'll have a subsequent build error to fix [1]
https://git.codelinaro.org/bryan.odonoghue/kernel/-/tree/linaro/arm-laptop/w...
Testing your series in isolation. I can confirm vp9 decodes also getting some strange prinouts which we need to follow up to see if they exist with the baseline driver [2].
https://git.codelinaro.org/bryan.odonoghue/kernel/-/tree/linaro/arm-laptop/w...
[1]
CC [M] drivers/media/platform/qcom/iris/iris_vdec.o /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:432:10: error: ‘struct iris_platform_data’ has no member named ‘input_config_params’; did you mean ‘output_config_params’? 432 | .input_config_params = | ^~~~~~~~~~~~~~~~~~~ | output_config_params /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:433:17: error: ‘sm8550_vdec_input_config_params’ undeclared here (not in a function); did you mean ‘sm8550_vdec_output_config_params’? 433 | sm8550_vdec_input_config_params, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | sm8550_vdec_output_config_params /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:434:10: error: ‘struct iris_platform_data’ has no member named ‘input_config_params_size’; did you mean ‘output_config_params_size’? 434 | .input_config_params_size = | ^~~~~~~~~~~~~~~~~~~~~~~~ | output_config_params_size In file included from /home/deckard/Development/linux/include/linux/dev_printk.h:14, from /home/deckard/Development/linux/include/linux/device.h:15, from /home/deckard/Development/linux/include/linux/pm_domain.h:11, from /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_core.h:10, from /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:6: /home/deckard/Development/linux/include/linux/compiler.h:197:77: error: expression in static assertion is not an integer 197 | #define __BUILD_BUG_ON_ZERO_MSG(e, msg) ((int)sizeof(struct {_Static_assert(!(e), msg);})) | ^ /home/deckard/Development/linux/include/linux/compiler.h:202:33: note: in expansion of macro ‘__BUILD_BUG_ON_ZERO_MSG’ 202 | #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ | ^~~~~~~~~~~~~~~~~~~~~~~ /home/deckard/Development/linux/include/linux/array_size.h:11:59: note: in expansion of macro ‘__must_be_array’ 11 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) | ^~~~~~~~~~~~~~~ /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:435:17: note: in expansion of macro ‘ARRAY_SIZE’ 435 | ARRAY_SIZE(sm8550_vdec_input_config_params), | ^~~~~~~~~~ /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:442:10: error: ‘struct iris_platform_data’ has no member named ‘dec_output_prop’; did you mean ‘dec_input_prop’? 442 | .dec_output_prop = sm8550_vdec_subscribe_output_properties, | ^~~~~~~~~~~~~~~ | dec_input_prop CC [M] drivers/media/platform/qcom/iris/iris_vpu3x.o /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:442:28: error: ‘sm8550_vdec_subscribe_output_properties’ undeclared here (not in a function); did you mean ‘sm8550_vdec_subscribe_input_properties’? 442 | .dec_output_prop = sm8550_vdec_subscribe_output_properties, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | sm8550_vdec_subscribe_input_properties /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:443:10: error: ‘struct iris_platform_data’ has no member named ‘dec_output_prop_size’; did you mean ‘dec_input_prop_size’? 443 | .dec_output_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_output_properties), | ^~~~~~~~~~~~~~~~~~~~ | dec_input_prop_size /home/deckard/Development/linux/include/linux/compiler.h:197:77: error: expression in static assertion is not an integer 197 | #define __BUILD_BUG_ON_ZERO_MSG(e, msg) ((int)sizeof(struct {_Static_assert(!(e), msg);})) | ^ /home/deckard/Development/linux/include/linux/compiler.h:202:33: note: in expansion of macro ‘__BUILD_BUG_ON_ZERO_MSG’ 202 | #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ | ^~~~~~~~~~~~~~~~~~~~~~~ /home/deckard/Development/linux/include/linux/array_size.h:11:59: note: in expansion of macro ‘__must_be_array’ 11 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) | ^~~~~~~~~~~~~~~ /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:443:33: note: in expansion of macro ‘ARRAY_SIZE’ 443 | .dec_output_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_output_properties), | ^~~~~~~~~~ make[8]: *** [/home/deckard/Development/linux/scripts/Makefile.build:203: drivers/media/platform/qcom/iris/iris_platform_sm8550.o] Error 1 make[8]: *** Waiting for unfinished jobs.... make[7]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media/platform/qcom/iris] Error 2 make[6]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media/platform/qcom] Error 2 make[5]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media/platform] Error 2 make[4]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media] Error 2 make[3]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers] Error 2 make[2]: *** [/home/deckard/Development/linux/Makefile:2006: .] Error 2 make[1]: *** [/home/deckard/Development/linux/Makefile:248: __sub-make] Error 2 make[1]: Leaving directory '/home/deckard/Development/linux-tools/qlt-kernel/build/x1e80100-crd_qlt_integration' make: *** [Makefile:248: __sub-make] Error 2 make[1]: Entering directory '/home/deckard/Development/linux-tools/qlt-kernel/build/x1e80100-crd_qlt_integration' GEN Makefile CALL /home/deckard/Development/linux/scripts/checksyscalls.sh CC [M] drivers/media/platform/qcom/iris/iris_platform_sm8550.o CC [M] drivers/media/platform/qcom/iris/iris_vpu_buffer.o CC [M] drivers/media/platform/qcom/iris/iris_vpu_common.o /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:432:10: error: ‘struct iris_platform_data’ has no member named ‘input_config_params’; did you mean ‘output_config_params’? 432 | .input_config_params = | ^~~~~~~~~~~~~~~~~~~ | output_config_params /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:433:17: error: ‘sm8550_vdec_input_config_params’ undeclared here (not in a function); did you mean ‘sm8550_vdec_output_config_params’? 433 | sm8550_vdec_input_config_params, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | sm8550_vdec_output_config_params /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:434:10: error: ‘struct iris_platform_data’ has no member named ‘input_config_params_size’; did you mean ‘output_config_params_size’? 434 | .input_config_params_size = | ^~~~~~~~~~~~~~~~~~~~~~~~ | output_config_params_size In file included from /home/deckard/Development/linux/include/linux/dev_printk.h:14, from /home/deckard/Development/linux/include/linux/device.h:15, from /home/deckard/Development/linux/include/linux/pm_domain.h:11, from /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_core.h:10, from /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:6: /home/deckard/Development/linux/include/linux/compiler.h:197:77: error: expression in static assertion is not an integer 197 | #define __BUILD_BUG_ON_ZERO_MSG(e, msg) ((int)sizeof(struct {_Static_assert(!(e), msg);})) | ^ /home/deckard/Development/linux/include/linux/compiler.h:202:33: note: in expansion of macro ‘__BUILD_BUG_ON_ZERO_MSG’ 202 | #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ | ^~~~~~~~~~~~~~~~~~~~~~~ /home/deckard/Development/linux/include/linux/array_size.h:11:59: note: in expansion of macro ‘__must_be_array’ 11 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) | ^~~~~~~~~~~~~~~ /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:435:17: note: in expansion of macro ‘ARRAY_SIZE’ 435 | ARRAY_SIZE(sm8550_vdec_input_config_params), | ^~~~~~~~~~ /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:442:10: error: ‘struct iris_platform_data’ has no member named ‘dec_output_prop’; did you mean ‘dec_input_prop’? 442 | .dec_output_prop = sm8550_vdec_subscribe_output_properties, | ^~~~~~~~~~~~~~~ | dec_input_prop /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:442:28: error: ‘sm8550_vdec_subscribe_output_properties’ undeclared here (not in a function); did you mean ‘sm8550_vdec_subscribe_input_properties’? 442 | .dec_output_prop = sm8550_vdec_subscribe_output_properties, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | sm8550_vdec_subscribe_input_properties /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:443:10: error: ‘struct iris_platform_data’ has no member named ‘dec_output_prop_size’; did you mean ‘dec_input_prop_size’? 443 | .dec_output_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_output_properties), | ^~~~~~~~~~~~~~~~~~~~ | dec_input_prop_size /home/deckard/Development/linux/include/linux/compiler.h:197:77: error: expression in static assertion is not an integer 197 | #define __BUILD_BUG_ON_ZERO_MSG(e, msg) ((int)sizeof(struct {_Static_assert(!(e), msg);})) | ^ /home/deckard/Development/linux/include/linux/compiler.h:202:33: note: in expansion of macro ‘__BUILD_BUG_ON_ZERO_MSG’ 202 | #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ | ^~~~~~~~~~~~~~~~~~~~~~~ /home/deckard/Development/linux/include/linux/array_size.h:11:59: note: in expansion of macro ‘__must_be_array’ 11 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) | ^~~~~~~~~~~~~~~ /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:443:33: note: in expansion of macro ‘ARRAY_SIZE’ 443 | .dec_output_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_output_properties), | ^~~~~~~~~~ make[8]: *** [/home/deckard/Development/linux/scripts/Makefile.build:203: drivers/media/platform/qcom/iris/iris_platform_sm8550.o] Error 1 make[8]: *** Waiting for unfinished jobs.... make[7]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media/platform/qcom/iris] Error 2 make[6]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media/platform/qcom] Error 2 make[5]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media/platform] Error 2 make[4]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media] Error 2 make[3]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers] Error 2
[2]
[ 58.165118] qcom-iris aa00000.video-codec: invalid plane [ 58.165721] ------------[ cut here ]------------ [ 58.165727] WARNING: CPU: 1 PID: 1209 at drivers/media/common/videobuf2/videobuf2-core.c:2222 __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] [ 58.165749] Modules linked in: rfcomm michael_mic reset_gpio snd_soc_wsa884x q6prm_clocks q6apm_lpass_dais snd_q6dsp_common q6apm_dai q6prm algif_hash algif_skcipher af_alg qrtr_mhi ntfs3 ath12k mac80211 ov02e10 v4l2_cci snd_q6apm snd_soc_x1e80100 hci_uart snd_soc_qcom_common btqca bluetooth snd_soc_qcom_sdw ps883x ecdh_generic pwrseq_qcom_wcn ecc regmap_i2c phy_nxp_ptn3222 rtc_pm8xxx snd_soc_wcd938x snd_soc_wcd_classh snd_soc_wcd938x_sdw regmap_sdw qcom_iris videobuf2_dma_contig qcom_camss snd_soc_wcd_mbhc v4l2_mem2mem videobuf2_dma_sg snd_soc_lpass_rx_macro snd_soc_lpass_tx_macro snd_soc_lpass_va_macro snd_soc_lpass_wsa_macro soundwire_qcom snd_soc_hdmi_codec mux_core v4l2_fwnode snd_soc_lpass_macro_common videobuf2_memops videobuf2_v4l2 videobuf2_common v4l2_async snd_soc_core videocc_sm8550 i2c_qcom_cci videodev snd_compress mc phy_qcom_qmp_usb rpmsg_ctrl apr fastrpc snd_pcm qcom_pd_mapper rpmsg_char pci_pwrctrl_pwrseq pci_pwrctrl_core qrtr_smd pwrseq_core snd_timer cfg80211 snd soundwire_bus rfkill i2c_dev [ 58.165914] ip_tables x_tables autofs4 ipv6 fuse socinfo qcom_cpucp_mbox icc_bwmon leds_gpio phy_qcom_qmp_pcie arm_smccc_trng rng_core gpucc_x1e80100 pcie_qcom crc8 soundcore tcsrcc_x1e80100 pinctrl_sm8550_lpass_lpi pinctrl_lpass_lpi lpasscc_sc8280xp hid_multitouch i2c_qcom_geni dispcc_x1e80100 phy_qcom_edp qcom_stats phy_qcom_snps_eusb2 sha512_ce sha512_arm64 nvmem_qcom_spmi_sdam qcom_spmi_temp_alarm industrialio sha3_ce phy_qcom_qmp_combo aux_bridge phy_qcom_eusb2_repeater qcom_pon reboot_mode sm3_ce sm3 ucsi_glink pmic_glink_altmode typec_ucsi qcom_battmgr aux_hpd_bridge pmic_glink pdr_interface qcom_pdr_msg typec msm drm_client_lib drm_exec llcc_qcom gpu_sched i2c_hid_of i2c_hid qrtr qcom_q6v5_pas qcom_pil_info qcom_common qcom_glink_smem qcom_glink qcom_q6v5 qcom_sysmon mdt_loader rpmsg_core qmi_helpers input_leds panel_edp drm_display_helper drm_dp_aux_bus drm_kms_helper drm i2c_core mhi libarc4 nvme nvme_core usb_storage r8152 mii libphy led_class dm_crypt dm_mod [ 58.166115] CPU: 1 UID: 1001 PID: 1209 Comm: GstPlay Tainted: G W 6.15.0-rc1 #69 PREEMPT [ 58.166125] Tainted: [W]=WARN [ 58.166129] Hardware name: Dell Inc. Inspiron 14 Plus 7441/0YWPR3, BIOS 2.5.0 12/16/2024 [ 58.166133] pstate: 61400005 (nZCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--) [ 58.166140] pc : __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] [ 58.166146] lr : __vb2_queue_cancel+0x2c/0x2d0 [videobuf2_common] [ 58.166152] sp : ffff800083f9bb00 [ 58.166155] x29: ffff800083f9bb00 x28: ffff6ad64770c020 x27: 0000000000000000 [ 58.166165] x26: 0000000040045613 x25: 0000000000000000 x24: ffffac02677a6bc8 [ 58.166174] x23: ffff6ad64770c060 x22: ffff6ad68e60c780 x21: ffff6ad679c36428 [ 58.166183] x20: 0000000000000009 x19: ffff6ad679c36428 x18: 0000000000000000 [ 58.166192] x17: 0000000000000000 x16: ffffac027ba13408 x15: 0000ffff000304b0 [ 58.166200] x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000 [ 58.166208] x11: 0000000000000000 x10: 0000000000000000 x9 : 0000000000000000 [ 58.166216] x8 : ffff800083f9bd48 x7 : ffffac02677a6e28 x6 : ffffac02677a6e28 [ 58.166226] x5 : 0000000000000000 x4 : 0000000000000001 x3 : 0000000000000000 [ 58.166233] x2 : ffffac0267986fb0 x1 : 0000000000000000 x0 : 0000000000000008 [ 58.166242] Call trace: [ 58.166246] __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] (P) [ 58.166254] vb2_core_streamoff+0x24/0xc8 [videobuf2_common] [ 58.166260] vb2_streamoff+0x18/0x64 [videobuf2_v4l2] [ 58.166267] v4l2_m2m_streamoff+0x78/0x144 [v4l2_mem2mem] [ 58.166273] v4l2_m2m_ioctl_streamoff+0x18/0x24 [v4l2_mem2mem] [ 58.166279] v4l_streamoff+0x24/0x30 [videodev] [ 58.166289] __video_do_ioctl+0x40c/0x4a0 [videodev] [ 58.166298] video_usercopy+0x2bc/0x688 [videodev] [ 58.166307] video_ioctl2+0x18/0x38 [videodev] [ 58.166315] v4l2_ioctl+0x40/0x60 [videodev] [ 58.166323] __arm64_sys_ioctl+0xb4/0xf4 [ 58.166335] invoke_syscall+0x48/0x104 [ 58.166346] el0_svc_common.constprop.0+0x40/0xe0 [ 58.166355] do_el0_svc+0x1c/0x28 [ 58.166363] el0_svc+0x30/0xcc [ 58.166373] el0t_64_sync_handler+0x10c/0x138 [ 58.166381] el0t_64_sync+0x198/0x19c [ 58.166386] ---[ end trace 0000000000000000 ]--- [ 58.166390] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 0 in active state [ 58.166395] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 1 in active state [ 58.166398] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 2 in active state [ 58.166401] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 3 in active state [ 58.166404] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 5 in active state [ 58.166407] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 6 in active state [ 58.166410] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 7 in active state [ 58.166413] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 8 in active state [ 58.169738] qcom-iris aa00000.video-codec: invalid plane [ 61.517138] ------------[ cut here ]------------ [ 61.517147] WARNING: CPU: 1 PID: 1209 at drivers/media/common/videobuf2/videobuf2-core.c:2222 __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] [ 61.517157] Modules linked in: rfcomm michael_mic reset_gpio snd_soc_wsa884x q6prm_clocks q6apm_lpass_dais snd_q6dsp_common q6apm_dai q6prm algif_hash algif_skcipher af_alg qrtr_mhi ntfs3 ath12k mac80211 ov02e10 v4l2_cci snd_q6apm snd_soc_x1e80100 hci_uart snd_soc_qcom_common btqca bluetooth snd_soc_qcom_sdw ps883x ecdh_generic pwrseq_qcom_wcn ecc regmap_i2c phy_nxp_ptn3222 rtc_pm8xxx snd_soc_wcd938x snd_soc_wcd_classh snd_soc_wcd938x_sdw regmap_sdw qcom_iris videobuf2_dma_contig qcom_camss snd_soc_wcd_mbhc v4l2_mem2mem videobuf2_dma_sg snd_soc_lpass_rx_macro snd_soc_lpass_tx_macro snd_soc_lpass_va_macro snd_soc_lpass_wsa_macro soundwire_qcom snd_soc_hdmi_codec mux_core v4l2_fwnode snd_soc_lpass_macro_common videobuf2_memops videobuf2_v4l2 videobuf2_common v4l2_async snd_soc_core videocc_sm8550 i2c_qcom_cci videodev snd_compress mc phy_qcom_qmp_usb rpmsg_ctrl apr fastrpc snd_pcm qcom_pd_mapper rpmsg_char pci_pwrctrl_pwrseq pci_pwrctrl_core qrtr_smd pwrseq_core snd_timer cfg80211 snd soundwire_bus rfkill i2c_dev [ 61.517210] ip_tables x_tables autofs4 ipv6 fuse socinfo qcom_cpucp_mbox icc_bwmon leds_gpio phy_qcom_qmp_pcie arm_smccc_trng rng_core gpucc_x1e80100 pcie_qcom crc8 soundcore tcsrcc_x1e80100 pinctrl_sm8550_lpass_lpi pinctrl_lpass_lpi lpasscc_sc8280xp hid_multitouch i2c_qcom_geni dispcc_x1e80100 phy_qcom_edp qcom_stats phy_qcom_snps_eusb2 sha512_ce sha512_arm64 nvmem_qcom_spmi_sdam qcom_spmi_temp_alarm industrialio sha3_ce phy_qcom_qmp_combo aux_bridge phy_qcom_eusb2_repeater qcom_pon reboot_mode sm3_ce sm3 ucsi_glink pmic_glink_altmode typec_ucsi qcom_battmgr aux_hpd_bridge pmic_glink pdr_interface qcom_pdr_msg typec msm drm_client_lib drm_exec llcc_qcom gpu_sched i2c_hid_of i2c_hid qrtr qcom_q6v5_pas qcom_pil_info qcom_common qcom_glink_smem qcom_glink qcom_q6v5 qcom_sysmon mdt_loader rpmsg_core qmi_helpers input_leds panel_edp drm_display_helper drm_dp_aux_bus drm_kms_helper drm i2c_core mhi libarc4 nvme nvme_core usb_storage r8152 mii libphy led_class dm_crypt dm_mod [ 61.517282] CPU: 1 UID: 1001 PID: 1209 Comm: GstPlay Tainted: G W 6.15.0-rc1 #69 PREEMPT [ 61.517286] Tainted: [W]=WARN [ 61.517288] Hardware name: Dell Inc. Inspiron 14 Plus 7441/0YWPR3, BIOS 2.5.0 12/16/2024 [ 61.517289] pstate: 61400005 (nZCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--) [ 61.517291] pc : __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] [ 61.517293] lr : __vb2_queue_cancel+0x2c/0x2d0 [videobuf2_common] [ 61.517295] sp : ffff800083f9bb00 [ 61.517296] x29: ffff800083f9bb00 x28: ffff6ad64770c020 x27: 0000000000000000 [ 61.517299] x26: 0000000040045613 x25: 0000000000000000 x24: ffffac02677a6bc8 [ 61.517301] x23: ffff6ad64770c060 x22: ffff6ad68e60c780 x21: ffff6ad679c36428 [ 61.517304] x20: 0000000000000009 x19: ffff6ad679c36428 x18: 0000000000000000 [ 61.517306] x17: 0000000000000000 x16: ffffac027ba13408 x15: 0000ffff000304b0 [ 61.517309] x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000 [ 61.517311] x11: 0000000000000000 x10: 0000000000000000 x9 : 0000000000000000 [ 61.517314] x8 : ffff800083f9bd48 x7 : ffffac02677a6e28 x6 : ffffac02677a6e28 [ 61.517316] x5 : 0000000000000000 x4 : 0000000000000001 x3 : 0000000000000000 [ 61.517319] x2 : ffffac0267986fb0 x1 : 0000000000000000 x0 : 0000000000000008 [ 61.517321] Call trace: [ 61.517323] __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] (P) [ 61.517325] vb2_core_streamoff+0x24/0xc8 [videobuf2_common] [ 61.517327] vb2_streamoff+0x18/0x64 [videobuf2_v4l2] [ 61.517330] v4l2_m2m_streamoff+0x78/0x144 [v4l2_mem2mem] [ 61.517332] v4l2_m2m_ioctl_streamoff+0x18/0x24 [v4l2_mem2mem] [ 61.517334] v4l_streamoff+0x24/0x30 [videodev] [ 61.517338] __video_do_ioctl+0x40c/0x4a0 [videodev] [ 61.517341] video_usercopy+0x2bc/0x688 [videodev] [ 61.517343] video_ioctl2+0x18/0x38 [videodev] [ 61.517346] v4l2_ioctl+0x40/0x60 [videodev] [ 61.517348] __arm64_sys_ioctl+0xb4/0xf4 [ 61.517355] invoke_syscall+0x48/0x104 [ 61.517359] el0_svc_common.constprop.0+0x40/0xe0 [ 61.517362] do_el0_svc+0x1c/0x28 [ 61.517364] el0_svc+0x30/0xcc [ 61.517368] el0t_64_sync_handler+0x10c/0x138 [ 61.517371] el0t_64_sync+0x198/0x19c [ 61.517372] ---[ end trace 0000000000000000 ]--- [ 61.517375] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 0 in active state [ 61.517377] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 1 in active state [ 61.517378] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 2 in active state [ 61.517379] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 3 in active state [ 61.517381] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 5 in active state [ 61.517382] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 6 in active state [ 61.517383] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 7 in active state [ 61.517384] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 8 in active state [ 84.239087] ------------[ cut here ]------------ [ 84.239099] WARNING: CPU: 0 PID: 1283 at drivers/media/common/videobuf2/videobuf2-core.c:2222 __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] [ 84.239110] Modules linked in: rfcomm michael_mic reset_gpio snd_soc_wsa884x q6prm_clocks q6apm_lpass_dais snd_q6dsp_common q6apm_dai q6prm algif_hash algif_skcipher af_alg qrtr_mhi ntfs3 ath12k mac80211 ov02e10 v4l2_cci snd_q6apm snd_soc_x1e80100 hci_uart snd_soc_qcom_common btqca bluetooth snd_soc_qcom_sdw ps883x ecdh_generic pwrseq_qcom_wcn ecc regmap_i2c phy_nxp_ptn3222 rtc_pm8xxx snd_soc_wcd938x snd_soc_wcd_classh snd_soc_wcd938x_sdw regmap_sdw qcom_iris videobuf2_dma_contig qcom_camss snd_soc_wcd_mbhc v4l2_mem2mem videobuf2_dma_sg snd_soc_lpass_rx_macro snd_soc_lpass_tx_macro snd_soc_lpass_va_macro snd_soc_lpass_wsa_macro soundwire_qcom snd_soc_hdmi_codec mux_core v4l2_fwnode snd_soc_lpass_macro_common videobuf2_memops videobuf2_v4l2 videobuf2_common v4l2_async snd_soc_core videocc_sm8550 i2c_qcom_cci videodev snd_compress mc phy_qcom_qmp_usb rpmsg_ctrl apr fastrpc snd_pcm qcom_pd_mapper rpmsg_char pci_pwrctrl_pwrseq pci_pwrctrl_core qrtr_smd pwrseq_core snd_timer cfg80211 snd soundwire_bus rfkill i2c_dev [ 84.239190] ip_tables x_tables autofs4 ipv6 fuse socinfo qcom_cpucp_mbox icc_bwmon leds_gpio phy_qcom_qmp_pcie arm_smccc_trng rng_core gpucc_x1e80100 pcie_qcom crc8 soundcore tcsrcc_x1e80100 pinctrl_sm8550_lpass_lpi pinctrl_lpass_lpi lpasscc_sc8280xp hid_multitouch i2c_qcom_geni dispcc_x1e80100 phy_qcom_edp qcom_stats phy_qcom_snps_eusb2 sha512_ce sha512_arm64 nvmem_qcom_spmi_sdam qcom_spmi_temp_alarm industrialio sha3_ce phy_qcom_qmp_combo aux_bridge phy_qcom_eusb2_repeater qcom_pon reboot_mode sm3_ce sm3 ucsi_glink pmic_glink_altmode typec_ucsi qcom_battmgr aux_hpd_bridge pmic_glink pdr_interface qcom_pdr_msg typec msm drm_client_lib drm_exec llcc_qcom gpu_sched i2c_hid_of i2c_hid qrtr qcom_q6v5_pas qcom_pil_info qcom_common qcom_glink_smem qcom_glink qcom_q6v5 qcom_sysmon mdt_loader rpmsg_core qmi_helpers input_leds panel_edp drm_display_helper drm_dp_aux_bus drm_kms_helper drm i2c_core mhi libarc4 nvme nvme_core usb_storage r8152 mii libphy led_class dm_crypt dm_mod [ 84.239292] CPU: 0 UID: 1001 PID: 1283 Comm: GstPlay Tainted: G W 6.15.0-rc1 #69 PREEMPT [ 84.239297] Tainted: [W]=WARN [ 84.239299] Hardware name: Dell Inc. Inspiron 14 Plus 7441/0YWPR3, BIOS 2.5.0 12/16/2024 [ 84.239301] pstate: 61400005 (nZCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--) [ 84.239304] pc : __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] [ 84.239307] lr : __vb2_queue_cancel+0x2c/0x2d0 [videobuf2_common] [ 84.239309] sp : ffff800082333b00 [ 84.239311] x29: ffff800082333b00 x28: ffff6ad65e9d5020 x27: 0000000000000000 [ 84.239315] x26: 0000000040045613 x25: 0000000000000000 x24: ffffac02677a6bc8 [ 84.239319] x23: ffff6ad65e9d5060 x22: ffff6ad646d64d80 x21: ffff6ad65f005028 [ 84.239324] x20: 0000000000000009 x19: ffff6ad65f005028 x18: 0000000000000000 [ 84.239328] x17: 0000000000000000 x16: ffffac027ba13408 x15: 0000ffff20030410 [ 84.239332] x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000 [ 84.239335] x11: 0000000000000000 x10: 0000000000000000 x9 : 0000000000000000 [ 84.239339] x8 : ffff800082333d48 x7 : ffffac02677a6e28 x6 : ffffac02677a6e28 [ 84.239343] x5 : 0000000000000000 x4 : 0000000000000001 x3 : 0000000000000000 [ 84.239347] x2 : ffffac0267986fb0 x1 : 0000000000000000 x0 : 0000000000000016 [ 84.239351] Call trace: [ 84.239353] __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] (P) [ 84.239357] vb2_core_streamoff+0x24/0xc8 [videobuf2_common] [ 84.239360] vb2_streamoff+0x18/0x64 [videobuf2_v4l2] [ 84.239364] v4l2_m2m_streamoff+0x78/0x144 [v4l2_mem2mem] [ 84.239368] v4l2_m2m_ioctl_streamoff+0x18/0x24 [v4l2_mem2mem] [ 84.239370] v4l_streamoff+0x24/0x30 [videodev] [ 84.239376] __video_do_ioctl+0x40c/0x4a0 [videodev] [ 84.239380] video_usercopy+0x2bc/0x688 [videodev] [ 84.239384] video_ioctl2+0x18/0x38 [videodev] [ 84.239388] v4l2_ioctl+0x40/0x60 [videodev] [ 84.239392] __arm64_sys_ioctl+0xb4/0xf4 [ 84.239400] invoke_syscall+0x48/0x104 [ 84.239407] el0_svc_common.constprop.0+0x40/0xe0 [ 84.239411] do_el0_svc+0x1c/0x28 [ 84.239415] el0_svc+0x30/0xcc [ 84.239421] el0t_64_sync_handler+0x10c/0x138 [ 84.239425] el0t_64_sync+0x198/0x19c [ 84.239428] ---[ end trace 0000000000000000 ]--- [ 84.239430] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 0 in active state [ 84.239432] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 1 in active state [ 84.239433] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 2 in active state [ 84.239435] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 3 in active state [ 84.239436] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 4 in active state [ 84.239438] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 5 in active state [ 84.239439] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 7 in active state [ 84.239440] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 8 in active state [ 84.239442] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 9 in active state [ 84.239443] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 10 in active state [ 84.239445] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 11 in active state [ 84.239446] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 14 in active state [ 84.239447] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 15 in active state [ 84.239449] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 16 in active state [ 84.239450] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 17 in active state [ 84.239452] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 18 in active state [ 84.239453] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 19 in active state [ 84.239454] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 20 in active state [ 84.239456] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 21 in active state [ 84.239457] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 22 in active state [ 84.239459] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 23 in active state [ 84.239460] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 24 in active state [ 84.245873] qcom-iris aa00000.video-codec: invalid plane [ 126.573593] qcom-iris aa00000.video-codec: session error received 0x1000009: unknown [ 126.573638] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.573644] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.573649] qcom-iris aa00000.video-codec: session error received 0x1000009: unknown [ 126.573654] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.573659] qcom-iris aa00000.video-codec: session error received 0x1000009: unknown [ 126.573664] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.573668] qcom-iris aa00000.video-codec: session error received 0x1000009: unknown [ 126.573670] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.582134] qcom-iris aa00000.video-codec: session error received 0x1000006: unknown [ 126.582142] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.582147] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.582152] qcom-iris aa00000.video-codec: session error received 0x1000006: unknown [ 126.582156] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.582161] qcom-iris aa00000.video-codec: session error received 0x1000006: unknown [ 126.582166] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.582170] qcom-iris aa00000.video-codec: session error received 0x1000006: unknown [ 126.582177] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state
On 09/04/2025 15:29, Bryan O'Donoghue wrote:
On 08/04/2025 16:54, Dikshita Agarwal wrote:
Hi All,
This patch series adds initial support for the HEVC(H.265) and VP9 codecs in iris decoder. The objective of this work is to extend the decoder's capabilities to handle HEVC and VP9 codec streams, including necessary format handling and buffer management. In addition, the series also includes a set of fixes to address issues identified during testing of these additional codecs.
These patches also address the comments and feedback received from the RFC patches previously sent. I have made the necessary improvements based on the community's suggestions.
Changes sinces RFC:
- Added additional fixes to address issues identified during further
testing.
- Moved typo fix to a seperate patch [Neil]
- Reordered the patches for better logical flow and clarity [Neil,
Dmitry]
- Added fixes tag wherever applicable [Neil, Dmitry]
- Removed the default case in the switch statement for codecs [Bryan]
- Replaced if-else statements with switch-case [Bryan]
- Added comments for mbpf [Bryan]
- RFC: https://lore.kernel.org/linux-media/20250305104335.3629945-1-quic_dikshita@q...
These patches are tested on SM8250 and SM8550 with v4l2-ctl and Gstreamer for HEVC and VP9 decoders, at the same time ensured that the existing H264 decoder functionality remains uneffected.
Note: 1 of the fluster compliance test is fixed with firmware [1] [1]: https://lore.kernel.org/linux-firmware/1a511921-446d-cdc4-0203-084c88a5dc1e@...
The result of fluster test on SM8550: 131/147 testcases passed while testing JCT-VC-HEVC_V1 with GStreamer-H.265-V4L2-Gst1.0. The failing test case:
- 10 testcases failed due to unsupported 10 bit format.
- DBLK_A_MAIN10_VIXS_4
- INITQP_B_Main10_Sony_1
- TSUNEQBD_A_MAIN10_Technicolor_2
- WP_A_MAIN10_Toshiba_3
- WP_MAIN10_B_Toshiba_3
- WPP_A_ericsson_MAIN10_2
- WPP_B_ericsson_MAIN10_2
- WPP_C_ericsson_MAIN10_2
- WPP_E_ericsson_MAIN10_2
- WPP_F_ericsson_MAIN10_2
- 4 testcase failed due to unsupported resolution
- PICSIZE_A_Bossen_1
- PICSIZE_B_Bossen_1
- WPP_D_ericsson_MAIN10_2
- WPP_D_ericsson_MAIN_2
- 1 testcase failed as bitstream is invalid (this fails with reference as well)
- RAP_B_Bossen_2
- 1 testcase failed due to CRC mismatch
- RAP_A_docomo_6 Analysis - First few frames in this discarded by firmware and are sent to driver with 0 filled length. Driver send such buffers to client with timestamp 0 and payload set to 0 and make buf state to VB2_BUF_STATE_ERROR. Such buffers should be dropped by GST. But instead, the first frame displayed as green frame and when a valid buffer is sent to client later with same 0 timestamp, its dropped, leading to CRC mismatch for first frame.
235/305 testcases passed while testing VP9-TEST-VECTORS with GStreamer-VP9-V4L2-Gst1.0. The failing test case:
- 64 testcases failed due to unsupported resolution
- vp90-2-02-size-08x08.webm
- vp90-2-02-size-08x10.webm
- vp90-2-02-size-08x16.webm
- vp90-2-02-size-08x18.webm
- vp90-2-02-size-08x32.webm
- vp90-2-02-size-08x34.webm
- vp90-2-02-size-08x64.webm
- vp90-2-02-size-08x66.webm
- vp90-2-02-size-10x08.webm
- vp90-2-02-size-10x10.webm
- vp90-2-02-size-10x16.webm
- vp90-2-02-size-10x18.webm
- vp90-2-02-size-10x32.webm
- vp90-2-02-size-10x34.webm
- vp90-2-02-size-10x64.webm
- vp90-2-02-size-10x66.webm
- vp90-2-02-size-16x08.webm
- vp90-2-02-size-16x10.webm
- vp90-2-02-size-16x16.webm
- vp90-2-02-size-16x18.webm
- vp90-2-02-size-16x32.webm
- vp90-2-02-size-16x34.webm
- vp90-2-02-size-16x64.webm
- vp90-2-02-size-16x66.webm
- vp90-2-02-size-18x08.webm
- vp90-2-02-size-18x10.webm
- vp90-2-02-size-18x16.webm
- vp90-2-02-size-18x18.webm
- vp90-2-02-size-18x32.webm
- vp90-2-02-size-18x34.webm
- vp90-2-02-size-18x64.webm
- vp90-2-02-size-18x66.webm
- vp90-2-02-size-32x08.webm
- vp90-2-02-size-32x10.webm
- vp90-2-02-size-32x16.webm
- vp90-2-02-size-32x18.webm
- vp90-2-02-size-32x32.webm
- vp90-2-02-size-32x34.webm
- vp90-2-02-size-32x64.webm
- vp90-2-02-size-32x66.webm
- vp90-2-02-size-34x08.webm
- vp90-2-02-size-34x10.webm
- vp90-2-02-size-34x16.webm
- vp90-2-02-size-34x18.webm
- vp90-2-02-size-34x32.webm
- vp90-2-02-size-34x34.webm
- vp90-2-02-size-34x64.webm
- vp90-2-02-size-34x66.webm
- vp90-2-02-size-64x08.webm
- vp90-2-02-size-64x10.webm
- vp90-2-02-size-64x16.webm
- vp90-2-02-size-64x18.webm
- vp90-2-02-size-64x32.webm
- vp90-2-02-size-64x34.webm
- vp90-2-02-size-64x64.webm
- vp90-2-02-size-64x66.webm
- vp90-2-02-size-66x08.webm
- vp90-2-02-size-66x10.webm
- vp90-2-02-size-66x16.webm
- vp90-2-02-size-66x18.webm
- vp90-2-02-size-66x32.webm
- vp90-2-02-size-66x34.webm
- vp90-2-02-size-66x64.webm
- vp90-2-02-size-66x66.webm
- 2 testcases failed due to unsupported format
- vp91-2-04-yuv422.webm
- vp91-2-04-yuv444.webm
- 1 testcase failed with CRC mismatch (fails with ref decoder as well)
- vp90-2-22-svc_1280x720_3.ivf
- 2 testcase failed due to unsupported resolution after sequence change
- vp90-2-21-resize_inter_320x180_5_1-2.webm
- vp90-2-21-resize_inter_320x180_7_1-2.webm
- 1 testcase failed due to unsupported stream
- vp90-2-16-intra-only.webm
Note: There is a timing issue with the clips having multiple resolution change. Where firmware returned all the buffers with previous sequence and has no buffer left to attach the LAST flag to. At the same time, client is not queueing any further buffers, so there is deadlock where client is waiting for LAST flag, while firmware doesn't have any capture buffer to attach LAST flag to. Ideally client should keep queueing the buffers on capture queue untill the LAST flag is received.
The result of fluster test on SM8250: 132/147 testcases passed while testing JCT-VC-HEVC_V1 with GStreamer-H.265-V4L2-Gst1.0. The failing test case:
- 10 testcases failed due to unsupported 10 bit format.
- DBLK_A_MAIN10_VIXS_4
- INITQP_B_Main10_Sony_1
- TSUNEQBD_A_MAIN10_Technicolor_2
- WP_A_MAIN10_Toshiba_3
- WP_MAIN10_B_Toshiba_3
- WPP_A_ericsson_MAIN10_2
- WPP_B_ericsson_MAIN10_2
- WPP_C_ericsson_MAIN10_2
- WPP_E_ericsson_MAIN10_2
- WPP_F_ericsson_MAIN10_2
- 4 testcase failed due to unsupported resolution
- PICSIZE_A_Bossen_1
- PICSIZE_B_Bossen_1
- WPP_D_ericsson_MAIN10_2
- WPP_D_ericsson_MAIN_2
- 1 testcase failed as bitstream is invalid (this fails with reference as well)
- RAP_B_Bossen_2
232/305 testcases passed while testing VP9-TEST-VECTORS with GStreamer-VP9-V4L2-Gst1.0. The failing test case:
- 64 testcases failed due to unsupported resolution
- vp90-2-02-size-08x08.webm
- vp90-2-02-size-08x10.webm
- vp90-2-02-size-08x16.webm
- vp90-2-02-size-08x18.webm
- vp90-2-02-size-08x32.webm
- vp90-2-02-size-08x34.webm
- vp90-2-02-size-08x64.webm
- vp90-2-02-size-08x66.webm
- vp90-2-02-size-10x08.webm
- vp90-2-02-size-10x10.webm
- vp90-2-02-size-10x16.webm
- vp90-2-02-size-10x18.webm
- vp90-2-02-size-10x32.webm
- vp90-2-02-size-10x34.webm
- vp90-2-02-size-10x64.webm
- vp90-2-02-size-10x66.webm
- vp90-2-02-size-16x08.webm
- vp90-2-02-size-16x10.webm
- vp90-2-02-size-16x16.webm
- vp90-2-02-size-16x18.webm
- vp90-2-02-size-16x32.webm
- vp90-2-02-size-16x34.webm
- vp90-2-02-size-16x64.webm
- vp90-2-02-size-16x66.webm
- vp90-2-02-size-18x08.webm
- vp90-2-02-size-18x10.webm
- vp90-2-02-size-18x16.webm
- vp90-2-02-size-18x18.webm
- vp90-2-02-size-18x32.webm
- vp90-2-02-size-18x34.webm
- vp90-2-02-size-18x64.webm
- vp90-2-02-size-18x66.webm
- vp90-2-02-size-32x08.webm
- vp90-2-02-size-32x10.webm
- vp90-2-02-size-32x16.webm
- vp90-2-02-size-32x18.webm
- vp90-2-02-size-32x32.webm
- vp90-2-02-size-32x34.webm
- vp90-2-02-size-32x64.webm
- vp90-2-02-size-32x66.webm
- vp90-2-02-size-34x08.webm
- vp90-2-02-size-34x10.webm
- vp90-2-02-size-34x16.webm
- vp90-2-02-size-34x18.webm
- vp90-2-02-size-34x32.webm
- vp90-2-02-size-34x34.webm
- vp90-2-02-size-34x64.webm
- vp90-2-02-size-34x66.webm
- vp90-2-02-size-64x08.webm
- vp90-2-02-size-64x10.webm
- vp90-2-02-size-64x16.webm
- vp90-2-02-size-64x18.webm
- vp90-2-02-size-64x32.webm
- vp90-2-02-size-64x34.webm
- vp90-2-02-size-64x64.webm
- vp90-2-02-size-64x66.webm
- vp90-2-02-size-66x08.webm
- vp90-2-02-size-66x10.webm
- vp90-2-02-size-66x16.webm
- vp90-2-02-size-66x18.webm
- vp90-2-02-size-66x32.webm
- vp90-2-02-size-66x34.webm
- vp90-2-02-size-66x64.webm
- vp90-2-02-size-66x66.webm
- 2 testcases failed due to unsupported format
- vp91-2-04-yuv422.webm
- vp91-2-04-yuv444.webm
- 1 testcase failed with CRC mismatch (fails with ref decoder as well)
- vp90-2-22-svc_1280x720_3.ivf
- 5 testcase failed due to unsupported resolution after sequence change
- vp90-2-21-resize_inter_320x180_5_1-2.webm
- vp90-2-21-resize_inter_320x180_7_1-2.webm
- vp90-2-21-resize_inter_320x240_5_1-2.webm
- vp90-2-21-resize_inter_320x240_7_1-2.webm
- vp90-2-18-resize.ivf
- 1 testcase failed with CRC mismatch
Analysis: First few frames are marked by firmware as NO_SHOW frame. Driver make buf state to VB2_BUF_STATE_ERROR for such frames. Such buffers should be dropped by GST. But instead, the first frame is being displayed and when a valid buffer is sent to client later with same timestamp, its dropped, leading to CRC mismatch for first frame.
- vp90-2-16-intra-only.webm
Note: Same timing issue as observed on SM8550 is seen on SM8250 as well.
Signed-off-by: Dikshita Agarwal quic_dikshita@quicinc.com
Dikshita Agarwal (20): media: iris: Skip destroying internal buffer if not dequeued media: iris: Update CAPTURE format info based on OUTPUT format media: iris: Add handling for corrupt and drop frames media: iris: Avoid updating frame size to firmware during reconfig media: iris: Send V4L2_BUF_FLAG_ERROR for buffers with 0 filled length media: iris: Add handling for no show frames media: iris: Improve last flag handling media: iris: Skip flush on first sequence change media: iris: Prevent HFI queue writes when core is in deinit state media: iris: Remove redundant buffer count check in stream off media: iris: Remove deprecated property setting to firmware media: iris: Fix missing function pointer initialization media: iris: Fix NULL pointer dereference media: iris: Fix typo in depth variable media: iris: Add a comment to explain usage of MBPS media: iris: Add HEVC and VP9 formats for decoder media: iris: Add platform capabilities for HEVC and VP9 decoders media: iris: Set mandatory properties for HEVC and VP9 decoders. media: iris: Add internal buffer calculation for HEVC and VP9 decoders media: iris: Add codec specific check for VP9 decoder drain handling
drivers/media/platform/qcom/iris/iris_buffer.c | 22 +- drivers/media/platform/qcom/iris/iris_ctrls.c | 35 +- drivers/media/platform/qcom/iris/iris_hfi_common.h | 1 + .../platform/qcom/iris/iris_hfi_gen1_command.c | 44 ++- .../platform/qcom/iris/iris_hfi_gen1_defines.h | 5 +- .../platform/qcom/iris/iris_hfi_gen1_response.c | 22 +- .../platform/qcom/iris/iris_hfi_gen2_command.c | 143 +++++++- .../platform/qcom/iris/iris_hfi_gen2_defines.h | 5 + .../platform/qcom/iris/iris_hfi_gen2_response.c | 57 ++- drivers/media/platform/qcom/iris/iris_hfi_queue.c | 2 +- drivers/media/platform/qcom/iris/iris_instance.h | 6 + .../platform/qcom/iris/iris_platform_common.h | 28 +- .../platform/qcom/iris/iris_platform_sm8250.c | 15 +- .../platform/qcom/iris/iris_platform_sm8550.c | 143 +++++++- drivers/media/platform/qcom/iris/iris_vb2.c | 3 +- drivers/media/platform/qcom/iris/iris_vdec.c | 113 +++--- drivers/media/platform/qcom/iris/iris_vdec.h | 11 + drivers/media/platform/qcom/iris/iris_vidc.c | 3 - drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 397 ++++++++++++++++++++- drivers/media/platform/qcom/iris/iris_vpu_buffer.h | 46 ++- 20 files changed, 948 insertions(+), 153 deletions(-)
base-commit: 7824b91d23e9f255f0e9d2acaa74265c9cac2e9c change-id: 20250402-iris-dec-hevc-vp9-2654a1fc4d0d
Best regards,
Assuming we merge Neils sm8650 stuff first, which I think we should merge first, you'll have a subsequent build error to fix [1]
https://git.codelinaro.org/bryan.odonoghue/kernel/-/tree/linaro/arm-laptop/w...
Testing your series in isolation. I can confirm vp9 decodes also getting some strange prinouts which we need to follow up to see if they exist with the baseline driver [2].
https://git.codelinaro.org/bryan.odonoghue/kernel/-/tree/linaro/arm-laptop/w...
[1]
CC [M] drivers/media/platform/qcom/iris/iris_vdec.o /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:432:10: error: ‘struct iris_platform_data’ has no member named ‘input_config_params’; did you mean ‘output_config_params’? 432 | .input_config_params = | ^~~~~~~~~~~~~~~~~~~ | output_config_params /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:433:17: error: ‘sm8550_vdec_input_config_params’ undeclared here (not in a function); did you mean ‘sm8550_vdec_output_config_params’? 433 | sm8550_vdec_input_config_params, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | sm8550_vdec_output_config_params /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:434:10: error: ‘struct iris_platform_data’ has no member named ‘input_config_params_size’; did you mean ‘output_config_params_size’? 434 | .input_config_params_size = | ^~~~~~~~~~~~~~~~~~~~~~~~ | output_config_params_size In file included from /home/deckard/Development/linux/include/linux/dev_printk.h:14, from /home/deckard/Development/linux/include/linux/device.h:15, from /home/deckard/Development/linux/include/linux/pm_domain.h:11, from /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_core.h:10, from /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:6: /home/deckard/Development/linux/include/linux/compiler.h:197:77: error: expression in static assertion is not an integer 197 | #define __BUILD_BUG_ON_ZERO_MSG(e, msg) ((int)sizeof(struct {_Static_assert(!(e), msg);})) | ^ /home/deckard/Development/linux/include/linux/compiler.h:202:33: note: in expansion of macro ‘__BUILD_BUG_ON_ZERO_MSG’ 202 | #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ | ^~~~~~~~~~~~~~~~~~~~~~~ /home/deckard/Development/linux/include/linux/array_size.h:11:59: note: in expansion of macro ‘__must_be_array’ 11 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) | ^~~~~~~~~~~~~~~ /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:435:17: note: in expansion of macro ‘ARRAY_SIZE’ 435 | ARRAY_SIZE(sm8550_vdec_input_config_params), | ^~~~~~~~~~ /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:442:10: error: ‘struct iris_platform_data’ has no member named ‘dec_output_prop’; did you mean ‘dec_input_prop’? 442 | .dec_output_prop = sm8550_vdec_subscribe_output_properties, | ^~~~~~~~~~~~~~~ | dec_input_prop CC [M] drivers/media/platform/qcom/iris/iris_vpu3x.o /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:442:28: error: ‘sm8550_vdec_subscribe_output_properties’ undeclared here (not in a function); did you mean ‘sm8550_vdec_subscribe_input_properties’? 442 | .dec_output_prop = sm8550_vdec_subscribe_output_properties, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | sm8550_vdec_subscribe_input_properties /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:443:10: error: ‘struct iris_platform_data’ has no member named ‘dec_output_prop_size’; did you mean ‘dec_input_prop_size’? 443 | .dec_output_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_output_properties), | ^~~~~~~~~~~~~~~~~~~~ | dec_input_prop_size /home/deckard/Development/linux/include/linux/compiler.h:197:77: error: expression in static assertion is not an integer 197 | #define __BUILD_BUG_ON_ZERO_MSG(e, msg) ((int)sizeof(struct {_Static_assert(!(e), msg);})) | ^ /home/deckard/Development/linux/include/linux/compiler.h:202:33: note: in expansion of macro ‘__BUILD_BUG_ON_ZERO_MSG’ 202 | #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ | ^~~~~~~~~~~~~~~~~~~~~~~ /home/deckard/Development/linux/include/linux/array_size.h:11:59: note: in expansion of macro ‘__must_be_array’ 11 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) | ^~~~~~~~~~~~~~~ /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:443:33: note: in expansion of macro ‘ARRAY_SIZE’ 443 | .dec_output_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_output_properties), | ^~~~~~~~~~ make[8]: *** [/home/deckard/Development/linux/scripts/Makefile.build:203: drivers/media/platform/qcom/iris/iris_platform_sm8550.o] Error 1 make[8]: *** Waiting for unfinished jobs.... make[7]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media/platform/qcom/iris] Error 2 make[6]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media/platform/qcom] Error 2 make[5]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media/platform] Error 2 make[4]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media] Error 2 make[3]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers] Error 2 make[2]: *** [/home/deckard/Development/linux/Makefile:2006: .] Error 2 make[1]: *** [/home/deckard/Development/linux/Makefile:248: __sub-make] Error 2 make[1]: Leaving directory '/home/deckard/Development/linux-tools/qlt-kernel/build/x1e80100-crd_qlt_integration' make: *** [Makefile:248: __sub-make] Error 2 make[1]: Entering directory '/home/deckard/Development/linux-tools/qlt-kernel/build/x1e80100-crd_qlt_integration' GEN Makefile CALL /home/deckard/Development/linux/scripts/checksyscalls.sh CC [M] drivers/media/platform/qcom/iris/iris_platform_sm8550.o CC [M] drivers/media/platform/qcom/iris/iris_vpu_buffer.o CC [M] drivers/media/platform/qcom/iris/iris_vpu_common.o /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:432:10: error: ‘struct iris_platform_data’ has no member named ‘input_config_params’; did you mean ‘output_config_params’? 432 | .input_config_params = | ^~~~~~~~~~~~~~~~~~~ | output_config_params /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:433:17: error: ‘sm8550_vdec_input_config_params’ undeclared here (not in a function); did you mean ‘sm8550_vdec_output_config_params’? 433 | sm8550_vdec_input_config_params, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | sm8550_vdec_output_config_params /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:434:10: error: ‘struct iris_platform_data’ has no member named ‘input_config_params_size’; did you mean ‘output_config_params_size’? 434 | .input_config_params_size = | ^~~~~~~~~~~~~~~~~~~~~~~~ | output_config_params_size In file included from /home/deckard/Development/linux/include/linux/dev_printk.h:14, from /home/deckard/Development/linux/include/linux/device.h:15, from /home/deckard/Development/linux/include/linux/pm_domain.h:11, from /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_core.h:10, from /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:6: /home/deckard/Development/linux/include/linux/compiler.h:197:77: error: expression in static assertion is not an integer 197 | #define __BUILD_BUG_ON_ZERO_MSG(e, msg) ((int)sizeof(struct {_Static_assert(!(e), msg);})) | ^ /home/deckard/Development/linux/include/linux/compiler.h:202:33: note: in expansion of macro ‘__BUILD_BUG_ON_ZERO_MSG’ 202 | #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ | ^~~~~~~~~~~~~~~~~~~~~~~ /home/deckard/Development/linux/include/linux/array_size.h:11:59: note: in expansion of macro ‘__must_be_array’ 11 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) | ^~~~~~~~~~~~~~~ /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:435:17: note: in expansion of macro ‘ARRAY_SIZE’ 435 | ARRAY_SIZE(sm8550_vdec_input_config_params), | ^~~~~~~~~~ /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:442:10: error: ‘struct iris_platform_data’ has no member named ‘dec_output_prop’; did you mean ‘dec_input_prop’? 442 | .dec_output_prop = sm8550_vdec_subscribe_output_properties, | ^~~~~~~~~~~~~~~ | dec_input_prop /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:442:28: error: ‘sm8550_vdec_subscribe_output_properties’ undeclared here (not in a function); did you mean ‘sm8550_vdec_subscribe_input_properties’? 442 | .dec_output_prop = sm8550_vdec_subscribe_output_properties, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | sm8550_vdec_subscribe_input_properties /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:443:10: error: ‘struct iris_platform_data’ has no member named ‘dec_output_prop_size’; did you mean ‘dec_input_prop_size’? 443 | .dec_output_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_output_properties), | ^~~~~~~~~~~~~~~~~~~~ | dec_input_prop_size /home/deckard/Development/linux/include/linux/compiler.h:197:77: error: expression in static assertion is not an integer 197 | #define __BUILD_BUG_ON_ZERO_MSG(e, msg) ((int)sizeof(struct {_Static_assert(!(e), msg);})) | ^ /home/deckard/Development/linux/include/linux/compiler.h:202:33: note: in expansion of macro ‘__BUILD_BUG_ON_ZERO_MSG’ 202 | #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ | ^~~~~~~~~~~~~~~~~~~~~~~ /home/deckard/Development/linux/include/linux/array_size.h:11:59: note: in expansion of macro ‘__must_be_array’ 11 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) | ^~~~~~~~~~~~~~~ /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:443:33: note: in expansion of macro ‘ARRAY_SIZE’ 443 | .dec_output_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_output_properties), | ^~~~~~~~~~ make[8]: *** [/home/deckard/Development/linux/scripts/Makefile.build:203: drivers/media/platform/qcom/iris/iris_platform_sm8550.o] Error 1 make[8]: *** Waiting for unfinished jobs.... make[7]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media/platform/qcom/iris] Error 2 make[6]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media/platform/qcom] Error 2 make[5]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media/platform] Error 2 make[4]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media] Error 2 make[3]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers] Error 2
[2]
[ 58.165118] qcom-iris aa00000.video-codec: invalid plane [ 58.165721] ------------[ cut here ]------------ [ 58.165727] WARNING: CPU: 1 PID: 1209 at drivers/media/common/videobuf2/videobuf2-core.c:2222 __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] [ 58.165749] Modules linked in: rfcomm michael_mic reset_gpio snd_soc_wsa884x q6prm_clocks q6apm_lpass_dais snd_q6dsp_common q6apm_dai q6prm algif_hash algif_skcipher af_alg qrtr_mhi ntfs3 ath12k mac80211 ov02e10 v4l2_cci snd_q6apm snd_soc_x1e80100 hci_uart snd_soc_qcom_common btqca bluetooth snd_soc_qcom_sdw ps883x ecdh_generic pwrseq_qcom_wcn ecc regmap_i2c phy_nxp_ptn3222 rtc_pm8xxx snd_soc_wcd938x snd_soc_wcd_classh snd_soc_wcd938x_sdw regmap_sdw qcom_iris videobuf2_dma_contig qcom_camss snd_soc_wcd_mbhc v4l2_mem2mem videobuf2_dma_sg snd_soc_lpass_rx_macro snd_soc_lpass_tx_macro snd_soc_lpass_va_macro snd_soc_lpass_wsa_macro soundwire_qcom snd_soc_hdmi_codec mux_core v4l2_fwnode snd_soc_lpass_macro_common videobuf2_memops videobuf2_v4l2 videobuf2_common v4l2_async snd_soc_core videocc_sm8550 i2c_qcom_cci videodev snd_compress mc phy_qcom_qmp_usb rpmsg_ctrl apr fastrpc snd_pcm qcom_pd_mapper rpmsg_char pci_pwrctrl_pwrseq pci_pwrctrl_core qrtr_smd pwrseq_core snd_timer cfg80211 snd soundwire_bus rfkill i2c_dev [ 58.165914] ip_tables x_tables autofs4 ipv6 fuse socinfo qcom_cpucp_mbox icc_bwmon leds_gpio phy_qcom_qmp_pcie arm_smccc_trng rng_core gpucc_x1e80100 pcie_qcom crc8 soundcore tcsrcc_x1e80100 pinctrl_sm8550_lpass_lpi pinctrl_lpass_lpi lpasscc_sc8280xp hid_multitouch i2c_qcom_geni dispcc_x1e80100 phy_qcom_edp qcom_stats phy_qcom_snps_eusb2 sha512_ce sha512_arm64 nvmem_qcom_spmi_sdam qcom_spmi_temp_alarm industrialio sha3_ce phy_qcom_qmp_combo aux_bridge phy_qcom_eusb2_repeater qcom_pon reboot_mode sm3_ce sm3 ucsi_glink pmic_glink_altmode typec_ucsi qcom_battmgr aux_hpd_bridge pmic_glink pdr_interface qcom_pdr_msg typec msm drm_client_lib drm_exec llcc_qcom gpu_sched i2c_hid_of i2c_hid qrtr qcom_q6v5_pas qcom_pil_info qcom_common qcom_glink_smem qcom_glink qcom_q6v5 qcom_sysmon mdt_loader rpmsg_core qmi_helpers input_leds panel_edp drm_display_helper drm_dp_aux_bus drm_kms_helper drm i2c_core mhi libarc4 nvme nvme_core usb_storage r8152 mii libphy led_class dm_crypt dm_mod [ 58.166115] CPU: 1 UID: 1001 PID: 1209 Comm: GstPlay Tainted: G W 6.15.0-rc1 #69 PREEMPT [ 58.166125] Tainted: [W]=WARN [ 58.166129] Hardware name: Dell Inc. Inspiron 14 Plus 7441/0YWPR3, BIOS 2.5.0 12/16/2024 [ 58.166133] pstate: 61400005 (nZCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--) [ 58.166140] pc : __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] [ 58.166146] lr : __vb2_queue_cancel+0x2c/0x2d0 [videobuf2_common] [ 58.166152] sp : ffff800083f9bb00 [ 58.166155] x29: ffff800083f9bb00 x28: ffff6ad64770c020 x27: 0000000000000000 [ 58.166165] x26: 0000000040045613 x25: 0000000000000000 x24: ffffac02677a6bc8 [ 58.166174] x23: ffff6ad64770c060 x22: ffff6ad68e60c780 x21: ffff6ad679c36428 [ 58.166183] x20: 0000000000000009 x19: ffff6ad679c36428 x18: 0000000000000000 [ 58.166192] x17: 0000000000000000 x16: ffffac027ba13408 x15: 0000ffff000304b0 [ 58.166200] x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000 [ 58.166208] x11: 0000000000000000 x10: 0000000000000000 x9 : 0000000000000000 [ 58.166216] x8 : ffff800083f9bd48 x7 : ffffac02677a6e28 x6 : ffffac02677a6e28 [ 58.166226] x5 : 0000000000000000 x4 : 0000000000000001 x3 : 0000000000000000 [ 58.166233] x2 : ffffac0267986fb0 x1 : 0000000000000000 x0 : 0000000000000008 [ 58.166242] Call trace: [ 58.166246] __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] (P) [ 58.166254] vb2_core_streamoff+0x24/0xc8 [videobuf2_common] [ 58.166260] vb2_streamoff+0x18/0x64 [videobuf2_v4l2] [ 58.166267] v4l2_m2m_streamoff+0x78/0x144 [v4l2_mem2mem] [ 58.166273] v4l2_m2m_ioctl_streamoff+0x18/0x24 [v4l2_mem2mem] [ 58.166279] v4l_streamoff+0x24/0x30 [videodev] [ 58.166289] __video_do_ioctl+0x40c/0x4a0 [videodev] [ 58.166298] video_usercopy+0x2bc/0x688 [videodev] [ 58.166307] video_ioctl2+0x18/0x38 [videodev] [ 58.166315] v4l2_ioctl+0x40/0x60 [videodev] [ 58.166323] __arm64_sys_ioctl+0xb4/0xf4 [ 58.166335] invoke_syscall+0x48/0x104 [ 58.166346] el0_svc_common.constprop.0+0x40/0xe0 [ 58.166355] do_el0_svc+0x1c/0x28 [ 58.166363] el0_svc+0x30/0xcc [ 58.166373] el0t_64_sync_handler+0x10c/0x138 [ 58.166381] el0t_64_sync+0x198/0x19c [ 58.166386] ---[ end trace 0000000000000000 ]--- [ 58.166390] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 0 in active state [ 58.166395] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 1 in active state [ 58.166398] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 2 in active state [ 58.166401] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 3 in active state [ 58.166404] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 5 in active state [ 58.166407] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 6 in active state [ 58.166410] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 7 in active state [ 58.166413] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 8 in active state [ 58.169738] qcom-iris aa00000.video-codec: invalid plane [ 61.517138] ------------[ cut here ]------------ [ 61.517147] WARNING: CPU: 1 PID: 1209 at drivers/media/common/videobuf2/videobuf2-core.c:2222 __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] [ 61.517157] Modules linked in: rfcomm michael_mic reset_gpio snd_soc_wsa884x q6prm_clocks q6apm_lpass_dais snd_q6dsp_common q6apm_dai q6prm algif_hash algif_skcipher af_alg qrtr_mhi ntfs3 ath12k mac80211 ov02e10 v4l2_cci snd_q6apm snd_soc_x1e80100 hci_uart snd_soc_qcom_common btqca bluetooth snd_soc_qcom_sdw ps883x ecdh_generic pwrseq_qcom_wcn ecc regmap_i2c phy_nxp_ptn3222 rtc_pm8xxx snd_soc_wcd938x snd_soc_wcd_classh snd_soc_wcd938x_sdw regmap_sdw qcom_iris videobuf2_dma_contig qcom_camss snd_soc_wcd_mbhc v4l2_mem2mem videobuf2_dma_sg snd_soc_lpass_rx_macro snd_soc_lpass_tx_macro snd_soc_lpass_va_macro snd_soc_lpass_wsa_macro soundwire_qcom snd_soc_hdmi_codec mux_core v4l2_fwnode snd_soc_lpass_macro_common videobuf2_memops videobuf2_v4l2 videobuf2_common v4l2_async snd_soc_core videocc_sm8550 i2c_qcom_cci videodev snd_compress mc phy_qcom_qmp_usb rpmsg_ctrl apr fastrpc snd_pcm qcom_pd_mapper rpmsg_char pci_pwrctrl_pwrseq pci_pwrctrl_core qrtr_smd pwrseq_core snd_timer cfg80211 snd soundwire_bus rfkill i2c_dev [ 61.517210] ip_tables x_tables autofs4 ipv6 fuse socinfo qcom_cpucp_mbox icc_bwmon leds_gpio phy_qcom_qmp_pcie arm_smccc_trng rng_core gpucc_x1e80100 pcie_qcom crc8 soundcore tcsrcc_x1e80100 pinctrl_sm8550_lpass_lpi pinctrl_lpass_lpi lpasscc_sc8280xp hid_multitouch i2c_qcom_geni dispcc_x1e80100 phy_qcom_edp qcom_stats phy_qcom_snps_eusb2 sha512_ce sha512_arm64 nvmem_qcom_spmi_sdam qcom_spmi_temp_alarm industrialio sha3_ce phy_qcom_qmp_combo aux_bridge phy_qcom_eusb2_repeater qcom_pon reboot_mode sm3_ce sm3 ucsi_glink pmic_glink_altmode typec_ucsi qcom_battmgr aux_hpd_bridge pmic_glink pdr_interface qcom_pdr_msg typec msm drm_client_lib drm_exec llcc_qcom gpu_sched i2c_hid_of i2c_hid qrtr qcom_q6v5_pas qcom_pil_info qcom_common qcom_glink_smem qcom_glink qcom_q6v5 qcom_sysmon mdt_loader rpmsg_core qmi_helpers input_leds panel_edp drm_display_helper drm_dp_aux_bus drm_kms_helper drm i2c_core mhi libarc4 nvme nvme_core usb_storage r8152 mii libphy led_class dm_crypt dm_mod [ 61.517282] CPU: 1 UID: 1001 PID: 1209 Comm: GstPlay Tainted: G W 6.15.0-rc1 #69 PREEMPT [ 61.517286] Tainted: [W]=WARN [ 61.517288] Hardware name: Dell Inc. Inspiron 14 Plus 7441/0YWPR3, BIOS 2.5.0 12/16/2024 [ 61.517289] pstate: 61400005 (nZCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--) [ 61.517291] pc : __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] [ 61.517293] lr : __vb2_queue_cancel+0x2c/0x2d0 [videobuf2_common] [ 61.517295] sp : ffff800083f9bb00 [ 61.517296] x29: ffff800083f9bb00 x28: ffff6ad64770c020 x27: 0000000000000000 [ 61.517299] x26: 0000000040045613 x25: 0000000000000000 x24: ffffac02677a6bc8 [ 61.517301] x23: ffff6ad64770c060 x22: ffff6ad68e60c780 x21: ffff6ad679c36428 [ 61.517304] x20: 0000000000000009 x19: ffff6ad679c36428 x18: 0000000000000000 [ 61.517306] x17: 0000000000000000 x16: ffffac027ba13408 x15: 0000ffff000304b0 [ 61.517309] x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000 [ 61.517311] x11: 0000000000000000 x10: 0000000000000000 x9 : 0000000000000000 [ 61.517314] x8 : ffff800083f9bd48 x7 : ffffac02677a6e28 x6 : ffffac02677a6e28 [ 61.517316] x5 : 0000000000000000 x4 : 0000000000000001 x3 : 0000000000000000 [ 61.517319] x2 : ffffac0267986fb0 x1 : 0000000000000000 x0 : 0000000000000008 [ 61.517321] Call trace: [ 61.517323] __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] (P) [ 61.517325] vb2_core_streamoff+0x24/0xc8 [videobuf2_common] [ 61.517327] vb2_streamoff+0x18/0x64 [videobuf2_v4l2] [ 61.517330] v4l2_m2m_streamoff+0x78/0x144 [v4l2_mem2mem] [ 61.517332] v4l2_m2m_ioctl_streamoff+0x18/0x24 [v4l2_mem2mem] [ 61.517334] v4l_streamoff+0x24/0x30 [videodev] [ 61.517338] __video_do_ioctl+0x40c/0x4a0 [videodev] [ 61.517341] video_usercopy+0x2bc/0x688 [videodev] [ 61.517343] video_ioctl2+0x18/0x38 [videodev] [ 61.517346] v4l2_ioctl+0x40/0x60 [videodev] [ 61.517348] __arm64_sys_ioctl+0xb4/0xf4 [ 61.517355] invoke_syscall+0x48/0x104 [ 61.517359] el0_svc_common.constprop.0+0x40/0xe0 [ 61.517362] do_el0_svc+0x1c/0x28 [ 61.517364] el0_svc+0x30/0xcc [ 61.517368] el0t_64_sync_handler+0x10c/0x138 [ 61.517371] el0t_64_sync+0x198/0x19c [ 61.517372] ---[ end trace 0000000000000000 ]--- [ 61.517375] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 0 in active state [ 61.517377] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 1 in active state [ 61.517378] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 2 in active state [ 61.517379] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 3 in active state [ 61.517381] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 5 in active state [ 61.517382] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 6 in active state [ 61.517383] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 7 in active state [ 61.517384] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 8 in active state [ 84.239087] ------------[ cut here ]------------ [ 84.239099] WARNING: CPU: 0 PID: 1283 at drivers/media/common/videobuf2/videobuf2-core.c:2222 __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] [ 84.239110] Modules linked in: rfcomm michael_mic reset_gpio snd_soc_wsa884x q6prm_clocks q6apm_lpass_dais snd_q6dsp_common q6apm_dai q6prm algif_hash algif_skcipher af_alg qrtr_mhi ntfs3 ath12k mac80211 ov02e10 v4l2_cci snd_q6apm snd_soc_x1e80100 hci_uart snd_soc_qcom_common btqca bluetooth snd_soc_qcom_sdw ps883x ecdh_generic pwrseq_qcom_wcn ecc regmap_i2c phy_nxp_ptn3222 rtc_pm8xxx snd_soc_wcd938x snd_soc_wcd_classh snd_soc_wcd938x_sdw regmap_sdw qcom_iris videobuf2_dma_contig qcom_camss snd_soc_wcd_mbhc v4l2_mem2mem videobuf2_dma_sg snd_soc_lpass_rx_macro snd_soc_lpass_tx_macro snd_soc_lpass_va_macro snd_soc_lpass_wsa_macro soundwire_qcom snd_soc_hdmi_codec mux_core v4l2_fwnode snd_soc_lpass_macro_common videobuf2_memops videobuf2_v4l2 videobuf2_common v4l2_async snd_soc_core videocc_sm8550 i2c_qcom_cci videodev snd_compress mc phy_qcom_qmp_usb rpmsg_ctrl apr fastrpc snd_pcm qcom_pd_mapper rpmsg_char pci_pwrctrl_pwrseq pci_pwrctrl_core qrtr_smd pwrseq_core snd_timer cfg80211 snd soundwire_bus rfkill i2c_dev [ 84.239190] ip_tables x_tables autofs4 ipv6 fuse socinfo qcom_cpucp_mbox icc_bwmon leds_gpio phy_qcom_qmp_pcie arm_smccc_trng rng_core gpucc_x1e80100 pcie_qcom crc8 soundcore tcsrcc_x1e80100 pinctrl_sm8550_lpass_lpi pinctrl_lpass_lpi lpasscc_sc8280xp hid_multitouch i2c_qcom_geni dispcc_x1e80100 phy_qcom_edp qcom_stats phy_qcom_snps_eusb2 sha512_ce sha512_arm64 nvmem_qcom_spmi_sdam qcom_spmi_temp_alarm industrialio sha3_ce phy_qcom_qmp_combo aux_bridge phy_qcom_eusb2_repeater qcom_pon reboot_mode sm3_ce sm3 ucsi_glink pmic_glink_altmode typec_ucsi qcom_battmgr aux_hpd_bridge pmic_glink pdr_interface qcom_pdr_msg typec msm drm_client_lib drm_exec llcc_qcom gpu_sched i2c_hid_of i2c_hid qrtr qcom_q6v5_pas qcom_pil_info qcom_common qcom_glink_smem qcom_glink qcom_q6v5 qcom_sysmon mdt_loader rpmsg_core qmi_helpers input_leds panel_edp drm_display_helper drm_dp_aux_bus drm_kms_helper drm i2c_core mhi libarc4 nvme nvme_core usb_storage r8152 mii libphy led_class dm_crypt dm_mod [ 84.239292] CPU: 0 UID: 1001 PID: 1283 Comm: GstPlay Tainted: G W 6.15.0-rc1 #69 PREEMPT [ 84.239297] Tainted: [W]=WARN [ 84.239299] Hardware name: Dell Inc. Inspiron 14 Plus 7441/0YWPR3, BIOS 2.5.0 12/16/2024 [ 84.239301] pstate: 61400005 (nZCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--) [ 84.239304] pc : __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] [ 84.239307] lr : __vb2_queue_cancel+0x2c/0x2d0 [videobuf2_common] [ 84.239309] sp : ffff800082333b00 [ 84.239311] x29: ffff800082333b00 x28: ffff6ad65e9d5020 x27: 0000000000000000 [ 84.239315] x26: 0000000040045613 x25: 0000000000000000 x24: ffffac02677a6bc8 [ 84.239319] x23: ffff6ad65e9d5060 x22: ffff6ad646d64d80 x21: ffff6ad65f005028 [ 84.239324] x20: 0000000000000009 x19: ffff6ad65f005028 x18: 0000000000000000 [ 84.239328] x17: 0000000000000000 x16: ffffac027ba13408 x15: 0000ffff20030410 [ 84.239332] x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000 [ 84.239335] x11: 0000000000000000 x10: 0000000000000000 x9 : 0000000000000000 [ 84.239339] x8 : ffff800082333d48 x7 : ffffac02677a6e28 x6 : ffffac02677a6e28 [ 84.239343] x5 : 0000000000000000 x4 : 0000000000000001 x3 : 0000000000000000 [ 84.239347] x2 : ffffac0267986fb0 x1 : 0000000000000000 x0 : 0000000000000016 [ 84.239351] Call trace: [ 84.239353] __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] (P) [ 84.239357] vb2_core_streamoff+0x24/0xc8 [videobuf2_common] [ 84.239360] vb2_streamoff+0x18/0x64 [videobuf2_v4l2] [ 84.239364] v4l2_m2m_streamoff+0x78/0x144 [v4l2_mem2mem] [ 84.239368] v4l2_m2m_ioctl_streamoff+0x18/0x24 [v4l2_mem2mem] [ 84.239370] v4l_streamoff+0x24/0x30 [videodev] [ 84.239376] __video_do_ioctl+0x40c/0x4a0 [videodev] [ 84.239380] video_usercopy+0x2bc/0x688 [videodev] [ 84.239384] video_ioctl2+0x18/0x38 [videodev] [ 84.239388] v4l2_ioctl+0x40/0x60 [videodev] [ 84.239392] __arm64_sys_ioctl+0xb4/0xf4 [ 84.239400] invoke_syscall+0x48/0x104 [ 84.239407] el0_svc_common.constprop.0+0x40/0xe0 [ 84.239411] do_el0_svc+0x1c/0x28 [ 84.239415] el0_svc+0x30/0xcc [ 84.239421] el0t_64_sync_handler+0x10c/0x138 [ 84.239425] el0t_64_sync+0x198/0x19c [ 84.239428] ---[ end trace 0000000000000000 ]--- [ 84.239430] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 0 in active state [ 84.239432] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 1 in active state [ 84.239433] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 2 in active state [ 84.239435] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 3 in active state [ 84.239436] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 4 in active state [ 84.239438] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 5 in active state [ 84.239439] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 7 in active state [ 84.239440] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 8 in active state [ 84.239442] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 9 in active state [ 84.239443] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 10 in active state [ 84.239445] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 11 in active state [ 84.239446] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 14 in active state [ 84.239447] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 15 in active state [ 84.239449] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 16 in active state [ 84.239450] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 17 in active state [ 84.239452] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 18 in active state [ 84.239453] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 19 in active state [ 84.239454] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 20 in active state [ 84.239456] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 21 in active state [ 84.239457] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 22 in active state [ 84.239459] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 23 in active state [ 84.239460] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 24 in active state [ 84.245873] qcom-iris aa00000.video-codec: invalid plane [ 126.573593] qcom-iris aa00000.video-codec: session error received 0x1000009: unknown [ 126.573638] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.573644] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.573649] qcom-iris aa00000.video-codec: session error received 0x1000009: unknown [ 126.573654] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.573659] qcom-iris aa00000.video-codec: session error received 0x1000009: unknown [ 126.573664] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.573668] qcom-iris aa00000.video-codec: session error received 0x1000009: unknown [ 126.573670] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.582134] qcom-iris aa00000.video-codec: session error received 0x1000006: unknown [ 126.582142] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.582147] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.582152] qcom-iris aa00000.video-codec: session error received 0x1000006: unknown [ 126.582156] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.582161] qcom-iris aa00000.video-codec: session error received 0x1000006: unknown [ 126.582166] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.582170] qcom-iris aa00000.video-codec: session error received 0x1000006: unknown [ 126.582177] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state
BTW my test case is gnome showtime and the 30 megabyte h264 and vp9 bunny videos
https://test-videos.co.uk/bigbuckbunny/mp4-h264 https://test-videos.co.uk/bigbuckbunny/webm-vp9
--- bod
On 09/04/2025 16:29, Bryan O'Donoghue wrote:
On 08/04/2025 16:54, Dikshita Agarwal wrote:
Hi All,
This patch series adds initial support for the HEVC(H.265) and VP9 codecs in iris decoder. The objective of this work is to extend the decoder's capabilities to handle HEVC and VP9 codec streams, including necessary format handling and buffer management. In addition, the series also includes a set of fixes to address issues identified during testing of these additional codecs.
These patches also address the comments and feedback received from the RFC patches previously sent. I have made the necessary improvements based on the community's suggestions.
Changes sinces RFC:
- Added additional fixes to address issues identified during further
testing.
- Moved typo fix to a seperate patch [Neil]
- Reordered the patches for better logical flow and clarity [Neil,
Dmitry]
- Added fixes tag wherever applicable [Neil, Dmitry]
- Removed the default case in the switch statement for codecs [Bryan]
- Replaced if-else statements with switch-case [Bryan]
- Added comments for mbpf [Bryan]
- RFC: https://lore.kernel.org/linux-media/20250305104335.3629945-1-quic_dikshita@q...
These patches are tested on SM8250 and SM8550 with v4l2-ctl and Gstreamer for HEVC and VP9 decoders, at the same time ensured that the existing H264 decoder functionality remains uneffected.
Note: 1 of the fluster compliance test is fixed with firmware [1] [1]: https://lore.kernel.org/linux-firmware/1a511921-446d-cdc4-0203-084c88a5dc1e@...
<snip>
Dikshita Agarwal (20): media: iris: Skip destroying internal buffer if not dequeued media: iris: Update CAPTURE format info based on OUTPUT format media: iris: Add handling for corrupt and drop frames media: iris: Avoid updating frame size to firmware during reconfig media: iris: Send V4L2_BUF_FLAG_ERROR for buffers with 0 filled length media: iris: Add handling for no show frames media: iris: Improve last flag handling media: iris: Skip flush on first sequence change media: iris: Prevent HFI queue writes when core is in deinit state media: iris: Remove redundant buffer count check in stream off media: iris: Remove deprecated property setting to firmware media: iris: Fix missing function pointer initialization media: iris: Fix NULL pointer dereference media: iris: Fix typo in depth variable media: iris: Add a comment to explain usage of MBPS media: iris: Add HEVC and VP9 formats for decoder media: iris: Add platform capabilities for HEVC and VP9 decoders media: iris: Set mandatory properties for HEVC and VP9 decoders. media: iris: Add internal buffer calculation for HEVC and VP9 decoders media: iris: Add codec specific check for VP9 decoder drain handling
drivers/media/platform/qcom/iris/iris_buffer.c | 22 +- drivers/media/platform/qcom/iris/iris_ctrls.c | 35 +- drivers/media/platform/qcom/iris/iris_hfi_common.h | 1 + .../platform/qcom/iris/iris_hfi_gen1_command.c | 44 ++- .../platform/qcom/iris/iris_hfi_gen1_defines.h | 5 +- .../platform/qcom/iris/iris_hfi_gen1_response.c | 22 +- .../platform/qcom/iris/iris_hfi_gen2_command.c | 143 +++++++- .../platform/qcom/iris/iris_hfi_gen2_defines.h | 5 + .../platform/qcom/iris/iris_hfi_gen2_response.c | 57 ++- drivers/media/platform/qcom/iris/iris_hfi_queue.c | 2 +- drivers/media/platform/qcom/iris/iris_instance.h | 6 + .../platform/qcom/iris/iris_platform_common.h | 28 +- .../platform/qcom/iris/iris_platform_sm8250.c | 15 +- .../platform/qcom/iris/iris_platform_sm8550.c | 143 +++++++- drivers/media/platform/qcom/iris/iris_vb2.c | 3 +- drivers/media/platform/qcom/iris/iris_vdec.c | 113 +++--- drivers/media/platform/qcom/iris/iris_vdec.h | 11 + drivers/media/platform/qcom/iris/iris_vidc.c | 3 - drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 397 ++++++++++++++++++++- drivers/media/platform/qcom/iris/iris_vpu_buffer.h | 46 ++- 20 files changed, 948 insertions(+), 153 deletions(-)
base-commit: 7824b91d23e9f255f0e9d2acaa74265c9cac2e9c change-id: 20250402-iris-dec-hevc-vp9-2654a1fc4d0d
Best regards,
Assuming we merge Neils sm8650 stuff first, which I think we should merge first, you'll have a subsequent build error to fix [1]
I agree, it would be simpler, I prepared a fix to apply on top of this patchset.
https://git.codelinaro.org/bryan.odonoghue/kernel/-/tree/linaro/arm-laptop/w...
Testing your series in isolation. I can confirm vp9 decodes also getting some strange prinouts which we need to follow up to see if they exist with the baseline driver [2].
https://git.codelinaro.org/bryan.odonoghue/kernel/-/tree/linaro/arm-laptop/w...
<snip>
[ 126.582170] qcom-iris aa00000.video-codec: session error received 0x1000006: unknown [ 126.582177] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state
With the following on top of the last SM8650 patchet + this patchset, I have the same HEVC errors on SM8650, but VP9 works fine: [ 115.185745] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 115.221058] qcom-iris aa00000.video-codec: session error received 0x1000006: unknown
==========================================><============================================== diff --git a/drivers/media/platform/qcom/iris/iris_platform_sm8550.c b/drivers/media/platform/qcom/iris/iris_platform_sm8550.c index 65f3accc2fb2..7d5116528fca 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_sm8550.c +++ b/drivers/media/platform/qcom/iris/iris_platform_sm8550.c @@ -213,6 +213,22 @@ static void iris_set_sm8550_preset_registers(struct iris_core *core) writel(0x0, core->reg_base + 0xB0088); }
+static void iris_set_sm8650_preset_registers(struct iris_core *core) +{ + writel(0x0, core->reg_base + 0xB0088); + writel(0x33332222, core->reg_base + 0x13030); + writel(0x44444444, core->reg_base + 0x13034); + writel(0x1022, core->reg_base + 0x13038); + writel(0x0, core->reg_base + 0x13040); + writel(0xFFFF, core->reg_base + 0x13048); + writel(0x33332222, core->reg_base + 0x13430); + writel(0x44444444, core->reg_base + 0x13434); + writel(0x1022, core->reg_base + 0x13438); + writel(0x0, core->reg_base + 0x13440); + writel(0xFFFF, core->reg_base + 0x13448); + writel(0x99, core->reg_base + 0xA013C); +} + static const struct icc_info sm8550_icc_table[] = { { "cpu-cfg", 1000, 1000 }, { "video-mem", 1000, 15000000 }, @@ -390,6 +406,7 @@ struct iris_platform_data sm8550_data = {
/* * Shares most of SM8550 data except: + * - set_preset_registers to iris_set_sm8650_preset_registers * - vpu_ops to iris_vpu33_ops * - clk_rst_tbl to sm8650_clk_reset_table * - controller_rst_tbl to sm8650_controller_reset_table @@ -400,7 +417,7 @@ struct iris_platform_data sm8650_data = { .init_hfi_command_ops = iris_hfi_gen2_command_ops_init, .init_hfi_response_ops = iris_hfi_gen2_response_ops_init, .vpu_ops = &iris_vpu33_ops, - .set_preset_registers = iris_set_sm8550_preset_registers, + .set_preset_registers = iris_set_sm8650_preset_registers, .icc_tbl = sm8550_icc_table, .icc_tbl_size = ARRAY_SIZE(sm8550_icc_table), .clk_rst_tbl = sm8650_clk_reset_table, @@ -428,20 +445,34 @@ struct iris_platform_data sm8650_data = { .ubwc_config = &ubwc_config_sm8550, .num_vpp_pipe = 4, .max_session_count = 16, - .max_core_mbpf = ((8192 * 4352) / 256) * 2, - .input_config_params = - sm8550_vdec_input_config_params, - .input_config_params_size = - ARRAY_SIZE(sm8550_vdec_input_config_params), + .max_core_mbpf = NUM_MBS_8K * 2, + .input_config_params_default = + sm8550_vdec_input_config_params_default, + .input_config_params_default_size = + ARRAY_SIZE(sm8550_vdec_input_config_params_default), + .input_config_params_hevc = + sm8550_vdec_input_config_param_hevc, + .input_config_params_hevc_size = + ARRAY_SIZE(sm8550_vdec_input_config_param_hevc), + .input_config_params_vp9 = + sm8550_vdec_input_config_param_vp9, + .input_config_params_vp9_size = + ARRAY_SIZE(sm8550_vdec_input_config_param_vp9), .output_config_params = sm8550_vdec_output_config_params, .output_config_params_size = ARRAY_SIZE(sm8550_vdec_output_config_params), .dec_input_prop = sm8550_vdec_subscribe_input_properties, .dec_input_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_input_properties), - .dec_output_prop = sm8550_vdec_subscribe_output_properties, - .dec_output_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_output_properties), - + .dec_output_prop_avc = sm8550_vdec_subscribe_output_properties_avc, + .dec_output_prop_avc_size = + ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_avc), + .dec_output_prop_hevc = sm8550_vdec_subscribe_output_properties_hevc, + .dec_output_prop_hevc_size = + ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_hevc), + .dec_output_prop_vp9 = sm8550_vdec_subscribe_output_properties_vp9, + .dec_output_prop_vp9_size = + ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_vp9), .dec_ip_int_buf_tbl = sm8550_dec_ip_int_buf_tbl, .dec_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_ip_int_buf_tbl), .dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl, ==========================================><==============================================
Thanks, Neil
On 4/9/2025 9:56 PM, Neil Armstrong wrote:
On 09/04/2025 16:29, Bryan O'Donoghue wrote:
On 08/04/2025 16:54, Dikshita Agarwal wrote:
Hi All,
This patch series adds initial support for the HEVC(H.265) and VP9 codecs in iris decoder. The objective of this work is to extend the decoder's capabilities to handle HEVC and VP9 codec streams, including necessary format handling and buffer management. In addition, the series also includes a set of fixes to address issues identified during testing of these additional codecs.
These patches also address the comments and feedback received from the RFC patches previously sent. I have made the necessary improvements based on the community's suggestions.
Changes sinces RFC:
- Added additional fixes to address issues identified during further
testing.
- Moved typo fix to a seperate patch [Neil]
- Reordered the patches for better logical flow and clarity [Neil,
Dmitry]
- Added fixes tag wherever applicable [Neil, Dmitry]
- Removed the default case in the switch statement for codecs [Bryan]
- Replaced if-else statements with switch-case [Bryan]
- Added comments for mbpf [Bryan]
- RFC:
https://lore.kernel.org/linux-media/20250305104335.3629945-1-quic_dikshita@q...
These patches are tested on SM8250 and SM8550 with v4l2-ctl and Gstreamer for HEVC and VP9 decoders, at the same time ensured that the existing H264 decoder functionality remains uneffected.
Note: 1 of the fluster compliance test is fixed with firmware [1] [1]: https://lore.kernel.org/linux-firmware/1a511921-446d-cdc4-0203-084c88a5dc1e@...
<snip>
Dikshita Agarwal (20): media: iris: Skip destroying internal buffer if not dequeued media: iris: Update CAPTURE format info based on OUTPUT format media: iris: Add handling for corrupt and drop frames media: iris: Avoid updating frame size to firmware during reconfig media: iris: Send V4L2_BUF_FLAG_ERROR for buffers with 0 filled length media: iris: Add handling for no show frames media: iris: Improve last flag handling media: iris: Skip flush on first sequence change media: iris: Prevent HFI queue writes when core is in deinit state media: iris: Remove redundant buffer count check in stream off media: iris: Remove deprecated property setting to firmware media: iris: Fix missing function pointer initialization media: iris: Fix NULL pointer dereference media: iris: Fix typo in depth variable media: iris: Add a comment to explain usage of MBPS media: iris: Add HEVC and VP9 formats for decoder media: iris: Add platform capabilities for HEVC and VP9 decoders media: iris: Set mandatory properties for HEVC and VP9 decoders. media: iris: Add internal buffer calculation for HEVC and VP9 decoders media: iris: Add codec specific check for VP9 decoder drain handling
drivers/media/platform/qcom/iris/iris_buffer.c | 22 +- drivers/media/platform/qcom/iris/iris_ctrls.c | 35 +- drivers/media/platform/qcom/iris/iris_hfi_common.h | 1 + .../platform/qcom/iris/iris_hfi_gen1_command.c | 44 ++- .../platform/qcom/iris/iris_hfi_gen1_defines.h | 5 +- .../platform/qcom/iris/iris_hfi_gen1_response.c | 22 +- .../platform/qcom/iris/iris_hfi_gen2_command.c | 143 +++++++- .../platform/qcom/iris/iris_hfi_gen2_defines.h | 5 + .../platform/qcom/iris/iris_hfi_gen2_response.c | 57 ++- drivers/media/platform/qcom/iris/iris_hfi_queue.c | 2 +- drivers/media/platform/qcom/iris/iris_instance.h | 6 + .../platform/qcom/iris/iris_platform_common.h | 28 +- .../platform/qcom/iris/iris_platform_sm8250.c | 15 +- .../platform/qcom/iris/iris_platform_sm8550.c | 143 +++++++- drivers/media/platform/qcom/iris/iris_vb2.c | 3 +- drivers/media/platform/qcom/iris/iris_vdec.c | 113 +++--- drivers/media/platform/qcom/iris/iris_vdec.h | 11 + drivers/media/platform/qcom/iris/iris_vidc.c | 3 - drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 397 ++++++++++++++++++++- drivers/media/platform/qcom/iris/iris_vpu_buffer.h | 46 ++- 20 files changed, 948 insertions(+), 153 deletions(-)
base-commit: 7824b91d23e9f255f0e9d2acaa74265c9cac2e9c change-id: 20250402-iris-dec-hevc-vp9-2654a1fc4d0d
Best regards,
Assuming we merge Neils sm8650 stuff first, which I think we should merge first, you'll have a subsequent build error to fix [1]
I agree, it would be simpler, I prepared a fix to apply on top of this patchset.
Lets sort out the platform data handling. More so, when i see that the patch you are adding more of 8650 specific data into 8550 file.
https://git.codelinaro.org/bryan.odonoghue/kernel/-/tree/linaro/arm-laptop/w...
Testing your series in isolation. I can confirm vp9 decodes also getting some strange prinouts which we need to follow up to see if they exist with the baseline driver [2].
https://git.codelinaro.org/bryan.odonoghue/kernel/-/tree/linaro/arm-laptop/w...
<snip>
[ 126.582170] qcom-iris aa00000.video-codec: session error received 0x1000006: unknown [ 126.582177] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state
With the following on top of the last SM8650 patchet + this patchset, I have the same HEVC errors on SM8650, but VP9 works fine: [ 115.185745] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 115.221058] qcom-iris aa00000.video-codec: session error received 0x1000006: unknown
==========================================><============================================== diff --git a/drivers/media/platform/qcom/iris/iris_platform_sm8550.c b/drivers/media/platform/qcom/iris/iris_platform_sm8550.c index 65f3accc2fb2..7d5116528fca 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_sm8550.c +++ b/drivers/media/platform/qcom/iris/iris_platform_sm8550.c @@ -213,6 +213,22 @@ static void iris_set_sm8550_preset_registers(struct iris_core *core) writel(0x0, core->reg_base + 0xB0088); }
+static void iris_set_sm8650_preset_registers(struct iris_core *core) +{ + writel(0x0, core->reg_base + 0xB0088); + writel(0x33332222, core->reg_base + 0x13030); + writel(0x44444444, core->reg_base + 0x13034); + writel(0x1022, core->reg_base + 0x13038); + writel(0x0, core->reg_base + 0x13040); + writel(0xFFFF, core->reg_base + 0x13048); + writel(0x33332222, core->reg_base + 0x13430); + writel(0x44444444, core->reg_base + 0x13434); + writel(0x1022, core->reg_base + 0x13438); + writel(0x0, core->reg_base + 0x13440); + writel(0xFFFF, core->reg_base + 0x13448); + writel(0x99, core->reg_base + 0xA013C); +}
This is strange, h264 decoder does not need any of those while VP9 needed it to work. I could see the same set of registers in downstream code, but cannot recollect now on the need to add those.
Regards, Vikash
static const struct icc_info sm8550_icc_table[] = { { "cpu-cfg", 1000, 1000 }, { "video-mem", 1000, 15000000 }, @@ -390,6 +406,7 @@ struct iris_platform_data sm8550_data = {
/* * Shares most of SM8550 data except:
- set_preset_registers to iris_set_sm8650_preset_registers
* - vpu_ops to iris_vpu33_ops * - clk_rst_tbl to sm8650_clk_reset_table * - controller_rst_tbl to sm8650_controller_reset_table @@ -400,7 +417,7 @@ struct iris_platform_data sm8650_data = { .init_hfi_command_ops = iris_hfi_gen2_command_ops_init, .init_hfi_response_ops = iris_hfi_gen2_response_ops_init, .vpu_ops = &iris_vpu33_ops, - .set_preset_registers = iris_set_sm8550_preset_registers, + .set_preset_registers = iris_set_sm8650_preset_registers, .icc_tbl = sm8550_icc_table, .icc_tbl_size = ARRAY_SIZE(sm8550_icc_table), .clk_rst_tbl = sm8650_clk_reset_table, @@ -428,20 +445,34 @@ struct iris_platform_data sm8650_data = { .ubwc_config = &ubwc_config_sm8550, .num_vpp_pipe = 4, .max_session_count = 16, - .max_core_mbpf = ((8192 * 4352) / 256) * 2, - .input_config_params = - sm8550_vdec_input_config_params, - .input_config_params_size = - ARRAY_SIZE(sm8550_vdec_input_config_params), + .max_core_mbpf = NUM_MBS_8K * 2, + .input_config_params_default = + sm8550_vdec_input_config_params_default, + .input_config_params_default_size = + ARRAY_SIZE(sm8550_vdec_input_config_params_default), + .input_config_params_hevc = + sm8550_vdec_input_config_param_hevc, + .input_config_params_hevc_size = + ARRAY_SIZE(sm8550_vdec_input_config_param_hevc), + .input_config_params_vp9 = + sm8550_vdec_input_config_param_vp9, + .input_config_params_vp9_size = + ARRAY_SIZE(sm8550_vdec_input_config_param_vp9), .output_config_params = sm8550_vdec_output_config_params, .output_config_params_size = ARRAY_SIZE(sm8550_vdec_output_config_params), .dec_input_prop = sm8550_vdec_subscribe_input_properties, .dec_input_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_input_properties), - .dec_output_prop = sm8550_vdec_subscribe_output_properties, - .dec_output_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_output_properties),
+ .dec_output_prop_avc = sm8550_vdec_subscribe_output_properties_avc, + .dec_output_prop_avc_size = + ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_avc), + .dec_output_prop_hevc = sm8550_vdec_subscribe_output_properties_hevc, + .dec_output_prop_hevc_size = + ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_hevc), + .dec_output_prop_vp9 = sm8550_vdec_subscribe_output_properties_vp9, + .dec_output_prop_vp9_size = + ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_vp9), .dec_ip_int_buf_tbl = sm8550_dec_ip_int_buf_tbl, .dec_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_ip_int_buf_tbl), .dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl, ==========================================><==============================================
Thanks, Neil
On 09/04/2025 19:59, Vikash Garodia wrote:
On 4/9/2025 9:56 PM, Neil Armstrong wrote:
On 09/04/2025 16:29, Bryan O'Donoghue wrote:
On 08/04/2025 16:54, Dikshita Agarwal wrote:
Hi All,
This patch series adds initial support for the HEVC(H.265) and VP9 codecs in iris decoder. The objective of this work is to extend the decoder's capabilities to handle HEVC and VP9 codec streams, including necessary format handling and buffer management. In addition, the series also includes a set of fixes to address issues identified during testing of these additional codecs.
These patches also address the comments and feedback received from the RFC patches previously sent. I have made the necessary improvements based on the community's suggestions.
Changes sinces RFC:
- Added additional fixes to address issues identified during further
testing.
- Moved typo fix to a seperate patch [Neil]
- Reordered the patches for better logical flow and clarity [Neil,
Dmitry]
- Added fixes tag wherever applicable [Neil, Dmitry]
- Removed the default case in the switch statement for codecs [Bryan]
- Replaced if-else statements with switch-case [Bryan]
- Added comments for mbpf [Bryan]
- RFC:
https://lore.kernel.org/linux-media/20250305104335.3629945-1-quic_dikshita@q...
These patches are tested on SM8250 and SM8550 with v4l2-ctl and Gstreamer for HEVC and VP9 decoders, at the same time ensured that the existing H264 decoder functionality remains uneffected.
Note: 1 of the fluster compliance test is fixed with firmware [1] [1]: https://lore.kernel.org/linux-firmware/1a511921-446d-cdc4-0203-084c88a5dc1e@...
<snip>
Dikshita Agarwal (20): media: iris: Skip destroying internal buffer if not dequeued media: iris: Update CAPTURE format info based on OUTPUT format media: iris: Add handling for corrupt and drop frames media: iris: Avoid updating frame size to firmware during reconfig media: iris: Send V4L2_BUF_FLAG_ERROR for buffers with 0 filled length media: iris: Add handling for no show frames media: iris: Improve last flag handling media: iris: Skip flush on first sequence change media: iris: Prevent HFI queue writes when core is in deinit state media: iris: Remove redundant buffer count check in stream off media: iris: Remove deprecated property setting to firmware media: iris: Fix missing function pointer initialization media: iris: Fix NULL pointer dereference media: iris: Fix typo in depth variable media: iris: Add a comment to explain usage of MBPS media: iris: Add HEVC and VP9 formats for decoder media: iris: Add platform capabilities for HEVC and VP9 decoders media: iris: Set mandatory properties for HEVC and VP9 decoders. media: iris: Add internal buffer calculation for HEVC and VP9 decoders media: iris: Add codec specific check for VP9 decoder drain handling
drivers/media/platform/qcom/iris/iris_buffer.c | 22 +- drivers/media/platform/qcom/iris/iris_ctrls.c | 35 +- drivers/media/platform/qcom/iris/iris_hfi_common.h | 1 + .../platform/qcom/iris/iris_hfi_gen1_command.c | 44 ++- .../platform/qcom/iris/iris_hfi_gen1_defines.h | 5 +- .../platform/qcom/iris/iris_hfi_gen1_response.c | 22 +- .../platform/qcom/iris/iris_hfi_gen2_command.c | 143 +++++++- .../platform/qcom/iris/iris_hfi_gen2_defines.h | 5 + .../platform/qcom/iris/iris_hfi_gen2_response.c | 57 ++- drivers/media/platform/qcom/iris/iris_hfi_queue.c | 2 +- drivers/media/platform/qcom/iris/iris_instance.h | 6 + .../platform/qcom/iris/iris_platform_common.h | 28 +- .../platform/qcom/iris/iris_platform_sm8250.c | 15 +- .../platform/qcom/iris/iris_platform_sm8550.c | 143 +++++++- drivers/media/platform/qcom/iris/iris_vb2.c | 3 +- drivers/media/platform/qcom/iris/iris_vdec.c | 113 +++--- drivers/media/platform/qcom/iris/iris_vdec.h | 11 + drivers/media/platform/qcom/iris/iris_vidc.c | 3 - drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 397 ++++++++++++++++++++- drivers/media/platform/qcom/iris/iris_vpu_buffer.h | 46 ++- 20 files changed, 948 insertions(+), 153 deletions(-)
base-commit: 7824b91d23e9f255f0e9d2acaa74265c9cac2e9c change-id: 20250402-iris-dec-hevc-vp9-2654a1fc4d0d
Best regards,
Assuming we merge Neils sm8650 stuff first, which I think we should merge first, you'll have a subsequent build error to fix [1]
I agree, it would be simpler, I prepared a fix to apply on top of this patchset.
Lets sort out the platform data handling. More so, when i see that the patch you are adding more of 8650 specific data into 8550 file.
Not really, I only add iris_set_sm8650_preset_registers()
https://git.codelinaro.org/bryan.odonoghue/kernel/-/tree/linaro/arm-laptop/w...
Testing your series in isolation. I can confirm vp9 decodes also getting some strange prinouts which we need to follow up to see if they exist with the baseline driver [2].
https://git.codelinaro.org/bryan.odonoghue/kernel/-/tree/linaro/arm-laptop/w...
<snip>
[ 126.582170] qcom-iris aa00000.video-codec: session error received 0x1000006: unknown [ 126.582177] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state
With the following on top of the last SM8650 patchet + this patchset, I have the same HEVC errors on SM8650, but VP9 works fine: [ 115.185745] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 115.221058] qcom-iris aa00000.video-codec: session error received 0x1000006: unknown
==========================================><============================================== diff --git a/drivers/media/platform/qcom/iris/iris_platform_sm8550.c b/drivers/media/platform/qcom/iris/iris_platform_sm8550.c index 65f3accc2fb2..7d5116528fca 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_sm8550.c +++ b/drivers/media/platform/qcom/iris/iris_platform_sm8550.c @@ -213,6 +213,22 @@ static void iris_set_sm8550_preset_registers(struct iris_core *core) writel(0x0, core->reg_base + 0xB0088); }
+static void iris_set_sm8650_preset_registers(struct iris_core *core) +{ + writel(0x0, core->reg_base + 0xB0088); + writel(0x33332222, core->reg_base + 0x13030); + writel(0x44444444, core->reg_base + 0x13034); + writel(0x1022, core->reg_base + 0x13038); + writel(0x0, core->reg_base + 0x13040); + writel(0xFFFF, core->reg_base + 0x13048); + writel(0x33332222, core->reg_base + 0x13430); + writel(0x44444444, core->reg_base + 0x13434); + writel(0x1022, core->reg_base + 0x13438); + writel(0x0, core->reg_base + 0x13440); + writel(0xFFFF, core->reg_base + 0x13448); + writel(0x99, core->reg_base + 0xA013C); +}
This is strange, h264 decoder does not need any of those while VP9 needed it to work. I could see the same set of registers in downstream code, but cannot recollect now on the need to add those.
Yes this is why I added it only to enable support for HEVC and VP9, before we were using the iris_set_sm8550_preset_registers().
Regards, Vikash
static const struct icc_info sm8550_icc_table[] = { { "cpu-cfg", 1000, 1000 }, { "video-mem", 1000, 15000000 }, @@ -390,6 +406,7 @@ struct iris_platform_data sm8550_data = {
/* * Shares most of SM8550 data except:
- set_preset_registers to iris_set_sm8650_preset_registers
* - vpu_ops to iris_vpu33_ops * - clk_rst_tbl to sm8650_clk_reset_table * - controller_rst_tbl to sm8650_controller_reset_table @@ -400,7 +417,7 @@ struct iris_platform_data sm8650_data = { .init_hfi_command_ops = iris_hfi_gen2_command_ops_init, .init_hfi_response_ops = iris_hfi_gen2_response_ops_init, .vpu_ops = &iris_vpu33_ops, - .set_preset_registers = iris_set_sm8550_preset_registers, + .set_preset_registers = iris_set_sm8650_preset_registers, .icc_tbl = sm8550_icc_table, .icc_tbl_size = ARRAY_SIZE(sm8550_icc_table), .clk_rst_tbl = sm8650_clk_reset_table, @@ -428,20 +445,34 @@ struct iris_platform_data sm8650_data = { .ubwc_config = &ubwc_config_sm8550, .num_vpp_pipe = 4, .max_session_count = 16, - .max_core_mbpf = ((8192 * 4352) / 256) * 2, - .input_config_params = - sm8550_vdec_input_config_params, - .input_config_params_size = - ARRAY_SIZE(sm8550_vdec_input_config_params), + .max_core_mbpf = NUM_MBS_8K * 2, + .input_config_params_default = + sm8550_vdec_input_config_params_default, + .input_config_params_default_size = + ARRAY_SIZE(sm8550_vdec_input_config_params_default), + .input_config_params_hevc = + sm8550_vdec_input_config_param_hevc, + .input_config_params_hevc_size = + ARRAY_SIZE(sm8550_vdec_input_config_param_hevc), + .input_config_params_vp9 = + sm8550_vdec_input_config_param_vp9, + .input_config_params_vp9_size = + ARRAY_SIZE(sm8550_vdec_input_config_param_vp9), .output_config_params = sm8550_vdec_output_config_params, .output_config_params_size = ARRAY_SIZE(sm8550_vdec_output_config_params), .dec_input_prop = sm8550_vdec_subscribe_input_properties, .dec_input_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_input_properties), - .dec_output_prop = sm8550_vdec_subscribe_output_properties, - .dec_output_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_output_properties),
+ .dec_output_prop_avc = sm8550_vdec_subscribe_output_properties_avc, + .dec_output_prop_avc_size = + ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_avc), + .dec_output_prop_hevc = sm8550_vdec_subscribe_output_properties_hevc, + .dec_output_prop_hevc_size = + ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_hevc), + .dec_output_prop_vp9 = sm8550_vdec_subscribe_output_properties_vp9, + .dec_output_prop_vp9_size = + ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_vp9), .dec_ip_int_buf_tbl = sm8550_dec_ip_int_buf_tbl, .dec_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_ip_int_buf_tbl), .dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl, ==========================================><==============================================
Thanks, Neil
On 4/10/2025 12:50 PM, neil.armstrong@linaro.org wrote:
On 09/04/2025 19:59, Vikash Garodia wrote:
On 4/9/2025 9:56 PM, Neil Armstrong wrote:
On 09/04/2025 16:29, Bryan O'Donoghue wrote:
On 08/04/2025 16:54, Dikshita Agarwal wrote:
Hi All,
This patch series adds initial support for the HEVC(H.265) and VP9 codecs in iris decoder. The objective of this work is to extend the decoder's capabilities to handle HEVC and VP9 codec streams, including necessary format handling and buffer management. In addition, the series also includes a set of fixes to address issues identified during testing of these additional codecs.
These patches also address the comments and feedback received from the RFC patches previously sent. I have made the necessary improvements based on the community's suggestions.
Changes sinces RFC:
- Added additional fixes to address issues identified during further
testing.
- Moved typo fix to a seperate patch [Neil]
- Reordered the patches for better logical flow and clarity [Neil,
Dmitry]
- Added fixes tag wherever applicable [Neil, Dmitry]
- Removed the default case in the switch statement for codecs [Bryan]
- Replaced if-else statements with switch-case [Bryan]
- Added comments for mbpf [Bryan]
- RFC:
https://lore.kernel.org/linux-media/20250305104335.3629945-1-quic_dikshita@q...
These patches are tested on SM8250 and SM8550 with v4l2-ctl and Gstreamer for HEVC and VP9 decoders, at the same time ensured that the existing H264 decoder functionality remains uneffected.
Note: 1 of the fluster compliance test is fixed with firmware [1] [1]: https://lore.kernel.org/linux-firmware/1a511921-446d-cdc4-0203-084c88a5dc1e@...
<snip>
Dikshita Agarwal (20): media: iris: Skip destroying internal buffer if not dequeued media: iris: Update CAPTURE format info based on OUTPUT format media: iris: Add handling for corrupt and drop frames media: iris: Avoid updating frame size to firmware during reconfig media: iris: Send V4L2_BUF_FLAG_ERROR for buffers with 0 filled length media: iris: Add handling for no show frames media: iris: Improve last flag handling media: iris: Skip flush on first sequence change media: iris: Prevent HFI queue writes when core is in deinit state media: iris: Remove redundant buffer count check in stream off media: iris: Remove deprecated property setting to firmware media: iris: Fix missing function pointer initialization media: iris: Fix NULL pointer dereference media: iris: Fix typo in depth variable media: iris: Add a comment to explain usage of MBPS media: iris: Add HEVC and VP9 formats for decoder media: iris: Add platform capabilities for HEVC and VP9 decoders media: iris: Set mandatory properties for HEVC and VP9 decoders. media: iris: Add internal buffer calculation for HEVC and VP9 decoders media: iris: Add codec specific check for VP9 decoder drain handling
drivers/media/platform/qcom/iris/iris_buffer.c | 22 +- drivers/media/platform/qcom/iris/iris_ctrls.c | 35 +- drivers/media/platform/qcom/iris/iris_hfi_common.h | 1 + .../platform/qcom/iris/iris_hfi_gen1_command.c | 44 ++- .../platform/qcom/iris/iris_hfi_gen1_defines.h | 5 +- .../platform/qcom/iris/iris_hfi_gen1_response.c | 22 +- .../platform/qcom/iris/iris_hfi_gen2_command.c | 143 +++++++- .../platform/qcom/iris/iris_hfi_gen2_defines.h | 5 + .../platform/qcom/iris/iris_hfi_gen2_response.c | 57 ++- drivers/media/platform/qcom/iris/iris_hfi_queue.c | 2 +- drivers/media/platform/qcom/iris/iris_instance.h | 6 + .../platform/qcom/iris/iris_platform_common.h | 28 +- .../platform/qcom/iris/iris_platform_sm8250.c | 15 +- .../platform/qcom/iris/iris_platform_sm8550.c | 143 +++++++- drivers/media/platform/qcom/iris/iris_vb2.c | 3 +- drivers/media/platform/qcom/iris/iris_vdec.c | 113 +++--- drivers/media/platform/qcom/iris/iris_vdec.h | 11 + drivers/media/platform/qcom/iris/iris_vidc.c | 3 - drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 397 ++++++++++++++++++++- drivers/media/platform/qcom/iris/iris_vpu_buffer.h | 46 ++- 20 files changed, 948 insertions(+), 153 deletions(-)
base-commit: 7824b91d23e9f255f0e9d2acaa74265c9cac2e9c change-id: 20250402-iris-dec-hevc-vp9-2654a1fc4d0d
Best regards,
Assuming we merge Neils sm8650 stuff first, which I think we should merge first, you'll have a subsequent build error to fix [1]
I agree, it would be simpler, I prepared a fix to apply on top of this patchset.
Lets sort out the platform data handling. More so, when i see that the patch you are adding more of 8650 specific data into 8550 file.
Not really, I only add iris_set_sm8650_preset_registers()
You might have added iris_set_sm8650_preset_registers in this patch, but the list have already grown enough which demand for separate SOC specific platform data file. Better done now than keeping it for later.
Thanks, Vikash
https://git.codelinaro.org/bryan.odonoghue/kernel/-/tree/linaro/arm-laptop/w...
Testing your series in isolation. I can confirm vp9 decodes also getting some strange prinouts which we need to follow up to see if they exist with the baseline driver [2].
https://git.codelinaro.org/bryan.odonoghue/kernel/-/tree/linaro/arm-laptop/w...
<snip>
[ 126.582170] qcom-iris aa00000.video-codec: session error received 0x1000006: unknown [ 126.582177] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state
With the following on top of the last SM8650 patchet + this patchset, I have the same HEVC errors on SM8650, but VP9 works fine: [ 115.185745] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 115.221058] qcom-iris aa00000.video-codec: session error received 0x1000006: unknown
==========================================><============================================== diff --git a/drivers/media/platform/qcom/iris/iris_platform_sm8550.c b/drivers/media/platform/qcom/iris/iris_platform_sm8550.c index 65f3accc2fb2..7d5116528fca 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_sm8550.c +++ b/drivers/media/platform/qcom/iris/iris_platform_sm8550.c @@ -213,6 +213,22 @@ static void iris_set_sm8550_preset_registers(struct iris_core *core) writel(0x0, core->reg_base + 0xB0088); }
+static void iris_set_sm8650_preset_registers(struct iris_core *core) +{ + writel(0x0, core->reg_base + 0xB0088); + writel(0x33332222, core->reg_base + 0x13030); + writel(0x44444444, core->reg_base + 0x13034); + writel(0x1022, core->reg_base + 0x13038); + writel(0x0, core->reg_base + 0x13040); + writel(0xFFFF, core->reg_base + 0x13048); + writel(0x33332222, core->reg_base + 0x13430); + writel(0x44444444, core->reg_base + 0x13434); + writel(0x1022, core->reg_base + 0x13438); + writel(0x0, core->reg_base + 0x13440); + writel(0xFFFF, core->reg_base + 0x13448); + writel(0x99, core->reg_base + 0xA013C); +}
This is strange, h264 decoder does not need any of those while VP9 needed it to work. I could see the same set of registers in downstream code, but cannot recollect now on the need to add those.
Yes this is why I added it only to enable support for HEVC and VP9, before we were using the iris_set_sm8550_preset_registers().
Regards, Vikash
static const struct icc_info sm8550_icc_table[] = { { "cpu-cfg", 1000, 1000 }, { "video-mem", 1000, 15000000 }, @@ -390,6 +406,7 @@ struct iris_platform_data sm8550_data = {
/* * Shares most of SM8550 data except:
- set_preset_registers to iris_set_sm8650_preset_registers
* - vpu_ops to iris_vpu33_ops * - clk_rst_tbl to sm8650_clk_reset_table * - controller_rst_tbl to sm8650_controller_reset_table @@ -400,7 +417,7 @@ struct iris_platform_data sm8650_data = { .init_hfi_command_ops = iris_hfi_gen2_command_ops_init, .init_hfi_response_ops = iris_hfi_gen2_response_ops_init, .vpu_ops = &iris_vpu33_ops, - .set_preset_registers = iris_set_sm8550_preset_registers, + .set_preset_registers = iris_set_sm8650_preset_registers, .icc_tbl = sm8550_icc_table, .icc_tbl_size = ARRAY_SIZE(sm8550_icc_table), .clk_rst_tbl = sm8650_clk_reset_table, @@ -428,20 +445,34 @@ struct iris_platform_data sm8650_data = { .ubwc_config = &ubwc_config_sm8550, .num_vpp_pipe = 4, .max_session_count = 16, - .max_core_mbpf = ((8192 * 4352) / 256) * 2, - .input_config_params = - sm8550_vdec_input_config_params, - .input_config_params_size = - ARRAY_SIZE(sm8550_vdec_input_config_params), + .max_core_mbpf = NUM_MBS_8K * 2, + .input_config_params_default = + sm8550_vdec_input_config_params_default, + .input_config_params_default_size = + ARRAY_SIZE(sm8550_vdec_input_config_params_default), + .input_config_params_hevc = + sm8550_vdec_input_config_param_hevc, + .input_config_params_hevc_size = + ARRAY_SIZE(sm8550_vdec_input_config_param_hevc), + .input_config_params_vp9 = + sm8550_vdec_input_config_param_vp9, + .input_config_params_vp9_size = + ARRAY_SIZE(sm8550_vdec_input_config_param_vp9), .output_config_params = sm8550_vdec_output_config_params, .output_config_params_size = ARRAY_SIZE(sm8550_vdec_output_config_params), .dec_input_prop = sm8550_vdec_subscribe_input_properties, .dec_input_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_input_properties), - .dec_output_prop = sm8550_vdec_subscribe_output_properties, - .dec_output_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_output_properties),
+ .dec_output_prop_avc = sm8550_vdec_subscribe_output_properties_avc, + .dec_output_prop_avc_size = + ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_avc), + .dec_output_prop_hevc = sm8550_vdec_subscribe_output_properties_hevc, + .dec_output_prop_hevc_size = + ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_hevc), + .dec_output_prop_vp9 = sm8550_vdec_subscribe_output_properties_vp9, + .dec_output_prop_vp9_size = + ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_vp9), .dec_ip_int_buf_tbl = sm8550_dec_ip_int_buf_tbl, .dec_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_ip_int_buf_tbl), .dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl, ==========================================><==============================================
Thanks, Neil
On 4/9/2025 7:59 PM, Bryan O'Donoghue wrote:
On 08/04/2025 16:54, Dikshita Agarwal wrote:
Hi All,
This patch series adds initial support for the HEVC(H.265) and VP9 codecs in iris decoder. The objective of this work is to extend the decoder's capabilities to handle HEVC and VP9 codec streams, including necessary format handling and buffer management. In addition, the series also includes a set of fixes to address issues identified during testing of these additional codecs.
These patches also address the comments and feedback received from the RFC patches previously sent. I have made the necessary improvements based on the community's suggestions.
Changes sinces RFC:
- Added additional fixes to address issues identified during further
testing.
- Moved typo fix to a seperate patch [Neil]
- Reordered the patches for better logical flow and clarity [Neil,
Dmitry]
- Added fixes tag wherever applicable [Neil, Dmitry]
- Removed the default case in the switch statement for codecs [Bryan]
- Replaced if-else statements with switch-case [Bryan]
- Added comments for mbpf [Bryan]
- RFC:
https://lore.kernel.org/linux-media/20250305104335.3629945-1-quic_dikshita@q...
These patches are tested on SM8250 and SM8550 with v4l2-ctl and Gstreamer for HEVC and VP9 decoders, at the same time ensured that the existing H264 decoder functionality remains uneffected.
Note: 1 of the fluster compliance test is fixed with firmware [1] [1]: https://lore.kernel.org/linux-firmware/1a511921-446d-cdc4-0203-084c88a5dc1e@...
The result of fluster test on SM8550: 131/147 testcases passed while testing JCT-VC-HEVC_V1 with GStreamer-H.265-V4L2-Gst1.0. The failing test case: - 10 testcases failed due to unsupported 10 bit format. - DBLK_A_MAIN10_VIXS_4 - INITQP_B_Main10_Sony_1 - TSUNEQBD_A_MAIN10_Technicolor_2 - WP_A_MAIN10_Toshiba_3 - WP_MAIN10_B_Toshiba_3 - WPP_A_ericsson_MAIN10_2 - WPP_B_ericsson_MAIN10_2 - WPP_C_ericsson_MAIN10_2 - WPP_E_ericsson_MAIN10_2 - WPP_F_ericsson_MAIN10_2 - 4 testcase failed due to unsupported resolution - PICSIZE_A_Bossen_1 - PICSIZE_B_Bossen_1 - WPP_D_ericsson_MAIN10_2 - WPP_D_ericsson_MAIN_2 - 1 testcase failed as bitstream is invalid (this fails with reference as well) - RAP_B_Bossen_2 - 1 testcase failed due to CRC mismatch - RAP_A_docomo_6 Analysis - First few frames in this discarded by firmware and are sent to driver with 0 filled length. Driver send such buffers to client with timestamp 0 and payload set to 0 and make buf state to VB2_BUF_STATE_ERROR. Such buffers should be dropped by GST. But instead, the first frame displayed as green frame and when a valid buffer is sent to client later with same 0 timestamp, its dropped, leading to CRC mismatch for first frame.
235/305 testcases passed while testing VP9-TEST-VECTORS with GStreamer-VP9-V4L2-Gst1.0. The failing test case: - 64 testcases failed due to unsupported resolution - vp90-2-02-size-08x08.webm - vp90-2-02-size-08x10.webm - vp90-2-02-size-08x16.webm - vp90-2-02-size-08x18.webm - vp90-2-02-size-08x32.webm - vp90-2-02-size-08x34.webm - vp90-2-02-size-08x64.webm - vp90-2-02-size-08x66.webm - vp90-2-02-size-10x08.webm - vp90-2-02-size-10x10.webm - vp90-2-02-size-10x16.webm - vp90-2-02-size-10x18.webm - vp90-2-02-size-10x32.webm - vp90-2-02-size-10x34.webm - vp90-2-02-size-10x64.webm - vp90-2-02-size-10x66.webm - vp90-2-02-size-16x08.webm - vp90-2-02-size-16x10.webm - vp90-2-02-size-16x16.webm - vp90-2-02-size-16x18.webm - vp90-2-02-size-16x32.webm - vp90-2-02-size-16x34.webm - vp90-2-02-size-16x64.webm - vp90-2-02-size-16x66.webm - vp90-2-02-size-18x08.webm - vp90-2-02-size-18x10.webm - vp90-2-02-size-18x16.webm - vp90-2-02-size-18x18.webm - vp90-2-02-size-18x32.webm - vp90-2-02-size-18x34.webm - vp90-2-02-size-18x64.webm - vp90-2-02-size-18x66.webm - vp90-2-02-size-32x08.webm - vp90-2-02-size-32x10.webm - vp90-2-02-size-32x16.webm - vp90-2-02-size-32x18.webm - vp90-2-02-size-32x32.webm - vp90-2-02-size-32x34.webm - vp90-2-02-size-32x64.webm - vp90-2-02-size-32x66.webm - vp90-2-02-size-34x08.webm - vp90-2-02-size-34x10.webm - vp90-2-02-size-34x16.webm - vp90-2-02-size-34x18.webm - vp90-2-02-size-34x32.webm - vp90-2-02-size-34x34.webm - vp90-2-02-size-34x64.webm - vp90-2-02-size-34x66.webm - vp90-2-02-size-64x08.webm - vp90-2-02-size-64x10.webm - vp90-2-02-size-64x16.webm - vp90-2-02-size-64x18.webm - vp90-2-02-size-64x32.webm - vp90-2-02-size-64x34.webm - vp90-2-02-size-64x64.webm - vp90-2-02-size-64x66.webm - vp90-2-02-size-66x08.webm - vp90-2-02-size-66x10.webm - vp90-2-02-size-66x16.webm - vp90-2-02-size-66x18.webm - vp90-2-02-size-66x32.webm - vp90-2-02-size-66x34.webm - vp90-2-02-size-66x64.webm - vp90-2-02-size-66x66.webm - 2 testcases failed due to unsupported format - vp91-2-04-yuv422.webm - vp91-2-04-yuv444.webm - 1 testcase failed with CRC mismatch (fails with ref decoder as well) - vp90-2-22-svc_1280x720_3.ivf - 2 testcase failed due to unsupported resolution after sequence change - vp90-2-21-resize_inter_320x180_5_1-2.webm - vp90-2-21-resize_inter_320x180_7_1-2.webm - 1 testcase failed due to unsupported stream - vp90-2-16-intra-only.webm Note: There is a timing issue with the clips having multiple resolution change. Where firmware returned all the buffers with previous sequence and has no buffer left to attach the LAST flag to. At the same time, client is not queueing any further buffers, so there is deadlock where client is waiting for LAST flag, while firmware doesn't have any capture buffer to attach LAST flag to. Ideally client should keep queueing the buffers on capture queue untill the LAST flag is received.
The result of fluster test on SM8250: 132/147 testcases passed while testing JCT-VC-HEVC_V1 with GStreamer-H.265-V4L2-Gst1.0. The failing test case: - 10 testcases failed due to unsupported 10 bit format. - DBLK_A_MAIN10_VIXS_4 - INITQP_B_Main10_Sony_1 - TSUNEQBD_A_MAIN10_Technicolor_2 - WP_A_MAIN10_Toshiba_3 - WP_MAIN10_B_Toshiba_3 - WPP_A_ericsson_MAIN10_2 - WPP_B_ericsson_MAIN10_2 - WPP_C_ericsson_MAIN10_2 - WPP_E_ericsson_MAIN10_2 - WPP_F_ericsson_MAIN10_2 - 4 testcase failed due to unsupported resolution - PICSIZE_A_Bossen_1 - PICSIZE_B_Bossen_1 - WPP_D_ericsson_MAIN10_2 - WPP_D_ericsson_MAIN_2 - 1 testcase failed as bitstream is invalid (this fails with reference as well) - RAP_B_Bossen_2
232/305 testcases passed while testing VP9-TEST-VECTORS with GStreamer-VP9-V4L2-Gst1.0. The failing test case: - 64 testcases failed due to unsupported resolution - vp90-2-02-size-08x08.webm - vp90-2-02-size-08x10.webm - vp90-2-02-size-08x16.webm - vp90-2-02-size-08x18.webm - vp90-2-02-size-08x32.webm - vp90-2-02-size-08x34.webm - vp90-2-02-size-08x64.webm - vp90-2-02-size-08x66.webm - vp90-2-02-size-10x08.webm - vp90-2-02-size-10x10.webm - vp90-2-02-size-10x16.webm - vp90-2-02-size-10x18.webm - vp90-2-02-size-10x32.webm - vp90-2-02-size-10x34.webm - vp90-2-02-size-10x64.webm - vp90-2-02-size-10x66.webm - vp90-2-02-size-16x08.webm - vp90-2-02-size-16x10.webm - vp90-2-02-size-16x16.webm - vp90-2-02-size-16x18.webm - vp90-2-02-size-16x32.webm - vp90-2-02-size-16x34.webm - vp90-2-02-size-16x64.webm - vp90-2-02-size-16x66.webm - vp90-2-02-size-18x08.webm - vp90-2-02-size-18x10.webm - vp90-2-02-size-18x16.webm - vp90-2-02-size-18x18.webm - vp90-2-02-size-18x32.webm - vp90-2-02-size-18x34.webm - vp90-2-02-size-18x64.webm - vp90-2-02-size-18x66.webm - vp90-2-02-size-32x08.webm - vp90-2-02-size-32x10.webm - vp90-2-02-size-32x16.webm - vp90-2-02-size-32x18.webm - vp90-2-02-size-32x32.webm - vp90-2-02-size-32x34.webm - vp90-2-02-size-32x64.webm - vp90-2-02-size-32x66.webm - vp90-2-02-size-34x08.webm - vp90-2-02-size-34x10.webm - vp90-2-02-size-34x16.webm - vp90-2-02-size-34x18.webm - vp90-2-02-size-34x32.webm - vp90-2-02-size-34x34.webm - vp90-2-02-size-34x64.webm - vp90-2-02-size-34x66.webm - vp90-2-02-size-64x08.webm - vp90-2-02-size-64x10.webm - vp90-2-02-size-64x16.webm - vp90-2-02-size-64x18.webm - vp90-2-02-size-64x32.webm - vp90-2-02-size-64x34.webm - vp90-2-02-size-64x64.webm - vp90-2-02-size-64x66.webm - vp90-2-02-size-66x08.webm - vp90-2-02-size-66x10.webm - vp90-2-02-size-66x16.webm - vp90-2-02-size-66x18.webm - vp90-2-02-size-66x32.webm - vp90-2-02-size-66x34.webm - vp90-2-02-size-66x64.webm - vp90-2-02-size-66x66.webm - 2 testcases failed due to unsupported format - vp91-2-04-yuv422.webm - vp91-2-04-yuv444.webm - 1 testcase failed with CRC mismatch (fails with ref decoder as well) - vp90-2-22-svc_1280x720_3.ivf - 5 testcase failed due to unsupported resolution after sequence change - vp90-2-21-resize_inter_320x180_5_1-2.webm - vp90-2-21-resize_inter_320x180_7_1-2.webm - vp90-2-21-resize_inter_320x240_5_1-2.webm - vp90-2-21-resize_inter_320x240_7_1-2.webm - vp90-2-18-resize.ivf - 1 testcase failed with CRC mismatch - vp90-2-16-intra-only.webm Analysis: First few frames are marked by firmware as NO_SHOW frame. Driver make buf state to VB2_BUF_STATE_ERROR for such frames. Such buffers should be dropped by GST. But instead, the first frame is being displayed and when a valid buffer is sent to client later with same timestamp, its dropped, leading to CRC mismatch for first frame. Note: Same timing issue as observed on SM8550 is seen on SM8250 as well.
Signed-off-by: Dikshita Agarwal quic_dikshita@quicinc.com
Dikshita Agarwal (20): media: iris: Skip destroying internal buffer if not dequeued media: iris: Update CAPTURE format info based on OUTPUT format media: iris: Add handling for corrupt and drop frames media: iris: Avoid updating frame size to firmware during reconfig media: iris: Send V4L2_BUF_FLAG_ERROR for buffers with 0 filled length media: iris: Add handling for no show frames media: iris: Improve last flag handling media: iris: Skip flush on first sequence change media: iris: Prevent HFI queue writes when core is in deinit state media: iris: Remove redundant buffer count check in stream off media: iris: Remove deprecated property setting to firmware media: iris: Fix missing function pointer initialization media: iris: Fix NULL pointer dereference media: iris: Fix typo in depth variable media: iris: Add a comment to explain usage of MBPS media: iris: Add HEVC and VP9 formats for decoder media: iris: Add platform capabilities for HEVC and VP9 decoders media: iris: Set mandatory properties for HEVC and VP9 decoders. media: iris: Add internal buffer calculation for HEVC and VP9 decoders media: iris: Add codec specific check for VP9 decoder drain handling
drivers/media/platform/qcom/iris/iris_buffer.c | 22 +- drivers/media/platform/qcom/iris/iris_ctrls.c | 35 +- drivers/media/platform/qcom/iris/iris_hfi_common.h | 1 + .../platform/qcom/iris/iris_hfi_gen1_command.c | 44 ++- .../platform/qcom/iris/iris_hfi_gen1_defines.h | 5 +- .../platform/qcom/iris/iris_hfi_gen1_response.c | 22 +- .../platform/qcom/iris/iris_hfi_gen2_command.c | 143 +++++++- .../platform/qcom/iris/iris_hfi_gen2_defines.h | 5 + .../platform/qcom/iris/iris_hfi_gen2_response.c | 57 ++- drivers/media/platform/qcom/iris/iris_hfi_queue.c | 2 +- drivers/media/platform/qcom/iris/iris_instance.h | 6 + .../platform/qcom/iris/iris_platform_common.h | 28 +- .../platform/qcom/iris/iris_platform_sm8250.c | 15 +- .../platform/qcom/iris/iris_platform_sm8550.c | 143 +++++++- drivers/media/platform/qcom/iris/iris_vb2.c | 3 +- drivers/media/platform/qcom/iris/iris_vdec.c | 113 +++--- drivers/media/platform/qcom/iris/iris_vdec.h | 11 + drivers/media/platform/qcom/iris/iris_vidc.c | 3 - drivers/media/platform/qcom/iris/iris_vpu_buffer.c | 397 ++++++++++++++++++++- drivers/media/platform/qcom/iris/iris_vpu_buffer.h | 46 ++- 20 files changed, 948 insertions(+), 153 deletions(-)
base-commit: 7824b91d23e9f255f0e9d2acaa74265c9cac2e9c change-id: 20250402-iris-dec-hevc-vp9-2654a1fc4d0d
Best regards,
Assuming we merge Neils sm8650 stuff first, which I think we should merge first, you'll have a subsequent build error to fix [1]
I am okay to let Lanai go first (with only h264 enabled) after all open comments are addressed on the patch series posted. Currently my changes are not including Lanai changes, so the compilation errors are obvious if you combine Lanai patches with this series. once Lanai changes are reviewed/accepted, I am okay to rebase this series on top of it.
https://git.codelinaro.org/bryan.odonoghue/kernel/-/tree/linaro/arm-laptop/w...
Testing your series in isolation. I can confirm vp9 decodes also getting some strange prinouts which we need to follow up to see if they exist with the baseline driver [2].
Sure, I will also take a look at it.
Thanks, Dikshita
https://git.codelinaro.org/bryan.odonoghue/kernel/-/tree/linaro/arm-laptop/w...
[1]
CC [M] drivers/media/platform/qcom/iris/iris_vdec.o /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:432:10: error: ‘struct iris_platform_data’ has no member named ‘input_config_params’; did you mean ‘output_config_params’? 432 | .input_config_params = | ^~~~~~~~~~~~~~~~~~~ | output_config_params /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:433:17: error: ‘sm8550_vdec_input_config_params’ undeclared here (not in a function); did you mean ‘sm8550_vdec_output_config_params’? 433 | sm8550_vdec_input_config_params, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | sm8550_vdec_output_config_params /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:434:10: error: ‘struct iris_platform_data’ has no member named ‘input_config_params_size’; did you mean ‘output_config_params_size’? 434 | .input_config_params_size = | ^~~~~~~~~~~~~~~~~~~~~~~~ | output_config_params_size In file included from /home/deckard/Development/linux/include/linux/dev_printk.h:14, from /home/deckard/Development/linux/include/linux/device.h:15, from /home/deckard/Development/linux/include/linux/pm_domain.h:11, from /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_core.h:10, from /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:6: /home/deckard/Development/linux/include/linux/compiler.h:197:77: error: expression in static assertion is not an integer 197 | #define __BUILD_BUG_ON_ZERO_MSG(e, msg) ((int)sizeof(struct {_Static_assert(!(e), msg);})) | ^ /home/deckard/Development/linux/include/linux/compiler.h:202:33: note: in expansion of macro ‘__BUILD_BUG_ON_ZERO_MSG’ 202 | #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ | ^~~~~~~~~~~~~~~~~~~~~~~ /home/deckard/Development/linux/include/linux/array_size.h:11:59: note: in expansion of macro ‘__must_be_array’ 11 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) | ^~~~~~~~~~~~~~~ /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:435:17: note: in expansion of macro ‘ARRAY_SIZE’ 435 | ARRAY_SIZE(sm8550_vdec_input_config_params), | ^~~~~~~~~~ /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:442:10: error: ‘struct iris_platform_data’ has no member named ‘dec_output_prop’; did you mean ‘dec_input_prop’? 442 | .dec_output_prop = sm8550_vdec_subscribe_output_properties, | ^~~~~~~~~~~~~~~ | dec_input_prop CC [M] drivers/media/platform/qcom/iris/iris_vpu3x.o /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:442:28: error: ‘sm8550_vdec_subscribe_output_properties’ undeclared here (not in a function); did you mean ‘sm8550_vdec_subscribe_input_properties’? 442 | .dec_output_prop = sm8550_vdec_subscribe_output_properties, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | sm8550_vdec_subscribe_input_properties /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:443:10: error: ‘struct iris_platform_data’ has no member named ‘dec_output_prop_size’; did you mean ‘dec_input_prop_size’? 443 | .dec_output_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_output_properties), | ^~~~~~~~~~~~~~~~~~~~ | dec_input_prop_size /home/deckard/Development/linux/include/linux/compiler.h:197:77: error: expression in static assertion is not an integer 197 | #define __BUILD_BUG_ON_ZERO_MSG(e, msg) ((int)sizeof(struct {_Static_assert(!(e), msg);})) | ^ /home/deckard/Development/linux/include/linux/compiler.h:202:33: note: in expansion of macro ‘__BUILD_BUG_ON_ZERO_MSG’ 202 | #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ | ^~~~~~~~~~~~~~~~~~~~~~~ /home/deckard/Development/linux/include/linux/array_size.h:11:59: note: in expansion of macro ‘__must_be_array’ 11 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) | ^~~~~~~~~~~~~~~ /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:443:33: note: in expansion of macro ‘ARRAY_SIZE’ 443 | .dec_output_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_output_properties), | ^~~~~~~~~~ make[8]: *** [/home/deckard/Development/linux/scripts/Makefile.build:203: drivers/media/platform/qcom/iris/iris_platform_sm8550.o] Error 1 make[8]: *** Waiting for unfinished jobs.... make[7]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media/platform/qcom/iris] Error 2 make[6]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media/platform/qcom] Error 2 make[5]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media/platform] Error 2 make[4]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media] Error 2 make[3]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers] Error 2 make[2]: *** [/home/deckard/Development/linux/Makefile:2006: .] Error 2 make[1]: *** [/home/deckard/Development/linux/Makefile:248: __sub-make] Error 2 make[1]: Leaving directory '/home/deckard/Development/linux-tools/qlt-kernel/build/x1e80100-crd_qlt_integration' make: *** [Makefile:248: __sub-make] Error 2 make[1]: Entering directory '/home/deckard/Development/linux-tools/qlt-kernel/build/x1e80100-crd_qlt_integration' GEN Makefile CALL /home/deckard/Development/linux/scripts/checksyscalls.sh CC [M] drivers/media/platform/qcom/iris/iris_platform_sm8550.o CC [M] drivers/media/platform/qcom/iris/iris_vpu_buffer.o CC [M] drivers/media/platform/qcom/iris/iris_vpu_common.o /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:432:10: error: ‘struct iris_platform_data’ has no member named ‘input_config_params’; did you mean ‘output_config_params’? 432 | .input_config_params = | ^~~~~~~~~~~~~~~~~~~ | output_config_params /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:433:17: error: ‘sm8550_vdec_input_config_params’ undeclared here (not in a function); did you mean ‘sm8550_vdec_output_config_params’? 433 | sm8550_vdec_input_config_params, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | sm8550_vdec_output_config_params /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:434:10: error: ‘struct iris_platform_data’ has no member named ‘input_config_params_size’; did you mean ‘output_config_params_size’? 434 | .input_config_params_size = | ^~~~~~~~~~~~~~~~~~~~~~~~ | output_config_params_size In file included from /home/deckard/Development/linux/include/linux/dev_printk.h:14, from /home/deckard/Development/linux/include/linux/device.h:15, from /home/deckard/Development/linux/include/linux/pm_domain.h:11, from /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_core.h:10, from /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:6: /home/deckard/Development/linux/include/linux/compiler.h:197:77: error: expression in static assertion is not an integer 197 | #define __BUILD_BUG_ON_ZERO_MSG(e, msg) ((int)sizeof(struct {_Static_assert(!(e), msg);})) | ^ /home/deckard/Development/linux/include/linux/compiler.h:202:33: note: in expansion of macro ‘__BUILD_BUG_ON_ZERO_MSG’ 202 | #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ | ^~~~~~~~~~~~~~~~~~~~~~~ /home/deckard/Development/linux/include/linux/array_size.h:11:59: note: in expansion of macro ‘__must_be_array’ 11 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) | ^~~~~~~~~~~~~~~ /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:435:17: note: in expansion of macro ‘ARRAY_SIZE’ 435 | ARRAY_SIZE(sm8550_vdec_input_config_params), | ^~~~~~~~~~ /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:442:10: error: ‘struct iris_platform_data’ has no member named ‘dec_output_prop’; did you mean ‘dec_input_prop’? 442 | .dec_output_prop = sm8550_vdec_subscribe_output_properties, | ^~~~~~~~~~~~~~~ | dec_input_prop /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:442:28: error: ‘sm8550_vdec_subscribe_output_properties’ undeclared here (not in a function); did you mean ‘sm8550_vdec_subscribe_input_properties’? 442 | .dec_output_prop = sm8550_vdec_subscribe_output_properties, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | sm8550_vdec_subscribe_input_properties /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:443:10: error: ‘struct iris_platform_data’ has no member named ‘dec_output_prop_size’; did you mean ‘dec_input_prop_size’? 443 | .dec_output_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_output_properties), | ^~~~~~~~~~~~~~~~~~~~ | dec_input_prop_size /home/deckard/Development/linux/include/linux/compiler.h:197:77: error: expression in static assertion is not an integer 197 | #define __BUILD_BUG_ON_ZERO_MSG(e, msg) ((int)sizeof(struct {_Static_assert(!(e), msg);})) | ^ /home/deckard/Development/linux/include/linux/compiler.h:202:33: note: in expansion of macro ‘__BUILD_BUG_ON_ZERO_MSG’ 202 | #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ | ^~~~~~~~~~~~~~~~~~~~~~~ /home/deckard/Development/linux/include/linux/array_size.h:11:59: note: in expansion of macro ‘__must_be_array’ 11 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) | ^~~~~~~~~~~~~~~ /home/deckard/Development/linux/drivers/media/platform/qcom/iris/iris_platform_sm8550.c:443:33: note: in expansion of macro ‘ARRAY_SIZE’ 443 | .dec_output_prop_size = ARRAY_SIZE(sm8550_vdec_subscribe_output_properties), | ^~~~~~~~~~ make[8]: *** [/home/deckard/Development/linux/scripts/Makefile.build:203: drivers/media/platform/qcom/iris/iris_platform_sm8550.o] Error 1 make[8]: *** Waiting for unfinished jobs.... make[7]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media/platform/qcom/iris] Error 2 make[6]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media/platform/qcom] Error 2 make[5]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media/platform] Error 2 make[4]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers/media] Error 2 make[3]: *** [/home/deckard/Development/linux/scripts/Makefile.build:461: drivers] Error 2
[2]
[ 58.165118] qcom-iris aa00000.video-codec: invalid plane [ 58.165721] ------------[ cut here ]------------ [ 58.165727] WARNING: CPU: 1 PID: 1209 at drivers/media/common/videobuf2/videobuf2-core.c:2222 __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] [ 58.165749] Modules linked in: rfcomm michael_mic reset_gpio snd_soc_wsa884x q6prm_clocks q6apm_lpass_dais snd_q6dsp_common q6apm_dai q6prm algif_hash algif_skcipher af_alg qrtr_mhi ntfs3 ath12k mac80211 ov02e10 v4l2_cci snd_q6apm snd_soc_x1e80100 hci_uart snd_soc_qcom_common btqca bluetooth snd_soc_qcom_sdw ps883x ecdh_generic pwrseq_qcom_wcn ecc regmap_i2c phy_nxp_ptn3222 rtc_pm8xxx snd_soc_wcd938x snd_soc_wcd_classh snd_soc_wcd938x_sdw regmap_sdw qcom_iris videobuf2_dma_contig qcom_camss snd_soc_wcd_mbhc v4l2_mem2mem videobuf2_dma_sg snd_soc_lpass_rx_macro snd_soc_lpass_tx_macro snd_soc_lpass_va_macro snd_soc_lpass_wsa_macro soundwire_qcom snd_soc_hdmi_codec mux_core v4l2_fwnode snd_soc_lpass_macro_common videobuf2_memops videobuf2_v4l2 videobuf2_common v4l2_async snd_soc_core videocc_sm8550 i2c_qcom_cci videodev snd_compress mc phy_qcom_qmp_usb rpmsg_ctrl apr fastrpc snd_pcm qcom_pd_mapper rpmsg_char pci_pwrctrl_pwrseq pci_pwrctrl_core qrtr_smd pwrseq_core snd_timer cfg80211 snd soundwire_bus rfkill i2c_dev [ 58.165914] ip_tables x_tables autofs4 ipv6 fuse socinfo qcom_cpucp_mbox icc_bwmon leds_gpio phy_qcom_qmp_pcie arm_smccc_trng rng_core gpucc_x1e80100 pcie_qcom crc8 soundcore tcsrcc_x1e80100 pinctrl_sm8550_lpass_lpi pinctrl_lpass_lpi lpasscc_sc8280xp hid_multitouch i2c_qcom_geni dispcc_x1e80100 phy_qcom_edp qcom_stats phy_qcom_snps_eusb2 sha512_ce sha512_arm64 nvmem_qcom_spmi_sdam qcom_spmi_temp_alarm industrialio sha3_ce phy_qcom_qmp_combo aux_bridge phy_qcom_eusb2_repeater qcom_pon reboot_mode sm3_ce sm3 ucsi_glink pmic_glink_altmode typec_ucsi qcom_battmgr aux_hpd_bridge pmic_glink pdr_interface qcom_pdr_msg typec msm drm_client_lib drm_exec llcc_qcom gpu_sched i2c_hid_of i2c_hid qrtr qcom_q6v5_pas qcom_pil_info qcom_common qcom_glink_smem qcom_glink qcom_q6v5 qcom_sysmon mdt_loader rpmsg_core qmi_helpers input_leds panel_edp drm_display_helper drm_dp_aux_bus drm_kms_helper drm i2c_core mhi libarc4 nvme nvme_core usb_storage r8152 mii libphy led_class dm_crypt dm_mod [ 58.166115] CPU: 1 UID: 1001 PID: 1209 Comm: GstPlay Tainted: G W 6.15.0-rc1 #69 PREEMPT [ 58.166125] Tainted: [W]=WARN [ 58.166129] Hardware name: Dell Inc. Inspiron 14 Plus 7441/0YWPR3, BIOS 2.5.0 12/16/2024 [ 58.166133] pstate: 61400005 (nZCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--) [ 58.166140] pc : __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] [ 58.166146] lr : __vb2_queue_cancel+0x2c/0x2d0 [videobuf2_common] [ 58.166152] sp : ffff800083f9bb00 [ 58.166155] x29: ffff800083f9bb00 x28: ffff6ad64770c020 x27: 0000000000000000 [ 58.166165] x26: 0000000040045613 x25: 0000000000000000 x24: ffffac02677a6bc8 [ 58.166174] x23: ffff6ad64770c060 x22: ffff6ad68e60c780 x21: ffff6ad679c36428 [ 58.166183] x20: 0000000000000009 x19: ffff6ad679c36428 x18: 0000000000000000 [ 58.166192] x17: 0000000000000000 x16: ffffac027ba13408 x15: 0000ffff000304b0 [ 58.166200] x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000 [ 58.166208] x11: 0000000000000000 x10: 0000000000000000 x9 : 0000000000000000 [ 58.166216] x8 : ffff800083f9bd48 x7 : ffffac02677a6e28 x6 : ffffac02677a6e28 [ 58.166226] x5 : 0000000000000000 x4 : 0000000000000001 x3 : 0000000000000000 [ 58.166233] x2 : ffffac0267986fb0 x1 : 0000000000000000 x0 : 0000000000000008 [ 58.166242] Call trace: [ 58.166246] __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] (P) [ 58.166254] vb2_core_streamoff+0x24/0xc8 [videobuf2_common] [ 58.166260] vb2_streamoff+0x18/0x64 [videobuf2_v4l2] [ 58.166267] v4l2_m2m_streamoff+0x78/0x144 [v4l2_mem2mem] [ 58.166273] v4l2_m2m_ioctl_streamoff+0x18/0x24 [v4l2_mem2mem] [ 58.166279] v4l_streamoff+0x24/0x30 [videodev] [ 58.166289] __video_do_ioctl+0x40c/0x4a0 [videodev] [ 58.166298] video_usercopy+0x2bc/0x688 [videodev] [ 58.166307] video_ioctl2+0x18/0x38 [videodev] [ 58.166315] v4l2_ioctl+0x40/0x60 [videodev] [ 58.166323] __arm64_sys_ioctl+0xb4/0xf4 [ 58.166335] invoke_syscall+0x48/0x104 [ 58.166346] el0_svc_common.constprop.0+0x40/0xe0 [ 58.166355] do_el0_svc+0x1c/0x28 [ 58.166363] el0_svc+0x30/0xcc [ 58.166373] el0t_64_sync_handler+0x10c/0x138 [ 58.166381] el0t_64_sync+0x198/0x19c [ 58.166386] ---[ end trace 0000000000000000 ]--- [ 58.166390] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 0 in active state [ 58.166395] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 1 in active state [ 58.166398] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 2 in active state [ 58.166401] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 3 in active state [ 58.166404] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 5 in active state [ 58.166407] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 6 in active state [ 58.166410] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 7 in active state [ 58.166413] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 8 in active state [ 58.169738] qcom-iris aa00000.video-codec: invalid plane [ 61.517138] ------------[ cut here ]------------ [ 61.517147] WARNING: CPU: 1 PID: 1209 at drivers/media/common/videobuf2/videobuf2-core.c:2222 __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] [ 61.517157] Modules linked in: rfcomm michael_mic reset_gpio snd_soc_wsa884x q6prm_clocks q6apm_lpass_dais snd_q6dsp_common q6apm_dai q6prm algif_hash algif_skcipher af_alg qrtr_mhi ntfs3 ath12k mac80211 ov02e10 v4l2_cci snd_q6apm snd_soc_x1e80100 hci_uart snd_soc_qcom_common btqca bluetooth snd_soc_qcom_sdw ps883x ecdh_generic pwrseq_qcom_wcn ecc regmap_i2c phy_nxp_ptn3222 rtc_pm8xxx snd_soc_wcd938x snd_soc_wcd_classh snd_soc_wcd938x_sdw regmap_sdw qcom_iris videobuf2_dma_contig qcom_camss snd_soc_wcd_mbhc v4l2_mem2mem videobuf2_dma_sg snd_soc_lpass_rx_macro snd_soc_lpass_tx_macro snd_soc_lpass_va_macro snd_soc_lpass_wsa_macro soundwire_qcom snd_soc_hdmi_codec mux_core v4l2_fwnode snd_soc_lpass_macro_common videobuf2_memops videobuf2_v4l2 videobuf2_common v4l2_async snd_soc_core videocc_sm8550 i2c_qcom_cci videodev snd_compress mc phy_qcom_qmp_usb rpmsg_ctrl apr fastrpc snd_pcm qcom_pd_mapper rpmsg_char pci_pwrctrl_pwrseq pci_pwrctrl_core qrtr_smd pwrseq_core snd_timer cfg80211 snd soundwire_bus rfkill i2c_dev [ 61.517210] ip_tables x_tables autofs4 ipv6 fuse socinfo qcom_cpucp_mbox icc_bwmon leds_gpio phy_qcom_qmp_pcie arm_smccc_trng rng_core gpucc_x1e80100 pcie_qcom crc8 soundcore tcsrcc_x1e80100 pinctrl_sm8550_lpass_lpi pinctrl_lpass_lpi lpasscc_sc8280xp hid_multitouch i2c_qcom_geni dispcc_x1e80100 phy_qcom_edp qcom_stats phy_qcom_snps_eusb2 sha512_ce sha512_arm64 nvmem_qcom_spmi_sdam qcom_spmi_temp_alarm industrialio sha3_ce phy_qcom_qmp_combo aux_bridge phy_qcom_eusb2_repeater qcom_pon reboot_mode sm3_ce sm3 ucsi_glink pmic_glink_altmode typec_ucsi qcom_battmgr aux_hpd_bridge pmic_glink pdr_interface qcom_pdr_msg typec msm drm_client_lib drm_exec llcc_qcom gpu_sched i2c_hid_of i2c_hid qrtr qcom_q6v5_pas qcom_pil_info qcom_common qcom_glink_smem qcom_glink qcom_q6v5 qcom_sysmon mdt_loader rpmsg_core qmi_helpers input_leds panel_edp drm_display_helper drm_dp_aux_bus drm_kms_helper drm i2c_core mhi libarc4 nvme nvme_core usb_storage r8152 mii libphy led_class dm_crypt dm_mod [ 61.517282] CPU: 1 UID: 1001 PID: 1209 Comm: GstPlay Tainted: G W 6.15.0-rc1 #69 PREEMPT [ 61.517286] Tainted: [W]=WARN [ 61.517288] Hardware name: Dell Inc. Inspiron 14 Plus 7441/0YWPR3, BIOS 2.5.0 12/16/2024 [ 61.517289] pstate: 61400005 (nZCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--) [ 61.517291] pc : __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] [ 61.517293] lr : __vb2_queue_cancel+0x2c/0x2d0 [videobuf2_common] [ 61.517295] sp : ffff800083f9bb00 [ 61.517296] x29: ffff800083f9bb00 x28: ffff6ad64770c020 x27: 0000000000000000 [ 61.517299] x26: 0000000040045613 x25: 0000000000000000 x24: ffffac02677a6bc8 [ 61.517301] x23: ffff6ad64770c060 x22: ffff6ad68e60c780 x21: ffff6ad679c36428 [ 61.517304] x20: 0000000000000009 x19: ffff6ad679c36428 x18: 0000000000000000 [ 61.517306] x17: 0000000000000000 x16: ffffac027ba13408 x15: 0000ffff000304b0 [ 61.517309] x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000 [ 61.517311] x11: 0000000000000000 x10: 0000000000000000 x9 : 0000000000000000 [ 61.517314] x8 : ffff800083f9bd48 x7 : ffffac02677a6e28 x6 : ffffac02677a6e28 [ 61.517316] x5 : 0000000000000000 x4 : 0000000000000001 x3 : 0000000000000000 [ 61.517319] x2 : ffffac0267986fb0 x1 : 0000000000000000 x0 : 0000000000000008 [ 61.517321] Call trace: [ 61.517323] __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] (P) [ 61.517325] vb2_core_streamoff+0x24/0xc8 [videobuf2_common] [ 61.517327] vb2_streamoff+0x18/0x64 [videobuf2_v4l2] [ 61.517330] v4l2_m2m_streamoff+0x78/0x144 [v4l2_mem2mem] [ 61.517332] v4l2_m2m_ioctl_streamoff+0x18/0x24 [v4l2_mem2mem] [ 61.517334] v4l_streamoff+0x24/0x30 [videodev] [ 61.517338] __video_do_ioctl+0x40c/0x4a0 [videodev] [ 61.517341] video_usercopy+0x2bc/0x688 [videodev] [ 61.517343] video_ioctl2+0x18/0x38 [videodev] [ 61.517346] v4l2_ioctl+0x40/0x60 [videodev] [ 61.517348] __arm64_sys_ioctl+0xb4/0xf4 [ 61.517355] invoke_syscall+0x48/0x104 [ 61.517359] el0_svc_common.constprop.0+0x40/0xe0 [ 61.517362] do_el0_svc+0x1c/0x28 [ 61.517364] el0_svc+0x30/0xcc [ 61.517368] el0t_64_sync_handler+0x10c/0x138 [ 61.517371] el0t_64_sync+0x198/0x19c [ 61.517372] ---[ end trace 0000000000000000 ]--- [ 61.517375] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 0 in active state [ 61.517377] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 1 in active state [ 61.517378] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 2 in active state [ 61.517379] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 3 in active state [ 61.517381] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 5 in active state [ 61.517382] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 6 in active state [ 61.517383] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 7 in active state [ 61.517384] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 8 in active state [ 84.239087] ------------[ cut here ]------------ [ 84.239099] WARNING: CPU: 0 PID: 1283 at drivers/media/common/videobuf2/videobuf2-core.c:2222 __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] [ 84.239110] Modules linked in: rfcomm michael_mic reset_gpio snd_soc_wsa884x q6prm_clocks q6apm_lpass_dais snd_q6dsp_common q6apm_dai q6prm algif_hash algif_skcipher af_alg qrtr_mhi ntfs3 ath12k mac80211 ov02e10 v4l2_cci snd_q6apm snd_soc_x1e80100 hci_uart snd_soc_qcom_common btqca bluetooth snd_soc_qcom_sdw ps883x ecdh_generic pwrseq_qcom_wcn ecc regmap_i2c phy_nxp_ptn3222 rtc_pm8xxx snd_soc_wcd938x snd_soc_wcd_classh snd_soc_wcd938x_sdw regmap_sdw qcom_iris videobuf2_dma_contig qcom_camss snd_soc_wcd_mbhc v4l2_mem2mem videobuf2_dma_sg snd_soc_lpass_rx_macro snd_soc_lpass_tx_macro snd_soc_lpass_va_macro snd_soc_lpass_wsa_macro soundwire_qcom snd_soc_hdmi_codec mux_core v4l2_fwnode snd_soc_lpass_macro_common videobuf2_memops videobuf2_v4l2 videobuf2_common v4l2_async snd_soc_core videocc_sm8550 i2c_qcom_cci videodev snd_compress mc phy_qcom_qmp_usb rpmsg_ctrl apr fastrpc snd_pcm qcom_pd_mapper rpmsg_char pci_pwrctrl_pwrseq pci_pwrctrl_core qrtr_smd pwrseq_core snd_timer cfg80211 snd soundwire_bus rfkill i2c_dev [ 84.239190] ip_tables x_tables autofs4 ipv6 fuse socinfo qcom_cpucp_mbox icc_bwmon leds_gpio phy_qcom_qmp_pcie arm_smccc_trng rng_core gpucc_x1e80100 pcie_qcom crc8 soundcore tcsrcc_x1e80100 pinctrl_sm8550_lpass_lpi pinctrl_lpass_lpi lpasscc_sc8280xp hid_multitouch i2c_qcom_geni dispcc_x1e80100 phy_qcom_edp qcom_stats phy_qcom_snps_eusb2 sha512_ce sha512_arm64 nvmem_qcom_spmi_sdam qcom_spmi_temp_alarm industrialio sha3_ce phy_qcom_qmp_combo aux_bridge phy_qcom_eusb2_repeater qcom_pon reboot_mode sm3_ce sm3 ucsi_glink pmic_glink_altmode typec_ucsi qcom_battmgr aux_hpd_bridge pmic_glink pdr_interface qcom_pdr_msg typec msm drm_client_lib drm_exec llcc_qcom gpu_sched i2c_hid_of i2c_hid qrtr qcom_q6v5_pas qcom_pil_info qcom_common qcom_glink_smem qcom_glink qcom_q6v5 qcom_sysmon mdt_loader rpmsg_core qmi_helpers input_leds panel_edp drm_display_helper drm_dp_aux_bus drm_kms_helper drm i2c_core mhi libarc4 nvme nvme_core usb_storage r8152 mii libphy led_class dm_crypt dm_mod [ 84.239292] CPU: 0 UID: 1001 PID: 1283 Comm: GstPlay Tainted: G W 6.15.0-rc1 #69 PREEMPT [ 84.239297] Tainted: [W]=WARN [ 84.239299] Hardware name: Dell Inc. Inspiron 14 Plus 7441/0YWPR3, BIOS 2.5.0 12/16/2024 [ 84.239301] pstate: 61400005 (nZCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--) [ 84.239304] pc : __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] [ 84.239307] lr : __vb2_queue_cancel+0x2c/0x2d0 [videobuf2_common] [ 84.239309] sp : ffff800082333b00 [ 84.239311] x29: ffff800082333b00 x28: ffff6ad65e9d5020 x27: 0000000000000000 [ 84.239315] x26: 0000000040045613 x25: 0000000000000000 x24: ffffac02677a6bc8 [ 84.239319] x23: ffff6ad65e9d5060 x22: ffff6ad646d64d80 x21: ffff6ad65f005028 [ 84.239324] x20: 0000000000000009 x19: ffff6ad65f005028 x18: 0000000000000000 [ 84.239328] x17: 0000000000000000 x16: ffffac027ba13408 x15: 0000ffff20030410 [ 84.239332] x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000 [ 84.239335] x11: 0000000000000000 x10: 0000000000000000 x9 : 0000000000000000 [ 84.239339] x8 : ffff800082333d48 x7 : ffffac02677a6e28 x6 : ffffac02677a6e28 [ 84.239343] x5 : 0000000000000000 x4 : 0000000000000001 x3 : 0000000000000000 [ 84.239347] x2 : ffffac0267986fb0 x1 : 0000000000000000 x0 : 0000000000000016 [ 84.239351] Call trace: [ 84.239353] __vb2_queue_cancel+0x238/0x2d0 [videobuf2_common] (P) [ 84.239357] vb2_core_streamoff+0x24/0xc8 [videobuf2_common] [ 84.239360] vb2_streamoff+0x18/0x64 [videobuf2_v4l2] [ 84.239364] v4l2_m2m_streamoff+0x78/0x144 [v4l2_mem2mem] [ 84.239368] v4l2_m2m_ioctl_streamoff+0x18/0x24 [v4l2_mem2mem] [ 84.239370] v4l_streamoff+0x24/0x30 [videodev] [ 84.239376] __video_do_ioctl+0x40c/0x4a0 [videodev] [ 84.239380] video_usercopy+0x2bc/0x688 [videodev] [ 84.239384] video_ioctl2+0x18/0x38 [videodev] [ 84.239388] v4l2_ioctl+0x40/0x60 [videodev] [ 84.239392] __arm64_sys_ioctl+0xb4/0xf4 [ 84.239400] invoke_syscall+0x48/0x104 [ 84.239407] el0_svc_common.constprop.0+0x40/0xe0 [ 84.239411] do_el0_svc+0x1c/0x28 [ 84.239415] el0_svc+0x30/0xcc [ 84.239421] el0t_64_sync_handler+0x10c/0x138 [ 84.239425] el0t_64_sync+0x198/0x19c [ 84.239428] ---[ end trace 0000000000000000 ]--- [ 84.239430] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 0 in active state [ 84.239432] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 1 in active state [ 84.239433] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 2 in active state [ 84.239435] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 3 in active state [ 84.239436] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 4 in active state [ 84.239438] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 5 in active state [ 84.239439] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 7 in active state [ 84.239440] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 8 in active state [ 84.239442] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 9 in active state [ 84.239443] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 10 in active state [ 84.239445] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 11 in active state [ 84.239446] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 14 in active state [ 84.239447] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 15 in active state [ 84.239449] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 16 in active state [ 84.239450] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 17 in active state [ 84.239452] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 18 in active state [ 84.239453] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 19 in active state [ 84.239454] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 20 in active state [ 84.239456] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 21 in active state [ 84.239457] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 22 in active state [ 84.239459] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 23 in active state [ 84.239460] videobuf2_common: driver bug: stop_streaming operation is leaving buffer 24 in active state [ 84.245873] qcom-iris aa00000.video-codec: invalid plane [ 126.573593] qcom-iris aa00000.video-codec: session error received 0x1000009: unknown [ 126.573638] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.573644] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.573649] qcom-iris aa00000.video-codec: session error received 0x1000009: unknown [ 126.573654] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.573659] qcom-iris aa00000.video-codec: session error received 0x1000009: unknown [ 126.573664] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.573668] qcom-iris aa00000.video-codec: session error received 0x1000009: unknown [ 126.573670] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.582134] qcom-iris aa00000.video-codec: session error received 0x1000006: unknown [ 126.582142] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.582147] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.582152] qcom-iris aa00000.video-codec: session error received 0x1000006: unknown [ 126.582156] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.582161] qcom-iris aa00000.video-codec: session error received 0x1000006: unknown [ 126.582166] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state [ 126.582170] qcom-iris aa00000.video-codec: session error received 0x1000006: unknown [ 126.582177] qcom-iris aa00000.video-codec: session error received 0x4000004: invalid operation for current state
linux-stable-mirror@lists.linaro.org