Contribute
Register

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

Status
Not open for further replies.
Need help to create a working minimalistic SSDT

Dear @kgp , @apfelnico and all contributors to this thread, thank you a lot for investing so much time and effort in this, which made my new build possible! And I learned again so much. Thanks a lot!

Before evaluating flaws of my build (nearly all working but not very stable) I would like to have a correct and full PCI implementation, but I am stuck at section E) 9.2 though, after a lot of attempts I never got any PCI implementation working.
Although my bootlog saying that the ssdt files were "successfully" loaded, my system inspector PCI list was showing just 5 entries, TBEX3 and GTX1080, with cryptic names and slot entries and the nvidia audio driver not loaded.

Now I want to start with a radical minimalistic SSDT but even that I dont get running because of one compiling error.
I stripped down the SSDT-X299-imacpro.aml with MacIASL to just some lines concerning the eth0 (thought this might be the easiest) and the DTGP method. Is there anything missing?
In the line
Scope (\_SB.PCI0)" I get the compiling error
Error 6117, Existing object has invalid type for Scope operator (\_SB.PCI0 [Untyped])

my minimal ssdt:
Code:
DefinitionBlock ("", "SSDT", 1, "NICO", "X299", 0x00000000)
{

    External (_SB_.PCI0.ETH0, DeviceObj)    // (from opcode)
    External (_SB_.PCI0.GBE1, DeviceObj)    // (from opcode)

    External (DTGP, MethodObj)    // 5 Arguments (from opcode)



    Scope (\_SB.PCI0)
    {
        Scope (GBE1)
        {
            Name (_STA, Zero)  // _STA: Status
        }

        Device (ETH0)
        {
            Name (_ADR, 0x001F0006)  // _ADR: Address
            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)
                        {
                            "2"
                        },

                        "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)
            }
        }
    }


    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)
    }
}


IORegistryExplorer shows patched PCI0 path.

Activated patches in Clover:
PC00->PCIO, _OSI->XOSI, GBE1->ETH0, _DSM->XDSM, SMBS._ADR -> XSBU.XADR

I use KGPs EFI distribution 180531, 10.13.4SU (17E202)
running SMBIOS imacpro1,1

Would be so nice if someone could guide me to a working SSDT starting point.
Maybe also someone with a working ASUS X299 DELUXE/ 7820X combo could upload his SSDTs/EFI?

Much appreciated.
I attached EFI without SSDTs.

Two things:

1. You need "External (_SB_.PCI0, DeviceObj)"
2. You can remove: "External (DTGP, MethodObj)"

Because the latter is not externally involved (for example, via another SSDT), but is directly in it.
 
@apfelnico Don't suppose you have any thoughts on the AMD Vega SSDT section of the tutorial under the Nvidia stuff? I've used it as a copy and paste in 10.13.5 but as soon as I add it it my about this Mac PCI goes from having all the bits in to just having the GFX card and Audio Device that aren't marked built in here. I've left it out for the moment.

Screen Shot 2018-06-04 at 20.11.16.png


I'm on the same hardware as you excepting the cpu and your 2nd Vega. Jealous.. :D

Here's what I think is the relevant part from registry explorer. If I can provide more info let me know. Anyway appreciate any insights you might have.

Screen Shot 2018-06-04 at 19.38.15.png
 
@morh
Remove the video card entries from your existing SSDT. Use this SSDT additionally.
 

Attachments

  • SSDT-VEGA.aml
    1.3 KB · Views: 124
@morh
Remove the video card entries from your existing SSDT. Use this SSDT additionally.

PERFECT! Thanks a bunch. Display port sound and pretty quiet fans.

Did you fiddle with anything else like clock speed or is it pretty vanilla in the power tables?

Might be worth adding to the original tutorial files @kgp?
 
I think it makes more sense to work with multiple SSDTs. One for the invariable devices directly on the board (including "DTGP method"). Then for each individual device a separate with respect to DTGP ("External (DTGP, MethodObj)"). Advantage: The first SSDT is always to use unchanged, with the other one searches for the required. And it remains manageable, especially for your own adjustments.
 
Two things:

1. You need "External (_SB_.PCI0, DeviceObj)"
2. You can remove: "External (DTGP, MethodObj)"

Because the latter is not externally involved (for example, via another SSDT), but is directly in it.

Thanks for the clarification, @apfelnico.
Compiling now successful!
But still no implementation in PCI list.
After three days of experimenting, I have no clue what else to change.
I guess it must be somewhere in the config.plist then, no?
Cause the bootlog says that the ssdt was inserted with success.
You have any idea?
You guys are using the "Slot AAPL injections" section in Clover/SMBIO tab e.g.?

[SOLVED!]
I had to disable the GBE1 -> ETH0 patch inside clover!
Now Ethernet in PCI list. :thumbup:

Good starting point now, and I can proceed.
 

Attachments

  • config.plist
    26.4 KB · Views: 175
  • fingers-crossed IOReg.ioreg
    6.7 MB · Views: 112
Last edited:
I think it makes more sense to work with multiple SSDTs. One for the invariable devices directly on the board (including "DTGP method"). Then for each individual device a separate with respect to DTGP ("External (DTGP, MethodObj)"). Advantage: The first SSDT is always to use unchanged, with the other one searches for the required. And it remains manageable, especially for your own adjustments.

I agree, a more modular approach makes sense, and its easier to maintain to that end I've opened a GitHub repository for this purpose. Anyone free to do a PR there or just tag me here on something you want uploading there.

I've arranged it thus.

Mainboard - will contain minimal MOBO specific ssdts. I've populated it with the ASUS Prime x299 Deluxe as its what I have.

Gfx
NVIDIA - Chopped out the Nvidia part of the SSDT and placed it into its own "module"
AMD - Saved the Vega one here.
Network - I only use onboard so I've not added anything here for the second.


Thunderbolt - I've added most recent configs from the guide.

Please add SSDTS via tagging me on this forum with an SSDT or a PR straight to Github.

https://github.com/daaaaan/x299Hackintosh

@fingers-crossed the minimal mainboard one here should work for you.
 
I agree, a more modular approach makes sense, and its easier to maintain to that end I've opened a GitHub repository for this purpose. Anyone free to do a PR there or just tag me here on something you want uploading there.

I've arranged it thus.

Mainboard - will contain minimal MOBO specific ssdts. I've populated it with the ASUS Prime x299 Deluxe as its what I have.

Gfx
NVIDIA - Chopped out the Nvidia part of the SSDT and placed it into its own "module"
AMD - Saved the Vega one here.
Network - I only use onboard so I've not added anything here for the second.


Thunderbolt - I've added most recent configs from the guide.

Please add SSDTS via tagging me on this forum with an SSDT or a PR straight to Github.

https://github.com/daaaaan/x299Hackintosh

@fingers-crossed the minimal mainboard one here should work for you.

I don't like that you publish the SSDTs straight away on Github without even mentioning source and origin.. Who gave you the permission to do so???

Next time, somebody will come and publish the entire EFI-Folder on Github in his name? What for we have this guide, thread and forum?

There are others with potential contributions to the SSDTs to do so if necessary. You are no one to take control here and to take such decisions! You joined this forum and thread not even one month ago. Nobody needs your copy and paste outside this thread..

Not sure what the moderators think about your more than questionable endeavour and behaviour....

Unbelievable !!!!! o_O
 
Last edited:
I think it makes more sense to work with multiple SSDTs. One for the invariable devices directly on the board (including "DTGP method"). Then for each individual device a separate with respect to DTGP ("External (DTGP, MethodObj)"). Advantage: The first SSDT is always to use unchanged, with the other one searches for the required. And it remains manageable, especially for your own adjustments.

This is what anyway has been done already within the guide text for a better understanding. The text implementation might not be perfect yet as everything needs it's time, but I am open for further improvements, corrections and suggestions. However, I am against the splitting of the SSDT into a dozen of SUB-SSDTs . I don't see any advantage. Unexperienced users might have the same problems now and later to understand and follow the individual implementations.

I anyway repeatedly suggest a stepwise device implementation and to start with a minimal SSDt configuration.
 
Status
Not open for further replies.
Back
Top