Contribute
Register

XFX ATI 6570 (deviceID=6759, dual DVI + miniHDMI, HD-657X-ZNH3) framebuffer personality "disorder" r

Status
Not open for further replies.
Joined
Sep 11, 2010
Messages
38
Motherboard
MSI Z77A-G45 GAMING
CPU
i5-3570k
Graphics
GTX 970
Mobile Phone
  1. Android
EDIT:
***IMPORTANT***
It seems that this card works (properly) only with Chameleon versions up to 2210.
Newer versions (2215 and up) just won't recognise the card and NO framebuffer personality is loaded (regardless of input type and/or number of displays)


After reporting ^^this^^ to chameleon team (LINK), they were quick to react and found the bug - the patch is in the chameleon trunk now (commit r2243)



So, more than a year after I started THIS thread (which is now part of the "legacy" read-only content, hence this thread) I decided it was time to solve the problem.

Problem: No framebuffer personality for use with two DVI connected displays.

With single monitor, personality Gibba works fine - The card is correctly reported in System Profiler as Radeon 6570/7570, no OpenGL crashes. With both monitors hooked up I could boot to desktop only without any framebuffer personalities used (ioreg shows it as RadeonFramebuffer.)

When I started the aforementioned thread, I was in the middle of a quite hectic professional period (edited a weekly-airing TV show), so I couldn't risk breaking my machine for even a single day. I just let it go and worked with no personalities loaded - when I needed apps that required working framebuffer I would reboot and used Gibba to work with a single monitor.

A few days ago I bought a new SSD and installed Mountain Lion (I was still on Snow Leopard), so I had something I could use to experiment.

Following the guide HERE and topics HERE, HERE, and HERE I got both monitors working on DVI with Gibba framebuffer personality.

Using tools radeon_bios_decode and redsock_bios_decoder on my ATI ROM (extracted by GPU-Z in Windows) I got this info:
Code:
ATOM BIOS Rom: 
	SubsystemVendorID: 0x1682 SubsystemID: 0x3195
	IOBaseAddress: 0x0000
	Filename: 657XZNH40   
	BIOS Bootup Message: 

YODA 1G C24103 DDR3 128MX8                                                  


PCI ID: 1002:6759
Connector at index 0
	Type [@offset 44278]: HDMI-A (11)
	Encoder [@offset 44282]: INTERNAL_UNIPHY2 (0x21)
	i2cid [@offset 44362]: 0x94, OSX senseid: 0x5
Connector at index 1
	Type [@offset 44288]: DVI-I (2)
	Encoder [@offset 44292]: INTERNAL_UNIPHY (0x1e)
	i2cid [@offset 44389]: 0x93, OSX senseid: 0x4
Connector at index 2
	Type [@offset 44298]: DVI-I (2)
	Encoder [@offset 44302]: INTERNAL_UNIPHY1 (0x20)
	i2cid [@offset 44426]: 0x92, OSX senseid: 0x3
Connector at index 3
	Type [@offset 44308]: DVI-I (2)
	Encoder [@offset 44312]: INTERNAL_KLDSCP_DAC1 (0x15)
	i2cid [@offset 44426]: 0x92, OSX senseid: 0x3
Code:
657XZNH40   :


YODA 1G C24103 DDR3 128MX8                                                  


Subsystem Vendor ID: 1682
       Subsystem ID: 3195
Object Header Structure Size: 241
Connector Object Table Offset: 3e
Router Object Table Offset: 0
Encoder Object Table Offset: b5
Display Path Table Offset: 12
Connector Object Id [12] which is [HDMI_TYPE_A]
	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 [0x1e] which is [INTERNAL_UNIPHY (osx txmit 0x10 [duallink 0x0] enc 0x0)] linkb: false
Connector Object Id [1] which is [DVI_I]
	encoder obj id [0x20] which is [INTERNAL_UNIPHY1 (osx txmit 0x11 [duallink 0x1] enc 0x2)] linkb: false
Connector Object Id [1] which is [DVI_I]
	encoder obj id [0x15] which is [INTERNAL_KLDSCP_DAC1 (osx txmit 0x00 enc 0x10?)] linkb: false

