Jump to content

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


KGP-iMacPro

iMacPro Build/Guide Feedback   

26 members have voted

  1. 1. Does this guide help you in your endeavour?

    • yes
      21
    • no
      5

This poll is closed to new votes


656 posts in this topic

Recommended Posts

Awesome detailed post!

 

I used the included EFI versioned 200218, put my network driver in there (which also works perfectly), and I can boot the system no problem with npci=0x2000 parameter.

 

However, I'm faced with a couple major issues,

  1. It lags, as hell. The system feels unstable, but it doesn't crash. So yay there at least.
  2. The system input is weird. Mouse & Keyboard input would be ignored or duplicated some time.
  3. FakeSMC doesn't load upon restart, only power ons. (Whenever I restart, it just doesn't show up in boot message, E1000e however did)
  4. After installing Web Driver, which loaded no problem, I got HiDPI, but cannot login. The login window shows up fine, I can enter the password, but the desktop wouldn't load. The animation would stuck. (Yet the pointer is all right)

In short, I'm actually not allowed into desktop, after I install Web Driver.

 

What's worse, disabling it with nv_disable=1 doesn't work either. It will now show an black empty with some occasional gl_ messages. I was able to boot into the system & installer with that flag before.

 

My EFI configuration is standard, so I didn't attach it. I only change, serial & UUID, and added E1000e kext.

Link to comment
Share on other sites

Awesome detailed post!

 

I used the included EFI versioned 200218, put my network driver in there (which also works perfectly), and I can boot the system no problem with npci=0x2000 parameter.

 

However, I'm faced with a couple major issues,

  1. It lags, as hell. The system feels unstable, but it doesn't crash. So yay there at least.
  2. The system input is weird. Mouse & Keyboard input would be ignored or duplicated some time.
  3. FakeSMC doesn't load upon restart, only power ons. (Whenever I restart, it just doesn't show up in boot message, E1000e however did)
  4. After installing Web Driver, which loaded no problem, I got HiDPI, but cannot login. The login window shows up fine, I can enter the password, but the desktop wouldn't load. The animation would stuck. (Yet the pointer is all right)

In short, I'm actually not allowed into desktop, after I install Web Driver.

 

What's worse, disabling it with nv_disable=1 doesn't work either. It will now show an black empty with some occasional gl_ messages. I was able to boot into the system & installer with that flag before.

 

My EFI configuration is standard, so I didn't attach it. I only change, serial & UUID, and added E1000e kext.

 

What is your actual macOS build? Which web driver are you using? What are your BIOS settings? Are you overcooking your CPU and RAM? etc... 

 

Please learn to bug report.. 

 

Try to patch and use web driver xxx.106, as outlined in Section E.2)  

Link to comment
Share on other sites

@hsu.pengjun

 

You forget about VoodooTSCSync.kext or TSCAdjustReset.kext.

You are right, I read somewhere that Gaming 9 has unlocked 0x2E register or whatever (forgot that name).

 

I thought it will not be needed. Thanks :)

What is your actual macOS build? Which web driver are you using? What are your BIOS settings? Are you overcooking your CPU and RAM? etc... 

 

Please learn to bug report.. 

 

Try to patch and use web driver xxx.106, as outlined in Section E.2)  

 

Thanks for the post & reply.

 

I thought the issue has nothing to do with NV Web Driver & macOS version, so I didn't bother include them, since the desktop loads fine.

 

But you're right, that would've made the report better :)

 

Adding the missing two kexts solved the problem! 

Link to comment
Share on other sites

 

I thought the issue has nothing to do with NV Web Driver & macOS version, so I didn't bother include them, since the desktop loads fine.

 

But you're right, that would've made the report better :)

 

Adding the missing two kexts solved the problem! 

 

 

Adding the missing TWO kexts solved the problem? Note that you should implement EITHER VoodooTSCSync.kext OR TSCAdjustReset.kext, NOT BOTH

 

BTW: Web Driver xxx.159 might lag with your GPU. The patched xxx.106 Web Driver can solve this issue, if necessary..    

Link to comment
Share on other sites

Some additional information about Thunderbolt HotSwap. 

If someone still have problem with no working hot swap on TB device and have problem with sleep when TB is connected, the solution is on ssdt. 

Method based on the TheRacerMaster's work and discover by @maleorderbride. I made changes for Asus TB compatibility.

SSDT-TB.aml.zip

  • Like 2
Link to comment
Share on other sites

Some additional information about Thunderbolt HotSwap. 

If someone still have problem with no working hot swap on TB device and have problem with sleep when TB is connected, the solution is on ssdt. 

Method based on the TheRacerMaster's work and discover by @maleorderbride. I made changes for Asus TB compatibility.

