shilohh
Moderator
- Joined
- Jan 1, 2012
- Messages
- 1,752
- Motherboard
- Asus Prime Z490-A
- CPU
- i9-10850K
- Graphics
- RX 5700 XT
- Mac
- Mobile Phone
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":
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.
Make sure that Clover is not using a EFI string to inject your GPU (you would have had to put it there yourself).
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.
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".
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)".
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)".
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.
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:
AFTER:
Continue to Step 3c
.
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".
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)".
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)".
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.
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
Last edited: