From: Dipayaan Roy <dipayaan.roy@oss.qualcomm.com>
To: linux-media@vger.kernel.org
Cc: vikash.garodia@oss.qualcomm.com,
dikshita.agarwal@oss.qualcomm.com, abhinav.kumar@linux.dev,
bod@kernel.org, mchehab@kernel.org, p.zabel@pengutronix.de,
linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH 3/3] media: qcom: iris: Improve diagnostics for system and session failures
Date: Fri, 6 Nov 2026 15:31:25 +0000 [thread overview]
Message-ID: <20261106153126.120858-4-dipayaan.roy@oss.qualcomm.com> (raw)
In-Reply-To: <20261106153126.120858-1-dipayaan.roy@oss.qualcomm.com>
Log system and session response timeouts, firmware-reported failures,
and failed recovery attempts so the cause of an error is visible.
Add debug messages for unknown sessions, invalid state transitions,
and successful recovery. Avoid a redundant system init timeout message
after firmware reports an error, and rate-limit Gen2 session response
errors.
Signed-off-by: Dipayaan Roy <dipayaan.roy@oss.qualcomm.com>
---
drivers/media/platform/qcom/iris/iris_core.c | 2 ++
drivers/media/platform/qcom/iris/iris_hfi_gen1_response.c | 8 +++++++-
drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c | 13 ++++++++++++-
drivers/media/platform/qcom/iris/iris_probe.c | 8 +++++++-
drivers/media/platform/qcom/iris/iris_state.c | 5 ++++-
drivers/media/platform/qcom/iris/iris_utils.c | 2 ++
6 files changed, 34 insertions(+), 4 deletions(-)
diff --git a/drivers/media/platform/qcom/iris/iris_core.c b/drivers/media/platform/qcom/iris/iris_core.c
index d558475986ff..4224feaf1caf 100644
--- a/drivers/media/platform/qcom/iris/iris_core.c
+++ b/drivers/media/platform/qcom/iris/iris_core.c
@@ -43,6 +43,8 @@ static int iris_wait_for_system_response(struct iris_core *core)
ret = wait_for_completion_timeout(&core->core_init_done,
msecs_to_jiffies(HW_RESPONSE_TIMEOUT_VALUE));
if (!ret) {
+ if (core->state != IRIS_CORE_ERROR)
+ dev_err(core->dev, "system init response timed out\n");
core->state = IRIS_CORE_ERROR;
return -ETIMEDOUT;
}
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 1ce7f97d4087..5c411e69e5fd 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen1_response.c
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen1_response.c
@@ -284,6 +284,8 @@ static void iris_hfi_gen1_sys_init_done(struct iris_core *core, void *packet)
struct hfi_msg_sys_init_done_pkt *pkt = packet;
if (pkt->error_type != HFI_ERR_NONE) {
+ dev_err(core->dev, "system init failed (HFI error %#x)\n",
+ pkt->error_type);
core->state = IRIS_CORE_ERROR;
return;
}
@@ -740,8 +742,12 @@ static void iris_hfi_gen1_handle_response(struct iris_core *core, void *response
struct hfi_msg_session_hdr_pkt *shdr;
shdr = (struct hfi_msg_session_hdr_pkt *)hdr;
- if (shdr->error_type != HFI_ERR_NONE)
+ if (shdr->error_type != HFI_ERR_NONE) {
+ dev_err(dev, "session %#x response %#x failed (HFI error %#x)\n",
+ inst->session_id, hdr->pkt_type,
+ shdr->error_type);
iris_inst_change_state(inst, IRIS_INST_ERROR);
+ }
if (pkt_info->pkt == HFI_MSG_SESSION_FLUSH) {
if (!(--inst->flush_responses_pending))
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 b82f50458fe1..d5b4b27e0549 100644
--- a/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c
+++ b/drivers/media/platform/qcom/iris/iris_hfi_gen2_response.c
@@ -296,6 +296,8 @@ static int iris_hfi_gen2_handle_system_init(struct iris_core *core,
struct iris_hfi_packet *pkt)
{
if (!(pkt->flags & HFI_FW_FLAGS_SUCCESS)) {
+ dev_err(core->dev, "system command %#x failed (flags %#x)\n",
+ pkt->type, pkt->flags);
core->state = IRIS_CORE_ERROR;
return 0;
}
@@ -929,8 +931,11 @@ static int iris_hfi_gen2_handle_session_response(struct iris_core *core,
};
inst = iris_get_instance(core, hdr->session_id);
- if (!inst)
+ if (!inst) {
+ dev_dbg(core->dev, "response for unknown session %#x\n",
+ hdr->session_id);
return -EINVAL;
+ }
mutex_lock(&inst->lock);
inst_hfi_gen2 = to_iris_inst_hfi_gen2(inst);
@@ -958,6 +963,12 @@ static int iris_hfi_gen2_handle_session_response(struct iris_core *core,
if (packet->type > range[i].begin && packet->type < range[i].end) {
dequeue |= (packet->type == HFI_CMD_BUFFER);
ret = range[i].handle(inst, packet);
+ if (ret && !(packet->flags &
+ HFI_FW_FLAGS_SESSION_ERROR))
+ dev_err_ratelimited(core->dev,
+ "session %#x response %#x failed: %d\n",
+ inst->session_id,
+ packet->type, ret);
if (ret)
iris_inst_change_state(inst, IRIS_INST_ERROR);
}
diff --git a/drivers/media/platform/qcom/iris/iris_probe.c b/drivers/media/platform/qcom/iris/iris_probe.c
index dd48fa750013..9cefe090466b 100644
--- a/drivers/media/platform/qcom/iris/iris_probe.c
+++ b/drivers/media/platform/qcom/iris/iris_probe.c
@@ -306,9 +306,15 @@ static void iris_sys_error_handler(struct work_struct *work)
{
struct iris_core *core =
container_of(work, struct iris_core, sys_error_handler.work);
+ int ret;
iris_core_deinit(core);
- iris_core_init(core);
+ ret = iris_core_init(core);
+ if (ret)
+ dev_err(core->dev, "failed to recover from system error: %d\n",
+ ret);
+ else
+ dev_dbg(core->dev, "recovered from system error\n");
}
static int iris_probe(struct platform_device *pdev)
diff --git a/drivers/media/platform/qcom/iris/iris_state.c b/drivers/media/platform/qcom/iris/iris_state.c
index 5552725c614e..bcb138ccf08c 100644
--- a/drivers/media/platform/qcom/iris/iris_state.c
+++ b/drivers/media/platform/qcom/iris/iris_state.c
@@ -56,8 +56,11 @@ int iris_inst_change_state(struct iris_inst *inst,
if (request_state == IRIS_INST_ERROR)
goto change_state;
- if (!iris_allow_inst_state_change(inst, request_state))
+ if (!iris_allow_inst_state_change(inst, request_state)) {
+ dev_dbg(inst->core->dev, "session %#x invalid state change %x -> %x\n",
+ inst->session_id, inst->state, request_state);
return -EINVAL;
+ }
change_state:
dev_dbg(inst->core->dev, "state changed from %x to %x\n",
diff --git a/drivers/media/platform/qcom/iris/iris_utils.c b/drivers/media/platform/qcom/iris/iris_utils.c
index 1096cc4b01c3..5ca4d8e0836b 100644
--- a/drivers/media/platform/qcom/iris/iris_utils.c
+++ b/drivers/media/platform/qcom/iris/iris_utils.c
@@ -78,6 +78,8 @@ int iris_wait_for_session_response(struct iris_inst *inst, bool is_flush)
ret = wait_for_completion_timeout(done, msecs_to_jiffies(HW_RESPONSE_TIMEOUT_VALUE));
mutex_lock(&inst->lock);
if (!ret) {
+ dev_err(inst->core->dev, "session %#x %s response timed out\n",
+ inst->session_id, is_flush ? "flush" : "command");
iris_inst_change_state(inst, IRIS_INST_ERROR);
return -ETIMEDOUT;
}
--
2.43.0
next prev parent reply other threads:[~2026-11-06 15:31 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-06 15:31 [PATCH 0/3] media: qcom: iris: improve error diagnostics Dipayaan Roy
2026-11-06 15:31 ` [PATCH 1/3] media: qcom: iris: improve probe error reporting Dipayaan Roy
2026-11-09 7:17 ` Vishnu Reddy
2026-11-06 15:31 ` [PATCH 2/3] media: qcom: iris: add error and status details to diagnostics Dipayaan Roy
2026-11-09 7:25 ` Vishnu Reddy
2026-11-06 15:31 ` Dipayaan Roy [this message]
2026-11-09 7:53 ` [PATCH 3/3] media: qcom: iris: Improve diagnostics for system and session failures Vishnu Reddy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261106153126.120858-4-dipayaan.roy@oss.qualcomm.com \
--to=dipayaan.roy@oss.qualcomm.com \
--cc=abhinav.kumar@linux.dev \
--cc=bod@kernel.org \
--cc=dikshita.agarwal@oss.qualcomm.com \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=p.zabel@pengutronix.de \
--cc=vikash.garodia@oss.qualcomm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®