Contribute
Register

macOS Sierra PB: Need testers for new AMD Radeon drivers!

Status
Not open for further replies.
macOS 10.12.4 PB v5 (16E183b) is available. The AMD 9510 Controller is at version 1.50.37 with build date March 06, 2017. Ditto for the AMD 4100 kext.

Audio is (sigh) horrifically bad. :)
 
Please try one of the last 2 parts of this post (but could be used ...

Hello again,

For some reason, the first version (<key>ATIConnectorsController</key>) has not worked correctly. I am not sure why. It does seem to be having an effect, just not the one hoped for, that of turning on the display.

The second version is working excellently.

I am trying to better understand the methods for patching the frame buffer and I have some questions about how you came up with the patch.

Using the explanation found here: (http://www.insanelymac.com/forum/topic/303186-how-to-modification-of-amd-fb-clover-injection/) and the tools by Vlada and Fl0r!an, I came up with the following for my card. The order is as listed by the tools which, in the explanation, seemed to also serve as the connector startup order.

11 02 01 01 --> DisplayPort
21 03 02 04 —> HDMI Port
10 00 03 05 —> DL-DVI Port

Using more of Fl0r!an's tools, I also get the same as you listed:

Original BERBICE
(taken from SIERRA 10.12.4 beta4 build16E175b)

020000000001000039050108000000002001010100000000 —> internal Display
000400000001000000010243000000001000020200000000 -> DVI
000400000403000000010313000000002103030300000000 -> DisplayPort
000400000403000000010453000000001102040400000000 -> DisplayPort
000400000403000000010533000000001204050500000000 -> DisplayPort

which you turned into:

Modified BERBICE
(! only for THAT specific card, other cards may NOT like this FB-Patch, cause they have other values for their connectors !):

000400000403000000010453000000001102050100000000 -> DisplayPort
000800000402000000010313000000002103030400000000 -> HDMI
000400000001000000010243000000001000040500000000 -> DVI
020000000001000039050108000000002001010100000000 -> internal Display (not used by your Card)
000400000403000000010533000000001204050500000000 -> DisplayPort (not used by your card)

I need to split that into parts for the questions.

00040000040300000001045300000000 1102 05 0100000000 -> DisplayPort
00080000040200000001031300000000 2103 03 0400000000 -> HDMI
00040000000100000001024300000000 1000 04 0500000000 -> DVI
02000000000100003905010800000000 2001 01 0100000000 -> internal Display (not used by your Card)
00040000040300000001053300000000 1204 05 0500000000 -> DisplayPort (not used by your card)

Finally, I am getting to the first question. You set the connector startup order as 1) Internal Display, 2) skip, 3) HDMI, 4) DVI and then 5) both of the two DisplayPort connectors as last. Did you have a reason for doing that?

Onto the second question.

The line: 00040000 0403 000000010313000000002103030300000000 -> DisplayPort
became: 00080000 0402 000000010313000000002103030400000000 -> HDMI

Changing the 0004 into 0008 is clear, as that is the code for the HDMI connector. Why did you change the 0403 into 0402?
 
Hello again,

For some reason, the first version (<key>ATIConnectorsController</key>) has not worked correctly. I am not sure why. It does seem to be having an effect, just not the one hoped for, that of turning on the display.

The second version is working excellently.

I am trying to better understand the methods for patching the frame buffer and I have some questions about how you came up with the patch.

Using the explanation found here: (http://www.insanelymac.com/forum/topic/303186-how-to-modification-of-amd-fb-clover-injection/) and the tools by Vlada and Fl0r!an, I came up with the following for my card. The order is as listed by the tools which, in the explanation, seemed to also serve as the connector startup order.

11 02 01 01 --> DisplayPort
21 03 02 04 —> HDMI Port
10 00 03 05 —> DL-DVI Port

Using more of Fl0r!an's tools, I also get the same as you listed:

Original BERBICE
(taken from SIERRA 10.12.4 beta4 build16E175b)

020000000001000039050108000000002001010100000000 —> internal Display
000400000001000000010243000000001000020200000000 -> DVI
000400000403000000010313000000002103030300000000 -> DisplayPort
000400000403000000010453000000001102040400000000 -> DisplayPort
000400000403000000010533000000001204050500000000 -> DisplayPort

which you turned into:

Modified BERBICE
(! only for THAT specific card, other cards may NOT like this FB-Patch, cause they have other values for their connectors !):

000400000403000000010453000000001102050100000000 -> DisplayPort
000800000402000000010313000000002103030400000000 -> HDMI
000400000001000000010243000000001000040500000000 -> DVI
020000000001000039050108000000002001010100000000 -> internal Display (not used by your Card)
000400000403000000010533000000001204050500000000 -> DisplayPort (not used by your card)

I need to split that into parts for the questions.

00040000040300000001045300000000 1102 05 0100000000 -> DisplayPort
00080000040200000001031300000000 2103 03 0400000000 -> HDMI
00040000000100000001024300000000 1000 04 0500000000 -> DVI
02000000000100003905010800000000 2001 01 0100000000 -> internal Display (not used by your Card)
00040000040300000001053300000000 1204 05 0500000000 -> DisplayPort (not used by your card)

Finally, I am getting to the first question. You set the connector startup order as 1) Internal Display, 2) skip, 3) HDMI, 4) DVI and then 5) both of the two DisplayPort connectors as last. Did you have a reason for doing that?

