Jump to content

Editing custom personalities for ATI Radeon HD[45]xx


bcc9
 Share

775 posts in this topic

Recommended Posts

Well, if you can get to a conclusion from the cards BIOS or any other dump i can get,

just let me know... i have a BIOS dump and i can get into windows or ubuntu to get any other info you need.

Comparing bios dumps from genuine macs with the connectorinfo they use would get to the bottom of it.

 

Unrelated: I just updated post #1 with instructions on how to edit the ConnectorInfo via xxd.

Link to comment
Share on other sites

Of course, how stupid of me... i keep forgetting this is Apple territory :(

I'm afraid i can help much with Mac dumps... not much of them around here.

 

Will take a look at "unrelated".. thanks.

Link to comment
Share on other sites

Of course, how stupid of me... i keep forgetting this is Apple territory :(

I'm afraid i can help much with Mac dumps... not much of them around here.

No, it's easy. From the ioregistry dump of a genuine mac, the ATY,bin_image key has the bios in hex. xxd -r to convert to binary, then run thru radeon_bios_decode. Just have to find a genuine mac with connector-type=0x200 in use.

Link to comment
Share on other sites

No, it's easy. From the ioregistry dump of a genuine mac, the ATY,bin_image key has the bios in hex. xxd -r to convert to binary, then run thru radeon_bios_decode.

yeah... i get the dump part. What i meant is how stupid of me thinking that info about my card would help and

that is not easy to get my hands on Mac's. I have a reasonable collection of dumps, but i get them exactly from the same places

anyone can get so, i don't know if it helps going through them?!

 

Just have to find a genuine mac with connector-type=0x200 in use.

Does Apple ever used DVI connectors or still use these days? And single-link ones? :(

Link to comment
Share on other sites

yeah... i get the dump part. What i meant is how stupid of me thinking that info about my card would help and

that is not easy to get my hands on Mac's. I have a reasonable collection of dumps, but i get them exactly from the same places

anyone can get so, i don't know if it helps going through them?!

Well this is the kind of homework I went thru and is one of the ways to fill in some of the remaining blanks (that I personally don't need the answer to....). Also ioregistry dumps are missing in the online collections for many of the models that are easy to access within apple stores. I've had to get my own a few times already.
Does Apple ever used DVI connectors or still use these days? And single-link ones? :unsure:

Since the 0x0200 connector-type appears in the uakari, vervet personality types within the ATI5000 kext, and also in the duckweed & gibba entries within the ATI6000 kext, it would seem apple is shipping recent product that uses 0x0200. If none of those products have single-link DVI, yet use 0x0200, then we'd have part of the answer right there...

Link to comment
Share on other sites

I had checked my script output under 10.7 preview 4 with -a -x (64-bit mode), and things looked OK. Since 10.7 is normally only run in 64 bit mode, 32 bit mode is less relevant. I hadn't noticed that the 32 bit mode output is wrong. You can see that it's clearly wrong as only 1 bit should be set in the first 4 bytes of each connectorinfo entry, yet you have garbage above.

 

With -d you can see that the script is getting the wrong effective address in 32-bit mode. (I suspect apple switched compilers and it's now generating better optimized code; no time to look further tonight).

 

So in summary, just look at the 64-bit reporting information, it should be all you need anyways.

 

Ok, now I feel like a total fool lol. I had totally forgotten about the -x switch, I was using just -a which obviously gave me incorrect results with the Lion kexts. Anyway I now have the correct results and can begin my modifications :unsure: I put these noobish moments I have down to old age, thats my excuse for almost everything these days.

 

Anyways thank you again, I'll let you know how it all goes.

Link to comment
Share on other sites

Well this is the kind of homework I went thru and is one of the ways to fill in some of the remaining blanks (that I personally don't need the answer to....). Also ioregistry dumps are missing in the online collections for many of the models that are easy to access within apple stores. I've had to get my own a few times already.

If you can afford going to a store and risk being caught, that's up to you!

I have have a "sad past" with the justice and can't risk that kind of stuff, just because of a hobby.

There's no Apple store in PT; the closest thing we have here, are the Apple spaces on the FNAC stores and believe me,

those guys don't play around when it comes to catch wise asses.

Besides, i'm a good FNAC costumer and want to keep it that way.

 

Since the 0x0200 connector-type appears in the uakari, vervet personality types within the ATI5000 kext, and also in the duckweed & gibba entries within the ATI6000 kext, it would seem apple is shipping recent product that uses 0x0200. If none of those products have single-link DVI, yet use 0x0200, then we'd have part of the answer right there...

Well, i'm not an expert on the subject, but i don't remember a recent Mac using DVI connectors.

Maybe this is done for compatibility with DP/HDMI to DVI-I converters;

maybe Apple tests the OS on PC's (i'm pretty sure they do!!)... who knows ;)

All i can do is try to check it out in some way. Will keep my eyes and mind open...

Link to comment
Share on other sites

If you can afford going to a store and risk being caught, that's up to you!

I have have a "sad past" with the justice and can't risk that kind of stuff, just because of a hobby.

It's not illegal to type ioreg -lw0 | mail at an apple store.

On the other more technical forum, someone advocated booting apple store gear into linux for information gathering, but I think that's going too far & unnecessary.

Ok, now I feel like a total fool lol. I had totally forgotten about the -x switch, I was using just -a which obviously gave me incorrect results with the Lion kexts. Anyway I now have the correct results and can begin my modifications :P I put these noobish moments I have down to old age, thats my excuse for almost everything these days.

Don't sweat it, my post #1was written as if -a was all one needed for 10.7, not -a -x. (Am planning on cleaning this up by auto-detecting 10.7 and fixing the 32bit parsing for the heck of it).

Link to comment
Share on other sites

It's not illegal to type ioreg -lw0 | mail at an apple store.

Can't argue with that! :P Maybe i'm being complicated and exaggerating, as usual :(

I think i have dumps for all the models they have on Fnac atm?! Need to make a list and check there.

Next week maybe... i need to go near, to get another HD for RAID setup.

 

On the other more technical forum, someone advocated booting apple store gear into linux for information gathering, but I think that's going too far & unnecessary.

Crazy dudes ;)

Link to comment
Share on other sites

[*]av-signal-type, also based upon active-conection-number, but mapped to 2 for DVI, 8 for HDMI, 16 for DP. (Must be 8 or 16 for HDMI/DP audio to work with AppleHDA).

 

how to change av-signal-type? I've get to work DP/HDMI/DualDVI outputs for 48xx series but, I can't recognize hdmi/dp audio (ioreg loads drivers and syst prof recognize it).

 

OT:

48xx series doesn't support triple monitors, but I think that I can use a framebuffer with 3 connectors for swicth between hdmi-dvi-dp ports without reboot changing framebuffer. do you think it's possible?

Link to comment
Share on other sites

how to change av-signal-type? I've get to work DP/HDMI/DualDVI outputs for 48xx series but, I can't recognize hdmi/dp audio (ioreg loads drivers and syst prof recognize it).
If you get your HDMI/DP connector-type mapped correctly, then your av-signal-type should follow. This is exactly what I do in the example in post #1. Have you tried following the instructions?
Link to comment
Share on other sites

If you get your HDMI/DP connector-type mapped correctly, then your av-signal-type should follow. This is exactly what I do in the example in post #1. Have you tried following the instructions?

 

of course!

hdmi

00 08 00 00 00 02 00 00 00 00 00 00 20 01 02 02

 

dp

00 04 00 00 04 01 00 00 00 01 00 00 00 00 03 03

 

maybe is the audio codec and his pinconfig the problem... maybe an applehda binpatch is required...

Link to comment
Share on other sites

of course!
So your connector-type for your working connector, as seen in the ioregistry looks correct at the same time as the av-signal-type looks incorrect? Example working output for HDMI:

	| |   |   | +-o ATY,Uakari@1  <class IOFBStub, id 0x1000002ab, registered, matched, active, busy 0 (9 ms), retain 7>
| |   |   | | | {
| |   |   | | |   "display-type" = "LCD"
| |   |   | | |   "connector-type" = 2048
| |   |   | | |   "ATY,ActiveFlags" = 512
| |   |   | | |   "IOFBDependentIndex" = 1
| |   |   | | |   "IOFBDependentID" = 116178816
| |   |   | | |   "ATY,ControlFlags" = 512
| |   |   | | |   "AAPL,gray-page" = <01000000>
| |   |   | | |   "av-signal-type" = 8
| |   |   | | |   "AAPL,gray-value" = <c38c6400>
| |   |   | | |   "port-number" = 2
| |   |   | | |   "name" = <"ATY,Uakari">
| |   |   | | |   "display-connect-flags" = <00000000>
| |   |   | | | }
| |   |   | | |

Link to comment
Share on other sites

  • 2 weeks later...
Ok, now I feel like a total fool lol. I had totally forgotten about the -x switch, I was using just -a which obviously gave me incorrect results with the Lion kexts. Anyway I now have the correct results and can begin my modifications :) I put these noobish moments I have down to old age, thats my excuse for almost everything these days.

 

Anyways thank you again, I'll let you know how it all goes.

 

phobox,

How are you doing with your personality edit with the Lion kexts?

I faced the same problem when I tried to bin edit ATI4600Controller for my Gigabyte HD4670 500MB card on Lion DP4.

I couldn't find the connector info in ATI4600Controller :P .

I also couldn't do terminal command "ati-personality.pl -a -x" as I can not install Xcode 4.0 in Lion DP4 for otools B) Need the upgrade ver 4.1 which I don't have.

I hope you can share your experience with us on how to edit personalities in Lion.

Thank You.

Link to comment
Share on other sites

phobox,

How are you doing with your personality edit with the Lion kexts?

I faced the same problem when I tried to bin edit ATI4600Controller for my Gigabyte HD4670 500MB card on Lion DP4.

I couldn't find the connector info in ATI4600Controller :P .

I also couldn't do terminal command "ati-personality.pl -a -x" as I can not install Xcode 4.0 in Lion DP4 for otools B) Need the upgrade ver 4.1 which I don't have.

I hope you can share your experience with us on how to edit personalities in Lion.

Thank You.

 

I successfully managed to edit the Lion kexts without issue, once I had the correct locations provided by the script. The card now works perfectly in both SL and Lion. As for running the script, I have Lion installed on another drive in this machine, so I simply modified the script itself to look on the Lion drive for the kexts and then ran it as normal from Snow :) Then I modified the Lion kexts from within Snow, rebooted into Lion et voila :)

Modding the script to point to your Lion installation is relatively easy, if you look at the script you'll see the paths defined in a number of places, just change them all to point to the correct location. For example by default the script has '/System/Library/Extensions' defined as the kext path, I changed that to '/Volumes/OSX/System/Library/Extensions'. Obviously change '/OSX/' to the name of the Lion volume on your machine.

 

Hope that helps :)

