Jump to content

Editing custom personalities for ATI Radeon HD[45]xxx


  • Please log in to reply
735 replies to this topic

#81
hjs89

hjs89

    InsanelyMac Geek

  • Members
  • PipPipPip
  • 150 posts
  • Gender:Male

What device ID ?


Graphics Card's device ID, for example mine is 0x95531002. The people has started to report feedback using Lion's kext and seems that detect well the hdmi/dvi/vga ports, at least in mobility series. The only problem at the moment still being LVDS.

It'll be interesting if desktop users try the Lion's Framebuffer to check if the same happens and start to work with it.

#82
Boombeng

Boombeng

    InsanelyMac Legend

  • Members
  • PipPipPipPipPipPipPip
  • 598 posts
  • Gender:Male
  • Location:France

Graphics Card's device ID, for example mine is 0x95531002. The people has started to report feedback using Lion's kext and seems that detect well the hdmi/dvi/vga ports, at least in mobility series. The only problem at the moment still being LVDS.

It'll be interesting if desktop users try the Lion's Framebuffer to check if the same happens and start to work with it.


I know what is a a Card's device ID, I was asking what is his card's one to look if it is not missing in Ati.C from Kabyk's Chamelon branches
About your color problem on lvds screen using Lion's kext, i had the same issue once, during my tests to enable hdmi audio patching table connector in atiframebufer.kext from 10.6.6, all was working fine when 2 monitors were plugged and color issue happened when one was unplugged.

#83
checcco

checcco

    InsanelyMac Protégé

  • Members
  • PipPip
  • 96 posts

What device ID ?


68c1 and yes, it's missing in kabyl's ati.c

I've asked in some thread to add it but no one did...

#84
hjs89

hjs89

    InsanelyMac Geek

  • Members
  • PipPipPip
  • 150 posts
  • Gender:Male

68c1 and yes, it's missing in kabyl's ati.c

I've asked in some thread to add it but no one did...


It's so easy to do. Download Kabyl's branche, open the ati.c file and add your device ID. To compile it just type in the terminal "make clean" and "make embedtheme", check that you are in kabyl's folder.

#85
checcco

checcco

    InsanelyMac Protégé

  • Members
  • PipPip
  • 96 posts

It's so easy to do. Download Kabyl's branche, open the ati.c file and add your device ID. To compile it just type in the terminal "make clean" and "make embedtheme", check that you are in kabyl's folder.


Should I have Developers Tools installed? How can I download a branch? I'd be happy to learn...

EDIT: I compiled it! Read below

#86
dong

dong

    InsanelyMac Sage

  • Retired Developers
  • 366 posts
  • Gender:Male
My previous reverse engineering of connectorInfo:
[codebox]typedef struct {
UInt32 connectorType; //0
UInt32 supportedConnections; //4
UInt32 features; //8
UInt16 transmitterData; //C
UInt8 hotPlugId; //E
UInt8 ddcInfo; //F
} ConnectorInfo;

//connectorType
const char *CONNECTOR_TYPE_STRINGS[19] = {
"UNKNOWN",
"BUILT IN",
"DVI",
"ADC",
"VGA",
"MINI VGA",
"COMPOSITE",
"S VIDEO",
"AV TV JACK",
"DVI LOWER",
"DISPLAY PORT",
"HDMI",
"MINI DVI",
"DISPLAY PORT LOWER",
"MINI DISPLAY PORT",
};

//supportedConnections
const char *CONNECTION_STRINGS[11] = {
"NONE", "TV", "TMDS A", "LVTM A", "DAC A", "DAC B", "LVDS", "HDTV", "DP1", "DP2"
};

//features
enum {
kConnectorInternal = 1 << 0,
kConnectorRGBOnYUV = 1 << 2,
kConnectorBackLight = 1 << 3,
kConnectorInverted = 1 << 4,
kConnectorClamshell = 1 << 5,
kConnectorRGBOnMUX = 1 << 6,
kConnectorDACAutoCalibration = 1 << 7,
kConnectorUseHdcp = 1 << 8,
};

//transmitterData, hotPlugId and ddcInfo are the same as OP described in Post 1.[/codebox]