Using tool ati-personality.pl.0.11 (last version by Slice - working with 10.8.3+) I got this info on Gibba personality:
Code:
Personality: Gibba
ConnectorInfo count in decimal: 5
Disk offset in decimal 605248
0000000    00  04  00  00  04  03  00  00  00  01  00  00  12  04  05  01
0000010    00  04  00  00  04  03  00  00  00  01  00  00  22  05  04  02
0000020    00  08  00  00  04  02  00  00  00  01  00  00  11  02  06  04
0000030    00  02  00  00  14  02  00  00  00  01  00  00  00  00  03  05
0000040    04  00  00  00  04  02  00  00  00  01  00  00  11  02  01  03
0000050

EDIT: I added the text in red after I realized that Gibba personality was not the same inside AMD6000Controller (Mountain Lion 10.8.3) and ATI6000Controller (Snow Leopard 10.6.8)

And this is what Gibba looks like in Snow Leopard 10.6.8 ATI6000Controller - notice different control flags for DVI-SL device (0000030)
Code:
Personality: Gibba
ConnectorInfo count in decimal: 5
Disk offset in decimal 173024
0000000    00  04  00  00  04  03  00  00  00  01  00  00  12  04  05  01
0000010    00  04  00  00  04  03  00  00  00  01  00  00  22  05  04  02
0000020    00  08  00  00  04  02  00  00  00  01  00  00  11  02  06  04
0000030    00  02  00  00  04  02  00  00  00  01  00  00  00  00  03  05
0000040    04  00  00  00  04  02  00  00  00  01  00  00  11  02  01  03

By following the guide I realised DVI-SL device (0000030) in Gibba personality was not in sync with my ROM, while DVI-DL (0000040) was fine. That is why only one monitor worked with Gibba.

So I found bits that needed changing (transmitter and control flags for DVI-SL port, and switched SenseId between HDMI and DVI-SL) from my ROM output, HEX edited AMD6000Controller or ATI6000Controller binary inside of ATI6000Controller.kext and - VOILA. Work done.

Changes in detail (Mountain Lion):
Code:
Personality: Gibba
ConnectorInfo count in decimal: 5
Disk offset in decimal 605248
0000000    00  04  00  00  04  03  00  00  00  01  00  00  12  04  05  01
0000010    00  04  00  00  04  03  00  00  00  01  00  00  22  05  04  02
0000020    00  08  00  00  04  02  00  00  00  01  00  00  11  02  06  [B]04[/B]
0000030    00  02  00  00  14  02  00  00  00  01  00  00  [B]00[/B]  00  03  [B]05[/B]
0000040    04  00  00  00  04  02  00  00  00  01  00  00  11  02  01  03
0000050

to 

0000000    00  04  00  00  04  03  00  00  00  01  00  00  12  04  05  01
0000010    00  04  00  00  04  03  00  00  00  01  00  00  22  05  04  02
0000020    00  08  00  00  04  02  00  00  00  01  00  00  11  02  06  [B]05[/B]
0000030    00  02  00  00  14  02  00  00  00  01  00  00  [B]10[/B]  00  03  [B]04[/B]
0000040    04  00  00  00  04  02  00  00  00  01  00  00  11  02  01  03
0000050

Changes (Mountain Lion):

DVI-SL port (0000030) - Transmitter (from 00 to 10)
DVI-SL port (0000030) and HDMI port (0000020) switched SenseId number

So, in AMD6000Controller (Mountain Lion) we need to find this HEX sequence:
0400020000140200000001000000000305
and change it to:
0500020000140200000001000010000304

Here's a nice perl script that will do this for you (Mountain Lion)
Code:
sudo perl -pi -e 's|\x04\x00\x02\x00\x00\x14\x02\x00\x00\x00\x01\x00\x00\x00\x00\x03\x05|\x05\x00\x02\x00\x00\x14\x02\x00\x00\x00\x01\x00\x00\x10\x00\x03\x04|g' /System/Library/Extensions/ATI6000Controller.kext/Contents/MacOS/AMD6000Controller
sudo touch /System/Library/Extensions

Changes in detail (Snow Leopard):
Code:
Personality: Gibba
ConnectorInfo count in decimal: 5
Disk offset in decimal 605248
0000000    00  04  00  00  04  03  00  00  00  01  00  00  12  04  05  01
0000010    00  04  00  00  04  03  00  00  00  01  00  00  22  05  04  02
0000020    00  08  00  00  04  02  00  00  00  01  00  00  11  02  06  [B]04[/B]
0000030    00  02  00  00  [B]04[/B]  02  00  00  00  01  00  00  [B]00[/B]  00  03  [B]05[/B]
0000040    04  00  00  00  04  02  00  00  00  01  00  00  11  02  01  03
0000050

