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, Srinivasquoted
--- 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.cb/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