Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752307AbdFLHEo (ORCPT ); Mon, 12 Jun 2017 03:04:44 -0400 Received: from mail-wr0-f175.google.com ([209.85.128.175]:32795 "EHLO mail-wr0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752157AbdFLHEm (ORCPT ); Mon, 12 Jun 2017 03:04:42 -0400 MIME-Version: 1.0 In-Reply-To: References: <20170609072233.5594-1-kai.heng.feng@canonical.com> From: Kai-Heng Feng Date: Mon, 12 Jun 2017 15:04:40 +0800 Message-ID: Subject: Re: [PATCH] usb: host: ehci: workaround PME bug on AMD EHCI controller To: Alan Stern Cc: gregkh@linuxfoundation.org, linux-usb@vger.kernel.org, LKML Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2034 Lines: 57 On Fri, Jun 9, 2017 at 10:43 PM, Alan Stern wrote: > On Fri, 9 Jun 2017, Kai-Heng Feng wrote: > >> As Alan Stern points out [1], the PME signal is not enabled when >> controller is in D3, therefore it's not being woken up when new deivces >> get plugged in. >> >> Workaround this bug by preventing the controller enters D3 power state. >> >> [1] https://www.spinics.net/lists/linux-usb/msg157462.html >> >> Signed-off-by: Kai-Heng Feng >> --- >> drivers/usb/host/ehci-pci.c | 2 ++ >> 1 file changed, 2 insertions(+) >> >> diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c >> index 93326974ff4b..616685f83954 100644 >> --- a/drivers/usb/host/ehci-pci.c >> +++ b/drivers/usb/host/ehci-pci.c >> @@ -181,6 +181,8 @@ static int ehci_pci_setup(struct usb_hcd *hcd) >> if (pdev->device == 0x7808) { >> ehci->use_dummy_qh = 1; >> ehci_info(ehci, "applying AMD SB700/SB800/Hudson-2/3 EHCI dummy qh workaround\n"); >> + >> + pdev->dev_flags |= PCI_DEV_FLAGS_NO_D3; >> } >> break; >> case PCI_VENDOR_ID_VIA: > > Is this really the right solution? Maybe it would be better to allow > the controller to go into D3 provided no wakeup signal is needed. You > could do: > > device_set_wakeup_capable(&pdev->dev, 0); This doesn't work. After applying this function, still nothing happens when devices get plugged in. IIUC this function disable the wakeup function, but what I want to do here is to have PME signal works even when runtime PM is enabled. I also saw some legacy PCI PM stuff, so I also tried: device_set_wakeup_capable(&pdev->dev, 1); ...doesn't work either. > > Another alternative is to put the controller into D2 instead of D3, but > (1) I don't know how to do that, and (2) we don't know if wakeup > signalling works any better in D2 than it does in D3. I'll try if D2 works. Thanks for the review. > > Alan Stern >