Contribute
Register

Guide How to Patch AMD Framebuffers for High Sierra using Clover

Status
Not open for further replies.
I'm getting the same issue when running against the ROM from my Sapphire Radeon RX Vega64 8G NITRO+

The port layout of my card (DP,DP,HDMI,HDMI) doesn't match any of the reference board layouts so I need to set my own.

Ultimately I'm trying to resolve a mouse lag issues I'm experiencing whenever I turn on my second monitor. It sounds the same issue someone else reported here: https://www.tonymacx86.com/threads/amd-vega-56-64-mouse-lag.254490/

The Vega Mouse Lag thread points to this thread and setting the correct port assignment as being the solution.

So any advice for setting the correct framebuffers for a Vega 64 card would be much appreciated.

Thanks

Hello, I know this is kind of an old post but did you manage to resolve this? I just switched from an RX 580 that worked perfectly to a Vega 64 that has the mouse lag (very annoying). Any help would be appreciated, my ports are close to yours but they added a DVI one also. (Asus ROG Strix Vega 64).
 
Hi Carpentryplus25 and others who composed the guide on page 1. Followed it and got my XFX Rx480 working, full acc, 2 monitors, Mojave 10.14.4 beta 1.
Thanks for the good work !!
 
I have a question. Since my RX570 is recognized by the system, do I need to patch my framebuffers? I have full resolution at boot with Clover and desktop once it loads (after the expected flash when the OS takes over.)

If I inject ATI using Clover (along with Radeon Deinit), without injecting a framebuffer manually, it says it is using Baladi framebuffer. While that works it doesn’t match my cards layout. Guariba or Dayman is more closely matched (DP, DP, DP, HDMI, DVI-D). Should I just manually inject it or still continue to try patching using this guide?

My biggest problem continues to be wake after sleep even if using Radeon Deinit. 70% times it is fine, but the rest of the time, the computer wakes, but I get a blank screen. Oddly I can not VNC or share my screen either. But I can remotely access files. Even if I use terminal to issue a remote shutdown command, it doesn’t work.

Thanks.

EDIT 02-05-19
In case anyone else has the same issue, I figured out that I needed darkwake=10 in order for sleep to work properly. I had never needed it before. Maybe because I always had Nvidia cards? Still wondering about framebuffer though.

EDIT 02-14-19
The problem has somehow come back. Even with darkwake=10 I still can’t wake from sleep most of the time. Computer will wake but I have a blank screen.

EDIT 02-22-19
Finally! I think darkwake=8 has finally fixed my issue.
 
Last edited:
EDIT: Resolved! Solution at bottom.

Does anyone have any idea or experience with DVI-D apparently only outputting DVI-I? So, my problem is that my Dual Link DVI port will only output at Single Link DVI resolutions. This is after using the framebuffer patch method mentioned above in order to get the DVI-D port to function whatsoever.

Details:
MSI Radeon RX 470 Armor Series, 4GB
Ports: DP, DP, DP, HDMI, DVI-D (5)

Mojave 10.14.3
System works A-ok with the old NVIDIA GTX 650 I had, and I've tried a fresh install/UniBeast won't boot on DVI after Apple logo, blank screen without the framebuffer patch.

The DP ports function fine with no frame buffer patch, and without any sort of ATI Inject / RadeonDeINT, or WEG/LiLu, properly accelerated with 4GB VRAM.

I've tried the different framebuffers and appropriate patches including Dayman, Acre, and Orinoco. Consistently, at best, I can get DVI single link output (monitor limited to 1280x800 [no scaler] on DVI instead of 2560x1600 [native]). I've also tried the fallback/alternate DVI-D connector sections mentioned:

Connector Type DVI-DL 14 00 00 00
Connector Type DVI-DL 16 00 00 00

I've tried all the combinations of WEG and Lilu, ATI Inject with Device ID, etc and none of that got the DVI-D port working whatsoever (boot to blank login screen, could screen share access OSX).

Note: This card works perfectly in Win10 at proper resolutions. Also, I can get the card to output at the proper 2560x1600 res via DVI-D but only by using a faulty Device ID so that the AMD9500 controller doesn't load and though OSX recognizes the card as a 470, it only has 15MB VRAM recognized and no acceleration.


RADEON BIOS DECODE



——



ATOM BIOS Rom:

SubsystemVendorID: 0x1462 SubsystemID: 0x3414

IOBaseAddress: 0x0000

Filename: 21S.666

BIOS Bootup Message:

113-MSITV341MH.280



PCI ID: 1002:67df

Connector at index 0

Type [@offset 40844]: DisplayPort (10)

Encoder [@offset 40848]: INTERNAL_UNIPHY2 (0x21)

i2cid [@offset 40954]: 0x90, OSX senseid: 0x1

HotPlugID: 6

Connector at index 1

Type [@offset 40854]: DisplayPort (10)

Encoder [@offset 40858]: INTERNAL_UNIPHY2 (0x21)

i2cid [@offset 40981]: 0x92, OSX senseid: 0x3

HotPlugID: 4

Connector at index 2

Type [@offset 40864]: DisplayPort (10)

Encoder [@offset 40868]: INTERNAL_UNIPHY1 (0x20)

i2cid [@offset 41008]: 0x91, OSX senseid: 0x2

HotPlugID: 1

Connector at index 3

Type [@offset 40874]: HDMI-A (11)

Encoder [@offset 40878]: INTERNAL_UNIPHY1 (0x20)

i2cid [@offset 41035]: 0x93, OSX senseid: 0x4

HotPlugID: 5

Connector at index 4

Type [@offset 40884]: DVI-D (3)

Encoder [@offset 40888]: INTERNAL_UNIPHY (0x1e)

i2cid [@offset 41062]: 0x95, OSX senseid: 0x6

HotPlugID: 3



——



REDSOCK DECODE



21S.666 :



113-MSITV341MH.280



Subsystem Vendor ID: 1462

Subsystem ID: 3414

Object Header Structure Size: 350

Connector Object Table Offset: 48

Router Object Table Offset: 0

Encoder Object Table Offset: fb

Display Path Table Offset: 12

Connector Object Id [19] which is [DISPLAY_PORT]

encoder obj id [0x21] which is [INTERNAL_UNIPHY2 (osx txmit 0x12 [duallink 0x2] enc 0x4)] linkb: false

Connector Object Id [19] which is [DISPLAY_PORT]

encoder obj id [0x21] which is [INTERNAL_UNIPHY2 (osx txmit 0x22 [duallink 0x2] enc 0x5)] linkb: true

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 patch I'm using to at least get DVI-I output:
Code:
000400000403000000010200000000001204060100000000
000400000403000000010300000000002205040300000000
000400000403000000010400000000001102010200000000
000800000402000000010500000000002103050400000000
040000001402000000010100000000001000030600000000


So, I finally wound up fixing this not long after posting. I've been working on this for a few hours each day for a week... It wound up being a clue in one of the other Framebuffers as an alternative DVI-D code listed in Orinoco but not in the OP's alt list.

Here's my final Dayman FB patch code that worked (it's the 1402 to 0400 change in the last line)!

Code:
000400000403000000010200000000001204060100000000
000400000403000000010300000000002205040300000000
000400000403000000010400000000001102010200000000
000800000402000000010500000000002103050400000000
040000000400000000010100000000000000030600000000
 
Last edited:
So if you recently installed High Sierra and have an AMD graphics card and were greeted at the end of the installation with black screens and Lilu.kext and WhateverGreen.kext wasn't able to resolve it, then try patching the framebuffer that corresponds to your graphics card to try resolving it. Initially I wasn't going to write this guide as there are plenty of other internet resources for doing this procedure, but after reading some AMD black screen post on High Sierra, I felt it is needed to have a dedicated guide here at Tonymacx86.com.

