Contents
Tech specs
GPU fault
Intro
The 2011 15" Macbook Pros (Macbook 8,2) were the first Macbook Pros to have a discrete AMD Radeon graphics processor alongside the Intel processor's integrated GPU. Previous models used NVIDIA discrete graphics processors.
Unfortunately, there is a fault with the AMD discrete GPU, that means they fail after a few years. Curiously, Apple's policy, for 5 years after the Macbook Pro 8,2 was released, was to simply to offer free replacements of the faulty AMD GPU with another AMD GPU which would eventually develop the same fault, and after those 5 years provide no support.
Furthering, the EFI firmware, when reset (such as after disassembly), will always default to instructing the OS to use the discrete AMD GPU, regardless of the condition of it.
It would be more ideal if Apple had issued a patch to set the EFI firmware to default to the Intel integrated GPU, such as during the last ever software patch released for this model, but that didn't happen.
However, it is possible to manually set a variable at the EFI chip level, which will cause the operating system to default to the Intel integrated GPU, and then disable the loading of the Linux module used by the AMD GPU.
GPU fault software workaround
To edit the EFI variable to only use the working integrated GPU, you have to boot into a Linux OS that has access to the /sys/ file system, such as from a live USB. Note that when booting the live USB, you will need to edit the linux line of the GRUB boot line, to include nomodeset, so that graphics is rendered in software, by the CPU. Edit the GRUB line during boot, so that it looks similar to this:
linux /vmlinuz-6.1.0-11-amd64 root=/dev/sda1 ro nomodeset
Note that some full-featured live USB systems that are text-based (e.g. Arch Linux installation ISO) will not require the addition of nomodeset during boot. Note that the Dash/Busybox interface of the Debian installation ISO does not seem to suffice for editing EFI variables.
Once booted into a running Linux OS, enter the following commands:
# chattr -i "/sys/firmware/efi/efivars/gpu-power-prefs-fa4ce28d-b62f-4c99-9cc3-6815686e30f9" # printf "\x07\x00\x00\x00\x01\x00\x00\x00" > /sys/firmware/efi/efivars/gpu-power-prefs-fa4ce28d-b62f-4c99-9cc3-6815686e30f9
To clarify: the \x01 indicates to the OS to use the Intel integrates GPU, and running the same command but with \x00 would instruct the OS to use the AMD discrete GPU.
Note that the file gpu-power-prefs-fa4ce28d-b62f-4c99-9cc3-6815686e30f9 may not yet exist, and will automatically be deleted anytime there is an NVRAM reset (such as during disassembly, or a forceful NVRAM reset by holding keyboard keys at boot).
Linux sets extended attributes (edited with chattr) on the /sys/ interface because some computers (not Macs) do not have any ability to reset all EFI variables to default values, so a wrong edit can brick the computer (again, not Macs).
You can now install Debian. After Debian is installed, on first boot, you again need to block the radeon module from loading, by again editing the GRUB line to include radeon.modeset=0 during boot, like so:
linux /vmlinuz-6.1.0-11-amd64 root=/dev/sda1 ro radeon.modeset=0
Finally, we can permanently adjust the GRUB boot to always include radeon.modeset=0 by opening up /etc/default/grub and editing the following line to include it:
GRUB_CMDLINE_LINUX_DEFAULT="radeon.modeset=0"
Then run the following to update the GRUB bootloader with the new contents of /etc/default/grub:
# grub-install
Now, when booting (without editing GRUB), it should be clear that there is no radeon module in use, only i915 (the Intel integrated GPU module):
$ lsmod | grep radeon $ lsmod | grep i915 i915 3051520 22
All the above instructions were last tested August 2023.
Caveat - external monitors
Unfortunately, the Thunderbolt/Mini-?DisplayPort port, which is used to connect an external monitor, is wired via the discrete AMD GPU. This means that, once it is faulty, this port can no longer be used to connect to an external monitor.
The only solution, to connect a Macbook 8,2 which relies solely on the Intel integrated GPU to an external monitor, is to connect an external USB-based graphics card which a Linux-compatible module is available for, such as USB devices which include ?DisplayLink graphics cards. Brands with USB products that feature ?DisplayLink graphics cards include Dell, ?StarTech, Wavlink, and more. The ?DisplayLink driver, which is closed-source, is packaged as a Debian package, for Ubuntu.
GPU fault hardware workaround
After the software workaround is setup, is possible to physically disconnect the AMD GPU discrete graphics card, by removing 1 resistor.
However, this is not recommended, as, if the EFI variables unintentionally resets (e.g. during disassembly), it is unclear whether it is possible to edit it back to point to the Intel integrated GPU.