Onto the second question.

The line: 00040000 0403 000000010313000000002103030300000000 -> DisplayPort
became: 00080000 0402 000000010313000000002103030400000000 -> HDMI

Changing the 0004 into 0008 is clear, as that is the code for the HDMI connector. Why did you change the 0403 into 0402?
ATY,ControlFlags:

/* 4 byte the same as found on ioreg key: ATY,ControlFlags. hardcoded for each connector type

0x0002 : LVDS > ControlFlag : 0x0040 / 0x0100 =

0x0004 : DVI-? > ControlFlag : 0x0016 - 0x0014 / 0x214 = 14020000

0x0010 : VGA > ControlFlag : 0x0010 =

0x0080 : S-Video > ControlFlag : 0x0002 =

0x0200 : DVI-? > ControlFlag : 0x0014 / 0x0214 - 0x0204 = 14020000

0x0400 : DisplayPort > ControlFlag : 0x0100 - 0x0104 - 0x0304 / 0x0604 - 0x0400 = 04030000

0x0800 : HDMI > ControlFlag : 0x0200 = 04020000

0x1000 : DVI-? > ControlFlag : 0x0016 = 04020000
 
ATY,ControlFlags:

/* 4 byte the same as found on ioreg key: ATY,ControlFlags. hardcoded for each connector type

0x0002 : LVDS > ControlFlag : 0x0040 / 0x0100 =

0x0004 : DVI-? > ControlFlag : 0x0016 - 0x0014 / 0x214 = 14020000

0x0010 : VGA > ControlFlag : 0x0010 =

0x0080 : S-Video > ControlFlag : 0x0002 =

0x0200 : DVI-? > ControlFlag : 0x0014 / 0x0214 - 0x0204 = 14020000

0x0400 : DisplayPort > ControlFlag : 0x0100 - 0x0104 - 0x0304 / 0x0604 - 0x0400 = 04030000

0x0800 : HDMI > ControlFlag : 0x0200 = 04020000

0x1000 : DVI-? > ControlFlag : 0x0016 = 04020000

I take it that you are answering the second question (why the 0403 became 0402?) ... to set the control flag. 0x0800 : HDMI > ControlFlag : 0x0200 = 04020000.

Thank you. Things are getting more clear.
 
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:
Bildschirmfoto_2017_03_08_um_21_19_15.png

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)
 
Last edited:
Regarding FCPX 10.3+

I updated Clover to version 4035 today, and suddenly all of my issues with FCPX are resolved. I am on 10.12.4 public beta 3 still, as I have not kept up with recent status of the RX480 enough to try more recent Public Betas. Just thought I'd share, as this is a pain point for many as far as I can tell (although less of a problem on Skylake builds from what I can tell).

Reason I updated Clover: I was experiencing kernel panics daily when waking from sleep (both long sleep and short sleep), and even occasional system crash while using Chrome or editing photos in Adobe Lightroom. I hoped the Clover update might address some of those issues, as they were not present in the previous PB and Clover version I was on.

I'll know in another day or two if the Clover update fixes those issues, but for now, the FCPX issue was a big one for me and I'm very happy it's resolved now.
 
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.

This is phenomenal work. I have been trying some variations on the connector startup order, but only with limited success. I can get the HDMI port to run, or the DVI port, but the DP port will only start if it is as you have it in the RX 460 patch, with both the used and unused ones startup at position 05.

02000000 00010000 39050108 00000000 20010101 00000000 are 48 characters (8 bits each character) of information. I wonder if there is supposed to be any audio timing and synchronization information in there.

p.s. I suspect when 10.12.4 is released to the public, some folks are going to be wondering about your patching for the RX 470 and 480 cards. :)
 
Last edited:
Regarding FCPX 10.3+

I updated Clover to version 4035 today, and suddenly all of my issues with FCPX are resolved. I am on 10.12.4 public beta 3 still, as I have not kept up with recent status of the RX480 enough to try more recent Public Betas. Just thought I'd share, as this is a pain point for many as far as I can tell (although less of a problem on Skylake builds from what I can tell).

Reason I updated Clover: I was experiencing kernel panics daily when waking from sleep (both long sleep and short sleep), and even occasional system crash while using Chrome or editing photos in Adobe Lightroom. I hoped the Clover update might address some of those issues, as they were not present in the previous PB and Clover version I was on.

I'll know in another day or two if the Clover update fixes those issues, but for now, the FCPX issue was a big one for me and I'm very happy it's resolved now.

The latest 10.12.4 Public beta with Clover 4035 has been fairly solid and smooth. Apple may put out a 10.12.5 before they start on 10.13 in June, but ... for now this is their best version of 10.12. If only the audio worked on the AMD Polaris cards.
 
If only i dint need a helper card fro my rx480!
 
I still can't get my msi rx480 to work with any sierra at all with any radeon helper card I have. I don't know if it's my x99 board or msi rx480card. I haven't heard of anyone tackling the obstacles around using a card without helper card, I guess that will be the next area, in 12.13 when the final kexts come out, to see if we can still use our cards or not, I say we, I have been trying for a couple of months unsuccessfully
 
Status
Not open for further replies.
Back
Top