Jump to content

Editing custom personalities for ATI Radeon HD[45]xx


bcc9
 Share

775 posts in this topic

Recommended Posts

I've made a new version of radeondump, now called radeon_bios_decode to avoid confusion with dong's tool. Attached to post #1 in a sec...

This version computes the OSX senseid value for you, and also prints out the encoder ID information.

The encoder information is obtained from the ATOM BIOS just like the other values. No need to run a kext or boot linux to obtain these values.

What else do I need to add?

 

Example:

./radeon_bios_decode < rom
ATOM BIOS Rom: 
	SubsystemVendorID: 0x174b SubsystemID: 0xe151
	IOBaseAddress: 0x0000
	Filename: 3E151DAF.HY1
	BIOS Bootup Message: 
REDWOOD XT C02002 GDDR5 64Mx16 1G UCODEv:126							   

Connector at index 0
	Type: DisplayPort (10)
	Encoder: id: 21 name: INTERNAL_UNIPHY2
	i2cid: 0x91, OSX senseid: 0x2
Connector at index 1
	Type: HDMI-A (11)
	Encoder: id: 21 name: INTERNAL_UNIPHY2
	i2cid: 0x94, OSX senseid: 0x5
Connector at index 2
	Type: DVI-I (2)
	Encoder: id: 20 name: INTERNAL_UNIPHY1
	i2cid: 0x92, OSX senseid: 0x3
Connector at index 3
	Type: DVI-I (2)
	Encoder: id: 15 name: INTERNAL_KLDSCP_DAC1
	i2cid: 0x92, OSX senseid: 0x3

 

This is awsome, thank you bcc9 now my next question is, the new ati kexts from mbp 2011 update work just like Lion but they are different. How can we edit RadeonFramebuffer? If I load ATIConfig=RadeonFramebuffer my card gets deteced and loads VGA, however all the other personalities are now fuzzy except for Kinpunji, If i load Kipunji it then changes to RadeonFramebuffer, would be good if you could look at the behaviour to see how the new kexts are working? I will go test out your new dump tool :D

Link to comment
Share on other sites

ATOM BIOS Rom: 
SubsystemVendorID: 0x103c SubsystemID: 0x1448
IOBaseAddress: 0x4000
Filename: BR38421.001 
BIOS Bootup Message: 
MADISON Lenovo-Yx60-Madison Pro DDR3 64Mx16 500E/600M					   

Connector at index 0
Type: LVDS (7)
Encoder: id: 1e name: INTERNAL_UNIPHY
i2cid: 0x96, OSX senseid: 0x7
Connector at index 1
Type: HDMI-A (11)
Encoder: id: 20 name: INTERNAL_UNIPHY1
i2cid: 0x90, OSX senseid: 0x1
Connector at index 2
Type: VGA (1)
Encoder: id: 15 name: INTERNAL_KLDSCP_DAC1
i2cid: 0x97, OSX senseid: 0x8

 

@Bcc9, Encoder ID's 30, 20 and 15. How would this relate to mucha's guide if encoder is 00,01,02,03,04,05 only?

If Encoders are hardcoded then 30 would relate to what in terms of 00 -> 05.

 

/* u can get this from Dmesg as above  for R8XX architecture and above there is 06 Digital Encoder: DIG_1 > DIG_6*/ 
/* Encoder Bits 0-3 (DIG_ID : Digital) */
#define DIG1   0x00 // = DIGA
#define DIG2   0x01 // = DIGB
#define DIG3   0x02 // = DIGC  Only for Radeon HD 5XXX Series  and above
#define DIG4   0x03 // = DIGD  Only for Radeon HD 5XXX Series  and above
#define DIG5   0x04 // = DIGE  Only for Radeon HD 5XXX Series  and above
#define DIG6   0x05 // = DIGF  Only for Radeon HD 5XXX Series  and above

/* Encoder Bits 4-7 (DAC_ID : Analog) */
#define DAC	 0x10

 

Now remains someone to do *dmg package with all the settings for HD4570 :D

 

not that easy, things always change, do some reading and you will achieve more.

Link to comment
Share on other sites

@Bcc9, Encoder ID's 30, 20 and 15. How would this relate to mucha's guide if encoder is 00,01,02,03,04,05 only?

If Encoders are hardcoded then 30 would relate to what in terms of 00 -> 05.

And those 3 IDs 0x1e, 0x20, 0x15, just map to the names INTERNAL_UNIPHY, INTERNAL_UNIPHY1, INTERNAL_KLDSCP_DAC1, respectively. Which is exactly what the other methods print under the "Encoders:" field at boot time.

 

My read of mucha's post is that the OSX encoder field, bits 0-3 are derived from the radeon chipset, per the table you quoted, not from the encoder values printed under "Encoders:", or the value I'm printing. You work backwards from the name to the DIGx setting, to the corresponding number to figure out what to use for bits 0-3 of the encoder field.

Link to comment
Share on other sites

And those 3 IDs 0x1e, 0x20, 0x15, just map to the names INTERNAL_UNIPHY, INTERNAL_UNIPHY1, INTERNAL_KLDSCP_DAC1, respectively. Which is exactly what the other methods print under the "Encoders:" field at boot time.

 

My read of mucha's post is that the OSX encoder field, bits 0-3 are derived from the radeon chipset, per the table you quoted, not from the encoder values printed under "Encoders:", or the value I'm printing. You work backwards from the name to the DIGx setting, to the corresponding number to figure out what to use for bits 0-3 of the encoder field.

 

So UNIPHY could be A or B

same with UNIPHY1

DAC1 could be DACA or B?

 

so i just play around with DIG00 to DIG05 till i get the right combination?

Link to comment
Share on other sites

I've made a new version of ati-personality.pl, version 0.5 in post #1.

 

This new version computes the disk offsets for the connectorinfo, not just the virtual address (ie it does all the otool/lipo commands and math for you).

It also dd's the connectorinfo to a tmp file and prints the results for your viewing pleasure (assuming 16 bytes per entry).

 

Lastly, with the new -a switch, the script will search the ATI*Controller kexts for connectorinfo instead of ATIFramebuffer. This accommodates the newer 10.7 and 10.6.7 2011 macbook pro kexts.

Link to comment
Share on other sites

I've made a new version of ati-personality.pl, version 0.5 in post #1.

 

This new version computes the disk offsets for the connectorinfo, not just the virtual address (ie it does all the otool/lipo commands and math for you).

It also dd's the connectorinfo to a tmp file and prints the results for your viewing pleasure (assuming 16 bytes per entry).

 

Lastly, with the new -a switch, the script will search the ATI*Controller kexts for connectorinfo instead of ATIFramebuffer. This accommodates the newer 10.7 and 10.6.7 2011 macbook pro kexts.

 

bcc9

 

do you have any informations of LVTMA ?

like this

 

DigAllocFree

Mapping DIG2 encoder to KLDSKP_LVTMA

Crtc[0]: found native mode from Monitor[LVDS Panel]:

Modeline "1440x900" 96 1440 1488 1520 1734 900 903 909 926

Connector "PANEL" uses Monitor "LVDS Panel":

RHDValidateScaledToMode

rhdModeValidateCrtc

DxModeValid: CRTC 1

DigModeValid

LVTMATransmitterModeValid

EncoderModeValid

Listing modesetting layout:

CRTC 1: tied to PLL 1 and LUT A:

Outputs: UNIPHY_KLDSKP_LVTMA (PANEL)

CRTC 2: unused

Unused Outputs: DAC A

I have a dell 1535 with ATI 3450M card

Link to comment
Share on other sites

Probably transmitter is wrong. Try get RadeonHD's log in linux.
That's what I suggested 3 days ago :)

I know but uukk didn't do it, so I remind uukk again. :)

my radeondump:

 

Mac-Pro-di-fabry:Desktop fabry$ ./radeondump < 1002_6898.rom
ATOM BIOS Rom: 
SubsystemVendorID: 0x1043 SubsystemID: 0x0346
IOBaseAddress: 0x0000
Filename: SV36460.107 
BIOS Bootup Message: 
6898.12.20.0.5.AS02 U126							  

