For years, running a mainline Linux distribution on Apple Silicon meant sacrificing one of the most critical connectivity standards in modern computing: Thunderbolt. Thanks to the tireless, multi-year efforts of the Asahi Linux project, that barrier has finally been shattered. On August 30, 2026, lead kernel developer Sven Peter submitted a massive 19-patch series to the Linux Kernel Mailing List (LKML), introducing the first functional USB4 and Thunderbolt support for Apple’s M1, M2, and M3 SoCs.
This release is not merely a driver update; it is a masterclass in hardware reverse engineering. By dissecting Apple’s proprietary I/O architecture without a single line of documentation from the manufacturer, the Asahi Linux team has solved complex memory windowing issues, custom co-processor firmware loading, and strict hardware sequencing requirements. This article provides an exhaustive technical analysis of how Thunderbolt was finally brought to Apple Silicon Linux, why it took so long, and what the current architectural limitations mean for end-users and kernel developers alike.
The Black Box Problem: Why Thunderbolt Was Missing on Apple Silicon
To understand the magnitude of this patch series, one must first understand why Thunderbolt support has been notoriously difficult to implement on Apple Silicon. On traditional x86 PCs, Thunderbolt controllers (historically provided by Intel) expose a relatively standard PCIe interface and a well-documented Native Host Interface (NHI). The Linux kernel’s upstream thunderbolt subsystem was built specifically to interact with these standard Intel controllers, assuming persistent MMIO (Memory-Mapped I/O) access and standardized DMA (Direct Memory Access) routing.
Apple, however, designed its own custom silicon for the M-series chips, integrating USB4 and Thunderbolt routing directly into the SoC via a proprietary hardware block known as ACIO (Apple Converged I/O). Unlike standard controllers, ACIO is not just a dumb router; it is a highly secure, self-contained subsystem that operates under a strict, undocumented hardware security model. Because Apple provides no public documentation for this hardware, the Asahi Linux team had to completely reverse-engineer the boot sequence, MMIO layouts, and firmware loading procedures from scratch.
The Architecture of Apple’s ACIO Block: A Kernel Developer’s Nightmare

The core of Sven Peter’s patch series revolves around taming the ACIO block. On Apple Silicon, each USB4-capable Type-C port is governed by its own ACIO instance, which introduces several architectural hurdles that do not exist on standard PCs.
The Cortex-M3 Co-Processor and Firmware Loading
Each ACIO block houses a dedicated ARM Cortex-M3 co-processor. This low-power microcontroller manages the low-level state machine of the USB4 router, handling link training, power negotiation, and tunnel establishment. The main Linux kernel running on the primary ARM64 application cores cannot directly manipulate the Thunderbolt routing tables. Instead, the kernel must load proprietary firmware into the Cortex-M3, boot the co-processor, and communicate with it via a shared mailbox mechanism. If the firmware fails to load or the co-processor crashes, the entire Thunderbolt port becomes inoperable.
The 16 MiB MMIO Windowing Quirk

In a standard PC environment, Thunderbolt MMIO registers are mapped persistently to the host’s memory space, allowing the kernel to poll status registers and configure rings at any time. Apple’s implementation is radically different. The main SoC bus is only granted a temporary 16 MiB MMIO “window” into the ACIO’s address space, and this window is only accessible while the Cortex-M3 co-processor is actively running.
This ephemeral access requires a highly unusual device tree (DT) representation. The NHI and DART (Apple’s custom IOMMU) components are represented as children of the ACIO block, with memory addresses relative to that 16 MiB window. The new Linux driver must dynamically populate these child devices only after the co-processor has successfully booted, and cleanly unpopulate them before powering down the ACIO block to prevent fatal system crashes.
DART IOMMU and Hardware Security

Apple utilizes a custom IOMMU known as DART (Device Address Resolution Table) to manage memory access for its internal peripherals. In the context of ACIO, the internal DART ensures that the Cortex-M3 co-processor and the USB4 router can only perform DMA operations within strictly defined memory apertures. The patch series introduces device tree bindings that map these DMA apertures, ensuring the kernel respects Apple’s hardware security boundaries while still allowing the Thunderbolt controller to move data to and from system RAM.
Solving the Type-C PHY Teardown and CD321x Integration
One of the most complex hurdles in reverse-engineering Apple’s I/O stack was the strict hardware ordering requirements. ACIO cannot simply be turned on or off at will by the kernel; it relies on a fragile sequence of dependencies involving the Type-C Physical Layer (PHY) and the port controller.
📬 Stay Ahead of Cyber Threats
Get the latest cybersecurity news, critical vulnerabilities, threat intelligence, tutorials, and exclusive giveaways delivered straight to your inbox. No spam. Unsubscribe anytime.
Subscribe to the Newsletter →Strict Power-Up and Teardown Sequencing

