Contribute
Register

SSDT GPU (Graphics Card) Injection

Status
Not open for further replies.

shilohh

Moderator
Joined
Jan 1, 2012
Messages
1,752
Motherboard
Asus Prime Z490-A
CPU
i9-10850K
Graphics
RX 5700 XT
Mac
  1. MacBook Pro
  2. Mac Pro
Mobile Phone
  1. Android
Work in progress...
Updated step 3b and files 2/22/2017.

If you have come to this guide to deal with a "Black Screen" issue, please read this post first:

http://www.tonymacx86.com/graphics/...ro-6-1-imac-15-imac-17-system-definition.html

You may also want to take a look at this post if you feel you might be having other Nvidia Web Driver related issues:
Solving NVIDIA Driver Install & Loading Problems

Injecting your GPU/s in your ACPI tables can:
• Enable HDMI audio functionality from your GPU.
• Possibly resolve issues with connecting multiple monitors.
• Solve ports not working.
• Fix issues with hot-plugging monitors.
• Naming your GPU to "GFX1" can eliminate the "Black Screen" issue with the MacPro6,1 system definition e.g. losing video signal to your monitor when OSX finishes loading and you should reach the desktop at boot time (the system is running, fully functional but there is no signal to the monitor). [credit: dgsga and furter]. NOTE: The system will still be responsive (not frozen). If your system is unresponsive with a black screen, this will not help you. NOTE: This trick will only work with MacPro6,1 and NOT iMac15-17.

I prefer SSDTs over the DSDT for device injection as updating the BIOS, moving PCI cards, or adding/removing PCI cards may require you to extract and edit a new DSDT.

Background:

In OEM Apple ACPI tables, the GPU Devices are named as follows:

iMac13/14/15/17: Discrete GPU = "GFX0" (@0). Integrated GPU = "IGPU" (@2 or 0x00020000)
MacPro3,1/5,1: Discrete GPU#1 = "PSX1" (@0).
MacPro6,1: Discrete GPU#1 = "GFX1" (@0). Discrete GPU#2 = "GFX2" (@0).

The usual school of thought is that each GPU should have a unique name (1st GPU = GFX0, 2nd GPU = GFX1 etc etc etc). However, If you use MacPro6,1 with multiple GPUs, you need to name all GPUs GFX1. Any GPU with a different name will lose video signal after the "Apple Logo" boot progress screen.

Preparation:


The file attachment at the bottom of this post contains a basic starter SSDT named SSDT-1.aml. Please download and unzip the files now.

Restart your hackintosh and enter the Clover GUI (you may need to hold down the spacebar while it's booting if you have Timeout set to 0). Press the F4 key (this will extract your motherboard's OEM ACPI tables) and wait for 5 seconds (Clover won't give you any indication that it has extracted the files). Boot your hackintosh and mount your EFI partition (see my included Mount EFI apps).

IMPORTANT:
Make sure your clover config won't conflict with your new SSDT injection. Open your Clover config.plist (EFI/CLOVER/config.plist).

Make sure that you don't have "AddHDMI" active. If it is present, set it to "false":

Code:
    <key>ACPI</key>
    <dict>
        <key>DSDT</key>
        <dict>
...
            <key>Fixes</key>
            <dict>
...
                <key>AddHDMI_8000000</key>
                <false/>

I'm not sure if it matters if Clover is adding properties to your GPU. If they are present, you may want to remove them. If any of these keys are not present, it's OK, don't add them.
Code:
    <key>Devices</key>
    <dict>
        <key>AddProperties</key>
        <array>
            <dict>
                <key>Device</key>
                <string> *your GPU* </string>
                <key> *key* </key>
                <string> *any* </string>
...

Make sure that Clover is not using a EFI string to inject your GPU (you would have had to put it there yourself).
Code:
        <key>Inject</key>
        <false/>
        <key>NoDefaultProperties</key>
        <false/>
        <key>Properties</key>
        <string> *string of numbers* </string>

I'm not sure if it matters if Clover is faking your discrete GPU's device ID. Fake device ID's can be added to the SSDT if needed (info coming later but you might want to wait if you need a fake GPU ID). UseIntelHDMI might be OK but I'm not positive that it won't conflict with our Discrete GPU SSDT injection. If any of these keys are not present, it's OK, don't add them.
Code:
        <key>FakeID</key>
        <dict>
            <key>ATI</key>
            <string>0x0</string>
...
            <key>IntelGFX</key>
            <string>0x0</string>
...
            <key>NVidia</key>
            <string>0x0</string>
...
        <key>UseIntelHDMI</key>
        <false/>

Navigate to the EFI/CLOVER/ACPI/patched folder. If you have DSDT.aml or SSDT*.aml in this folder, verify that you don't already have an entry/s for your GPU/s in these files. If there are GPU entry/s in these ACPI files, you may either remove them, modify the device name/s or leave them alone and skip making a new one/s. You can not inject the same device more than once. If you already have a SSDT named SSDT-1.aml there, rename the starter SSDT-1.aml you just downloaded using the next sequentially higher number IE: SSDT-2.aml or SSDT-3.aml etc etc etc. Names you can use are: "SSDT.aml" or "SSDT-0.aml" through "SSDT-9.aml". If you have more than 1 GPU installed and would like to create SSDTs for them too, duplicate the unmodified starter SSDT and name it using the previously mentioned naming conventions. Continue duplicating and renaming until you have enough for all the GPUs you'd like to inject.


1) Location:

