[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250305104335.3629945-12-quic_dikshita@quicinc.com>
Date: Wed, 5 Mar 2025 16:13:34 +0530
From: Dikshita Agarwal <quic_dikshita@...cinc.com>
To: <quic_vgarodia@...cinc.com>, <quic_abhinavk@...cinc.com>,
<mchehab@...nel.org>, <quic_dikshita@...cinc.com>
CC: <hverkuil@...all.nl>, <linux-media@...r.kernel.org>,
<linux-arm-msm@...r.kernel.org>, <linux-kernel@...r.kernel.org>
Subject: [RFC PATCH 11/12] media: iris: Fix handling of eos buffer during drain
To handle drain, a NULL EOS buffer is queued to firmware, for which
the firmware doesn't return a response. For VP9 codec, firmware has a
check to compare etb and ebd count, and asserts if it doesn't match.
Fix this by queuing a non NULL buffer to the firmware in drain.
Also, make sure to avoid calling vb2_buffer_done for the same buffer
when response is received from the firmware.
Signed-off-by: Dikshita Agarwal <quic_dikshita@...cinc.com>
---
drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c | 1 +
drivers/media/platform/qcom/iris/iris_hfi_gen1_response.c | 4 ++++
2 files changed, 5 insertions(+)
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 d5e81049d37e..cb3519cf6542 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c
@@ -402,6 +402,7 @@ static int iris_hfi_gen1_session_drain(struct iris_inst *inst, u32 plane)
ip_pkt.shdr.hdr.pkt_type = HFI_CMD_SESSION_EMPTY_BUFFER;
ip_pkt.shdr.session_id = inst->session_id;
ip_pkt.flags = HFI_BUFFERFLAG_EOS;
+ ip_pkt.packet_buffer = 0xdeadb000;
return iris_hfi_queue_cmd_write(inst->core, &ip_pkt, ip_pkt.shdr.hdr.size);
}
diff --git a/drivers/media/platform/qcom/iris/iris_hfi_gen1_response.c b/drivers/media/platform/qcom/iris/iris_hfi_gen1_response.c
index 6576496fdbdf..f7792ecaeaf5 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_response.c
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_response.c
@@ -349,6 +349,10 @@ static void iris_hfi_gen1_session_etb_done(struct iris_inst *inst, void *packet)
struct iris_buffer *buf = NULL;
bool found = false;
+ /* EOS buffer sent via drain won't be in v4l2 buffer list */
+ if (pkt->packet_buffer == 0xdeadb000)
+ return;
+
v4l2_m2m_for_each_src_buf_safe(m2m_ctx, m2m_buffer, n) {
buf = to_iris_buffer(&m2m_buffer->vb);
if (buf->index == pkt->input_tag) {
--
2.34.1
Powered by blists - more mailing lists