El problema

Un día, mi abuela me trajo un macbook pro retina de 2012 y dijo, “Cuando lo enciendo, la pantalla se queda negra. Pero si presiono el botón de apagado hasta que se apague, y entonces lo enciendo de nuevo, funciona. Me dijeron que la GPU está rota y me va a costar 800 euros para arreglarlo. No vale la pena. Mejor voy a comprar un nuevo MB. Te daré el viejo MBP y si puedes arreglarlo, es tuyo.” Reto aceptado.

Diagnóstico

Primero observé los síntomas. No tenía sentido. Si la GPU fuera el problema, nunca debería de poder mostrar alguna imagen. Al principio pensé que el culpable era macOS. Así que actualicé macOS a la última versión disponible. Adivina qué. Empeoró. Era imposible deshacerse de la pantalla negra, incluso con el truco de forzarlo a apagar. Oops.

Entonces recordé que el reporte del sistema tan solo mostraba la iGPU… vaya error más tonto. Googleé las especificaciones de esta máquina y sí que tiene una dGPU. Acabé siendo convencido por las malas. La dGPU estaba rota. Sin embargo, no estaba completamente equivocado, porque macOS estaba intentado usar una dGPU “fantasma” en vez de la iGPU. Así que empecé a buscar alguna forma de desactivar permanentemente la dGPU.

Solución temporal

Encontré esta publicación, donde el que la publicó modificó una variable EFI, que está en la NVRAM, para desactivar la dGPU. Eso es posible usando el modo de usuario único, o arrancando en un LiveUSB con Arch Linux. Pero había un problema: no podía entrar en el modo de usuario único, ni arrancar en Arch, porque todo lo que tenía era una pantalla negra. Entonces tuve una idea: como el cargador de arranque busca todos los dispositivos arrancables, y sigue un orden preestablecido para decidir donde arrancar, podría extraer el SSD interno para forzar al cargador de arranque a arrancar en el LiveUSB. Después de hacer eso, tecleé (con la pantalla todavía negra):

> speaker-test

Entonces escuché Beeeeep. ¡Había funcionado!

Después, conseguí su dirección IP desde el mapa de red del router, y usé ssh para poder ver lo que escribía. Puse el SSD de vuelta, reescaneé todos los discos, monté la partición de macOS, ¡y ya estaba todo preparado! Finalmente, ejecuté los comandos que se muestran en la publicación que mencioné, reinicié, ¡y la pantalla estaba funcionando otra vez!

Sin embargo, ni siquiera pensé en realmente intentar arreglar la GPU, hasta mucho más tarde, cuando encontré este vídeo de Louis Rossmann.

Arreglo final

Así que reseteé la NVRAM y la pantalla estaba negra otra vez… como se esperaba. Descargué las esquemáticas, desensamblé el portátil, lo encendí, y empecé a medir algunos voltages con mi polímetro. Cuando comprobé el voltage que iba hacia la pantalla medí 0 voltios. Huh, no es de extrañar que no funcionase. Después, medí el vcore (el voltage que se le suministra a la dGPU), y también medí 0 voltios. U8900 es el chip que maneja esos voltages, también conocido como la funte de poder, que al parecer tiene las soldaduras agrietadas. Está casi literalmente cayendo de la placa. ¿Por qué? ¡Porque eso es lo que hace Apple! Entonces con un poco de ayuda reforcé las soldaduras, rearmé todo, y lo arranqué otra vez. Y vaya, ¡había funcionado!

Ahora mismo estoy escribiendo esto desde el MBP usando neovim. ¡Estoy muy contento!