Intel UHD Graphics 630 (9ª gen.) en macOS

Utilizar la tarjeta gráfica integrada Intel UHD Graphics 630 Coffee Lake R (i7-9700) en headless mode (modo sin cable al monitor) para ser utilizada por macOS Catalina, Big Sur y Monterey en tareas de codificación de vídeo, o utilizarla como tarjeta principal que lleva la imagen al monitor.

Nota: este artículo refiere a OpenCore como gestor de arranque. Siguiendo estas instrucciones es posible hacerlo también con Clover.

En los Mac con tarjeta gráfica integrada (iGPU) y otra dedicada (dGPU) el sistema utiliza la integrada para codificación y descodificación de vídeo. Al construir un Hackintosh con ambos tipos de GPU podemos encontrarnos con que, aunque la dGPU sea mucho más potente que la iGPU, si esta no está bien instalada y reconocida por el sistema, falla la codificación de vídeo. Cuando esto sucede pero no queremos tener la iGPU como tarjeta primaria hay que configurarla en headless mode (se llama así cuando está activa pero sin cable hacia monitor) para que sea la dGPU la que muestre la imagen pero la integrada esté disponible para codificar/descodificar vídeo.

La instalación de la iGPU depende de 2 factores:

  • placa base porque cada fabricante coloca 1, 2 o 3 puerto/s HDMI en el panel trasero
  • generación del procesador Intel, diferentes generaciones de procesador llevan diferentes modelos de iGPU.

Mi PC tiene placa Z390 Aorus Elite con procesador de 9ª generación (Coffee Lake Refresh, se configura como Coffee Lake) con Intel UHD Graphics 630 que está en la ruta PciRoot(0x0)/Pci(0x2,0x0) y su Plattorm ID es 3E9B0007. La dGPU es Radeon RX 580. En esta placa solamente hay un conector para la iGPU, es de tipo HDMI v1.4 y se corresponde con el índice 3 en la lista teórica de 3 conectores como máximo que puede llevar este modelo de iGPU:

  • Index 1, BusID 0x00, Type HDMI (el tipo no importa en este puerto)
  • Index 2, BusID 0x00, Type HDMI (el tipo no importa en este puerto)
  • Index 3, BusID 0x04, Type HDMI (este es el puerto activo, el único existente en esta placa).

Esto tiene importancia al usar la iGPU como tarjeta primaria o única pero no al usarla en headless mode.

iGPU en headless mode

  • La iGPU y la dGPU han de estar habilitadas en BIOS con la dGPU como primaria
  • No hay cable entre el puerto de la iGPU y cualquier tipo de monitor
  • Lilu y WhatEverGreen están bien instaladas
  • modelo SMBIOS de iMac19,1
  • Hay que añadir unas propiedades en la sección DeviceProperties de OC:
			<key>PciRoot(0x0)/Pci(0x2,0x0)</key>
			<dict>
				<key>AAPL,ig-platform-id</key>
				<data>AwCRPg==</data>
				<key>device-id</key>
				<data>mz4AAA==</data>
				<key>enable-metal</key>
				<data>AQAAAA==</data>
			</dict>

Este código lleva los valores data en Base64, en los editores de archivos PLIST pueden ser vistos como valores hexadecimales, por ejemplo AwCRPg== en Base64 equivale a 0300913E en hexadecimal.

Con estos cambios puedo arrancar desde la dGPU con la iGPU bien reconocida por macOS. Para comprobar si la función VDA Decoder está activada utiliza Hackintool (Fully Suported o Failed en la primera pestaña System).

Notas:

  • AAPL,ig-platform-id=0300913E es imprescindible para detectar la iGPU como Coffee Lake
  • device-id=9B3E000 para que se muestre como Intel UHD Graphics 630 en vez de Kabylake Unknown
  • enable-metal=01 para habilitar Metal 3 en Ventura.

iGPU como tarjeta principal

