Jump to content

Editing custom personalities for ATI Radeon HD[45]xx


bcc9
 Share

775 posts in this topic

Recommended Posts

Many mobility 5650 are working with Nomascus since they have 05 as senseid, exactly like the one found in Nomascus for the LVDS.

 

This is my 5650m, I've got 07 for senseid and Nomascus isn't working.

 

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)
Connector's i2cid: 96
Connector at index 1 type: HDMI-A (11)
Connector's i2cid: 90
Connector at index 2 type: VGA (1)
Connector's i2cid: 97

 

I'm really not good at hexediting, so would someone please share a ATIFramebuffer.kext with 07 for the LVDS in Nomascus?

 

Thank you very much.

Link to comment
Share on other sites

Many mobility 5650 are working with Nomascus since they have 05 as senseid, exactly like the one found in Nomascus for the LVDS.

 

This is my 5650m, I've got 07 for senseid and Nomascus isn't working.

 

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)
Connector's i2cid: 96
Connector at index 1 type: HDMI-A (11)
Connector's i2cid: 90
Connector at index 2 type: VGA (1)
Connector's i2cid: 97

 

I'm really not good at hexediting, so would someone please share a ATIFramebuffer.kext with 07 for the LVDS in Nomascus?

 

Thank you very much.

Here you go

Atiframebuffer.kext from 10.6.6 with Nomascus personality table hexedited to match 07 instead of 05 senseid for lvds connection

 

0000000 02 00 00 00 40 00 00 00 09 01 00 00 00 00 00 05 07

 

I hope it works (don't forget to boot with 'AtiConfig=Nomascus arch=i386' since only i386 code is patched)

 

Personality: Nomascus

ConnectorInfo count in decimal: 5

Effective address for ConnectorInfo table in hex: 11500 (70912)

offset_for_segment = 70904

start_address_for_segment = 0x000111c0 (70080)

= 227384

 

ATIFramebuffer.kext.zip

Link to comment
Share on other sites

I've done an interesting experiment. I've used Lion's FB with ATIRadeonX2000.kext and its plugins and now I've QE/CI and Lion's FB working.

 

It detects my LVDS and my HDMI port (without audio, maybe because my integrated sound card it isn't working yet, i'm using a usb dongle) and the VGA port. It detects well my displays, resolutions, etc. But the colours in the LVDS aren't correct (hdmi and vga colours works fine).

 

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

 

That is what I see.

mbpx8n.jpg

 

Anybody knows why can it be happening?

Link to comment
Share on other sites

Thanks Boombeng for the file :gun: You've been very kind!

 

My problem is I can't use kabyl boot since it stops on gray screen when setting GraphicsEnabler=Yes

 

So to set Nomascus as fb I tried to use the boot file provided in this thread http://www.insanelymac.com/forum/index.php...249669&st=0 which automatically set Nomascus.

 

I got black screen on display and no other port working. I VNCed in my laptop and discovered that system profiler reported 5870 instead of my 5650. So maybe that was the problem in the boot file itself.

 

Maybe I'm missing something, but I need a little help here. How can I set Nomascus Fb if I can't use kabyl's boot?

 

Finally I tried again what hsj89 suggested with Lion Kexts. I used ATIFB, ATISupport and ATI5000 from Lion.

 

I used chameleon trunk boot with GraphicsEnabler=Yes and for the first time I got QE/CI working(front row, effects, etc), but only on my VGA port. Laptop display black.

 

So I'm closer but a little help about what boot file to use would be very appreciated!

 

Thanks!!

Link to comment
Share on other sites

Thanks Boombeng for the file :gun: You've been very kind!

 

My problem is I can't use kabyl boot since it stops on gray screen when setting GraphicsEnabler=Yes

 

So to set Nomascus as fb I tried to use the boot file provided in this thread http://www.insanelymac.com/forum/index.php...249669&st=0 which automatically set Nomascus.

 

I got black screen on display and no other port working. I VNCed in my laptop and discovered that system profiler reported 5870 instead of my 5650. So maybe that was the problem in the boot file itself.

 

Maybe I'm missing something, but I need a little help here. How can I set Nomascus Fb if I can't use kabyl's boot?

 

Finally I tried again what hsj89 suggested with Lion Kexts. I used ATIFB, ATISupport and ATI5000 from Lion.

 

I used chameleon trunk boot with GraphicsEnabler=Yes and for the first time I got QE/CI working(front row, effects, etc), but only on my VGA port. Laptop display black.

 

So I'm closer but a little help about what boot file to use would be very appreciated!

 

Thanks!!

 

What device ID ?

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

My previous reverse engineering of connectorInfo:

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.

 

Hope it helps.

Link to comment
Share on other sites

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..

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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)

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.insanelymac.com/forum/index.php...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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

//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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.insanelymac.com/forum/index.php...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.

Link to comment
Share on other sites

 Share

×
×
  • Create New...