[Sticky] [SCRIPT] TBTFlash - Convenient eGFX Flashing for macOS
Page shortcut: https://egpu.io/tbt-flash
It certainly isn't a stretch to say that eGFX flashing has generally been problematic and unnecessarily complicated. Limitations ranged from requiring certain kinds of hosts, Thunderbolt 3, using specific versions of Windows tools, and certain types of firmware files. eGPU.io created a Thunderbolt 3 User Map to enable users around to globe to reach out to fellow eGPU.io members nearby to flash eGFX firmware. Only this community would have thought of that! However, coverage is certainly limited and all in all, sending and receiving PCBs is far from convenient. TBTFlash is an attempt to change all of that.
TBTFlash allows Mac users to flash eGFX firmware without limitations. With initial release, I have confirmation that it works successfully on the Mantiz Venus, AORUS Gaming Box, and the Sonnet eGFX boxes. The more users there are, the more limitations of this tool I will discover - and patch :p, in hopes that it becomes more versatile. The process is super-simple: Acknowledge the risks involved with flashing, follow the instructions in the script, provide it the firmware file, and flash your eGFX. Reboot and voila! Flashing uses Apple's native macOS mechanism that it built for flashing the Blackmagic eGPU and probably for its host Thunderbolt controllers, so you will be greeted with an Apple logo and progress bar as the eGFX is flashed. I advise against flashing any firmware that is not from the original manufacturer of the eGFX enclosure. However, in cases where the boards are same such as with Sonnet and Mantiz, it is indeed possible to cross-flash.
The possibilities with this tool are yet untapped. This tool could probably flash non-eGFX devices and host controllers too. In fact, given that the flasher runs in EFI, and apparently uses standard EFI drivers to flash firmware (though I have not fully analyzed it), it should be possible to further modify this tool and get it running on ANY system, not just Macs. The main barrier is that this tool (of course) contains some of Apple's proprietary stuff (such as graphics/progress bar). But it does have a text-only mode that it automatically switches to when run in EFI shell. Furthermore, this tool performs a board ID check (relevant to Macs) - I have not patched this as it was not required in this case. If needed, I could probably do this in a future update, which should hopefully open it up to ANY EFI system (which is basically every modern computer) and probably more Macs, in case they are blocked.
Start with the script's wiki page. A thank you is amazing and enough, but if you really want to, please star the Github repo. And here's a way to donate if you loved this tool:
@mac_editor Thanks to your dedication and hard work on the TBT FW project, we now have a convenient tool to get this job done in less than 5 minutes! We will soon retire the Thunderbolt 3 User Map. The next hurdle is firmware collection and distribution. Due to the risky nature of firmware flashing, we should have a defined process to share FW not available publicly through the Thunderbolt manufacturer website. Below are the Thunderbolt 3 enclosures with their FW version and Power Delivery [link indicates available firmware].
Blackmagic: Use Apple official FW installer
Lenovo: TB3 Graphics Dock [v003 65W]
NetStor: Hercules HL23T [25.1 15W], HL23T-Plus [33.1 15W]
Zotac: AMP Box, AMP Box mini [26.1 15W]
Please contact our admin/moderator team if you'd like to share a firmware to these TB3 enclosures. We will test-flash with our unit to confirm prior to sharing through the forum.
Could add the firmware downloads to original post as a separate section for clarity (though it'll be right under it anyway).
@mac_editor FW flash was just as easy through Thunderbolt 2! My 2015 15-in MacBook Pro is running the Sonnet Breakaway Box thanks to your Purge-Wrangler script to use RX 480 so SIP was already disabled. Power Delivery is no use through the Apple Thunderbolt 3 to Thunderbolt adapter but the system and flashing process did not skip a beat. All done in one shot with eGPU installed. This is a much better experience than the official Intel FW Tool. Amazing work! 😀
Well that sounds amazing to me too :p less work after all haha. Seems like Apple’s EFI tool is quite versatile.
Released a minor update (1.0.1) that improves flashing speed by up to 30% (from start to end of progress bar). Also started a bit of firmware analysis and immediately things look a little interesting. The detected data offsets for the firmwares are exactly the same. The firmwares are of almost the same size. The Sonnet 60W firmware has some hash constants at the end and is overall smaller vs. the other firmwares I have on hand. I suddenly have a very strong feeling that most firmwares are really the same, with different device and vendor IDs along with different H2D and PD configurations. A quick look inside and I could easily change the device name (yet to flash). By analyzing differences between firmwares it should hopefully not be too difficult to pinpoint where H2D and PD are configured. The only drawback is that I'll likely have one shot of flashing custom firmware - if it works out, all well, otherwise I might have a Sonnet brick :p
@mac_editor I think so too. The major components are very similar if not the same. Would be cool to change the Vendor IDs and Enclosure Names. As far as I'm concerned we've been providing more support and customization options for these eGPU enclosures than Intel and manufacturers so it's about time we name them whatever we want.
Yes, flashing the Mantiz firmware should get you 87W PD. If you have the I/O board Mantiz uses, then that should work too - though the Sonnet box does not have cutouts for said ports.
Stay tuned for updates 😉
@mac_editor, XG Station Pro [29.1 15W] is a good candidate to test Power Delivery modification. It would be a lot more popular had ASUS used a firmware with at least 60W. I have a test unit if you want to give a go.
@itsage, I have yet to make progress on the firmware analysis - things have gotten a little busy. I didn't know that ASUS firmware was public - thanks for sharing - the more the better.
This is great work. You can try to leverage the Linux Vendor Firmware Service(LVFS) as your source of firmware. We just recently had a presentation at FOSDEM 2020 on leveraging it for system firmware updates. The official stance is firmware uploading is owned by Thunderbolt system vendors not Intel. You can view page 19 of the Intel Capsule Update slide deck for a graphic on the vendor adoption of LVFS. You will start seeing more vendors get onboard as USB4 devices, phones and tablets use this service. Google now requires hardware vendors to use fwupd for "Designed for ChromeBook" devices. The fwupd project has plugins for updating Thunderbolt and Thunderbolt PD devices.
Pending: Add my system information and expected eGPU configuration to my signature to give context to my posts
@mac_editor, No worries. I have an EEPROM Flash Programmer coming in the mail. I will try to extract the firmware from enclosures we have no bin files yet.
When will eGPU.io start producing eGPUs of their own then? 😉
I noticed that CalDigit released a firmware for their TS3 Plus dock enabling 87W charging and Catalina Support.
Thought you might be interested to look inside it if there's something else for us there.
- The new TS3 Plus firmware 44.1 provides support for charging a laptop up to 87W
- It also improves compatibility and interoperability with some USB-C monitors when connecting to the TS3 Plus’s downstream Thunderbolt 3 port
Present: 2012 Mac mini + PowerColor RX 56 Vega Nano @10Gbps-TB1 +
PowerColor eGFX Mini 180F via TB3->TB2 adapter + macOS Catalina 10.15.4
@username, thanks for sharing! I looked inside the package - they are simply using Apple's new mechanism in Catalina to upgrade firmware. The new mechanism has greatly simplified firmware upgrades. Will analyze the firmware itself at a later date.
@itsage, it cannot at this time. Not investigated much but ThorUtil.efi does not seem to have a way to dump firmware - although it's halfway there (can read). I'd have to spend some time with Tianocore EDK2 library to figure out the right ways to read and dump firmware.