Hope it helps.

#87
yeehaa

yeehaa

    InsanelyMac Protégé

  • Members
  • PipPip
  • 81 posts
  • Gender:Male
  • Location:FL, USA

Before the ATIFramebuffer patch, all 4 kexts loaded (including ATI4600Controller) & no monitor is detected. Checked via VNC no QE/CI.

After the ATIFramebuffer patch, all 4 kexts loaded & monitors are detected but no output on the monitors. Checked via VNC, QE/CI working.

BTW, are you able to get your Radeon HD 4550 working? I believe on desktop it is much easier to get monitor to work with ATIFramebuffer patch.


yes. thats what i thought. but this card seems to be a PITA. coz its already half supported by some "wrong" kexts. after so many trial and errors, i have 4500controller removed and 4600controller with framebuffer loaded. so all 4 kexts loaded n no QE/CI. now from your results, i should get QE/CI with framebuffer patch.

btw, i found out the hard way that kabyl's loader with optional AtiConfig switch behaves differently when the switch is on. (i tried AtiConfig=Peregrine and got a very different result from what usually happens without the switch - the default for my card is Peregrine)

will report back after the framebuffer patch..

#88
checcco

checcco

    InsanelyMac Protégé

  • Members
  • PipPip
  • 96 posts
With the help of Boombeng and hjs89 I managed to have a patched Nomascus personality in ATIFramebuffer to match the senseid of my 5650m on LVDS and a recompiled version of Kabyl's boot (with 5650 included in ati.c).

For someone this was enough to have QE/CI on laptop display. It didn't work for mine. ;) Not even on external monitor (but didn't expect it for Nomascus).

Now I really don't know what else I could try... Many 5650m works with stock Nomascus, mine doesnt even with a patched one...

The best I got is QE/CI only on external monitor, but using Lion kexts...

The last thing that comes to my mind is that the vga rom I'm using is corrupted somehow. Any suggestion?

#89
kizwan

kizwan

    InsanelyMac Legend

  • Members
  • PipPipPipPipPipPipPipPipPip
  • 1,422 posts

btw, i found out the hard way that kabyl's loader with optional AtiConfig switch behaves differently when the switch is on. (i tried AtiConfig=Peregrine and got a very different result from what usually happens without the switch - the default for my card is Peregrine)

If you have problem with Kabyl's boot file, use the official Chameleon 2 RC5 boot file. I use combination of GraphicsEnabler=Yes & ATI injection in DSDT:-
Method (_DSM, 4, NotSerialized)                    {                        Store (Package (0x1E)                            {                                "@0,compatible",                                 Buffer (0x0E)                                {                                    "ATY,Vervet"                                },                                 "@0,device_type",                                 Buffer (0x08)                                {                                    "display"                                },                                 "@0,display-connect-flags",                                 Buffer (0x04)                                {                                    0x04, 0x00, 0x00, 0x00                                },                                 "@0,display-dual-link",                                 Buffer (0x04)                                {                                    0x02, 0x00, 0x00, 0x00                                },                                 "@0,VRAM,memsize",                                 Buffer (0x04)                                {                                    0x00, 0x00, 0x00, 0x20                                },                                 "@0,display-type",                                 Buffer (0x04)                                {                                    "LCD"                                },                                 "@0,name",                                 Buffer (0x0E)                                {                                    "ATY,Vervet"                                },                                 "@1,compatible",                                 Buffer (0x0E)                                {                                    "ATY,Vervet"                                },                                 "@1,device_type",                                 Buffer (0x08)                                {                                    "display"                                },                                 "@1,VRAM,memsize",                                 Buffer (0x08)                                {                                    0x00, 0x00, 0x00, 0x20                                },                                 "@1,name",                                 Buffer (0x0E)                                {                                    "ATY,Vervet"                                },                                 "device_type",                                 Buffer (0x14)                                {                                    "ATY,VervetParent"                                },                                 "hda-gfx",                                 Buffer (0x0A)                                {                                    "onboard-1"                                },                                 "VRAM,totalsize",                                 Buffer (0x04)                                {                                    0x00, 0x00, 0x00, 0x20                                },                                 "model",                                 Buffer (0x23)                                {                                    "ATI Mobility Radeon HD 4500 Series"                                }                            }, Local0)                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))                        Return (Local0)                    }
It's involved a bit of work because whenever you want to try another framebuffer, you'll need to edit your DSDT, change the framebuffer & compiled. However, this at least get the job done.