Originally I had absolutely no problems with my VisionTek AMD Radeon 7970 in all versions of macOS as long as I had the IGPU set as primary in UEFI/Bios settings, it always worked OOB. But then came High Sierra to mess that all up. The changes in High Sierra are mainly Metalv2. Apple is changing the way all the graphics drivers are working to support eGPU setups better. Before High Sierra I was using injectATI=true with Hamachi or Futomaki framebuffers, I could even not injectATI and use the RadeonFramebuffer with not problems. Since High Sierra AMD cards are pretty much required to be injected via some method, for a fully functional card. I noticed in the AMD7000Controller info.plist CFG_USE_AGDC was set to false on Hamachi framebuffer and all other that aren't listed in the info.plist, which lead me to start patching different framebuffers. I likely could have went a different method of using a dummy kext to override the default values in the native info.plist but it wasn't needed for me. Others may find that this is a needed step, it trying all framebuffers and still in failure.


Change log
Use Florian's version of radeon_bios_decode 12/2/2017
Add RadeonDeInit=True 11/15/2017
fix some typos and make changes to template, added some credits 10/27/2017
add missing info 10/25/2017
initial 10/23/17

Requirements:
  • Native AMDXXXXController.kext
    • Rerun the installer if you've been tampering with it
  • A full UEFI system with CSM disable if an IGPU or helper graphics card is not available
    • If you don't have an IGPU or helper Nvidia card and go the full UEFI method you must use RadeonDeInit=True in the graphics section of you config.plist
    • Older systems will require a Helper card in which scenario might as well not use AMD.
  • A way to retrieve the rom file for your graphics card can be done in Windows.
  • Ability to use terminal.app can be done on versions earlier than High Sierra.
    • You still need to be able to dump some stuff in terminal on High Sierra.
Tools:
  • redsock_bios_decoder attached to thread
  • radeon_bios_decode
  • Pavo's script to dump all AMD framebuffers available here
  • DPCIManager to dump the GFX rom file from macOS or GPUZ to dump it from windows
  • Clover Configurator
Step 1.
Extracting the GFX rom file from the GFX card. This can be done with DPCIManager in macOS or GPUZ in windows. I will not be covering the windows method though.

View attachment 287704

Save it to a location for use later.

Step 2.
Pick a proper framebuffer for you card. It should have the same number of ports as your card. You may have to try patching all the framebuffers with the same number of ports to find the right one, I will cover this later in the guide. So dump all the AMD framebuffers with Pavo's Sierra script. It's a python script so open terminal and type php one space then drag in the script and hit enter. It will then list all the default framebuffers connector information in hex values. Open a new text edit document and copy and paste the data to it for future reference.

Step 3.
Gather the information from the rom file using radeon_bios_decode and redsock_bios_decoder. So open terminal and drag radeon_bios_decode into terminal one space and type < one space and drag in the rom file and press enter. Repeat the same process for redsock_bios_decoder and save the output to your text edit document for later use.

Step 4.
Getting the connector information from the decoders. Looking at my example from my AMD Radeon HD 7970.
radeon_bios_decode output. Get radeon_bios_decode from here attached to first post in thread.
Code:
ATOM BIOS Rom:
    SubsystemVendorID: 0x1545 SubsystemID: 0x7970
    IOBaseAddress: 0x0000
    Filename: SV2A01.001
    BIOS Bootup Message: TAHITI XT PCIE 3G/384B GDDR5 DLDVI-I/HDMI/2XMINI-DP 925E/1375M
PCI ID: 1002:6798

Connector at index 0
   Type [@offset 43422]: DisplayPort (10)
   Encoder [@offset 43426]: INTERNAL_UNIPHY2 (0x21)
   i2cid [@offset 43540]: 0x90, OSX senseid: 0x1
   HotPlugID: 5
Connector at index 1
   Type [@offset 43432]: DisplayPort (10)
   Encoder [@offset 43436]: INTERNAL_UNIPHY2 (0x21)
   i2cid [@offset 43567]: 0x91, OSX senseid: 0x2
   HotPlugID: 4
Connector at index 2
   Type [@offset 43442]: HDMI-A (11)
   Encoder [@offset 43446]: INTERNAL_UNIPHY1 (0x20)
   i2cid [@offset 43594]: 0x93, OSX senseid: 0x4
   HotPlugID: 1
Connector at index 3
   Type [@offset 43452]: DVI-I (2)
   Encoder [@offset 43456]: INTERNAL_UNIPHY (0x1e)
   i2cid [@offset 43631]: 0x95, OSX senseid: 0x6
   HotPlugID: 3
Connector at index 4
   Type [@offset 43462]: DVI-I (2)
   Encoder [@offset 43466]: INTERNAL_KLDSCP_DAC1 (0x15)
   i2cid [@offset 43631]: 0x95, OSX senseid: 0x6
   HotPlugID: 3
and redsock_bios_decoder output
Code:
SV2A01.001  :
TAHITI XT PCIE 3G/384B GDDR5 DLDVI-I/HDMI/2XMINI-DP 925E/1375M
Subsystem Vendor ID: 1545
       Subsystem ID: 7970
Object Header Structure Size: 389
Connector Object Table Offset: 48
Router Object Table Offset: 0
Encoder Object Table Offset: 118
Display Path Table Offset: 12
Connector Object Id [19] which is [DISPLAY_PORT]
    encoder obj id [0x21] which is [INTERNAL_UNIPHY2 (osx txmit 0x12 [duallink 0x2] enc 0x4)] linkb: false
Connector Object Id [19] which is [DISPLAY_PORT]
    encoder obj id [0x21] which is [INTERNAL_UNIPHY2 (osx txmit 0x22 [duallink 0x2] enc 0x5)] linkb: true
Connector Object Id [12] which is [HDMI_TYPE_A]
    encoder obj id [0x20] which is [INTERNAL_UNIPHY1 (osx txmit 0x11 [duallink 0x1] enc 0x2)] linkb: false
Connector Object Id [2] which is [DVI_I]
    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 [0x15] which is [INTERNAL_KLDSCP_DAC1 (osx txmit 0x00 enc 0x10?)] linkb: false

From this information we can construct our connector code

Notice the numbers that are colored these are the numbers of interest. I will start with the connector at index 0 for and explanation of how this works.

Some guides may use Connector at index for hotplugid values and when you use Florian's version of radeon_bios_decode it will reveal the correct hotplugid. So use the version attached to this thread or in the Compatibility thread.
Display Port at index 0 will use HotPlugID 05

So pulling these numbers together for the connector at index 0 is as follows.
Code construction: 12040501
The first two digits of the constructed code from the decoders is Transmitter (12) the next two are the encoder(04) the next two are hotplug ID (05) the next two are sense ID (01)

For my example I had to use the Namako framebuffer the Hamachi and Futomaki framebuffers would not work in High Sierra mainly due to all the graphics changes in Metel v2. So the Namako unpatched Frambuffer connectors are as follows.
Code:
Namako (4) @ 0xed900
LVDS, LVDS, DP, DP[/COLOR]
020000000001000000010151000000002205020200000000
020000000001000000010261010000001204010100000000
000400000403000000010343000000001102030300000000
000400000403000000010433000000002103040400000000

The numbers in red are where we change to the number we construct from the decoders (12040501)
The numbers in green are the connector type
The numbers in blue are the ATY, Control Flags
The numbers in purple are Features

Now my connector types are completely wrong with this frame buffer as I need DP, DP, HDMI, and DVI-I, So I needed to change the green numbers in the framebuffer. Here's a list of all the different connector types and their respective digits.

Connector Type LVDS 0 × 00000002 = 02 00 00 00 Note: Laptop Monitor
Connector Type DVIDL 0 × 00000004 = 04 00 00 00 Note: Dual Link DVI
Connector Type VGA 0 × 00000010 = 10 00 00 00
Connector Type SV 0 × 00000080 = 08 00 00 00
Connector Type DP = 0 × 00000400 00 04 00 00
Connector Type HDMI 0 × 00000800 = 00 08 00 00
Connector Type DVISL 0 × 00000200 = 00 02 00 00 Note: Single Link DVI