The ACIO block can only be initialized after the Type-C PHY has been explicitly configured for USB4/Thunderbolt operations. Conversely, it must be completely stopped and reset before the Type-C PHY is powered down. If this sequence is violated, the hardware enters an undefined state, often requiring a full system reboot to recover.
Furthermore, the ACIO block requires precise cable details—such as electron marker data and active cable capabilities—that are only known to the Type-C port controller (specifically the Texas Instruments CD321x used on Apple boards). In the standard Linux kernel, the Type-C subsystem uses a “mode switch” to handle alternate modes like DisplayPort or Thunderbolt. However, the existing Type-C mode switch infrastructure was not designed to express the complex, reverse-teardown ordering required by Apple’s hardware.
A New Thunderbolt Switch in the Type-C Subsystem
To solve this, the patch series introduces a dedicated Thunderbolt switch within the USB Type-C subsystem. This new switch hooks directly into the tipd driver (the kernel driver for the CD321x port controller). By bypassing the standard mode switch logic, the new implementation ensures that cable details are passed to the Thunderbolt core before initialization, and that the strict power-down sequence is respected during system sleep or device disconnection.
Modifying the Upstream Thunderbolt Core: Quirks and NHI
Intel’s NHI standard makes certain assumptions about hardware capabilities that simply do not exist on Apple Silicon. To make the upstream thunderbolt core driver compatible with Apple’s custom implementation without breaking support for Intel/AMD PCs, the patches introduce several vital quirks and structural changes.
- DROM from Device Tree: Standard Thunderbolt controllers read their Device ROM (DROM)—which contains routing tables, device identification, and capabilities—from an onboard EEPROM. Apple embeds this data within the system firmware. The patch
thunderbolt: Try reading host DROM from device tree firstmodifies the core to pull this critical routing data directly from the device tree, bypassing the missing EEPROM. - Ring Buffer and Interrupt Layouts: Apple’s interrupt routing for the NHI differs from standard Intel implementations. The patches modify the Thunderbolt core to support configurable ring register layouts and interrupt masks (
ring_interrupt_active,ring_interrupt_mask), allowing the driver to properly allocate HopIDs and handle hardware interrupts. - Hardware Quirks: The driver introduces
QUIRK_NO_DMA_PORTbecause Apple’s implementation does not support standard DMA port mapping. Additionally,QUIRK_NO_USB3_BW_ALLOCis used because USB3 bandwidth allocation via the Thunderbolt controller is handled differently on Apple’s SoC, relying instead on the ATCPHY pipehandler.

Current Limitations: The Suspend SError and Missing Tunnels
It is crucial for system integrators and daily drivers to understand the current state of this initial upstream push. This is a foundational release, and several advanced features remain on the roadmap.
Supported: XDomain and USB3 Tunnels
Currently, the driver fully supports XDomain connections (peer-to-peer Thunderbolt networking, such as connecting two Macs via a Thunderbolt bridge) and USB3-via-USB4 tunnels. Standard USB 3.x devices plugged into a Thunderbolt dock or directly into the port will work seamlessly, providing full bandwidth and hotplug support.
The Suspend SError Problem

System suspend (S2RAM) is currently disabled whenever an active Thunderbolt connection is present. On ARM64 architectures, attempting to access MMIO registers of a powered-down hardware block triggers an SError (System Error)—a fatal asynchronous external abort that immediately panics the kernel. Because the ACIO Cortex-M3 loses its state and the 16 MiB MMIO window collapses during system sleep, any background polling by the kernel would result in an SError upon resume. Until a method is developed to safely snapshot and restore the ACIO state across sleep cycles, the driver actively blocks system suspend to maintain stability.
Missing PCIe and DisplayPort Tunnels
Users cannot yet plug in a Thunderbolt eGPU, a Thunderbolt PCIe network card, or use DisplayPort Alternate Mode over Thunderbolt docks. Establishing PCIe tunnels requires mapping the Thunderbolt PCIe root complex through Apple’s DART IOMMU, a process that requires significant additional reverse engineering of Apple’s memory management unit. DisplayPort tunneling requires further integration with the Asahi Linux AGX GPU driver and the Display Port Transmission (DPTX) subsystem.
Code Implementation: Device Tree Bindings
To visualize how the kernel interacts with this proprietary hardware, below is a conceptual representation of the device tree bindings introduced in the patch series. This structure defines the ACIO block, the NHI, and the DART IOMMU, enforcing the parent-child relationship required for the 16 MiB MMIO windowing.
/ { soc { acio@... { compatible = "apple,t8103-usb4-acio"; reg = <0x0 0x... 0x0 0x...>; interrupts = <...>; /* The Cortex-M3 must be booted by the driver before these children are accessible */ nhi: nhi@... { compatible = "apple,t8103-usb4-nhi"; reg = <0x0 0x... 0x0 0x...>; interrupts = <...>; thunderbolt,quirks = <QUIRK_NO_DMA_PORT>, <QUIRK_NO_USB3_BW_ALLOC>; }; dart: iommu@... { compatible = "apple,t8103-dart"; reg = <0x0 0x... 0x0 0x...>; #iommu-cells = <1>; }; }; };};
This DT structure ensures that the kernel’s device model respects the lifetime of the ACIO block, preventing the driver from probing the NHI or DART before the Cortex-M3 co-processor has mapped the necessary MMIO regions.
The Impact on the Open Source Ecosystem
This achievement highlights the sheer power of community-driven reverse engineering. Without a single line of code, firmware, or documentation provided by Apple, volunteers have managed to map out one of the most complex, proprietary I/O architectures in modern consumer electronics.
By upstreaming this directly into the mainline Linux kernel via the thunderbolt tree, Asahi Linux ensures that these drivers will undergo rigorous peer review by kernel maintainers like Greg Kroah-Hartman and Mika Westerberg (Intel’s Thunderbolt maintainer). This guarantees long-term stability, security, and seamless integration into enterprise distributions like Fedora Asahi Remix and Ubuntu.
The arrival of USB4 and Thunderbolt support on Apple Silicon marks the end of an era for Linux on Macs. What began as an impossible black box has been dismantled, documented, and integrated into the mainline kernel. While eGPU and DisplayPort dock support remain on the horizon, the foundational ACIO driver is a masterclass in kernel development and hardware reverse engineering, bringing Apple Silicon Linux closer than ever to complete daily-driver parity with macOS.









