* patch "xhci: Limit USB2 port wake support for AMD Promontory hosts" added to usb-linus
@ 2017-06-20 3:20 gregkh
2017-06-22 7:28 ` Tsai, Nicholas
0 siblings, 1 reply; 5+ messages in thread
From: gregkh @ 2017-06-20 3:20 UTC (permalink / raw)
To: jiahau, Lars_Chang, gregkh, mathias.nyman, nicholas.tsai, stable
This is a note to let you know that I've just added the patch titled
xhci: Limit USB2 port wake support for AMD Promontory hosts
to my usb git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
in the usb-linus branch.
The patch will show up in the next release of the linux-next tree
(usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the
next -rc kernel release.
If you have any questions about this process, please let me know.
>From dec08194ffeccfa1cf085906b53d301930eae18f Mon Sep 17 00:00:00 2001
From: Jiahau Chang <jiahau@gmail.com>
Date: Mon, 19 Jun 2017 13:08:30 +0300
Subject: xhci: Limit USB2 port wake support for AMD Promontory hosts
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 will disable wake on connect, disconnect and overcurrent on
AMD Promontory USB2 ports
[checkpatch cleanup and commit message reword -Mathias]
Cc: <stable@vger.kernel.org>
Cc: Tsai Nicholas <nicholas.tsai@amd.com>
Signed-off-by: Jiahau Chang <Lars_Chang@asmedia.com.tw>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/usb/host/xhci-hub.c | 3 +++
drivers/usb/host/xhci-pci.c | 12 ++++++++++++
drivers/usb/host/xhci.h | 1 +
3 files changed, 16 insertions(+)
diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
index 0dde49c35dd2..1adae9eab831 100644
--- a/drivers/usb/host/xhci-hub.c
+++ b/drivers/usb/host/xhci-hub.c
@@ -1461,6 +1461,9 @@ 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 1bcf971141c0..0965bae95a7b 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;
@@ -135,6 +140,13 @@ 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 73a28a986d5e..dcd9649808c0 100644
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -1819,6 +1819,7 @@ struct xhci_hcd {
/* For controller with a broken Port Disable implementation */
#define XHCI_BROKEN_PORT_PED (1 << 25)
#define XHCI_LIMIT_ENDPOINT_INTERVAL_7 (1 << 26)
+#define XHCI_U2_DISABLE_WAKE (1 << 27)
unsigned int num_active_eps;
unsigned int limit_active_eps;
--
2.13.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* RE: patch "xhci: Limit USB2 port wake support for AMD Promontory hosts" added to usb-linus
2017-06-20 3:20 patch "xhci: Limit USB2 port wake support for AMD Promontory hosts" added to usb-linus gregkh
@ 2017-06-22 7:28 ` Tsai, Nicholas
2017-06-22 13:23 ` gregkh
0 siblings, 1 reply; 5+ messages in thread
From: Tsai, Nicholas @ 2017-06-22 7:28 UTC (permalink / raw)
To: gregkh@linuxfoundation.org, jiahau@gmail.com,
Lars_Chang@asmedia.com.tw, mathias.nyman@linux.intel.com,
stable@vger.kernel.org
Hi Gregkh and Mathias,
Sorry to bother you again.
May I know if the upstream process is completed?
Thanks.
Best Regards.
NICHOLAS TSAI
Project Leader | AMD CE TW
6F, 3, YuanCyu St.(Nankang Software Park) Taipei 115, Taiwan
M +(886) 931 419 369 O +(886) 2-3789 3329
-----Original Message-----
From: gregkh@linuxfoundation.org [mailto:gregkh@linuxfoundation.org]
Sent: Tuesday, June 20, 2017 11:20 AM
To: jiahau@gmail.com; Lars_Chang@asmedia.com.tw; gregkh@linuxfoundation.org; mathias.nyman@linux.intel.com; Tsai, Nicholas <nicholas.tsai@amd.com>; stable@vger.kernel.org
Subject: patch "xhci: Limit USB2 port wake support for AMD Promontory hosts" added to usb-linus
This is a note to let you know that I've just added the patch titled
xhci: Limit USB2 port wake support for AMD Promontory hosts
to my usb git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
in the usb-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
>From dec08194ffeccfa1cf085906b53d301930eae18f Mon Sep 17 00:00:00 2001
From: Jiahau Chang <jiahau@gmail.com>
Date: Mon, 19 Jun 2017 13:08:30 +0300
Subject: xhci: Limit USB2 port wake support for AMD Promontory hosts
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 will disable wake on connect, disconnect and overcurrent on AMD Promontory USB2 ports
[checkpatch cleanup and commit message reword -Mathias]
Cc: <stable@vger.kernel.org>
Cc: Tsai Nicholas <nicholas.tsai@amd.com>
Signed-off-by: Jiahau Chang <Lars_Chang@asmedia.com.tw>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/usb/host/xhci-hub.c | 3 +++
drivers/usb/host/xhci-pci.c | 12 ++++++++++++
drivers/usb/host/xhci.h | 1 +
3 files changed, 16 insertions(+)
diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c index 0dde49c35dd2..1adae9eab831 100644
--- a/drivers/usb/host/xhci-hub.c
+++ b/drivers/usb/host/xhci-hub.c
@@ -1461,6 +1461,9 @@ 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 1bcf971141c0..0965bae95a7b 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; @@ -135,6 +140,13 @@ 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 73a28a986d5e..dcd9649808c0 100644
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -1819,6 +1819,7 @@ struct xhci_hcd {
/* For controller with a broken Port Disable implementation */
#define XHCI_BROKEN_PORT_PED (1 << 25)
#define XHCI_LIMIT_ENDPOINT_INTERVAL_7 (1 << 26)
+#define XHCI_U2_DISABLE_WAKE (1 << 27)
unsigned int num_active_eps;
unsigned int limit_active_eps;
--
2.13.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: patch "xhci: Limit USB2 port wake support for AMD Promontory hosts" added to usb-linus
2017-06-22 7:28 ` Tsai, Nicholas
@ 2017-06-22 13:23 ` gregkh
2017-06-22 16:11 ` Tsai, Nicholas
0 siblings, 1 reply; 5+ messages in thread
From: gregkh @ 2017-06-22 13:23 UTC (permalink / raw)
To: Tsai, Nicholas
Cc: jiahau@gmail.com, Lars_Chang@asmedia.com.tw,
mathias.nyman@linux.intel.com, stable@vger.kernel.org
On Thu, Jun 22, 2017 at 07:28:47AM +0000, Tsai, Nicholas wrote:
> Hi Gregkh and Mathias,
> Sorry to bother you again.
> May I know if the upstream process is completed?
For you, yes, I still have more work to do on my end :)
You have read Documentation/development_process/ right?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: patch "xhci: Limit USB2 port wake support for AMD Promontory hosts" added to usb-linus
2017-06-22 13:23 ` gregkh
@ 2017-06-22 16:11 ` Tsai, Nicholas
2017-06-22 23:30 ` gregkh
0 siblings, 1 reply; 5+ messages in thread
From: Tsai, Nicholas @ 2017-06-22 16:11 UTC (permalink / raw)
To: gregkh@linuxfoundation.org
Cc: jiahau@gmail.com, Lars_Chang@asmedia.com.tw,
mathias.nyman@linux.intel.com, stable@vger.kernel.org
Thanks for your quickly reply.
Because I am not familiar about the Linux upstream, could you point out where could I read the" Documentation/development_process/"?
Thanks.
NICHOLAS TSAI
Project Leader | AMD CE TW
6F, 3, YuanCyu St.(Nankang Software Park) Taipei 115, Taiwan
M +(886) 931 419 369 O +(886) 2-3789 3329
-----Original Message-----
From: gregkh@linuxfoundation.org [mailto:gregkh@linuxfoundation.org]
Sent: Thursday, June 22, 2017 9:24 PM
To: Tsai, Nicholas
Cc: jiahau@gmail.com; Lars_Chang@asmedia.com.tw; mathias.nyman@linux.intel.com; stable@vger.kernel.org
Subject: Re: patch "xhci: Limit USB2 port wake support for AMD Promontory hosts" added to usb-linus
On Thu, Jun 22, 2017 at 07:28:47AM +0000, Tsai, Nicholas wrote:
> Hi Gregkh and Mathias,
> Sorry to bother you again.
> May I know if the upstream process is completed?
For you, yes, I still have more work to do on my end :)
You have read Documentation/development_process/ right?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: patch "xhci: Limit USB2 port wake support for AMD Promontory hosts" added to usb-linus
2017-06-22 16:11 ` Tsai, Nicholas
@ 2017-06-22 23:30 ` gregkh
0 siblings, 0 replies; 5+ messages in thread
From: gregkh @ 2017-06-22 23:30 UTC (permalink / raw)
To: Tsai, Nicholas
Cc: jiahau@gmail.com, Lars_Chang@asmedia.com.tw,
mathias.nyman@linux.intel.com, stable@vger.kernel.org
On Thu, Jun 22, 2017 at 04:11:03PM +0000, Tsai, Nicholas wrote:
> Thanks for your quickly reply.
> Because I am not familiar about the Linux upstream, could you point
> out where could I read the" Documentation/development_process/"?
That is a directory path within the kernel source tree itself.
Or you can read it online on many sites that build the kernel
documentation tree. One example would be the following link:
https://01.org/linuxgraphics/gfx-docs/drm/process/development-process.html
hope this helps,
greg k-h
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-06-22 23:30 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-06-20 3:20 patch "xhci: Limit USB2 port wake support for AMD Promontory hosts" added to usb-linus gregkh
2017-06-22 7:28 ` Tsai, Nicholas
2017-06-22 13:23 ` gregkh
2017-06-22 16:11 ` Tsai, Nicholas
2017-06-22 23:30 ` gregkh
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).