[Solved] [GUIDE] MacBook Pro: solving eGPU error 12 in Windows 10
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?
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.
- 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.
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.
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.
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.
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.
@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?)
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.