Fixing ACPI Sleep and USB Wake Issues on Legacy Hackintosh Builds

Step-by-step guide to patching ACPI for sleep, wake, and USB 3.0 on Z77, X79, Z87, Z97 Hackintosh with Clover and OpenCore.

Hackintosh BIOS ACPI configuration menu with sleep state options

If your Hackintosh won't sleep, wakes up instantly, or loses USB 3.0 after wake, the culprit is almost always a missing or misconfigured ACPI patch. Unlike a retail Mac, a custom PC’s DSDT is written for Windows and Linux, not for macOS. The XNU kernel relies on specific ACPI objects — _PTS, _WAK, _PRW, _DSM, and _SB.PCI0 — to manage power states correctly. On older platforms such as Z77, X79, Z87, and Z97, the default ACPI tables often lack the methods macOS expects, leading to kernel panics, stalled sleep, or USB port reset failures. This article walks through the most common ACPI patches needed for legacy Hackintosh builds running High Sierra or older, with precise instructions for Clover and OpenCore.

First, dump your current ACPI tables from within macOS. Use Clover’s F4 key at the boot picker to save a copy of all SSDTs and the DSDT to EFI/CLOVER/ACPI/origin. Alternatively, run ioreg -lw0 | grep -i acpi or use the acpidump tool from a Linux live USB. Once you have the raw tables, open them with MaciASL (a free ACPI editor) to inspect the DSDT for missing or broken power management objects.

The most common issue on legacy boards is the absence of the _PTS (Prepare To Sleep) and _WAK (Wake) methods. Without these, macOS cannot coordinate the transition to S3 sleep or restore USB controllers after wake.

For Intel 6-series and 7-series chipsets (Sandy Bridge, Ivy Bridge), the DSDT often uses a legacy _PTS that macOS interprets incorrectly. A minimal patch replaces the existing _PTS with a macOS-compatible stub that calls _SB.PCI0.LPCB.EC._PTS if it exists, otherwise returns immediately. Similarly, _WAK must return a zero status to signal a successful wake. On X79 and X99 platforms, the ACPI tables are notoriously bloated with server-grade power objects that macOS cannot parse; a dedicated patch to rename _PTS to XPTS and _WAK to XWAK (while re-inserting them in an SSDT) is often necessary. For a full walkthrough of X79/X99 ACPI panics, see the earlier post Fixing ACPI Panics on X79/X99 Hackintosh for macOS High Sierra.

USB wake issues are the second most frequent problem. When you put a Hackintosh to sleep and it wakes after a few seconds, the culprit is usually a USB device (mouse, keyboard, internal Bluetooth) asserting a wake signal. The macOS kernel checks the _PRW (Power Resource for Wake) method on each USB port. If the DSDT defines wake capabilities for ports that physically lack a wake-capable device, macOS will treat any activity on that port as a wake event. The fix involves editing the DSDT to remove _PRW from EHCI and XHCI controllers, or to set the _PRW package to zero (0) for internal ports. On Haswell and newer, you can also inject a USB port limit patch via Clover (KextsToPatch or ACPI patch) to disable wake on non-user ports. For Z77 builds, a DSDT edit that sets _PRW (0x0D, 0x03) to _PRW (0x0D, 0x00) on the XHCI controller often resolves spurious wake.

USB 3.0 port recognition after sleep is another common headache. Many legacy boards use the Intel 7-series or 8-series chipset with a separate ASMedia or Etron USB 3.0 controller. macOS does not natively re-enumerate these third-party controllers after S3 sleep. The solution is a custom SSDT that calls _DSM (Device Specific Method) on the USB controller device with the property "built-in" = 0x01 and "device-id" = 0x0012 (or the appropriate device ID for your controller). Alternatively, a Clover ACPI patch can rename _SB.PCI0.RP01.PXSX to _SB.PCI0.RP01.XPXS and provide a new _DSM in an SSDT. For Realtek RTL8111 Ethernet wake problems, a separate kext and ACPI patch is required; the dedicated guide Fixing Realtek RTL8111 Ethernet on Hackintosh High Sierra: Chip Revisions, Kexts, and ACPI Patches covers that in detail.

Hackintosh BIOS ACPI configuration menu with sleep state options

Graphics wake failures are less common but more confusing. After sleep, a system may wake to a black screen or a frozen image. On NVIDIA Kepler and Maxwell GPUs, the DSDT must include a _DSM method on the PEGP device that sets @0,name and @1,name properties to the correct display names (e.g., NVDA,Display-A). On Intel HD Graphics 4000/4600, the _DSM must set ig-platform-id and device-id; otherwise, the GPU does not reinitialize the framebuffer after wake. These patches are typically injected via Clover’s Devices/Properties or OpenCore’s DeviceProperties block, not as raw ACPI edits.

For OpenCore users, ACPI patches are applied via an SSDT file or a rename in config.plist under ACPI -> Patch. The OpenCore approach is cleaner because it does not modify the DSDT on disk; instead, it loads a replacement table at boot. The table below lists the most common legacy patches and their OpenCore equivalents:

Issue Clover Patch OpenCore SSDT or Rename
Sleep fails to enter S3 Rename _PTS to XPTS, inject new _PTS via SSDT SSDT-PTSWAK.aml (available from OpenCore package)
Wake after 2 seconds Remove _PRW from XHCI in DSDT SSDT-USBWakes.aml with _PRW set to 0
USB 3.0 lost after sleep _DSM injection for ASMedia/Etron SSDT-USB-Reset.aml with _DSM and device-id
Black screen on wake DeviceProperties injection for GPU DeviceProperties -> Add -> PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)

Before applying any patch, always make a backup of your original DSDT and EFI folder. A single incorrect ACPI edit can cause a boot loop or kernel panic. Test sleep and wake by running pmset sleepnow in Terminal, then pressing a keyboard key or moving the mouse to wake. If the system does not wake, force a hard reset and boot with -v debug=0x100 to capture the panic log. On some legacy boards, the BIOS must also have “Wake on USB” and “ErP Ready” set to disabled for macOS to manage sleep correctly.

Patching ACPI is inherently fragile. Different BIOS revisions of the same motherboard can produce different DSDTs, so a patch that works on one revision may break another. Always verify that your DSDT version matches the patch source. For users who prefer a pre-built solution, the community DMG images (such as the one discussed in The 1151 DMG: What’s Inside the Pre-Built Hackintosh Image and Why It’s Risky) often include ACPI patches, but those are tied to a specific BIOS version and may not apply to your board. The safest path is to generate your own patches from your own DSDT dump using MaciASL’s automatic patching feature for your motherboard model, then manually verify each change.