Link to comment
Share on other sites

I successfully managed to edit the Lion kexts without issue, once I had the correct locations provided by the script. The card now works perfectly in both SL and Lion. As for running the script, I have Lion installed on another drive in this machine, so I simply modified the script itself to look on the Lion drive for the kexts and then ran it as normal from Snow :) Then I modified the Lion kexts from within Snow, rebooted into Lion et voila :)

Modding the script to point to your Lion installation is relatively easy, if you look at the script you'll see the paths defined in a number of places, just change them all to point to the correct location. For example by default the script has '/System/Library/Extensions' defined as the kext path, I changed that to '/Volumes/OSX/System/Library/Extensions'. Obviously change '/OSX/' to the name of the Lion volume on your machine.

 

Hope that helps :)

Thank you for sharing with us your experience.

I will try as per your method.

Will share result with rest.

I hope you don't mind me asking questions if I face any problem.

Thank you.

Link to comment
Share on other sites

You could just cp /usr/bin/otool and /usr/bin/lipo to your lion partition. That's what I did ;)

 

Thanks for the Tips. This is what I was looking for.

 

No need to copy lipo. Its already in lion partition.

 

Thank you for sharing with us your experience.

I will try as per your method.

Will share result with rest.

I hope you don't mind me asking questions if I face any problem.

