Contribute
Register

Giacomoleopardo Silent MacMini 6,2 | Step by step guide

Status
Not open for further replies.
Joined
Apr 28, 2011
Messages
909
Motherboard
Asus Prime Z690M-Plus D4
CPU
i7-12700KF
Graphics
RX 6600
Mac
  1. MacBook Pro
Mobile Phone
  1. iOS
Giacomoleopardo Silent MacMini 6,2 Asrock Z77E-ITX | Intel® Core™ i7-3770S​


GUIDE UPDATED FOR MAVERICKS INSTALLATION! JUMP TO POSTS #166 AND #167

53073-fc8-evo.jpg



Components


Intel® Core™ i7-3770S Processor, 8M Cache, up to 3.90 GHz
http://www.amazon.com/dp/B007SZ0EOM
http://www.newegg.com/Product/Product.aspx?Item=N82E16819116503

Asrock Z77E-ITX
http://www.amazon.com/dp/B007RS71O6
http://www.newegg.com/Product/Product.aspx?Item=N82E16813157312

Corsair Vengeance LP Blue 16 GB (2x8 GB) DDR3 1600MHz
http://www.amazon.com/dp/B009M0TCHQ/
http://www.newegg.com/Product/Product.aspx?Item=N82E16820233367

SAMSUNG 840 Pro MZ-7PD256BW 2.5-Inch 256GB
http://www.amazon.com/dp/B009NB8WRU
http://www.newegg.com/Product/Product.aspx?Item=N82E16820147193

SAMSUNG 840 Pro MZ-7PD128BW 2.5-Inch 128GB
http://www.amazon.com/dp/B009LI7CKI/
http://www.newegg.com/Product/Product.aspx?Item=N82E16820147192

Streacom FC8 Evo Fanless Chassis Black
http://www.breakpoint.it/i/mkg/skp.asp?id_prod=228280

Streacom Nano PSU 150
http://www.amazon.it/dp/B009NSQD1A

Sony Optiarc Blu Ray Slim RW BD5850H
http://www.amazon.it/dp/B007HKORZA
http://www.newegg.com/Product/Product.aspx?Item=N82E16827118072

Atheros Wi Fi Card Dual-Band AR9280 AGN 300Mbp 4 DELL E6400 Half-S
http://www.amazon.com/Atheros-Dual-Band-AR9280-300Mbp-Half-S/dp/B009X5X320

Belkin F8T016 Mini Bluetooth Adapter
http://www.amazon.com/dp/B001E96JBK/
http://www.newegg.com/Product/Product.aspx?Item=N82E16833314046

Apple Wireless Keyboard
http://www.amazon.com/dp/B005DLDO4U/
http://www.newegg.com/Product/Product.aspx?Item=N82E16823101013

Apple Magic Mouse
http://www.amazon.com/dp/B002TLTGM6/
http://www.newegg.com/Product/Product.aspx?Item=N82E16826101010

Apple Infrared Remote Control
http://www.amazon.com/dp/B002TPFNXS/

MacBook Pro Infrared board
http://www.powerbookmedic.com/MacBook-Pro-Infrared-board-p-18041.html

Apple 27-Inch LED Cinema Display
http://www.amazon.com/Apple-MC007LL-27-Inch-Cinema-Display/dp/B0043GCBU4

OSX Mountain Lion 10.8.3 OSX Mountain Lion 10.8.4
http://www.apple.com/osx/



Comments

I built this system for my studio: silence was the main goal, and it is. After my previous experience with little powerful systems (see Zotac build in my signature) I bumped into a Streacom fanless case, cause I like its line. No graphic card is needed, HD 4000 still is enough to me, so less power and a passive AC-DC Power Adapter. With my great pleasure and surprise, Asrock board is totally satisfying my needs. I had to replace unsupported WiFi card that came with the board with an Atheros AR9280, no big deal, though! I've tried edit DSDT, rather than change or modifying kexts, where it was possible for my knowledge, in order to keep minimum troubleshoot for any future update. Temperatures are pretty decent, even with "full load" cpu. Belkin bluetooth works natively in OSX and in UEFI and Chimera boot screen as well.
Pretty much everything works, here: just follow next steps, with or without the same components. Good hack!


Installation

Tools:
- PMPatch and FPT for patching and flashing Bios (registration required) by CodeRush
- Latest Asrock bios
- Ubuntu Live cd to extract fresh DSDT
- UniBeast for Mountain Lion and MultiBeast for Mountain Lion (registration required)
- MaciASL Open Beta for editing .aml files (registration required)
- MaciASL patches from MaciASL Patch Repository Thread (registration required)
- HexFiend
- KextBeast (registration required)
- Chameleon Wizard (registration required)
- Kext Wizard
- Show All Files (registration required)
- IORegistryExplorer attached by toleda in his post#1 (registration required)
- Trim Enabler by Groths
- CalDigitFastIO.kext and CalDigitUSBxHCI.kext (for AsMedia USB 3.0 Rear ports), IONetworkingFamily.kext (for Ethernet), download here
- OSX Mountain Lion Combo Update 10.8.4
- A working Mac or Hackintosh machine​

