Hi Paul, Attached a diff. Please use git apply and build kernel. And attach dmesg. I want to see where did it fail. Thanks, Srinivas On Wed, 2022-05-18 at 06:07 +0200, Paul Menzel wrote: > Dear Srinivas, > > > Thank you for your reply. > > Am 13.05.22 um 01:07 schrieb srinivas pandruvada: > > > On Thu, 2022-05-12 at 17:01 +0200, Paul Menzel wrote: > > > > On the Dell XPS 13 9310, firmware 2.2.0 04/06/2021, with Debian > > > sid/unstable, Linux 5.17.3 logs a lot of the messages below: > > > > > > timeout waiting for response from ISHTP device > > > > > > Please find the output of `dmesg` attached. > > > > > It seems that sensor FW is not responding after resume. > > > > What is > > # cat /sys/power/mem_sleep > > $ cat /sys/power/mem_sleep > [s2idle] > > > Kind regards, > > Paul > > > PS: I think, Intel should have a Dell XPS 13 9310 available in some > test > labs. If not, Dell (Cc) should be able to provide access to one.
diff --git a/drivers/hid/intel-ish-hid/ipc/pci-ish.c b/drivers/hid/intel-ish-hid/ipc/pci-ish.c index 8e9d9450cb83..5b811fa8f15b 100644 --- a/drivers/hid/intel-ish-hid/ipc/pci-ish.c +++ b/drivers/hid/intel-ish-hid/ipc/pci-ish.c @@ -263,6 +263,9 @@ static void __maybe_unused ish_resume_handler(struct work_struct *work) struct pci_dev *pdev = to_pci_dev(ish_resume_device); struct ishtp_device *dev = pci_get_drvdata(pdev); uint32_t fwsts = dev->ops->get_fw_status(dev); + struct device *device = &pdev->dev; + + dev_info(device, "%s suspend_flag:%d fw_status:%x\n", __func__, dev->suspend_flag, IPC_IS_ISH_ILUP(fwsts)); if (ish_should_leave_d0i3(pdev) && !dev->suspend_flag && IPC_IS_ISH_ILUP(fwsts)) { @@ -283,8 +286,10 @@ static void __maybe_unused ish_resume_handler(struct work_struct *work) * If the flag is not cleared, something is wrong with ISH FW. * So on resume, need to go through init sequence again. */ - if (dev->resume_flag) + if (dev->resume_flag) { + dev_info(device, "%s resume_flag:%d will call ish_init\n", __func__, dev->resume_flag); ish_init(dev); + } } else { /* * Resume from the D3, full reboot of ISH processor will happen, @@ -307,7 +312,9 @@ static int __maybe_unused ish_suspend(struct device *device) struct pci_dev *pdev = to_pci_dev(device); struct ishtp_device *dev = pci_get_drvdata(pdev); + dev_info(device, "%s\n", __func__); if (ish_should_enter_d0i3(pdev)) { + dev_info(device, "%s suspend_flag:%d\n", __func__, dev->suspend_flag); /* * If previous suspend hasn't been asnwered then ISH is likely * dead, don't attempt nested notification @@ -326,12 +333,14 @@ static int __maybe_unused ish_suspend(struct device *device) msecs_to_jiffies(25)); if (dev->suspend_flag) { + dev_info(device, "%s suspend_flag:%d FW halted\n", __func__, dev->suspend_flag); /* * It looks like FW halt, clear the DMA bit, and put * ISH into D3, and FW would reset on resume. */ ish_disable_dma(dev); } else { + dev_info(device, "%s suspend_flag:%d S0ix suspended\n", __func__, dev->suspend_flag); /* * Save state so PCI core will keep the device at D0, * the ISH would enter D0i3