The issue

One day, my grandma came to me with a macbook pro retina from 2012 and said, “When I turn it on, the display remains completly black. But If I hold the power button until it shuts down, and then I turn it on again, it works. They said the GPU is broken and it will cost 800 bucks to fix. It’s not worth it. I’ll buy a new MB instead. I’ll give you the old MBP and If you can fix it, it’s yours.” Challenge accepted.

Diagnosis

First of all I took a look at the symptoms. It didn’t make sense. If the GPU was the problem, it shouldn’t be able to output any image, ever. I first thought that the problem was caused by macOS. So I updated macOS to the newest version that was avalible. Guess what? It got worse. It was impossible to get rid of the black screen, even with the trick of forcing it to shut down. Crap.

Then I remembered that the System report showed only the iGPU… what a dumb mistake. I googled the specs of this machine and it does have a dGPU. I ended up being convinced the hard way. The dGPU was broken. However, I wasn’t completly wrong, since macOS was trying to use a “phantom” dGPU instead of the iGPU. So I started looking for some way to permanently disable the dGPU.

Temporal fix

I found this post, where the poster changed an EFI variable, which is in the NVRAM, to disable the dGPU. That is possible using the single user mode, or booting into an Arch Linux LiveUSB. But there was a problem, I wasn’t able to get into the single user mode, nor boot into Arch, because all I had was a black screen. Then I had an idea. Since the bootloader looks for all the bootable devices, and will follow a pre-established order to decide where to boot into, I could remove the internal SSD in order to force the bootloader to boot into the LiveUSB. After doing that, I typed (with the screen still black):

> speaker-test

Then I heard a Beeeeep. It worked!

Next, I got it’s IP address from the router’s network map, and used ssh to be able to see what I type. I put the SSD back, re-scanned all the disks, mounted the macOS partition, and I was ready to go! Finally, I ran the commands shown in the post, rebooted, and the screen was working again!

However, I didn’t even thought about actually trying to fix the GPU, until much later, when I happened to find this video from Louis Rossmann.

Final fix

So I reset the NVRAM and the screen was black again… as expected. I downloaded the schematics, disassembled the laptop, turned it on, and began to measure some voltages with my polymeter. When I checked the voltage going to the screen I got 0 volts. Huh, no wonder why it wasn’t working. After, I measured the vcore (the voltage that is supplied to the dGPU), and I got 0 volts too! U8900 is the chip that manages these voltages, a.k.a. the power supply, wich apparently has cracked welds. It’s almost literally falling off the board. Why? Because that’s what Apple does! So with a bit of help I reinforced the welds, reassembled everything, and booted again. And wow, it worked!

Right now im writing this from the MBP using neovim! I’m really happy!