to 

0000000    00  04  00  00  04  03  00  00  00  01  00  00  12  04  05  01
0000010    00  04  00  00  04  03  00  00  00  01  00  00  22  05  04  02
0000020    00  08  00  00  04  02  00  00  00  01  00  00  11  02  06  [B]05[/B]
0000030    00  02  00  00  [B]14[/B]  02  00  00  00  01  00  00  [B]10[/B]  00  03  [B]04[/B]
0000040    04  00  00  00  04  02  00  00  00  01  00  00  11  02  01  03
0000050

Changes (Snow Leopard):

DVI-SL port (0000030) - Control flags (from 04 02 00 00 to 14 02 00 00)
DVI-SL port (0000030) - Transmitter (from 00 to 10)
DVI-SL port (0000030) and HDMI port (0000020) switched SenseId number

And in ATI6000Controller (Snow Leopard) we need to find this HEX sequence:
0400020000040200000001000000000305
and change it to:
0500020000140200000001000010000304

Here's a perl script for Snow Leopard as well
Code:
sudo perl -pi -e 's|\x04\x00\x02\x00\x00\x04\x02\x00\x00\x00\x01\x00\x00\x00\x00\x03\x05|\x05\x00\x02\x00\x00\x14\x02\x00\x00\x00\x01\x00\x00\x10\x00\x03\x04|g' /System/Library/Extensions/ATI6000Controller.kext/Contents/MacOS/ATI6000Controller
sudo touch /System/Library/Extensions


Reboot - in Chameleon/Chimera type "AtiConfig=Gibba" (no quotes) or add these lines to your org.chameleon.boot.plist:
Code:
<key>AtiConfig</key>
<string>Gibba</string>

And you're done!

For those too lazy to do this on their own, I have attached my working kext for both 10.6.8, 10.8.3 and 10.8.4

Be warned: These kexts are edited with only this card in mind. They might work for similar cards with similar outputs, but I wouldn't count on it.
 

Attachments

  • about-displays.png
    about-displays.png
    75.4 KB · Views: 508
  • system-information.png
    system-information.png
    102.8 KB · Views: 1,031
  • ioreg-personality_in_use.png
    ioreg-personality_in_use.png
    37.6 KB · Views: 346
  • ATI6000Controller.kext (10.6.8).zip
    213.5 KB · Views: 148
  • ATI6000Controller.kext (10.8.3).zip
    664.7 KB · Views: 124
  • ATI6000Controller.kext (10.8.4).zip
    666.8 KB · Views: 183
Hi man its nice thank you for your hard work.I have xfx6950 DVI-I and DVI-D not work.If you can please can you fixed my personality
CAYMAN PRO Hill GDDR5 BIOS

Subsystem Vendor ID: 1682
Subsystem ID: 3122
Object Header Structure Size: 436
Connector Object Table Offset: 52
Router Object Table Offset: 0
Encoder Object Table Offset: 145
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 [3] which is [DVI_D]
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
localhost:~ manoranjan$ /Users/manoranjan/Desktop/my\ files\ 2/my\ rom/radeon_bios_decode </Users/manoranjan/Desktop/my\ files\ 2/clover/final\ install\ with\ disk\ ul\ exe/misc/c0000.bin
ATOM BIOS Rom:
SubsystemVendorID: 0x1682 SubsystemID: 0x3122
IOBaseAddress: 0xce00
Filename: 695CNF80.BIN
BIOS Bootup Message:
CAYMAN PRO Hill GDDR5 BIOS

