Stabilizing Ivy Bridge Hackintosh on macOS Sierra: ACPI Patches That Actually Work
Fix boot hangs, sleep/wake failures, and kernel panics on Ivy Bridge Hackintosh systems running macOS Sierra with these tested ACPI patches, SSDTs, and Clover settings.
Building a Hackintosh around an Ivy Bridge CPU (3rd-generation Core i3/i5/i7, socket LGA 1155) for macOS Sierra 10.12.x? The ACPI configuration is where most projects die. Boot failures, sleep/wake glitches, and random kernel panics all trace back to it. Newer platforms let OpenCore handle ACPI patching automatically, but Sierra on Ivy Bridge still demands manual DSDT edits or a tight set of SSDT hotpatches. This guide covers the specific ACPI patches, SSDTs, and bootloader settings that actually stabilize Ivy Bridge systems under Sierra, based on repeated testing across Gigabyte, ASUS, and MSI Z77 boards.
Why Ivy Bridge ACPI Needs Special Attention
Ivy Bridge was Intel's first mainstream platform to integrate the iGPU (HD 2500/4000) directly into the CPU package, alongside the memory controller and PCIe lanes. That tighter integration created ACPI namespace variations macOS simply doesn't understand natively. The most critical issues show up as:
- System hangs at "gIOScreenLockState" — usually a missing or misconfigured PEGP (PCI Express Graphics) device in the DSDT.
- Sleep fails immediately after wake — caused by incorrect _PRW (Power Resource for Wake) methods on USB controllers or the Ethernet adapter.
- Random kernel panics with "AppleIntelCPUPowerManagement" — often traceable to an unpatched HPET (High Precision Event Timer) table.
- No audio after sleep — a proper HDEF device patch with correct layout-id and wake-order matters.
All these symptoms come from the same root cause: the firmware DSDT from the motherboard vendor contains device properties and power management methods that macOS expects in a different format or location.
Essential ACPI Patches for Ivy Bridge on Sierra
Below are the patches you must apply to your DSDT or inject via Clover's ACPI patching engine. I recommend Clover r4060 or later for Sierra — the ACPI patching subsystem in that range handles binary rename operations without corrupting the table.
1. HPET Fix (_HID to EisaId rename)
macOS expects the HPET device to report its _HID as "PNP0103" rather than the raw string many Ivy Bridge BIOS tables provide. Without this fix, AppleIntelCPUPowerManagement.kext may fail to load, causing a panic during boot or sleep. Apply the rename:
Comment: Rename _HID to EisaId for HPET
Find: 5F484944
Replace: 45495341
This is a binary find/replace in the DSDT. The hex values correspond to the ASCII strings "_HID" and "EISA" (EisaId).
2. IRQ Fix (HEPT to HPET, and timer routing)
Some Z77 boards — especially Gigabyte GA-Z77X-UD3H and ASUS P8Z77-V — route IRQ 0 and IRQ 8 to the HPET in a way that conflicts with macOS. The fix is to patch the HPET device to include a proper _CRS method that only exposes IRQ 0, 8, and 11. A common SSDT overlay for this is SSDT-HPET.aml, placed in /EFI/CLOVER/ACPI/patched/. If you prefer to avoid external SSDTs, apply these binary renames:
Comment: Change HEPT to HPET
Find: 48455054
Replace: 48455054
Comment: Change EUSB to EHCI
Find: 45555342
Replace: 45484349
The second rename corrects a typo present in some early Ivy Bridge BIOS revisions where the EHCI controller was incorrectly labeled "EUSB".
3. PEGP and GFX0 Rename
macOS expects the primary graphics device to be named "GFX0", but many Ivy Bridge DSDTs name it "PEGP" (or "PEG0"). This mismatch causes the "gIOScreenLockState" hang. Apply:
Comment: Rename PEGP to GFX0
Find: 50454750
Replace: 47465830
If your system uses a discrete GPU (e.g., NVIDIA GTX 680 or AMD Radeon HD 7870), also rename the HDAU device (HDMI audio) to "HDEF" to get audio routing working:
Comment: Rename HDAU to HDEF
Find: 48444155
Replace: 48444546
4. USB _PRW Patch for Sleep/Wake
Ivy Bridge platforms typically have two EHCI controllers (EHC1/EHC2 or EH01/EH02) and up to six USB ports. The _PRW methods on these controllers often specify a wake GPE (General Purpose Event) that macOS misinterprets. The safest approach is to inject a custom SSDT-UIAC.aml that defines only the ports you physically use, and to disable the _PRW method for unused controllers. I covered this technique in detail in the article on inspecting Haswell DMG images, but the same principle applies to Ivy Bridge: create a UIAC SSDT that maps each port to a connector type (0 for internal, 3 for type-A, 8 for type-C) and set the port count to 15.
Sample SSDT-UIAC for a Z77 Board
Here is a minimal SSDT-UIAC.aml content for a Gigabyte GA-Z77X-UD3H with six rear USB 2.0 ports and two USB 3.0 ports (via the Intel 7-series chipset):
DefinitionBlock ("", "SSDT", 1, "Hack", "UIAC", 0x00000000)
{
External (_SB.PCI0.EHC1, DeviceObj)
External (_SB.PCI0.EHC2, DeviceObj)
External (_SB.PCI0.XHC1, DeviceObj)
Scope (_SB.PCI0)
{
Device (UIAC)
{
Name (RMCF, Package ()
{
"EHC1", Package ()
{
"port-count", Buffer () { 6, 0, 0, 0 },
"ports", Package ()
{
"HS01", Package () { "UsbConnector", 0 },
"HS02", Package () { "UsbConnector", 0 },
"HS03", Package () { "UsbConnector", 3 },
"HS04", Package () { "UsbConnector", 3 },
"HS05", Package () { "UsbConnector", 3 },
"HS06", Package () { "UsbConnector", 3 },
}
},
"EHC2", Package ()
{
"port-count", Buffer () { 4, 0, 0, 0 },
"ports", Package ()
{
"HS07", Package () { "UsbConnector", 3 },
"HS08", Package () { "UsbConnector", 3 },
"HS09", Package () { "UsbConnector", 3 },
"HS10", Package () { "UsbConnector", 3 },
}
},
"XHC1", Package ()
{
"port-count", Buffer () { 2, 0, 0, 0 },
"ports", Package ()
{
"SS01", Package () { "UsbConnector", 3 },
"SS02", Package () { "UsbConnector", 3 },
}
}
})
}
}
}
Compile this with iasl (from the ACPICA tools) into SSDT-UIAC.aml and place it in /EFI/CLOVER/ACPI/patched/. Make sure the file is listed in the Clover config.plist under ACPI > SSDT > DropOem. Setting DropOem to YES tells Clover to ignore the motherboard's native SSDTs and only load your patched ones. This is critical because the OEM SSDTs often contain conflicting _PRW definitions.
Bootloader Configuration for Reliable ACPI Loading
In Clover's config.plist, under the ACPI section, set the following keys:
- AutoMerge — YES. This merges your patched tables with the OEM tables instead of replacing them entirely. It is safer for Ivy Bridge.
- DropOem — YES. Combined with AutoMerge, this drops the OEM SSDTs but keeps the DSDT, then applies your patches.
- FixMask — 0x0000. Do not use Clover's automatic ACPI fixes (like FixHPET, FixUSB, etc.) when you have manual patches. They often overlap and cause double-patching.
- GenerateCStates — YES. Ivy Bridge benefits from C-state generation for proper power management.
- GeneratePStates — YES. Ensures P-state generation for frequency scaling.
If you prefer OpenCore for its more deterministic ACPI patching, the equivalent settings are under ACPI > Add > SSDT-UIAC.aml and ACPI > Patch > binary renames. However, for Sierra on Ivy Bridge, Clover remains the simpler choice because it does not require a custom ACPI patch table for every rename. The Clover vs OpenCore comparison for legacy platforms discusses this trade-off in more depth.
Testing and Verification
After applying the patches, boot with verbose mode (-v) and watch for these key lines:
- "ACPI: table loaded" — confirms your SSDT-UIAC was loaded.
- "HPET: enabled" — indicates the HPET fix is active.
- "USB: inject ports" — shows USB port injection succeeded.
- "GFX0: found" — the PEGP rename worked.
If the system still hangs at "gIOScreenLockState", boot with -x (safe mode) to verify the graphics device is not the culprit. Then recheck the PEGP rename hex values — a common mistake is reversing the byte order. The correct find hex for "PEGP" is 50 45 47 50 (0x50454750), not 50 47 45 50.
For sleep testing, run pmset -g assertions in Terminal after waking to see if any kext is blocking sleep. A clean output shows no "PreventUserIdleSystemSleep" or "ExternalMedia" assertions. If audio stops working after wake, add the HDEF device to your SSDT with a layout-id of 1, 2, or 3 (depending on your codec — Realtek ALC887 or ALC892 are common on Z77 boards).
Finally, always back up your working EFI folder before making ACPI changes. A misapplied patch can leave the system unbootable, requiring a recovery USB to restore the original files. Keep a copy of your DSDT extracted via Clover's F4 key at the boot picker — that raw DSDT is your fallback if you need to start over.
