Jump to content

[Guide] Mac OSX 10.12 and 10.13 with X99 Broadwell-E family and Haswell-E family


nmano
 Share

1,954 posts in this topic

Recommended Posts

Some notes about GPU injection...

- If your GPU's "NVDA,Display-{letter}@{address}" (for example, if yours is at NVDA,Display-C@2) is missing a connector value, then you may get weird graphical glitches. I experienced this when I tried to plug in a HDMI cable. My screen would flicker/show graphical artifacts (didn't happen when I used DP without a connector value). So, we inject all "NVDA,Displays" (A@0-F@5) with connector values of 0x0800.

 

Found from another source (higher values support everything below it (or above it in how it's laid out below), therefore 0x800 would support all connector types):

0x04 => 0x04, 0x00, 0x00, 0x00 => DualLink-DVI
0x200 => 0x00, 0x02, 0x00, 0x00 => SingleLink-DVI
0x400 => 0x00, 0x04, 0x00, 0x00 => (mini)DisplayPort
0x800 => 0x00, 0x08, 0x00 0x00 => HDMI

- If you're missing a "hda-gfx" value at your GPU's ACPI location (BR3A@GFX1, PEG0@GFX1, POP2@GFX0...and so on), then it appears you won't get "nvAcceleration" and/or GPU recognition

- If you're missing a "hda-gfx" value at your GPU audio's ACPI location (BR3A@HDAU, PEG0@HDAU, POP2@HDAU...etc), then it appears you won't get sound via Display Port/HDMI

- If you're missing a "device-id" OR "layout-id" value at your GPU audio's ACPI location (BR3A@HDAU, PEG0@HDAU, POP2@HDAU...etc), then it appears you won't get sound via HDMI only (not req'd for Display Port)

 

- Apple OEM SSDTs just inject a _DSM method with "hda-gfx" - "onboard-2" at both the external GPU and external GPU audio ACPI locations. However, it appears some internal GPUs (iGPU) ACPI locations will need "hda-gfx" - "onboard-1" for cross-talk between Integrated Graphics and HD Audio.

 

As far injecting an Evga Titan X via SSDT, this is all I need to inject to get everything working (GPU recognition, GPU acceleration, and GPU sound recognition via DP/HDMI):

DefinitionBlock ("", "SSDT", 1, "mfc88", "GFX1", 0x00000000)
{
    Device (_SB.PCI0.BR3A.GFX1)
    {
        Name (_ADR, Zero)  // _ADR: Address
        Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
        {
            If (LEqual (Arg2, Zero))
            {
                Return (Buffer (One)
                {
                     0x03                                           
                })
            }

            Return (Package ()
            { 
                "hda-gfx", 
                Buffer (0x0A)
                {
                    "onboard-2"
                },
                               
                "@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                         
                }         
            })
        }
    }

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

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

                "device-id", 
                Buffer (0x04)
                {
                     0xB0, 0x0F, 0x00, 0x00                         
                } 
            })
        }
    }

    Name (_SB.PCI0.BR3A.H000._STA, Zero)  // _STA: Status
    Name (_SB.PCI0.BR3A.H001._STA, Zero)  // _STA: Status
    Name (_SB.PCI0.BR3A.D07C._STA, Zero)  // _STA: Status
}
  • Like 2
Link to comment
Share on other sites

Hmmm, strange. The GPU injection should have worked. I'll have to see your IOReg.

 

In the meantime, I've done some edits. Try the attached GFX1.aml below first, and if that doesn't work, then try attached BR3A.aml below (test each with the DSDT.aml from "patched.zip").

 

I got your fixes working now, i forgot to use the DSDT from your patched zip. But still not showing the thunderbolt in system pref. Here is attached ioreg and EFI.

efi_ioreg.zip

Link to comment
Share on other sites

I got your fixes working now, i forgot to use the DSDT from your patched zip. But still not showing the thunderbolt in system pref. Here is attached ioreg and EFI.

Try the SSDT from Chivs or this one

Link to comment
Share on other sites

shows in pci section now but   Thunderbolt: No drivers are loaded.

Unfortunately, out of ideas. I don't have any Thunderbolt ports in my setup, so I can't test.

Link to comment
Share on other sites

Yes exactly. Why is this so fixed - and how can I change that?

1. Find NVME ACPI Path (SB.PCI0.XXXX.XXXX) ==> for example, (BR1B.H000)

2. Find device tree (SB.PCI0.XXXX) ==> for example, (BR1B) 

