From: Vishnu Reddy <busanna.reddy@oss.qualcomm.com>
To: Dipayaan Roy <dipayaan.roy@oss.qualcomm.com>,
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: Re: [PATCH 3/3] media: qcom: iris: Improve diagnostics for system and session failures
Date: Mon, 9 Nov 2026 13:23:37 +0530 [thread overview]
Message-ID: <cf7b6956-90a7-ac3b-1b2b-545f95a14117@oss.qualcomm.com> (raw)
In-Reply-To: <20261106153126.120858-4-dipayaan.roy@oss.qualcomm.com>
On 11/6/2026 9:01 PM, Dipayaan Roy wrote:
> 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;
> }
Reviewed-by: Vishnu Reddy <busanna.reddy@oss.qualcomm.com>
prev parent reply other threads:[~2026-11-09 7:53 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 ` [PATCH 3/3] media: qcom: iris: Improve diagnostics for system and session failures Dipayaan Roy
2026-11-09 7:53 ` Vishnu Reddy [this message]
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=cf7b6956-90a7-ac3b-1b2b-545f95a14117@oss.qualcomm.com \
--to=busanna.reddy@oss.qualcomm.com \
--cc=abhinav.kumar@linux.dev \
--cc=bod@kernel.org \
--cc=dikshita.agarwal@oss.qualcomm.com \
--cc=dipayaan.roy@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®