For my example I need to change all the connector sections of this framebuffer.
Old:
020000000001000000010151000000002205020200000000 (LVDS)
020000000001000000010261010000001204010100000000 (LVDS)
000400000403000000010343000000001102030300000000 (DP)
000400000403000000010433000000002103040400000000 (DP)
New:
000400000001000000010151000000002205020200000000 (DP)
000400000001000000010261010000001204010100000000 (DP)
000800000403000000010343000000001102030300000000 (HDMI)
000200000403000000010433000000002103040400000000 (DVI-I)

Now I need to change the control Flags to match the connectors which are completely wrong at this point for my card. Here's a list that explains them.

0×0002 : LVDS ControlFlag : 0×0040 and 0×0100
0×0004 : DVI-DL ControlFlag : 0×0016, 0×0014, and 0×0214
0×0010 : VGA ControlFlag : 0×0010
0×0080 : S-Video ControlFlag : 0×0002
0×0200 : DVI-SL ControlFlag : 0×0014, 0×0214, and 0×0204
0×0400 : DisplayPort ControlFlag : 0×0100, 0×0104, 0×0304, 0×0604, and 0×0400
0×0800 : HDMI ControlFlag : 0×0204


Translated in to standard control flags:

Connector Type DP 04 03 00 00
Connector Type HDMI 04 02 00 00
Connector Type DVIDL 14 02 00 00
Connector Type DVISL 04 02 00 00
Connector Type S-VD 02 00 00 00
Connector Type LVDS 00 01 00 00
Note: some connectors have multiple control flags that can be used if the first isn't working like on the Display port or DVI

Secondary control flags that can be tried:
Connector Type DP 04 06 00 00
Connector Type DP 04 01 00 00
Connector Type DP 00 01 00 00
Connector Type DP 00 04 00 00
Connector Type DVI-DL 14 00 00 00
Connector Type DVI-DL 16 00 00 00
Connector Type DVI-SL 14 00 00 00
Connector Type DVI-SL 14 02 00 00
Connector Type LVDS 40 00 00 00
Bringing that together old vs new now.

Old:
000400000001000000010151000000002205020200000000 (DP)
000400000001000000010261010000001204010100000000 (DP)
000800000403000000010343000000001102030300000000 (HDMI)
000200000403000000010433000000002103040400000000 (DVI-I)

New:
000400000403000000010151000000002205020200000000 (DP)
000400000403000000010261010000001204010100000000 (DP)
000800000402000000010343000000001102030300000000 (HDMI)
000200001402000000010433000000002103040400000000 (DVI-I)

Now I need to change the feature a bit and this is a section I don't fully understand yet but it is said that you can simply just zero the last two digits of the purple section the third pair of the purple section represent the order of connector activation. So I change it like so old vs new
Old:
000400000403000000010151000000002205020200000000 (DP)
000400000403000000010261010000001204010100000000 (DP)
000800000402000000010343000000001102030300000000 (HDMI)
000200001402000000010433000000002103040400000000 (DVI-I)
New:
000400000403000000010400000000002205020200000000 (DP)
000400000403000000010300010000001204010100000000 (DP)
000800000402000000010100000000001102030300000000 (HDMI)
000200001402000000010200000000002103040400000000 (DVI-I)

I changed mine to have the connector activation start at HDMI then DVI then DP then DP since my monitors are connected to the HDMI and DVI. You should be able to order then how you want them activated.

Now notice that lonely red 1 it needs to become a zero.
Old:
000400000403000000010400000000002205020200000000 (DP)
000400000403000000010300010000001204010100000000 (DP)
000800000402000000010100000000001102030300000000 (HDMI)
000200001402000000010200000000002103040400000000 (DVI-I)
New:
000400000403000000010400000000002205020200000000 (DP)
000400000403000000010300000000001204010100000000 (DP)
000800000402000000010100000000001102030300000000 (HDMI)
000200001402000000010200000000002103040400000000 (DVI-I)

Lastly we add our constructed code from earlier old vs new
Old:
000400000403000000010400000000002205020200000000 (DP)
000400000403000000010300000000001204010100000000 (DP)
000800000402000000010100000000001102030300000000 (HDMI)
000200001402000000010200000000002103040400000000 (DVI-I)
New:
000400000403000000010400000000001204050100000000 (DP)
000400000403000000010300000000002205040200000000 (DP)
000800000402000000010100000000001102010400000000 (HDMI)
000200001402000000010200000000001000030600000000 (DVI-I)

Now to compare the original Framebuffer Namako to the patched
Original:
020000000001000000010151000000002205020200000000 (LVDS)
020000000001000000010261010000001204010100000000 (LVDS)
000400000403000000010343000000001102030300000000 (DP)
000400000403000000010433000000002103040400000000 (DP)
Patched:
000400000403000000010400000000001204050100000000 (DP)
000400000403000000010300000000002205040200000000 (DP)
000800000402000000010100000000001102010400000000 (HDMI)
000200001402000000010200000000001000030600000000 (DVI-I)

Now we can simplify this process by using this set based on your connectors.
LVDS 02000000 00010000 08010000 00000000 + (add your code construction) 00000000
VGA 10000000 10000000 00010000 00000000 + (add your code construction) 00000000
DP 00040000 04030000 00010000 00000000 + (add your code construction) 00000000
DVI-SL 00020000 04020000 00010000 00000000 + (add your code construction) 00000000
DVI-DL 04000000 14020000 00010000 00000000 + (add your code construction) 00000000
HDMI 00080000 04020000 00010000 00000000 + (add your code construction) 00000000

Step 5.
Clover injection and patch on the fly. In the graphics section of your config.plist you need to select your framebuffer that you wanna patch and inject ATI. Also for me I still need the IGPU helper, which to me is fine as I use it.
Code:
<key>Graphics</key>
    <dict>
        <key>EDID</key>
        <dict>
            <key>Inject</key>
            <false/>
        </dict>
        <key>FBName</key>
        <string>Namako</string>
        <key>Inject</key>
        <dict>
            <key>ATI</key>
            <true/>
            <key>Intel</key>
            <true/>
            <key>NVidia</key>
            <false/>
        </dict>
        <key>RadeonDeInit</key>
        <true/>
        <key>NvidiaSingle</key>
        <false/>
        <key>ig-platform-id</key>
        <string>0x0d220003</string>
    </dict>
Then you need to add the AMDXXXXController to the KextsToPatch section. For me it was like this.
Code:
<dict>
                <key>Comment</key>
                <string>connectors patch</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>
                AgAAAAABAAAAAQFRAAAAACIFAgIAAAAAAgAAAAABAAAA
                AQJhAQAAABIEAQEAAAAAAAQAAAQDAAAAAQNDAAAAABEC
                AwMAAAAAAAQAAAQDAAAAAQQzAAAAACEDBAQAAAAA
                </data>
                <key>Name</key>
                <string>AMD7000Controller</string>
                <key>Replace</key>
                <data>
                AAQAAAQDAAAAAQEBAAAAABIEAQEAAAAAAAQAAAQDAAAA
                AQIBAAAAACIFAgIAAAAAAAgAAAACAAAAAQMAAAAAABEC
                AwQAAAAAACAAAAQCAAAAAQQAAAAAABAABAYAAAAA
                </data>
            </dict>
Note your hex connector patch is translated to base64. This is easiest done with clover configurator. It will automatically convert it for you.

Step 6.
Once you have the needed changes in your config.plist you need to reboot. You will likely not see a change on the first reboot. You will have the rebuild kextcaches first. Also you will need to rebuild them after updates. To do so open terminal and type.
Code:
sudo touch /System/Library/Extensions/
hit enter then type in your password and hit enter then type.
Code:
sudo kextcache -Boot -U/
and hit enter. Then reboot again and if you did everything correctly your graphics card should be working properly.

Notes.
You must use RadeonDeInit=True in the graphics section of your config.plist and have clover version 4296 or greater for full UEFI mode with CSM disabled in UEFI/BIOS for working sleep.
You should remove WhateverGreen.kext from your system if you installed it and it didn't work. If it did work for you why are you here?
You may have to change the injected framebuffer in your config.plist and the find data to match it from Pavo's script. Until you find one that is working for you.
You will need to be able to reach the desktop some how by some means to do this process. May need to use a Nvidia helper card or an IGPU. I was able to do it with the IGPU. But I could also get all my monitors working with a safe boot, so I could have went that route.