3. Find any D0xx devices located at bottom of the device tree (BR1B) --- open your DSDT.aml (while at Clover Boot Manager screen, press F4, wait 5 seconds, then boot into OS-- mount primary drive, find the DSDT.aml in: EFI->CLOVER->ACPI->origin, open with MaciASL, and search for device tree (BR1B), stop when you've hit the "Device (XXXX)", click it to update the left side, then on the left, scroll down and look at the bottom of the device tree ==> for example, D075 and D081

4. Set (a scope to) NVME ACPI path and the D0xx paths to a status of 0 (which removes them)

5. Set a scope to the device tree (SB.PCI0.XXXX) (BR1B)

6. Create a new device (NVME) to replace the NVME APCI path (instead of BR1B.H000 it becomes BR1B.NVME)

7. Add a _DSM method with return properties (now you can inject AAPL,slot-name)

*Note - I'm using a spoofed class code, you can probably ignore that if you're not using Rehabman's HackrNVMeFamily.kext

 

My ssdtGen script now will do this for you!

 

DefinitionBlock ("", "SSDT", 2, "hack", "NVMe-Pcc", 0x00000000)
{
    External (_SB_.PCI0.BR1B, DeviceObj)    // (from opcode)
    External (_SB_.PCI0.BR1B.H000, DeviceObj)    // (from opcode)
    External (_SB_.PCI0.BR1B.D075, DeviceObj)    // (from opcode)
    External (_SB_.PCI0.BR1B.D081, DeviceObj)    // (from opcode)

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

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

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

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

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

                    "model", 
                    Buffer (0x10)
                    {
                        "NVMe Controller"
                    }, 

                    "name", 
                    Buffer (0x10)
                    {
                        "NVMe Controller"
                    }, 

                    "class-code", 
                    Buffer (0x04)
                    {
                         0xFF, 0x08, 0x01, 0x00                         
                    }, 

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


  • Like 2
Link to comment
Share on other sites

I see, no problem :)

 

I don't think anyone has managed to get Thunderbolt to show up correctly in System Prefs. I played around with injecting all the device properties from a Macbookpro13,2 and it didn't have any effect. The best I can get is to have Thunderbolt show up under PCI. I'm messing around with a Z270X motherboard which has the same TB chipset as the latest MacBook Pro's (the X99's use an older chipset from 2015) so we'll see if that is any different. Right now I'm just stoked that my USB 3.1 ports (Type-A and Type-C) both work at 10Gb speed and sleep/wake correctly via the ssdt I posted. I did tweak it a little bit more with correct device properties, so it's attached here.

SSDT-BR1B.aml.zip

  • Like 1
Link to comment
Share on other sites

I don't think anyone has managed to get Thunderbolt to show up correctly in System Prefs. I played around with injecting all the device properties from a Macbookpro13,2 and it didn't have any effect. The best I can get is to have Thunderbolt show up under PCI. I'm messing around with a Z270X motherboard which has the same TB chipset as the latest MacBook Pro's (the X99's use an older chipset from 2015) so we'll see if that is any different. Right now I'm just stoked that my USB 3.1 ports (Type-A and Type-C) both work at 10Gb speed and sleep/wake correctly via the ssdt I posted. I did tweak it a little bit more with correct device properties, so it's attached here.

 

ah i see. Maybe someone will find a workarround soon. I can see my devices in the PCI section,

and now it works to power on the soundcard when i got logged in to osx. Before i needed to turn on the card before i boot osx.

Link to comment
Share on other sites

ssdtGen updated to 0.0.9beta

ssdtGen changelog 0.0.9b:
✓ Removed SSDT-EVMR (Intel SPSR controller) -- not needed nor supported/updated by Intel
✓ Refactored SSDT-SMBS to include Apple "mikey" driver (thanks to Mald0n's DSDTs)
✓ All devices will now show up in System Report's "PCI" tab (thanks to Fergarth for reporting missing PCI devices)
✓ Adjusted SSDT-GFX1 to only inject necessary properties (removed any superfluous properties)
✓ Found and fixed that SSDT-GFX1 (GPU) injection can fail due to a missing HDAU "PinConfiguration" property

@Fergarth -- A missing PinConfiguration property was the likely culprit for your GPU injection failing.  If you decide to try again, it should work now.

  • Like 2
Link to comment
Share on other sites

Hey guys, is there a reason that my IMEI controller under PCI says Drivers Installed: No?

Wrong "device-id" and/or wrong "compatible" injected. I've found IOReg shows an incorrect value.

 

Some motherboards use this:

"device-id" - 0x3A, 0x1E, 0x00, 0x00                         
"compatible" - "pci8086,1e3a"
 
Regardless of what IOReg displays:
"IOName" - "pci8086,8d3a"
  • Like 2
Link to comment
Share on other sites

ssdtGen updated to 0.1.1beta

ssdtGen changelog 0.1.1b:
✓ Forced a temporary Terminal window resize for optimal viewing (102x30)
✓ Added initial support for a building a single SSDT for a NVME device†
✓ Updated help section for NVME SSDT building
✓ Refactored the commands to be more user-friendly and declarative 

† At the moment, it does not support incomplete ACPI tables -- only works in conjunction with a spoofed HackrNVMeFamily-10_xx_x.kext
Link to comment
Share on other sites

Good Night, finally i fixed my X99, but have tree little problems:

 

1. Wifi turn on-off-on auto and finally off after a few seconds, i have an original Broadcom BCM4360CD (0x14E4, 0x111), bluetooth works fine.

2. My Ram speed is 2400Mhz, but only catchs 2133 DDR4, I tested with CloverConfig with XMP Auto, 1 and 2, same result.

3. Why my PCI devices, don't appears in System Report? It shows error only.

 

Thanks un advace. :)

Link to comment
Share on other sites

Good Night, finally i fixed my X99, but have tree little problems:

 

1. Wifi turn on-off-on auto and finally off after a few seconds, i have an original Broadcom BCM4360CD (0x14E4, 0x111), bluetooth works fine.

2. My Ram speed is 2400Mhz, but only catchs 2133 DDR4, I tested with CloverConfig with XMP Auto, 1 and 2, same result.

3. Why my PCI devices, don't appears in System Report? It shows error only.

 

Thanks un advace. :)

hi

2-Update your bios

3- To make your DSDT

post-1181448-0-76481000-1491773638_thumb.png

post-1181448-0-03146400-1491773651_thumb.png

Link to comment
Share on other sites

Link to comment
Share on other sites

 

LOL, thanks so much!! i Will try it! :)

 

Awesome!

  • Like 2
Link to comment
Share on other sites

 Share

×
×
  • Create New...