Thread (11 messages) 11 messages, 4 authors, 1d ago

RE: [PATCH v2] HID: intel-ish-hid: ignore post-init ENUM_DEVICES from firmware

From: "Zhang, Lixu" <lixu.zhang@intel.com>
Date: 2026-07-21 05:04:32

-----Original Message-----
From: srinivas pandruvada <srinivas.pandruvada@linux.intel.com>
Sent: Tuesday, July 21, 2026 5:00 AM
To: Wahid7852 <redacted>; linux-input@vger.kernel.org
Cc: jikos@kernel.org; Zhang, Lixu <lixu.zhang@intel.com>
Subject: Re: [PATCH v2] HID: intel-ish-hid: ignore post-init ENUM_DEVICES from
firmware

On Mon, 2026-07-20 at 23:26 +0530, Wahid7852 wrote:
quoted
From: Wahid Khan <redacted>

Some ISH firmware versions (observed on Tiger Lake LP, 8086:a0fc, GUID
{33AECD58-B679-4E54-9BD9-A04D34F0C226}) periodically re-send an
unsolicited HOSTIF_DM_ENUM_DEVICES response roughly every 79 seconds.

The current guard collapses two distinct cases into one condition:

  if (!(response_flag) || init_done)  ->  bad packet + ish_hw_reset

This incorrectly treats a valid post-init firmware announcement as a
corrupted packet, triggering an ISH soft-reset and a full ISHTP
re-initialisation cycle on each occurrence (~1100 times per day on
affected hardware).

Split the check: reject messages with no response flag as before, but
simply discard valid ENUM_DEVICES messages that arrive after init is
complete.

Signed-off-by: Wahid Khan <redacted>
   Acked-by: Srinivas Pandruvada [off-list ref]
Tested-by: Zhang Lixu <lixu.zhang@intel.com>

Lixu, please add your tested by. I think you already tested this.
Yes, thanks.

Best regards,
Lixu
Thanks,
Srinivas
quoted
---
v2: added proper sign off

 drivers/hid/intel-ish-hid/ishtp-hid-client.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/hid/intel-ish-hid/ishtp-hid-client.c
b/drivers/hid/intel-ish-hid/ishtp-hid-client.c
index 6d64008f2..ec5e8afe7 100644
--- a/drivers/hid/intel-ish-hid/ishtp-hid-client.c
+++ b/drivers/hid/intel-ish-hid/ishtp-hid-client.c
@@ -113,8 +113,7 @@ static void process_recv(struct ishtp_cl
*hid_ishtp_cl, void *recv_buf,

 		switch (recv_msg->hdr.command & CMD_MASK) {
 		case HOSTIF_DM_ENUM_DEVICES:
-			if ((!(recv_msg->hdr.command & ~CMD_MASK) ||
-					client_data->init_done)) {
+			if (!(recv_msg->hdr.command & ~CMD_MASK)) {
 				++client_data->bad_recv_cnt;
 				report_bad_packet(hid_ishtp_cl,
recv_msg,
 						  cur_pos,
@@ -122,6 +121,8 @@ static void process_recv(struct ishtp_cl
*hid_ishtp_cl, void *recv_buf,
 				ish_hw_reset(ishtp_get_ishtp_device(
hid_ishtp_cl));
 				break;
 			}
+			if (client_data->init_done)
+				break;
 			client_data->hid_dev_count = (unsigned int)*payload;
 			if (!client_data->hid_devices)
 				client_data->hid_devices =
devm_kcalloc(
--
2.54.0
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help