Re: hid-sensor-hub 001F:8087:0AC2.0002: timeout waiting for response from ISHTP device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux