Fixing Sleep and Wake Failures on a Yosemite Hackintosh
Diagnose and fix Yosemite Hackintosh sleep problems: instant wake, dark wake, USB _PRW patches, HPET IRQ conflicts, and GPU framebuffer issues.
When a Yosemite Hackintosh fails to sleep, the symptoms are rarely straightforward. The machine might spin down its fans and kill the display exactly as it should—then wake itself seconds later with dead USB ports and no way to interact. Or the power LED blinks once and the whole box reboots. These failures almost always come down to a mismatch: the ACPI tables fed to the kernel don't match what the motherboard firmware actually does, and all of it gets filtered through a version of OS X that shipped before the power management overhauls that arrived in El Capitan and Sierra.
Yosemite (10.10.x) sits at an awkward spot in Hackintosh history. Its Darwin kernel understands both legacy and modern ACPI methods, but it lacks the native XHCI handoff logic that later builds rely on to keep USB controllers alive across sleep transitions. A Clover configuration that runs flawlessly on Mavericks can fall apart on Yosemite. One that works on El Capitan might only partially backport. The first thing to figure out is whether you're dealing with an instant wake (the system wakes within 30 seconds of entering sleep) or a crash on wake (kernel panic or a frozen display with no backlight).
Isolating the Wake Reason
Right after a failed sleep cycle, open Terminal and run:
syslog | grep -i "Wake reason"
The output will give you a string like Wake reason: XHC EHC1 EHC2 or Wake reason: GLAN HDEF. These labels map to ACPI device identifiers. XHC is the USB 3.0 controller, EHC1/EHC2 are USB 2.0 controllers, GLAN is onboard Ethernet, and HDEF is the audio codec. On Yosemite, USB controllers with missing or broken _PRW (Power Resources for Wake) method definitions in the DSDT are the usual suspects. Ethernet controllers whose Wake on LAN capability isn't properly disabled at the ACPI level come in a close second.
When the wake reason points to XHC or EHC, the USB kext itself is rarely at fault. The problem sits in the ACPI declaration that marks the controller as wake-capable from any signal—including electrical noise on empty ports. The fix means patching the DSDT or SSDT to strip the _PRW method from those controllers, or injecting a Clover ACPI patch that returns zero for wake capability. A common Clover hotpatch for Yosemite looks like this:
Comment: USB _PRW 0x0D fix
Find: 5F505257 08
Replace: 5F505257 00
This hex pattern targets the _PRW method and replaces the return value with zero, telling the kernel the device can't wake the system. Apply it only to the specific controller flagged in the wake reason log. A global patch will disable wake from USB keyboards and mice entirely, which you probably don't want.
Dark Wake and the GPU Power State
There's a nastier failure mode on Yosemite called the "dark wake." The system looks like it's waking—fans spin up, the hard drive clicks—but the display stays black and the machine ignores keyboard input. This usually traces back to the graphics card failing to reinitialize its framebuffer after the S3 transition.
NVIDIA GPUs from the Kepler family (GeForce 600/700 series) generally handle Yosemite's native drivers without issue. Older Fermi cards and many AMD HD 7000 series cards don't. They need explicit injection of the correct framebuffer personality in Clover's Graphics section. The parameter that matters most is LoadVBios. Set it to Yes for cards that show dark wake behavior—it forces the bootloader to re-upload the VBIOS on resume. For anyone still running legacy hardware, the NVIDIA GPU guide for GeForce 6 through Fermi cards documents the specific framebuffer injection strings and VBIOS quirks that affect sleep. The underlying issue is the same on Yosemite: if the card's native power gating isn't described correctly in the SSDT, the GPU drops into a low-power state that the Yosemite WindowServer can't recover from.
DTGP Method and HPET IRQ Conflicts
Some sleep failures only show themselves as a kernel panic on wake. You'll need to boot with keepsyms=1 and capture the backtrace to see them. Many of these panics come back to a missing DTGP (General Purpose) method in the DSDT. That method is a prerequisite for a whole set of common ACPI patches, including the IRQ fix for the High Precision Event Timer (HPET).
Yosemite's kernel is touchier about HPET IRQ conflicts than Mavericks ever was. If the HPET device shares IRQ 0 with the RTC or PIC, the system will panic when the timer fires during the wake sequence. The standard DSDT patch adds the DTGP method, then applies an IRQ fix that removes IRQ 0 from the HPET's _CRS (Current Resource Settings) and adds IRQs 8, 11, and 15 instead.
If you're on a motherboard with AMI UEFI firmware from the Sandy Bridge or Ivy Bridge generation, the updated DMGs for Haswell and X79 builds include pre-patched DSDT files that address this exact IRQ routing problem. The same patching logic applies to Yosemite. If you're compiling your own DSDT, check that the HPET device in the final AML contains no IRQNoFlags entry for IRQ 0 before you deploy it.

USB Port Mapping and the 15-Port Limit
Yosemite doesn't enforce the strict 15-port USB limit that appeared in El Capitan, but it still has a practical ceiling on how many ports can stay active during sleep negotiation. When the ACPI tables define more than a dozen USB ports and no port map kext or SSDT prunes the unused ones, the kernel can spend too long enumerating the controller on wake. That triggers a watchdog timeout and a reboot.
The clean fix is a custom USB injector kext that defines only the physical ports you actually use. The blunt-instrument approach is a port-limit patch against the AppleUSBXHCI kext—but that tends to cause instability with USB 3.0 mass storage devices on wake, so it's best avoided unless you have no other option.
Verifying with a Minimal Boot
Before you commit to permanent ACPI changes, test sleep with a stripped-down Clover configuration. Disable every unnecessary kext injection—pull FakeSMC sensor plugins, audio kexts, Ethernet kexts—and boot with -v darkwake=0. The darkwake=0 argument disables all dark wake features and forces a full S3 transition.
If sleep works reliably in this minimal state, start adding kexts back one at a time, testing sleep after each addition, until the problem component surfaces. This is slower than guessing at ACPI patches, but it's far more reliable. Yosemite's power management stack is a specific, fragile snapshot—Apple's transition point between the legacy power management of Mountain Lion and the modern stack that arrived in El Capitan. Treating it that way saves hours of frustration.

Once the system sleeps and wakes correctly, capture the working DSDT, SSDTs, and config.plist to a backup volume. Don't skip this. Sleep functionality on Yosemite is brittle across even minor system updates—a 10.10.5 supplemental update can silently shift the kernel's expectations around ACPI method signatures. A known-good configuration frozen in time is the only real defense against regressions. If you're dual-booting or experimenting with newer macOS versions on the same hardware, keep a separate EFI partition or at minimum a dated folder with the exact Clover revision and config that worked. Six months from now, when a seemingly unrelated change breaks sleep again, you'll be glad you did.
