Getting Thunderbolt 2 Working on Legacy Hackintosh (Ivy Bridge, Haswell, Broadwell-E)

Fix Thunderbolt 2 on Ivy Bridge, Haswell, and Broadwell-E Hackintosh systems running macOS Sierra or High Sierra. Includes ACPI SSDT patches, kexts, and BIOS settings.

macOS Energy Saver preferences showing darkwake boot argument in the Boot section of config.plist

When working with Ivy Bridge (3rd-gen Core), Haswell (4th-gen), or Broadwell-E (5th/6th-gen HEDT) platforms on macOS Sierra or High Sierra, Thunderbolt 2 connectivity often fails to initialize after sleep or a cold boot. The controller is detected in System Information but connected devices remain invisible to Disk Utility and the Finder. This guide covers the ACPI and kext-based fixes required to restore Thunderbolt 2 functionality on these legacy Hackintosh builds.

Identifying the Thunderbolt Controller

Before applying any patches, confirm your controller model. Thunderbolt 2 on Ivy Bridge and Haswell platforms uses the Cactus Ridge (DSL3510/DSL3310) or Falcon Ridge (DSL5320) controllers. Broadwell-E systems typically employ Alpine Ridge (DSL6340) but in Thunderbolt 2 mode. Check the PCI device ID under System Information > PCI or via the lspci command in a terminal (if available). Common Device IDs:

  • 0x1547 – Cactus Ridge 4C (4-port controller)
  • 0x1549 – Cactus Ridge 2C (2-port controller)
  • 0x156a – Falcon Ridge (Thunderbolt 2)
  • 0x157a – Alpine Ridge (in Thunderbolt 2 mode)

If your controller appears as 0x15d9 or 0x15da, it is a Thunderbolt 3 controller running in legacy mode — those require a different set of patches not covered here.

ACPI Hotplug and Power Management

Thunderbolt 2 on these platforms relies on the ACPI _DSM method to enable the controller and hotplug events. A missing or incomplete _DSM in the DSDT is the most common reason for non-functional ports. The fix involves injecting a custom SSDT that provides the proper _DSM for the Thunderbolt PCI device.

Creating the SSDT-TB2.aml

  1. Dump your DSDT and all SSDTs using Clover F4 at boot or a live Linux USB with acpidump.
  2. Open the DSDT in MaciASL and locate the PCI device path for your Thunderbolt controller. It is usually under _SB.PCI0.RP05 or _SB.PCI0.RP09 (the exact Root Port varies by motherboard).
  3. Create a new SSDT with the following structure, replacing XXXX with your device’s address and YOUR_UID with the unique ID from your DSDT (typically a numeric value like 0x05):
DefinitionBlock ("", "SSDT", 2, "hack", "TB2", 0x00000000)
{
    External (_SB_.PCI0.RPXX, DeviceObj)
    
    Scope (_SB.PCI0.RPXX)
    {
        Method (_DSM, 4, NotSerialized)
        {
            If (!Arg2) { Return (Buffer() { 0x03 }) }
            Return (Package()
            {
                "device-id", Buffer() { 0x47, 0x15, 0x00, 0x00 },
                "vendor-id", Buffer() { 0x86, 0x80, 0x00, 0x00 },
                "subsystem-id", Buffer() { 0x47, 0x15, 0x00, 0x00 },
                "subsystem-vendor-id", Buffer() { 0x1b, 0x10, 0x00, 0x00 },
                "AAPL,slot-name", Buffer() { "Built-in" },
                "name", Buffer() { "pci8086,1547" },
                "model", Buffer() { "Apple Thunderbolt Controller" },
                "compatible", Buffer() { "pci8086,1547" }
            })
        }
    }
}

Compile the file to SSDT-TB2.aml and place it in /EFI/CLOVER/ACPI/patched/. Add SSDT-TB2.aml to the SortedOrder in your config.plist under ACPI.

Kexts for Thunderbolt 2 Support

Native Apple Thunderbolt drivers exist in Sierra and High Sierra, but they may not load without the correct device properties. Two kexts can help:

  • ThunderboltUnblocker.kext – forces the IOKit personality for Thunderbolt controllers that macOS otherwise ignores. Tested on Cactus Ridge and Falcon Ridge.
  • IOThunderboltUnblocker.kext – an alternative for Alpine Ridge controllers in Thunderbolt 2 mode. Use only one at a time.

Install the chosen kext to /EFI/CLOVER/kexts/Other/ or /Library/Extensions/ (the latter requires kextcache rebuild). Reboot and check System Information for the Thunderbolt bus.

Fixing Sleep/Wake Issues Related to Thunderbolt

Even with the ACPI patch and kext, Thunderbolt devices may disappear after wake from sleep. This is caused by power gating that fails to re-enumerate the bus. A common workaround is to add a Darkwake value in the boot-args. In your config.plist under Boot, set darkwake=8 for Haswell/Broadwell-E or darkwake=10 for Ivy Bridge. If the issue persists, try darkwake=0 (disables darkwake entirely) — note that this may prevent proper sleep on some systems.

For stubborn cases, disable Power Nap and Wake for network access in System Preferences > Energy Saver. These features interact poorly with Thunderbolt hotplug on legacy hardware.

macOS Energy Saver preferences showing darkwake boot argument in the Boot section of config.plist

Testing and Verification

After applying the patches, perform a cold boot and connect a Thunderbolt 2 device (e.g., an external SSD or display). Open System Information and navigate to Thunderbolt. You should see the controller listed as “Apple Thunderbolt Controller” with the device appearing in the tree below. If the device is visible but unmountable, try a warm reboot (restart without powering off) — some controllers require one re-enumeration cycle after initial ACPI injection.

If the controller still does not appear, verify that your BIOS settings have Thunderbolt Support enabled and Security Level set to “None” or “Legacy”. On Gigabyte and ASUS boards, also ensure Above 4G Decoding is enabled if you are using a Thunderbolt add-in card.

Known Limitations

  • Hotplug after cold boot – devices connected before power-on are always recognized; hotplugging after boot works on most Cactus Ridge controllers but is unreliable on Falcon Ridge. A warm reboot is the safest method to attach a new device.
  • No Thunderbolt 3 backward compatibility – Thunderbolt 2 controllers cannot drive Thunderbolt 3 devices even with an adapter. This is a hardware limitation.
  • Sleep/wake instability – even with darkwake tweaks, some motherboards (especially ASRock Z77 and Gigabyte Z87) may kernel panic on wake if a Thunderbolt device was attached before sleep. In such cases, disconnect the device before sleep.
  • No support for Target Disk Mode – Apple’s Target Disk Mode over Thunderbolt is not available on non-Apple hardware.

For Ethernet issues that sometimes coincide with Thunderbolt configuration errors, see the dedicated guide on Fixing Realtek RTL8111 Ethernet on Hackintosh High Sierra: Chip Revisions, Kexts, and ACPI Patches. If you encounter ACPI panics during boot that prevent Thunderbolt from initializing, the Fixing ACPI Panics on X79/X99 Hackintosh for macOS High Sierra article covers the necessary SSDT and renames for those chipsets.

Once you have a working setup, back up your SSDT-TB2.aml, config.plist, and BIOS settings. A macOS update or CMOS reset can wipe everything out, and rebuilding from scratch is tedious. On my test board (Gigabyte Z77X-UD5H), the combination of darkwake=8 and ThunderboltUnblocker.kext finally made hotplug reliable after wake, but results vary across hardware. Keep those files safe, and next time you need to restore Thunderbolt, you’ll skip the hours of re-troubleshooting.