Published: 2019-10-01 02:12 |
Category: Technology | Tags: boot loop, gpu, how to, macbook, reset, steps
I have an aging Macbook Pro. It's older than my children and starting to show it's age. Before I remove Mac OS and replace it with Linux, I'm trying to squeak a couple more years out of her.
Insert comment about planned sunsets and hardware longevity.
Unfortunately, my model is one where the AMD GPU was poorly built and designed and will eventually fail. Luckily, the Mac has two GPUs on board and you can disable the failing AMD chip by default and run on the Intel chip also included. This is fine for me because I'm not doing any heavy lifting with that computer anymore.
There's already a site detailing the steps below, but as with all things on the Internet, I'm creating my own backup in case that site goes down.
Boot into single user mode with:
Command + S after the first boot chime.
mount root partition writeable
/sbin/mount -uw /
make a kext-backup directory
mkdir -p /System/Library/Extensions-off
only move ONE offending kext out of the way:
mv /System/Library/Extensions/AMDRadeonX3000.kext /System/Library/Extensions-off/
let the system update its kextcache:
touch /System/Library/Extensions/
sudo reboot
The system doesn't know how to power-management the failed AMD-chip. For that you have to either manaully load the kext after boot by:
sudo kextload /System/Library/Extensions-off/AMDRadeonX3000.kext
Automate this with the following LoginHook:
sudo mkdir -p /Library/LoginHook sudo nano /Library/LoginHook/LoadX3000.sh
with the following content:
#!/bin/bash kextload /System/Library/Extensions-off/AMDRadeonX3000.kext exit 0
then make it executable and active:
sudo chmod a+x /Library/LoginHook/LoadX3000.sh sudo defaults write com.apple.loginwindow LoginHook /Library/LoginHook/LoadX3000.sh
In the Terminal (or in single-user mode if you can't boot to the desktop in Safe or Recovery modes)
sudo nano /force-iGPU-boot.sh
Enter the following:
#/bin/sh sudo nvram boot-args="-v" sudo nvram fa4ce28d-b62f-4c99-9cc3-6815686e30f9:gpu-power-prefs=%01%00%00%00 exit 0
Now make that executable:
sudo chmod a+x /force-iGPU-boot.sh
The boot loop (or a boot hang) can be solved with a PRAM reset (Opt + Cmd + P + R, wait for a double chime), but this wipes the GPU modifications from memory. If you can't boot to the desktop, boot to single user mode:
<Cmd>+<s> after the first chime
And after mounting your boot-volume read-write to execute just:
sh /force-iGPU-boot.sh
This will reset the GPU settings to ignore the failing AMD chip. Reboot with sudo reboot in the command line.
Featured image is Spiral stair (21st century) by alasdair massie is licensed under CC BY-NC-SA