Index | Thread | Search

From:
Stefan Sperling <stsp@stsp.name>
Subject:
Re: xhci(4): Fix broken CSS on AMD 17h/6xh
To:
Mark Kettenis <mark.kettenis@xs4all.nl>
Cc:
James Hastings <moosetek4@gmail.com>, tech@openbsd.org
Date:
Thu, 19 Jun 2025 15:36:49 +0200

Download raw body.

Thread
On Mon, Jun 16, 2025 at 07:37:10PM +0200, Mark Kettenis wrote:
> > From: James Hastings <moosetek4@gmail.com>
> > Date: Mon, 16 Jun 2025 08:34:39 -0400 (EDT)
> > 
> > The xHCI controller save state (CSS/CRS) is broken on AMD 17h/6xh
> > and hangs the system during resume.
> > 
> > ok?
> 
> ok kettenis@

19h/x4 XHCI controllers in the Z13 also need the XHCI_NOCSS quirk.

 99:0:3: AMD 19h/4xh xHCI
	0x0000: Vendor ID: 1022, Product ID: 161d
 99:0:4: AMD 19h/4xh xHCI
	0x0000: Vendor ID: 1022, Product ID: 161e
 100:0:0: AMD 19h/4xh xHCI
	0x0000: Vendor ID: 1022, Product ID: 161f
 100:0:3: AMD 19h/4xh xHCI
	0x0000: Vendor ID: 1022, Product ID: 15d6
 100:0:4: AMD 19h/4xh xHCI
	0x0000: Vendor ID: 1022, Product ID: 15d7

During resume I was seeing lines such as:

uhub0: device problem, disabling port 4
uhub1: device problem, disabling port 2
uhub1: device problem, disabling port 3
uhub2: device problem, disabling port 1

After a couple of suspend/resume cycles all internal USB devices and
the two external USB ports become unusable.

With the patch below, all USB devices reattach as expected, every time.

acpi0: S3 unavailable, using S0
video0 detached
uvideo0 detached
ugen0 detached
uhub0 detached
ugen1 detached
ugen2 detached
uhub1 detached
video1 detached
uvideo1 detached
uhub2 detached
uhub3 detached
uhub4 detached
uhub0 at usb0 configuration 1 interface 0 "AMD xHCI root hub" rev 3.00/1.00 addr 1
uhub1 at usb1 configuration 1 interface 0 "AMD xHCI root hub" rev 3.00/1.00 addr 1
uhub2 at usb2 configuration 1 interface 0 "AMD xHCI root hub" rev 3.00/1.00 addr 1
uhub3 at usb3 configuration 1 interface 0 "AMD xHCI root hub" rev 3.00/1.00 addr 1
uhub4 at usb4 configuration 1 interface 0 "AMD xHCI root hub" rev 3.00/1.00 addr 1
wakeups: 1 2
wakeup event: GPE 0x7
uvideo0 at uhub0 port 4 configuration 1 interface 0 "SunplusIT Inc Integrated Camera" rev 2.01/50.12 addr 2
video0 at uvideo0
ugen0 at uhub0 port 4 configuration 1 "SunplusIT Inc Integrated Camera" rev 2.01/50.12 addr 2
system resumed from sleep
battery status: high. external power status: not connected. estimated battery life 56% (275 minutes life time estimate)
ugen1 at uhub1 port 2 "USI product 0x9309" rev 1.10/0.01 addr 2
ugen2 at uhub1 port 3 "Synaptics product 0x0123" rev 2.00/0.00 addr 3
uvideo1 at uhub2 port 1 configuration 1 interface 0 "SunplusIT Inc Integrated IR Camera" rev 2.01/51.19 addr 2
video1 at uvideo1
uhidev0 at uhub4 port 1 configuration 1 interface 0 "Yubico YubiKey FIDO" rev 2.00/5.43 addr 2
uhidev0: iclass 3/0
fido0 at uhidev0: input=64, output=64, feature=0


ok?


Skip CSS on AMD 19h/4x

M  sys/dev/pci/xhci_pci.c  |  6+  1-

1 file changed, 6 insertions(+), 1 deletion(-)

commit - 9dd6953e617d51634dc519eca58a663916a949bd
commit + a4d1a2eb5ce8157070972265496ff5ffe1be3181
blob - 28df38fd0a62f9c8fd2d8d540ab77f2d2b9c0078
blob + 4610ee9bdc352a9defc2cedd226bb1da9cef23cf
--- sys/dev/pci/xhci_pci.c
+++ sys/dev/pci/xhci_pci.c
@@ -154,7 +154,12 @@ xhci_pci_attach(struct device *parent, struct device *
 	case PCI_VENDOR_AMD:
 		if (PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_AMD_17_1X_XHCI_1 ||
 		    PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_AMD_17_1X_XHCI_2 ||
-		    PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_AMD_17_6X_XHCI)
+		    PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_AMD_17_6X_XHCI ||
+		    PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_AMD_19_4X_XHCI_1 ||
+		    PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_AMD_19_4X_XHCI_2 ||
+		    PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_AMD_19_4X_XHCI_3 ||
+		    PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_AMD_19_4X_XHCI_4 ||
+		    PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_AMD_19_4X_XHCI_5)
 			psc->sc.sc_flags |= XHCI_NOCSS;
 		break;
 	}