Skip to contentSkip to conversation

patch "xhci: Limit USB2 port wake support for AMD Promontory hosts" added to usb-linus

PATCH Applied [email protected] 2 participants 5 messages Jun 20, 2017 – Jun 22, 2017

Subsystems (3)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

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.

Quoted 1 line

From dec08194ffeccfa1cf085906b53d301930eae18f Mon Sep 17 00:00:00 2001

From: Jiahau Chang <[email protected]>
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 Tsai Nicholas <[email protected]>
---
 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(+)
drivers/usb/host/xhci-hub.c +3 -0
index 0dde49c35dd2..1adae9eab831 100644
@@ -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;
 
drivers/usb/host/xhci-pci.c +12 -0
index 1bcf971141c0..0965bae95a7b 100644
@@ -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;
drivers/usb/host/xhci.h +1 -0
index 73a28a986d5e..dcd9649808c0 100644
@@ -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;
Signature · 1 line
2.13.1
#1 lore raw

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: [email protected] [mailto:[email protected]]
Sent: Tuesday, June 20, 2017 11:20 AM
To: [email protected]; [email protected]; [email protected]; [email protected]; Tsai, Nicholas <[email protected]>; [email protected]
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.

Quoted 1 line

From dec08194ffeccfa1cf085906b53d301930eae18f Mon Sep 17 00:00:00 2001

From: Jiahau Chang <[email protected]>
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 Tsai Nicholas <[email protected]>
---
 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(+)
drivers/usb/host/xhci-hub.c +3 -0
@@ -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;
 
drivers/usb/host/xhci-pci.c +5 -0
@@ -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;

drivers/usb/host/xhci.h +1 -0
@@ -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

author maintainer
#2 lore raw
Quoted 3 lines · Nicholas

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

#3 lore raw

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: [email protected] [mailto:[email protected]]
Sent: Thursday, June 22, 2017 9:24 PM
To: Tsai, Nicholas
Cc: [email protected]; [email protected]; [email protected]; [email protected]
Subject: Re: patch "xhci: Limit USB2 port wake support for AMD Promontory hosts" added to usb-linus

Quoted 3 lines · Nicholas

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

author maintainer
#4 lore raw
Quoted 3 lines · Nicholas

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