Contribute
Register

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

Status
Not open for further replies.
Update on Premiere Pro CC2018 Export Crash:

Based on @NWSnowBum's recommendation on changing AVX offset in BIOS....it didn't help...only to a certain degree.

So now, using H264 exporter with Hardware Acceleration enabled (which uses Vega) I was able to export further down the timeline, but system still froze.

Anyway, this seems 100% related to Adobe + Apple.

Screen Shot 2018-09-01 at 2.25.51 PM.png
 
I would not know what one would miss in case one opts for Skylake-X/X299. I see only advantages..

Why one should want to exactly reproduce all disadvantages of a real iMacPro?

More unlogical questions of this kind at your side? ;)


I assumed that there could be less patch with native components?

Anyway, I think I will follow your guide with a i9, it seems to be the perfect combo power/cost ;)

Thanks!
 
I assumed that there could be less patch with native components?

Anyway, I think I will follow your guide with a i9, it seems to be the perfect combo power/cost ;)

Thanks!

What are the essential necessary patches for Skylake-X, X299, and Vegas? We can discuss this in detail if you feel like..
 
I guess at least you would have to remove the Vega 64 load table, isn't it? And depending on your slot configuration, you properly might have to adopt ACPI path, ACPI replacements or at least all GPU and HDAU PCI properties different from the Vega 64 or Frontier.

Thanks, @kgp - I'm not entirely sure which part is the load table. My card is in Slot 1 of my Asus X299 Prime Deluxe so I don't think I have to alter the ACPI path, or am I wrong?

Can you please point me to which part of the entry is the load tables? My guess is that it's the part under "PP_PhmSoftPowerPlayTable" ?

Thank you again! I'm looking into a Vega 64 but for now, I just want to see if I can smooth this minor detail out.