Find your GPU's location in your IO Registry. I prefer IORegistryExplorer.app but you can use IOJones if you prefer. Open your IO Registry viewer and find your GPU. You can try searching for the word "display" if you are lost. In this example, the GPU is located in the PCI slot named "NPE3" and the address is "@2"(0x00020000).
NOTE: The GPU was given the name "display" by default because it has no given name in the ACPI tables. It's address is @0 (Zero or 0x00) in NPE3 which is @2 (0x00020000) in PCI0. Your GPU may already have a name assigned to it in the ACPI tables like "GFX0@0" or "PEGP@0".
171402-ioreg-finddisplay.jpg


NOTE: "AppleACPIPCI" is the driver and not a device. "IOPP" is the PCI bridge for that slot and not a additional device (it has no "@" address). Take a note of the GPU's device name, or name of the PCI slot that your GPU is installed in. Use TextEdit to record your notes.

2) Path:


Navigate to the EFI/CLOVER/ACPI/origin folder. Open DSDT.aml with MaciASL http://sourceforge.net/projects/maciasl/ and enter the name you found in step 1 in the search box labeled "Find" at the top of the app. Use the ">" button next to the search box to go to the matching results. NOTE: The result you are looking for will start with the word "Device". EXAMPLE: "Device (NPE3)".

171401-maciasl-finddevice.jpg


Take a note of the device path at the far bottom left corner of the app but discard "DSDT" and separate each device with a period ".". Example: "_SB.PCI0.NPE3".
NOTE: If you can't find your device in the DSDT, open your SSDTs from the origin folder and search for the device in each of them. Discard "SSDT" instead of "DSDT" in the path if the device was in a SSDT. Take a note of the device's "Name (_ADR, ...)" (address). If it is "Name (_ADR, 0x00010000)", "Name (_ADR, 0x00020000)", "Name (_ADR, 0x00030000)", or something similar, you will add GFX1 to it in step 3a.
Examples:
PCI0@0 > NPE3@2 > display@0 (_SB.PCI0.NPE3)
PCI0@0 > NPE1@1 > display@0 (_SB.PCI0.NPE1)
PCI0@0 > NPE7@3 > display@0 (_SB.PCI0.NPE7)
PCI0@0 > NPE9@3,2 > display@0 (_SB.PCI0.NPE9)

If it is "Name (_ADR, Zero)", "Name (_ADR, 0x00)" or "Name (_ADR, 0xFFFF)", you will need to disable the device and replace it with GFX1 in step 3b. You should also take note of what device it is inside of and what other devices are located there and what their addresses are. In the example below, the GPU is loaded in "Device (H000)" which is in BR3A. BR3A is the PCI slot but has many other devices in it. H000-H007 and D07E are reserved addresses for devices to load. "Device (H000)" will need to be disabled so that "Device (GFX1)" [new GPU name] can take the address "Name (_ADR, 0x00)". "Device (H001)" will need to be disabled as well so that "Device (HDAU)" [HDMI audio] can take the address "Name (_ADR, 0x01)".

full