Connector at index 0 type: DisplayPort (10)
Connector's i2cid: 92
Connector at index 1 type: HDMI-A (11)
Connector's i2cid: 93
Connector at index 2 type: DVI-I (2)
Connector's i2cid: 94
Connector at index 3 type: DVI-I (2)
Connector's i2cid: 94

 

senseid = (i2cid And 0xF) + 1

DP: (92 And 0xF) + 1 = 3

HDMI: (93 And 0xF) + 1 = 4

DVI: (94 And 0xF) + 1 = 5

[   10.139051] [drm] ring test succeeded in 1 usecs
[   10.139122] [drm] radeon: ib pool ready.
[   10.139229] [drm] ib test succeeded in 0 usecs
[   10.139238] failed to evaluate ATIF got AE_BAD_PARAMETER
[   10.139241] radeon 0000:01:00.0: Error during ACPI methods call
[   10.140737] [drm] Radeon Display Connectors
[   10.140738] [drm] Connector 0:
[   10.140740] [drm]   DisplayPort
[   10.140741] [drm]   HPD5
[   10.140743] [drm]   DDC: 0x6450 0x6450 0x6454 0x6454 0x6458 0x6458 0x645c 0x645c
[   10.140745] [drm]   Encoders:
[   10.140746] [drm]	 DFP1: INTERNAL_UNIPHY2
[   10.140748] [drm] Connector 1:
[   10.140749] [drm]   HDMI-A
[   10.140750] [drm]   HPD4
[   10.140752] [drm]   DDC: 0x6460 0x6460 0x6464 0x6464 0x6468 0x6468 0x646c 0x646c
[   10.140753] [drm]   Encoders:
[   10.140754] [drm]	 DFP2: INTERNAL_UNIPHY2
[   10.140755] [drm] Connector 2:
[   10.140756] [drm]   DVI-I
[   10.140757] [drm]   HPD6
[   10.140758] [drm]   DDC: 0x6470 0x6470 0x6474 0x6474 0x6478 0x6478 0x647c 0x647c
[   10.140759] [drm]   Encoders:
[   10.140760] [drm]	 DFP3: INTERNAL_UNIPHY
[   10.140761] [drm]	 CRT1: INTERNAL_KLDSCP_DAC1

(Sorry to everyone. I'm going to analyzed uukk's log & in the process I might repeated somebody else suggestion/recommendation. :P )

Based on the log:-

DP: TransmitterID=UNIPHY2

HDMI: TransmitterID=UNIPHY2

DVI (1st port): TransmitterID=UNIPHY

DVI (2nd port): TransmitterID=UNIPHY

 

Uakari's original connections:-

000000 00 04 00 00 00 04 00 00 00 01 00 00 12 04 04 01
000010 04 00 00 00 14 00 00 00 00 01 00 00 01 12 01 03
000020 00 02 00 00 14 00 00 00 00 01 00 00 00 00 06 05
000030 00 08 00 00 00 02 00 00 00 01 00 00 22 05 05 04

 

You tried this but have problem with DP:-

0000000	00  04  00  00  00  04  00  00  00  01  00  00  12  04  04  03	 DP
0000010	04  00  00  00  14  00  00  00  00  01  00  00  01  12  01  01	 DVI   (1st port)
0000020	04  00  00  00  14  00  00  00  00  01  00  00  00  00  06  05	 DVI   (2nd port)
0000030	00  08  00  00  00  02  00  00  00  01  00  00  22  05  05  04	 HDMI