Code:
    Scope (_SB.PC02.BR2A)
    {
        Scope (SL05)
        {
            Name (_STA, Zero)  // _STA: Status
        }

        Scope (PEGP)
        {
            Device (EGP0)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Device (GFX0)
                {
                    Name (_ADR, Zero)  // _ADR: Address
                    Name (ATIB, Buffer (0x0100) {})
                    Method (ATIF, 2, Serialized)
                    {
                        If (LEqual (Arg0, Zero))
                        {
                            Return (AF00 ())
                        }

                        If (LEqual (Arg0, One))
                        {
                            Return (AF01 ())
                        }

                        If (LEqual (Arg0, 0x02))
                        {
                            Return (AF02 ())
                        }
                        Else
                        {
                            CreateWordField (ATIB, Zero, SSZE)
                            CreateWordField (ATIB, 0x02, VERN)
                            CreateDWordField (ATIB, 0x04, NMSK)
                            CreateDWordField (ATIB, 0x08, SFUN)
                            Store (Zero, SSZE)
                            Store (Zero, VERN)
                            Store (Zero, NMSK)
                            Store (Zero, SFUN)
                            Return (ATIB)
                        }
                    }

                    Method (AF00, 0, NotSerialized)
                    {
                        CreateWordField (ATIB, Zero, SSZE)
                        CreateWordField (ATIB, 0x02, VERN)
                        CreateDWordField (ATIB, 0x04, NMSK)
                        CreateDWordField (ATIB, 0x08, SFUN)
                        Store (0x0C, SSZE)
                        Store (One, VERN)
                        Store (0x0C, NMSK)
                        Store (0x03, SFUN)
                        Return (ATIB)
                    }

                    Method (AF01, 0, NotSerialized)
                    {
                        CreateWordField (ATIB, Zero, SSZE)
                        CreateDWordField (ATIB, 0x02, VMSK)
                        CreateDWordField (ATIB, 0x06, FLGS)
                        Store (0x0A, SSZE)
                        Store (0x03, VMSK)
                        Store (One, FLGS)
                        Return (ATIB)
                    }

                    Method (AF02, 0, NotSerialized)
                    {
                        CreateWordField (ATIB, Zero, SSZE)
                        CreateDWordField (ATIB, 0x02, PSBI)
                        CreateByteField (ATIB, 0x09, FPWR)
                        CreateByteField (ATIB, 0x0A, FPID)
                        Store (0x0D, SSZE)
                        Store (0x08, PSBI)
                        Store (Zero, FPWR)
                        Store (EGPS, FPID)
                        Return (ATIB)
                    }

                    Method (ABCM, 1, NotSerialized)
                    {
                        Store (Arg0, BRTL)
                        \_SB.PNLF.BSET (Arg0)
                        Return (Zero)
                    }

                    Method (ABCL, 0, NotSerialized)
                    {
                        Return (Package (0x52)
                        {
                            0x50,
                            0x32,
                            One,
                            0x02,
                            0x03,
                            0x04,
                            0x05,
                            0x06,
                            0x07,
                            0x08,
                            0x09,
                            0x0A,
                            0x0B,
                            0x0C,
                            0x0D,
                            0x0E,
                            0x0F,
                            0x10,
                            0x11,
                            0x12,
                            0x13,
                            0x14,
                            0x15,
                            0x16,
                            0x17,
                            0x18,
                            0x19,
                            0x1A,
                            0x1B,
                            0x1C,
                            0x1D,
                            0x1E,
                            0x1F,
                            0x20,
                            0x21,
                            0x22,
                            0x23,
                            0x24,
                            0x25,
                            0x26,
                            0x27,
                            0x28,
                            0x29,
                            0x2A,
                            0x2B,
                            0x2C,
                            0x2D,
                            0x2E,
                            0x2F,
                            0x30,
                            0x31,
                            0x32,
                            0x33,
                            0x34,
                            0x35,
                            0x36,
                            0x37,
                            0x38,
                            0x39,
                            0x3A,
                            0x3B,
                            0x3C,
                            0x3D,
                            0x3E,
                            0x3F,
                            0x40,
                            0x41,
                            0x42,
                            0x43,
                            0x44,
                            0x45,
                            0x46,
                            0x47,
                            0x48,
                            0x49,
                            0x4A,
                            0x4B,
                            0x4C,
                            0x4D,
                            0x4E,
                            0x4F,
                            0x50
                        })
                    }

                    Device (LCD)
                    {
                        Method (_ADR, 0, Serialized)  // _ADR: Address
                        {
                            Return (0x0110)
                        }

                        Method (_BCL, 0, NotSerialized)  // _BCL: Brightness Control Levels
                        {
                            Return (ABCL ())
                        }

                        Method (_BCM, 1, NotSerialized)  // _BCM: Brightness Control Method
                        {
                            ABCM (Arg0)
                        }

                        Method (_BQC, 0, NotSerialized)  // _BQC: Brightness Query Current
                        {
                            Return (BRTL)
                        }
                    }

                    Method (_DOD, 0, Serialized)  // _DOD: Display Output Devices
                    {
                        Return (Package (0x01)
                        {
                            0x0110
                        })
                    }

                    Method (_PRW, 0, NotSerialized)  // _PRW: Power Resources for Wake
                    {
                        Return (Package (0x02)
                        {
                            0x69,
                            0x03
                        })
                    }

                    OperationRegion (PEGH, PCI_Config, Zero, 0x40)
                    Field (PEGH, ByteAcc, NoLock, Preserve)
                    {
                        VID0,   16,
                        DID0,   16,
                        GCMD,   8,
                        Offset (0x24),
                        BAR4,   32
                    }

                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        Store (Package (0x0E)
                            {
                                "built-in",
                                Buffer (One)
                                {
                                     0x00                                          
                                },

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

                                "model",
                                Buffer (0x16)
                                {
                                    "Radeon RX Vega 64 8GB"
                                },

                                "PP_PhmSoftPowerPlayTable",
                                Buffer (One)
                                {
                                    /* 0000 */  0xB6, 0x02, 0x08, 0x01, 0x00, 0x5C, 0x00, 0xE1,
                                    /* 0008 */  0x06, 0x00, 0x00, 0xEE, 0x2B, 0x00, 0x00, 0x1B,
                                    /* 0010 */  0x00, 0x48, 0x00, 0x00, 0x00, 0x80, 0xA9, 0x03,
                                    /* 0018 */  0x00, 0xF0, 0x49, 0x02, 0x00, 0x32, 0x00, 0x08,
                                    /* 0020 */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                    /* 0028 */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01,
                                    /* 0030 */  0x5C, 0x00, 0x4F, 0x02, 0x46, 0x02, 0x94, 0x00,
                                    /* 0038 */  0x9E, 0x01, 0xBE, 0x00, 0x28, 0x01, 0x7A, 0x00,
                                    /* 0040 */  0x8C, 0x00, 0xBC, 0x01, 0x00, 0x00, 0x00, 0x00,
                                    /* 0048 */  0x72, 0x02, 0x00, 0x00, 0x90, 0x00, 0xA8, 0x02,
                                    /* 0050 */  0x6D, 0x01, 0x43, 0x01, 0x97, 0x01, 0xF0, 0x49,
                                    /* 0058 */  0x02, 0x00, 0x71, 0x02, 0x02, 0x02, 0x00, 0x00,
                                    /* 0060 */  0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
                                    /* 0068 */  0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00,
                                    /* 0070 */  0x03, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
                                    /* 0078 */  0x00, 0x00, 0x01, 0x08, 0x20, 0x03, 0x84, 0x03,
                                    /* 0080 */  0xB6, 0x03, 0xE8, 0x03, 0x1A, 0x04, 0x4C, 0x04,
                                    /* 0088 */  0x7E, 0x04, 0xB0, 0x04, 0x01, 0x01, 0x46, 0x05,
                                    /* 0090 */  0x01, 0x01, 0x84, 0x03, 0x00, 0x08, 0x60, 0xEA,
                                    /* 0098 */  0x00, 0x00, 0x00, 0x40, 0x19, 0x01, 0x00, 0x01,
                                    /* 00A0 */  0x80, 0x38, 0x01, 0x00, 0x02, 0xDC, 0x4A, 0x01,
                                    /* 00A8 */  0x00, 0x03, 0x90, 0x5F, 0x01, 0x00, 0x04, 0x00,
                                    /* 00B0 */  0x77, 0x01, 0x00, 0x05, 0x90, 0x91, 0x01, 0x00,
                                    /* 00B8 */  0x06, 0x6C, 0xB0, 0x01, 0x00, 0x07, 0x01, 0x08,
                                    /* 00C0 */  0xD0, 0x4C, 0x01, 0x00, 0x00, 0x00, 0x80, 0x00,
                                    /* 00C8 */  0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x83, 0x01,
                                    /* 00D0 */  0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                    /* 00D8 */  0x00, 0x00, 0x70, 0xA7, 0x01, 0x00, 0x02, 0x00,
                                    /* 00E0 */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88,
                                    /* 00E8 */  0xBC, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
                                    /* 00F0 */  0x00, 0x00, 0x00, 0x00, 0x60, 0xE4, 0x01, 0x00,
                                    /* 00F8 */  0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                    /* 0100 */  0x00, 0x44, 0x23, 0x02, 0x00, 0x05, 0x00, 0x00,
                                    /* 0108 */  0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x58,
                                    /* 0110 */  0x02, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01,
                                    /* 0118 */  0x00, 0x00, 0x00, 0xB8, 0x7C, 0x02, 0x00, 0x07,
                                    /* 0120 */  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
                                    /* 0128 */  0x00, 0x05, 0x60, 0xEA, 0x00, 0x00, 0x00, 0x40,
                                    /* 0130 */  0x19, 0x01, 0x00, 0x00, 0x80, 0x38, 0x01, 0x00,
                                    /* 0138 */  0x00, 0xDC, 0x4A, 0x01, 0x00, 0x00, 0x90, 0x5F,
                                    /* 0140 */  0x01, 0x00, 0x00, 0x00, 0x08, 0x28, 0x6E, 0x00,
                                    /* 0148 */  0x00, 0x00, 0x2C, 0xC9, 0x00, 0x00, 0x01, 0xF8,
                                    /* 0150 */  0x0B, 0x01, 0x00, 0x02, 0x80, 0x38, 0x01, 0x00,
                                    /* 0158 */  0x03, 0x90, 0x5F, 0x01, 0x00, 0x04, 0xF4, 0x91,
                                    /* 0160 */  0x01, 0x00, 0x05, 0xD0, 0xB0, 0x01, 0x00, 0x06,
                                    /* 0168 */  0xC0, 0xD4, 0x01, 0x00, 0x07, 0x00, 0x08, 0x6C,
                                    /* 0170 */  0x39, 0x00, 0x00, 0x00, 0x24, 0x5E, 0x00, 0x00,
                                    /* 0178 */  0x01, 0xFC, 0x85, 0x00, 0x00, 0x02, 0xAC, 0xBC,
                                    /* 0180 */  0x00, 0x00, 0x03, 0x34, 0xD0, 0x00, 0x00, 0x04,
                                    /* 0188 */  0x68, 0x6E, 0x01, 0x00, 0x05, 0x08, 0x97, 0x01,
                                    /* 0190 */  0x00, 0x06, 0xEC, 0xA3, 0x01, 0x00, 0x07, 0x00,
                                    /* 0198 */  0x01, 0x68, 0x3C, 0x01, 0x00, 0x00, 0x01, 0x04,
                                    /* 01A0 */  0x3C, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
                                    /* 01A8 */  0xC3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x38,
                                    /* 01B0 */  0x01, 0x00, 0x02, 0x00, 0x00, 0x24, 0x71, 0x01,
                                    /* 01B8 */  0x00, 0x04, 0x00, 0x00, 0x01, 0x08, 0x00, 0x98,
                                    /* 01C0 */  0x85, 0x00, 0x00, 0x40, 0xB5, 0x00, 0x00, 0x60,
                                    /* 01C8 */  0xEA, 0x00, 0x00, 0x50, 0xC3, 0x00, 0x00, 0x01,
                                    /* 01D0 */  0x80, 0xBB, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00,
                                    /* 01D8 */  0x94, 0x0B, 0x01, 0x00, 0x50, 0xC3, 0x00, 0x00,
                                    /* 01E0 */  0x02, 0x00, 0xE1, 0x00, 0x00, 0x94, 0x0B, 0x01,
                                    /* 01E8 */  0x00, 0x40, 0x19, 0x01, 0x00, 0x50, 0xC3, 0x00,
                                    /* 01F0 */  0x00, 0x03, 0x78, 0xFF, 0x00, 0x00, 0x40, 0x19,
                                    /* 01F8 */  0x01, 0x00, 0x88, 0x26, 0x01, 0x00, 0x50, 0xC3,
                                    /* 0200 */  0x00, 0x00, 0x04, 0x40, 0x19, 0x01, 0x00, 0x80,
                                    /* 0208 */  0x38, 0x01, 0x00, 0x80, 0x38, 0x01, 0x00, 0x50,
                                    /* 0210 */  0xC3, 0x00, 0x00, 0x05, 0x80, 0x38, 0x01, 0x00,
                                    /* 0218 */  0xDC, 0x4A, 0x01, 0x00, 0xDC, 0x4A, 0x01, 0x00,
                                    /* 0220 */  0x50, 0xC3, 0x00, 0x00, 0x06, 0x00, 0x77, 0x01,
                                    /* 0228 */  0x00, 0x00, 0x77, 0x01, 0x00, 0x90, 0x5F, 0x01,
                                    /* 0230 */  0x00, 0x50, 0xC3, 0x00, 0x00, 0x07, 0x90, 0x91,
                                    /* 0238 */  0x01, 0x00, 0x90, 0x91, 0x01, 0x00, 0x00, 0x77,
                                    /* 0240 */  0x01, 0x00, 0x50, 0xC3, 0x00, 0x00, 0x01, 0x18,
                                    /* 0248 */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B,
                                    /* 0250 */  0x14, 0x13, 0xDC, 0x05, 0x60, 0x09, 0x44, 0x00,
                                    /* 0258 */  0x0A, 0x00, 0x54, 0x03, 0x90, 0x01, 0x90, 0x01,
                                    /* 0260 */  0x90, 0x01, 0x90, 0x01, 0x90, 0x01, 0x90, 0x01,
                                    /* 0268 */  0x90, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
                                    /* 0270 */  0x06, 0x31, 0x07, 0xDC, 0x00, 0xDC, 0x00, 0xDC,
                                    /* 0278 */  0x00, 0x2C, 0x01, 0x00, 0x00, 0x59, 0x00, 0x69,
                                    /* 0280 */  0x00, 0x4A, 0x00, 0x4A, 0x00, 0x5F, 0x00, 0x73,
                                    /* 0288 */  0x00, 0x73, 0x00, 0x64, 0x00, 0x40, 0x00, 0x90,
                                    /* 0290 */  0x92, 0x97, 0x60, 0x96, 0x00, 0x90, 0x55, 0x00,
                                    /* 0298 */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                    /* 02A0 */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                    /* 02A8 */  0x02, 0x02, 0xD4, 0x30, 0x00, 0x00, 0x02, 0x10,
                                    /* 02B0 */  0x60, 0xEA, 0x00, 0x00, 0x02, 0x10            
                                },

                                "PP_DisablePowerContainment",
                                Buffer (One)
                                {
                                     0x01                                          
                                },

                                "PP_FuzzyFanControl",
                                Buffer (One)
                                {
                                     0x00                                          
                                },

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

                    Return (0x80000002)
                }

                Device (HDAU)
                {
                    Name (_ADR, One)  // _ADR: Address
                    OperationRegion (HDAH, PCI_Config, Zero, 0x40)
                    Field (HDAH, ByteAcc, NoLock, Preserve)
                    {
                        VID0,   16,
                        DID0,   16
                    }

                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        Store (Package (0x16)
                            {
                                "built-in",
                                Buffer (One)
                                {
                                     0x00                                          
                                },

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

                                "layout-id",
                                Buffer (0x04)
                                {
                                     0x01, 0x00, 0x00, 0x00                        
                                },

                                "name",
                                Buffer (0x1F)
                                {
                                    "Radeon RX Vega 64 8GB HD-Audio"
                                },

                                "model",
                                Buffer (0x1F)
                                {
                                    "Radeon RX Vega 64 8GB HD-Audio"
                                },

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

                                "device-id",
                                Buffer (0x04)
                                {
                                     0xF8, 0xAA, 0x00, 0x00                        
                                },

                                "subsystem-id",
                                Buffer (0x04)
                                {
                                     0xF8, 0xAA, 0x00, 0x00                        
                                },

                                "subsystem-vendor-id",
                                Buffer (0x04)
                                {
                                     0x02, 0x10, 0x00, 0x00                        
                                },

                                "compatible",
                                Buffer (0x0D)
                                {
                                    "pci1002,aaf8"
                                },

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

                    Return (0x80000002)
                }
            }
        }
    }
 

Attachments

  • Screen Shot 2018-09-01 at 7.18.24 PM.png
    Screen Shot 2018-09-01 at 7.18.24 PM.png
    168.7 KB · Views: 134
The Vega 64 load table. But using VegaTab_64.kext. The new SSDT-X299-iMacPro-Vega.aml changes slop 1 to 6
Bios version 1503


Captura de pantalla 2018-09-01 a la(s) 10.32.19 p. m..png
 
Thanks, @kgp - I'm not entirely sure which part is the load table. My card is in Slot 1 of my Asus X299 Prime Deluxe so I don't think I have to alter the ACPI path, or am I wrong?

Can you please point me to which part of the entry is the load tables? My guess is that it's the part under "PP_PhmSoftPowerPlayTable" ?

Yes, with load table I refer to "PP_PhmSoftPowerPlayTable"..
and yes, with a GPU in Slot-1 of the ASUS Prime X299 Deluxe, you don't have to alter the ACPI path or ACPI replacements..
 
The Vega 64 load table. But using VegaTab_64.kext. The new SSDT-X299-iMacPro-Vega.aml changes slop 1 to 6
Bios version 1503


View attachment 348991

Your Vega suddenly shows up in Slot-6 under PCI, because apparently the entire SSDT, or at least the GPU and HDAU part fails to load during boot! Please fix!

My guess: As I explicitly state in my guide, method DTPG has been outsourced from the new Nvidia and Vega system SSDTs. To properly run the new SSDT-X299-ImacPro-Vega.aml, you also need SSDT-DTPG.aml in /EFI/Clover/ACPI/patched/, as explicitly detailed in my guide.

EDIT: I just removed again method PWR from the XHCI PCI device implementation, as apparently it prevents the successful implementation of the system SSDTs during boot. SSDT-X299-iMacPro-Vega.aml and SSDT-X299-iMacPro-Nvidia.aml once more reloaded in post 1 of this thread!
 

Attachments

  • SSDT-X299-iMacPro-Vega.aml.zip
    3.4 KB · Views: 100
  • SSDT-X299-iMacPro-Nvidia.aml.zip
    2.6 KB · Views: 105
Last edited:
@kgp Does this look better? or do you think I should also remove "PP_DisablePowerContainment" and/or "PP_FuzzyFanControl"?

Code:
    Scope (_SB.PC02.BR2A)
    {
        Scope (SL05)
        {
            Name (_STA, Zero)  // _STA: Status
        }

        Scope (PEGP)
        {
            Device (EGP0)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Device (GFX0)
                {
                    Name (_ADR, Zero)  // _ADR: Address
                    Name (ATIB, Buffer (0x0100) {})
                    Method (ATIF, 2, Serialized)
                    {
                        If (LEqual (Arg0, Zero))
                        {
                            Return (AF00 ())
                        }

                        If (LEqual (Arg0, One))
                        {
                            Return (AF01 ())
                        }

                        If (LEqual (Arg0, 0x02))
                        {
                            Return (AF02 ())
                        }
                        Else
                        {
                            CreateWordField (ATIB, Zero, SSZE)
                            CreateWordField (ATIB, 0x02, VERN)
                            CreateDWordField (ATIB, 0x04, NMSK)
                            CreateDWordField (ATIB, 0x08, SFUN)
                            Store (Zero, SSZE)
                            Store (Zero, VERN)
                            Store (Zero, NMSK)
                            Store (Zero, SFUN)
                            Return (ATIB)
                        }
                    }

                    Method (AF00, 0, NotSerialized)
                    {
                        CreateWordField (ATIB, Zero, SSZE)
                        CreateWordField (ATIB, 0x02, VERN)
                        CreateDWordField (ATIB, 0x04, NMSK)
                        CreateDWordField (ATIB, 0x08, SFUN)
                        Store (0x0C, SSZE)
                        Store (One, VERN)
                        Store (0x0C, NMSK)
                        Store (0x03, SFUN)
                        Return (ATIB)
                    }

                    Method (AF01, 0, NotSerialized)
                    {
                        CreateWordField (ATIB, Zero, SSZE)
                        CreateDWordField (ATIB, 0x02, VMSK)
                        CreateDWordField (ATIB, 0x06, FLGS)
                        Store (0x0A, SSZE)
                        Store (0x03, VMSK)
                        Store (One, FLGS)
                        Return (ATIB)
                    }

                    Method (AF02, 0, NotSerialized)
                    {
                        CreateWordField (ATIB, Zero, SSZE)
                        CreateDWordField (ATIB, 0x02, PSBI)
                        CreateByteField (ATIB, 0x09, FPWR)
                        CreateByteField (ATIB, 0x0A, FPID)
                        Store (0x0D, SSZE)
                        Store (0x08, PSBI)
                        Store (Zero, FPWR)
                        Store (EGPS, FPID)
                        Return (ATIB)
                    }

                    Method (ABCM, 1, NotSerialized)
                    {
                        Store (Arg0, BRTL)
                        \_SB.PNLF.BSET (Arg0)
                        Return (Zero)
                    }

                    Method (ABCL, 0, NotSerialized)
                    {
                        Return (Package (0x52)
                        {
                            0x50,
                            0x32,
                            One,
                            0x02,
                            0x03,
                            0x04,
                            0x05,
                            0x06,
                            0x07,
                            0x08,
                            0x09,
                            0x0A,
                            0x0B,
                            0x0C,
                            0x0D,
                            0x0E,
                            0x0F,
                            0x10,
                            0x11,
                            0x12,
                            0x13,
                            0x14,
                            0x15,
                            0x16,
                            0x17,
                            0x18,
                            0x19,
                            0x1A,
                            0x1B,
                            0x1C,
                            0x1D,
                            0x1E,
                            0x1F,
                            0x20,
                            0x21,
                            0x22,
                            0x23,
                            0x24,
                            0x25,
                            0x26,
                            0x27,
                            0x28,
                            0x29,
                            0x2A,
                            0x2B,
                            0x2C,
                            0x2D,
                            0x2E,
                            0x2F,
                            0x30,
                            0x31,
                            0x32,
                            0x33,
                            0x34,
                            0x35,
                            0x36,
                            0x37,
                            0x38,
                            0x39,
                            0x3A,
                            0x3B,
                            0x3C,
                            0x3D,
                            0x3E,
                            0x3F,
                            0x40,
                            0x41,
                            0x42,
                            0x43,
                            0x44,
                            0x45,
                            0x46,
                            0x47,
                            0x48,
                            0x49,
                            0x4A,
                            0x4B,
                            0x4C,
                            0x4D,
                            0x4E,
                            0x4F,
                            0x50
                        })
                    }

                    Device (LCD)
                    {
                        Method (_ADR, 0, Serialized)  // _ADR: Address
                        {
                            Return (0x0110)
                        }

                        Method (_BCL, 0, NotSerialized)  // _BCL: Brightness Control Levels
                        {
                            Return (ABCL ())
                        }

                        Method (_BCM, 1, NotSerialized)  // _BCM: Brightness Control Method
                        {
                            ABCM (Arg0)
                        }

                        Method (_BQC, 0, NotSerialized)  // _BQC: Brightness Query Current
                        {
                            Return (BRTL)
                        }
                    }

                    Method (_DOD, 0, Serialized)  // _DOD: Display Output Devices
                    {
                        Return (Package (0x01)
                        {
                            0x0110
                        })
                    }

                    Method (_PRW, 0, NotSerialized)  // _PRW: Power Resources for Wake
                    {
                        Return (Package (0x02)
                        {
                            0x69,
                            0x03
                        })
                    }

                    OperationRegion (PEGH, PCI_Config, Zero, 0x40)
                    Field (PEGH, ByteAcc, NoLock, Preserve)
                    {
                        VID0,   16,
                        DID0,   16,
                        GCMD,   8,
                        Offset (0x24),
                        BAR4,   32
                    }

                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        Store (Package (0x0E)
                            {
                                "built-in",
                                Buffer (One)
                                {
                                     0x00                                         
                                },

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

                                "model",
                                Buffer (0x16)
                                {
                                    "Radeon RX 560"
                                },

                                "PP_DisablePowerContainment",
                                Buffer (One)
                                {
                                     0x01                                         
                                },

                                "PP_FuzzyFanControl",
                                Buffer (One)
                                {
                                     0x00                                         
                                },

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

                    Return (0x80000002)
                }

                Device (HDAU)
                {
                    Name (_ADR, One)  // _ADR: Address
                    OperationRegion (HDAH, PCI_Config, Zero, 0x40)
                    Field (HDAH, ByteAcc, NoLock, Preserve)
                    {
                        VID0,   16,
                        DID0,   16
                    }

                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        Store (Package (0x16)
                            {
                                "built-in",
                                Buffer (One)
                                {
                                     0x00                                         
                                },

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

                                "layout-id",
                                Buffer (0x04)
                                {
                                     0x07, 0x00, 0x00, 0x00                       
                                },

                                "name",
                                Buffer (0x1F)
                                {
                                    "Radeon RX 560 HD-Audio"
                                },

                                "model",
                                Buffer (0x1F)
                                {
                                    "Radeon RX 560 HD-Audio"
                                },

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

                                "device-id",
                                Buffer (0x04)
                                {
                                     0xE0, 0xAA, 0x00, 0x00                       
                                },

                                "subsystem-id",
                                Buffer (0x04)
                                {
                                     0xE0, 0xAA, 0x00, 0x00                       
                                },

                                "subsystem-vendor-id",
                                Buffer (0x04)
                                {
                                     0x58, 0x14, 0x00, 0x00                       
                                },

                                "compatible",
                                Buffer (0x0D)
                                {
                                    "pci1002,aaf8"
                                },

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

                    Return (0x80000002)
                }
            }
        }
    }
 
@kgp Does this look better? or do you think I should also remove "PP_DisablePowerContainment" and/or "PP_FuzzyFanControl"?

Code:
    Scope (_SB.PC02.BR2A)
    {
        Scope (SL05)
        {
            Name (_STA, Zero)  // _STA: Status
        }

        Scope (PEGP)
        {
            Device (EGP0)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Device (GFX0)
                {
                    Name (_ADR, Zero)  // _ADR: Address
                    Name (ATIB, Buffer (0x0100) {})
                    Method (ATIF, 2, Serialized)
                    {
                        If (LEqual (Arg0, Zero))
                        {
                            Return (AF00 ())
                        }

                        If (LEqual (Arg0, One))
                        {
                            Return (AF01 ())
                        }

                        If (LEqual (Arg0, 0x02))
                        {
                            Return (AF02 ())
                        }
                        Else
                        {
                            CreateWordField (ATIB, Zero, SSZE)
                            CreateWordField (ATIB, 0x02, VERN)
                            CreateDWordField (ATIB, 0x04, NMSK)
                            CreateDWordField (ATIB, 0x08, SFUN)
                            Store (Zero, SSZE)
                            Store (Zero, VERN)
                            Store (Zero, NMSK)
                            Store (Zero, SFUN)
                            Return (ATIB)
                        }
                    }

                    Method (AF00, 0, NotSerialized)
                    {
                        CreateWordField (ATIB, Zero, SSZE)
                        CreateWordField (ATIB, 0x02, VERN)
                        CreateDWordField (ATIB, 0x04, NMSK)
                        CreateDWordField (ATIB, 0x08, SFUN)
                        Store (0x0C, SSZE)
                        Store (One, VERN)
                        Store (0x0C, NMSK)
                        Store (0x03, SFUN)
                        Return (ATIB)
                    }

                    Method (AF01, 0, NotSerialized)
                    {
                        CreateWordField (ATIB, Zero, SSZE)
                        CreateDWordField (ATIB, 0x02, VMSK)
                        CreateDWordField (ATIB, 0x06, FLGS)
                        Store (0x0A, SSZE)
                        Store (0x03, VMSK)
                        Store (One, FLGS)
                        Return (ATIB)
                    }

                    Method (AF02, 0, NotSerialized)
                    {
                        CreateWordField (ATIB, Zero, SSZE)
                        CreateDWordField (ATIB, 0x02, PSBI)
                        CreateByteField (ATIB, 0x09, FPWR)
                        CreateByteField (ATIB, 0x0A, FPID)
                        Store (0x0D, SSZE)
                        Store (0x08, PSBI)
                        Store (Zero, FPWR)
                        Store (EGPS, FPID)
                        Return (ATIB)
                    }

                    Method (ABCM, 1, NotSerialized)
                    {
                        Store (Arg0, BRTL)
                        \_SB.PNLF.BSET (Arg0)
                        Return (Zero)
                    }

                    Method (ABCL, 0, NotSerialized)
                    {
                        Return (Package (0x52)
                        {
                            0x50,
                            0x32,
                            One,
                            0x02,
                            0x03,
                            0x04,
                            0x05,
                            0x06,
                            0x07,
                            0x08,
                            0x09,
                            0x0A,
                            0x0B,
                            0x0C,
                            0x0D,
                            0x0E,
                            0x0F,
                            0x10,
                            0x11,
                            0x12,
                            0x13,
                            0x14,
                            0x15,
                            0x16,
                            0x17,
                            0x18,
                            0x19,
                            0x1A,
                            0x1B,
                            0x1C,
                            0x1D,
                            0x1E,
                            0x1F,
                            0x20,
                            0x21,
                            0x22,
                            0x23,
                            0x24,
                            0x25,
                            0x26,
                            0x27,
                            0x28,
                            0x29,
                            0x2A,
                            0x2B,
                            0x2C,
                            0x2D,
                            0x2E,
                            0x2F,
                            0x30,
                            0x31,
                            0x32,
                            0x33,
                            0x34,
                            0x35,
                            0x36,
                            0x37,
                            0x38,
                            0x39,
                            0x3A,
                            0x3B,
                            0x3C,
                            0x3D,
                            0x3E,
                            0x3F,
                            0x40,
                            0x41,
                            0x42,
                            0x43,
                            0x44,
                            0x45,
                            0x46,
                            0x47,
                            0x48,
                            0x49,
                            0x4A,
                            0x4B,
                            0x4C,
                            0x4D,
                            0x4E,
                            0x4F,
                            0x50
                        })
                    }

                    Device (LCD)
                    {
                        Method (_ADR, 0, Serialized)  // _ADR: Address
                        {
                            Return (0x0110)
                        }

                        Method (_BCL, 0, NotSerialized)  // _BCL: Brightness Control Levels
                        {
                            Return (ABCL ())
                        }

                        Method (_BCM, 1, NotSerialized)  // _BCM: Brightness Control Method
                        {
                            ABCM (Arg0)
                        }

                        Method (_BQC, 0, NotSerialized)  // _BQC: Brightness Query Current
                        {
                            Return (BRTL)
                        }
                    }

                    Method (_DOD, 0, Serialized)  // _DOD: Display Output Devices
                    {
                        Return (Package (0x01)
                        {
                            0x0110
                        })
                    }

                    Method (_PRW, 0, NotSerialized)  // _PRW: Power Resources for Wake
                    {
                        Return (Package (0x02)
                        {
                            0x69,
                            0x03
                        })
                    }

                    OperationRegion (PEGH, PCI_Config, Zero, 0x40)
                    Field (PEGH, ByteAcc, NoLock, Preserve)
                    {
                        VID0,   16,
                        DID0,   16,
                        GCMD,   8,
                        Offset (0x24),
                        BAR4,   32
                    }

                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        Store (Package (0x0E)
                            {
                                "built-in",
                                Buffer (One)
                                {
                                     0x00                                        
                                },

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

                                "model",
                                Buffer (0x16)
                                {
                                    "Radeon RX 560"
                                },

                                "PP_DisablePowerContainment",
                                Buffer (One)
                                {
                                     0x01                                        
                                },

                                "PP_FuzzyFanControl",
                                Buffer (One)
                                {
                                     0x00                                        
                                },

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

                    Return (0x80000002)
                }

                Device (HDAU)
                {
                    Name (_ADR, One)  // _ADR: Address
                    OperationRegion (HDAH, PCI_Config, Zero, 0x40)
                    Field (HDAH, ByteAcc, NoLock, Preserve)
                    {
                        VID0,   16,
                        DID0,   16
                    }

                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        Store (Package (0x16)
                            {
                                "built-in",
                                Buffer (One)
                                {
                                     0x00                                        
                                },

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

                                "layout-id",
                                Buffer (0x04)
                                {
                                     0x07, 0x00, 0x00, 0x00                      
                                },

                                "name",
                                Buffer (0x1F)
                                {
                                    "Radeon RX 560 HD-Audio"
                                },

                                "model",
                                Buffer (0x1F)
                                {
                                    "Radeon RX 560 HD-Audio"
                                },

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

                                "device-id",
                                Buffer (0x04)
                                {
                                     0xE0, 0xAA, 0x00, 0x00                      
                                },

                                "subsystem-id",
                                Buffer (0x04)
                                {
                                     0xE0, 0xAA, 0x00, 0x00                      
                                },

                                "subsystem-vendor-id",
                                Buffer (0x04)
                                {
                                     0x58, 0x14, 0x00, 0x00                      
                                },

                                "compatible",
                                Buffer (0x0D)
                                {
                                    "pci1002,aaf8"
                                },

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

                    Return (0x80000002)
                }
            }
        }
    }

When removing the load table, you can also remove "PP_DisablePowerContainment" and "PP_FuzzyFanControl". In this case your RX 560 will just run in stock configuration.

Also verify with IOREG, that "device-id", "subsystem-id", "subsystem-vendor-id" and "compatible" entries are adopted properly.
 
Following up on my posts #10015 and #10133, I am delighted to report that I have succeeded in building my 7940X based system following @kgp's guide. Thanks a lot for providing these instructions! Had I not stumbled upon this thread, I would probably have gone for one of the lesser peasant systems in the Buyer's Guide instead of going the Skylake route… :mrgreen:

There was some initial concern about the Nvidia GTX1080 Ti. I'm happy to say that it worked OOB without any roadblocks. So far, I've tested it with CAD applications, Lightroom, and Davinci Resolve. No apparent problems in any of those apps yet.

All essential features work: onboard devices, audio, brightness controls, even sleep/wake… I'm still waiting for the Broadcom Wifi/BT card, so I've hooked up my Apple wireless keyboard/mouse via a generic BT4 USB dongle, which works just fine. Idle temperature of the 7940X with the H150i water cooler is around 34°C.

Screen Shot 2018-09-02 at 15.12.03.png

Three minor comments regarding kgp's guide:
  1. In E.2.c), I was unable to set the processor type to Unknown via the Clover Configurator GUI, as the corresponding field only accepts hex values. I did this in the configurator's "Text Mode" then.
  2. I installed the more recent NVidia Web Drivers 387.10.10.10.40.108 instead of …105. Version 108 works fine for me, even though some people reported crashes in other threads.
  3. I built and installed the most recent versions of Clover, AppleALC, Lilu, Whatevergreen and TSCAdjustReset instead of using those provided by kgp. However, according to #10169 these will be updated soon.
Some parts of my system are still a bit rough around the edges, and here's where I have some questions:
  1. Cinebench R15 reports 2922cb and 127fps for my non-overclocked system (UPDATE: performance with "Sync All Cores" as per kgp's settings is 3294cb and 145fps). How does this compare to other 7940X and/or GTX1080Ti builds? While CPU performance seems more or less reasonable to me (especially since I've got only 32GB of budget 2666MHz CL15 RAM), I'm a bit concerned about the GPU as other reports from GTX1080 users all seem to be way higher in the 150fps range.
  2. Geekbench 4 reports 5475 (single core), 49826 (multi core) and 222925 (OpenCL).
  3. I experienced one spurious kernel panic ("timed-out waiting for NMI-ACK") while recording audio with a USB headset. There are several reports of this specific KP which seem to point to some RAM timing issue, but at this point I simply have too little mileage on my system to dig into this further. I do have XMP enabled currently, and have set RAM speed to 2666MHz as listed on the packaging (despite the BIOS originally reporting it as 2133MHz… strange).
  4. Although I followed the instructions to the letter, my PCI definitions don't seem to be right yet. For example, X299 onboard audio works, but is reported like below. Is this supposed to be that way (I had expected it to display as "built-in")?
    Screen Shot 2018-09-02 at 15.11.45.png

  5. I replaced kgp's default 7980 definitions in config.plist with the 7940X snippets, but in IORegistryExplorer the results still look a bit confused – I admit that I haven't studied the purpose of these entries until now, but I thought the point was that everything would be ordered?
    Screen Shot 2018-09-02 at 15.10.46.png
Thanks for your feedback!
 
Last edited:
Status
Not open for further replies.
Back
Top