BUT, we're not done yet. In the image below, you can see that "Device (D07E)" has the address "Name (_ADR, 0xFFFF)". Because it is FFFF it can be enumerated to anything. The GPU will try to load to it before the new GFX1 device in the new SSDT. So we will need to disable D07E as well. Take note of all these device names and paths.

full


Examples:
PCI0@0 > PEG0@1 > PEGP@0 (\_SB.PCI0.PEG0.PEGP)
PCI0@0 > BR3A@3 > H000@0 (_SB.PCI0.BR3A.H000)
PCI0@0 > BR3A@3 > D077@0 (_SB.PCI0.BR3A.D07E)
PCI0@0 > BR2A@2 > H000@0 (_SB.PCI0.BR2A.H000)
PCI0@0 > BR2A@2 > D075@0 (_SB.PCI0.BR3A.D075)


3) Patching:


Open the downloaded SSDT-1.aml (or the duplicate you are working on) in MaciASL.

If your GPU already had a device name (GFX0, PEGP, PXSX, H000, D077 or anything else) with a Zero (0x0) address in the OEM ACPI tables (DSDT or a SSDT), Skip to Step 3b.


If your GPU had no entry in the OEM ACPI tables, and showed up in IORegistryExplorer as "display@0" , continue here with step 3a.

3a) Add GFX1 to the PCI slot device:

Replace "_SB.PCI0.NPE3" with your device path from step 2 (if it is different), but leave ".GFX1" ".HDAU" at the end for the 2 devices.

EXAMPLE: If your path was \_SB.PCI0.PEG0, then Replace just the red part in "Device (_SB.PCI0.NPE3.GFX1)" & "Device (_SB.PCI0.NPE3.HDAU)" with \_SB.PCI0.PEG0.

BEFORE:

Code:
{
    Device (_SB.PCI0.NPE3.GFX1)
    {
        Name (_ADR, Zero)
        Name (_SUN, One)
    }


    Device (_SB.PCI0.NPE3.HDAU)
    {
        Name (_ADR, One)
    }
}

AFTER:

Code:
{
    Device (\_SB.PCI0.PEG0.GFX1)
    {
        Name (_ADR, Zero)
        Name (_SUN, One)
    }


    Device (\_SB.PCI0.PEG0.HDAU)
    {
        Name (_ADR, One)
    }
}

Continue to Step 3c


.
 

Attachments

  • SSDTfiles.zip
    900.2 KB · Views: 3,222
Last edited:
3b) Disable and replace the current GPU device with GFX1:

Open the appropriate "Disable ***.txt" patch list from the "Patches" folder that you downloaded ( the name of the patch list should have your device path in it). If there is not a file with the exact path, use the closest one and edit the path to match the exact path in the SSDT after applying it. command + A to select all the content from the patch list. command + C to copy the content. Click on the "Patch" button at the top center of the MaciASL app. command + V to paste the content into MaciASL's "Patch Text" window. When the patch finishes processing and the "Before"/"After" window populates with text, click the "Apply" button at the bottom right corner. When the patching finishes and all the text disappears, click the "Close" button at the bottom right corner. Repeat this process for additional devices that need to be disabled.

