Contribute
Register

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

Status
Not open for further replies.
Adaptation of the TB SSDT device implementation for TB implementations different from the ASUS TBEX 3 (e.g. for two-port TB solutions)

After populating also DSB3 and DSB4, the respective TB SSDT implementation should now also be valid for TB solutions different from the ASUS TBEX 3 (also for two-port TB solutions). Note however that the TBEX 3 uses PCI lanes directly connected with the CPU, whereas other TB solutions might use PCH lanes. The latter TB implementations might need a TB device connected at boot to be recognised by the system, although hot plug should work subsequently also in this case after removing the THB_C cable.

Thanks to @LeleTuratti for all fruitful discussions and for testing the new TB SSDT implementation on his Z370.

The new SSDT-X299-iMacPro.aml is attached below and has also been implemented in the guide (originating post of this thread).

Code:
/*
* Intel ACPI Component Architecture
* AML/ASL+ Disassembler version 20160422-64(RM)
* Copyright (c) 2000 - 2016 Intel Corporation
*
* Disassembling to non-symbolic legacy ASL operators
*
* Disassembly of iASLYP2Xgb.aml, Thu Apr 26 19:47:44 2018
*
* Original Table Header:
*     Signature        "SSDT"
*     Length           0x0000230F (8975)
*     Revision         0x01
*     Checksum         0xB0
*     OEM ID           "NICO"
*     OEM Table ID     "X299"
*     OEM Revision     0x00000000 (0)
*     Compiler ID      "INTL"
*     Compiler Version 0x20160422 (538313762)
*/
DefinitionBlock ("", "SSDT", 1, "NICO", "X299", 0x00000000)
{
    External (_SB_.PC01.BR1A, DeviceObj)    // (from opcode)
    External (_SB_.PC01.BR1A.PEGP, DeviceObj)    // (from opcode)
    External (_SB_.PC01.BR1A.SL01, DeviceObj)    // (from opcode)
    External (_SB_.PC01.BR1A.UPSB, DeviceObj)    // (from opcode)
    External (_SB_.PC02.BR2A, DeviceObj)    // (from opcode)
    External (_SB_.PC02.BR2A.GFX0, DeviceObj)    // (from opcode)
    External (_SB_.PC03.BR3D.ARPT, DeviceObj)    // (from opcode)
    External (_SB_.PCI0.ETH0, DeviceObj)    // (from opcode)
    External (_SB_.PCI0.HDEF, DeviceObj)    // (from opcode)
    External (_SB_.PCI0.PMCR, DeviceObj)    // (from opcode)
    External (_SB_.PCI0.RP01.PXSX, DeviceObj)    // (from opcode)
    External (_SB_.PCI0.RP01.XHC2, DeviceObj)    // (from opcode)
    External (_SB_.PCI0.RP02.ETH1, DeviceObj)    // (from opcode)
    External (_SB_.PCI0.RP05.PXSX, DeviceObj)    // (from opcode)
    External (_SB_.PCI0.RP05.XHC3, DeviceObj)    // (from opcode)
    External (_SB_.PCI0.RP07.PXSX, DeviceObj)    // (from opcode)
    External (_SB_.PCI0.RP07.XHC4, DeviceObj)    // (from opcode)
    External (_SB_.PCI0.RP09.ANS2, DeviceObj)    // (from opcode)
    External (_SB_.PCI0.RP09.PXSX, DeviceObj)    // (from opcode)
    External (_SB_.PCI0.SAT1, DeviceObj)    // (from opcode)
    External (_SB_.PCI0.XHCI, DeviceObj)    // (from opcode)
    External (GFX0, DeviceObj)    // (from opcode)
    External (GPRW, MethodObj)    // 2 Arguments (from opcode)
    External (OSDW, MethodObj)    // 0 Arguments (from opcode)
    External (OSYS, UnknownObj)    // (from opcode)
    External (PEGP, DeviceObj)    // (from opcode)
    External (SL01, DeviceObj)    // (from opcode)
    External (UPSB, DeviceObj)    // (from opcode)

    Scope (\_SB.PCI0.HDEF)
    {
        Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
        {
            Store (Package (0x16)
                {
                    "AAPL,slot-name",
                    Buffer (0x09)
                    {
                        "Built In"
                    },

                    "model",
                    Buffer (0x1C)
                    {
                        "Realtek ALC S1220A HD Audio"
                    },

                    "name",
                    Buffer (0x27)
                    {
                        "Realtek ALC S1220A HD Audio Controller"
                    },

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

                    "device_type",
                    Buffer (0x14)
                    {
                        "HD-Audio-Controller"
                    },

                    "device-id",
                    Buffer (0x04)
                    {
                         0xF0, 0xA2, 0x00, 0x00                        
                    },

                    "compatible",
                    Buffer (0x0D)
                    {
                        "pci8086,0C0C"
                    },

                    "MaximumBootBeepVolume",
                    Buffer (One)
                    {
                         0xEE                                          
                    },

                    "MaximumBootBeepVolumeAlt",
                    Buffer (One)
                    {
                         0xEE                                          
                    },

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

                    "PinConfigurations",
                    Buffer (Zero) {}
                }, Local0)
            DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
            Return (Local0)
        }
    }

    Scope (_SB.PC02.BR2A)
    {
        Scope (GFX0)
        {
            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))
            }

            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                Store (Package (0x14)
                    {
                        "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)
            }
        }
    }

    Scope (\_SB.PCI0.PMCR)
    {
        Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
        {
            Store (Package (0x0E)
                {
                    "AAPL,slot-name",
                    Buffer (0x09)
                    {
                        "Built In"
                    },

                    "model",
                    Buffer (0x1E)
                    {
                        "Intel X299 Series Chipset PMC"
                    },

                    "name",
                    Buffer (0x0A)
                    {
                        "Intel PMC"
                    },

                    "device-id",
                    Buffer (0x04)
                    {
                         0xA1, 0xA2, 0x00, 0x00                        
                    },

                    "device_type",
                    Buffer (0x0F)
                    {
                        "PMC-Controller"
                    },

                    "built-in",
                    Buffer (One)
                    {
                         0x00                                          
                    },

                    "compatible",
                    Buffer (0x0D)
                    {
                        "pci8086,a2a1"
                    }
                }, Local0)
            DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
            Return (Local0)
        }
    }

    Device (_SB.USBX)
    {
        Name (_ADR, Zero)  // _ADR: Address
        Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
        {
            If (LNot (Arg2))
            {
                Return (Buffer (One)
                {
                     0x03                                          
                })
            }

            Return (Package (0x08)
            {
                "kUSBSleepPortCurrentLimit",
                0x0834,
                "kUSBSleepPowerSupply",
                0x13EC,
                "kUSBWakePortCurrentLimit",
                0x0834,
                "kUSBWakePowerSupply",
                0x13EC
            })
        }
    }

    Scope (\_SB.PCI0.XHCI)
    {
        Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
        {
            Store (Package (0x1B)
                {
                    "AAPL,slot-name",
                    Buffer (0x09)
                    {
                        "Built In"
                    },

                    "built-in",
                    Buffer (One)
                    {
                         0x00                                          
                    },

                    "device-id",
                    Buffer (0x04)
                    {
                         0xAF, 0xA2, 0x00, 0x00                        
                    },

                    "name",
                    Buffer (0x34)
                    {
                        "ASMedia / Intel X299 Series Chipset XHCI Controller"
                    },

                    "model",
                    Buffer (0x34)
                    {
                        "ASMedia ASM1074 / Intel X299 Series Chipset USB 3.0"
                    },

                    "AAPL,current-available",
                    0x0834,
                    "AAPL,current-extra",
                    0x0A8C,
                    "AAPL,current-in-sleep",
                    0x0A8C,
                    "AAPL,max-port-current-in-sleep",
                    0x0834,
                    "AAPL,device-internal",
                    Zero,
                    "AAPL,clock-id",
                    Buffer (One)
                    {
                         0x01                                          
                    },

                    "AAPL,root-hub-depth",
                    0x1A,
                    "AAPL,XHC-clock-id",
                    One,
                    Buffer (One)
                    {
                         0x00                                          
                    }
                }, Local0)
            DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
            Return (Local0)
        }
    }

    Device (\_SB.PCI0.RP01.XHC2)
    {
        Name (_ADR, Zero)  // _ADR: Address
        Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
        {
            If (LEqual (Arg2, Zero))
            {
                Return (Buffer (One)
                {
                     0x03                                          
                })
            }

            Store (Package (0x1B)
                {
                    "AAPL,slot-name",
                    Buffer (0x09)
                    {
                        "Built In"
                    },

                    "built-in",
                    Buffer (One)
                    {
                         0x00                                          
                    },

                    "device-id",
                    Buffer (0x04)
                    {
                         0x42, 0x21, 0x00, 0x00                        
                    },

                    "name",
                    Buffer (0x17)
                    {
                        "ASMedia XHC Controller"
                    },

                    "model",
                    Buffer (0x2F)
                    {
                        "ASMedia ASM3142 #1 1x USB 3.1 Type-C Internal "
                    },

                    "AAPL,current-available",
                    0x0834,
                    "AAPL,current-extra",
                    0x0A8C,
                    "AAPL,current-in-sleep",
                    0x0A8C,
                    "AAPL,max-port-current-in-sleep",
                    0x0834,
                    "AAPL,device-internal",
                    Zero,
                    "AAPL,clock-id",
                    Buffer (One)
                    {
                         0x01                                          
                    },

                    "AAPL,root-hub-depth",
                    0x1A,
                    "AAPL,XHC-clock-id",
                    One,
                    Buffer (One)
                    {
                         0x00                                          
                    }
                }, Local0)
            DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
            Return (Local0)
        }
    }

    Name (_SB.PCI0.RP01.PXSX._STA, Zero)  // _STA: Status
    Device (\_SB.PCI0.RP05.XHC3)
    {
        Name (_ADR, Zero)  // _ADR: Address
        Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
        {
            If (LEqual (Arg2, Zero))
            {
                Return (Buffer (One)
                {
                     0x03                                          
                })
            }

            Store (Package (0x1B)
                {
                    "AAPL,slot-name",
                    Buffer (0x09)
                    {
                        "Built In"
                    },

                    "built-in",
                    Buffer (One)
                    {
                         0x00                                          
                    },

                    "device-id",
                    Buffer (0x04)
                    {
                         0x42, 0x21, 0x00, 0x00                        
                    },

                    "name",
                    Buffer (0x17)
                    {
                        "ASMedia XHC Controller"
                    },

                    "model",
                    Buffer (0x2E)
                    {
                        "ASMedia ASM3142 #2 2x USB 3.1 Type-A External"
                    },

                    "AAPL,current-available",
                    0x0834,
                    "AAPL,current-extra",
                    0x0A8C,
                    "AAPL,current-in-sleep",
                    0x0A8C,
                    "AAPL,max-port-current-in-sleep",
                    0x0834,
                    "AAPL,device-internal",
                    Zero,
                    "AAPL,clock-id",
                    Buffer (One)
                    {
                         0x01                                          
                    },

                    "AAPL,root-hub-depth",
                    0x1A,
                    "AAPL,XHC-clock-id",
                    One,
                    Buffer (One)
                    {
                         0x00                                          
                    }
                }, Local0)
            DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
            Return (Local0)
        }
    }

    Name (_SB.PCI0.RP05.PXSX._STA, Zero)  // _STA: Status
    Device (\_SB.PCI0.RP07.XHC4)
    {
        Name (_ADR, Zero)  // _ADR: Address
        Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
        {
            If (LEqual (Arg2, Zero))
            {
                Return (Buffer (One)
                {
                     0x03                                          
                })
            }

            Store (Package (0x1B)
                {
                    "AAPL,slot-name",
                    Buffer (0x09)
                    {
                        "Built In"
                    },

                    "built-in",
                    Buffer (One)
                    {
                         0x00                                          
                    },

                    "device-id",
                    Buffer (0x04)
                    {
                         0x42, 0x21, 0x00, 0x00                        
                    },

                    "name",
                    Buffer (0x17)
                    {
                        "ASMedia XHC Controller"
                    },

                    "model",
                    Buffer (0x4A)
                    {
                        "ASMedia ASM3142 #3 1x USB 3.1 Type-A / ASM1543 1x USB 3.1 Type-C External"
                    },

                    "AAPL,current-available",
                    0x0834,
                    "AAPL,current-extra",
                    0x0A8C,
                    "AAPL,current-in-sleep",
                    0x0A8C,
                    "AAPL,max-port-current-in-sleep",
                    0x0834,
                    "AAPL,device-internal",
                    Zero,
                    "AAPL,clock-id",
                    Buffer (One)
                    {
                         0x01                                          
                    },

                    "AAPL,root-hub-depth",
                    0x1A,
                    "AAPL,XHC-clock-id",
                    One,
                    Buffer (One)
                    {
                         0x00                                          
                    }
                }, Local0)
            DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
            Return (Local0)
        }
    }

    Name (_SB.PCI0.RP07.PXSX._STA, Zero)  // _STA: Status
    Device (\_SB.PCI0.RP09.ANS2)
    {
        Name (_ADR, Zero)  // _ADR: Address
        Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
        {
            If (LEqual (Arg2, Zero))
            {
                Return (Buffer (One)
                {
                     0x03                                          
                })
            }

            Store (Package (0x08)
                {
                    "AAPL,slot-name",
                    Buffer (0x09)
                    {
                        "Built In"
                    },

                    "built-in",
                    Buffer (One)
                    {
                         0x00                                          
                    },

                    "name",
                    Buffer (0x14)
                    {
                        "AppleANS2Controller"
                    },

                    "model",
                    Buffer (0x12)
                    {
                        "Apple SSD AP1024M"
                    }
                }, Local0)
            DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
            Return (Local0)
        }
    }

    Name (_SB.PCI0.RP09.PXSX._STA, Zero)  // _STA: Status
    Scope (\_SB.PCI0.SAT1)
    {
        Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
        {
            Store (Package (0x0C)
                {
                    "AAPL,slot-name",
                    Buffer (0x09)
                    {
                        "Built In"
                    },

                    "built-in",
                    Buffer (One)
                    {
                         0x00                                          
                    },

                    "name",
                    Buffer (0x16)
                    {
                        "Intel AHCI Controller"
                    },

                    "model",
                    Buffer (0x1F)
                    {
                        "Intel X299 Series Chipset SATA"
                    },

                    "device_type",
                    Buffer (0x15)
                    {
                        "AHCI SATA Controller"
                    },

                    "device-id",
                    Buffer (0x04)
                    {
                         0x82, 0xA2, 0x00, 0x00                        
                    }
                }, Local0)
            DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
            Return (Local0)
        }
    }

    Scope (\_SB.PCI0.ETH0)
    {
        Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
        {
            Store (Package (0x10)
                {
                    "AAPL,slot-name",
                    Buffer (0x09)
                    {
                        "Built In"
                    },

                    "built-in",
                    Buffer (One)
                    {
                         0x00                                          
                    },

                    "name",
                    Buffer (0x16)
                    {
                        "Intel I219V2 Ethernet"
                    },

                    "model",
                    Buffer (0x2A)
                    {
                        "Intel I219V2 PCI Express Gigabit Ethernet"
                    },

                    "location",
                    Buffer (0x02)
                    {
                        "1"
                    },

                    "subsystem-id",
                    Buffer (0x04)
                    {
                         0x72, 0x86, 0x00, 0x00                        
                    },

                    "device-id",
                    Buffer (0x04)
                    {
                         0xB8, 0x15, 0x00, 0x00                        
                    },

                    "subsystem-vendor-id",
                    Buffer (0x04)
                    {
                         0x43, 0x10, 0x00, 0x00                        
                    }
                }, Local0)
            DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
            Return (Local0)
        }
    }

    Scope (\_SB.PCI0.RP02.ETH1)
    {
        Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
        {
            Store (Package (0x10)
                {
                    "AAPL,slot-name",
                    Buffer (0x09)
                    {
                        "Built In"
                    },

                    "built-in",
                    Buffer (One)
                    {
                         0x00                                          
                    },

                    "name",
                    Buffer (0x16)
                    {
                        "Intel I211VA Ethernet"
                    },

                    "model",
                    Buffer (0x2A)
                    {
                        "Intel I211VA PCI Express Gigabit Ethernet"
                    },

                    "location",
                    Buffer (0x02)
                    {
                        "2"
                    },

                    "subsystem-id",
                    Buffer (0x04)
                    {
                         0xF0, 0x85, 0x00, 0x00                        
                    },

                    "device-id",
                    Buffer (0x04)
                    {
                         0x39, 0x15, 0x00, 0x00                        
                    },

                    "subsystem-vendor-id",
                    Buffer (0x04)
                    {
                         0x43, 0x10, 0x00, 0x00                        
                    }
                }, Local0)
            DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
            Return (Local0)
        }
    }

    Scope (_SB.PC03.BR3D.ARPT)
    {
        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))
        }

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

                    "device-id",
                    Buffer (0x04)
                    {
                         0xA0, 0x43, 0x00, 0x00                        
                    },

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

                    "device_type",
                    Buffer (0x13)
                    {
                        "AirPort Controller"
                    },

                    "model",
                    Buffer (0x4A)
                    {
                        "OSX WIFI Broadcom BCM94360CD 802.11 a/b/g/n/ac + Bluetooth 4.0 Controller"
                    },

                    "compatible",
                    Buffer (0x0D)
                    {
                        "pci14e4,43a0"
                    },

                    "name",
                    Buffer (0x10)
                    {
                        "AirPort Extreme"
                    }
                }, Local0)
            DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
            Return (Local0)
        }
    }

    Scope (\_SB.PC01.BR1A)
    {
        Scope (SL01)
        {
            Name (_STA, Zero)  // _STA: Status
        }

        Scope (PEGP)
        {
            Name (_STA, Zero)  // _STA: Status
        }

        Device (UPSB)
        {
            Name (_ADR, Zero)  // _ADR: Address
            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                If (LNot (Arg2))
                {
                    Return (Buffer (One)
                    {
                         0x03                                          
                    })
                }

                Return (Package (0x02)
                {
                    "PCI-Thunderbolt",
                    One
                })
            }

            Name (_RMV, One)  // _RMV: Removal Status
            Device (DSB0)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                {
                    If (LNot (Arg2))
                    {
                        Return (Buffer (One)
                        {
                             0x03                                          
                        })
                    }

                    Return (Package (0x02)
                    {
                        "PCIHotplugCapable",
                        One
                    })
                }

                Device (NHI0)
                {
                    Name (_ADR, Zero)  // _ADR: Address
                    Name (_STR, Unicode ("Thunderbolt"))  // _STR: Description String
                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        If (LEqual (Arg2, Zero))
                        {
                            Return (Buffer (One)
                            {
                                 0x03                                          
                            })
                        }

                        Return (Package (0x0D)
                        {
                            "built-in",
                            Buffer (One)
                            {
                                 0x00                                          
                            },

                            "device_type",
                            Buffer (0x19)
                            {
                                "Thunderbolt 3 Controller"
                            },

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

                            "model",
                            Buffer (0x30)
                            {
                                "ThunderboltEX 3 Intel DSL6540 Thunderbolt 3 NHI"
                            },

                            "name",
                            Buffer (0x37)
                            {
                                "ThunderboltEX 3 Intel DSL6540 Thunderbolt 3 Controller"
                            },

                            "power-save",
                            One,
                            Buffer (One)
                            {
                                 0x00                                          
                            }
                        })
                    }
                }
            }

            Device (DSB1)
            {
                Name (_ADR, 0x00010000)  // _ADR: Address
                Name (_SUN, 0x04)  // _SUN: Slot User Number
                OperationRegion (A1E0, PCI_Config, Zero, 0x40)
                Field (A1E0, ByteAcc, NoLock, Preserve)
                {
                    AVND,   32,
                    BMIE,   3,
                    Offset (0x18),
                    PRIB,   8,
                    SECB,   8,
                    SUBB,   8,
                    Offset (0x1E),
                        ,   13,
                    MABT,   1
                }

                Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
                {
                    Return (SECB)
                }

                Method (_STA, 0, NotSerialized)  // _STA: Status
                {
                    Return (0x0F)
                }

                Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                {
                    Return (Zero)
                }

                Device (UPS0)
                {
                    Name (_ADR, Zero)  // _ADR: Address
                    OperationRegion (ARE0, PCI_Config, Zero, 0x04)
                    Field (ARE0, ByteAcc, NoLock, Preserve)
                    {
                        AVND,   16
                    }

                    Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                    {
                        If (OSDW ())
                        {
                            Return (One)
                        }

                        Return (Zero)
                    }

                    Device (DSB0)
                    {
                        Name (_ADR, Zero)  // _ADR: Address
                        OperationRegion (A1E0, PCI_Config, Zero, 0x40)
                        Field (A1E0, ByteAcc, NoLock, Preserve)
                        {
                            AVND,   32,
                            BMIE,   3,
                            Offset (0x18),
                            PRIB,   8,
                            SECB,   8,
                            SUBB,   8,
                            Offset (0x1E),
                                ,   13,
                            MABT,   1,
                            Offset (0x3E),
                                ,   6,
                            SBRS,   1
                        }

                        Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
                        {
                            Return (SECB)
                        }

                        Method (_STA, 0, NotSerialized)  // _STA: Status
                        {
                            Return (0x0F)
                        }

                        Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                        {
                            Return (One)
                        }

                        Device (DEV0)
                        {
                            Name (_ADR, Zero)  // _ADR: Address
                            Method (_STA, 0, NotSerialized)  // _STA: Status
                            {
                                Return (0x0F)
                            }

                            Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                            {
                                Return (One)
                            }
                        }
                    }

                    Device (DSB1)
                    {
                        Name (_ADR, 0x00010000)  // _ADR: Address
                        OperationRegion (A1E0, PCI_Config, Zero, 0x40)
                        Field (A1E0, ByteAcc, NoLock, Preserve)
                        {
                            AVND,   32,
                            BMIE,   3,
                            Offset (0x18),
                            PRIB,   8,
                            SECB,   8,
                            SUBB,   8,
                            Offset (0x1E),
                                ,   13,
                            MABT,   1
                        }

                        Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
                        {
                            Return (SECB)
                        }

                        Method (_STA, 0, NotSerialized)  // _STA: Status
                        {
                            Return (0x0F)
                        }

                        Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                        {
                            Return (One)
                        }

                        Device (DEV0)
                        {
                            Name (_ADR, Zero)  // _ADR: Address
                            Method (_STA, 0, NotSerialized)  // _STA: Status
                            {
                                Return (0x0F)
                            }

                            Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                            {
                                Return (One)
                            }
                        }
                    }

                    Device (DSB2)
                    {
                        Name (_ADR, 0x00020000)  // _ADR: Address
                        OperationRegion (A1E0, PCI_Config, Zero, 0x40)
                        Field (A1E0, ByteAcc, NoLock, Preserve)
                        {
                            AVND,   32,
                            BMIE,   3,
                            Offset (0x18),
                            PRIB,   8,
                            SECB,   8,
                            SUBB,   8,
                            Offset (0x1E),
                                ,   13,
                            MABT,   1
                        }

                        Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
                        {
                            Return (SECB)
                        }

                        Method (_STA, 0, NotSerialized)  // _STA: Status
                        {
                            Return (0x0F)
                        }

                        Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                        {
                            Return (One)
                        }

                        Device (DEV0)
                        {
                            Name (_ADR, Zero)  // _ADR: Address
                            Method (_STA, 0, NotSerialized)  // _STA: Status
                            {
                                Return (0x0F)
                            }

                            Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                            {
                                Return (One)
                            }
                        }
                    }

                    Device (DSB3)
                    {
                        Name (_ADR, 0x00030000)  // _ADR: Address
                        OperationRegion (A1E0, PCI_Config, Zero, 0x40)
                        Field (A1E0, ByteAcc, NoLock, Preserve)
                        {
                            AVND,   32,
                            BMIE,   3,
                            Offset (0x18),
                            PRIB,   8,
                            SECB,   8,
                            SUBB,   8,
                            Offset (0x1E),
                                ,   13,
                            MABT,   1
                        }

                        Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
                        {
                            Return (SECB)
                        }

                        Method (_STA, 0, NotSerialized)  // _STA: Status
                        {
                            Return (0x0F)
                        }

                        Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                        {
                            Return (One)
                        }

                        Device (DEV0)
                        {
                            Name (_ADR, Zero)  // _ADR: Address
                            Method (_STA, 0, NotSerialized)  // _STA: Status
                            {
                                Return (0x0F)
                            }

                            Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                            {
                                Return (One)
                            }
                        }
                    }

                    Device (DSB4)
                    {
                        Name (_ADR, 0x00040000)  // _ADR: Address
                        OperationRegion (A1E0, PCI_Config, Zero, 0x40)
                        Field (A1E0, ByteAcc, NoLock, Preserve)
                        {
                            AVND,   32,
                            BMIE,   3,
                            Offset (0x18),
                            PRIB,   8,
                            SECB,   8,
                            SUBB,   8,
                            Offset (0x1E),
                                ,   13,
                            MABT,   1
                        }

                        Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
                        {
                            Return (SECB)
                        }

                        Method (_STA, 0, NotSerialized)  // _STA: Status
                        {
                            Return (0x0F)
                        }

                        Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                        {
                            Return (One)
                        }

                        Device (DEV0)
                        {
                            Name (_ADR, Zero)  // _ADR: Address
                            Method (_STA, 0, NotSerialized)  // _STA: Status
                            {
                                Return (0x0F)
                            }

                            Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                            {
                                Return (One)
                            }
                        }
                    }

                    Device (DSB5)
                    {
                        Name (_ADR, 0x00050000)  // _ADR: Address
                        OperationRegion (A1E0, PCI_Config, Zero, 0x40)
                        Field (A1E0, ByteAcc, NoLock, Preserve)
                        {
                            AVND,   32,
                            BMIE,   3,
                            Offset (0x18),
                            PRIB,   8,
                            SECB,   8,
                            SUBB,   8,
                            Offset (0x1E),
                                ,   13,
                            MABT,   1
                        }

                        Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
                        {
                            Return (SECB)
                        }

                        Method (_STA, 0, NotSerialized)  // _STA: Status
                        {
                            Return (0x0F)
                        }

                        Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                        {
                            Return (One)
                        }

                        Device (DEV0)
                        {
                            Name (_ADR, Zero)  // _ADR: Address
                            Method (_STA, 0, NotSerialized)  // _STA: Status
                            {
                                Return (0x0F)
                            }

                            Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                            {
                                Return (One)
                            }
                        }
                    }
                }
            }

            Device (DSB2)
            {
                Name (_ADR, 0x00020000)  // _ADR: Address
                Device (XHC5)
                {
                    Name (_ADR, Zero)  // _ADR: Address
                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        If (LEqual (Arg2, Zero))
                        {
                            Return (Buffer (One)
                            {
                                 0x03                                          
                            })
                        }

                        Return (Package (0x12)
                        {
                            "built-in",
                            Buffer (One)
                            {
                                 0x00                                          
                            },

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

                            "model",
                            Buffer (0x41)
                            {
                                "ThunderboltEX 3 Texas Instruments TPS65982 USB 3.1 Type-A/Type-C"
                            },

                            "name",
                            Buffer (0x31)
                            {
                                "ThunderboltEX 3 Texas Instruments XHC Controller"
                            },

                            "device_type",
                            Buffer (0x13)
                            {
                                "USB 3.1 Controller"
                            },

                            "device-id",
                            Buffer (0x04)
                            {
                                 0xB6, 0x15, 0x00, 0x00                        
                            },

                            "USBBusNumber",
                            Zero,
                            "UsbCompanionControllerPresent",
                            One,
                            "AAPL,XHCI-clock-id",
                            One
                        })
                    }

                    Device (RHUB)
                    {
                        Name (_ADR, Zero)  // _ADR: Address
                        Device (SSP1)
                        {
                            Name (_ADR, One)  // _ADR: Address
                            Name (_UPC, Package (0x04)  // _UPC: USB Port Capabilities
                            {
                                0xFF,
                                0x09,
                                Zero,
                                Zero
                            })
                            Name (_PLD, Package (0x01)  // _PLD: Physical Location of Device
                            {
                                Buffer (0x10)
                                {
                                    /* 0000 */  0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                    /* 0008 */  0x31, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
                                }
                            })
                            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                            {
                                If (LEqual (Arg2, Zero))
                                {
                                    Return (Buffer (One)
                                    {
                                         0x03                                          
                                    })
                                }

                                Return (Package (0x02)
                                {
                                    "UsbCPortNumber",
                                    One
                                })
                            }
                        }

                        Device (SSP2)
                        {
                            Name (_ADR, 0x02)  // _ADR: Address
                            Name (_UPC, Package (0x04)  // _UPC: USB Port Capabilities
                            {
                                0xFF,
                                0x09,
                                Zero,
                                Zero
                            })
                            Name (_PLD, Package (0x01)  // _PLD: Physical Location of Device
                            {
                                Buffer (0x10)
                                {
                                    /* 0000 */  0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                    /* 0008 */  0x31, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
                                }
                            })
                            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                            {
                                If (LEqual (Arg2, Zero))
                                {
                                    Return (Buffer (One)
                                    {
                                         0x03                                          
                                    })
                                }

                                Return (Package (0x02)
                                {
                                    "UsbCPortNumber",
                                    0x02
                                })
                            }
                        }

                        Device (HS01)
                        {
                            Name (_ADR, 0x03)  // _ADR: Address
                            Name (_UPC, Package (0x04)  // _UPC: USB Port Capabilities
                            {
                                0xFF,
                                0x09,
                                Zero,
                                Zero
                            })
                            Name (_PLD, Package (0x01)  // _PLD: Physical Location of Device
                            {
                                Buffer (0x10)
                                {
                                    /* 0000 */  0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                    /* 0008 */  0x31, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
                                }
                            })
                        }

                        Device (HS02)
                        {
                            Name (_ADR, 0x04)  // _ADR: Address
                            Name (_UPC, Package (0x04)  // _UPC: USB Port Capabilities
                            {
                                0xFF,
                                0x09,
                                Zero,
                                Zero
                            })
                            Name (_PLD, Package (0x01)  // _PLD: Physical Location of Device
                            {
                                Buffer (0x10)
                                {
                                    /* 0000 */  0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                    /* 0008 */  0x31, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
                                }
                            })
                        }
                    }
                }
            }

            Device (DSB3)
            {
                Name (_ADR, 0x00030000)  // _ADR: Address
                Name (_SUN, 0x04)  // _SUN: Slot User Number
                OperationRegion (A1E0, PCI_Config, Zero, 0x40)
                Field (A1E0, ByteAcc, NoLock, Preserve)
                {
                    AVND,   32,
                    BMIE,   3,
                    Offset (0x18),
                    PRIB,   8,
                    SECB,   8,
                    SUBB,   8,
                    Offset (0x1E),
                        ,   13,
                    MABT,   1
                }

                Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
                {
                    Return (SECB)
                }

                Method (_STA, 0, NotSerialized)  // _STA: Status
                {
                    Return (0x0F)
                }

                Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                {
                    Return (Zero)
                }

                Device (UPS0)
                {
                    Name (_ADR, Zero)  // _ADR: Address
                    OperationRegion (ARE0, PCI_Config, Zero, 0x04)
                    Field (ARE0, ByteAcc, NoLock, Preserve)
                    {
                        AVND,   16
                    }

                    Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                    {
                        If (OSDW ())
                        {
                            Return (One)
                        }

                        Return (Zero)
                    }

                    Device (DSB0)
                    {
                        Name (_ADR, Zero)  // _ADR: Address
                        OperationRegion (A1E0, PCI_Config, Zero, 0x40)
                        Field (A1E0, ByteAcc, NoLock, Preserve)
                        {
                            AVND,   32,
                            BMIE,   3,
                            Offset (0x18),
                            PRIB,   8,
                            SECB,   8,
                            SUBB,   8,
                            Offset (0x1E),
                                ,   13,
                            MABT,   1,
                            Offset (0x3E),
                                ,   6,
                            SBRS,   1
                        }

                        Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
                        {
                            Return (SECB)
                        }

                        Method (_STA, 0, NotSerialized)  // _STA: Status
                        {
                            Return (0x0F)
                        }

                        Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                        {
                            Return (One)
                        }

                        Device (DEV0)
                        {
                            Name (_ADR, Zero)  // _ADR: Address
                            Method (_STA, 0, NotSerialized)  // _STA: Status
                            {
                                Return (0x0F)
                            }

                            Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                            {
                                Return (One)
                            }
                        }
                    }

                    Device (DSB1)
                    {
                        Name (_ADR, 0x00010000)  // _ADR: Address
                        OperationRegion (A1E0, PCI_Config, Zero, 0x40)
                        Field (A1E0, ByteAcc, NoLock, Preserve)
                        {
                            AVND,   32,
                            BMIE,   3,
                            Offset (0x18),
                            PRIB,   8,
                            SECB,   8,
                            SUBB,   8,
                            Offset (0x1E),
                                ,   13,
                            MABT,   1
                        }

                        Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
                        {
                            Return (SECB)
                        }

                        Method (_STA, 0, NotSerialized)  // _STA: Status
                        {
                            Return (0x0F)
                        }

                        Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                        {
                            Return (One)
                        }

                        Device (DEV0)
                        {
                            Name (_ADR, Zero)  // _ADR: Address
                            Method (_STA, 0, NotSerialized)  // _STA: Status
                            {
                                Return (0x0F)
                            }

                            Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                            {
                                Return (One)
                            }
                        }
                    }

                    Device (DSB2)
                    {
                        Name (_ADR, 0x00020000)  // _ADR: Address
                        OperationRegion (A1E0, PCI_Config, Zero, 0x40)
                        Field (A1E0, ByteAcc, NoLock, Preserve)
                        {
                            AVND,   32,
                            BMIE,   3,
                            Offset (0x18),
                            PRIB,   8,
                            SECB,   8,
                            SUBB,   8,
                            Offset (0x1E),
                                ,   13,
                            MABT,   1
                        }

                        Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
                        {
                            Return (SECB)
                        }

                        Method (_STA, 0, NotSerialized)  // _STA: Status
                        {
                            Return (0x0F)
                        }

                        Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                        {
                            Return (One)
                        }

                        Device (DEV0)
                        {
                            Name (_ADR, Zero)  // _ADR: Address
                            Method (_STA, 0, NotSerialized)  // _STA: Status
                            {
                                Return (0x0F)
                            }

                            Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                            {
                                Return (One)
                            }
                        }
                    }

                    Device (DSB3)
                    {
                        Name (_ADR, 0x00030000)  // _ADR: Address
                        OperationRegion (A1E0, PCI_Config, Zero, 0x40)
                        Field (A1E0, ByteAcc, NoLock, Preserve)
                        {
                            AVND,   32,
                            BMIE,   3,
                            Offset (0x18),
                            PRIB,   8,
                            SECB,   8,
                            SUBB,   8,
                            Offset (0x1E),
                                ,   13,
                            MABT,   1
                        }

                        Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
                        {
                            Return (SECB)
                        }

                        Method (_STA, 0, NotSerialized)  // _STA: Status
                        {
                            Return (0x0F)
                        }

                        Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                        {
                            Return (One)
                        }

                        Device (DEV0)
                        {
                            Name (_ADR, Zero)  // _ADR: Address
                            Method (_STA, 0, NotSerialized)  // _STA: Status
                            {
                                Return (0x0F)
                            }

                            Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                            {
                                Return (One)
                            }
                        }
                    }

                    Device (DSB4)
                    {
                        Name (_ADR, 0x00040000)  // _ADR: Address
                        OperationRegion (A1E0, PCI_Config, Zero, 0x40)
                        Field (A1E0, ByteAcc, NoLock, Preserve)
                        {
                            AVND,   32,
                            BMIE,   3,
                            Offset (0x18),
                            PRIB,   8,
                            SECB,   8,
                            SUBB,   8,
                            Offset (0x1E),
                                ,   13,
                            MABT,   1
                        }

                        Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
                        {
                            Return (SECB)
                        }

                        Method (_STA, 0, NotSerialized)  // _STA: Status
                        {
                            Return (0x0F)
                        }

                        Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                        {
                            Return (One)
                        }

                        Device (DEV0)
                        {
                            Name (_ADR, Zero)  // _ADR: Address
                            Method (_STA, 0, NotSerialized)  // _STA: Status
                            {
                                Return (0x0F)
                            }

                            Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                            {
                                Return (One)
                            }
                        }
                    }

                    Device (DSB5)
                    {
                        Name (_ADR, 0x00050000)  // _ADR: Address
                        OperationRegion (A1E0, PCI_Config, Zero, 0x40)
                        Field (A1E0, ByteAcc, NoLock, Preserve)
                        {
                            AVND,   32,
                            BMIE,   3,
                            Offset (0x18),
                            PRIB,   8,
                            SECB,   8,
                            SUBB,   8,
                            Offset (0x1E),
                                ,   13,
                            MABT,   1
                        }

                        Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
                        {
                            Return (SECB)
                        }

                        Method (_STA, 0, NotSerialized)  // _STA: Status
                        {
                            Return (0x0F)
                        }

                        Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                        {
                            Return (One)
                        }

                        Device (DEV0)
                        {
                            Name (_ADR, Zero)  // _ADR: Address
                            Method (_STA, 0, NotSerialized)  // _STA: Status
                            {
                                Return (0x0F)
                            }

                            Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                            {
                                Return (One)
                            }
                        }
                    }
                }
            }

            Device (DSB4)
            {
                Name (_ADR, 0x00040000)  // _ADR: Address
                Name (_SUN, 0x04)  // _SUN: Slot User Number
                OperationRegion (A1E0, PCI_Config, Zero, 0x40)
                Field (A1E0, ByteAcc, NoLock, Preserve)
                {
                    AVND,   32,
                    BMIE,   3,
                    Offset (0x18),
                    PRIB,   8,
                    SECB,   8,
                    SUBB,   8,
                    Offset (0x1E),
                        ,   13,
                    MABT,   1
                }

                Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
                {
                    Return (SECB)
                }

                Method (_STA, 0, NotSerialized)  // _STA: Status
                {
                    Return (0x0F)
                }

                Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                {
                    Return (Zero)
                }

                Device (UPS0)
                {
                    Name (_ADR, Zero)  // _ADR: Address
                    OperationRegion (ARE0, PCI_Config, Zero, 0x04)
                    Field (ARE0, ByteAcc, NoLock, Preserve)
                    {
                        AVND,   16
                    }

                    Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                    {
                        If (OSDW ())
                        {
                            Return (One)
                        }

                        Return (Zero)
                    }

                    Device (DSB0)
                    {
                        Name (_ADR, Zero)  // _ADR: Address
                        OperationRegion (A1E0, PCI_Config, Zero, 0x40)
                        Field (A1E0, ByteAcc, NoLock, Preserve)
                        {
                            AVND,   32,
                            BMIE,   3,
                            Offset (0x18),
                            PRIB,   8,
                            SECB,   8,
                            SUBB,   8,
                            Offset (0x1E),
                                ,   13,
                            MABT,   1,
                            Offset (0x3E),
                                ,   6,
                            SBRS,   1
                        }

                        Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
                        {
                            Return (SECB)
                        }

                        Method (_STA, 0, NotSerialized)  // _STA: Status
                        {
                            Return (0x0F)
                        }

                        Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                        {
                            Return (One)
                        }

                        Device (DEV0)
                        {
                            Name (_ADR, Zero)  // _ADR: Address
                            Method (_STA, 0, NotSerialized)  // _STA: Status
                            {
                                Return (0x0F)
                            }

                            Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                            {
                                Return (One)
                            }
                        }
                    }

                    Device (DSB1)
                    {
                        Name (_ADR, 0x00010000)  // _ADR: Address
                        OperationRegion (A1E0, PCI_Config, Zero, 0x40)
                        Field (A1E0, ByteAcc, NoLock, Preserve)
                        {
                            AVND,   32,
                            BMIE,   3,
                            Offset (0x18),
                            PRIB,   8,
                            SECB,   8,
                            SUBB,   8,
                            Offset (0x1E),
                                ,   13,
                            MABT,   1
                        }

                        Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
                        {
                            Return (SECB)
                        }

                        Method (_STA, 0, NotSerialized)  // _STA: Status
                        {
                            Return (0x0F)
                        }

                        Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                        {
                            Return (One)
                        }

                        Device (DEV0)
                        {
                            Name (_ADR, Zero)  // _ADR: Address
                            Method (_STA, 0, NotSerialized)  // _STA: Status
                            {
                                Return (0x0F)
                            }

                            Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                            {
                                Return (One)
                            }
                        }
                    }

                    Device (DSB2)
                    {
                        Name (_ADR, 0x00020000)  // _ADR: Address
                        OperationRegion (A1E0, PCI_Config, Zero, 0x40)
                        Field (A1E0, ByteAcc, NoLock, Preserve)
                        {
                            AVND,   32,
                            BMIE,   3,
                            Offset (0x18),
                            PRIB,   8,
                            SECB,   8,
                            SUBB,   8,
                            Offset (0x1E),
                                ,   13,
                            MABT,   1
                        }

                        Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
                        {
                            Return (SECB)
                        }

                        Method (_STA, 0, NotSerialized)  // _STA: Status
                        {
                            Return (0x0F)
                        }

                        Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                        {
                            Return (One)
                        }

                        Device (DEV0)
                        {
                            Name (_ADR, Zero)  // _ADR: Address
                            Method (_STA, 0, NotSerialized)  // _STA: Status
                            {
                                Return (0x0F)
                            }

                            Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                            {
                                Return (One)
                            }
                        }
                    }

                    Device (DSB3)
                    {
                        Name (_ADR, 0x00030000)  // _ADR: Address
                        OperationRegion (A1E0, PCI_Config, Zero, 0x40)
                        Field (A1E0, ByteAcc, NoLock, Preserve)
                        {
                            AVND,   32,
                            BMIE,   3,
                            Offset (0x18),
                            PRIB,   8,
                            SECB,   8,
                            SUBB,   8,
                            Offset (0x1E),
                                ,   13,
                            MABT,   1
                        }

                        Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
                        {
                            Return (SECB)
                        }

                        Method (_STA, 0, NotSerialized)  // _STA: Status
                        {
                            Return (0x0F)
                        }

                        Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                        {
                            Return (One)
                        }

                        Device (DEV0)
                        {
                            Name (_ADR, Zero)  // _ADR: Address
                            Method (_STA, 0, NotSerialized)  // _STA: Status
                            {
                                Return (0x0F)
                            }

                            Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                            {
                                Return (One)
                            }
                        }
                    }

                    Device (DSB4)
                    {
                        Name (_ADR, 0x00040000)  // _ADR: Address
                        OperationRegion (A1E0, PCI_Config, Zero, 0x40)
                        Field (A1E0, ByteAcc, NoLock, Preserve)
                        {
                            AVND,   32,
                            BMIE,   3,
                            Offset (0x18),
                            PRIB,   8,
                            SECB,   8,
                            SUBB,   8,
                            Offset (0x1E),
                                ,   13,
                            MABT,   1
                        }

                        Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
                        {
                            Return (SECB)
                        }

                        Method (_STA, 0, NotSerialized)  // _STA: Status
                        {
                            Return (0x0F)
                        }

                        Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                        {
                            Return (One)
                        }

                        Device (DEV0)
                        {
                            Name (_ADR, Zero)  // _ADR: Address
                            Method (_STA, 0, NotSerialized)  // _STA: Status
                            {
                                Return (0x0F)
                            }

                            Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                            {
                                Return (One)
                            }
                        }
                    }

                    Device (DSB5)
                    {
                        Name (_ADR, 0x00050000)  // _ADR: Address
                        OperationRegion (A1E0, PCI_Config, Zero, 0x40)
                        Field (A1E0, ByteAcc, NoLock, Preserve)
                        {
                            AVND,   32,
                            BMIE,   3,
                            Offset (0x18),
                            PRIB,   8,
                            SECB,   8,
                            SUBB,   8,
                            Offset (0x1E),
                                ,   13,
                            MABT,   1
                        }

                        Method (_BBN, 0, NotSerialized)  // _BBN: BIOS Bus Number
                        {
                            Return (SECB)
                        }

                        Method (_STA, 0, NotSerialized)  // _STA: Status
                        {
                            Return (0x0F)
                        }

                        Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                        {
                            Return (One)
                        }

                        Device (DEV0)
                        {
                            Name (_ADR, Zero)  // _ADR: Address
                            Method (_STA, 0, NotSerialized)  // _STA: Status
                            {
                                Return (0x0F)
                            }

                            Method (_RMV, 0, NotSerialized)  // _RMV: Removal Status
                            {
                                Return (One)
                            }
                        }
                    }
                }
            }
        }
    }

    Method (DTGP, 5, NotSerialized)
    {
        If (LEqual (Arg0, ToUUID ("a0b5b7c6-1318-441c-b0c9-fe695eaf949b")))
        {
            If (LEqual (Arg1, One))
            {
                If (LEqual (Arg2, Zero))
                {
                    Store (Buffer (One)
                        {
                             0x03                                          
                        }, Arg4)
                    Return (One)
                }

                If (LEqual (Arg2, One))
                {
                    Return (One)
                }
            }
        }

        Store (Buffer (One)
            {
                 0x00                                          
            }, Arg4)
        Return (Zero)
    }
}


