Skip to content

Commit 8e7bd48

Browse files
author
Dikshita Agarwal
committed
FROMLIST: media: iris: Add codec specific check for VP9 decoder drain handling
Add a codec specific for the VP9 decoder to ensure that a non-null buffer is sent to the firmware during drain. The firmware enforces a check for VP9 decoder that the number of buffers queued and dequeued on the output plane should match. When a null buffer is sent, the firmware does not return a response for it, leading to a count mismatch and an assertion failure from the firmware. Link: https://lore.kernel.org/linux-arm-msm/20250509-video-iris-hevc-vp9-v5-26-59b4ff7d331c@quicinc.com/ Acked-by: Vikash Garodia <quic_vgarodia@quicinc.com> Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8550-QRD Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8550-HDK Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8650-QRD Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8650-HDK Tested-by: Vikash Garodia <quic_vgarodia@quicinc.com> # on sa8775p-ride Signed-off-by: Dikshita Agarwal <quic_dikshita@quicinc.com>
1 parent afa67f4 commit 8e7bd48

File tree

2 files changed

+6
-0
lines changed

2 files changed

+6
-0
lines changed

drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,8 @@ static int iris_hfi_gen1_session_drain(struct iris_inst *inst, u32 plane)
401401
ip_pkt.shdr.hdr.pkt_type = HFI_CMD_SESSION_EMPTY_BUFFER;
402402
ip_pkt.shdr.session_id = inst->session_id;
403403
ip_pkt.flags = HFI_BUFFERFLAG_EOS;
404+
if (inst->codec == V4L2_PIX_FMT_VP9)
405+
ip_pkt.packet_buffer = 0xdeadb000;
404406

405407
return iris_hfi_queue_cmd_write(inst->core, &ip_pkt, ip_pkt.shdr.hdr.size);
406408
}

drivers/media/platform/qcom/iris/iris_hfi_gen1_response.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,10 @@ static void iris_hfi_gen1_session_etb_done(struct iris_inst *inst, void *packet)
348348
struct iris_buffer *buf = NULL;
349349
bool found = false;
350350

351+
/* EOS buffer sent via drain won't be in v4l2 buffer list */
352+
if (pkt->packet_buffer == 0xdeadb000)
353+
return;
354+
351355
v4l2_m2m_for_each_src_buf_safe(m2m_ctx, m2m_buffer, n) {
352356
buf = to_iris_buffer(&m2m_buffer->vb);
353357
if (buf->index == pkt->input_tag) {

0 commit comments

Comments
 (0)