If you request for help you must provide problem reporting files and your patched framebuffer data along with framebuffer you intend to patch. I will help you not do it for you.


If this method has worked for you hit the like button.

Problem reporting/Support request
If you are having trouble upload your clover folder as a zip omitting themes folder, your GFX card rom, and your IOReg and I do what I can to assist you as I have time.

Credit:
Florian for their version of radeon_bios_decode and their compatibility thread here
Pavo for the script to dump framebuffers
Toleda for pointing out errors in the template
Vlada for their guide on framebuffer patching
Clover developers
Apple
Hi

Forgive my ignorance but I have to ask how you get that status window showing the ATI Radeon card with DPCI Manager%
Thanks
 
So if you recently installed High Sierra and have an AMD graphics card and were greeted at the end of the installation with black screens and Lilu.kext and WhateverGreen.kext wasn't able to resolve it, then try patching the framebuffer that corresponds to your graphics card to try resolving it. Initially I wasn't going to write this guide as there are plenty of other internet resources for doing this procedure, but after reading some AMD black screen post on High Sierra, I felt it is needed to have a dedicated guide here at Tonymacx86.com.

Originally I had absolutely no problems with my VisionTek AMD Radeon 7970 in all versions of macOS as long as I had the IGPU set as primary in UEFI/Bios settings, it always worked OOB. But then came High Sierra to mess that all up. The changes in High Sierra are mainly Metalv2. Apple is changing the way all the graphics drivers are working to support eGPU setups better. Before High Sierra I was using injectATI=true with Hamachi or Futomaki framebuffers, I could even not injectATI and use the RadeonFramebuffer with not problems. Since High Sierra AMD cards are pretty much required to be injected via some method, for a fully functional card. I noticed in the AMD7000Controller info.plist CFG_USE_AGDC was set to false on Hamachi framebuffer and all other that aren't listed in the info.plist, which lead me to start patching different framebuffers. I likely could have went a different method of using a dummy kext to override the default values in the native info.plist but it wasn't needed for me. Others may find that this is a needed step, it trying all framebuffers and still in failure.


Change log
Use Florian's version of radeon_bios_decode 12/2/2017
Add RadeonDeInit=True 11/15/2017
fix some typos and make changes to template, added some credits 10/27/2017
add missing info 10/25/2017
initial 10/23/17

Requirements:
  • Native AMDXXXXController.kext
    • Rerun the installer if you've been tampering with it
  • A full UEFI system with CSM disable if an IGPU or helper graphics card is not available
    • If you don't have an IGPU or helper Nvidia card and go the full UEFI method you must use RadeonDeInit=True in the graphics section of you config.plist
    • Older systems will require a Helper card in which scenario might as well not use AMD.
  • A way to retrieve the rom file for your graphics card can be done in Windows.
  • Ability to use terminal.app can be done on versions earlier than High Sierra.
    • You still need to be able to dump some stuff in terminal on High Sierra.
Tools:
  • redsock_bios_decoder attached to thread
  • radeon_bios_decode
  • Pavo's script to dump all AMD framebuffers available here
  • DPCIManager to dump the GFX rom file from macOS or GPUZ to dump it from windows
  • Clover Configurator
Step 1.
Extracting the GFX rom file from the GFX card. This can be done with DPCIManager in macOS or GPUZ in windows. I will not be covering the windows method though.

View attachment 287704

Save it to a location for use later.

Step 2.
Pick a proper framebuffer for you card. It should have the same number of ports as your card. You may have to try patching all the framebuffers with the same number of ports to find the right one, I will cover this later in the guide. So dump all the AMD framebuffers with Pavo's Sierra script. It's a python script so open terminal and type php one space then drag in the script and hit enter. It will then list all the default framebuffers connector information in hex values. Open a new text edit document and copy and paste the data to it for future reference.

Step 3.
Gather the information from the rom file using radeon_bios_decode and redsock_bios_decoder. So open terminal and drag radeon_bios_decode into terminal one space and type < one space and drag in the rom file and press enter. Repeat the same process for redsock_bios_decoder and save the output to your text edit document for later use.

Step 4.
Getting the connector information from the decoders. Looking at my example from my AMD Radeon HD 7970.
radeon_bios_decode output. Get radeon_bios_decode from here attached to first post in thread.
Code:
ATOM BIOS Rom:
    SubsystemVendorID: 0x1545 SubsystemID: 0x7970
    IOBaseAddress: 0x0000
    Filename: SV2A01.001
    BIOS Bootup Message: TAHITI XT PCIE 3G/384B GDDR5 DLDVI-I/HDMI/2XMINI-DP 925E/1375M
PCI ID: 1002:6798

Connector at index 0
   Type [@offset 43422]: DisplayPort (10)
   Encoder [@offset 43426]: INTERNAL_UNIPHY2 (0x21)
   i2cid [@offset 43540]: 0x90, OSX senseid: 0x1
   HotPlugID: 5
Connector at index 1
   Type [@offset 43432]: DisplayPort (10)
   Encoder [@offset 43436]: INTERNAL_UNIPHY2 (0x21)
   i2cid [@offset 43567]: 0x91, OSX senseid: 0x2
   HotPlugID: 4
Connector at index 2
   Type [@offset 43442]: HDMI-A (11)
   Encoder [@offset 43446]: INTERNAL_UNIPHY1 (0x20)
   i2cid [@offset 43594]: 0x93, OSX senseid: 0x4
   HotPlugID: 1
Connector at index 3
   Type [@offset 43452]: DVI-I (2)
   Encoder [@offset 43456]: INTERNAL_UNIPHY (0x1e)
   i2cid [@offset 43631]: 0x95, OSX senseid: 0x6
   HotPlugID: 3
Connector at index 4
   Type [@offset 43462]: DVI-I (2)
   Encoder [@offset 43466]: INTERNAL_KLDSCP_DAC1 (0x15)
   i2cid [@offset 43631]: 0x95, OSX senseid: 0x6
   HotPlugID: 3
and redsock_bios_decoder output
Code:
SV2A01.001  :
TAHITI XT PCIE 3G/384B GDDR5 DLDVI-I/HDMI/2XMINI-DP 925E/1375M
Subsystem Vendor ID: 1545
       Subsystem ID: 7970
Object Header Structure Size: 389
Connector Object Table Offset: 48
Router Object Table Offset: 0
Encoder Object Table Offset: 118
Display Path Table Offset: 12
Connector Object Id [19] which is [DISPLAY_PORT]
    encoder obj id [0x21] which is [INTERNAL_UNIPHY2 (osx txmit 0x12 [duallink 0x2] enc 0x4)] linkb: false
Connector Object Id [19] which is [DISPLAY_PORT]
    encoder obj id [0x21] which is [INTERNAL_UNIPHY2 (osx txmit 0x22 [duallink 0x2] enc 0x5)] linkb: true
Connector Object Id [12] which is [HDMI_TYPE_A]
    encoder obj id [0x20] which is [INTERNAL_UNIPHY1 (osx txmit 0x11 [duallink 0x1] enc 0x2)] linkb: false
Connector Object Id [2] which is [DVI_I]
    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 [0x15] which is [INTERNAL_KLDSCP_DAC1 (osx txmit 0x00 enc 0x10?)] linkb: false

From this information we can construct our connector code

Notice the numbers that are colored these are the numbers of interest. I will start with the connector at index 0 for and explanation of how this works.

Some guides may use Connector at index for hotplugid values and when you use Florian's version of radeon_bios_decode it will reveal the correct hotplugid. So use the version attached to this thread or in the Compatibility thread.
Display Port at index 0 will use HotPlugID 05

So pulling these numbers together for the connector at index 0 is as follows.
Code construction: 12040501
The first two digits of the constructed code from the decoders is Transmitter (12) the next two are the encoder(04) the next two are hotplug ID (05) the next two are sense ID (01)