See Section E.9.2 for further details.

Good luck and enjoy,

kgp.png
 

Attachments

  • SSDT-X299-iMacPro.aml.zip
    2.9 KB · Views: 56
For user with newer TB3 chipset (JSL6540 like the iMacPro) as found with the Gigabyte v2.0 Alpine Ridge or the ASRock TB3 card:
replace:
Buffer (0x04)
{
0xB6, 0x15, 0x00, 0x00
},

with:
Buffer (0x04)
{
0xD4, 0x15, 0x00, 0x00
},

Having said that...
I had attempted an almost identical TB3 solution this week, copying the original iMac Pro ACPI entries. It made no difference over the simplistic aml provided by @maleorderbride: TB hotplug works, but not USB-C. And after waking up from sleep, TB no longer works
Same with this version...

And I saw no benefit over using with the THB_C cable connected or not ; except that now it doesn't work in Windows if the cable isn't connected.
It's annoying because TB3 hotplug and USB-C hotplug worked perfectly with the Gigabyte x299 Gaming 7 Pro....

So if hotplug doesn't work for you, as @kgp stated: unplug the cable and hopefully that will help.
If hotplug works for you, then removing the cable won't make things better .
 
Using the miniPCI->M.2 adapter (https://www.amazon.fr/gp/product/B07418CNH2/?tag=tonymacx8607-21) I took the BCM94360 from this adapter (https://www.amazon.fr/gp/product/B00MBP25UK/?tag=tonymacx8607-21)

I fitted the assemble card in place of the motherboard card (on the ASRock, a crappy intel)... The original card was dual-band only so couldn't re-use the existing the SMA connectors.

Today I received the 30cm SMA-IPX cable today (from https://www.aliexpress.com/item/30c...32767094832.html?spm=a2g0s.9042311.0.0.DkmBpI)
I connected those from the BCM94360 to the PCI plate...

Looks very nice and neat... Immediately working.
It also has the advantage of not using any CPU PCIe lanes and a dedicated slot, so the 1080Ti is now working with 16 lanes again (was on x8)

So wait you fit it in the NGFF enclosure without drilling?
 
So wait you fit it in the NGFF enclosure without drilling?
Yes. But the ASRock has no plastic cover to start with...

The NGFF enclosure is made of two parts, one is fixed to the motherboard by 2 screws, and a metal cover, which I removed.
That way I could attach the M.2 adapter to the existing NGFF enclosure with a screw, and fit the BCM card in it. It does stick out by about 1cm.

I can take a photo if you want.
 
We agree: 10.13.4 E199 is very smooth and work perfectly with Amd GPU, so I will stay away from next update if may cause issue.
hi,friend,did you use QuickTime player to build a new screen recording? my Mac OS is 10.13.4,when I use quicktime player to build a new screen recording, the hackintosh works good, when i stop and finished the screen recording ,the hackintosh will crashed,how about yours?did you use the amd RX580 ?
 
  • Like
Reactions: kgp
I apologize in advance, but how do you install an .aml file ? The guide says to implement SSDT and all that but everytime i've tried its failed. I put them in the patched folder of the ACPI in clover and still nothing happens. And im not sure how to edit the IO registry files required.
 
Yes. But the ASRock has no plastic cover to start with...

The NGFF enclosure is made of two parts, one is fixed to the motherboard by 2 screws, and a metal cover, which I removed.
That way I could attach the M.2 adapter to the existing NGFF enclosure with a screw, and fit the BCM card in it. It does stick out by about 1cm.

I can take a photo if you want.

Ah ok thanks for the info.

Yeah I don’t think I want to drill holes in the designare since there’s a shroud cover which has a heatpipe and fan around the mobo rear.

I just wanted as clean a system as possible. Maybe in the future I’ll put the osxwifi card back inside if I ever switch to wireless keyboard/mouse.

Right now I’m using a wired Apple keyboard and a trusty G500 Logitech mouse and a Wacom tablet. All wired. I guess the only downside is the cables but I tucked those in and it’s not so bad.

If this MacBook Air card fit I would 100% use that instead of the DW1560 :(

It sucks that BT is such a big issue with macos. I wish it worked with Intel etc.
 
Hi All,
To those of you with Vega GPU, I have found a solution to the fan speed problem that also provides full overclocking control (clock speed, voltage, fan speed and curve). You can read about it here: https://www.tonymacx86.com/threads/...nal-cut-h-264-fix.233067/page-13#post-1737873

@kgp It's likely worth adding it to your guide for the Vega users (without it our fans blow at high speed all the time).

Thanks,
Peter

Just to update I don’t have any fan ramping issues with Vega FE. It works smooth as butter and fan only kicks in a little bit when I’m using OpenCL like adobe or light gaming. Although I do any heavy 3d gaming under windows (which I use wattman to lower clocks a little) since Vega FE aircooled runs so hot.

Otherwise nice find and hopefully that helps people who are having issues.
 
@ppffffpp
On my new build gpu never reached temps above 65 degrees so no overheating at all, but if I use 10.13.4 or 10.13.5 I get aswell same reboots as you and still max temp 65 degrees. Interesting and glad that you fixed your issues.
I am aswell on 10.13.3 since on this version it works without any issues.
Will talk with @DSM2 about it.

EDIT: I don't know how it works on your build but on my it breaks GPU...

View attachment 328062

EDIT 2 : Ok I‘ve repaired the rights with Kext wizard and now it works, thanks will do some testing now.

This is why I always avoid doing any kextcache stuff and just stick to keeping all kexts in the EFI partition. I've had many issues with kext cache not being repaired properly in the past and it boinked the whole system and I had to reinstall :)
 
Status
Not open for further replies.
Back
Top