Jump to content

Sharing my Experience on ATI Radeon HD 6470M (Asus A42JZ Notebook)


k540kkk
 Share

87 posts in this topic

Recommended Posts

I would like to share my experience about ATI Radeon HD 6470M on Asus A42JZ Notebook.

 

Part 1 : Current Status & Information about my best configuration

What I uses :

- Kabyl’s boot with 6470M id added

- ATI Kext from MBP2011 10.6.7 with patched Ipomoea personality (using bcc9 and mucha method

 

Current Status :

LVDS : Not working, blank/black screen with backlight turn on (can turn off/on using keyboard “Fn”). The screen can be used in VESA mode (1024x768x32) using GraphicsEnabler=No.

HDMI : Working, Correct FullHD 1080p resolution with QE/CI, HDMI-audio not working.

VGA : Working, Correct resolution 1440x900 using SwtichResX.

 

Remarks :

- QE/CI will work only when HDMI is pluged in before OS X boot. If plug HDMI after OS X booted, screen still working but no QE/CI.

- QE/CI tested feature : transparent topbar, ripple effect in dashboard, Adobe flash worked.

 

post-633174-1301412181_thumb.jpg

My Radeon ROM dump :

ATOM BIOS Rom: 
SubsystemVendorID: 0x1043 SubsystemID: 0x1cb2
IOBaseAddress: 0xd000
Filename: BR39572.001 
BIOS Bootup Message: 
Asus K42Jy/Jk SEYMOUR XT DDR3 64Mx16 512MB/1GB							  
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: 0x97, OSX senseid: 0x8

 

 

Ipomoea Framebuffer

I choose Ipomoea Framebuffer because it closely matches my card personality: 3 ports in correct order.

 

Ipomoea – Original :

Personality: Ipomoea
ConnectorInfo count in decimal: 3
Disk offset in decimal 501244 (0x7a5fc)
0000000	00  04  00  00  04  03  00  00  00  01  00  00  12  04  01  05  (DVI)
0000010	00  08  00  00  04  02  00  00  00  01  00  00  11  02  04  03  (HDMI)
0000020	10  00  00  00  10  00  00  00  00  01  00  00  00  00  00  02  (VGA)

 

Ipomoea – my best discovered configuration :

Personality: Ipomoea
ConnectorInfo count in decimal: 3
Disk offset in decimal 501244 (0x7a5fc)
0000000	02  00  00  00  40  00  00  00  09  01  00  00  20  01  00  07  (LVDS – not detected/not working)
0000010	00  08  00  00  04  02  00  00  00  01  00  00  21  03  04  02  (HDMI – working)
0000020	10  00  00  00  10  00  00  00  00  01  00  00  00  00  01  08  (VGA – working)

 

IOReg Dump:

	| |   |   | +-o ATY,Ipomoea@0  <class AtiFbStub, id 0x1000002d7, registered, matched, active, busy 0 (32 ms), retain 7>
| |   |   | | | {
| |   |   | | |   "port-number" = 0
| |   |   | | |   "display-type" = "NONE"
| |   |   | | |   "connector-type" = 2
| |   |   | | |   "ATY,ActiveFlags" = 1
| |   |   | | |   "IOFBDependentIndex" = 0
| |   |   | | |   "IOFBDependentID" = 83116416
| |   |   | | |   "ATY,ControlFlags" = 64
| |   |   | | |   "AAPL,gray-page" = <01000000>
| |   |   | | |   "device_type" = "display"
| |   |   | | |   "av-signal-type" = 0
| |   |   | | |   "AAPL,iokit-ndrv" = <80129336>
| |   |   | | |   "AAPL,gray-value" = <c38c6400>
| |   |   | | |   "display-connect-flags" = <00000000>
| |   |   | | |   "name" = "ATY,Ipomoea"
| |   |   | | |   "AAPL,boot-display" = <01000000>
| |   |   | | | }

| |   |   | +-o ATY,Ipomoea@1  <class AtiFbStub, id 0x1000002d8, registered, matched, active, busy 0 (21 ms), retain 7>
| |   |   | | | {
| |   |   | | |   "display-type" = "LCD"
| |   |   | | |   "connector-type" = 2048
| |   |   | | |   "ATY,ActiveFlags" = 512
| |   |   | | |   "IOFBDependentIndex" = 1
| |   |   | | |   "IOFBDependentID" = 83116416
| |   |   | | |   "ATY,ControlFlags" = 512
| |   |   | | |   "AAPL,gray-page" = <01000000>
| |   |   | | |   "device_type" = "display"
| |   |   | | |   "av-signal-type" = 8
| |   |   | | |   "AAPL,iokit-ndrv" = <80129336>
| |   |   | | |   "AAPL,gray-value" = <c38c6400>
| |   |   | | |   "display-connect-flags" = <00000000>
| |   |   | | |   "name" = "ATY,Ipomoea"
| |   |   | | |   "port-number" = 1
| |   |   | | | }

| |   |   | +-o ATY,Ipomoea@2  <class AtiFbStub, id 0x1000002d9, registered, matched, active, busy 0 (17 ms), retain 7>
| |   |   | | | {
| |   |   | | |   "display-type" = "CRT"
| |   |   | | |   "connector-type" = 16
| |   |   | | |   "ATY,ActiveFlags" = 16
| |   |   | | |   "IOFBDependentIndex" = 2
| |   |   | | |   "IOFBDependentID" = 83116416
| |   |   | | |   "ATY,ControlFlags" = 16
| |   |   | | |   "AAPL,gray-page" = <01000000>
| |   |   | | |   "device_type" = "display"
| |   |   | | |   "av-signal-type" = 1
| |   |   | | |   "AAPL,iokit-ndrv" = <80129336>
| |   |   | | |   "AAPL,gray-value" = <c38c6400>
| |   |   | | |   "display-connect-flags" = <00000000>
| |   |   | | |   "name" = "ATY,Ipomoea"
| |   |   | | |   "port-number" = 2
| |   |   | | | }

 

End of Part 1

=======================================================================

 

Part 2 : Testing on Transmission/Encoder (Not working yet, just for reference and discussion purpose)

In this section, I'll try to get LVDS working by focus on TransmissionID/EncoderID.

 

I assume that my ATI HD 6470M is DCE 4.0 compatible because my HDMI port exactly matched this spec.

From bcc9's radeon rom dump output, It tells me that LVDS port is using UNIPHY0.

So there are possible 3 values to be tested : 0x1000, 0x0000, 0x2001.

 

* DCE 4.0
* - 3 DIG transmitter blocks UNPHY0/1/2 (links A and B).
* Supports up to 6 digital outputs
* - 6 DIG encoder blocks.
* - DIG to PHY mapping is hardcoded
* DIG1 drives UNIPHY0 link A, A+B	0x1000	  0x0000
* DIG2 drives UNIPHY0 link B		0x2001
* DIG3 drives UNIPHY1 link A, A+B	
* DIG4 drives UNIPHY1 link B		0x2103  HDMI
* DIG5 drives UNIPHY2 link A, A+B	
* DIG6 drives UNIPHY2 link B

 

LVDS personality tested :

02  00  00  00  40  00  00  00  09  01  00  00  10  00  00  07  (Case 01 : black/blank screen, backlight off)
02  00  00  00  40  00  00  00  09  01  00  00  00  00  00  07  (Case 02 : black/blank screen, backlight off)
02  00  00  00  40  00  00  00  09  01  00  00  20  01  00  07  (Case 03 : black/blank screen, backlight on)

Conclusions: Only case 03 0x2001 that can turn backlight on/off using keboard “Fn” button. So I think 0x2001 is the most possible value for my card.

 

End of Part 2

=======================================================================

ioreg.txt

6760.8000.0200.vga.rom.zip

boot.zip

ATI6000Controller.zip

ati.c.zip

  • Like 2
Link to comment
Share on other sites

I would like to share my experience about ATI Radeon HD 6470M on Asus A42JZ Notebook.

 

Current Status & Information about my best configuration

What I uses :

- Kabyl’s boot with 6470M id added

- ATI Kext from MBP2011 10.6.7 with patched Ipomoea personality

 

Current Status :

LVDS : Not working, blank/black screen with backlight turn on (can turn off/on using keyboard “Fn”). The screen can be used in VESA mode (1024x768x32) using GraphicsEnabler=No.

HDMI : Working, Correct FullHD 1080p resolution with QE/CI, HDMI-audio not working.

VGA : Working, Incorrect resolution. Can change resolution but no widescreen options to select (my native resolution is 1440x900).

 

My Radeon ROM dump :

ATOM BIOS Rom: 

SubsystemVendorID: 0x1043 SubsystemID: 0x1cb2

IOBaseAddress: 0xd000

Filename: BR39572.001

BIOS Bootup Message:

Asus K42Jy/Jk SEYMOUR XT DDR3 64Mx16 512MB/1GB

Connector at index 0

Type: LVDS (7)

Encoder: id: 1e name: INTERNAL_UNIPHY

i2cid: 0x96, OSX senseid: 0x7

Connector at index 1

 

.............................

....................................

 

I've been waiting this for almost 4months ;) 6470M is it fully working QE/CI. I have asus notebook to but lower spec core-i3 with 6470M native 1366x768. but without LVDS as u mention i cant deal with it. i have no 2nd monitor to attached. but thanks tho! :D great.

 

is that vga bios that u attached (afaik onboard vga bios cant be dump).. how do u get it?

Link to comment
Share on other sites

Hi k540kkk,

 

I am working on the same series laptop (mine is a JY) which has exactly the same video rom as yours and am basically up to the same point as you (patching the kext). The difference is I am in 64 bit mode because I have 8gb ram. You can find my work by googling K42JY hackintosh.

 

I am using the r748 bootloader that came with Nawcom and the framebuffer shows in IORegistryExplorer as ATIFramebuffer with a Compatible-With: Megalodon which I found strange since the Megalodon isnt an r800. I will try Kabyl and see what results I get.

 

We should get in touch (maybe via email) and share info.

Link to comment
Share on other sites

@k540kk

Try booting with AtiConfig=RadeonFramebuffer to see how many outputs you get by default?

Also i have found if you change controlflag LVDS to 14 and VGA to 14 then normally they switch on. Extended mode. also you might have mirroring option.

 

Try the below, 20,01 don't seem like a LVDS transmitter/encoder maybe try a few others 12,04 / 12,01

I have also found out 00,00 works great with VGA.

 

Personality: Ipomoea
ConnectorInfo count in decimal: 3
Disk offset in decimal 501244 (0x7a5fc)
0000000	02  00  00  00  14  00  00  00  09  01  00  00  20  01  00  07  (LVDS – not detected/not working)
0000010	00  08  00  00  00  02  00  00  00  01  00  00  21  03  04  02  (HDMI – working)
0000020	10  00  00  00  14  00  00  00  00  01  00  00  00  00  01  08  (VGA – working)

 

also install ScreenResX to fix the VGA resolution.

Link to comment
Share on other sites

Hi all,

 

Glad to know that there are many people interested to get this thing working.

 

@wmarsh and @atlee, Thanks for your suggestions and here is the result.

 

 

You might want to try Cattail as new MBP uses it.

I've also tried Cattail because It starts with LVDS port. Result is nothing changed. LVDS not working, HDMI and VGA working when I patched it with correct senseid and transmission/encoder.

 

Try the below, 20,01 don't seem like a LVDS transmitter/encoder maybe try a few others 12,04 / 12,01

I have also found out 00,00 works great with VGA.

As described in Part 2 in my first post, I think 2001 is the most possible value. However, before @bcc9 release radeon_bios_decode, I've already tried many possible value included 1204/1201/0000 but nothing worked.

 

Try booting with AtiConfig=RadeonFramebuffer to see how many outputs you get by default?

This is interesting. With AtiConfig=RadeonFramebuffer, It gives the same result : 3 ports; LVDS-not working, HDMI-working, VGA-working. From ioreg dump, I think it picks "Gibba" for me as It's only name I found in ioreg.

I also found that ANY INCORRECT framebuffer name give the same result. I've tried AtiConfig=ABCABCABC (ensure that the name is long enough or you will get error message) give the same result as "RadeonFramebuffer".

ioreg.RadeonFramebuffer.zip

post-633174-1301576116_thumb.jpg

 

Let's see what it picks for me, It doesn't seem to match my card. It has no LVDS, no VGA but it's work!!!

Personality: Gibba
ConnectorInfo count in decimal: 5
Disk offset in decimal 501084 (0x7a55c)
0000000	00  04  00  00  04  03  00  00  00  01  00  00  12  04  05  01
0000010	00  04  00  00  04  03  00  00  00  01  00  00  22  05  04  02
0000020	00  08  00  00  04  02  00  00  00  01  00  00  11  02  06  04
0000030	00  02  00  00  04  02  00  00  00  01  00  00  00  00  03  05
0000040	04  00  00  00  04  02  00  00  00  01  00  00  11  02  01  03

At this point, from my own experience and from reading others, It seems that what is working, It's also still working even with incorrect values. What that is not working, it's still not working with any values.

Maybe It's not important what the value is. May be something is missing but we don't know.

 

Also i have found if you change controlflag LVDS to 14 and VGA to 14 then normally they switch on. Extended mode. also you might have mirroring option.

See @pnegry comment below

 

also install ScreenResX to fix the VGA resolution.

Yes, It's work. I've installed SwitchResX long time ago. When I opened it again, It shown "Trial period expired" so I just skipped this task because I will not use VGA. You encouraged me to try again and It's working now. Thanks

Link to comment
Share on other sites

Hi all,

 

Glad to know that there are many people interested to get this thing working.

 

@wmarsh and @atlee, Thanks for your suggestions and here is the result.

 

 

 

....

 

THanks for the progress guys! i waiting to get LVDS working, have tried all mods but nothing work.

i use Gibba as fB

Link to comment
Share on other sites

@k540kk

Also i have found if you change controlflag LVDS to 14 and VGA to 14 then normally they switch on. Extended mode. also you might have mirroring option.

Try the below, 20,01 don't seem like a LVDS transmitter/encoder maybe try a few others 12,04 / 12,01

I have also found out 00,00 works great with VGA.

 

I have done some more tests, still no luck, results below.

 

02000000140000000901000020010007 -both screens gray
02000000140000000901000012010007 -both screens corruption
02000000410000000901000020010007 - hdmi only
02000000400000000901000012010007 - hdmi only
02000000400000000901000012040007 - hdmi only

 

I have also tried various permutations based on the lvds lines from all of the built in personalities in the controller kext - no luck. However I note that there are values in some of these lines that do not match with dong / bcc9's reference work, so this might be worth investigating further.

 

Some more remarks:

 

Testing manually is tedious. It should be easy to write a python test harness to do the following:

* Calculate all possible permutations based on input conditions

* Patch ATI6000Controller and move into place

* Fix permissions, update cache

* Reboot

* As a startup item, dump ioreg and store with ConnectorInfo table as a reference, raise alert if display0 branch appears under Ipomoea@0

* Iterate and try the next possibility

 

Given that there are only 6 transmitters and 6 encoders possible in ddc, that gives 36 possible combinations which should only take 1/2 an hour or so to test. I will try this on saturday and post results here.

 

Another possible approach would be to dump the configuration from Windows, or dump kernel memory from windows and/or linux and inspect the connectorinfo with a debugger. I am not sure if anyone has already tried this with other Radeons and found that it didnt work or wasnt possible.

Link to comment
Share on other sites

(1) I have done some more tests, still no luck, ... ... ...

 

(2) Testing manually is tedious. It should be easy to write a python ... ... ...

 

(3) Another possible approach would be to dump the configuration from Windows, or dump kernel memory from windows and/or linux and inspect the connectorinfo with a debugger. I am not sure if anyone has already tried this with other Radeons and found that it didnt work or wasnt possible.

 

(1) I've seen many people testing but still no luck, me too. :rolleyes:

 

(2) If you are going to create the testing script, please see following posts, maybe good information to develop possible values.

@atlee's conclusion here

@mucha's report here

 

 

(3) I've install Ubuntu 10.10 but current driver does not support HD6470M yet. I've tried both opensource driver and AMD's driver, nothing work. ;)

Link to comment
Share on other sites

Output from dmesg |grep drm on latest ubuntu dev with radeon driver cloned from git:

 

[ 17.653054] [drm] Radeon Display Connectors

[ 17.653056] [drm] Connector 0:

[ 17.653057] [drm] LVDS

[ 17.653060] [drm] DDC: 0x6560 0x6560 0x6564 0x6564 0x6568 0x6568 0x656c 0x656c

[ 17.653061] [drm] Encoders:

[ 17.653063] [drm] LCD1: INTERNAL_UNIPHY

 

Nothing new here. Xorg wont load with kms disabled, so no extra info available.

Link to comment
Share on other sites

(2) If you are going to create the testing script, please see following posts, maybe good information to develop possible values.

@atlee's conclusion here

@mucha's report here

 

I have the first part done, that is just a nested loop to iterate out possible values from input. But it occured to me that all the values discovered have already been tested...

 

(3) I've install Ubuntu 10.10 but current driver does not support HD6470M yet. I've tried both opensource driver and AMD's driver, nothing work. :hysterical:

 

I got the AMD driver to work perfectly in natty but I wasnt able to get useful information. Opensource driver detected lvds and resolution but showed a corrupt screen - that was something to do with GART. I pasted the output from drm here. Because this card must use KMS we are limited in the data we can get from the driver until we hack/enable some extra debugging in it.

 

@k540kk one more idea, do you have enough monitors to test vga, hdmi and lvds connected under windows? if so, can you verify that the vga is treated as a seperate display to lvds, or if it is just cloned.

Link to comment
Share on other sites

@k540kk one more idea, do you have enough monitors to test vga, hdmi and lvds connected under windows? if so, can you verify that the vga is treated as a seperate display to lvds, or if it is just cloned.

Using Catalyst Control Center on Windows 7, It allows only 2 monitors activated at the same time. When I tried to activate 3rd monitor, It forced me to select one of active monitors to be disabled.

Test Case |Duplicated mode |Extended mode
-----------------------------------------
LVDS-VGA  |OK			  |OK*
LVDS-HDMI |OK			  |OK
VGA-HDMI  |OK			  |OK

To answer your question, LVDS-VGA can be enabled in Extended mode so VGA is treated as a separate display to LVDS.

Link to comment
Share on other sites

thanks. I think along the lines of atlee's suggestion we need to patch not just the lvds line but also the vga. from my testing obviously a change in one line can affect the other...

my laptop doesnt have a VGA port at all (it's just a stub on the motherboard), so I cant test this :(

Link to comment
Share on other sites

Using Catalyst Control Center on Windows 7, It allows only 2 monitors activated at the same time. When I tried to activate 3rd monitor, It forced me to select one of active monitors to be disabled.

 

Just notice that this maybe limitation on this card. Only 2 monitors can be activated at the same time.

Right now,No matter what personality we have tried,we've got only HDMI and VGA working.

Perhaps the personality we used is correct, we may need a method to disable HDMI or VGA and then enable LVDS.

Link to comment
Share on other sites

I tried with Lion kext.

 

Using RadeonFramebuffer, something strange happened. The screen was corrupt so I VNCed in and it was still corrupt but showing two screens, one smaller than the other. I thought I had a screenshot but I must have missed it.

 

ioreg detects the second "display" as CRT. This makes me beleive that the Lion kext is autodetecting the ports but there is a problem.

 

I have spent enough time on this now to give up for now. I will wait for Lion to be released and try again, but I will keep an eye on your work @k545kkk.

 

If interested I have attached the ioreg tree for gfx0 and Lion. Remember my model does not have a physical connector for VGA.

gfx.ioreg.lion.txt

Link to comment
Share on other sites

maybe we can try a dsdt patch such as wmarsh's one here: http://www.insanelymac.com/forum/index.php?showtopic=253113

 

I'm not success with DSDT but we can inject any value by editing ati.c.

 

Here is an example I've tested, I've got these string shown up in IORegistry (which mean it's effective).

dev_prop_t ati_devprop_list[] = {

	...

	{FLAGTRUE,	  false,  "@0,ATY,EFIDisplay",   NULL,   STRVAL("LVDS")  },
	{FLAGTRUE,	  false,  "AAPL,HasPanel",   NULL,   DWRVAL((uint32_t)1) },
	{FLAGTRUE,	  false,  "@0,AAPL,DualLink",   NULL,   DWRVAL((uint32_t)1) },

	...

	{FLAGTRUE,	  false,  NULL,   NULL,   NULVAL }
};

 

This is only an example. Not found working values yet.

Link to comment
Share on other sites

I'm not success with DSDT but we can inject any value by editing ati.c.

 

Here is an example I've tested, I've got these string shown up in IORegistry (which mean it's effective).

dev_prop_t ati_devprop_list[] = {

	...

	{FLAGTRUE,	  false,  "@0,ATY,EFIDisplay",   NULL,   STRVAL("LVDS")  },
	{FLAGTRUE,	  false,  "AAPL,HasPanel",   NULL,   DWRVAL((uint32_t)1) },
	{FLAGTRUE,	  false,  "@0,AAPL,DualLink",   NULL,   DWRVAL((uint32_t)1) },

	...

	{FLAGTRUE,	  false,  NULL,   NULL,   NULVAL }
};

 

This is only an example. Not found working values yet.

 

Wow, great work!

 

Are you in touch with kabyl and other chameleon developers?

Link to comment
Share on other sites

 Share

×
×
  • Create New...