stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* 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).