BEFORE:
Code:
{
    Device (_SB.PCI0.NPE3.GFX1)
    {
        Name (_ADR, Zero)  // _ADR: Address
        Name (_SUN, One)  // _SUN: Slot User Number
        Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
        {
            If (LEqual (Arg2, Zero))
            {
                Return (Buffer (One)
                {
                     0x03                                         
                })
            }

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

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

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

AFTER:
Code:
{
    Device (_SB.PCI0.BR3A.GFX1)
    {
        Name (_ADR, Zero)  // _ADR: Address
        Name (_SUN, One)  // _SUN: Slot User Number
        Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
        {
            If (LEqual (Arg2, Zero))
            {
                Return (Buffer (One)
                {
                     0x03                                         
                })
            }

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

    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 (0x02)
            {
                "hda-gfx",
                Buffer (0x0A)
                {
                    "onboard-1"
                }
            })
        }
    }
    Name (_SB.PCI0.BR3A.H000._STA, Zero)
    Name (_SB.PCI0.BR3A.H001._STA, Zero)
    Name (_SB.PCI0.BR3A.D07E._STA, Zero)
}

BEFORE:
Code:
{
    Device (_SB.PCI0.NPE3.GFX1)
    {
        Name (_ADR, Zero)  // _ADR: Address
        Name (_SUN, One)  // _SUN: Slot User Number
        Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
        {
            If (LEqual (Arg2, Zero))
            {
                Return (Buffer (One)
                {
                     0x03                                         
                })
            }

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

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

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

AFTER:

Code:
{
    Device (_SB.PCI0.NPE3.GFX1)
    {
        Name (_ADR, Zero)  // _ADR: Address
        Name (_SUN, One)  // _SUN: Slot User Number
        Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
        {
            If (LEqual (Arg2, Zero))
            {
                Return (Buffer (One)
                {
                     0x03                                         
                })
            }

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

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

            Return (Package (0x02)
            {
                "hda-gfx",
                Buffer (0x0A)
                {
                    "onboard-1"
                }
            })
        }
    }
    Name (_SB.PCI0.BR3A.H000._STA, Zero)
    Name (_SB.PCI0.BR3A.H001._STA, Zero)
    Name (_SB.PCI0.BR3A.D07E._STA, Zero)
}

Now create a copy of your device path in your text document from step 2 and delete the last device in the path.

EXAMPLE: If your path was \_SB.PCI0.BR3A.H000, then Delete H000. The new device path would be \_SB.PCI0.BR3A

Next, Replace "_SB.PCI0.NPE3" with your new edited device path, but leave ".GFX1" ".HDAU" at the end for the 2 devices.

EXAMPLE: If your new edited path is \_SB.PCI0.BR3A, then Replace just the red part in "Device (_SB.PCI0.NPE3.GFX1)" & "Device (_SB.PCI0.NPE3.HDAU)" with \_SB.PCI0.BR3A.

BEFORE:

Code:
{
    Device (_SB.PCI0.NPE3.GFX1)
    {
        Name (_ADR, Zero)  // _ADR: Address
        Name (_SUN, One)  // _SUN: Slot User Number
        Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
        {
            If (LEqual (Arg2, Zero))
            {
                Return (Buffer (One)
                {
                     0x03                                         
                })
            }

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

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

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

AFTER:

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

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

    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 (0x02)
            {
                "hda-gfx",
                Buffer (0x0A)
                {
                    "onboard-1"
                }
            })
        }
    }
    Name (_SB.PCI0.BR3A.H000._STA, Zero)
    Name (_SB.PCI0.BR3A.H001._STA, Zero)
    Name (_SB.PCI0.BR3A.D07E._STA, Zero)
}

Continue to Step 3c
 
Last edited:
Full injection for Nvidia Fermi (GTX 4xx & 5xx):

For multiple GPUs you will need to perform the following steps with only 1 GPU plugged in at a time. If you have a motherboard that has PCI slot switches you may simply switch off the slots that contain the additional GPUs. When you finish with the first card, shut down and switch it off or remove it from the system. Then switch on or install the second card and boot to repeat the following process for that card.

Boot your system with the appropriate GPU plugged in and the Nvidia GraphicsInjector turned on.

Clover config.plist example:
Code:
    <key>Graphics</key>
    <dict>
        <key>Inject</key>
        <dict>
            <key>ATI</key>
            <false/>
            <key>Intel</key>
            <false/>
            <key>NVidia</key>
            <true/>
        </dict>
        <key>NvidiaSingle</key>
        <false/>

Open IORegistryExplorer. save a IOReg and name it the card or slot name. EXAMPLE: "PCISlot1.ioreg"

Open SSDT-1.aml in MaciASL. Open the "Nvidia Fermi HDMI SSDT patch.txt". command + A to select all the content from the .txt patch list. command + C to copy the content. Click on the "Patch" button at the top center of the MaciASL app. command + V to past the content into MaciASL's "Patch Text" window. When the patches finish processing and the "Before"/"After" window populates with text, click the "Apply" button at the bottom right corner. When the patching finishes and all the text disappears, click the "Close" button at the bottom right corner. For multiple Fermi GPU configurations apply the "Nvidia Fermi Child patch.txt" to SSDTs for all "Secondary" GPUs.
NOTE: If you have Fermi GPUs paired with newer Kepler or Maxwell GPUs, you should apply the "Nvidia Fermi Child patch.txt" and treat the Fermi as secondary ("NVDA,Child" installed in any PCI Slot except for 1). The newer Kepler and Maxwell cards should always be your Primary GPU ("NVDA,Parent" installed in PCI Slot 1). The Nvidia Web Drivers handle all device properties for Kepler and Maxwell cards and they are always given the "NVDA,Parent" property.

Model
Locate the "model" Data for the GPU device in IORegistryExplorer. Double click in the "Value" field to highlight/select the value. Copy it to your text document. Delete the < & > at the beginning and end.
Before:
Code:
<41 73 75 73 20 47 65 46 6f 72 63 65 20 47 54 58 20 35 38 30>
After:
Code:
41 73 75 73 20 47 65 46 6f 72 63 65 20 47 54 58 20 35 38 30
Add a "0x" before each hex pair.
Example:
Code:
0x41 0x73 0x75 0x73 0x20 0x47 0x65 0x46 0x6f 0x72 0x63 0x65 0x20 0x47 0x54 0x58 0x20 0x35 0x38 0x30
Add a comma after each hex pair except for the last pair.
Example:
Code:
0x41, 0x73, 0x75, 0x73, 0x20, 0x47, 0x65, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x20, 0x47, 0x54, 0x58, 0x20, 0x35, 0x38, 0x30
Copy your final value and paste it over "//Replace this with your model. (HEX or Text)" to replace.
Befor:
Code:
                "model",
                Buffer ()
                {
                   //Replace this with your model. (HEX or Text)
                },
EXAMPLE After:
Code:
                "model",
                Buffer ()
                {
                   0x41, 0x73, 0x75, 0x73, 0x20, 0x47, 0x65, 0x46, 0x6f, 0x72, 0x63, 0x65, 0x20, 0x47, 0x54, 0x58, 0x20, 0x35, 0x38, 0x30
                },

NVCAP
Locate the "NVCAP" Data for the GPU device in IORegistryExplorer. Double click in the "Value" field to highlight/select the value. Copy it to your text document. Delete the < & > at the beginning and end.
Before:
Code:
<04 00 00 00 00 00 03 00 3c 00 00 00 00 00 00 07 00 00 00 00>
After:
Code:
04 00 00 00 00 00 03 00 3c 00 00 00 00 00 00 07 00 00 00 00
Add a "0x" before each hex pair.
Example:
Code:
0x04 0x00 0x00 0x00 0x00 0x00 0x03 0x00 0x3c 0x00 0x00 0x00 0x00 0x00 0x00 0x07 0x00 0x00 0x00 0x00
Add a comma after each hex pair except for the last pair.
Example:
Code:
0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00
Copy your final value and paste it over "//Replace this with your NVCAP. (HEX)" to replace.
Befor:
Code:
                "NVCAP",
                Buffer ()
                {
                    //Replace this with your NVCAP. (HEX)
                },
EXAMPLE After:
Code:
                "NVCAP",
                Buffer ()
                {
                    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00
                },

VRAM
Locate the "VRAM,totalsize" Data for the GPU device in IORegistryExplorer. Double click in the "Value" field to highlight/select the value. Copy it to your text document. Delete the < & > at the beginning and end.

Before:
Code:
<00 00 00 c0>
After:
Code:
00 00 00 c0
Add a "0x" before each hex pair.
Example:
Code:
0x00 0x00 0x00 0xc0
Add a comma after each hex pair except for the last pair.
Example:
Code:
0x00, 0x00, 0x00, 0xc0
Copy your final value and paste it over "//Replace this with your VRAM,totalMB. (HEX)" to replace.
Befor:
Code:
                "VRAM,totalsize",
                Buffer (0x04)
                {
                    //Replace this with your VRAM,totalMB. (HEX)
                },
EXAMPLE After:
Code:
                "VRAM,totalsize",
                Buffer (0x04)
                {
                    0x00, 0x00, 0x00, 0xc0
                },

Continue to Step 3c
 
Last edited:
3c) Slot Name and HDMI:

Open the correct patch list .txt from the "Patches" folder that you downloaded.
NOTE: Kepler are most GTX 6**, most GeForce GTX 7** and most Quadro K***. Maxwell are the GTX 750, GTX 750 Ti, GTX 9**, GTX Titan X, Quadro M*** and some Quadro K**. If you aren't sure, google your card's microarchitecture. AMD all use the same patch which is for HDMI audio only. More on adding AMD ports and frame buffers later.
command + A to select all the content from the .txt patch list. command + C to copy the content. Click on the "Patch" button at the top center of the MaciASL app. command + V to past the content into MaciASL's "Patch Text" window. When the patches finish processing and the "Before"/"After" window populates with text, click the "Apply" button at the bottom right corner. When the patching finishes and all the text disappears, click the "Close" button at the bottom right corner.

For Nvidia Fermi cards (GTX 4**/5**), see post #3

If you are patching a SSDT for a 2nd, 3rd or 4th GPU, change "(_SUN, One)" to "(_SUN, 0x02)" for the 2nd GPU, "(_SUN, 0x03)" for the 3rd, or "(_SUN, 0x04)" for the 4th GPU.
Change both instances of "onboard-1" to "onboard-2" for the 2nd GPU, "onboard-3" for the 3rd, or "onboard-4" for the 4th GPU.

Click the "Compile" button at the top center of the app. Choose "File" > "Save" or command + S to save the changes.


4) Installation:


Move the modified SSDT to the EFI/CLOVER/ACPI/patched folder.


5) For multiple GPUs:


If you have multiple GPUs, repeat the process for each of your addition GPUs with SSDT-2, SSDT-3, or SSDT-4 and don't forget to change "(_SUN, One)" and both instances of "onboard-1" as outlined in step 3.

If you have multiple Fermi cards, once all the finished SSDTs for all GPUs are in the EFI/CLOVER/ACPI/patched folder, turn off the GraphicInjector:

Clover config.plist example:
Code:
    <key>Graphics</key>
    <dict>
        <key>Inject</key>
        <dict>
            <key>ATI</key>
            <false/>
            <key>Intel</key>
            <false/>
            <key>NVidia</key>
            <false/>
        </dict>
Shut down and switch on the PCI slots or re-install all the GPUs.

Reboot.

6) Verification:


Reboot. Open your IORegistry Explorer and use the "command + N" keyboard shortcut to open a New Explorer window. Search for "display". Your GPU should now be loaded as "GFX1".

174124-verify.png

NOTE: In my example in step 1 it was display@0 and now it is GFX1@0.


This last step is only for those who don't see the Apple logo and boot progress bar when OS X is loading at boot time.
mac-progress-bar-screen-icon.png

If you don't see the Apple Progress Indicator before you reach the desktop and you really want it, continue to step 7. NOTE: Step 7 only works for one static port at a time. If you decide to change the port that your monitor is plugged in to, you will need to repeat step 7 to see the Progress Indicator from that port.

7) Boot-Display:

Make sure you have only 1 monitor plugged into your main GPU and it is the monitor that you want to see the Apple Boot Progress Indicator on. Unplug all other monitors. You will only be able to see the Apple Boot Progress Indicator from this port on this GPU.Find the Monitor (Display) location in IO Registry. Open your IO Registry viewer and search for the word "display" as you did in step 1. This time we are looking for "display" loaded on one of the GPU's ports.

Example:
Image Lost when the site was updated. I'll find a replacement eventually.
180646-display-2.jpg

In the example above we see the Monitor (display0) connected to port "NVDA,Display-C@2". I will refer to it as C@2. Take note of the port that your monitor is connected to. Examples: A@0, B@1, C@2, D@3, E@4 or F@5.

