USB 3.2 Gen2 surprise on AM4!

I’ve been tinkering with my ProArt X570 board this evening, trying to divvy up the available USB controllers (ignoring Thunderbolt) between the host and a virtual machine such that both have a few USB3 ports and at least one 3.2 Gen2 (10Gbps aka SuperSpeed+) port. Here’s what the spec sheet says about the eight Type-A ports on the rear I/O panel:

4 x USB 3.2 Gen 2 port(s) (4 x Type-A)
4 x USB 3.2 Gen 1 port(s) (4 x Type-A)

I’ve always assumed that the former were the four teal-colored ports and the latter were the four blue-colored ports. It also says this about the internal headers for the front I/O panel:

1 x USB 3.2 Gen 2 connector (support(s) USB Type-C®)
1 x USB 3.2 Gen 1 header(s) support(s) additional 2 USB 3.2 Gen 1 ports

Anyway, Linux shows two controllers in IOMMU group 23 and one controller in IOMMU group 47.

IOMMU Group 23:
	3d:00.1 USB controller: Advanced Micro Devices, Inc. [AMD] Matisse USB 3.0 Host Controller
	3d:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Matisse USB 3.0 Host Controller
IOMMU Group 47:
	46:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Matisse USB 3.0 Host Controller

Omitting the USB 2.0 (root) hubs, the two controllers in group 23 correspond to these two entries in lsusb -t:

/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 10000M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 10000M

And the controller in group 47 corresponds to this entry:

/:  Bus 08.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 10000M

I figured one of them was for the Type-C internal header and the other two were for the four teal-colored Type-A ports on the rear I/O panel. So I started plugging a USB 3.2 Gen2 device into each of the five (documented) 10Gbps ports to figure out which was which.

Here’s where this finally gets interesting: all of those ports operate at 10Gbps, but none of them map to the controller in group 47! So what the heck is that “Bus 08” controller wired up to?? I double and triple-checked that it wasn’t attached to the Thunderbolt controller and that I didn’t have a second internal Type-C header or anything else funky going on. Finally, on a whim, I connected my test device into one of the blue Type-A ports:

/:  Bus 08.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 10000M
    |__ Port 2: Dev 6, If 0, Class=Mass Storage, Driver=uas, 10000M

Holy crap, right? It turns out all eight Type-A ports on the rear I/O panel operate at 10Gbps. (And yes, I confirmed it with a dd speed test.) What kind of black voodoo magic is Asus using here and why aren’t they bragging about it on the spec sheet?? If anybody can corroborate my findings and sanity-check me here that would be greatly appreciated.

Unfortunately the two Type-A ports on the front I/O panel are stuck at 5Gbps, which is unsurprising, but I had to test it after this discovery. Now I kind of want to go around to every X570 and B550 system I have access to and check its Type-A ports…

TL;DR: At least one late-lifecycle “X570S” board from Asus provides faster-than-advertised USB Type-A ports on the rear I/O panel.

2 Likes

Ah, sure enough. I have an MSI B550-A Pro on my test bench and its spec sheet advertises:

AMD Processor

  • 2x USB 3.2 Gen 2 10Gbps ports (1 Type-C port and 1 Type-A port on the back panel)
  • 2x USB 3.2 Gen 1 5Gbps Type-A ports on the back panel

However, I just confirmed that all four of these ports will operate at 10Gbps.

I think what’s happening here is that the USB ports that are wired directly to the SoC/IOD may vary in speed depending on which processor is installed, but motherboard manufacturers (in these two cases at least) didn’t take the time to write detailed spec sheets that account for this (like they do for e.g. PCIe lane speeds). So I don’t know if this is only true for 5000-series processors in 500-series boards in some or all cases—or if it’s true for any Ryzen processor with a Matisse IOD—or if it varies from board to board, down to trace count and quality—or what.

Is this a commonly-known thing? Am I just late to the party? Even if so this is quite a pleasant discovery for an I/O nerd and something I’ll be glad to be aware of going forward!

Sounds very likely. Similar to DP connection speeds, only here DP is explicitly designed to measure connection quality and fall back to lower speeds, which I am not sure USB3 is too.

My old Z390 board for example was advertised with front USB-C with 5G, but in BIOS you could enable 10G support. But it was extremely unstable with most devices and only had a chance with very short cables.

Can you confirm which controller is integrated into the CPU and which is in the chipset from the PCIe topology?

2 Likes

Internal header?

Nope, internal header maps to Bus 06.

I was trying to verify this in lstopo as the lights were starting to dim last night, but I couldn’t get hwloc to show me USB controllers. I was able to figure it out this morning after some sleep and coffee (and brain pills): lstopo --whole-io, which shows that 3d:00 is integrated in the chipset, and 46:00 is not! So that seems to confirm this theory, or at least it doesn’t refute it.

1 Like

So from Intel I am used to there only being a single USB-Root-Controller (Z690, USB3 20G down to USB2).
And since Intel always requires a chipset, even with their “SoC”-Variants, there are not even CPU-based ports. Chipset is just a 2nd die on the package there (TB controllers excluded).
And this controller manages all ports of varying speeds.

So I would expect the different port-speeds to be only determined by which pins they are connected to (like a “only USB2” port) and if the wires are shared between 5G and 10G ports I would expect this to be either firmware configuration done by BIOS or fused / hardwired by the board manufacturer.
For IO integrated into a socketed processor I would assume it is firmware.
So the big question is, whether the board manufacturer ensured signal integrity for ports not advertised with full speed.
Maybe they just forgot to configure the firmware properly to lockout untested speeds stability is a gable depending on the board & environment, maybe they know the signal integrity is good enough, but are too lazy to update the manual.

I have never found that out for all the cases where the board is specced with DP HBR2 speeds, but the iGPU supports HBR3 speeds. On some boards it seems to work, no idea if by accident or on purpose. But then again, most boards do not have explicit specs on those speeds to begin with, sth. that is not true for USB-ports (well with Gigabyte and Asrock only if you look at the actual manual, the IO-shield is already chaos when it comes to USB speeds)

1 Like

Yes, this is my big concern. Hopefully they were just too lazy to update the spec sheet/manual!

Interesting observations and thanks for sharing.

I swear I didn’t pay attention and noticed it in my three years ownership of a Ryzen system. Because all my USB devices are slow speed. So…that’s that. But since now you mentioned it I see all my six USB type-A and type-C ports are 10Gbps as well. Even though MSI only declared two of the six ports are 10Gbps on this B450M motherboard.

Okay, so it holds for at least some 400-series boards, so the big question is what CPU do you have in there?

I have a Ryzen 3600 which comes with the same I/O die as in Ryzen 5000 series.

The chipset X570 and X570S are essentially re-badged Matissie I/O die. So in your case you see three “Mastissie USB 3.0 controllers” from lspci. I think the I/O die has two USB 3.1 10Gbps controllers built-in but motherboard vendors might not use both.

Yes, that makes sense.

So any Ryzen processor with a Matisse IOD (i.e. Ryzen 3000 and 5000 non-APUs) paired with a 400- or 500-series motherboard has a fair chance of gaining this benefit. Now that 10Gbps devices are (finally) becoming more common I think this will be a pleasant surprise for some people. Thanks for the extra data points!

1 Like

This topic was automatically closed 273 days after the last reply. New replies are no longer allowed.