DP: DIG5 > UNIPHYE (0x12 // = UNIPHY2:LINKA)

DVI (1st port): ? > UNIPHYCD (0x01 // = UNIPHY1:DUALLINK)

DVI (2nd port): DIG1 > UNIPHYAB (0x00 // = UNIPHY:DUALLINK)

HDMI: DIG6 > UNIPHYF (0x22 // = UNIPHY2:LINKB)

 

Looks good, no links conflicted with each other but the first DVI look incorrect. Based on the log, TransmitterID should be UNIPHY, not UNIPHY1. SenseID also wrong on the first DVI port. At the first post, bcc9 did mentioned "Dual link DVI ports still count as a single ConnectorInfo". If I understand this correctly, there should be one connection for DVI in the connection table. So the best Transmitter for DVI is UNIPHYAB (0x00 // = UNIPHY:DUALLINK). Let us fixed it:-

0000000	00  04  00  00  00  04  00  00  00  01  00  00  12  04  04  03	 DP
0000010	04  00  00  00  14  00  00  00  00  01  00  00  00  12  01  05	 DVI
0000020	00  08  00  00  00  02  00  00  00  01  00  00  22  05  05  04	 HDMI

DP: DIG5 > UNIPHYE (0x12 // = UNIPHY2:LINKA)

DVI: ? > UNIPHYAB (0x00 // = UNIPHY:DUALLINK)

HDMI: DIG6 > UNIPHYF (0x22 // = UNIPHY2:LINKB)

 

The last thing we need to worry here is the ports arrangement. On my notebook, I have LVDS, VGA & HDMI. If I put LVDS at the third line, VGA & HDMI won't work. Monitors connected to both ports will not detected at all. However, I don't know what is correct arrangement for DP, DVI & HDMI. Anyway, please test the above connection table with either Baboon or Eulemur or Hoolock or Langur framebuffer.

Link to comment
Share on other sites

So UNIPHY could be A or B

same with UNIPHY1

DAC1 could be DACA or B?

 

so i just play around with DIG00 to DIG05 till i get the right combination?

The recipe that mucha provides in section C has some chipset specific rules, so assuming you're looking at a radeon hd5xxx, and that the table in section C is right, some of the choices are ruled out.

I'm confused about the mapping between connectors and link A/B. If you understand that, then you might not need to experiment at all.

 

do you have any informations of LVTMA ?
Yes, that's one of the encoder names I can print if found in your ATOM BIOS, and it's listed in mucha's section C...

That's about all I know :)

Link to comment
Share on other sites

thanks bcc9

 

the result is same as linux mine is same as atlees the difference is in senseid for HDMI & VGA

 

ATOM BIOS Rom: 
SubsystemVendorID: 0x1043 SubsystemID: 0x1c22
IOBaseAddress: 0xd000
Filename: n61j0421.n61
BIOS Bootup Message: 
Asus N61Ja MadisonXT noSG 650e/800m ASID:A31N61.001$						

Connector at index 0
Type: LVDS (7)
Encoder: id: 1e name: INTERNAL_UNIPHY
i2cid: 0x96, OSX senseid: 0x7
Connector at index 1
Type: HDMI-A (11)
Encoder: id: 20 name: INTERNAL_UNIPHY1
i2cid: 0x91, OSX senseid: 0x2
Connector at index 2
Type: VGA (1)
Encoder: id: 15 name: INTERNAL_KLDSCP_DAC1
i2cid: 0x90, OSX senseid: 0x1

Link to comment
Share on other sites

The recipe that mucha provides in section C has some chipset specific rules, so assuming you're looking at a radeon hd5xxx, and that the table in section C is right, some of the choices are ruled out.

I'm confused about the mapping between connectors and link A/B. If you understand that, then you might not need to experiment at all.

Hi Bcc9,

 

 

Can ATY,ATY,RadeonFramebuffer be edited? if i inject RadeonFramebuffer i can get perfect VGA out on CRT, if this framebuffer can be edited this would be great.

 

I have noticed Framebuffers have disappeared from the latest kexts, example Nomascus i cannot find it, Are they removing the personalities out and replacing with this auto framebuffer?

 

Regarding the Encoders and transmitters i've tried so many combinations it's no longer funny or fun :)

Link to comment
Share on other sites

Hi Bcc9,

 

 

Can ATY,ATY,RadeonFramebuffer be edited? if i inject RadeonFramebuffer i can get perfect VGA out on CRT, if this framebuffer can be edited this would be great.

 

I have noticed Framebuffers have disappeared from the latest kexts, example Nomascus i cannot find it, Are they removing the personalities out and replacing with this auto framebuffer?

 

Regarding the Encoders and transmitters i've tried so many combinations it's no longer funny or fun ;)

I know you ask bcc9 but anyway...

 

Yes they can be edited. bcc9 already mentioned on the latest kexts (2011 MBP & 10.7's kexts) the personality has been moved to controller kext (platform specific kexts). In your case, in ATI5000Controller.kext.

 

If you want to know which framebuffer is currently use by latest kexts, check under ATI5000Controller node in IORegistry.

Link to comment
Share on other sites

I know you ask bcc9 but anyway...

 

Yes they can be edited. bcc9 already mentioned on the latest kexts (2011 MBP & 10.7's kexts) the personality has been moved to controller kext (platform specific kexts). In your case, in ATI5000Controller.kext.

 

If you want to know which framebuffer is currently use by latest kexts, check under ATI5000Controller node in IORegistry.

 

I checked that in lion 5000 :

 

+-o ATI5000Controller@1  <class ATI5000Controller, id 0x100000341, registered, matched, active, busy 0 (1 ms), retain 4>
| |   |   | |   {
| |   |   | |	 "IOClass" = "ATI5000Controller"
| |   |   | |	 "CFBundleIdentifier" = "com.apple.kext.ATI5000Controller"
| |   |   | |	 "IOProviderClass" = "IOPCIDevice"
| |   |   | |	 "ATY,Zonalis" = {"aty_config"={"CFG_NO_PP"=Yes}}
| |   |   | |	 "aty_properties" = {"PP_R600RaisingMediumPercentage"=25,"PP_UserMaxClockForMultiDisplays"=1,"PP_R600ActivityHysteresis"=5,"PP_HighSamplingInterval"=200000,"PP_R600LoweringHighPercentage"=25,"PP_R600LoweringMediumPercentage"=10,"PP_R600RaisingLowPercentage"=10,"PP_ActivitySamplingInterval"=1000}
| |   |   | |	 "IOName" = "ATI5000Controller"
| |   |   | |	 "PPLIB_VERSION" = "2.158"
| |   |   | |	 "IOProbeScore" = 65000
| |   |   | |	 "IOPCIMatch" = "0x68981002 0x68991002 0x68E01002 0x68E11002 0x68D81002 0x68C01002 0x68C11002 0x68D91002 0x68B81002 0x68B01002 0x68B11002 0x68A01002 0x68A11002 "
| |   |   | |	 "ATY,Langur" = {"aty_config"={"CFG_FORCE_ICLK"=Yes}}
| |   |   | |	 "ATY,Orangutan" = {"aty_config"={"CFG_GPIO_HIGH"=131104}}
| |   |   | |	 "IOMatchCategory" = "IOFramebuffer"
| |   |   | |	 "iofb_version" = "1.1.36"
| |   |   | |	 "aty_config" = {"CFG_USE_SRRB"=Yes,"CFG_USE_USCN"=Yes,"CFG_NO_PP"=No}
| |   |   | |	 "ATY,Hoolock" = {"aty_config"={"CFG_FORCE_ICLK"=Yes}}
| |   |   | |   }

 

 

so we have :

 

ATY,Zonalis

ATY,Langur

ATY,Orangutan

ATY,Hoolock

Link to comment
Share on other sites

@Kizwan I know it has moved, I was talking about ATI5000Controller but i was referring to ATY,RadeonFramebuffer can it be edited? I also asked Bcc9 if he has noticed framebuffers not in ATI5000Controller no more, And the question also was if framebuffers are disappearing is Apple's priority to replace the framebuffers with their new auto framebuffer called ReadeonFramebuffer.

 

Try and find Nomascus inside the new ATI5000Controller. They have changed a few features in hex inside a few personalities but others i cannot find.

Link to comment
Share on other sites

@Kizwan I know it has moved, I was talking about ATI5000Controller but i was referring to ATY,RadeonFramebuffer can it be edited? I also asked Bcc9 if he has noticed framebuffers not in ATI5000Controller no more, And the question also was if framebuffers are disappearing is Apple's priority to replace the framebuffers with their new auto framebuffer called ReadeonFramebuffer.

 

Try and find Nomascus inside the new ATI5000Controller. They have changed a few features in hex inside a few personalities but others i cannot find.

Seriously I'm confused. You're talking about framebuffer but not framebuffer? AFAIK, the same framebuffer (e.g. Vervet, Zonalis, Uakari, etc) also used in 2011 MBP Update & Lion's kexts. The only difference is, in latest kext, the framebuffers are now located in their own platform specific kexts (ATI4600, ATI5000, etc). For exmaple, if you're trying to find Peregrine framebuffer inside ATI5000Controller, you won't find it because it is not in there.

Link to comment
Share on other sites

If you want a dump of all the new framebuffer personality choices in 10.7 & 10.6.7 2011 MBP, just run ati-personality.pl -a (on a system where you've installed the new kexts).

No searching or calculating on your part required.

Link to comment
Share on other sites

Seriously I'm confused. You're talking about framebuffer but not framebuffer? AFAIK, the same framebuffer (e.g. Vervet, Zonalis, Uakari, etc) also used in 2011 MBP Update & Lion's kexts. The only difference is, in latest kext, the framebuffers are now located in their own platform specific kexts (ATI4600, ATI5000, etc). For exmaple, if you're trying to find Peregrine framebuffer inside ATI5000Controller, you won't find it because it is not in there.

 

Maybe a misunderstanding...anyway Bcc9's new scripts works great. Kipunji has been removed. But I can see all the required personalities for 5xxx series, i guess i will just keep switching numbers till i get the right combination. I can get LVDS screen to activate but it's all messy like not using the right encoder or something, maybe there are more encoders past 00>05, might look through a few diff style linux distros to see if i can find a certain pattern if any.

 

Thank you Kizwan, Bcc9

Link to comment
Share on other sites

I just got around to trying the 10.6.7 MBP 2011 ATI kexts for myself with my radeon HD 5670.

I found that it does indeed auto-detect the 3 connectors without any injection, with the right connector types & working HDMI audio. However, only 2 of the 3 connectors actually work (the DP port doesn't work).

 

I took the same 2 editing changes that worked for me with 10.6.6 & vanilla 10.6.7 and applied them to the MBP uakari personality. However, only the HDMI change made a difference (the DP port continued to not work).

 

So it seems as if the new OSX auto-detection code can still fail to do the right thing (picks the wrong senseid?) and/or DP is broken in some cases. Or maybe you just can't mix and match the 10.6.7 & MBP kexts without some issues...

Link to comment
Share on other sites

@bcc9 wondering if 5670 and 5650 would be close in encoder/transmitters? also with a personality having a DP port, if i changed it to a LVDS port 02 would this work, or this is the main cause why i cannot get my LVDS working?

 

Do i have to pick a personality that supports LVDS 0x02 by default or can i change DP 0x04 to 0x02?

Link to comment
Share on other sites

Do i have to pick a personality that supports LVDS 0x02 by default or can i change DP 0x04 to 0x02?

Yes, you can change like that. Make sure LVDS is at the first row. Someone has reported if LVDS is put at the last row, other ports will not work. I already tested it myself, using Shrike fb (3 connections). When LVDS at the 3rd row, other ports, HDMI & VGA unable to detect monitor plugged in to it.

Link to comment
Share on other sites

@bcc9 wondering if 5670 and 5650 would be close in encoder/transmitters?

Dunno, I would compare radeon_bios_dump output to get an idea.

I don't really have anything to add to what mucha documented about encoders/transmitters; if you have more questions he's probably the one to ask.

Link to comment
Share on other sites

Yes, you can change like that. Make sure LVDS is at the first row. Someone has reported if LVDS is put at the last row, other ports will not work. I already tested it myself, using Shrike fb (3 connections). When LVDS at the 3rd row, other ports, HDMI & VGA unable to detect monitor plugged in to it.

 

Yeah Eulemur goes like this:

04

0008

10

 

Kizwan when you were trying different transmitters and encoders did your LVDS scramble and go multi-coloured fuzziness that moves really quick?

 

Just wondering why i cannot get any screen working, if 5730 which is Madison chip is enabled natively i cannot see huge differences in architect. if only there was someone with a 5730 and they somehow could dump the T/E values that would be heaps good.

Link to comment
Share on other sites

Yeah Eulemur goes like this:

04

0008

10

 

Kizwan when you were trying different transmitters and encoders did your LVDS scramble and go multi-coloured fuzziness that moves really quick?

 

Just wondering why i cannot get any screen working, if 5730 which is Madison chip is enabled natively i cannot see huge differences in architect. if only there was someone with a 5730 and they somehow could dump the T/E values that would be heaps good.

 

 

mine is 5730 what should i do?

Link to comment
Share on other sites

Kizwan when you were trying different transmitters and encoders did your LVDS scramble and go multi-coloured fuzziness that moves really quick?

 

Just wondering why i cannot get any screen working, if 5730 which is Madison chip is enabled natively i cannot see huge differences in architect. if only there was someone with a 5730 and they somehow could dump the T/E values that would be heaps good.

I first got output with Lion's kexts. With Lion's kexts, I only got output with HDMI & VGA. I only get output on the LVDS when no monitor connected to HDMI. However the color on the LVDS are wrong (I think this is what you're referring to as multi-colored fuzziness):-

post-125711-1301300650_thumb.jpg

 

I did tried bcc9's guide (before using Lion's kext) but I only focused on HDMI, figured LVDS is a PITA at that time. I managed to get internal (LVDS) & external monitor registered in IORegistry but no output.

 

I only tried LVDS when I found ATY,ControlFlags & how to set it. The result is I got the same output when I'm using Lion's kext. As usual when testing, I always unplug & replug the HDMI port. This is when I found out the LVDS is working when HDMI port is not in use. Later mucha told me they are using the same link which cause the interference:-

LVDS: 02 00 00 00 40 00 00 00 09 01 00 00 02 01 00 01 > DIG2>UNIPHY2>DUAL_LINK (A+B )>LVDS

HDMI: 00 08 00 00 04 02 00 00 00 01 00 00 22 05 05 02 > DIG6>UNIPHY2>LINK_B>HDMI

 

In HEX, I didn't noticed both are using the same link. mucha's guide not available yet at that time. BTW, VGA very easy. Thanks to the IORegistry dump when using Lion's kext. Figured out the connector-type is 0x10 & ControlFlags is 0x10. Then copied the existing one in the ATIFramebuffer. It's just working.

 

So, basically I got LVDS & VGA working (dual-monitor) with incorrect transmitter & encoder.

 

This is connection table which all ports are working. With wrong transmitter & encoder too. Dual-monitor configuration supported LVDS+VGA & LVDS+HDMI.

02 00 00 00 40 00 00 00 09 01 00 00 12 00 00 01 (LVDS)

10 00 00 00 10 00 00 00 00 01 00 00 00 10 01 06 (VGA)

00 08 00 00 00 02 00 00 00 01 00 00 20 01 02 02 (HDMI)

DIG1 > UNIPHYE > LVDS: Encoder=0x00 Transmitter=0x12

DAC > DACA > VGA: Encoder=0x10 Transmitter=0x00

DIG2 > UNIPHYB > HDMI: Encoder=0x01 Transmitter=0x20

 

This is with correct transmitter & encoder. All ports still works.

02 00 00 00 40 00 00 00 09 01 00 00 12 01 00 01 (LVDS)

10 00 00 00 10 00 00 00 00 01 00 00 10 10 01 06 (VGA)

00 08 00 00 00 02 00 00 00 01 00 00 20 00 02 02 (HDMI)

CRTC1 > DIG2 > UNIPHYE > LVDS: Encoder=0x01 Transmitter=0x12

CRTC1 > DAC > DACB > VGA: Encoder=0x10 Transmitter=0x10

CRTC0 > DIG1 > UNIPHYB > HDMI: Encoder=0x00 Transmitter=0x20

 

One thing I noticed when interference/conflict happen, LVDS flickered white and then turned black.

 

BTW, what is your internal monitor native (highest) resolution? EDIT: I saw in your signature, 1366 x 768. So, should be easy. :dance_24:

Link to comment
Share on other sites

 Share

×
×
  • Create New...