PCI ID: 1002:6719
Connector at index 0
Type [@offset 44199]: DisplayPort (10)
Encoder [@offset 44203]: INTERNAL_UNIPHY2 (0x21)
i2cid [@offset 44335]: 0x90, OSX senseid: 0x1
Connector at index 1
Type [@offset 44209]: DisplayPort (10)
Encoder [@offset 44213]: INTERNAL_UNIPHY2 (0x21)
i2cid [@offset 44362]: 0x91, OSX senseid: 0x2
Connector at index 2
Type [@offset 44219]: HDMI-A (11)
Encoder [@offset 44223]: INTERNAL_UNIPHY1 (0x20)
i2cid [@offset 44389]: 0x93, OSX senseid: 0x4
Connector at index 3
Type [@offset 44229]: DVI-D (3)
Encoder [@offset 44233]: INTERNAL_UNIPHY1 (0x20)
i2cid [@offset 44416]: 0x92, OSX senseid: 0x3
Connector at index 4
Type [@offset 44239]: DVI-I (2)
Encoder [@offset 44243]: INTERNAL_UNIPHY (0x1e)
i2cid [@offset 44453]: 0x94, OSX senseid: 0x5
Connector at index 5
Type [@offset 44249]: DVI-I (2)
Encoder [@offset 44253]: INTERNAL_KLDSCP_DAC1 (0x15)
i2cid [@offset 44453]: 0x94, OSX senseid: 0x5
localhost:~ manoranjan$


ori 10.8.2
Personality: Gibba
ConnectorInfo count in decimal: 5
Disk offset in decimal 179984
0000000 00 04 00 00 04 03 00 00 00 01 00 00 12 04 05 01
0000010 00 04 00 00 04 03 00 00 00 01 00 00 22 05 04 02
0000020 00 08 00 00 04 02 00 00 00 01 00 00 11 02 06 04
0000030 00 02 00 00 14 02 00 00 00 01 00 00 00 00 03 05
0000040 04 00 00 00 04 02 00 00 00 01 00 00 11 02 01 03
0000050
 
Well, HEX editing the personality is just the final part of work needed here.

First, you need to check which framebuffer personality at least partially works with your card.

Does booting with AtiConfig=Gibba give you anything on any of your displays at all? If not, it would be better to edit the personality that gives you at least some display.
In my case it was Gibba.

First check all the personalities with every combination of displays connected. It is a boring process that includes numerous reboots. Most of the time you'll end up booting into blank screen so you should make sure there is a clean way of restoring your working system - I used my Nexus7 to make a ssh connection.
I made a google spreadsheet to keep track of the results.

When you find the best personality to use, then you can cross-reference the results with different personalities and HEX-edit the "wrong" part of the chosen personlity.

I can help you with this last part since it is still fresh to me.
 
I upload my ioreg look framebuffer personality Gibba
this is patch worked but not dvi-i dvi-d
Personality: Gibba
ConnectorInfo count in decimal: 5
Disk offset in decimal 179984
0000000 00 08 00 00 04 02 00 00 00 01 00 00 11 02 06 04
0000010 04 00 00 00 04 02 00 00 00 01 00 00 11 02 01 03
0000020 00 02 00 00 14 02 00 00 00 01 00 00 00 00 03 05
0000030 00 04 00 00 04 03 00 00 00 01 00 00 12 04 04 01
0000040 00 04 00 00 04 03 00 00 00 01 00 00 22 05 05 02
0000050

i thing i want fix this 2 lines
0000010 04 00 00 00 04 02 00 00 00 01 00 00 11 02 01 03
0000020 00 02 00 00 14 02 00 00 00 01 00 00 00 00 03 05
 

Attachments

  • 2x6950.zip
    885.7 KB · Views: 94
I dont know how to add ControlFlag/Transmitter/Encoder from my decode personality if u know give me I will hext edit and try.
when I try single monitor with dvi d test all personality I have to add GraphicsEnabler or not?
 
well, since you don't have anything to compare, here is the abstract from the guides I used

ControlFlags:
Code:
Decode the ATI/AMD ROM Output ATY,ControlFlags:
0×0002 : LVDS, ControlFlag : 0×0040 and 0×0100
0×0004 : DVI, ControlFlag : 0×0016, 0×0014, and 0×214
0×0010 : VGA, ControlFlag : 0×0010
0×0080 : S-Video, ControlFlag : 0×0002
0×0200 : DVI, 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×0200
0×1000 : DVI, ControlFlag : 0×0016
As you can see, there are multiple possibilities for DVI ControlFlag. When HEX editing, you'll have to flip the bits and ignore the '0x' part. For instance, 0×0040 is 40 00, and 0×0604 becomes 04 06.
For your DVI_D try 0×0016, 0×0014, and 0×214 and for DVI_I 0×0014, 0×0214, and 0×0204