Mount your EFI partition and open the SSDT for your main GPU in MaciASL.

Open the "Boot-Display" patch list .txt from the "Patches" folder that matches the last 2 characters of your port.
Examples: @0, @1, @2, @3, @4 or @5.
command + A to select all the content from the .txt patch list. command + C to copy the content. Click on the "Patch" button at the top center of the MaciASL app. command + V to past the content into MaciASL's "Patch Text" window. When the patches finish processing and the "Before"/"After" window populates with text, click the "Apply" button at the bottom right corner. When the patching finishes and all the text disappears, click the "Close" button at the bottom right corner.

Click the "Compile" button at the top center of the app. Choose "File" > "Save" or command + S to save the changes.

Plug back in any additional monitors that you may have. Reboot and verify that you see the logo and progress bar before you reach the desktop.

Thanks and credit to frontend-dev for his image and testing.
Thanks and credit to RehabMan & toleda for always being helpful and teaching me new stuff.
Thanks to all of you who give feedback and test all of this as well.
...
 
Last edited:
SSDT GPU (Graphics Card) Injection for HDMI Audio and Nvidia with MacPro6,1

dsdt edits have to be applied after each BIOS update. ssdts are not effected by BIOS updates. Suggestion: make all APCI edits in the dsdt and all APCI injection in a ssdt; install one or the other, avoid both.

