Hey jerryy,
i just made some more tests with AMD9510Controller.kext framebuffers:
First i want to mention, that i have a SAPPHIRE RX480 NITRO with 8GB of VideoRAM.
And these are the settings for my connectors taken with "radeon_bios_decode" and "redsock_bios_decoder" terminal-scripts:
ATOM BIOS Rom:
SubsystemVendorID: 0x174b SubsystemID: 0xe347
IOBaseAddress: 0x0000
Filename: 347X06SU.X4L
BIOS Bootup Message:
E347 Polaris10 XT A1 GDDR5 256Mx32 8GB 300e/300m
PCI ID: 1002:67df
Connector at index 0
Type [@offset 40870]: DisplayPort (10)
Encoder [@offset 40874]: INTERNAL_UNIPHY2 (0x21)
i2cid [@offset 40980]: 0x90, OSX senseid: 0x1
HotPlugID: 6
Connector at index 1
Type [@offset 40880]: DisplayPort (10)
Encoder [@offset 40884]: INTERNAL_UNIPHY2 (0x21)
i2cid [@offset 41007]: 0x92, OSX senseid: 0x3
HotPlugID: 4
Connector at index 2
Type [@offset 40890]: HDMI-A (11)
Encoder [@offset 40894]: INTERNAL_UNIPHY1 (0x20)
i2cid [@offset 41034]: 0x91, OSX senseid: 0x2
HotPlugID: 1
Connector at index 3
Type [@offset 40900]: HDMI-A (11)
Encoder [@offset 40904]: INTERNAL_UNIPHY1 (0x20)
i2cid [@offset 41061]: 0x93, OSX senseid: 0x4
HotPlugID: 5
Connector at index 4
Type [@offset 40910]: DVI-D (3)
Encoder [@offset 40914]: INTERNAL_UNIPHY (0x1e)
i2cid [@offset 41088]: 0x95, OSX senseid: 0x6
HotPlugID: 3
E347 Polaris10 XT A1 GDDR5 256Mx32 8GB 300e/300m
Subsystem Vendor ID: 174b
Subsystem ID: e347
Object Header Structure Size: 335
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 [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 [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
And these are the three framebuffers found in AMD9510Controller.kext:
Exmoor (6) @ 0x106080
LVDS, LVDS, DP, DP, DP, DP
020000000001000000010151000000002205020400000000
020000000001000000010261010000001204010300000000
000400000403000000010343000000001102030100000000
000400000001000000010431000000002103050500000000
000400000403000000010523000000001000040200000000
000400000001000000010611000000002001050500000000
Berbice (5) @ 0x106110
LVDS, DP, DP, DP, DP
020000000001000039050108000000002001010100000000
000400000001000000010243000000001000020200000000
000400000403000000010313000000002103030300000000
000400000403000000010453000000001102040400000000
000400000403000000010533000000001204050500000000
Baladi (6) @ 0x106300
DP, DP, DP, DP, DP, DP
000400000403000000010300000000001204030300000000
000400000403000000010100000000001102010100000000
000400000403000000010200000000002103020200000000
000400000403000000010400000000002205040400000000
000400000403000000010500000000001000050500000000
000400000403000000010600000000002001060600000000
So far, so good. My first thoughts where: ok, your card has 5 Ports to connect monitors to it:
2x Displayport, 2x HDMI and 1x DVI-D
so we need to find for optimum usage a framebuffer with 5 connectors: et voila --> there is BERBICE.
So i patched the above original BERBICE FB to the following:
DP, DP, HDMI, HDMI, DVI-D
000400000403000039050108000000001204060100000000
000400000403000000010243000000002205040300000000
000800000402000000010313000000001102010200000000
000800000402000000010453000000002103050400000000
040000001402000000010533000000001000030600000000
which will give us the following one line for CLOVERs "ATIConnectorsPatch"-line:
000400000403000039050108000000001204060100000000000400000403000000010243000000002205040300000000000800000402000000010313000000001102010200000000000800000402000000010453000000002103050400000000040000001402000000010533000000001000030600000000
So i patched CLOVER config.plist in their right directions and rebooted.
Surprise, surprise... it DIDN'T work as expected! What happened? you ask. Well this happens:
DP-Mon#1 gets signal, DP-Mon#2 gets signal, HDMI-Mon#1 gets signal, IGPU-Mon shows Desktop and in the same moment all other monitors (connected to the RX480) lost their signal and went to sleep mode! But PC did NOT crashed: still able to connect to it via Apple Remote Desktop and there i got 4 screens! But only the IGPU-connected Monitor was still "alive" and showing mouse movements and there positioned windows.
So... back to the drawing boards and think over what could be wrong.
Then i thought: ok, you don't use DVI-D any more, cause this connection is way old school. Just put focus on Display- and HDMI-ports.
So i tried this patch for the BERBICE framebuffer instead:
LVDS, DP#1, DP#2, HDMI#1, HDMI#2
020000000001000039050100000000001000030600000000
000400000403000000000200000000001204060100000000
000400000403000000000300000000002205040300000000
000800000402000000000400000000001102010200000000
000800000402000000000500000000002103050400000000
If you watch carefully, you have noticed that first line was patched only half:
02000000000100003905010000000000 <--- this part still came from original BERBICE, while
1000030600000000 <--- this part was taken from above mentioned connectorsdetection for DVI-D.
So why have i done it this way? Cause as you can see in original BERBICE fb line one is connector for internal display,
which we don't have and as you may notice we don't have any "(osx txmit 0x20 [duallink 0x0] enc 0x1)" part. So i choose
to change this to my DVI-D values: (osx txmit 0x10 [duallink 0x0] enc 0x0)
Back to CLOVER i repatched the "ATIConnectorsPatch" part with the edits above:
020000000001000039050100000000001000030600000000000400000403000000000200000000001204060100000000000400000403000000000300000000002205040300000000000800000402000000000400000000001102010200000000000800000402000000000500000000002103050400000000
rebooted... et voila: all monitors detected as expected and working flawlessly.
Continued my thoughts: what happens, if i change line one now to this:
040000001402000039050100000000001000030600000000 <--- which will change the first part from "internal Display" to real settings for DVI-D settings. Done this, rebooted and peng: same effect as in my first try: Monitor 1 and 2 get their signals and loose it again right after desktop on IGPU was send to IGPU connected Monitor.
OK, so we now know, that the first line has to be as "untouched" as possible. But what about the values in the middle of line 2 to 4? what are they good for. All i knew so far was the following:
020000000001000039050 1 00000000001000030600000000
000400000403000000000 2 00000000001204060100000000
000400000403000000000 3 00000000002205040300000000
000800000402000000000 4 00000000001102010200000000
000800000402000000000 5 00000000002103050400000000
the values between the above given SPACES are the given order of how your connectors will be shown as in the following screen:
they will mark the "port-number" of the given connector. But remember: line 1 ist port-number 0, line 2 is port-number 1 etc.
So all i was doing then while knowing this, was to change the values before and after these numbers changing to the value 0.
I did this in the first step also for line 1 and guess what? right, it didnt work. so i put back the "39050" value to its original position in line 1, changed just the other values for line 2 to 4 and tried again to boot. This time all monitors are working again as expected.
Took me a lot of time and reboots to find out that just the values for the connectors and the values for the right order are really neccesarry to make it work as expected. And i really don't know what the other values will stay for, but as far as i expirienced, they are not really needed to make your card work with your connected monitors.
Made the same tests for framebuffer BALADI and EXMOOR - but never could get them to work - no matter what changes i did... at a reboot i always got "RadeonFrameBuffer" as the given framebuffer and always got "5 ports" as detected # of ports, even i provided less ports via CLOVER settings.
Hope to brought more clearness into Framebuffer-Patching. ENJOY...
regards,
Mork vom Ork
PS: forgot to mention, that all above described tests have been made under SIERRA 10.12.4 beta5 (build 16E183b)