Index | Thread | Search

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

Download raw body.

Thread
> Date: Thu, 19 Jun 2025 15:36:49 +0200
> From: Stefan Sperling <stsp@stsp.name>
> 
> 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?

Sure.  I'm wondering at what point we decide that all AMD XHCI
controllers have this issue...

> 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;
>  	}
> 
>