No need for separate Fermi, Kelper and Maxwell edits; Maxwell edits/injection supports Fermi Kepler and Maxwell.

dsdt edits: HDMI Audio AppleHDA
ssdt/NPE3: AMD/Nvidia HDMI Audio [Easy Guide]

Plan to add your macpro6,1/GFX1 note, credit this thread.

Good work.
 
SSDT GPU (Graphics Card) Injection for HDMI Audio and Nvidia with MacPro6,1

dsdt edits have to be applied after each BIOS update. ssdts are not effected by BIOS updates. Suggestion: make all APCI edits in the dsdt and all APCI injection in a ssdt; install one or the other, avoid both.
Yeah I meant to and will add a note about why I prefer SSDT over DSDT for device injection. Moving or adding/removing PCI-E cards can require a DSDT remake too.

No need for separate Fermi, Kelper and Maxwell edits; Maxwell edits/injection supports Fermi Kepler and Maxwell.
Couldn't adding ports that don't physically exist cause bad behaviour? I had also planned on adding full device property patches for Firmi cards to eliminate the need for graphics enablers.

dsdt edits: HDMI Audio AppleHDA
ssdt/NPE3: AMD/Nvidia HDMI Audio [Easy Guide]

Plan to add your macpro6,1/GFX1 note, credit this thread.

Good work.
Thanks!

I'm looking into/testing when (with other system definitions) it would be be best to use GFX0 and other name instead of GFX1. Any input from you would be greatly appreciated. Also, some credit should go to: dgsga and furter
 
Black Screen with MacPro 6,1 or iMac 15 or iMac 17 System Definition

I suggest you try it because the maxwell SSDT in addition to HDMI Audio, injects all the ports too.

Ok, I now tried this fix, but as expected, I got problems ^^
Look at the attachment, there is no match for my GPU location in the DSDT?! Or is it, because I'm still on MacPro 3,1 ? I would like to stay at it, cause "never change a running system", except the graphics.
 

Attachments

  • Bildschirmfoto 2016-01-15 um 18.36.23.png
    Bildschirmfoto 2016-01-15 um 18.36.23.png
    53.3 KB · Views: 1,958
  • Bildschirmfoto 2016-01-15 um 18.37.06.png
    Bildschirmfoto 2016-01-15 um 18.37.06.png
    151.3 KB · Views: 2,047
Black Screen with MacPro 6,1 or iMac 15 or iMac 17 System Definition

Ok, I now tried this fix, but as expected, I got problems ^^
Look at the attachment, there is no match for my GPU location in the DSDT?! Or is it, because I'm still on MacPro 3,1 ? I would like to stay at it, cause "never change a running system", except the graphics.
That's correct. You don't have GFX1 in your ACPI tables. You have to put it there. Your system definition has no effect on the acpi tables. They are part of the BIOS.

The address you would use for the SSDT would be something like _SB.PCI0.PEG0.PEGP.GFX1 or \_SB.PCI0.PEG0.PEGP.GFX1 but you need to actually follow the exact steps in the guide to figure it out for sure.

or just use clover's auto dsdt patching to rename PEGP to GFX1 to achieve the same result.
 
Black Screen with MacPro 6,1 or iMac 15 or iMac 17 System Definition

That's correct. You don't have GFX1 in your ACPI tables. You have to put it there. Your system definition has no effect on the acpi tables. They are part of the BIOS.

The address you would use for the SSDT would be something like _SB.PCI0.PEG0.PEGP.GFX1 or \_SB.PCI0.PEG0.PEGP.GFX1 but you need to actually follow the exact steps in the guide to figure it out for sure.

or just use clover's auto dsdt patching to rename PEGP to GFX1 to achieve the same result.

Sorry, I dont get it ... I never used the DSDT / SSDT patching ...

So, my Graphics name is PEG0 - right?
What is ment with PEGP?
In MaciASL i have to rename all "PEG0" to GFX1 ? oder rename all PEGP to GFX1?
after that I save it to /EFI/EFI/CLOVER/Acpi/patched ?!
 
Status
Not open for further replies.
Back
Top