Step 1 - Bios patch (Required for proper Power Management)
- Place PMPatch and the original latest bios (Z77EI1.80 at this time) on the desktop
- Open up Terminal (from Applications>Utilities folder)
- Drag PMPatch into the terminal window, then drag bios file into Terminal twice (for the input and output locations). Type PATCHED to the end of the second bios filename. This isn’t necessary but it helps to identify whether or not the bios has been patched.
- Hit enter, and your patched bios will be generated on desktop. You will see something like this in terminal
Code:
Last login: Sat Apr 13 00:39:43 on console
localhost:~ GioEle$ /Users/GioEle/Desktop/PMPatch /Users/GioEle/Desktop/Z77EI1.80 /Users/GioEle/Desktop/Z77EI1.80Patched
PMPatch 0.5.10
PowerManagement modules not found.
Trying to apply patch #1
[B]Nested PowerManagement module at 01A593AC patched.[/B]
AMI nest module at 00247100 patched.
Phoenix nest modules not found.
CpuPei module at 00759E08 not patched: Patch pattern not found.
Output file generated.
localhost:~ GioEle$
- Rename patched bios with original bios name Z77EI1.80
- Place the new patched file named Z77EI1.80 into a USB flash drive (MS DOS-FAT formatted), press F6 while booting into UEFI Bios, or find Instant Flash command at the bottom of Advanced\South Bridge Configuration and flash your Bios
- Reboot and set the new patched bios as below reported​

Step 2 - Setting Bios
- Press Del or F2 key on boot to gain UEFI Bios screen
- Load Optimized Default with F9 key and you'll get first screen​
53138-bios-01-general.jpg
- Select OC Tweaker and set as below for stock CPU Multipliers​
53137-stock.jpg
or if you want make a little overclock, I set OC like this​
53136-40.jpg
Pay Attention! Remember 1-Core Ratio Limit value, you'll need for Power Management.​

53135-2.jpg


53134-3.jpg
- Advanced\CPU Configuration​
53133-bios-06-advanced.jpg
- Advanced\North Bridge Configuration: for Intel HD 4000 integrated graphics choose Onboard. If you have discrete graphic card choose PCI Express. Attention: leave VT-d Disabled and Share Memory 32 MB (don't worry: it will not affect the real amount of your ram seen by OSX), otherwise the system will not boot.​
53173-north-bridge.jpg
- Advanced\South Bridge Configuration​
53131-south-bridge.jpg
- Advanced\Strorage Configuration\Sata 3_X(these settings are not mandatory, at your convenience)​
53129-sata3-0.jpg
- Advanced\Intel (R) Rapid Start Technology: leave default
- Advanced\Intel (R) Smart Connect Technology: leave default
- Advanced\Super IO Configuration: leave default
- Advanced\ACPI Configuration (PCI Devices Power On: Enabled to make Wake On Lan working properly)​
53127-acpi-config.jpg
- Advanced\USB Configuration: everything Enabled
- Advanced\Network Configuration: leave default
- H/W Monitor: leave default
- Boot: DO NOT ENABLE Fast Boot! In my case with Fast Boot Enabled Chimera doesn't see Windows 7 hard drive, and choosing Ultra Fast Boot the machine doesn't boot at all. Leave it Disabled. Set the rest at your convenience for booting the system.
- Security: leave default or set your passwords, your choice.
- Press F10 key to Save and Reboot​


Step 3 - Mountain Lion Installation
- install Mountain Lion with UniBeast method as explained in Tonymac's guide. Note: if you have trouble booting, you'll probably have to type -x before hitting enter, otherwise you won't reach installation screen. Take your time, install process will take 15-20 minutes.
- Reboot from Unibeast and at Chimera screen choose your new OSX installed partition (probably still typing -x)
- Assuming you have all of the tools mentioned above, now we have to take care of DSDT. This is one of the most important steps of the installation process, many people don't care about DSDT (even with Gigabyte boards) and probably they are satisfied in that way (I was!) as their system works, but to optimize the components, make a hackintosh as close as possible to a real Mac and more vanilla as possible, DSDT is the key to do that. My advice is: learn how to edit dsdt, spend some time (or headache!), and new perspectives will open to you as hackintosher. This guide is not really about a DSDT editing, but in this section I will explain what and why I did it, in order to make anyone able to compile his own DSDT, not just trying to use others' one. So:

UPDATE #3
Thanks to the massive work of forum moderator PJALM, and the support of forum moderator SJ_Underwater, now only two patches are necessary to make this board fully functional. Simply follow these steps (the red ones are not necessary anymore, but basically are the same job that PJALM patch does).
- Download MaciASL from here, unzip it and open it. It automatically will open a "clean" DSDT. It's important to know that these patches can be applied just one time, so if you want re-patch dsdt you'll have to start from a clean dsdt.aml again. So my advice is: save a backup copy of this file just in case you need to re-patch it. To do that just go to MaciASL menu bar click on File/Save as, choose the directory where you want to keep your backup clean dsdt, select Disassembled ASL file as File Format and name it "clean dsdt".
- in Menu bar open MaciASL\Preferences and select Sources in Preferences window
- set iASL as ACPI 5.0 as in the following picture
57590-maciasl-1.png
- select sources icon, click on "+" to add Name and URL of the patches that you need: in my case they are

- Close completely MaciASL and re-open it: again a clean DSDT will appear as before, click on Patch command: now in the left side of the Patch window you should see all the patches we've just added like this
58361-asrock-patches.jpg
- Under PJALM ASRock choose your motherboard's patch, click on Apply, then Close. Now click on Compile command: no Errors, Warnings nor Remarks should appear, but some Warnings may stay: they won't affect your installation; the mandatory thing is NOT TO HAVE ERRORS when compiling a DSDT! Go on
- Re-open patch windows and under PJALM Graphics select
  • Generic Discrete Graphics (AMD/nVidia) to enable HDMI Audio if you have a discrete graphic card or
  • Intel HD4000 to enable HDMI Audio if you have ONLY Intel HD 4000 onboard graphic)
