CFG unlock con OpenCore y CFGLock.efi

Desbloquear el registro MSR 0xE2 (CFG Unlock), que por defecto viene bloqueado para escritura en muchas placas base modernas, para que macOS pueda escribir en él los estados de gestión de energía de la CPU sin necesidad de utilizar los parches del kernel AppleCpuPmCfgLock y AppleXcpmCfgLock que son imprescindibles para arrancar macOS en los Hackintosh con CFG bloqueado.


Actualización 5/abril/2021 para OpenCore 0.6.7 y 0.6.8

CFGLock.efi ha sido incluida en las herramientas de OpenCore con el nombre ControlMsrE2.efi. Se puede ejecutar de 2 formas:

  • Desde UEFI Shell: buscando la partición EFI de macOS y, dentro de ella, dentro de la carpeta EFI/OC/Tools, escribiendo en el prompt ControlMsrE2.efi seguido del argumento que puede ser lock, unlock o interactive; si se ejecuta sin argumentos, usa el modo de verificación que solo lee el estado actual de CFGLock.
  • Desde el icono ControlMsrE2 en el menú de OpenCore: en este caso la forma de pasarle un argumento es escribirlo previamente en config.plist para que el argumento elegido (lock, unlock o interactive) quede fijado para cada vez que se utiliza la herramienta.


¿Qué es CFG Lock y MSR 0xE2?

CFG Lock es una configuración de la BIOS que permite escribir en un registro específico, en este caso en MSR E2 (MSR = Model Specific Register). Un MSR consiste en uno o varios registros incluidos en bloques de instrucciones utilizadas para llevar a cabo determinadas tareas en una CPU. Los MTR también sirven para controlar el acceso de la CPU a rangos de memoria. Los comandos capaces de leer y escribir en MSR funcionan con privilegios elevados (el sistema operativo, fundamentalmente).

Muchos modelos de placas base vienen de fábrica con la región MSR E2 bloqueada (se puede leer pero no escribir) y bastantes de ellas incluso ocultan esta opción en la interfaz de usuario de la BIOS. En aquellas que sí muestran la opción para bloquear o desbloquear esta variable, suele denominarse CFG Lock. CFG Lock es un bit con 2 valores, 0x1 o 0x0. Cuando es 0x1, macOS no puede escribir en esta región y son necesarios parches para el kernel.

macOS quiere escribir en este registro, tanto AppleIntelPowerManagement como el Kernel. En él se definen los C-states de la CPU, por eso resulta esencial para macOS. Sin la posibilidad de escribir en MSR 0xE2 se pierde toda o gran parte de la gestión de energía de la CPU y el sistema no arranca.

En Clover se han utilizado 2 parches:

  • KernelPM (para AppleIntelPowerManagement.kext)
  • KernelXCPM (para el kernel).

En OpenCore se han utilizado otros 2:

  • AppleCpuPmCfgLock (para AppleIntelPowerManagement.kext)
  • AppleXcpmCfgLock (para el kernel).

Estos parches solucionan el problema pero el registro sigue siendo de sólo lectura. Para garantizar una gestión nativa de la energía de la CPU, hay que poner el bit CFG Lock a 0x0. Para conseguirlo hay que modificar el firmware para admitir la escritura en MSR E2. Este método es preferido al de los parches de Clover y OC, genera mayor estabilidad del sistema y la gestión de energía de la CPU se asemeja más a la de un Mac real. Los métodos que se proponen habitualmente para esta tarea resultan demasiado complejos para la mayoría de usuarios que no tengan un nivel elevado de conocimientos, necesitando herramientas especializadas e incluso Grub modificado.

A continuación comento un método alternativo bastante más sencillo y que, al menos en mi caso, parece haber tenido éxito. Como cualquiera de los métodos que modifican este bit, tiene el riesgo de no funcionar o incluso dañar la BIOS por lo que si lo pruebas es bajo tu entera responsabilidad.

CFGLock.efi

El usuario Brumbaer tiene una herramienta llamada CFGLock.efi. Es una aplicación EFI, ha de ser instalada en la carpeta Tools de OC (Misc - Tools en config.plist) y de esta forma está disponible en el menú de arranque de OC junto a Reset NVRAM. Conviene acompañarla de otra herramienta incluida en el paquete de OC llamada VerifyMsrE2.efi, al ejecutarla informa del estado actual de CFG Lock (bloqueado / desbloqueado).

