- 2016 15" Macbook Pro + Win10 (itsage) - automated-eGPU.EFI + large memory DSDT override (dsdt.aml)
Do not that 2017 Macbook Pros do not require the large memory DSDT override as their firmware already contains it.
- mid-2017 15″ MacBook Pro + Win10 (jzfgs) - reallocate bridges to 'large memory' method
- mid-2017 13″ MacBook Pro + Win10 (itsage)
- late-2016 15″ MacBook Pro + Win10 (itsage) - apple_set_os.efi + gpu-switch + disable bridges method
- late-2013 15" Macbook Pro GT750M + Win10 (matthieuv)
1. Hotplug your eGPU after bootup to delay Apple firmware initialization of the eGPU
- hold the OPTION key to halt OS, hotplug the eGPU, continue OS loading
- use easyBCD to add a Windows bootmenu delay. Bootup system, see the Windows bootmenu, hotplug the eGPU, continue loading Windows.
- see further ways to accomplish this in https://egpu.io/forums/mac-setup/mbp-egpu-detection-issues/#post-23
3. Disable Windows fast startup I combine the apple_set_os.efi flashdrive boot with the fast startup disabled and everything worked all of the sudden. No more code 12, both monitors are running, and I can play games at higher than single digit frame rates on my 2015 15" Iris Pro MBP.
4. 2013+ 15" MBP (GT750M/M370x/RP4xx) - disable the dGPU hosting root x16 PCIe port if using apple_set_os.efi + gpu-switch [from ryokun6 ]
5. 2016 13" MBP - Disable port #10 - 9D19, as shown below. [from haruhiku]
6. 2016 MBP: Disable and re-enable the Thunderbolt PCIe bridge hosting the iSight Camera utilising a large PCIe aperature
Go to Device Manager -> View -> Device by Connection
Find the "iSight Camera". Disable the PCI Root Bridge above it.
Find your NVidia eGPU. Disable the PCI Root Bridge above it.
Wait for the Windows Error sound
Go to the same PCI Root Bridge above your NVidia. Click "Enable"
Reboot your system to see error 12 gone.
7. Have windows reallocate your Thunderbolt PCIe bridges
A Windows reinstall being one way of doing this. The other is to:
Go to Device Manager -> View Devices By Connection. Find your eGPU then disable the PCIe bridges above it one at a time like shown below including the (in this case) Root port #5. . Then re-enable them. The idea is to force reallocation by Windows. A variation of this is to uninstall the top level PCI Bridge/Port so as to have Windows re-pnp the system upon reboot.
- Macbook Pro 17-inch, late-2011 with HD6770M dGPU
- MacBook Pro 15-inch, mid 2012–2015 (GT650M, Iris Pro and GT750M models excluding M370X model)
- MacBook Pro 13-inch, early 2011–2014 (2nd-4th gen i-core)
- MacBook Air 11-inch or 13-inch, mid 2012–2014 (3rd-4th gen i-core)
- Mac Mini late-2014
- iMac 27-in 2011 with HD6970M dGPU
10. Set the VGA Enable bit on the hosting PCIe bridge using rEFInd. @DANgerous25 covers this in the followup derivative post. [original rEFIt script removed due to rEFIt's discontinuance but has been integrated by @DANgerous25].
eGPU Setup 1.35 • eGPU Port Bandwidth Reference Table
2015 15" Dell Precision 7510 (Q M1000M) [6th,4C,H] + GTX 1080 Ti @32Gbps-M2 (ADT-Link R43SG) + Win10 1803 // compares M.2 vs TB3 performance inc unoptimized H-CPU BIOS [build link]
I have tried all the listed approaches to getting an external GPU to work. I sold my 15in touchbar MBP in the hopes that the 13in version would work (since I wouldn't have to grapple with the dedicated GPU). I have no port #10 to disable, there are no guides for how to do the DSDT approach on a MBP Touchbar, and even the automate-gpu script in macOS didn't seem to work correctly with my RX580 (it was refreshing at like 1 frame per second).
I have connected another USB-C computer (HP Spectre X360) to verify that my card and external GPU enclosure are working (they are).
FWIW - I am using the Apple External GPU SDK setup (Sonnet external enclosure).
Why are other people (like in this video: ) not getting the error 12 issue?
Any ideas?
To do: Create my signature with system and expected eGPU configuration information to give context to my posts. I have no builds.
.Using rEFInd to set the VGA Enable bit
After a few days of intensive research, trial and error, I've managed to get rEFInd working with with a variation of the script posted by nando4. Caveat: I am on the road right now and don't have my eGPU with me, so I can't tell if the solution actually works. I'll edit the post when I can.
In any case the rEFInd setup may well be of use to some people in a similar boat to me. Attached is a screen of my boot loader screen. From left to right, top row: Win 10, Win 10 + eGPU (using variant of nando4's solution), MacOS Sierra 10.12.3. Bottom row: MacOS recovery mode, EFI Shell, power off, restart, exit rEFInd.
Rough procedure to achieve this:
- Download and install rEFInd. (Suggested download | documentation)
- Download and install an EFI Shell. (Suggested download | documentation*)
- Note that to install this, you have to copy the Shell_Full.efi file in the download page to your EFI/tools directory, however you must rename it to shell.efi (lowercase). I believe that rEFInd expects the exact filename shell.efi no matter which shell you use. If you use the suggested rEFInd download then there's a handy script in the zip which you can execute with sudo <your_download_path>/mountesp to mount to the EFI area so that you can copy the shell binary and create/edit the script that is coming up later on.
- You have to enable the EFI shell in your refind.conf by ensuring that you have showtools shell in there somewhere.
- * = The documentation link doesn't match the suggested download shell; if you want to use the matching shell then here is the download. The commands look the same but some of the syntax is different (and crucially the mm command is different). However this document gave me vital clues as to how to do anything with the shell. Top tip: the -b option shows output page by page, so try help -b and your troubles will diminish.
- Create a script in the EFI/tools directory, which I've named win_plus_gpu.nsh (the name doesn't matter but you need to refer to it later). Note that I am using a late 2016 13" MBP with Touchbar hence the uncommented line.
echo -off echo "Setting VGA Enable register on PCI bridge hosting eGPU . . ." ######################################################################## # Remove the hash on the line after your system to include that parameter ######################################################################## # 2016 13" MBP setting # 2013 13" MBP # 2013 11/13" MBA mm 001C043E 1 ;PCI :8 # 2016 15" MBP setting # mm 0001023E 1 ;PCI :8 # 2013-15" MBP setting # mm 0001013E 1 ;PCI :8 echo "Pausing for 10s" stall 10000000 echo "Booting Windows" echo "Executing command = fs0:\EFI\Boot\bootx64.efi" fs0:\EFI\BOOT\bootx64.efi
- If like me you are using a simple MacOS Sierra install with a single Windows 10 in Bootcamp, then adding the following lines to your refind.conf will give you the boot option that will launch your script via the EFI shell. If you're not using a rEFInd theme then you can omit the icon line.
menuentry "Win 10 + GPU" { icon EFI\refind\themes\rEFInd-minimal-master\icons\os_win8_eGPU.png ostype "Windows" loader \EFI\tools\shell.efi options "fs0:\EFI\tools\win_plus_gpu.nsh" }
That's it! Some final notes/things to be aware of:
- In case you are trying to reproduce the look of my boot loader, I've installed the rEFInd-minimal theme, and I've used a simple image editing program to essentially invert the colours in the background and the icons to make everything white on black. For Windows + eGPU I've resized the Windows icon that comes with the rEFInd-minimal theme, and added one of the other icons (with some colour editing) to the Windows logo for the eGPU one. I've removed the badges and hints by editing the refind.conf (or theme.conf if using a theme) with the line hideui badges,hints, and set the icon style to large by including small_icon_size 96 and big_icon_size 256 as separate rows in the refind.conf (although they still come up small on my MBP due to screen res).
- I've had a lot of trouble doing anything useful with the EFI shell because my MBP+TB doesn't have working function keys whilst in the shell. So I can't do anything with the edit command (which is a text editor). This means that I have to edit files by mounting the EFI in MacOS. No big drama, but a bit annoying. If anyone has any clue how to enable function keys at the EFI stage, or if there is another way to use the edit command in the EFI shell without the use of function keys, then please let me know.
- For the same function key reason above I can't do as much as I'd like with the rEFInd boot loader at the loader screen. Hitting shift+[=] (for +) gives some options, but not sure if they'll all the options. F keys and insert (neither of which I have) also do something, not sure what though.
- The "mm" command in the EFI script isn't confirmed to work for me [yet]. Syntactically it is accepted by the shell, but I don't have a eGPU connected right now to see if it does anything. I also have no clue what it does... maybe someone can chime in here!
- I have tried to change the screen resolution in rEFInd so that everything isn't so small, but haven't had much luck. If anyone has found a working set of resolutions for a 13" MBP then please let me know.
Do let me know if anyone has questions on the above.
Dan
Hi @nando4/anyone, finally I'm able to test the startup.nsh script. I don't get any errors, but it has no effect. My observations:
- If I try to boot Windows with the eGPU plugged in, Windows won't boot. The Windows logo flickers a couple of times and just hangs.
- If I boot into Windows with no eGPU plugged in, then plug it in once I'm logged in, I get error 12. My device manager is pretty much identical to yours except my GPU is the Intel Iris Graphics 550.
- Disabling and enabling the switch ports doesn't seem to do the job.
- I don't have an "iSight camera" item anywhere in the tree that I can see. I'm using a late 13" 2016 MBP+TB.
So my burning question is now this: nando4's script, and my rEFInd replica don't seem to help. Can someone help me to understand what this mm command is, what it is supposed to do in this context? If I can understand it then maybe I can determine if the values are somehow different to what's required for my setup.
Thank you!
So many people are missing the most important part:
It should be sticky. No need to disable anything, no DSDT override, it resolves the error code 12. Just use the Windows 10 version 10.0.10586.
automate-eGPU EFI ● apple_set_os.efi
Mid 2015 15-inch MacBook Pro eGPU Master Thread
2018 13" MacBook Pro [8th,4C,U] + Radeon VII @ 32Gbps-TB3 (ASUS XG Station Pro) + Win10 1809 [build link]
DANgerous25, pls test @goalque's suggestion above and advise if it does resolve your error 12. If not, then I'll continue investigating some other EFI Bootloaders.
@goalque, I've quoted your suggestion as the #1 sticky item in the opening post.
eGPU Setup 1.35 • eGPU Port Bandwidth Reference Table
2015 15" Dell Precision 7510 (Q M1000M) [6th,4C,H] + GTX 1080 Ti @32Gbps-M2 (ADT-Link R43SG) + Win10 1803 // compares M.2 vs TB3 performance inc unoptimized H-CPU BIOS [build link]
@goalque - thank you for the suggestion and link. Here is the initial feedback as I was able to try it quickly owing to my rEFInd setup:
- Following the suggestion in goalque's post I'm now able to start Windows with the eGPU plugged in. That's one problem solved, yippee!
- I'm now getting error 12 in two of the four "PCI Express Downstream Switch Port" nodes, and the GTX 980 Ti no longer appears.
- If I disable the first one, then scan for hardware changes, the GTX 980 Ti shows up in the list where it normally would but still shows error 12.
- Uninstalled Windows nVidia drivers, rebooted, re-installed nVidia drivers from nVidia website. No change.
- I've been doing all of the above whilst running my win_plus_egpu.nsh script, which has the magical line mm 001C043E 1 ;PCI :8 . I just tried running the script (again following goalque's apple_set_os.efi trick)... boom, this time I see my external monitor flash, and then my MPB+TB screen has a blue screen of death which is a blue background with some white fuzzy sprinkles. Then auto-reboot. That happens if I boot with the eGPU plugged in, or if plug it in after booting. So that mm command was doing something...
The obvious gap I see at the moment is that my Win 10 build is different; goalque says use 10.0.10586. When I use winver it says "Version 1607 (OS Build 14393.693)". I'm guessing this is not the same. I'm not averse to re-installing if I can find the right version.
I will play with it a bit further and edit the post if anything new happens.
(Edit: Added bullet point 4 & 5 above. Anyone know if my mm command is at fault and what the correct syntax is?)
Thanks,
I've successfully used this method with the non-touch 2016 13" MBP (both TB3 and TB2 enclosures).
For the dGPU equipped Macs I recommend combining gpu-switch integrated mode prior to executing apple_set_os.efi but I don't know if it will work.
Uninstall all the default Nvidia Windows drivers, and keep the eGPU monitor plugged in during the startup, then install the latest from Nvidia's web site. AMD cards are easier to get working with Windows 10 built-in drivers.
automate-eGPU EFI ● apple_set_os.efi
Mid 2015 15-inch MacBook Pro eGPU Master Thread
2018 13" MacBook Pro [8th,4C,U] + Radeon VII @ 32Gbps-TB3 (ASUS XG Station Pro) + Win10 1809 [build link]
@goalque so if I install the windows 10.0.10586 on my non-touchbar MBP 13" 2016 the eGPU will work without DSDT override (error 12)??
Thanks!!!
Macbook Pro 13" 2016 (Two Thunderbolt Port)
Akitio Thunder3 (Default)
ZOTAC NVIDIA GTX 1050TI 4GB
eGPU working with macOS High Sierra and Windows 10 Bootcamp.
@Raphax: I haven't tried any Pascal card yet, only Maxwell from Nvidia.
automate-eGPU EFI ● apple_set_os.efi
Mid 2015 15-inch MacBook Pro eGPU Master Thread
2018 13" MacBook Pro [8th,4C,U] + Radeon VII @ 32Gbps-TB3 (ASUS XG Station Pro) + Win10 1809 [build link]