Contribute
Register

How to build your own iMac Pro [Successful Build/Extended Guide]

Status
Not open for further replies.
Yes, I have and use an LG 5K UltraFine display with this build. Works great - can't always tell if disconnecting and reconnecting the display is going to work, but I have had hot plug working for that before.

Does it sleep ok and do the brightness controls work since the monitor has no menu? Any disconnection issues?

Thanks!!
 
Does it sleep ok and do the brightness controls work since the monitor has no menu? Any disconnection issues?

Keyboard brightness controls work, the audio system and volume buttons work, mine hasn't flickered or disconnected once in a couple of week's use.

Like I said, if you manually pull the cable from the back of your machine and then plug it back in, it's 50/50 as to whether the screen and it's internal USB hubs comes back on, but that's all related to the ThunderBolt 3 effort that's on going. Simple answer: don't unplug the screen while you're working.
 
@kgp & Anyone else who can help!

Good news, I was able to eliminate all of the native pre SSDT patched ACPI Kernel errors for my board.

However one ACPI error remains that's related to SSDT patch:
kernel: (AppleACPIPlatform) ACPI Warning: \_SB.PC02.BR2A.GFX0._DSM:
kernel: (AppleACPIPlatform) Argument #4 type mismatch - Found [Buffer], ACPI requires [Package]
kernel: (AppleACPIPlatform) (20160930/nsarguments-169)

I assume nsarguments-169) is line 169 of the SSDT Patch which is:
167: Device (GFX0)
168: {
169:Name (_ADR, Zero) // _ADR: Address

I will attach my SSDT and IOReg dump of GFX0, thanks!

I am not really the ssdt specialist, but I would expect >= 4 arguments in the related line.
(guessing that the arguments start with Argument 0 I believe it should be >= 5 arguments and the 5th argument is creating the trouble)

If I delete all the comments MaciASL is inserting I end up in :
167: Buffer (0x0A)
168: {
169: "onboard-2"
170: },
I guess not really what we are looking for
The closest I can see right now, when I delete all the external declarations is:
165: DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
166: Return (Local0)
167: }
168: }
169:
there the call of DTGP is asking for 5 arguments. Local0 should be a package.

Again: I am only guessing!!
Can it be that there is some were a bracket wrong!?

All the Best
Frank
 
Has anyone been able to get HDCP working with Vega FE? Amazon prime turns off HD since it can’t find HDCP.

Monitors are 27” Apple Cinema Displays (non TB) and they support HDCP.

Shiki doesn’t seem to work.
 
@taylorsyn
The solution is relatively simple. I do not understand the desire to define everything in the SSDT in "Devices", the "Scopes" fulfill their purpose. "Scopes" are not only to be used for "directories" (in the sense of order and structure), but are "extensions" for already existing "devices". I would recommend the renaming of "Devices" in the SSDT only in exceptions, much easier and more powerful with Clover's "ACPI-Patches", since they perform all further linking in all ACPIs, including the other internal SSDTs.

So let's take a closer look at "\ _SB.PC02.BR2A" (in the DSDT). Here we find first the first "Device" name "SL05". Here is the graphics card connected.

Code:
                Device (SL05)
                {
                    Name (_ADR, 0xFFFF)  // _ADR: Address
                }

In the DSDT we find much further down another device named "PEGP". This device is much better suited for our graphics card, so it has defined ASUS.

Code:
    Scope (_SB.PC02.BR2A)
    {
        OperationRegion (PEGR, PCI_Config, 0xC0, 0x30)
        Field (PEGR, DWordAcc, NoLock, Preserve)
        {
            Offset (0x02),
            PSTS,   1,
            Offset (0x2C),
            GENG,   1,
                ,   1,
            PMEG,   1
        }

        Method (HPME, 0, Serialized)
        {
            Store (One, PSTS)
        }

        Device (PEGP)
        {
            Name (_ADR, Zero)  // _ADR: Address
            OperationRegion (PCIS, PCI_Config, Zero, 0x0100)
            Field (PCIS, AnyAcc, NoLock, Preserve)
            {
                PVID,   16,
                PDID,   16
            }

            Method (_PRW, 0, NotSerialized)  // _PRW: Power Resources for Wake
            {
                Return (GPRW (0x69, 0x04))
            }
        }
    }

Unfortunately macOS likes to use the first available device, in this case "SL05". So what is to be done? We use a Clover ACPI patch to disable "SL05".

Code:
                <dict>
                    <key>Comment</key>
                    <string>SL05._ADR to XXXX.XADR</string>
                    <key>Disabled</key>
                    <false/>
                    <key>Find</key>
                    <data>
                    U0wwNQhfQURS
                    </data>
                    <key>Replace</key>
                    <data>
                    WFhYWAhYQURS
                    </data>
                </dict>

