Jump to content
Leon

Macbook Pro 2011 - Disable GPU / Fix graphics

Recommended Posts

Hi there,

(this post is a bit of a my research notes - so it might be a long post)

It happens now and then that i come across a Macbook with a dead GPU - so far the best solution is to patch the motherboard - but that itself can be pricey - let alone time costly - also - who wants to repair a 2011 macbook - that said - so lighting struck me - since the machine have 2 graphics cards (an intel and a AMD) - why not just disable the AMD Card ?

In my first test i just removed the kexts.. that worked.. so.. so.. screen artifacts and genereally the machine was running extremely slow - something more was needed - the solution is to disable the GPU in NVRAM.

Solution found here: https://apple.stackexchange.com/questions/166876/macbook-pro-how-to-disable-discrete-gpu-permanently-from-efi/196709?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

 

The key is to: sudo nvram fa4ce28d-b62f-4c99-9cc3-6815686e30f9:gpu-power-prefs=%01%00%00%00

So, to recap - what i did:

1. Removed the AMD kexts.. 
2. Patched NVram

Result: Machine boots into macos and feels quite normal.. HDMI dosent work.. but i can live with that - also, i fear that the NVram might get reset or kexts will zombie back after an update.. so i created 2x scripts.

1. /scripts/gpupatch.sh
2. /Library/LaunchAgents/com.user.loginscript.plist

The combination of both will run gpupatch.sh on each boot, check if AMD drivers exists and remove them - and finally.. patch NVram.. my hope is that if something breaks i can just boot.. and reboot and it should work.

Lets have a look at the files - first gpupatch.sh
------------
 

dt=$(date '+%d/%m/%Y %H:%M:%S');

sudo nvram fa4ce28d-b62f-4c99-9cc3-6815686e30f9:gpu-power-prefs=%01
echo "$dt - Patched GPU" >> /scripts/gpupatch.log

if [ -d "/System/Library/Extensions/AMD10000Controller.kext" ]; then
 sudo rm -Rf /System/Library/Extensions/AMD10000Controller.kext
 echo "$dt - Removed kext AMD10000Controller.kext" >> /scripts/gpupatch.log
fi

if [ -d "/System/Library/Extensions/AMD7000Controller.kext" ]; then
 sudo rm -Rf /System/Library/Extensions/AMD7000Controller.kext
 echo "$dt - Removed kext AMD7000Controller.kext" >> /scripts/gpupatch.log
fi


if [ -d "/System/Library/Extensions/AMD8000Controller.kext" ]; then
 sudo rm -Rf /System/Library/Extensions/AMD8000Controller.kext
 echo "$dt - Removed kext AMD8000Controller.kext" >> /scripts/gpupatch.log
fi


if [ -d "/System/Library/Extensions/AMD9000Controller.kext" ]; then
 sudo rm -Rf /System/Library/Extensions/AMD9000Controller.kext
 echo "$dt - Removed kext AMD9000Controller.kext" >> /scripts/gpupatch.log
fi

if [ -d "/System/Library/Extensions/AMD9500Controller.kext" ]; then
 sudo rm -Rf /System/Library/Extensions/AMD9500Controller.kext
 echo "$dt - Removed kext AMD9500Controller.kext" >> /scripts/gpupatch.log
fi

if [ -d "/System/Library/Extensions/AMDFramebuffer.kext" ]; then
 sudo rm -Rf /System/Library/Extensions/AMDFramebuffer.kext
 echo "$dt - Removed kext AMDFramebuffer.kext" >> /scripts/gpupatch.log
fi


if [ -d "/System/Library/Extensions/AMDMTLBronzeDriver.bundle" ]; then
 sudo rm -Rf /System/Library/Extensions/AMDMTLBronzeDriver.bundle
 echo "$dt - Removed kext AMDMTLBronzeDriver.bundle" >> /scripts/gpupatch.log
fi


if [ -d "/System/Library/Extensions/AMDRadeonVADriver.bundle" ]; then
 sudo rm -Rf /System/Library/Extensions/AMDRadeonVADriver.bundle
 echo "$dt - Removed kext AMDRadeonVADriver.bundle" >> /scripts/gpupatch.log
fi

