Enable Thunderbolt 3 for unsupported peripherals on macOS
Python
Switch branches/tags
Nothing to show
Clone or download
Pull request Compare This branch is 22 commits ahead, 1 commit behind lloeki:master.
Permalink
Failed to load latest commit information.
.gitignore ignore useless files Sep 20, 2013
.python-version Update for 13.3 (#17) Jan 24, 2018
LICENSE BSD licensed Aug 19, 2011
README.md Update README.md Feb 4, 2018
tb3-enabler.py Add 10.13.4 (17E202) (#20) May 8, 2018

README.md

TB3 enabler

Ryan Govostes came up with a better solution. Thunderbolt3Unblocker uses a separate kext and override IOThunderboltFamily in runtime. That approach is better because you don't need to manually re-apply the binary patch everytime when there is a macOS update.

For unknown reasons, Apple decided to block the support for some categories of Thunderbolt 3 peripherals under macOS and when you connect those Thunderbolt 3 peripheral, you simply get an "Unsupported" message under Thunderbolt Device Tree. After digging around, it turns out the block is implemented in software level and it is possible to bypass the block by patching the related kext. This patch modifies IOThunderboltFamily and allows "Unsupported" Thunderbolt 3 peripherals to work under macOS Sierra.

Warning

I cannot be sure whether blocking the Thunderbolt 3 peripherals is purely a business decision or actually trying to protect MacBook Pro defected Thunderbolt 3 peripherals. However, given those peripherals work fine under Windows via Boot Camp, it doesn't look like the block exists for protection.

I took most steps I could to ensure kitten safety, but can make no warranty. In any case you're on your own. This is ultimately a sensitive hack and you take full responsibility by running this script.

I have tested the patch on MacBook Pro 13,3 with macOS 10.12.1 (16B2659) and there are reports of this working with MacBook Pro 13,1.

Usage

  1. Disable System Integrity Protection

  2. Run the script from Terminal

    tb3-enabler.py apply
    
  3. Reboot

Available arguments

Run with no arguments to see a quick reminder. Here's something more extensive about what's actually done:

apply       applies the patch, after making sure we know the
            file we're applying to, backing it up only if it's
            the original one, and subsequently checking if the
            patch applied correctly.
restore     restores from the previously made backup.
status      shows current situation, including status of the file
            and whether a backup is available.

In any case of changing success, the kext cache gets cleared.

Thanks