If you have a problem with the name "PEGP", you simply take another Clover ACPI patch to rename "PEGP" to "GFX0".

Code:
                <dict>
                    <key>Comment</key>
                    <string>PEGP to GFX0</string>
                    <key>Disabled</key>
                    <false/>
                    <key>Find</key>
                    <data>
                    UEVHUA==
                    </data>
                    <key>Replace</key>
                    <data>
                    R0ZYMA==
                    </data>
                </dict>

In the SSDT, "GFX0" is now further defined via a "scope". Only the still missing device "HDAU" is additionally defined as "Device".

Code:
    Scope (\_SB.PC02.BR2A)
    {
        Scope (GFX0)
        {
            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                Store (Package ()
                    {
                        "built-in",
                        Buffer (One)
                        {
                             0x00                                          
                        },

                        "device-id",
                        Buffer (0x04)
                        {
                             0x06, 0x1B, 0x00, 0x00                        
                        },

                        "hda-gfx",
                        Buffer (0x0A)
                        {
                            "onboard-2"
                        },

                        "AAPL,slot-name",
                        Buffer (0x07)
                        {
                            "Slot-1"
                        },

                        "@0,connector-type",
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                        
                        },

                        "@1,connector-type",
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                        
                        },

                        "@2,connector-type",
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                        
                        },

                        "@3,connector-type",
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                        
                        },

                        "@4,connector-type",
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                        
                        },

                        "@5,connector-type",
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                        
                        }
                    }, Local0)
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }
        }

        Device (HDAU)
        {
            Name (_ADR, One)  // _ADR: Address
            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                Store (Package (0x0C)
                    {
                        "built-in",
                        Buffer (One)
                        {
                             0x00                                          
                        },

                        "device-id",
                        Buffer (0x04)
                        {
                             0xEF, 0x10, 0x00, 0x00                        
                        },

                        "AAPL,slot-name",
                        Buffer (0x07)
                        {
                            "Slot-1"
                        },

                        "device_type",
                        Buffer (0x16)
                        {
                            "Multimedia Controller"
                        },

                        "name",
                        Buffer (0x1D)
                        {
                            "NVIDIA High Definition Audio"
                        },

                        "hda-gfx",
                        Buffer (0x0A)
                        {
                            "onboard-2"
                        }
                    }, Local0)
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }
        }
    }
 
Further advanced 10GB LAN Implementations

After already successfully implementing the ASUS XG-C100C AQC107 PCIe x4 10GBit Ethernet Adapters few weeks ago

IMG_0430.JPG

on both my Skylake-X/X299 and Broadwell-E/X99 iMac Pro Systems, both systems now have been successfully extended by one Small-Tree P2EI0G-2T 2-Port 10GB LAN PCIe Adapter (Skylake-X/X299) and one Intel X540-T1 single port 10GB LAN PCIe Adapter (Broadwell-E/X99).

While the Small-Tree P2EI0G-2T runs OoB with the Small-Tree 10GB macOS 10.13 driver, the firmware of the Intel X540-T1 required some Ubuntu modding, primarily to it's system implementation. After the Ubuntu firmware modding, also the latter adaptor is fully compatible with the Small-Tree 10GB macOS 10.13 driver.


IMG_0406.JPG


P2EI0G-2T:

Screen Shot 2018-05-25 at 23.16.44.png


Screen Shot 2018-05-25 at 23.29.27.png


Screen Shot 2018-05-25 at 23.17.40.png


Intel X540-T1:

Screen Shot 2018-05-25 at 21.53.14.png


Screen Shot 2018-05-25 at 23.55.33.png


Screen Shot 2018-05-25 at 21.55.15.png


As already mentioned in the previous post and along my guide, all 10GB NICs connect to a NetGear ProSave XS508M 8-port 10GBit switch,

IMG_0432.jpg


which further connects to a 1x QNAP TS-431X2 Quad-core 4-Bay NAS tower with Built-in 10GbE SFP+ Port.

IMG_0412.jpg


The QNAP NAS Tower finally harbours 4x 12TB Seagate IronWolf HDD NAS Drives.

IMG_0407.JPG


Tests with RAID-5 and RAID-0 configurations are ongoing.

Screen Shot 2018-05-26 at 11.17.56.png

Screen Shot 2018-05-26 at 11.17.10.png


Screen Shot 2018-05-26 at 20.32.31.png


My deepest gratefulness and appreciation to @gxsolace for providing me with free

1x Small-Tree P2EI0G-2T
1x Intel X540-T1
4x 12 TB Seagate IronWolf

factory samples and for helping me with the initial setup/modding.


You are simply awesome!


kgp.png
 