if [ -d "/System/Library/Extensions/AMDRadeonVADriver2.bundle" ]; then
 sudo rm -Rf /System/Library/Extensions/AMDRadeonVADriver2.bundle
 echo "$dt - Removed kext AMDRadeonVADriver2.bundle" >> /scripts/gpupatch.log
fi


if [ -d "/System/Library/Extensions/AMDRadeonX4000.kext" ]; then
 sudo rm -Rf /System/Library/Extensions/AMDRadeonX4000.kext
 echo "$dt - Removed kext AMDRadeonX4000.kext" >> /scripts/gpupatch.log
fi


if [ -d "/System/Library/Extensions/AMDRadeonX4000GLDriver.bundle" ]; then
 sudo rm -Rf /System/Library/Extensions/AMDRadeonX4000GLDriver.bundle
 echo "$dt - Removed kext AMDRadeonX4000GLDriver.bundle" >> /scripts/gpupatch.log
fi


if [ -d "/System/Library/Extensions/AMDRadeonX4000HWServices.kext" ]; then
 sudo rm -Rf /System/Library/Extensions/AMDRadeonX4000HWServices.kext
 echo "$dt - Removed kext AMDRadeonX4000HWServices.kext" >> /scripts/gpupatch.log
fi

if [ -d "/System/Library/Extensions/AMDRadeonX5000.kext" ]; then
 sudo rm -Rf /System/Library/Extensions/AMDRadeonX5000.kext
 echo "$dt - Removed kext AMDRadeonX5000.kext" >> /scripts/gpupatch.log
fi

if [ -d "/System/Library/Extensions/AMDRadeonX5000GLDriver.bundle" ]; then
 sudo rm -Rf /System/Library/Extensions/AMDRadeonX5000GLDriver.bundle
 echo "$dt - Removed kext AMDRadeonX5000GLDriver.bundle" >> /scripts/gpupatch.log
fi


if [ -d "/System/Library/Extensions/AMDRadeonX5000HWServices.kext" ]; then
 sudo rm -Rf /System/Library/Extensions/AMDRadeonX5000HWServices.kext
 echo "$dt - Removed kext AMDRadeonX5000HWServices.kext" >> /scripts/gpupatch.log
fi


if [ -d "/System/Library/Extensions/AMDRadeonX5000MTLDriver.bundle" ]; then
 sudo rm -Rf /System/Library/Extensions/AMDRadeonX5000MTLDriver.bundle
 echo "$dt - Removed kext AMDRadeonX5000MTLDriver.bundle" >> /scripts/gpupatch.log
fi

if [ -d "/System/Library/Extensions/AMDRadeonX5000Shared.bundle" ]; then
 sudo rm -Rf /System/Library/Extensions/AMDRadeonX5000Shared.bundle
 echo "$dt - Removed kext AMDRadeonX5000Shared.bundle" >> /scripts/gpupatch.log
fi

if [ -d "/System/Library/Extensions/AMDRadeonX6000HWServices.kext" ]; then
 sudo rm -Rf /System/Library/Extensions/AMDRadeonX6000HWServices.kext
 echo "$dt - Removed kext AMDRadeonX6000HWServices.kext" >> /scripts/gpupatch.log
fi


if [ -d "/System/Library/Extensions/AMDShared.bundle" ]; then
 sudo rm -Rf /System/Library/Extensions/AMDShared.bundle
 echo "$dt - Removed kext AMDShared.bundle" >> /scripts/gpupatch.log
fi


if [ -d "/System/Library/Extensions/AMDSupport.kext" ]; then
 sudo rm -Rf /System/Library/Extensions/AMDSupport.kext
 echo "$dt - Removed kext AMDSupport.kext" >> /scripts/gpupatch.log


.. and now com.user.loginscript.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <key>Label</key>
   <string>com.user.loginscript</string>
   <key>ProgramArguments</key>
   <array><string>/scripts/patchgpu.sh</string></array>
   <key>RunAtLoad</key>
   <true/>
</dict>
</plist>



Yes - i could have done the script different and much simplar - but i wanted you to be able to see what files i removed.

Comments welcome.
 


 

  • Thanks 1

Share this post


Link to post
Share on other sites

×