Fixing USB 4 Compatibility Issues on Gigabyte Z590I VISION D
Last week, I upgraded my homelab server motherboard from a Gigabyte Z490I AORUS ULTRA to a Gigabyte Z590I VISION D, mainly to take advantage of its built-in Thunderbolt 4 support.
Unfortunately, things didn’t go as smoothly as expected.
My USB4 hard drive enclosure, which is based on the ASMedia ASM2464PD controller, refused to work on this board. The enclosure worked perfectly on macOS and other systems, but on the Z590 platform it simply didn’t function at all. After nearly a week of debugging and searching through forum posts, I eventually tracked the issue down to the Thunderbolt NVM firmware shipped with the motherboard.
If you’re running USB4 devices on older Intel Thunderbolt 4 platforms—especially Maple Ridge—this article might save you some time.
Thunderbolt Firmware and USB4 Compatibility
According to the Linux kernel documentation, most PCs—particularly Thunderbolt 3 and early USB4-capable systems—still rely on a firmware-based connection manager. In contrast, Apple systems and newer USB4-compliant platforms use a software connection manager.
This difference helps explain an important observation: the ASM2464PD controller works flawlessly on Macs, but fails to function on my Z590 board under Linux.
The Z590I VISION D uses Intel’s Maple Ridge Thunderbolt 4 controller (JHL8540). On my board, the controller was running NVM firmware version 28.0, and Gigabyte has never released an update for it:
$ cat /sys/bus/thunderbolt/devices/0-0/nvm_version
28.0
Multiple users have reported that ASM2464PD requires Maple Ridge NVM 36 or newer to function correctly. That explained everything—but also raised an obvious question:
How do you upgrade Thunderbolt firmware if your motherboard vendor never ships updates?
Upgrading the Thunderbolt NVM Firmware
The good news is that Thunderbolt NVM firmware is upgradeable under Linux, as long as you’re running a sufficiently recent kernel. Support for host-side NVM updates on Maple Ridge was enabled after this kernel commit.
⚠️ Warning
Flashing Thunderbolt NVM firmware is inherently risky.
Using an incompatible image can permanently brick the controller unless you have access to vendor-specific recovery tools. Proceed only if you understand the risks.
Where to Get a Compatible Firmware Image
Although Gigabyte doesn’t publish firmware updates, ASUS does.
ASUS sells the ThunderboltEX 4 add-in card, which happens to use the same Intel Maple Ridge JHL8540 controller as the Z590I VISION D. ASUS regularly releases firmware updates for this card, and those NVM images are compatible at the controller level.
After downloading the ASUS firmware package, extract the NVM.bin file—we’ll use this to update the on-board controller.
Flashing the NVM Under Linux
Before flashing, make sure the Thunderbolt controller is actually active. The easiest way to do this is to connect any Thunderbolt device. In my case, I simply plugged in a Mac.
Once the controller is visible under /sys/bus/thunderbolt/, we can write the new firmware image to the inactive NVM partition:
$ dd if=NVM.bin of=/sys/bus/thunderbolt/devices/0-0/nvm_non_active0/nvmem
This does not immediately overwrite the running firmware. Instead, it stages the new image for authentication.
Next, trigger the authentication and activation process:
$ echo 1 > /sys/bus/thunderbolt/devices/0-0/nvm_authenticate
If everything goes well, the Thunderbolt host controller will briefly disappear from the system. The kernel will then re-detect it and perform a full power cycle. After a short delay, the controller should come back online with the new firmware active.
Verifying the Upgrade
You can confirm that the upgrade succeeded with the following checks:
$ cat /sys/bus/thunderbolt/devices/0-0/nvm_authenticate
0x0
$ cat /sys/bus/thunderbolt/devices/0-0/nvm_version
43.83
A value of 0x0 in nvm_authenticate indicates that the last authentication cycle completed successfully. Any other value represents an error code and means the firmware was rejected.
Fixing Power Management Issues
After the firmware upgrade, I encountered another issue: if the Thunderbolt ports sat idle for a while, they would sometimes become completely unavailable.
The following error appeared in dmesg:
pcieport 0000:08:01.0: Unable to change power state from D3hot to D0, device inaccessible
This appears to be a PCIe power management edge case affecting some Thunderbolt setups. As a workaround, you can disable aggressive power-saving features by adding these kernel command-line parameters:
pcie_port_pm=off pcie_aspm=off pci=pcie_bus_perf usbcore.autosuspend=-1
This prevents the controller and attached devices from entering low-power states that they sometimes fail to recover from.
Results
With the updated NVM firmware in place, the ASM2464PD USB4 enclosure works perfectly on Maple Ridge. The controller now enumerates correctly as PCIe devices:
$ lspci | grep ASMedia
0d:00.0 PCI bridge: ASMedia Technology Inc. Device 2463
0e:00.0 PCI bridge: ASMedia Technology Inc. Device 2463
One amusing side effect of flashing ASUS firmware onto a Gigabyte motherboard is that the Thunderbolt controller now identifies itself as an ASUS device:
$ cat /sys/bus/thunderbolt/devices/0-0/vendor_name
ASUS
$ cat /sys/bus/thunderbolt/devices/0-0/device_name
THUNDERBOLTEX 4
It looks a bit odd—but more importantly, it works. 😄
∎