The Boot Loop Returneth

The Boot Loop Returneth thumbnail

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/

wait for the kextcache process to finish
then

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

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.