For my example I had to use the Namako framebuffer the Hamachi and Futomaki framebuffers would not work in High Sierra mainly due to all the graphics changes in Metel v2. So the Namako unpatched Frambuffer connectors are as follows.
Code:
Namako (4) @ 0xed900
LVDS, LVDS, DP, DP[/COLOR]
020000000001000000010151000000002205020200000000
020000000001000000010261010000001204010100000000
000400000403000000010343000000001102030300000000
000400000403000000010433000000002103040400000000

The numbers in red are where we change to the number we construct from the decoders (12040501)
The numbers in green are the connector type
The numbers in blue are the ATY, Control Flags
The numbers in purple are Features

Now my connector types are completely wrong with this frame buffer as I need DP, DP, HDMI, and DVI-I, So I needed to change the green numbers in the framebuffer. Here's a list of all the different connector types and their respective digits.

Connector Type LVDS 0 × 00000002 = 02 00 00 00 Note: Laptop Monitor
Connector Type DVIDL 0 × 00000004 = 04 00 00 00 Note: Dual Link DVI
Connector Type VGA 0 × 00000010 = 10 00 00 00
Connector Type SV 0 × 00000080 = 08 00 00 00
Connector Type DP = 0 × 00000400 00 04 00 00
Connector Type HDMI 0 × 00000800 = 00 08 00 00
Connector Type DVISL 0 × 00000200 = 00 02 00 00 Note: Single Link DVI

For my example I need to change all the connector sections of this framebuffer.
Old:
020000000001000000010151000000002205020200000000 (LVDS)
020000000001000000010261010000001204010100000000 (LVDS)
000400000403000000010343000000001102030300000000 (DP)
000400000403000000010433000000002103040400000000 (DP)
New:
000400000001000000010151000000002205020200000000 (DP)
000400000001000000010261010000001204010100000000 (DP)
000800000403000000010343000000001102030300000000 (HDMI)
000200000403000000010433000000002103040400000000 (DVI-I)

Now I need to change the control Flags to match the connectors which are completely wrong at this point for my card. Here's a list that explains them.

0×0002 : LVDS ControlFlag : 0×0040 and 0×0100
0×0004 : DVI-DL ControlFlag : 0×0016, 0×0014, and 0×0214
0×0010 : VGA ControlFlag : 0×0010
0×0080 : S-Video ControlFlag : 0×0002
0×0200 : DVI-SL ControlFlag : 0×0014, 0×0214, and 0×0204
0×0400 : DisplayPort ControlFlag : 0×0100, 0×0104, 0×0304, 0×0604, and 0×0400
0×0800 : HDMI ControlFlag : 0×0204


Translated in to standard control flags:

Connector Type DP 04 03 00 00
Connector Type HDMI 04 02 00 00
Connector Type DVIDL 14 02 00 00
Connector Type DVISL 04 02 00 00
Connector Type S-VD 02 00 00 00
Connector Type LVDS 00 01 00 00
Note: some connectors have multiple control flags that can be used if the first isn't working like on the Display port or DVI

Secondary control flags that can be tried:
Connector Type DP 04 06 00 00
Connector Type DP 04 01 00 00
Connector Type DP 00 01 00 00
Connector Type DP 00 04 00 00
Connector Type DVI-DL 14 00 00 00
Connector Type DVI-DL 16 00 00 00
Connector Type DVI-SL 14 00 00 00
Connector Type DVI-SL 14 02 00 00
Connector Type LVDS 40 00 00 00
Bringing that together old vs new now.

Old:
000400000001000000010151000000002205020200000000 (DP)
000400000001000000010261010000001204010100000000 (DP)
000800000403000000010343000000001102030300000000 (HDMI)
000200000403000000010433000000002103040400000000 (DVI-I)

New:
000400000403000000010151000000002205020200000000 (DP)
000400000403000000010261010000001204010100000000 (DP)
000800000402000000010343000000001102030300000000 (HDMI)
000200001402000000010433000000002103040400000000 (DVI-I)

Now I need to change the feature a bit and this is a section I don't fully understand yet but it is said that you can simply just zero the last two digits of the purple section the third pair of the purple section represent the order of connector activation. So I change it like so old vs new
Old:
000400000403000000010151000000002205020200000000 (DP)
000400000403000000010261010000001204010100000000 (DP)
000800000402000000010343000000001102030300000000 (HDMI)
000200001402000000010433000000002103040400000000 (DVI-I)
New:
000400000403000000010400000000002205020200000000 (DP)
000400000403000000010300010000001204010100000000 (DP)
000800000402000000010100000000001102030300000000 (HDMI)
000200001402000000010200000000002103040400000000 (DVI-I)

I changed mine to have the connector activation start at HDMI then DVI then DP then DP since my monitors are connected to the HDMI and DVI. You should be able to order then how you want them activated.

Now notice that lonely red 1 it needs to become a zero.
Old:
000400000403000000010400000000002205020200000000 (DP)
000400000403000000010300010000001204010100000000 (DP)
000800000402000000010100000000001102030300000000 (HDMI)
000200001402000000010200000000002103040400000000 (DVI-I)
New:
000400000403000000010400000000002205020200000000 (DP)
000400000403000000010300000000001204010100000000 (DP)
000800000402000000010100000000001102030300000000 (HDMI)
000200001402000000010200000000002103040400000000 (DVI-I)

Lastly we add our constructed code from earlier old vs new
Old:
000400000403000000010400000000002205020200000000 (DP)
000400000403000000010300000000001204010100000000 (DP)
000800000402000000010100000000001102030300000000 (HDMI)
000200001402000000010200000000002103040400000000 (DVI-I)
New:
000400000403000000010400000000001204050100000000 (DP)
000400000403000000010300000000002205040200000000 (DP)
000800000402000000010100000000001102010400000000 (HDMI)
000200001402000000010200000000001000030600000000 (DVI-I)

Now to compare the original Framebuffer Namako to the patched
Original:
020000000001000000010151000000002205020200000000 (LVDS)
020000000001000000010261010000001204010100000000 (LVDS)
000400000403000000010343000000001102030300000000 (DP)
000400000403000000010433000000002103040400000000 (DP)
Patched:
000400000403000000010400000000001204050100000000 (DP)
000400000403000000010300000000002205040200000000 (DP)
000800000402000000010100000000001102010400000000 (HDMI)
000200001402000000010200000000001000030600000000 (DVI-I)

Now we can simplify this process by using this set based on your connectors.
LVDS 02000000 00010000 08010000 00000000 + (add your code construction) 00000000
VGA 10000000 10000000 00010000 00000000 + (add your code construction) 00000000
DP 00040000 04030000 00010000 00000000 + (add your code construction) 00000000
DVI-SL 00020000 04020000 00010000 00000000 + (add your code construction) 00000000
DVI-DL 04000000 14020000 00010000 00000000 + (add your code construction) 00000000
HDMI 00080000 04020000 00010000 00000000 + (add your code construction) 00000000

Step 5.
Clover injection and patch on the fly. In the graphics section of your config.plist you need to select your framebuffer that you wanna patch and inject ATI. Also for me I still need the IGPU helper, which to me is fine as I use it.
Code:
<key>Graphics</key>
    <dict>
        <key>EDID</key>
        <dict>
            <key>Inject</key>
            <false/>
        </dict>
        <key>FBName</key>
        <string>Namako</string>
        <key>Inject</key>
        <dict>
            <key>ATI</key>
            <true/>
            <key>Intel</key>
            <true/>
            <key>NVidia</key>
            <false/>
        </dict>
        <key>RadeonDeInit</key>
        <true/>
        <key>NvidiaSingle</key>
        <false/>
        <key>ig-platform-id</key>
        <string>0x0d220003</string>
    </dict>