- Apply your right patch and check compile: now you should have 0 Errors, 0 Warnings, 0 Remarks, XX Optimizations.
- Go to MaciASL menu bar click on File/Save as, choose desktop as directory, this time select ACPI Machine Language Binary as File Format and name it "dsdt.aml" (add extension manually).
The next red steps are not necessary anymore. I leave them in the thread 'cause they're still valuable infos.

END UPDATE #3​
 
Last edited by a moderator:
Welcome back, and let's do something REALLY useful: fix Intel® Z77 chipset USB 3.0 in order to have USB 3.0 ports fully working with any usb device (3.0, 2.0, 1.0). In order to make ASMedia® USB 3.0 controller working you'll have to install CalDigitUSBxHCI.kext and CalDigitFastIO.kext that Buckeyes linked in his first post or download USB30_kext_02.zip from here, or see attachment in post # 3 of this guide.

UPDATE 1 - As promised, Forum Moderator PJALM has published a new patch located in PJALM Intel7/Usb Multiplex that gathers all the Mieze's manual editing below reported. All you have to do is to apply this patch exactly as the others, as explained in post #1/Step 3 of this thread and then jump to fix long wake from sleep down there! Thanks PJALM!

UPDATE 2 - Great news from the latest MultiBeast (5.3.0)!
The following editing or PJALM Multiplex patching stated in UPDATE 1, are not needed anymore. Based on Zenith432's work, RehabMan compiled GenericUSBXHCI.kext included in MultiBeast as "USB 3.0 - Universal" that allows Intel Z77 USB 3.0 and ASMedia USB 3.0 controllers to work properly ----> see post #18 of this thread

PAY ATTENTION! As mrengles stated, this method will work ONLY with these System Definition:
  • Macmini5,1 (Sandy Bridge)
  • Macpro3,1 (Sandy Bridge)
  • Any Ivy Bridge SysDef
So mind what SysDef you choose, based on your hardware, 'cause it will influence your Power Management optimization.
So, what we have to do, now?

- Open DSDT just saved and find
Code:
Device (XHC)
- Select the entire block from Device (XHC) to Device (HDEF)
Code:
Device (XHC)
...............................
Device (HDEF)

and replace into this

Code:
Device (XHC1)
        {
            Name (_ADR, 0x00140000)
            OperationRegion (XPRT, PCI_Config, 0x74, 0x6C)
            Field (XPRT, DWordAcc, NoLock, Preserve)
            {
                        Offset (0x01), 
                PMEE,   1, 
                    ,   6, 
                PMES,   1, 
                        Offset (0x5C), 
                PR2,    32, 
                PR2M,   32, 
                PR3,    32, 
                PR3M,   32
            }

            OperationRegion (XH1C, PCI_Config, 0xD0, 0x10)
            Field (XH1C, ByteAcc, NoLock, Preserve)
            {
                PAHC,   1, 
                PBHC,   1, 
                PCHC,   1, 
                PDHC,   1, 
                        Offset (0x08), 
                PASS,   1, 
                PBSS,   1, 
                PCSS,   1, 
                PDSS,   1
            }

            OperationRegion (XHC2, PCI_Config, 0x44, 0x04)
            Field (XHC2, ByteAcc, NoLock, Preserve)
            {
                        Offset (0x01), 
                MIAI,   2
            }

            Name (XRST, Zero)
            Method (_INI, 0, NotSerialized)
            {
                If (OSDW ())
                {
                    Store (Zero, MIAI)
                }

                If (LAnd (LGreaterEqual (OSYS, 0x07DC), LLess (OSYS, 0x2710)))
                {
                    Store (One, PASS)
                    Store (One, PAHC)
                    Store (One, PBSS)
                    Store (One, PBHC)
                    Store (One, PCSS)
                    Store (One, PCHC)
                    Store (One, PDSS)
                    Store (One, PDHC)
                }
            }

            Method (_S3D, 0, NotSerialized)
            {
                Return (0x02)
            }

            Method (_S4D, 0, NotSerialized)
            {
                Return (0x02)
            }

            Device (RHUB)
            {
                Name (_ADR, Zero)
                Device (PRT1)
                {
                    Name (_ADR, One)
                    Method (_UPC, 0, Serialized)
                    {
                        Name (UPCP, Package (0x04)
                        {
                            0xFF, 
                            0x03, 
                            Zero, 
                            Zero
                        })
                        Return (UPCP)
                    }

                    Method (_PLD, 0, Serialized)
                    {
                        Name (PLDP, Package (0x01)
                        {
                            Buffer (0x10)
                            {
                                /* 0000 */    0x01, 0xC6, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                /* 0008 */    0x69, 0x0C, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00
                            }
                        })
                        Return (PLDP)
                    }

                    Name (MUXS, "EHCA")
                }

                Device (PRT2)
                {
                    Name (_ADR, 0x02)
                    Method (_UPC, 0, Serialized)
                    {
                        Name (UPCP, Package (0x04)
                        {
                            0xFF, 
                            0x03, 
                            Zero, 
                            Zero
                        })
                        Return (UPCP)
                    }

                    Method (_PLD, 0, Serialized)
                    {
                        Name (PLDP, Package (0x01)
                        {
                            Buffer (0x10)
                            {
                                /* 0000 */    0x01, 0xC6, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                /* 0008 */    0x69, 0x0C, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00
                            }
                        })
                        Return (PLDP)
                    }

                    Name (MUXS, "EHCB")
                }

                Device (PRT3)
                {
                    Name (_ADR, 0x03)
                    Method (_UPC, 0, Serialized)
                    {
                        Name (UPCP, Package (0x04)
                        {
                            0xFF, 
                            0x03, 
                            Zero, 
                            Zero
                        })
                        Return (UPCP)
                    }

                    Method (_PLD, 0, Serialized)
                    {
                        Name (PLDP, Package (0x01)
                        {
                            Buffer (0x10)
                            {
                                /* 0000 */    0x01, 0xC6, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                /* 0008 */    0x69, 0x0C, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00
                            }
                        })
                        Return (PLDP)
                    }

                    Name (MUXS, "EHCC")
                }

                Device (PRT4)
                {
                    Name (_ADR, 0x04)
                    Method (_UPC, 0, Serialized)
                    {
                        Name (UPCP, Package (0x04)
                        {
                            0xFF, 
                            0x03, 
                            Zero, 
                            Zero
                        })
                        Return (UPCP)
                    }

                    Method (_PLD, 0, Serialized)
                    {
                        Name (PLDP, Package (0x01)
                        {
                            Buffer (0x10)
                            {
                                /* 0000 */    0x01, 0xC6, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                /* 0008 */    0x69, 0x0C, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00
                            }
                        })
                        Return (PLDP)
                    }

                    Name (MUXS, "EHCD")
                }
            }

            Method (_PRW, 0, NotSerialized)
            {
                Return (GPRW (0x0D, 0x04))
            }

            Method (_DSM, 4, NotSerialized)
            {
                Store (Package (0x0B)
                    {
                        "AAPL,current-available", 
                        0x0834, 
                        "AAPL,current-extra", 
                        0x0898, 
                        "AAPL,current-extra-in-sleep", 
                        0x0640, 
                        "AAPL,max-port-current-in-sleep", 
                        0x0834, 
                        "AAPL,device-internal", 
                        Zero, 
                        Buffer (One)
                        {
                            0x00
                        }
                    }, Local0)
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }

            Method (XHCA, 0, NotSerialized)
            {
                If (LNot (OSDW ()))
                {
                    Store (One, PASS)
                }

                Store (One, PAHC)
            }

            Method (XHCB, 0, NotSerialized)
            {
                If (LNot (OSDW ()))
                {
                    Store (One, PBSS)
                }

                Store (One, PBHC)
            }

            Method (XHCC, 0, NotSerialized)
            {
                If (LNot (OSDW ()))
                {
                    Store (One, PCSS)
                }

                Store (One, PCHC)
            }

            Method (XHCD, 0, NotSerialized)
            {
                If (LNot (OSDW ()))
                {
                    Store (One, PDSS)
                }

                Store (One, PDHC)
            }

            Method (EHCA, 0, NotSerialized)
            {
                If (LNot (OSDW ()))
                {
                    Store (Zero, PASS)
                }

                Store (Zero, PAHC)
            }

            Method (EHCB, 0, NotSerialized)
            {
                If (LNot (OSDW ()))
                {
                    Store (Zero, PBSS)
                }

                Store (Zero, PBHC)
            }

            Method (EHCC, 0, NotSerialized)
            {
                If (LNot (OSDW ()))
                {
                    Store (Zero, PCSS)
                }

                Store (Zero, PCHC)
            }

            Method (EHCD, 0, NotSerialized)
            {
                If (LNot (OSDW ()))
                {
                    Store (Zero, PDSS)
                }

                Store (Zero, PDHC)
            }
        }

        Device (HDEF)
Pay Attention: if you're using MaciASL, a Compiler Summary windows with a bunch of errors ecc. will appear, cause MaciASL do automatic compiling. Simply ignore until the end of this process!
- Find
Code:
Name (_ADR, 0x001D0000)
Under that you'll find
Code:
Device (HUBN)
here you have to look for the devices that don't have "Method (_DSM". In my case they are Device (PR11), Device (PR12), Device (PR13), Device (PR18), skipping Device (PR01). Those devices - without "Method (_DSM" - have to be modified adding Name (MUXS, "XHCA") to Device (PR11), Name (MUXS, "XHCB") to Device (PR12), Name (MUXS, "XHCC") to Device (PR13), Name (MUXS, "XHCD") to Device (PR18).
Here is the first case, that's the same for the other three

from
Code:
Device (PR11)
                    {
                        Name (_ADR, One)
                        Method (_UPC, 0, Serialized)
                        {
                            Name (UPCP, Package (0x04)
                            {
                                0xFF, 
                                0xFF, 
                                Zero, 
                                Zero
                            })
                            Return (UPCP)
                        }

                        Method (_PLD, 0, Serialized)
                        {
                            Name (PLDP, Package (0x01)
                            {
                                Buffer (0x10)
                                {
                                    /* 0000 */    0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                    /* 0008 */    0xE1, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
                                }
                            })
                            Return (PLDP)
                        }
                    }

to
Code:
Device (PR11)
                    {
                        Name (_ADR, One)
                        Method (_UPC, 0, Serialized)
                        {
                            Name (UPCP, Package (0x04)
                            {
                                0xFF, 
                                0xFF, 
                                Zero, 
                                Zero
                            })
                            Return (UPCP)
                        }

                        Method (_PLD, 0, Serialized)
                        {
                            Name (PLDP, Package (0x01)
                            {
                                Buffer (0x10)
                                {
                                    /* 0000 */    0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                    /* 0008 */    0xE1, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
                                }
                            })
                            Return (PLDP)
                        }

                        [B]Name (MUXS, "XHCA")[/B]
                    }