Cuando se ejecuta CFGLock.efi, muestra información (variable CFG encontrada, almacén -varstore- en que reside, lectura actual y solicita la intervención del usuario para realizar el cambio de 0x1 a 0x0 o viceversa). Después hay que reiniciar. Con VerifyMsrE2.efi podemos comprobar si el cambio ha tenido éxito.

Ambas aplicaciones EFI pueden ejecutarse seleccionándolas directamente en el menú de OC pero también es posible, instalando la herramienta OpenShell.efi, arrancar este shell y ejecutarlas desde ahí. Para manejo de OpenShell.efi hay disponible información en OC y en otros sitios.

Resultado después de CFGLock.efi

Yo he probado CFGLock.efi y aparentemente ha funcionado bien:

  • macOS arranca y funciona bien con los parches AppleCpuPmCfgLock y AppleXcpmCfgLock de OC deshabilitados.
  • VerifyMsrE2.efi informa "This firmware has UNLOCKED MSR 0XE2 register!"
  • Hackintool en Utilities - Get AppleIntelInfo muestra este texto:
AppleIntelInfo.kext v3.0 Copyright © 2012-2017 Pike R. Alpha.
IA32_MISC_ENABLES................(0x1A0) : 0x850089
------------------------------------------
 - CFG Lock............................. : 0 (MSR not locked)
  • La gráfica de Intel Power Gadget - Frequency muestra variaciones entre máxima y mínima compatibles con CPUPM.

Nota: la versión actual de Hackintool (3.4.6) no muestra texto después de ejecutar Get AppleIntelInfo. Lo he copiado desde Catalina.

Nota: Gigabyte ha publicado (16/09/2020) una nueva BIOS para mi placa Z390 Aorus Elite, es la versión F10g y la novedad principal, al menos en la interfaz gráfica, es la presencia de una opción nueva para bloquear o desbloquear CFG por lo que esta tarea es mucho más sencilla a partir de ahora.

6 respuestas a «CFG unlock con OpenCore y CFGLock.efi»

  1. Hola Pol, mi comentario es más que nada agradecerte todos los artículos que tienes en español.

    Llevo más de 8-9 años haciendo hackintosh y con tus artículos he comprendido mejor conceptos que no conocía mucho.
    Donde más dificultad encuentro y bugs es en los X299. No hay una sola placa y bios que haya encontrado, que no produzca bugs.
    Saludos y gracias por todas las explicaciones!

    1. Muchas gracias! Las placas x299 no son las ideales para macOS en parte por el chip y en parte por la CPU pero hay muchos usuarios que las tienen en marcha, tienes hilos importantes sobre ello en tonymacx86 y otros sitios. Saludos!

    1. En Catalina y Big Sur es recomendable tener CFG Unlock (o CFG Lock disable) si la BIOS tiene esa opción. El motivo está explicado en el artículo. Si está desbloqueado (unlock) macOS puede escribir directamente en ese registro de memoria y eso es lo que quiere hacer para tener adecuada gestión de energía de la CPU. Si está bloqueado (lock) hay que recurrir a los quirks AppleCpuPmCfgLock y AppleXcpmCfgLock que consiguen un efecto similar imitando la escritura sobre ese registro pero de otra forma. Funciona bien pero la opción de CFG Unlock es mucho más recomendable porque así es como lo hacen los Mac.

  2. Buenas noches, comentas que Get AppleIntelInfo no muestra salida de texto en Hackintool y Big Sur y a mí también me pasa, es un bug? hay que hacer algo para corregirlo?

    1. Parece un bug relacionado con las mayores exigencias de seguridad que Big Sur presenta frente a Catalina y anteriores. Está documentado que en esta versión de Hackintool sucede ese inconveniente si tenemos SIP desactivado pero yo lo he probado con SIP activado y desactivado y, en ambos casos, la salida de texto está en blanco. Supongo que en la siguiente versión se corregirá o se añadirá un diálogo que avise que es necesario SIP Disabled.

Deja una respuesta

(La dirección de email no es necesaria)