También se puede configurar esta tarjeta para ser la principal de macOS de manera que emite señal al monitor y también codifica vídeo. Esto es lo que hay que hacer:

  • Habilitarla en la placa como principal: Initial Display Output IGFX en lugar de PCIe 1 Slot (este sería el paso final).
  • Lilu y WhatEverGreen bien instaladas
  • SMBIOS de iMac19,1
  • Añadir en config.plist: DeviceProperties el código siguiente (BwCbPg== equivale a 07009B3E en hexadecimal):
			<key>PciRoot(0x0)/Pci(0x2,0x0)</key>
			<dict>
				<key>AAPL,ig-platform-id</key>
				<data>BwCbPg==</data>
				<key>device-id</key>
				<data>mz4AAA==</data>
				<key>device_type</key>
				<string>VGA compatible controller</string>
				<key>enable-hdmi20</key>
				<data>AQAAAA==</data>
				<key>enable-metal</key>
				<data>AQAAAA==</data>
				<key>framebuffer-con0-busid</key>
				<data>AAAAAA==</data>
				<key>framebuffer-con0-enable</key>
				<data>AQAAAA==</data>
				<key>framebuffer-con0-pipe</key>
				<data>EgAAAA==</data>
				<key>framebuffer-con1-busid</key>
				<data>AAAAAA==</data>
				<key>framebuffer-con1-enable</key>
				<data>AQAAAA==</data>
				<key>framebuffer-con1-pipe</key>
				<data>EgAAAA==</data>
				<key>framebuffer-con2-busid</key>
				<data>BAAAAA==</data>
				<key>framebuffer-con2-enable</key>
				<data>AQAAAA==</data>
				<key>framebuffer-con2-pipe</key>
				<data>EgAAAA==</data>
				<key>framebuffer-con2-type</key>
				<data>AAgAAA==</data>
				<key>framebuffer-patch-enable</key>
				<data>AQAAAA==</data>
				<key>framebuffer-stolenmem</key>
				<data>AAAwAQ==</data>
				<key>hda-gfx</key>
				<string>onboard-1</string>
				<key>force-online</key>
				<data>AQAAAA==</data>
			</dict>

Nota: force-online=01 es imprescindible, fuerza la activación de todos los conectores de la iGPU.

Nota acerca de igfxfw y rps-control

Muchas iGPU Coffee Lake (8ª y 9ª gen.) funcionan bien sin cargar el firmware Apple GUC o habilitar RPS Control. Pero hay usuarios que tienen problemas gráficos como frecuencia máxima inferior a la esperada, frecuencia fija sin variaciones, fallos de la imagen en pantalla, etc. En estos casos se puede probar con 2 propiedades disponibles:

  • Apple GUC (desactivado por defecto): puede ser activado por la propiedad igfxfw (tipo Data, valor 02) o por el argumento de arranque igfxfw=2. Fuerza la carga del firmare Apple Graphics Unit Control (GUC), acelerador de gráficos que utiliza Apple firmware scheduler. Puede mejorar Intel Quick Sync Video y el rendimiento de la iGPU. Requiere chipsets que soporten Intel Management Engine v12 o superior (H310, C246, B360, H370, Q370, Z390, Z490, etc.). Tiene fallos de diseño y no se recomienda su uso de forma general. Si se activa, hay que comprobar si el comportamiento de la iGPU mejora realmente.
  • RPS Control (desactivado por defecto): puede ser activado por la propiedad rps-control (Tipo Data, valor 01) o por el argumento de arranque igfxrpsc=2. Habilita el parche RPS Control (acelerador de gráficos que utiliza host preemptive scheduler). Mejora el rendimiento de la iGPU en sistemas Kaby Lake o superiores junto a chipsets que no soportan Intel Management Engine v12 (Z370 y otros). La propiedad rps-control estuvo habilitada en WhateverGreen hasta macOS 10.15.6, en esta versión mostró problemas serios y, desde entonces, WhateverGreen la lleva deshabilitada por defecto.

Recomendaciones:

  • Si el comportamiento y el consumo energético de la iGPU son normales >> no es necesario recurrir a ninguno de estos 2 ajustes
  • Ambos ajustes nunca deben ser aplicados a la vez; igfxfw tiene precedencia sobre rps-control cuando ambos están activados
  • Las placas base que soportan Intel ME 12 o superior pueden probar igfxfw
  • Las placas con chipsets más antiguos pueden probar rps-control
  • Algún miembro del equipo de OpenCore ha manifestado su preferencia por rps-control desde Big Sur por los fallos que parecen existir en Apple GUC.

Nota acerca de Kernel Panic al salir del reposo

Si tienes KP o pantalla negra al salir del reposo hay que reemplazar la propiedad hda-gfx por No-hda-gfx (data) con el valor 0000000000000000, con ello suelen arreglarse los fallos al salir del reposo pero se pierde el audio por HDMI.

<key>No-hda-gfx</key>
<data>AAAAAAAAAAA=</data>

Deja un comentario