- Find
Code:
Method (_OSC, 4, Serialized)
and replace the entire block from this
Code:
Method (_OSC, 4, Serialized)
            {
                Store (Arg3, Local0)
                CreateDWordField (Local0, Zero, CDW1)
                CreateDWordField (Local0, 0x04, CDW2)
                CreateDWordField (Local0, 0x08, CDW3)
                If (^XHC.CUID (Arg0))
                {
                    Return (^XHC.POSC (Arg1, Arg2, Arg3))
                }
                Else
                {
                    If (_OSI ("Windows 2012"))
                    {
                        If (LEqual (XCNT, Zero))
                        {
                            ^XHC.XSEL ()
                            Increment (XCNT)
                        }
                    }
                }

                If (LEqual (Arg0, GUID))
                {
                    Store (CDW2, SUPP)
                    Store (CDW3, CTRL)
                    If (LEqual (NEXP, Zero))
                    {
                        And (CTRL, 0xFFFFFFF8, CTRL)
                    }

                    If (NEXP)
                    {
                        If (Not (And (CDW1, One)))
                        {
                            If (And (CTRL, One))
                            {
                                NHPG ()
                            }

                            If (And (CTRL, 0x04))
                            {
                                NPME ()
                            }
                        }
                    }

                    If (LNotEqual (Arg1, One))
                    {
                        Or (CDW1, 0x08, CDW1)
                    }

                    If (LNotEqual (CDW3, CTRL))
                    {
                        Or (CDW1, 0x10, CDW1)
                    }

                    Store (CTRL, CDW3)
                    Store (CTRL, OSCC)
                    Return (Local0)
                }
                Else
                {
                    Or (CDW1, 0x04, CDW1)
                    Return (Local0)
                }
            }

            Scope (\_SB.PCI0)

into this
Code:
Method (_OSC, 4, Serialized)
            {
                Store (Arg3, Local0)
                CreateDWordField (Local0, Zero, CDW1)
                CreateDWordField (Local0, 0x04, CDW2)
                CreateDWordField (Local0, 0x08, CDW3)
                Store (CDW2, SUPP)
                Store (CDW3, CTRL)
                If (LEqual (One, OSDW ()))
                {
                    If (LAnd (LEqual (Arg0, GUID), NEXP))
                    {
                        If (Not (And (CDW1, One)))
                        {
                            If (And (CTRL, 0x02))
                            {
                                NHPG ()
                            }

                            If (And (CTRL, 0x04))
                            {
                                NPME ()
                            }
                        }

                        If (LNotEqual (Arg1, One))
                        {
                            Or (CDW1, 0x08, CDW1)
                        }

                        If (LNotEqual (CDW3, CTRL))
                        {
                            Or (CDW1, 0x10, CDW1)
                        }

                        Store (CTRL, CDW3)
                        Store (CTRL, OSCC)
                        Return (Local0)
                    }
                    Else
                    {
                        Or (CDW1, 0x04, CDW1)
                        Return (Local0)
                    }
                }
                Else
                {
                    If (LEqual (Arg0, Buffer (0x10)
                            {
                                /* 0000 */    0xA9, 0x12, 0x95, 0x7C, 0x05, 0x17, 0xB4, 0x4C, 
                                /* 0008 */    0xAF, 0x7D, 0x50, 0x6A, 0x24, 0x23, 0xAB, 0x71
                            }))
                    {
                        Store (One, ^XHC1.PASS)
                        Store (One, ^XHC1.PAHC)
                        Store (One, ^XHC1.PBSS)
                        Store (One, ^XHC1.PBHC)
                        Store (One, ^XHC1.PCSS)
                        Store (One, ^XHC1.PCHC)
                        Store (One, ^XHC1.PDSS)
                        Store (One, ^XHC1.PDHC)
                    }

                    Return (Local0)
                }
            }

            Scope (\_SB.PCI0)

