Decided to upgrade my hackintosh with a discrete graphics card.
Currently running Mac OS X Yosemite 10.10.5.
My choices were EVGA GTX 960 SSC ACX 2.0+ 4GB and Gigabyte AMD R9 380 4GB.
With nvidia, one don’t have to worry about compatibility since nvidia will release web driver for each version of mac os. But with amd, compatibility can’t be guaranteed although device id may be present in amd kext. Both cards are almost similar in price, performance, power consumption, etc., AMD being slightly better performer. I wanna take the risk and chose
AMD R9 380 (Tonga).
Vendor ID : 1002
Device ID : 6939
Without any injection (boot-flags), the card defaults to Radeon framebuffer (
Auto-Init) with both Chameleon and Clover. '
GraphicsEnabler=No' may be needed for chameleon during installation in order to avoid kernel panic.
All ports work fine using Radeon framebuffer, although the card is detected as AMD R9 xxx.
I wanna try the framebuffers in AMD9000Controller. For that, I need to patch a frame buffer. To check Displayport, i have used 'Displayport to HDMI' cable (passive).
Redsock BIOS Decoder output:
GV-R938G1 GAMING-4GD/F4
Subsystem Vendor ID: 1458
Subsystem ID: 22bb
Object Header Structure Size: 305
Connector Object Table Offset: 48
Router Object Table Offset: 0
Encoder Object Table Offset: e2
Display Path Table Offset: 12
Connector Object Id [19] which is [DISPLAY_PORT]
encoder obj id [0x20] which is [INTERNAL_UNIPHY1 (osx txmit 0x11 [duallink 0x1] enc 0x2)] linkb: false
Connector Object Id [12] which is [HDMI_TYPE_A]
encoder obj id [0x20] which is [INTERNAL_UNIPHY1 (osx txmit 0x21 [duallink 0x1] enc 0x3)] linkb: true
Connector Object Id [4] which is [DVI_D]
encoder obj id [0x1e] which is [INTERNAL_UNIPHY (osx txmit 0x10 [duallink 0x0] enc 0x0)] linkb: false
Connector Object Id [2] which is [DVI_I]
encoder obj id [0x21] which is [INTERNAL_UNIPHY2 (osx txmit 0x12 [duallink 0x2] enc 0x4)] linkb: false
Connector Object Id [2] which is [DVI_I]
encoder obj id [0x15] which is [INTERNAL_KLDSCP_DAC1 (osx txmit 0x00 enc 0x10?)] linkb: false
In Yosemite, Framebuffers in AMD9000Controller (Connector count):
Exmoor(4), OPM(6), GreyhoundS(1), Basset(4), Greyhound(6), Baladi(6)
Exmoor and Baladi are not working (When used, defaults to Radeon Framebuffer).
GreyhoundS has only one connector.
With Basset, Unigine Heaven score is low (FPS: 61.1, Score: 1540).
Both OPM and Greyhound work similarly after patching. I chose Greyhound.
Original: Greyhound
00040000 04030000 00010107 10000103
00040000 04030000 00010207 20010204
00040000 04030000 00010307 11020301
00040000 04030000 00010407 21030402
00040000 04030000 00010507 12040505
00040000 04030000 00010607 22050606
After Patch:
00040000 04030000 00010107
11020401
00080000
04020000 00010207
21030503
04000000
04000000 00010307
10000105
04000000
14000000 00010407
12040606
00040000 04030000 00010507 1204
0202
00040000 04030000 00010607 2205
0304
Patched the first 4
connectors according to my setup.
‘
ATY,ControlFlags’ values are from IOJones output while using Radeon framebuffer.
Features values are already set in this framebuffer. Didn’t touch Unknown.
Transmitter and
Encoder values are from Redsock BIOS Decoder Output.
Hotplug ID values are already set in order [see Update-1 below]
Display port works only with
SenseID:01., Similarly, HDMI:03, DVI-D:05, DVI-I:06
Changed the senseids for the last two connectors since those ids are already used.
All ports are working. Dual monitor setup works with different combinations.
Card is detected as ATI Radeon R9 285 (Name given by Clover). R9 380 is rebadged R9 285 with same device id. Use latest revision of clover. InjectATI in Clover_r3241 & before will not work properly for this card. Graphics injection by DSDT will work with any version of clover. See Update-4 below.
Didn’t test HDMI audio. Unigine heaven score is same as that using Radeon Framebuffer.
Update 1 [08/27/2015]:
Hotplug IDs for my connectors: DisplayPort:04, HDMI:05, DVI-D:01, DVI-I:06. Credits to Fl0r!an.
These values can be found using Radeon bios decode from the post below.
Update 2 -
R9 380 boot issue in El Capitan [09/15/2015]:
Unlike Yosemite, R9 380 is not working OOB or with Framebuffer injection in El Capitan, although it may work during installation. I have tried Public Beta 5 and GM Candidate releases of 10.11.
Some people report success. But no confirmed reports for full graphics acceleration when PCIe (R9 380) is set as primary in BIOS. Monitor loses signal after verbose. This issue was first notified by Pcpaul who also found a temporary workaround for this problem (
Link).
Right now, best way to try El capitan with R9 380 is to install with integrated graphics (In BIOS, IGPU set as primary and CSM enabled). After finishing installation and initial setup of Mac OS, shutdown and change the display cable to graphics card.
Now the card will work (framebuffer injection is optional). Inject Intel should be used for now to get full QE/CI with R9 380. But monitor will get signal only after El Capitan fully loads. No signal even in BIOS. Hence make sure Timeout is set & Clover (UEFI Harddrive or UEFI USB) is set as first priority, before changing port.
Update 3 -
El Capitan USB port restriction [09/16/2015]:
My mobo has 14 USB2 connectors (4 internal + 4 rear + 6 from USB3) and 6 USB3 connectors (2 internal + 4 rear). All are using USB3 bus controller (XHC). Since my USB3 bus is named as XHC and not XHC1, there is no port restriction and first 15 ports from my DSDT will be loaded in El Capitan. Without DSDT edit, 14 (all) USB2 ports and 1 USB3 port (internal) are working, which means USB3 ports in the rear will only work if usb2 device is connected. Hence i have edited my DSDT (deleting unused internal headers of USB2 & USB3 and USB2 functionality of one rear USB3 port) so that i can use my rear USB3 ports for USB3 devices. With DSDT edit, there is no need for kext infoplist edit or installing DummyUSBXHCIPCI kext. Credits to Pokenguyen. Link
here. Maximus VI (Generic) patch from the repo
http://pjalm.com/repos/asus/ may be necessary in order to compile DSDT without errors. While applying the generic patch, remove '
Patch for Intel USB3 on Intel 8 Series chipsets to allow more power output' for EHC1, EHC2 and XHC. Otherwise, sleep may not work.
Update 4 -
DSDT injection of AMD Radeon R9 380 in Mac OS X [10/05/2015]:
Tried to inject graphics through DSDT and succeeded. Also added HDAU (from toleda's SSDT) to DSDT. Now HDMI audio works with DSDT alone. My final DSDT contains the following changes to OEM DSDT.
1 |
pjalm's patch - 'Maximus VI (Generic)' (minus patches for USB to allow more power output, which will interfere with sleep). Also pjalm has changed the patch for 'Add the DTGP method' (since yesterday), which gives compilation errors. Clover patch will be fine (included in my DSDT). |
2 |
Add PEG0 (PEGP + HDAU) to PCI0. HDAU is from toleda's SSDT for AMD (Link). |
3 |
Add ARPT (TP-Link wireless card FakeID) to RP08 under PCI0, so that infoplist edit is not necessary. Useful when booting with legacy bootloaders. Credits to Clover patch (FixAirport). |
4 |
For El Capitan only - Delete unused ports from XHC (not in my attached DSDT). See Update-3. |
I have injected the name 'AMD Radeon R9 380' for my graphics card. Attached DSDT has minimal configuration for R9 380. Since I have injected Greyhound framebuffer in DSDT, Greyhound framebuffer patch is mandatory before injecting this DSDT. Accomplished by Clover's KextsToPatch.
Note: This will not solve current problem of Tonga in El Capitan (not booting with PCIe as primary).