ACK: [PATCH][SRU][Xenial] UBUNTU: SAUCE: xhci: AMD Promontory USB disable port support

Thadeu Lima de Souza Cascardo cascardo at canonical.com
Wed Jun 28 17:42:50 UTC 2017


On Mon, Jun 26, 2017 at 11:39:04AM +0800, Jesse Sung wrote:
> 2017-06-26 11:02 GMT+08:00 AceLan Kao <acelan.kao at canonical.com>:
> > From: Jiahau Chang <jiahau at gmail.com>
> >
> > BugLink: http://bugs.launchpad.net/bugs/1695216
> >
> > v4: Remove the patch code in case USB_PORT_FEAT_REMOTE_WAKE_MASK
> >
> > For AMD Promontory xHCI host, although you can disable USB 2.0 ports in BIOS
> > settings, those ports will be enabled anyway after you remove a device on
> > that port and re-plug it in again. It's a known limitation of the chip.
> > As a workaround we can clear the PORT_WAKE_BITS.
> 
> This patch only affects selected devices and test result is positive.
> 

Sorry, Jesse.

Your ACK has been ignored because your email does not set the usual
headers as a reply to the original message. That's probably because you
used the gmail web interface.

I am ignoring any such responses from now on. Please use a decent MUA
when using this list.  :-)

Regards.
Cascardo.

> >
> > Signed-off-by: Jiahau Chang <Lars_Chang at asmedia.com.tw>
> > Signed-off-by: AceLan Kao <acelan.kao at canonical.com>
> > ---
> >  drivers/usb/host/xhci-hub.c |  2 ++
> >  drivers/usb/host/xhci-pci.c | 13 +++++++++++++
> >  drivers/usb/host/xhci.h     |  2 ++
> >  3 files changed, 17 insertions(+)
> >
> > diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
> > index 7e2c0de..635198d 100644
> > --- a/drivers/usb/host/xhci-hub.c
> > +++ b/drivers/usb/host/xhci-hub.c
> > @@ -1342,6 +1342,8 @@ int xhci_bus_suspend(struct usb_hcd *hcd)
> >                                 t2 |= PORT_WKOC_E | PORT_WKCONN_E;
> >                                 t2 &= ~PORT_WKDISC_E;
> >                         }
> > +                       if ((xhci->quirks & XHCI_U2_DISABLE_WAKE) && (hcd->speed < HCD_USB3))
> > +                               t2 &= ~PORT_WAKE_BITS;
> >                 } else
> >                         t2 &= ~PORT_WAKE_BITS;
> >
> > diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
> > index 9604600..02c3fca 100644
> > --- a/drivers/usb/host/xhci-pci.c
> > +++ b/drivers/usb/host/xhci-pci.c
> > @@ -54,6 +54,11 @@
> >  #define PCI_DEVICE_ID_INTEL_APL_XHCI                   0x5aa8
> >  #define PCI_DEVICE_ID_INTEL_DNV_XHCI                   0x19d0
> >
> > +#define PCI_DEVICE_ID_AMD_PROMONTORYA_4                        0x43b9
> > +#define PCI_DEVICE_ID_AMD_PROMONTORYA_3                        0x43ba
> > +#define PCI_DEVICE_ID_AMD_PROMONTORYA_2                        0x43bb
> > +#define PCI_DEVICE_ID_AMD_PROMONTORYA_1                        0x43bc
> > +
> >  static const char hcd_name[] = "xhci_hcd";
> >
> >  static struct hc_driver __read_mostly xhci_pci_hc_driver;
> > @@ -136,6 +141,14 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
> >         if (pdev->vendor == PCI_VENDOR_ID_AMD)
> >                 xhci->quirks |= XHCI_TRUST_TX_LENGTH;
> >
> > +       if ((pdev->vendor == PCI_VENDOR_ID_AMD) &&
> > +               ((pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_4) ||
> > +               (pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_3) ||
> > +               (pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_2) ||
> > +               (pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_1)))
> > +               xhci->quirks |= XHCI_U2_DISABLE_WAKE;
> > +
> > +
> >         if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
> >                 xhci->quirks |= XHCI_LPM_SUPPORT;
> >                 xhci->quirks |= XHCI_INTEL_HOST;
> > diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
> > index 2e34c9f..d723fef 100644
> > --- a/drivers/usb/host/xhci.h
> > +++ b/drivers/usb/host/xhci.h
> > @@ -1644,6 +1644,8 @@ struct xhci_hcd {
> >  #define XHCI_BROKEN_STREAMS    (1 << 19)
> >  #define XHCI_PME_STUCK_QUIRK   (1 << 20)
> >  #define XHCI_MISSING_CAS       (1 << 24)
> > +#define XHCI_U2_DISABLE_WAKE    (1 << 27)
> > +
> >         unsigned int            num_active_eps;
> >         unsigned int            limit_active_eps;
> >         /* There are two roothubs to keep track of bus suspend info for */
> > --
> > 2.7.4
> >
> >
> > --
> > kernel-team mailing list
> > kernel-team at lists.ubuntu.com
> > https://lists.ubuntu.com/mailman/listinfo/kernel-team
> 
> -- 
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team




More information about the kernel-team mailing list