Transmitters:
Code:
Decode the ATI/AMD ROM Output Transmitter:
UNIPHY		0×00 = 00
UNIPHY1		0×01 = 01
UNIPHY2		0×02 = 02
DUALLINK	0×00 = 00 = LINKA + LINKB
LINKA		0×10 = 10
LINKB		0×20 = 20
UNIPHYA		0×10 = 10 = UNIPHY:LINKA
UNIPHYB		0×20 = 20 = UNIPHY:LINKB
UNIPHYAB	0×00 = 00 = UNIPHY:DUALLINK
UNIPHYC		0×11 = 11 = UNIPHY1:LINKA
UNIPHYD		0×21 = 21 = UNIPHY1:LINKB
UNIPHYCD	0×01 = 01 = UNIPHY1:DUALLINK
UNIPHYE		0×12 = 12 = UNIPHY2:LINKA
UNIPHYF		0×22 = 22 = UNIPHY2:LINKB
UNIPHYEF	0×02 = 02 = UNIPHY2:DUALLINK
DACA		0×00 = 00
DACB		0×10 = 10

I'd try with 11 for DVI_D and 10 for DVI_I

Encoders:
Code:
Decode the ATI/AMD ROM Output Encoder:

DIG1	0×00 = 00 = DIGA
DIG2	0×01 = 01 = DIGB
DIG3	0×02 = 02 = DIGC Radeon HD 5XXX Series  and Newer
DIG4	0×03 = 03 = DIGD Radeon HD 5XXX Series  and Newer
DIG5	0×04 = 04 = DIGE Radeon HD 5XXX Series  and Newer
DIG6	0×05 = 05 = DIGF Radeon HD 5XXX Series  and Newer
DAC	0×10 = 10
I couldn't figure this one out. Test them all starting with 00


So you see, it is hard to say what bits are to blame on errors when testing this way.
I wish you all the luck, but I still think you should test all the personalities with your DVI ports and copy the "working" bits into Gibba.
 
Thanks man I will try and report.Its nice to learn.Good explain.
 
Any chance somebody can help me out with Ipomoea for 10.9.4 in AMD6000Controller.kext?

radeon bios decode:
Code:
ATOM BIOS Rom: 	SubsystemVendorID: 0x1682 SubsystemID: 0x3186
	IOBaseAddress: 0x0000
	Filename: 667ZDF70.BIN
	BIOS Bootup Message: 
TURKS XT C33302 GDDR5 64Mx32                                


PCI ID: 1002:6758
Connector at index 0
	Type [@offset 44244]: HDMI-A (11)
	Encoder [@offset 44248]: INTERNAL_UNIPHY2 (0x21)
	i2cid [@offset 44328]: 0x94, OSX senseid: 0x5
Connector at index 1
	Type [@offset 44254]: DVI-D (3)
	Encoder [@offset 44258]: INTERNAL_UNIPHY (0x1e)
	i2cid [@offset 44355]: 0x92, OSX senseid: 0x3
Connector at index 2
	Type [@offset 44264]: DVI-I (2)
	Encoder [@offset 44268]: INTERNAL_UNIPHY1 (0x20)
	i2cid [@offset 44392]: 0x93, OSX senseid: 0x4
Connector at index 3
	Type [@offset 44274]: DVI-I (2)
	Encoder [@offset 44278]: INTERNAL_KLDSCP_DAC1 (0x15)
i2cid [@offset 44392]: 0x93, OSX senseid: 0x4


redsock_bios_decode:
Code:
667ZDF70.BIN:

TURKS XT C33302 GDDR5 64Mx32                                


Subsystem Vendor ID: 1682
       Subsystem ID: 3186
Object Header Structure Size: 241
Connector Object Table Offset: 3e
Router Object Table Offset: 0
Encoder Object Table Offset: b5
Display Path Table Offset: 12
Connector Object Id [12] which is [HDMI_TYPE_A]
	encoder obj id [0x21] which is [INTERNAL_UNIPHY2 (osx txmit 0x12 [duallink 0x2] enc 0x4)] 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
Connector Object Id [1] which is [DVI_I]
	encoder obj id [0x20] which is [INTERNAL_UNIPHY1 (osx txmit 0x11 [duallink 0x1] enc 0x2)] linkb: false
Connector Object Id [1] which is [DVI_I]
encoder obj id [0x15] which is [INTERNAL_KLDSCP_DAC1 (osx txmit 0x00 enc 0x10?)] linkb: false
 
Status
Not open for further replies.
Back
Top