Last edited:
Further advanced 10GB LAN Implementations

After already successfully implementing the ASUS XG-C100C AQC107 PCIe x4 10GBit Ethernet Adapters few weeks ago

View attachment 332797

on both my Skylake-X/X299 and Broadwell-E/X99 iMac Pro Systems, both systems now have been successfully extended by one Small-Tree P2EI0G-2T 2-Port 10GB LAN PCIe Adapter (Skylake-X/X299) and one Intel X540-T1 single port 10GB LAN PCIe Adapter (Broadwell-E/X99).

While the Small-Tree P2EI0G-2T runs OoB with the Small-Tree 10GB macOS 10.13 driver, the firmware of the Intel X540-T1 required some Ubuntu modding, primarily to it's system implementation. After the Ubuntu firmware modding, also the latter adaptor is fully compatible with the Small-Tree 10GB macOS 10.13 driver.


View attachment 332799

P2EI0G-2T:

View attachment 332801

View attachment 332800

View attachment 332802

Intel X540-T1:

View attachment 332803

View attachment 332806

View attachment 332807

As already mentioned in the previous post and along my guide, all 10GB NICs connect to a NetGear ProSave XS508M 8-port 10GBit switch,

View attachment 332812

which further connects to a 1x QNAP TS-431X2 Quad-core 4-Bay NAS tower with Built-in 10GbE SFP+ Port.

View attachment 332813

The QNAP NAS Tower finally harbours 4x 12TB Seagate IronWolf HDD NAS Drives.

View attachment 332814

Tests with RAID-5 and RAID-0 configurations are ongoing.

My deepest gratefulness and appreciation to @gxsolace for providing me with free

1x Small-Tree P2EI0G-2T
1x Intel X540-T1
4x 12 TB Seagate IronWolf

factory samples and for helping me with the initial setup/modding.


You are simply awesome!


View attachment 332816


RAID 5 with 4 x 12GB drives... Not good. Use RAID 10 if you can.
 
@taylorsyn
The solution is relatively simple. I do not understand the desire to define everything in the SSDT in "Devices", the "Scopes" fulfill their purpose. "Scopes" are not only to be used for "directories" (in the sense of order and structure), but are "extensions" for already existing "devices". I would recommend the renaming of "Devices" in the SSDT only in exceptions, much easier and more powerful with Clover's "ACPI-Patches", since they perform all further linking in all ACPIs, including the other internal SSDTs.

So let's take a closer look at "\ _SB.PC02.BR2A" (in the DSDT). Here we find first the first "Device" name "SL05". Here is the graphics card connected.

Code:
                Device (SL05)
                {
                    Name (_ADR, 0xFFFF)  // _ADR: Address
                }

In the DSDT we find much further down another device named "PEGP". This device is much better suited for our graphics card, so it has defined ASUS.

Code:
    Scope (_SB.PC02.BR2A)
    {
        OperationRegion (PEGR, PCI_Config, 0xC0, 0x30)
        Field (PEGR, DWordAcc, NoLock, Preserve)
        {
            Offset (0x02),
            PSTS,   1,
            Offset (0x2C),
            GENG,   1,
                ,   1,
            PMEG,   1
        }

        Method (HPME, 0, Serialized)
        {
            Store (One, PSTS)
        }

        Device (PEGP)
        {
            Name (_ADR, Zero)  // _ADR: Address
            OperationRegion (PCIS, PCI_Config, Zero, 0x0100)
            Field (PCIS, AnyAcc, NoLock, Preserve)
            {
                PVID,   16,
                PDID,   16
            }

            Method (_PRW, 0, NotSerialized)  // _PRW: Power Resources for Wake
            {
                Return (GPRW (0x69, 0x04))
            }
        }
    }

Unfortunately macOS likes to use the first available device, in this case "SL05". So what is to be done? We use a Clover ACPI patch to disable "SL05".

Code:
                <dict>
                    <key>Comment</key>
                    <string>SL05._ADR to XXXX.XADR</string>
                    <key>Disabled</key>
                    <false/>
                    <key>Find</key>
                    <data>
                    U0wwNQhfQURS
                    </data>
                    <key>Replace</key>
                    <data>
                    WFhYWAhYQURS
                    </data>
                </dict>

If you have a problem with the name "PEGP", you simply take another Clover ACPI patch to rename "PEGP" to "GFX0".

Code:
                <dict>
                    <key>Comment</key>
                    <string>PEGP to GFX0</string>
                    <key>Disabled</key>
                    <false/>
                    <key>Find</key>
                    <data>
                    UEVHUA==
                    </data>
                    <key>Replace</key>
                    <data>
                    R0ZYMA==
                    </data>
                </dict>