Then you need to add the AMDXXXXController to the KextsToPatch section. For me it was like this.
Code:
<dict>
                <key>Comment</key>
                <string>connectors patch</string>
                <key>Disabled</key>
                <false/>
                <key>Find</key>
                <data>
                AgAAAAABAAAAAQFRAAAAACIFAgIAAAAAAgAAAAABAAAA
                AQJhAQAAABIEAQEAAAAAAAQAAAQDAAAAAQNDAAAAABEC
                AwMAAAAAAAQAAAQDAAAAAQQzAAAAACEDBAQAAAAA
                </data>
                <key>Name</key>
                <string>AMD7000Controller</string>
                <key>Replace</key>
                <data>
                AAQAAAQDAAAAAQEBAAAAABIEAQEAAAAAAAQAAAQDAAAA
                AQIBAAAAACIFAgIAAAAAAAgAAAACAAAAAQMAAAAAABEC
                AwQAAAAAACAAAAQCAAAAAQQAAAAAABAABAYAAAAA
                </data>
            </dict>
Note your hex connector patch is translated to base64. This is easiest done with clover configurator. It will automatically convert it for you.

Step 6.
Once you have the needed changes in your config.plist you need to reboot. You will likely not see a change on the first reboot. You will have the rebuild kextcaches first. Also you will need to rebuild them after updates. To do so open terminal and type.
Code:
sudo touch /System/Library/Extensions/
hit enter then type in your password and hit enter then type.
Code:
sudo kextcache -Boot -U/
and hit enter. Then reboot again and if you did everything correctly your graphics card should be working properly.

Notes.
You must use RadeonDeInit=True in the graphics section of your config.plist and have clover version 4296 or greater for full UEFI mode with CSM disabled in UEFI/BIOS for working sleep.
You should remove WhateverGreen.kext from your system if you installed it and it didn't work. If it did work for you why are you here?
You may have to change the injected framebuffer in your config.plist and the find data to match it from Pavo's script. Until you find one that is working for you.
You will need to be able to reach the desktop some how by some means to do this process. May need to use a Nvidia helper card or an IGPU. I was able to do it with the IGPU. But I could also get all my monitors working with a safe boot, so I could have went that route.

If you request for help you must provide problem reporting files and your patched framebuffer data along with framebuffer you intend to patch. I will help you not do it for you.


If this method has worked for you hit the like button.

Problem reporting/Support request
If you are having trouble upload your clover folder as a zip omitting themes folder, your GFX card rom, and your IOReg and I do what I can to assist you as I have time.

Credit:
Florian for their version of radeon_bios_decode and their compatibility thread here
Pavo for the script to dump framebuffers
Toleda for pointing out errors in the template
Vlada for their guide on framebuffer patching
Clover developers
Apple



Hi, Im having an issue with my GPU(Sapphire r9 290 Try-X OC). which works with one monitor connected to HDMI port with full acceleration but when I connect the second monitor to the DVI-D port the second monitor starts Flickering and starts showing glitches which is annoying. I've tried all the possibilities couldn't get it to work. My Kext is AMD8000Controller. which has only 2 FrameBuffers (Baladi and Exmoor) when I use Baladi my system boots up but the monitor goes off half way through the loading screen. I Tried using AMA9000Controller kext FrameBuffers like Basset and Lagotta System boots up with full acceleration perfectly fine with HDMI port but DVI-D port still has flickering issues. I have my settings as such:
Devices Fake ID : 0x67B01002
Graphics -> FB Name : Lagotta
Graphics -> Inject ATI: True
Graphics -> RadeonDeInit: True

Kernel and kext Patches
AppleIntelCPUPM: True
KernelPm:True
KernaelXCPM:True


I followed the above steps to make my own FrameBuffer

Im using these in KextsToPatch:
AMD9000Controller
Find [
00040000 04030000 00010100 00000000 11020401 00000000
00080000 04020000 00010200 00000000 21030503 00000000
04000000 04020000 00010300 00000000 00000105 00000000
04000000 04020000 00010400 00000000 02040606 00000000
]

Replace [
00040000 04030000 00010400 00000000 12040201 00000000
00080000 04020000 00010100 00000000 22050303 00000000
04000000 14020000 00010200 00000000 11020104 00000000
04000000 14020000 00010300 00000000 10000606 00000000
]

AMD9000Controller
Find[

02000000 00010000 00010131 00000000 21030202 00000000
02000000 00010000 00010241 01000000 11020101 00000000
00040000 04030000 00010323 00000000 10000303 00000000
00040000 04030000 00010413 00000000 20010404 00000000
].

Replace[
00040000 04030000 00010400 00000000 12040201 00000000
00080000 04020000 00010100 00000000 22050303 00000000
04000000 14020000 00010200 00000000 11020104 00000000
04000000 14020000 00010300 00000000 10000606 00000000]

AMD8000Controller
Find [
00040000 04030000 00010300 00000000 12040303 00000000
00040000 04030000 00010100 00000000 11020101 00000000
00040000 04030000 00010200 00000000 21030202 00000000
00040000 04030000 00010400 00000000 22050404 00000000
00040000 04030000 00010500 00000000 10000505 00000000
00040000 04030000 00010600 00000000 20010606 00000000]

Replace[
00040000 04030000 00010400 00000000 12040201 00000000
00080000 04020000 00010100 00000000 22050303 00000000
04000000 14020000 00010200 00000000 11020104 00000000
04000000 14020000 00010300 00000000 10000606 00000000]



SMBIOS : iMac18,1
Here is my radeon_bios_decode:


PCI ID: 1002:67b1
Connector at index 0
Type [@offset 43564]: DisplayPort (10)
Encoder [@offset 43568]: INTERNAL_UNIPHY2 (0x21)
i2cid [@offset 43656]: 0x90, OSX senseid: 0x1
HotPlugID: 2
Connector at index 1
Type [@offset 43574]: HDMI-A (11)
Encoder [@offset 43578]: INTERNAL_UNIPHY2 (0x21)
i2cid [@offset 43683]: 0x92, OSX senseid: 0x3
HotPlugID: 3
Connector at index 2
Type [@offset 43584]: DVI-D (3)
Encoder [@offset 43588]: INTERNAL_UNIPHY1 (0x20)
i2cid [@offset 43710]: 0x93, OSX senseid: 0x4
HotPlugID: 1
Connector at index 3
Type [@offset 43594]: DVI-D (3)
Encoder [@offset 43598]: INTERNAL_UNIPHY (0x1e)
i2cid [@offset 43737]: 0x95, OSX senseid: 0x6
HotPlugID: 6


redsock_bios_decoder:

C67111 Hawaii PRO OC GDDR5 4GB 64Mx32 300e/150m
Subsystem Vendor ID: 174b
Subsystem ID: e285
Object Header Structure Size: 271
Connector Object Table Offset: 3e
Router Object Table Offset: 0
Encoder Object Table Offset: ce
Display Path Table Offset: 12
Connector Object Id [19] which is [DISPLAY_PORT]
encoder obj id [0x21] which is [INTERNAL_UNIPHY2 (osx txmit 0x12 [duallink 0x2] enc 0x4)] linkb: false
Connector Object Id [12] which is [HDMI_TYPE_A]
encoder obj id [0x21] which is [INTERNAL_UNIPHY2 (osx txmit 0x22 [duallink 0x2] enc 0x5)] linkb: true
Connector Object Id [4] which is [DVI_D]
encoder obj id [0x20] which is [INTERNAL_UNIPHY1 (osx txmit 0x11 [duallink 0x1] enc 0x2)] linkb: false
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


My Custom FrameBuffer Created according to the method using encode and decode:

000400000403000000010400000000001204020100000000 (DP)
000800000402000000010100000000002205030300000000 (HDMI)
040000001402000000010200000000001102010400000000 (DVI-D)
040000001402000000010300000000001000060600000000 (DVI-D

Are these Custom FrameBuffer Good??


My FrameBuffer I'm Supposed to use for FakeId : 0x67B01002 is

-------------------------AMD8000Controller.kext-------------------------

Exmoor (6) @ 0x5ac60
LVDS, LVDS, DP, DP, DP, DP
020000000001000000010151000000002205020400000000
020000000001000000010261010000001204010300000000
000400000403000000010343000000001102030100000000
000400000001000000010431000000002103050500000000
000400000403000000010523000000001000040200000000
000400000001000000010611000000002001050500000000

Baladi (6) @ 0x5ae00
DP, DP, DP, DP, DP, DP
000400000403000000010300000000001204030300000000
00040000040300000001010000000000110201010000000
000400000403000000010200000000002103020200000000
000400000403000000010400000000002205040400000000
000400000403000000010500000000001000050500000000
000400000403000000010600000000002001060600000000



Since I get no signal when Baladi is used
I use Lagotta or Basset as FBname

Lagotto (4) @ 0x5e5b0
DP, HDMI, DVI-D, DVI-D (Look same as my ports)
000400000403000000010100000000001102040100000000
000800000402000000010200000000002103050300000000
040000000402000000010300000000000000010500000000
040000000402000000010400000000000204060600000000


Basset (4) @ 0x5e7f0
LVDS, LVDS, DP, DP
020000000001000000010131000000002103020200000000
020000000001000000010241010000001102010100000000
000400000403000000010323000000001000030300000000
000400000403000000010413000000002001040400000000

which has four Ports and I get full acceleration in HDMI except for the non-stop flickering and glitches in DVI-D



Where I'm I going Wrong? Is there a fix to this?
I need at least one of my DVI-D port to work fine.

Is there a way I can narrow down my Problem? if its the Custom Framebuffer issue?

I have attached my Clover folder Please take a look at it Thanks.
I need Real HELP!!!!!!!


NOTE: When InjectATI is set to false : I get Display 7MB with all the ports working Including the DVI-D. I get Dual Screen Simultaneously but with no GPU Acceleration. Hope this could help to narrow down the problem.
 

Attachments

  • CLOVER.zip
    4.1 MB · Views: 142
Hello friends,
I have made the process described in the guide, however, I can not get my card to work, in the system information I can only see a 3MB VRAM

This is the information I could extract and the modified framebuffer code for my Sapphire Radeon R7 240 card:

ATOM BIOS Rom:
SubsystemVendorID: 0x174b SubsystemID: 0xe266
IOBaseAddress: 0x0000
Filename: 266P0305.S43
BIOS Bootup Message:
Sapphire Oland C57701 GDDR5 E26600

PCI ID: 1002:6613
Connector at index 0
Type [@offset 43037]: HDMI-A (11)
Encoder [@offset 43041]: INTERNAL_UNIPHY (0x1e)
i2cid [@offset 43111]: 0x91, OSX senseid: 0x2
HotPlugID: 1
Connector at index 1
Type [@offset 43047]: DVI-D (3)
Encoder [@offset 43051]: INTERNAL_UNIPHY (0x1e)
i2cid [@offset 43138]: 0x90, OSX senseid: 0x1
HotPlugID: 2
Connector at index 2
Type [@offset 43057]: VGA (1)
Encoder [@offset 43061]: INTERNAL_KLDSCP_DAC1 (0x15)
i2cid [@offset 43165]: 0x97, OSX senseid: 0x8


Object Header Structure Size: 203
Connector Object Table Offset: 34
Router Object Table Offset: 0
Encoder Object Table Offset: 9d
Display Path Table Offset: 12
Connector Object Id [12] which is [HDMI_TYPE_A]
encoder obj id [0x1e] which is [INTERNAL_UNIPHY (osx txmit 0x10 [duallink 0x0] enc 0x0)] linkb: false
Connector Object Id [3] which is [DVI_D]
encoder obj id [0x1e] which is [INTERNAL_UNIPHY (osx txmit 0x20 [duallink 0x0] enc 0x1)] linkb: true
Connector Object Id [5] which is [VGA]
encoder obj id [0x15] which is [INTERNAL_KLDSCP_DAC1 (osx txmit 0x00 enc 0x10?)] linkb: false

framebuffer code

00080000 04020000 00010100 00000000 10000102 00000000
04000000 14020000 00010200 00000000 20010201 00000000
10000000 10000000 00010300 00000000 00100008 00000000

Now my question is whether I perform the process well and whether I should use an AMD7000Controller.k ext framebuffer, since none matches the ports of my card except the AMD6000Controller and the AMD5000Controller.

Sorry for my bad English.
 
Hi, Im having an issue with my GPU(Sapphire r9 290 Try-X OC). which works with one monitor connected to HDMI port with full acceleration but when I connect the second monitor to the DVI-D port the second monitor starts Flickering and starts showing glitches which is annoying. I've tried all the possibilities couldn't get it to work. My Kext is AMD8000Controller. which has only 2 FrameBuffers (Baladi and Exmoor) when I use Baladi my system boots up but the monitor goes off half way through the loading screen. I Tried using AMA9000Controller kext FrameBuffers like Basset and Lagotta System boots up with full acceleration perfectly fine with HDMI port but DVI-D port still has flickering issues. I have my settings as such:
Devices Fake ID : 0x67B01002
Graphics -> FB Name : Lagotta
Graphics -> Inject ATI: True
Graphics -> RadeonDeInit: True

Kernel and kext Patches
AppleIntelCPUPM: True
KernelPm:True
KernaelXCPM:True


I followed the above steps to make my own FrameBuffer

Im using these in KextsToPatch:
AMD9000Controller
Find [
00040000 04030000 00010100 00000000 11020401 00000000
00080000 04020000 00010200 00000000 21030503 00000000
04000000 04020000 00010300 00000000 00000105 00000000
04000000 04020000 00010400 00000000 02040606 00000000
]

Replace [
00040000 04030000 00010400 00000000 12040201 00000000
00080000 04020000 00010100 00000000 22050303 00000000
04000000 14020000 00010200 00000000 11020104 00000000
04000000 14020000 00010300 00000000 10000606 00000000
]

AMD9000Controller
Find[

02000000 00010000 00010131 00000000 21030202 00000000
02000000 00010000 00010241 01000000 11020101 00000000
00040000 04030000 00010323 00000000 10000303 00000000
00040000 04030000 00010413 00000000 20010404 00000000
].

Replace[
00040000 04030000 00010400 00000000 12040201 00000000
00080000 04020000 00010100 00000000 22050303 00000000
04000000 14020000 00010200 00000000 11020104 00000000
04000000 14020000 00010300 00000000 10000606 00000000]

AMD8000Controller
Find [

00040000 04030000 00010300 00000000 12040303 00000000
00040000 04030000 00010100 00000000 11020101 00000000
00040000 04030000 00010200 00000000 21030202 00000000
00040000 04030000 00010400 00000000 22050404 00000000
00040000 04030000 00010500 00000000 10000505 00000000
00040000 04030000 00010600 00000000 20010606 00000000]

Replace[
00040000 04030000 00010400 00000000 12040201 00000000
00080000 04020000 00010100 00000000 22050303 00000000
04000000 14020000 00010200 00000000 11020104 00000000
04000000 14020000 00010300 00000000 10000606 00000000]



SMBIOS : iMac18,1
Here is my radeon_bios_decode:


PCI ID: 1002:67b1
Connector at index 0
Type [@offset 43564]: DisplayPort (10)
Encoder [@offset 43568]: INTERNAL_UNIPHY2 (0x21)
i2cid [@offset 43656]: 0x90, OSX senseid: 0x1
HotPlugID: 2
Connector at index 1
Type [@offset 43574]: HDMI-A (11)
Encoder [@offset 43578]: INTERNAL_UNIPHY2 (0x21)
i2cid [@offset 43683]: 0x92, OSX senseid: 0x3
HotPlugID: 3
Connector at index 2
Type [@offset 43584]: DVI-D (3)
Encoder [@offset 43588]: INTERNAL_UNIPHY1 (0x20)
i2cid [@offset 43710]: 0x93, OSX senseid: 0x4
HotPlugID: 1
Connector at index 3
Type [@offset 43594]: DVI-D (3)
Encoder [@offset 43598]: INTERNAL_UNIPHY (0x1e)
i2cid [@offset 43737]: 0x95, OSX senseid: 0x6
HotPlugID: 6


redsock_bios_decoder:

C67111 Hawaii PRO OC GDDR5 4GB 64Mx32 300e/150m
Subsystem Vendor ID: 174b
Subsystem ID: e285
Object Header Structure Size: 271
Connector Object Table Offset: 3e
Router Object Table Offset: 0
Encoder Object Table Offset: ce
Display Path Table Offset: 12
Connector Object Id [19] which is [DISPLAY_PORT]
encoder obj id [0x21] which is [INTERNAL_UNIPHY2 (osx txmit 0x12 [duallink 0x2] enc 0x4)] linkb: false
Connector Object Id [12] which is [HDMI_TYPE_A]
encoder obj id [0x21] which is [INTERNAL_UNIPHY2 (osx txmit 0x22 [duallink 0x2] enc 0x5)] linkb: true
Connector Object Id [4] which is [DVI_D]
encoder obj id [0x20] which is [INTERNAL_UNIPHY1 (osx txmit 0x11 [duallink 0x1] enc 0x2)] linkb: false
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


My Custom FrameBuffer Created according to the method using encode and decode:

000400000403000000010400000000001204020100000000 (DP)
000800000402000000010100000000002205030300000000 (HDMI)
040000001402000000010200000000001102010400000000 (DVI-D)
040000001402000000010300000000001000060600000000 (DVI-D

Are these Custom FrameBuffer Good??


My FrameBuffer I'm Supposed to use for FakeId : 0x67B01002 is

-------------------------AMD8000Controller.kext-------------------------

Exmoor (6) @ 0x5ac60
LVDS, LVDS, DP, DP, DP, DP
020000000001000000010151000000002205020400000000
020000000001000000010261010000001204010300000000
000400000403000000010343000000001102030100000000
000400000001000000010431000000002103050500000000
000400000403000000010523000000001000040200000000
000400000001000000010611000000002001050500000000

Baladi (6) @ 0x5ae00
DP, DP, DP, DP, DP, DP
000400000403000000010300000000001204030300000000
00040000040300000001010000000000110201010000000
000400000403000000010200000000002103020200000000
000400000403000000010400000000002205040400000000
000400000403000000010500000000001000050500000000
000400000403000000010600000000002001060600000000



Since I get no signal when Baladi is used
I use Lagotta or Basset as FBname

Lagotto (4) @ 0x5e5b0
DP, HDMI, DVI-D, DVI-D (Look same as my ports)
000400000403000000010100000000001102040100000000
000800000402000000010200000000002103050300000000
040000000402000000010300000000000000010500000000
040000000402000000010400000000000204060600000000


Basset (4) @ 0x5e7f0
LVDS, LVDS, DP, DP
020000000001000000010131000000002103020200000000
020000000001000000010241010000001102010100000000
000400000403000000010323000000001000030300000000
000400000403000000010413000000002001040400000000

which has four Ports and I get full acceleration in HDMI except for the non-stop flickering and glitches in DVI-D



Where I'm I going Wrong? Is there a fix to this?
I need at least one of my DVI-D port to work fine.

Is there a way I can narrow down my Problem? if its the Custom Framebuffer issue?

I have attached my Clover folder Please take a look at it Thanks.
I need Real HELP!!!!!!!


NOTE: When InjectATI is set to false : I get Display 7MB with all the ports working Including the DVI-D. I get Dual Screen Simultaneously but with no GPU Acceleration. Hope this could help to narrow down the problem.
The issue here that you are having is you have a card that doesn't have the same number of ports as macOS expects. You must use one of the two AMD8000Controller frame buffers for that card. You need to change only the first four port connectors, clover will not patch the data if the length of data doesn't match. So in your custom frambuffer patch you are missing some bytes of data from the last two ports macOS expects. So clover isn't applying any patch. You are telling clover to do this.

AMD8000Controller
Find [

00040000 04030000 00010300 00000000 12040303 00000000
00040000 04030000 00010100 00000000 11020101 00000000
00040000 04030000 00010200 00000000 21030202 00000000
00040000 04030000 00010400 00000000 22050404 00000000
00040000 04030000 00010500 00000000 10000505 00000000
00040000 04030000 00010600 00000000 20010606 00000000]

Replace[
00040000 04030000 00010400 00000000 12040201 00000000
00080000 04020000 00010100 00000000 22050303 00000000
04000000 14020000 00010200 00000000 11020104 00000000
04000000 14020000 00010300 00000000 10000606 00000000]

Which clover will not do. You should be telling clover to do this.

AMD8000Controller
Find [

00040000 04030000 00010300 00000000 12040303 00000000
00040000 04030000 00010100 00000000 11020101 00000000
00040000 04030000 00010200 00000000 21030202 00000000
00040000 04030000 00010400 00000000 22050404 00000000
00040000 04030000 00010500 00000000 10000505 00000000
00040000 04030000 00010600 00000000 20010606 00000000]

Replace[
00040000 04030000 00010400 00000000 12040201 00000000
00080000 04020000 00010100 00000000 22050303 00000000
04000000 14020000 00010200 00000000 11020104 00000000
04000000 14020000 00010300 00000000 10000606 00000000
00040000 04030000 00010500 00000000 10000505 00000000
00040000 04030000 00010600 00000000 20010606 00000000]

Clover is very good at changing data of the same length, but clover cannot change data length never ever is this possible not with any boot loader is modifying binary data length possible.
 
Hi

Forgive my ignorance but I have to ask how you get that status window showing the ATI Radeon card with DPCI Manager%
Thanks
I am unsure what you are asking me exactly. With a properly patched framer buffer and everything injected properly and running correctly DPCI Manager works as expected.
 
Hello friends,
I have made the process described in the guide, however, I can not get my card to work, in the system information I can only see a 3MB VRAM

This is the information I could extract and the modified framebuffer code for my Sapphire Radeon R7 240 card:

ATOM BIOS Rom:
SubsystemVendorID: 0x174b SubsystemID: 0xe266
IOBaseAddress: 0x0000
Filename: 266P0305.S43
BIOS Bootup Message:
Sapphire Oland C57701 GDDR5 E26600

PCI ID: 1002:6613
Connector at index 0
Type [@offset 43037]: HDMI-A (11)
Encoder [@offset 43041]: INTERNAL_UNIPHY (0x1e)
i2cid [@offset 43111]: 0x91, OSX senseid: 0x2
HotPlugID: 1
Connector at index 1
Type [@offset 43047]: DVI-D (3)
Encoder [@offset 43051]: INTERNAL_UNIPHY (0x1e)
i2cid [@offset 43138]: 0x90, OSX senseid: 0x1
HotPlugID: 2
Connector at index 2
Type [@offset 43057]: VGA (1)
Encoder [@offset 43061]: INTERNAL_KLDSCP_DAC1 (0x15)
i2cid [@offset 43165]: 0x97, OSX senseid: 0x8


Object Header Structure Size: 203
Connector Object Table Offset: 34
Router Object Table Offset: 0
Encoder Object Table Offset: 9d
Display Path Table Offset: 12
Connector Object Id [12] which is [HDMI_TYPE_A]
encoder obj id [0x1e] which is [INTERNAL_UNIPHY (osx txmit 0x10 [duallink 0x0] enc 0x0)] linkb: false
Connector Object Id [3] which is [DVI_D]
encoder obj id [0x1e] which is [INTERNAL_UNIPHY (osx txmit 0x20 [duallink 0x0] enc 0x1)] linkb: true
Connector Object Id [5] which is [VGA]
encoder obj id [0x15] which is [INTERNAL_KLDSCP_DAC1 (osx txmit 0x00 enc 0x10?)] linkb: false

framebuffer code

00080000 04020000 00010100 00000000 10000102 00000000
04000000 14020000 00010200 00000000 20010201 00000000
10000000 10000000 00010300 00000000 00100008 00000000

Now my question is whether I perform the process well and whether I should use an AMD7000Controller.k ext framebuffer, since none matches the ports of my card except the AMD6000Controller and the AMD5000Controller.

Sorry for my bad English.
I can't tell you which kext you should be using but I can tell you if it's a 7000 series card you should use AMD7000Controller.kext and if 6000 series card use AMD6000Controller.kext and so on for 5000. I do not have your hardware so I am unsure which card that really is and I don't have the time anymore to really support this topic like it deserves. Family, wife and kids consume it all now.
 
Status
Not open for further replies.
Back
Top