Z-Car

2011 MacBook Pro GPU Failure – A software fix to disable GPU

Last year I repurposed a 2011 Macbook Pro 15″ as my home media server.  This laptop had been my main machine for a couple years until I upgraded in 2015.  Early in its life, I had used gfxCardStatus to disable the discrete AMD graphics card.  I mainly did this because I did not need the performance, and it definitely affected battery life negatively.  Because of this, I never was aware of the issue that thousands of other MacBook Pro owners experienced, a failing GPU causes the machine to either not work at all, have odd display effects, or reboot when video modes are switched.

About a year after using this machine as my main media server, it started to randomly reboot.  I could not find anything that was causing it, it would just be running fine, and then reboot.  I did notice that if I started up the machine, but did not login to a user account, it would stay running for quite awhile.  After some online research, I soon found out about all the issues that have plagued this machine.  The AMD GPU seemed to be the most likely culprit.  After finally having the machine stay running long enough for me to reinstall gfxCardStatus, I determined that I could immediately crash the system just by switching graphics modes.  Success, I was finally able to confirm that the GPU was failing.

Because I do not have any application that requires the GPU, I realized if I could somehow disable it, I could be back in business.  After extensive searching, I found lots of partial solutions, many required booting with Linux, putting the logic board in an oven, or trying to cut power traces on the motherboard.  After lots of reading, I finally was able to come up with a solution that worked, one that did not require opening up the laptop, or installing Linux.

My machine is a basic system running High Sierra, version 10.13.  I have confirmed that this works, although I did not try with previous versions.  If you have a highly modified system with lots of custom kexts, it may not work.   This modification will force the laptop to not boot into discrete graphics (dGPU) but directly into integrated graphics (iGPU).  While you will now be able to use your system you will lose the ability to use an external display.  Thunderbolt data and video connections should continue to work as normal.   It also assumes that all kexts are still in their default location /System/Library/Extensions, all AMD-kexts remain except one which is required to be moved.

Let’s get started!

Power on your laptop while holding <Cmd>+<r>+<s>, this will get you into Recovery/Single-User mode.  If your machine will not boot up into this mode, you can try putting it into a freezer for 10-15 min beforehand.  If you can keep the machine cool, it should let you boot to a command prompt.

The first step is to disable SIP.  This is done by entering : csrutil disable 

This is a critical step, as the following commands will not run unless you disable the default SIP protection.  You can leave this off permanently, or re-enable after you complete the whole process.  At this point, reboot the laptop by entering : reboot

This time hold down <Cmd>+<s> to boot into single-user mode.  We will then issue commands to disable the AMD GPU on boot by writing specific values into the NVRAM.  

Enter : nvram fa4ce28d-b62f-4c99-9cc3-6815686e30f9:gpu-power-prefs=%01%00%00%00

Enter : nvram boot-args=”-v”

This will turn on verbose mode when booting up.

One again : reboot

Hold down  <Cmd>+<s>  on boot

Next we will want to move one AMD kext so that it is not loaded on initial boot.  We will just move it, because after the machine boots up and you login, we will want to reload it.  This will keep the GPU disabled, but also will remove power from it so that it keeps your system cooler.

Type the following :

mount root partition writeable
/sbin/mount -uw / 
mkdir -p /System/Library/Extensions-bkup 
mv /System/Library/Extensions/AMDRadeonX3000.kext /System/Library/Extensions-bkup/ 
touch /System/Library/Extensions/ 
mkdir -p /Library/LoginHook
nano /Library/LoginHook/LoadAMD.sh

In nano, add the following text and hit control-X to save

#!/bin/bash
kextload /System/Library/Extensions-off/AMDRadeonX3000.kext
exit 0

You should have a saved file called LoadAMD.sh at this point.  Now type : 

chmod a+x /Library/LoginHook/LoadAMD.sh
defaults write com.apple.loginwindow LoginHook /Library/LoginHook/LoadAMD.sh 
reboot

This time, let the machine boot up normally

Reboot normally and your machine should work normally, however you will have an accelerated iGPU display.  This process will most likely need to be repeated when you do any system upgrade.  The NVRAM setting should stay, however you most likely will need to move the AMDRadeonX3000.kext file again.  Just make sure that if a new version is used, you save each.  

Hopefully this will allow your machine is provide several more years of service.  Leave me a message if you have any questions, and/or you will successful.

Leave a Reply and Let me know what you think...