attachicon.gifSSDT-TB.aml.zip

 

Fantastic, man  :yes:  :thumbsup_anim:

 

Can I officially implement your hot swap TB PCI device implementation in my guide?  :rolleyes:

Link to comment
Share on other sites

Adding the missing TWO kexts solved the problem? Note that you should implement EITHER VoodooTSCSync.kext OR TSCAdjustReset.kext, NOT BOTH

 

BTW: Web Driver xxx.159 might lag with your GPU. The patched xxx.106 Web Driver can solve this issue, if necessary..    

I did not know that. Thanks!

 

One of them removed.  I'm getting some random freeze before without TSCSync and with both, now it seems perfect.

 

I'm using 17D2047 & xxx.157.

Link to comment
Share on other sites

Today we want to dedicate ourselves to the DSDT of the X299 system. Why should we edit the DSDT? There are at least four good reasons for this.

 

1. CPU

2. SMBus

3. PEGP

4. RP02/Ethernet

 

Is it not enough to use the ACPI patches from Clover and additional SSDT's? This is basically a good idea and should be maintained. I think it makes sense to make only the few changes in the DSDT, which are difficult or impossible to realize in other ways. The problem with the DSDT is that when something elementary is changed in the BIOS, the DSDT changes on our complex X299 system. Likewise with a BIOS update. That's why we should not invest much effort into a perfect DSDT. But these little changes will make our system better and it can be repeated quickly.

 

1. What's wrong with the CPU? If we look at our system with IORegistryExplorer, then we see (example i9-7900X) a weird distribution of CPU cores. These are not linear in a row. If I use Piker-Alpha's script (ssdtPRGen.sh), then it assumes a linear count and the resulting SSDT does not match the actual distribution of the cores. This can be fixed easily and looks more beautiful in IORegistryExplorer. We open the extracted DSDT (in the Clover boot menu press F4, now the original DSDT is in EFI/CLOVER/ACPI/origin) with MaciASL and we take a closer look at the device (SCK0). Here we delete the unused CPxx's, which we can clearly identify by means of IORegistryExplorer. With this we adapt the generic DSDT to our specific processor. If we click on "Compile" now, we get some error messages. Absolutely clear, some of the "Notify (\ _SB.SCK0.CPxx, 0x83)" HLVT method now go to nowhere. We simply delete these now redundant lines.

 

2. There is a Device SMBS in PC00. Unfortunately, in the same region (PC00) there is a device SBUS, which points exactly to the same position "Name (_ADR, 0x001F0004)". We can fix that very easily. Press "comand + f" (Find) and enter "SBUS". There are five entries. We look at the first entry and change "Device" to "Scope" and delete the line "Name (_ADR, 0x001F0004) // _ADR: Address". Now we search (comand + f) for "SMBS". We change the name of the device SMBS to SBUS.

 

3. There are so-called PEGPs for the PCIe slots BR1A, BR2A, BR3A and BR3D. We would like to use these instead of the SL01, SL05, SL09 and SL0C. A PEGP has already integrated Power Resources for Wake. The problem is that, for example, a graphics card integrates with the first device (SL01) instead of the more appropriate PEGP. The solution is quite simple, we delete the devices SL01, SL05, SL09 and SL0C from the corresponding BR1A, BR2A, BR3A and BR3D. This will get our graphics and Thunderbolt cards into the correct slots. Subsequent renaming in, for example, "GFX0" can be done via an SSDT, if necessary.

 

4. It looks similar with the Intel I211VA Ethernet. It docks on the device "D0A4", but could be attached to the much more suitable "PXSX". The latter (which houses every RPxx) also uses Power Resources for Wake. Again, just remove the device D0A4 completely.

 

Now put this DSDT in EFI/CLOVER/ACPI/patched and restart.

 

Of course it is necessary to correct the new paths to the devices in the SSDT's accordingly.

 

 

post-1167485-0-69652500-1519906844_thumb.png

post-1167485-0-72333200-1519906851_thumb.png

post-1167485-0-15591500-1519906859_thumb.png

post-1167485-0-65739900-1519906866_thumb.png

post-1167485-0-91125100-1519906876_thumb.png

  • Like 2
Link to comment
Share on other sites

Good discover, but did those changes will have any impact for stability of hackintosh? Do you notice some better behavior? 

 

 

I noticed some strange USB devices behavior after wake from sleep. So I add to Thunderbolt ssdt MethodUPRW. Now after 10 times testing sleep and wake everything working OK. 

This method must be connected with patch in clover ACPI section:

<dict>
					<key>Comment</key>
					<string>change MethodGPRW</string>
					<key>Disabled</key>
					<false/>
					<key>Find</key>
					<data>
					R1BSVwI=
					</data>
					<key>Replace</key>
					<data>
					WFBSVwI=
					</data>
				</dict>

I also apply to ssdt usb3.1 as media devices. 

For correct working hot swap and sleep must be enabled 4G decoding in bios.

SSDT-1.aml.zip

Link to comment
Share on other sites

Your code: 

        Device (XHC3)
        {
            Name (_ADR, Zero)  // _ADR: Address
            Name (_PRW, Package (0x02)  // _PRW: Power Resources for Wake
            {
                0x6D, 
                Zero
            })
        }

Should not it possibly mean:

            Device (XHC3)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Method (_PRW, 0, NotSerialized)  // _PRW: Power Resources for Wake
                {
                    Return (GPRW (0x6D, 0x00))
                }
            }
Link to comment
Share on other sites

 

Your code: 

        Device (XHC3)
        {
            Name (_ADR, Zero)  // _ADR: Address
            Name (_PRW, Package (0x02)  // _PRW: Power Resources for Wake
            {
                0x6D, 
                Zero
            })
        }

Should not it possibly mean:

            Device (XHC3)
            {
                Name (_ADR, Zero)  // _ADR: Address
                Method (_PRW, 0, NotSerialized)  // _PRW: Power Resources for Wake
                {
                    Return (GPRW (0x6D, 0x00))
                }
            } 

Yes! You're right. Will correct this. 

Thanks for info. 

Link to comment
Share on other sites

Then, of course, do not use a Clover ACPI patch, otherwise it would also be changed in your SSDT GPRW in UPRW. Change it directly in the DSDT via search and replace

Well. I have problem with dsdt. Clover won't load it. Today I was trying to check your solution for dsdt but I was not able to load it.

Link to comment
Share on other sites

Your DSDT is called DSDT.aml and in Clover in the ACPI section is the DSDT also named? And the DSDT is in EFI/CLOVER/ACPI/patched?

OK. I was abel to boot with dsdt, but it give lots acpi errors and boot to black screen. 

I updated previous post with deleted _prw method. 

Link to comment
Share on other sites

Just for fun and perhaps off topic I managed with success a fresh install of 10.13.3 (17D2047) with iMac Pro system definition on my Haswell R i5-4460 build : this guide may be useful to the whole hackintosh community ! Many thank's ! 

post-1879825-0-80728600-1520027814_thumb.jpeg

  • Like 1
Link to comment
Share on other sites

@Matthew82, @apfelnico, 

 

I just implemented the TB-SSDT of @Matthew82 for my TBEX 3 in PCIe Slot-4. Note that there are a few necessary deviations from the TB-SSDT of @Matthew82 in my case.

 

Please revise...

 

Would it be possible to improve the DSB1 AHCI Controller Implementation, which still looks quite messy in both IOREG and Section 'PCI' of Apple's System report? 

 

TB Definition Block:

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 (PEGP, DeviceObj)    // (from opcode)
External (SL01, DeviceObj)    // (from opcode)
External (UPSB, DeviceObj)    // (from opcode)

TB PCI Device Implementation:

    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
            }

            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 (0x10)
                        {
                            "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"
                            }, 

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

            Device (DSB4)
            {
                Name (_ADR, 0x00040000)  // _ADR: Address
            }
        }
    }
post-1362934-0-35521700-1520063738_thumb.png
 
post-1362934-0-28769900-1520063763_thumb.png

 


Update: 

 

​TB Hotplug still not working in my case. 

 

After ejecting my TB LaCie 4TB Rugged and reconnecting, the HDD gets properly initialised. However it does not show up in Apple's file manager or in Apple's Disk utility, as the AHC controller DSB1 implementation seems suddenly missing in both IOREG and Section "PCI".

 

Looks like that we are still missing a proper DSB1 AHC Controller PCI device implementation within the SSDT...  

 

post-1362934-0-06081100-1520064492_thumb.png

 

post-1362934-0-38889200-1520064549_thumb.png

post-1362934-0-35521700-1520063738_thumb.png

post-1362934-0-28769900-1520063763_thumb.png

post-1362934-0-06081100-1520064492_thumb.png

post-1362934-0-38889200-1520064549_thumb.png

Link to comment
Share on other sites

I thing for you best solution will be start from zero and create TB ssdt from pattern in this post http://www.insanelymac.com/forum/topic/323540-thunderbolt-drivers/?p=2599598.

In this moment I can only make test with WD Book 8TB connected to DSB2. (I have Focusrite TB 2 device but I still waiting for adapter to TB3. So then I can make more tests) 

But with this HDD connected hot swap working OK. In ioreg before and after connecting everything look the same. 

 

post-916820-0-40790900-1520073329_thumb.png post-916820-0-08156000-1520073353_thumb.png

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...