In the SSDT, "GFX0" is now further defined via a "scope". Only the still missing device "HDAU" is additionally defined as "Device".

Code:
    Scope (\_SB.PC02.BR2A)
    {
        Scope (GFX0)
        {
            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                Store (Package ()
                    {
                        "built-in",
                        Buffer (One)
                        {
                             0x00                                        
                        },

                        "device-id",
                        Buffer (0x04)
                        {
                             0x06, 0x1B, 0x00, 0x00                      
                        },

                        "hda-gfx",
                        Buffer (0x0A)
                        {
                            "onboard-2"
                        },

                        "AAPL,slot-name",
                        Buffer (0x07)
                        {
                            "Slot-1"
                        },

                        "@0,connector-type",
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                      
                        },

                        "@1,connector-type",
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                      
                        },

                        "@2,connector-type",
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                      
                        },

                        "@3,connector-type",
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                      
                        },

                        "@4,connector-type",
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                      
                        },

                        "@5,connector-type",
                        Buffer (0x04)
                        {
                             0x00, 0x08, 0x00, 0x00                      
                        }
                    }, Local0)
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }
        }

        Device (HDAU)
        {
            Name (_ADR, One)  // _ADR: Address
            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                Store (Package (0x0C)
                    {
                        "built-in",
                        Buffer (One)
                        {
                             0x00                                        
                        },

                        "device-id",
                        Buffer (0x04)
                        {
                             0xEF, 0x10, 0x00, 0x00                      
                        },

                        "AAPL,slot-name",
                        Buffer (0x07)
                        {
                            "Slot-1"
                        },

                        "device_type",
                        Buffer (0x16)
                        {
                            "Multimedia Controller"
                        },

                        "name",
                        Buffer (0x1D)
                        {
                            "NVIDIA High Definition Audio"
                        },

                        "hda-gfx",
                        Buffer (0x0A)
                        {
                            "onboard-2"
                        }
                    }, Local0)
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }
        }
    }


I have since changed by SSDT to the same as included in the guide "SSDT-X299-iMacPro.aml" as well as the the patches in config.plist. I am still getting the ACPI Warnings:

kernel: (AppleACPIPlatform) ACPI Warning: \_SB.PC02.BR2A.GFX0._DSM:

kernel: (AppleACPIPlatform) Argument #4 type mismatch - Found [Buffer], ACPI requires [Package]

kernel: (AppleACPIPlatform) Argument #4 type mismatch - Found [Buffer], ACPI requires [Package]

kernel: (AppleACPIPlatform) (20160930/nsarguments-169)

ernel: (AppleACPIPlatform) (20160930/nsarguments-169)


I did this guide already on an MSI x299 and an Asus x299 and did not have this problem! I am stumped as the Graphics card shows up ok under IOReg and PCI devices (see attached screen shot)
 

Attachments

  • Screen Shot 2018-05-25 at 10.24.46 PM.png
    Screen Shot 2018-05-25 at 10.24.46 PM.png
    122.9 KB · Views: 129
I have since changed by SSDT to the same as included in the guide "SSDT-X299-iMacPro.aml" as well as the the patches in config.plist. I am still getting the ACPI Warnings:

kernel: (AppleACPIPlatform) ACPI Warning: \_SB.PC02.BR2A.GFX0._DSM:

kernel: (AppleACPIPlatform) Argument #4 type mismatch - Found [Buffer], ACPI requires [Package]

kernel: (AppleACPIPlatform) Argument #4 type mismatch - Found [Buffer], ACPI requires [Package]

kernel: (AppleACPIPlatform) (20160930/nsarguments-169)

ernel: (AppleACPIPlatform) (20160930/nsarguments-169)


I did this guide already on an MSI x299 and an Asus x299 and did not have this problem! I am stumped as the Graphics card shows up ok under IOReg and PCI devices (see attached screen shot)

No PCI drivers for HDAU or HDEF are loaded! Do you use the correct HDAU kext patch for your GPU? Also likely, you have to adopt the SSDT as you don't use the ASUS Prime X299 Deluxe. Is your onboard analogue audio else implemented successfully? Which audio method do you use? AppleALC?
 
Last edited:
No PCI drivers for HDAU or HDEF are loaded! Do you use the correct HDAU kext patch for your GPU? Also likely, you have to adopt the SSDT as you don't use the ASUS Prime X299 Deluxe. Is your onboard analogue audio else implemented successfully? Which audio method do you use? AppleALC?

Well even with Voodoohda installed and PCI drivers for HDAU and HDEF loaded the ACPI error remains.

I used the Nvidia patch on page 1 same as I used before with the same card and no issue.

Yes the SSDT is adopted for my board, I confirmed everything with IOreg
 
Status
Not open for further replies.
Back
Top