freenode
Kernel & Low-Level

Linux gains first USB4/Thunderbolt path on Apple M1/M2/M3

Sven Peter’s 22-patch series brings ACIO host-router drivers and device-tree wiring so Type-C ports can run USB4 tunnels on Apple Silicon.

Sven Peter has posted a second-round, 22-patch series that adds the first USB4 and Thunderbolt host support for Apple’s M1, M2, and M3 SoCs in the mainline Linux kernel.

Each USB4-capable Type-C port on these chips sits behind an ACIO (“Apple Converged I/O”) block: a Cortex-M3 co-processor plus the USB4 router, Native Host Interface (NHI), and DART IOMMU. The main SoC only sees a 16 MiB MMIO window into that block while the co-processor is running, so the driver must boot ACIO first, then populate NHI and DART child devices, and tear them down again before power-off. Startup also depends on the Type-C PHY already being switched to USB4/Thunderbolt mode and on cable details known only to the port controller.

The series extends the Type-C core for USB4’s Enter_USB negotiation (no SVID), teaches the Thunderbolt stack Apple’s different NHI register layout and per-ring interrupts, unlocks host-router ports after reset, and quirks out USB3 bandwidth allocation that Apple’s host routers never acknowledge. A new platform driver boots the RTKit firmware, registers the NHI with the software connection manager, and forwards cable information from Thunderbolt VDOs or the USB4 EUDO. Device-tree nodes wire both Type-C ports on the t8103 and t8112 platforms, including the USB3 path to each DWC3 controller so tunnels can be restored before USB resumes.

As of this submission only XDomain links and USB3-over-USB4 tunnels are supported. DisplayPort and PCIe tunneling, and broader product coverage, remain future work. For Linux-on-Apple-Silicon users the change is still a milestone: Type-C ports that were limited to USB and display alternate modes can begin acting as USB4 hosts under mainline kernels.