I didn't edit & compile the Kabyl's boot file myself because I don't know what's wrong. It just stuck at "ATI POSTed...".

BTW, I got my external monitor working with QE/CI enabled with Lion's ATI4600Controller.kext, ATIFramebuffer.kext & ATISupport.kext.

#90
wmarsh

wmarsh

    InsanelyMac Legend

  • Members
  • PipPipPipPipPipPipPip
  • 900 posts

Hope it helps.

Yes, tremendously.

For LVDS we need to figure out:
int for supported connections, bcc9 calls it "flags"

I think this needs to be 40 00 00 00 as thats what we see in Iago, Hypoprion, Nomascus, and Orangutan

int for for features, dong's info should be very helpful:

//features
enum {
kConnectorInternal = 1 << 0,
kConnectorRGBOnYUV = 1 << 2,
kConnectorBackLight = 1 << 3,
kConnectorInverted = 1 << 4,
kConnectorClamshell = 1 << 5,
kConnectorRGBOnMUX = 1 << 6,
kConnectorDACAutoCalibration = 1 << 7,
kConnectorUseHdcp = 1 << 8,

These we can probably tweek once we have output

last int consists of bytes for:

byte link_i2cid; /* Bits 0-3: i2cid
Bits 4-7: link transmitter link */
byte dac_digidx; /* Bits 0-3: link encoder number
Bits 4-7: link dac number */
byte hotplugid;
byte senseid; /* Sense line is bits 0-3
Use hw i2c flag is bit 4 */
/* i2cid = (senseid & 0xf-1)+0x90 */
/* senseid = (i2cid & 0xf) +1*/


We have really only figured out the last digit here.

My guess based on the output from dong's tool posted earlier is I need to use here: 09 00 00 01
(Both HW_Line and GPIO_ID are 9 in that tool; ddc_line is 0; all LVDS FB have middle 2 digits the same)
(Which I have not tried, I have only tried 00 01 01 01)

#91
yeehaa

yeehaa

    InsanelyMac Protégé

  • Members
  • PipPip
  • 81 posts
  • Gender:Male
  • Location:FL, USA

BTW, I got my external monitor working with QE/CI enabled with Lion's ATI4600Controller.kext, ATIFramebuffer.kext & ATISupport.kext.


would you please share the lion kexts by PM? 4500, 4600, framebuffer, support and x2000 kexts, if you have them. thanks in advance!

@everybody else: sorry for the spam! couldnt send PM to above user.

#92
kizwan

kizwan

    InsanelyMac Legend

  • Members
  • PipPipPipPipPipPipPipPipPip
  • 1,422 posts

would you please share the lion kexts by PM? 4500, 4600, framebuffer, support and x2000 kexts, if you have them. thanks in advance!

@everybody else: sorry for the spam! couldnt send PM to above user.

You can get the Lion kexts from over here.

PM is disabled because I'm supposed to be retired from all of this. I come back here when I heard apple is releasing new macbook pro with ati graphic card.

#93
bcc9

bcc9

    InsanelyMac Legend