Thank you.

 

Works like a charm :) .

Since then, BCC9 has provide tips ( add otool to /usr/bin/ of Lion partition ) so no need to edit script. Can run straight in Lion :) .

Thanks again for your advise.

Have a nice day.

Link to comment
Share on other sites

Thanks for the Tips. This is what I was looking for.

 

No need to copy lipo. Its already in lion partition.

Oops, right. I couldn't remember if I had copied that one as well and it looked like I had.

If someone wants to add a disk volume-name command line argument to the script and post it that'd be cool too :)

Link to comment
Share on other sites

@BCC9, I tried to dump ATI Framebuffer Personality "Eulemur" block and apply some patch for my ATI HD5470M from ATIFramebuffer.kext by following your instructions in the first post but seems I can't get the correct block/hex dump output as expected... the following are perform under Lion GM 64bit

 

ATIFramebuffer.kext "Eulemur" block output directly from your ati-personality.pl:

$ ./ati-personality.pl -a -x

...

...

Kext ATI5000Controller

...

Personality: Eulemur

ConnectorInfo count in decimal: 3

Disk offset in decimal 167376

0000000 04 00 00 00 14 00 00 00 00 01 00 00 01 02 01 04

0000010 00 08 00 00 00 02 00 00 00 71 00 00 12 04 04 02

