Enabling Ivy Bridge power management with a Mac Pro system definition

So, I’ve been running my Hackintosh with a MacPro5,1 system definition for a while now. It enabled graphics card power management (via AppleGraphicsPowerManagement.kext and some edits) and was rock-solid for me. But, I did realise that I didn’t get any Intel Speed Step or Turbo Boost functionality. Allegedly, in order for this to happen I’d have to be using an iMac12,x or MacMini6,x system definition. No thanks!

For Ivy Bridge systems, CPU power management is controlled by X86PlatformPlugin.kext, a plugin for IOPlatformPluginFamily.kext. X86PlatformPlugin.kext/Contents/Resources contains .plist for each Ivy Bridge board that Apple supports. Unfortunately, MacPro5,1 isn’t one of them – it still uses Sandy Bridge!

Easy fix! To enable Ivy Bridge power management for MacPro5,1, just copy the MacMini6,2 plist to a new plist with the MacPro5,1 board type. Then, rebuild the extensions cache. If you’re using a different system definition, you can get your board name from /Extra/smbios.plist under the SMboardproduct key.

$ cd /System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/X86PlatformPlugin.kext/Contents/Resources
$ sudo cp Mac-F65AE981FFA204ED.plist Mac-F221BEC8.plist
$ sudo rm -rf /System/Library/Caches/com.apple.kext.caches/Startup/kernelcache
$ sudo kextcache -system-prelinked-kernel
$ sudo kextcache -system-caches

Finally, you need a ssdt that lists SpeedStep frequencies. ssdtPRGen.sh can generate this for you:

$ curl https://raw.github.com/Piker-Alpha/RevoBoot/clang/i386/libsaio/acpi/Tools/ssdtPRGen.sh > /Extra/ssdtPRGen.sh
$ cd /Extra
$ chmod +x ssdtPRGen.sh
$ ./ssdtPRGen.sh

You can also call ./ssdtPRGen.sh with parameters for CPU type, TDP and maximum frequency. I’m running a bit of an overclock, so I called ./ssdtPRGen.sh 4300 which generated 28 P-states from 1600-4300 MHz.

Restart, and if everything went correctly, you will be able to see your frequency change dynamically in HWMonitor. If you use MSRDumper, you’ll be able to see entries in your kernel.log:

kernel[0]: MSRDumper CoreMulti(16) 
MSRDumper PStatesReached: 16 22 29 35 40 43

Hopefully, if/when Apple updates their Mac Pro there will be native power management for the Mac Pro system definition. Until then, this is working great.