- Find this block
Code:
Scope (_SB.PCI0)
    {
        Method (_INI, 0, NotSerialized)
        {
            Store (0x07D0, OSYS)
            If (CondRefOf (_OSI, Local0))
            {
                If (_OSI ("Windows 2001"))
                {
                    Store (0x07D1, OSYS)
                }

                If (_OSI ("Windows 2001 SP1"))
                {
                    Store (0x07D1, OSYS)
                }

                If (_OSI ("Windows 2001 SP2"))
                {
                    Store (0x07D2, OSYS)
                }

                If (_OSI ("Windows 2001.1"))
                {
                    Store (0x07D3, OSYS)
                }

                If (_OSI ("Windows 2006"))
                {
                    Store (0x07D6, OSYS)
                }

                If (_OSI ("Windows 2009"))
                {
                    Store (0x07D9, OSYS)
                }

                If (_OSI ("Windows 2012"))
                {
                    Store (0x07DC, OSYS)
                }
            }
        }

and replace with this
Code:
Scope (_SB.PCI0)
    {
        Method (_INI, 0, NotSerialized)
        {
            Store (0x07D0, OSYS)
            If (CondRefOf (_OSI, Local0))
            {
                [B]If (_OSI ("Darwin"))
                {
                    Store (0x2710, OSYS)
                }[/B]

                If (_OSI ("Windows 2001"))
                {
                    Store (0x07D1, OSYS)
                }

                If (_OSI ("Windows 2001 SP1"))
                {
                    Store (0x07D1, OSYS)
                }

                If (_OSI ("Windows 2001 SP2"))
                {
                    Store (0x07D2, OSYS)
                }

                If (_OSI ("Windows 2001.1"))
                {
                    Store (0x07D3, OSYS)
                }

                If (_OSI ("Windows 2006"))
                {
                    Store (0x07D6, OSYS)
                }

                If (_OSI ("Windows 2009"))
                {
                    Store (0x07D9, OSYS)
                }

                If (_OSI ("Windows 2012"))
                {
                    Store (0x07DC, OSYS)
                }
            }
        }

- At the end of DSDT add this block just before the last "}"
Code:
Method (OSDW, 0, NotSerialized)
    {
        If (LEqual (OSYS, 0x2710))
        {
            Return (One)
        }
        Else
        {
            Return (Zero)
        }
    }

this is the results
Code:
<<<<<<<DSDT stuff>>>>>>>
Store ("ib3-hdmi_audio_ami_efi_hd4000-3.txt_v1.0 dsdt edits, github.com/toleda", Debug)
    [B][I]Method (OSDW, 0, NotSerialized)
    {
        If (LEqual (OSYS, 0x2710))
        {
            Return (One)
        }
        Else
        {
            Return (Zero)
        }
    }[/I][/B]
}

- Now the Compiler Summary window should be clean (0 Errors, 0 Warning, 0 Remarks, XX Optimizations). Done.
- If not, maybe it's necessary to resolve some references to the XHC that could generate compile error (it's about XHC to be replaced with XHC1), it depends by the error message. UPDATE 1 - Here ends the process replaced by PJALM's Usb Multiplex MaciASL patch. and UPDATE 2 - Here ends the GenericUSBXHCI.kext work
- Find
Code:
\_SB.PCI0.LPCB.SIOW (Arg0)
and remove it in order to fix long wake from sleep.
- Last DSDT edit is based on PJALM Intel7\USB Power. It's not strictly necessary, but PJALM stated that this patch allow devices like iPad to charge power from usb 3.0. Since I don't have an iPad, I can't really say for myself. Anyway:
- Open Pach window from MaciASL, select PJALM Intel7\USB Power patch, Apply, Close, Compile and Save as usual.
ATTENTION! In some mobos this patch can affect wake from sleep (long monitor's wake up). On a Gigabyte GA Z77N WiFi happened. do your tests, and if you want, report results, please.​

Your DSDT is finally ready to be used for installation :thumbup:

- Put your cool DSDT.aml on desktop and run latest MultiBeast. As for me, I ran this configuration​
54048-multibeast-2.jpg

- Run Chameleon Wizard to change System Definitions in smbios.plist: select SMBios from menu icons, select Edit command in the top right corner, select "Mac Mini (6,2) - Core i7 (Ivy Bridge)" in the first options in top left corner and Save. Don't worry if you don't have an i7 CPU, what really matters is the Ivy Bridge System Definition: it will be necessary to reach a good Power Management (of course if you have a Ivy Bridge CPU), and MacMini 6,2 it's the best (at this time)
- Go to System\Extra and open org.chameleon.Boot.plist with Text Edit
- Add this
Code:
<key>Graphics Mode</key>
<string>2560x1440x32</string>
in order to make Chimera boot with proper resolution. Keep in mind that you have to use your display resolution. In my case with 27" Apple Cinema Display my resolution is 2560x1440, normally full hd monitors reach 1920x1080 (leave x32 as it is), do your research
- Stay in org.chameleon.Boot.plist and change darkwake value into 10 in order to make sleep working
- Install Trim Enabler (see Tools section - post n.1)
- Repair permission with Disk utility, rebuild cache with Kext Wizard and Reboot​
Now jump to post n. 3 to make the job done! :thumbup:
 
Last edited by a moderator:
Step 4 - Post Installation
Time to load Ivy Bridge Power Management.
A great thread where I learn a lot of stuff about Power Management (PM) is this, if you want to learn, give it a shot!
Now we need to get CPU PM (generating SSDT.aml) and GPU PM (editing AppleGraphicsPowerManagement.kext).
- Download SSDT generation script from here (attached in post n. 1 of that thread) and unzip it
- In Download Folder click just one time on unzipped ssdtPRGen and you'll see ssdtPRGen.command and ssdtPRGen.sh (alias) in your User Folder.
- Now it is necessary to know which 1-Core Ratio Limit value you set in UEFI Bios (step 2 of this guide): if you left stock values, click a second time on ssdtPRGen and it will automatically generate the script for your system with stock values of your CPU. If you changed those cpu multipliers (Core Ratio Limit) like me then open terminal and type
Code:
~/ssdtPRGen.sh/ 4000 60
where 4000 is my 1-Core Ratio Limit value (40 - see bios screenshot n. 3) multiplied x 100, and 60 is the max TDP (in Watt) I want my CPU to use. It's important to know that every cpu has its TDP, my 3770S has 65 Watts as you can see here. ssdtPRGen automatically give 65 as TDP value, but if you insert another value in the command string as I did, SSDT will be generate upon your custom TDP. Why this? As PikeRAlpha stated, Ivy Bridge Power Management optimization allows CPU to run with less TDP keeping pretty much the same performance level with lower temperature. So why not?;) Summarizing: you'll need Multipliers and TDP values.
- So type your custom values or click for the second time on ssdtPRGen command and in terminal you'll see something like this
Code:
Last login: Sat Apr 13 19:31:06 on ttys000
localhost:~ GioEle$ ~/ssdtPRGen.sh/ 4000 60























sdtPRGen.sh v6.0 Copyright (c) 2013 by Pike R. Alpha
----------------------------------------------------------------
Processor Declaration(s) Found in DSDT (ACPI 1.0 compliant)
Generating ssdt_pr.dsl for a Macmini6,2 [Mac-F65AE981FFA204ED]
Ivy Bridge Core i7-3770S processor [0x0701] setup
With a maximum TDP of 65 Watt, as specified by Intel
Override value: Max Turbo Frequency, now using: 4000 MHz!
Override value: Max TDP, now using: 60 Watt!
Number logical CPU's: 8 (Core Frequency: 3100 MHz)
Number of Turbo States: 9 (3200-4000 MHz)
Number of P-States: 25 (1600-4000 MHz)
Injected C-States for CPU0 (C1,C3,C6)
Injected C-States for CPU1 (C1,C2,C3)
Warning: Model identifier [Macmini6,2] is missing from: /S*/L*/CoreServices/PlatformSupport.plist

Intel ACPI Component Architecture
ASL Optimizing Compiler version 20130117-64 [Jan 19 2013]
Copyright (c) 2000 - 2013 Intel Corporation

ASL Input:     /Users/GioEle/Desktop/ssdt_pr.dsl - 261 lines, 8425 bytes, 56 keywords
AML Output:    /Users/GioEle/Desktop/ssdt_pr.aml - 1600 bytes, 27 named objects, 29 executable opcodes

Compilation complete. 0 Errors, 0 Warnings, 0 Remarks, 0 Optimizations
And it will ask you if you want to copy /Users/Your name/Desktop/ssdt_pr.aml to /Extra/ssdt.aml? (y/n)
Type y (for yes), type your password and in your System\Extra folder you'll find the right ssdt.aml file and in /Extra folder you'll find a file named ssdt_pr.aml. Simply rename it as ssdt.aml to get power management for your cpu.
- Open with Text Edit org.chameleon.Boot.plist in System\Extra folder and add this
Code:
<key>DropSSDT</key>
<string>Yes</string>
- also remove
Code:
<key>GenerateCStates</key>
<string>Yes</string>
<key>GeneratePStates</key>
<string>Yes</string>
or simply turn both string lines into
Code:
<string>No</string>
- Reboot system and open IORegistryExplorer (see Tools section - post n. 1 of this thread) and you should find X86PlatformPlugin like this​
53236-ioreg.png

because for Ivy Bridge processors, native power management is enabled by the X86PlatformPlugin.kext (injected by SSDT)
- To check your Speed Step, go to this thread and follow the instruction provided. You'll need to install AppleIntelCPUPowerManagementInfo.kext​
Once achieved CPU Ivy Bridge Power Management, let's optimize GPU Ivy Bridge Power Management.
As Toleda stated, AppleGraphicsPowerManagement.kext is used for product specific graphics power management. So here it is:
- If you have only onboard Intel HD 4000 integrated graphics, follow the next steps
- copy AppleGraphicsPowerManagement.kext from S/L/E to the Desktop, then you need to edit AppleGraphicsPowerManagement.kext/Contents/Info.plist. I recommend not to use text edit, but a plist editor; as for me, I find myself confortable with Xcode, from Apple Developer site
- If you have (like me) SysDef Macmini 6,2, find in Info.plist "Mac-F65AE981FFA204ED" following this path Information Property List/IOKitPersonalities/AGPM/Machines (as that's Board-ID for Macmini6,2) and change from this

50269-agpm-before.jpg

to this
50270-agpm-after.jpg

- save the file, delete AppleGraphicsPowerManagement.kext from S/L/E, run KextBeast (with the edited AppleGraphicsPowerManagement.kext placed on desktop), repair permission, rebuilt cache and reboot.
- Check IOReg/igpu@2/AGPM, and you'll find min and max values just inserted (in AppleGraphicsPowerManagement.kext/Contents/Info.plist we added decimal - 18 and 0 - and in IOReg we find hexadecimal - 0x12 and 0x0)
NOTE: in my IOReg AGPM shows max value=0x10 and min value=0x0. Now, hex 0x10 correspond to dec 16 (not 18 as inserted in plist, I don't know why it happens, maybe CPU i7 3770S doesn't reach hex 12, that is a mistery to me!)

50279-agpm-ioreg.png

- If you have another SysDef (e.g. imac13 or macbookpro9/10) you'll have to edit AppleGraphicsPowerManagement.kext/Contents/Info.plist finding the right board ID.
- If you have a discrete graphic card, follow toleda's instruction on Mountain Lion: Native Ivy Bridge CPU and GPU Power Management - part B or my little tips about AGPM edits for nVidia GTX 650 Ti posted here
- If Auto Sleep doesn't work follow this steps:
- open terminal and type "pmset -g assertions" (no quotes)
- if you see something like that
Code:
Assertion status system-wide:
PreventUserIdleDisplaySleep 0
PreventSystemSleep 0
PreventUserIdleSystemSleep 0
ExternalMedia 0
DisableLowPowerBatteryWarnings 0
UserIsActive 0
ApplePushServiceTask 0
BackgroundTask 1

lmediamounted" 
pid 192(helpd): [0x0000000c00000133] 00:03:06 BackgroundTask named: "com.apple.helpd.sdmbuilding"

you just have to type "launchctl unload -w /System/Library/LaunchAgents/com.apple.helpd.plist".
- type again "pmset -g assertions", and when all numbers are 0 you go on
- Reboot.
That worked for me.​

UPDATE #4 --- Update to Mountain Lion 10.8.4 from Combo Update

If you have installed from Mountain Lion 10.8.4 UniBeast flash drive, skip this update, of course!
  • Download Combo Update OSX Mountain Lion 10.8.4
  • make a full backup of your system with Carbon Copy Cloner on a temporary partition
  • make a backup of edited IONetworkingFamily.kext (on flash USB, I'd say)
  • run combo update
  • reboot
  • run multibeast with ONLY audio option (Drivers & Bootloaders/Drivers/Audio/Realtek ALC8xx/With DSDT/ALC898)
  • delete IONetworkingFamily.kext fron /System/Library/Extensions folder (type password)
  • copy edited IONetworkingFamily.kext from your USB flash on desktop or just download it again from here, unzip it and put it on desktop
  • run KextBeast (make sure edited IONetworkingFamily.kext is the ONLY kext on desktop)
  • active trim enabler from Application folder
  • repair permission with Disk Utility, rebuild cache with Kext Wizard
  • reboot
  • delete your temporary partition if everything went well
SIDE NOTE 1: no need to edit AppleGraphicsPowerManagement.kext, it works as it is.
SIDE NOTE 2: if you have an nVidia card, my tip is NOT TO UPDATE until a new release of Cuda Drivers for Mac will be out (at this time Cuda Drivers are not compatible with 10.8.4)
SIDE NOTE 3: the whole installation process can be done with Mountain Lion 10.8.4 Install App (UniBeast method) fresh installation either!
END UPDATE #4

UPDATE #5 --- Fixed Safari/Firefox crashes on Flash Player plug-in YouTube videos, mostly with discrete card

For some reason, YouTube (and others) videos make the system crash, showing flickering images just before the issue, no video at all. I've noticed that happens with discrete card only (most nVidia, can't really say for ATI/AMD), while with onboard HD4000 that doesn't happen. Here's the fix:
  • Choose a web video that gives you this issue (not all videos do that, I believe just tose ones that require Flash Player plug-in)
  • Don't play it, otherwise the system will probably crash (but you already know that, don't you?)
  • Right click on the video and choose settings
  • A window like this will appear
    58866-hw-flash-player.png
  • Simply uncheck Enable Hardware Acceleration (my pic is in italian, I guess you'll find it in your system language)
  • Close and re-open the browser (Safari/Firefox) and check: hopefully that will do the trick.
Done!
Thanks to this post, zuzudom and my friend PL for testing
END UPDATE #5

Well, that's pretty much it, Now you should have a optimized Ivy Bridge Hackintosh with the minimum amount of modified kext. Basically DSDT, SSDT, org.chameleon.Boot.plist and smbios.plist are not affected by the system update, but keep a backup copy of your Extra folder, just in case ;)

Enjoy your fully working Hack Mini! :clap:


Attachments

Giacomoleopardo Asrock files containing:
  • dsdt.aml
  • giacomoleopardo Asrock IOReg
  • AppleIntelCPUPowerManagementInfo.kext
  • CalDigitFastIO.kext not needed anymore
  • CalDigitUSBxHCI.kext not needed anymore
  • IONetworkingFamily.kext
  • org.chameleon.Boot.plist
  • smbios.plist
  • ssdt.aml (cpu ratio 4100 MHz, Max TDP 60 Watt)
  • Patched UEFI Bios 1.80


Credits



 

Attachments

  • Giacomoleopardo Asrock files.zip
    5.6 MB · Views: 419
Last edited by a moderator:
Post reserved to updates, photos and stuff! :D


Updates

UPDATE #1 - April, 17th 2013 --- Added USB Multiplex MaciASL patch in post #2

UPDATE #2 - April 21st 2013 --- Added notes to avoid dsdt editing for Intel Z77 USB 3.0 Controller thanks to GenericUSBXHCI.kext inserted in MultiBeast 5.3.0. See post #2 and #18

UPDATE #3 - May, 31st 2013 --- Replaced all the DSDT editing with ALL-IN-ONE + Graphics DSDT patches by PJALM

UPDATE #4 - June, 7th 2013 --- Updated to OSX Mountain Lion 10.8.4, combo update

UPDATE #5 - June, 15th 2013 --- Fixed Safari/Firefox crashes on Flash Player plug-in YouTube videos, mostly with discrete card

58180-sys-def.png


58181-acd.png

53240-geekbench.png



Here it is: a little timelapse, featured by the great John Coltrane's Quartet in "Countdown". Enjoy!

[video=youtube;oH2cRXmHKdM]http://www.youtube.com/watch?v=oH2cRXmHKdM&feature=youtu.be[/video]​
 
Last edited by a moderator:
Hi Gia,

nice guide again. But it would be nice if you could give the information why the DSDT edits in Post #2 are needed.

With your step by step guide it was possible for me to get speedstep working.

Pay Attention! Remember 1-Core Ratio Limit value, you'll need for Power Management.

That information was the key to solve my problem.

I think i have read in one of your posts that you could wake your Hacki from sleep via logmein. I only can get em awake using WOL, Screen-share or afp over lan.

How you have managed it to get em awake with log me in?

Any advice would be nice. Keep on your hard work...
 
Hi Crystal
I'm sorry, that was my fault! Wake on Lan does work but I tested with iNet WOL app for iPhone. As a matter of fact LogMeIn doesn't allow wake on lan.
Editing work in post n.2 is necessary to make Intel USB 3.0 working properly. I mean with ANY KIND of usb device you plug in (3.0, 2.0, 1.0). Otherwise probably they'll work only with USB 3.0 devices. Please note that Asmedia USB 3.0 ports are not affected by this editing: to make them work you have to install CalDigitFastIO.kext and CalDigitUSBxHCI.kext attached to post n. 3.
I'm glad you finally got Ivy Bridge PM working! That's the spirit of hackintosh: don't give up! :clap:
 
Hi Giaco,

thank you so much for all of your help and provided informations. Now i will see how my system runs in the daily day work.

I will report ....
 
Status
Not open for further replies.
Back
Top