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.