0000020 10 00 00 00 10 00 00 00 00 00 00 00 00 10 00 01

...

...

$ cd /System/Library/Extensions/ATIFramebuffer.kext/Contents/MacOS
$ ls -l
total 576
-rwxr-xr-x  1 root  wheel  291708 Jun 24 14:16 ATIFramebuffer
$ dd if=ATIFramebuffer of=~/tmp/Eulemur bs=1 skip=167376 count=48
48+0 records in
48+0 records out
48 bytes transferred in 0.004008 secs (11976 bytes/sec)
$ cd ~/tmp
$ xxd < Eulemur >! hex
xxd: hex: No such file or directory

$ xxd < Eulemur > hex
$ xxd < Eulemur
0000000: 7362 760f 8fd5 0100 0081 fb71 7561 007f  sbv........qua..
0000010: 2c81 fbe3 0000 000f 8429 0600 0081 fbe4  ,........)......
0000020: 0000 000f 8532 0700 008b 5d14 895c 2404  .....2....]..\$.

As you can see the above hex dump are completely different from output of your ati-personality.pl, what am I did wrong in the above? Please note that I have taken out "!" from xxd command line because it reported "No such file or directory".

Link to comment
Share on other sites

what am I did wrong in the above?

You posted the answer:

...
Kext ATI5000Controller
...

On 10.6.8 and Lion fb personalities are on the Controllers, not ATIFramebuffer :)

 

----------//----------

 

bcc9, here is a weird one for you; the 64 bit offset for the first personality (Caretta) is not correct...

32 bit:
Kext ATI1300Controller
Personality: Caretta
ConnectorInfo count in decimal: 1
Disk offset in decimal 377996
0000000	00  02  00  00  14  00  00  00  00  00  00  00  10  01  02  01
0000010

64bit:
Kext ATI1300Controller
Personality: Caretta
ConnectorInfo count in decimal: 1
Disk offset in decimal 110544
0000000	98  03  00  01  10  01  01  01  02  03  00  00  00  00  00  05
0000010

... it should be 110528. This happens only with the first personality, others are fine.

 

Just out of curiosity, do you have any clue of what is this 0x00001000 connector type on Iago and Hypoprion?..

mini dvi / dp are the only ones that cross my mind...

 

Thanks...

Link to comment
Share on other sites

My pleasure, Samsonluk :)

 

----------//----------

 

bcc9, one doubt i forgot; i'm assuming it's not possible to add connector info to a personality, just edit a present one...

Am i assuming correctly?

Link to comment
Share on other sites

My attempt to patch Framebuffer "Eulemur" to work with Dell N4010 HD5470M is almost done - big thanks to bcc9 and mucha to provide all the required utilities and information. However, there are 2 type of personality I cannot determine by myself and need your expert advices, they are the Transmitter and Encoder bytes. Below is the ROM BIOS decode output of my HD5470M:

 

./radeon_bios_decode < N4010HD5470_BIOS_1002_68E0_04561028.rom

ATOM BIOS Rom:

SubsystemVendorID: 0x1028

SubsystemID: 0x0456

IOBaseAddress: 0x2000

Filename: BR037821.001

BIOS Bootup Message:

Dell Green UM8 PARK M2 XT DDR3 64Mx16 1GB

 

PCI ID: 1002:68e0

Connector at index 0

Type [@offset 45058]: LVDS (7)

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

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

 

Connector at index 1

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

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

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

 

Connector at index 2

Type [@offset 45078]: VGA (1)

Encoder [@offset 45082]: INTERNAL_KLDSCP_DAC1 (0x15)

i2cid [@offset 45182]: 0x97, OSX senseid: 0x8

 

 

My partially patched "Eulemur", for the bytes in RED Color are those that I cannot determain:

Personality: Eulemur (Modified for HD5470)

ConnectorInfo count in decimal: 3

Disk offset in decimal 167376

0000000 02 00 00 00 40 00 00 00 09 01 00 00 00 02 00 04

0000010 00 08 00 00 00 02 00 00 00 71 00 00 01 04 01 01

0000020 10 00 00 00 10 00 00 00 00 00 00 00 00 10 02 08

Link to comment
Share on other sites

Please note that I have taken out "!" from xxd command line because it reported "No such file or directory".
I use tcsh as my shell, instead of the default bash. With csh based shells, >! has a different meaning. Didn't mean to use a shell-script specific syntax in the example; fixed.
Link to comment
Share on other sites

 Share

×
×
  • Create New...