  • Coders
  • 1,277 posts
  • Gender:Male

One issue is there is tremendous variation in how mobility cards are connected to displays.
I am wondering if we could get more info by examining the atom bios, as we are really guessing how to set bits 2-14 right now.

First I'd like to point out that, no, I'm generally *not* guessing here. Most of the information in post #1 is grounded in actual observed use of the data in the tables by the code.

Yes, when I did first find that modifying the senseid was necessary&sufficient to turn a non-working ConnectorInfo entry into a working one for my situation, it was thru some directed trial and error.
But I did follow up with a program and method to actually compute the value directly from one's own ATOM BIOS.

I believe I have about 60% of those 16 bytes mapped out actually, it's just that I've only effectively tested modifying the ConnectorType & senseid fields.

I don't have any ATI mobility hardware to test with so obviously someone else needs to drive any interests in that area.

Seems that Lion's FB works different and auto detects the ports

I'll be pissed if all of this is obsolete in 10.7 :P Actually I'll be fine if the driver is smarter&simpler about handling hardware automatically.

There is code in ATISupport that explicitly checks the connector type against 0x800 before considering that the display is HDMI. (Failing that it also checks for an hdmi dongle to decide whether the port is usable as hdmi.

In practice I had working video with my hdmi display with the wrong connector type, but I couldn't get HDMI audio to hotplug without revising the ConnectorInfo entry to actually be for an HDMI port.
I haven't actually tried all combinations however.
Also I see no such test for displayport, so I suspect audio could work over displayport without the connector type mapping properly.

Figured out some more information on this... On the audio side (AppleHDA) there is code that checks against the connector-types and only allows HDMI & DP connector-types to connect between the audio&video drivers for HDMI/DP audio. (And thus the connector-type requirement is the same for Nvidia cards). Looks like the audio code also requires magic av-signal-type values, where 8=HDMI.

I was able to finally get my nvidia 9400m to show HDMI audio by forcing av-signal-type=8. (Audio somehow still doesn't work but that's off topic).

I didn't get the error ever. Sometimes stoped at first line. Are you booting on Verbose?

ATI card POSTed, reading VBIOS from legacy space
	Memory allocation error! Addr=0xdeadbeef, Size 0x0 File=ati.c, Line=668
	This is anon recoverable error! System HALTED!
The line changes in some boot's versions, but always are part of the same script.

I see you located the problem function over in kabyl's thread:
http://www.insanelym...p...t&p=1649581

If get_romrevision_val() was instead changed to protect against bad return values from that strlen() call, (and returning false when the strlen() result is bad), then this would avoid the crash without making that routine a no-op.

#94
yeehaa

yeehaa

    InsanelyMac Protégé

  • Members
  • PipPip
  • 81 posts
  • Gender:Male
  • Location:FL, USA

You can get the Lion kexts from over here.

PM is disabled because I'm supposed to be retired from all of this. I come back here when I heard apple is releasing new macbook pro with ati graphic card.


got it. thanks!
but before that i got my Gigabyte Radeon HD 4550 (1002:9540) working with full QE/CI for the first time. thanks to bcc9 and every1 else! that was awesome! just a small glitch. i have a "green apple" in the menu!! removed 4500 kext and added id to 4600.. all looks good!

now lemme try those lion kexts. :P

#95
bcc9

bcc9

    InsanelyMac Legend

  • Coders
  • 1,277 posts
  • Gender:Male

//connectorType
const char *CONNECTOR_TYPE_STRINGS[19] = {
"UNKNOWN",
"BUILT IN",
"DVI",
"ADC",
"VGA",
"MINI VGA",
"COMPOSITE",
"S VIDEO",
"AV TV JACK",
"DVI LOWER",
"DISPLAY PORT",
"HDMI",
"MINI DVI",
"DISPLAY PORT LOWER",
"MINI DISPLAY PORT",
};

Connectortype does not index into the above array, even when first mapped from a type to a bit number. Note also that ATIFramebuffer::updateConnectorInfo() defines a funny mapping for connector types.

//features
enum {
kConnectorInternal = 1 << 0,
kConnectorRGBOnYUV = 1 << 2,
kConnectorBackLight = 1 << 3,
kConnectorInverted = 1 << 4,
kConnectorClamshell = 1 << 5,
kConnectorRGBOnMUX = 1 << 6,
kConnectorDACAutoCalibration = 1 << 7,
kConnectorUseHdcp = 1 << 8,
};

This field isn't an enumerated type it's a bitfield (multiple bits can and are set), but yes, that basically matches what I had:
/* Features byte 0 */
#define FEATURE_USE_INTERNAL 0x1
#define FEATURE_USE_RGB_ON_YUV 0x4
#define FEATURE_USE_BACKLIGHT 0x8
#define FEATURE_BACKLIGHT_INVERTED 0x10
#define FEATURE_USE_CLAMSHELL 0x20
/* Features byte 1 */
#define FEATURE_USE_HDCP 0x1
Thanks for sharing.

#96
wmarsh

wmarsh

    InsanelyMac Legend

  • Members
  • PipPipPipPipPipPipPip
  • 900 posts

Connectortype does not index into the above array, even when first mapped from a type to a bit number. Note also that ATIFramebuffer::updateConnectorInfo() defines a funny mapping for connector types.

This field isn't an enumerated type it's a bitfield (multiple bits can and are set), but yes, that basically matches what I had:

/* Features byte 0 */
#define FEATURE_USE_INTERNAL 0x1
#define FEATURE_USE_RGB_ON_YUV 0x4
#define FEATURE_USE_BACKLIGHT 0x8
#define FEATURE_BACKLIGHT_INVERTED 0x10
#define FEATURE_USE_CLAMSHELL 0x20
/* Features byte 1 */
#define FEATURE_USE_HDCP 0x1
Thanks for sharing.

So in byte stream for use internal only this should be 01 00 00 00?
Wormy is 29 00 00 00
Iago, Hypoprion, is 09 00 00 00
Nomascus is 09 01 00 00

#97
maleorderbride

maleorderbride

    InsanelyMac Sage

  • Members
  • PipPipPipPipPip
  • 275 posts
  • Gender:Male
I don't suppose someone could type up a slightly more in-depth guide for this?

Thanks!

#98
bcc9

bcc9

    InsanelyMac Legend

  • Coders
  • 1,277 posts
  • Gender:Male

So in binary for use internal only this should be 01 00 00 00?

Right, as represented as a byte stream.

Wormy is 29 00 00 00
Iago, Hypoprion, is 09 00 00 00
Nomascus is 09 01 00 00

Those all look like the LVDS entries. So yes nomascus has use_internal, use_backlight, use_hdcp set. Notice all these LVDS connectors have use_internal set. I haven't tested these (I don't have an actual LVDS connection on any ATI cards so I probably can't really test use_internal at all :D

#99
wmarsh

wmarsh

    InsanelyMac Legend

  • Members
  • PipPipPipPipPipPipPip
  • 900 posts

Right, as represented as a byte stream.
Those all look like the LVDS entries. So yes nomascus has use_internal, use_backlight, use_hdcp set. Notice all these LVDS connectors have use_internal set. I haven't tested these (I don't have an actual LVDS connection on any ATI cards so I probably can't really test use_internal at all :D

Thanks that helps

Can you add any clarity on the last section?

byte link_i2cid;	/* Bits 0-3: i2cid
					   Bits 4-7: link transmitter link */
			byte dac_digidx;	/* Bits 0-3: link encoder number
					   Bits 4-7: link dac number */
			byte hotplugid;
			byte senseid;	/* Sense line is bits 0-3
					  Use hw i2c flag is bit 4 */
			/* i2cid = (senseid & 0xf-1)+0x90 */
			/* senseid = (i2cid & 0xf) +1*/
For instance, in earlier post you told me to use senseid 01
But if I want to set hw i2c flag, should I not use in byte stream
xx xx xx 11 ?

And can you add any more info in the 1st 3 bytes?

Given what I can extract from BIOS:
bash-3.2# kextload ./RadeonPCI.kext/
bash-3.2# ./RadeonDump -i
Found a device of class RadeonPCI: IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/AGP@1/IOPCI2PCIBridge/VID@0/RadeonPCI
it matched on name "display"
Detected unknown Card (device id: 0x9552)
It's not in known card list, treat as card with device id: 0x9511
Detect EDID may fail for this card.
Start I2C dump
ATOM BIOS detected
ATOM BIOS Rom:
	SubsystemVendorID: 0x1028 SubsystemID: 0x02aa
	IOBaseAddress: 0xde00
	Filename: BR31245C.001
	BIOS Bootup Message:
Dell_Roberts_M92S_GDDR3 M92 GDDR3 64bit 450e/600m						  

object id 0005 01
src object id 2115 21
record type 1
rhdAtomParseI2CRecord:  I2C Record: HW_Line 9 EngineID: 0 I2CAddr: 0
ddc_line from ATOMBIOS: 0x0
record type 4
object id 000e 01
src object id 2121 33
record type 1
rhdAtomParseI2CRecord:  I2C Record: GPIO_ID 9 EngineID: 0 I2CAddr: 0
ddc_line from ATOMBIOS: 0x0
record type 4
I am guessing:

byte link_i2cid;	/* Bits 0-3: i2cid  [?use I2CAddr = 0]
					   Bits 4-7: link transmitter link */ [?use HW_Line = 9]
			byte dac_digidx;	/* Bits 0-3: link encoder number [?use 0]
					   Bits 4-7: link dac number */ [?use ddc_line = 0]
			byte hotplugid; [any clues here?]
In byte stream:
90 00 00 11
[EDIT -- did not connect either in Peregrine or Nomascus; I think I do not fully have this figured out]

I don't have any ATI mobility hardware to test with so obviously someone else needs to drive any interests in that area.

We have a reasonable size group in the Mobility HD 4330 Thread, some are testing, others are now following with interest and have PM they will test. Some are posting results in that thread, some here. And there are a number of other mobility threads I don't follow.

#100
jsl

jsl

    InsanelyMac Geek

  • Members
  • PipPipPipPip
  • 241 posts

First I'd like to point out that, no, I'm generally *not* guessing here. Most of the information in post #1 is grounded in actual observed use of the data in the tables by the code.

Yes, when I did first find that modifying the senseid was necessary&sufficient to turn a non-working ConnectorInfo entry into a working one for my situation, it was thru some directed trial and error.
But I did follow up with a program and method to actually compute the value directly from one's own ATOM BIOS.

I believe I have about 60% of those 16 bytes mapped out actually, it's just that I've only effectively tested modifying the ConnectorType & senseid fields.

I don't have any ATI mobility hardware to test with so obviously someone else needs to drive any interests in that area.

I'll be pissed if all of this is obsolete in 10.7 :D Actually I'll be fine if the driver is smarter&simpler about handling hardware automatically.

Figured out some more information on this... On the audio side (AppleHDA) there is code that checks against the connector-types and only allows HDMI & DP connector-types to connect between the audio&video drivers for HDMI/DP audio. (And thus the connector-type requirement is the same for Nvidia cards). Looks like the audio code also requires magic av-signal-type values, where 8=HDMI.

I was able to finally get my nvidia 9400m to show HDMI audio by forcing av-signal-type=8. (Audio somehow still doesn't work but that's off topic).


I see you located the problem function over in kabyl's thread:
http://www.insanelym...p...t&p=1649581

If get_romrevision_val() was instead changed to protect against bad return values from that strlen() call, (and returning false when the strlen() result is bad), then this would avoid the crash without making that routine a no-op.

Hi, bcc9
I can confirm that your method can be applied successfully to:
(1) Asus EAH 5770 (in Asus M3A, arch=i386)
(2) MSI Hawk 5770 (in Asus P6T SE & Asus P6T WS Professional, arch=x86_64)
(3) Asus EAH 5850 (in Asus P5Q PRO, arch=x86_64)
at least working at 3 different FB: Uakari, Vervet, and Eulemur
to activate 2 display outputs at HDMI (or DP->HDMI) and DVI
and HDMI audio is also working too !
These are working in both 10.6.5 and 10.6.6 because they use the same version of AppleHDA.kext & ATIFramebuffer.kext.
The key issues are :
(1) get the correct address at the respective arch=i386 or arch=x86_64 (Follow the post #1 and use bcc9's tools)
(2) Hexedit proper values to the correct SenseID ( the last word for different FBs),
esp. prefer connector-type 0x4 for DVI and 0x800 for HDMI (or DP) !

Thanks again for bcc9 !
You have saved my time and money !
Can you provide more guide for Nvidia GT-260M card which is internal display for Asus G51J/60J laptop.
Updated to 10.6.2 ~ 10.6.6 its HDMI port became unable to connect, only VGA is available for external monitor.
I think your info for 9400M can be applied to it.





0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

© 2014 InsanelyMac  |   News  |   Forum  |   Downloads  |   OSx86 Wiki  |   Mac Netbook  |   PHP hosting by CatN  |   Designed by Ed Gain  |   Logo by irfan  |   Privacy Policy