Jump to content

ATI Framebuffer development


Slice
 Share

466 posts in this topic

Recommended Posts

I've been testing out latest version of RadeonDump on my mobility x1600.

 

At first it did nothing, then I realized I should probably have RadeonPCI kext installed. So I install kext, check to make sure it's loaded and try again. This time I get output but it still can't find EDID:

gojiras-aspire-5670:~ gojira$ /Users/gojira/Desktop/Radeon\ PCI/RadeonPCI_compiled/RadeonDump -i
 Found a device of class RadeonPCI: IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/PEGP@1/IOPCI2PCIBridge/VGA@0/RadeonPCI
 it matched on name "ATY,WormyParent"
 Start I2C dump
 Read EDID at position 0 failed
 Read EDID at position 1 failed

For some reason it seems to be trying to read from the VGA port(no monitor attached btw) instead of LVDS. Perhaps error is caused by com.apple.boot.plist EFI device strings(Same function as ATIinject/Natit) conflicts with RadeonPCI. If there is a possibility of conflict I can restore original boot.plist and test again. Otherwise, is there a way to get more verbose info to track down the error?

Link to comment
Share on other sites

I hope it will work cause that will be really nice. But how if ATINDRV overwrites and only uses its own version of getEDID?

No, ATINDRV is slave, IONDRVFramebuffer is master.

IOReturn IONDRVFramebuffer::getDDCBlock( IOIndex /* connectIndex */,
	UInt32 blockNumber,
	IOSelect blockType,
	IOOptionBits options,
	UInt8 * data, IOByteCount * length )
{
...
err = _doStatus( this, cscGetDDCBlock, &ddcRec); // call for ATINDRV

If you rewrite this method ATINDRV will never be called for getEDID

 

2 asstastic

Are you use own compilation of RadeonDump latest version?

2 justin1986

make

ioreg -l -x -w 2048 >ioreg.txt

and look what drivers is loaded to what devices

Link to comment
Share on other sites

2 asstastic

Are you use own compilation of RadeonDump latest version?

 

ya just like the post said, i put the latest version of RadeonDump in the same folder as RadeonPCI from post #28 and compiled it using the code at the top of RadeonDump.

 

ok, I tested again without using EFI boot strings and got the exact same result as before.

Link to comment
Share on other sites

ok, I tested again without using EFI boot strings and got the exact same result as before.

I'm still looking into the linux source to find out how connector information is taken into account. At the mean time, please try this to see if your card is in the known card list.RadeonDump.zip

Link to comment
Share on other sites

I'm still looking into the linux source to find out how connector information is taken into account. At the mean time, please try this to see if your card is in the known card list.

I am not successful with new RadeonDump. It is much more complex code. Grates Dong! :(

No problem with known card list. Problem is in different pins for clock and data from different manufactures.

I am still trying to find data_mask/clock_mask in different combination with different registers.

What is strange: Linux uses revers 01 bits (High=0 Low=1) while Windows and Wormy drivers High=1 Low=0.

Link to comment
Share on other sites

Slice and Dong:

 

If either of your efforts would lead to a good driver for the X1200 series, I'd like to offer my help testing. I'm no programmer, but I can certainly test drivers with a wee bit of instruction. I'm running on a Dell Inspiron 1521, and the information I've managed to get on my graphics card is thus:

 

Radeon X1270 IGP (based on X700)

Codename: M690T

 

I'm currently using Natit on Leopard 10.5.2. System Profiler has this to say about the graphics:

 

ATI Radeon Xpress 1200 Series:

 

Chipset Model: ATI Radeon Xpress 1200 Series

Type: Display

Bus: PCI

VRAM (Total): 256 MB

Vendor: ATI (0x1002)

Device ID: 0x791f

Revision ID: 0x0000

Displays:

Display:

Resolution: 1024 x 768

Depth: 32-bit Color

Core Image: Software

Main Display: Yes

Mirror: Off

Online: Yes

Quartz Extreme: Not Supported

Display Connector:

 

If you need any additional information, just let me know.

Link to comment
Share on other sites

I'm still looking into the linux source to find out how connector information is taken into account. At the mean time, please try this to see if your card is in the known card list.

 

Where can I find the known card list? I know my card has native driver support(QE/CI using all vanilla kexts, just no res change).

 

the new RadeonDump gives me this output:

sh-3.2# /Users/gojira/Desktop/Radeon\ PCI/RadeonPCI_compiled/RadeonDump -i
Found a device of class RadeonPCI: IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/PEGP@1/IOPCI2PCIBridge/VGA@0/RadeonPCI
it matched on name "ATY,WormyParent"
Card device id: 0x71c5
Start I2C dump
EDID at position 0:
Error reading EDID block
Error reading EDID block
Error reading EDID block
Error reading EDID block
Read EDID at position 0 failed
EDID at position 1:
Error reading EDID block
Error reading EDID block
Error reading EDID block
Error reading EDID block
Read EDID at position 1 failed
sh-3.2#

 

also most registers from 120-160 are empty:

sh-3.2# /Users/gojira/Desktop/Radeon\ PCI/RadeonPCI_compiled/RadeonDump -r 120,160
Found a device of class RadeonPCI: IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/PEGP@1/IOPCI2PCIBridge/VGA@0/RadeonPCI
it matched on name "ATY,WormyParent"
0x0120: 0x00000000
0x0124: 0x00000000
0x0128: 0x00000000
0x012C: 0x00000000
0x0130: 0x00800000
0x0134: 0x00000000
0x0138: 0x00000000
0x013C: 0x00000000
0x0140: 0x00000000
0x0144: 0x00000000
0x0148: 0x00000000
0x014C: 0x00000000
0x0150: 0x00000000
0x0154: 0x00000000
0x0158: 0x00000000
0x015C: 0x00000000
0x0160: 0x00000000
sh-3.2#

Link to comment
Share on other sites

Just to make sure the dump code is working right I plugged my projector into the vga port and ran RadeonDump:

h-3.2# /Users/gojira/Desktop/Radeon\ PCI/RadeonPCI_compiled/RadeonDump -i
Found a device of class RadeonPCI: IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/PEGP@1/IOPCI2PCIBridge/VGA@0/RadeonPCI
it matched on name "ATY,WormyParent"
Card device id: 0x71c5
Start I2C dump
EDID at position 0:
Error reading EDID block
Error reading EDID block
Error reading EDID block
Error reading EDID block
Read EDID at position 0 failed
EDID at position 1:
0x0000: 00FFFFFFFFFFFF00066B520401010101
0x0010: 000A01022E0000000800000000000000
0x0020: 000000FFFF809040904F010101010101
0x0030: 01010101010164190040410026301888
0x0040: 3600000000000018000000FC00494E46
0x0050: 4F43555352503130780A000000FE000A
0x0060: 202020202020202020202020000000FE
0x0070: 000A20202020202020202020202000D5
sh-3.2#

As you can see it is working fine. We just need to fix the code so that it runs through all possible displays connections. Should be easy to run a dump on every output (VGA, HDMI, S-Video and LVDS) and then check to see which ones have monitors attached by whether they dump an edid or not.

Link to comment
Share on other sites

No, ATINDRV is slave, IONDRVFramebuffer is master.

IOReturn IONDRVFramebuffer::getDDCBlock( IOIndex /* connectIndex */,
err = _doStatus( this, cscGetDDCBlock, &ddcRec); // call for ATINDRV

If you rewrite this method ATINDRV will never be called for getEDID

I've tested new IONDRVSupport.kext with Natit, nothing improved. I guess ATINDRV subclassed IONDRVFramebuffer and overwrited these member functions instead of only providing low level implementations in IOBootNDRV class.

JAs you can see it is working fine. We just need to fix the code so that it runs through all possible displays connections. Should be easy to run a dump on every output (VGA, HDMI, S-Video and LVDS) and then check to see which ones have monitors attached by whether they dump an edid or not.

The DDC line seems determined by corresponding MASK register value. All DDC lines are forced to be detected in this new code without consideration of card type. Please give it a try.

RadeonDump.zip

Link to comment
Share on other sites

I've tested new IONDRVSupport.kext with Natit, nothing improved. I guess ATINDRV subclassed IONDRVFramebuffer and overwrited these member functions instead of only providing low level implementations in IOBootNDRV class.

Complex relations

In constructor (; ATY_Wormy::ATY_Wormy(void)) I understand that when the class is created it create an instance of IONDRVFramebuffer but not override its members.

 

ATINDRV is called by framebuffer

err = ndrv->doDriverIO( commandID, contents, commandCode, commandKind );

; ATY_Wormy::doDriverIO(unsigned long, void *, unsigned	long, unsigned long)
	public __ZN9ATY_Wormy10doDriverIOEmPvmm
	push	ebp
	mov	ebp, esp
	push	ebx
	sub	esp, 84h
	mov	dword ptr [ebp-14h], 0
	mov	dword ptr [ebp-54h], offset aKiondrvopencom ; "kIONDRVOpenCommand		 "
	mov	dword ptr [ebp-50h], offset aKiondrvcloseco ; "kIONDRVCloseCommand		 "
	mov	dword ptr [ebp-4Ch], offset aKiondrvreadcom ; "kIONDRVReadCommand		 "
	mov	dword ptr [ebp-48h], offset aKiondrvwriteco ; "kIONDRVWriteCommand		 "
	mov	dword ptr [ebp-44h], offset aKiondrvcontrol ; "kIONDRVControlCommand		 "
	mov	dword ptr [ebp-40h], offset aKiondrvstatusc ; "kIONDRVStatusCommand		 "
	mov	dword ptr [ebp-3Ch], offset aKiondrvkillioc ; "kIONDRVKillIOCommand		 "
	mov	dword ptr [ebp-38h], offset aKiondrvinitial ; "kIONDRVInitializeCommand		 "
	mov	dword ptr [ebp-34h], offset aKiondrvfinaliz ; "kIONDRVFinalizeCommand		 "
	mov	dword ptr [ebp-30h], offset aKiondrvreplace ; "kIONDRVReplaceCommand		 "
	mov	dword ptr [ebp-2Ch], offset aKiondrvsuperse ; "kIONDRVSupersededCommand		 "

Looking into wormy sources you can find all methods used

; IONDRVFramebuffer::getConnectionCount(void)
	extrn __ZN17IONDRVFramebuffer18getConnectionCountEv

It is external method so it is called from external driver IONDRVSupport.

 

The DDC line seems determined by corresponding MASK register value. All DDC lines are forced to be detected in this new code without consideration of card type. Please give it a try.

sergey:~/Desktop/RadeonDump sergey$ cc ./RadeonDump.c ./xf86i2c.c -o ./RadeonDump -framework IOKit -framework CoreFoundation -Wno-four-char-constants -Wall -g -arch i386
sergey:~/Desktop/RadeonDump sergey$ ./RadeonDump -i
Found a device of class RadeonPCI: IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/AGP@1/AGPGart/ATIM@5/RadeonPCI
it matched on name "display"
Card device id: 0x5835
Start I2C dump
EDID for VGA monitor:
Read EDID failed or no VGA monitor connected
EDID for DVI monitor:
Read EDID failed or no DVI monitor connected
EDID for DVI monitor:
Read EDID failed or no DVI monitor connected
EDID for CRT monitor:
Read EDID failed or no CRT monitor connected
EDID for LCD monitor:
Read EDID failed or no LCD monitor connected
sergey:~/Desktop/RadeonDump sergey$

As I previously said I don't trust Linux codes.

	i2c.put_clk_mask = RADEON_GPIO_EN_1;
i2c.put_data_mask = RADEON_GPIO_EN_0;
i2c.get_clk_mask = RADEON_GPIO_Y_1;
i2c.get_data_mask = RADEON_GPIO_Y_0;

These masks doesn't work for me. Windows driver has other masks (see my posts above) and doesn't work too. I don't know what is the problem. I did several attempts to change the masks in your codes but had no success yet.

Very nice that two men are successful!

I think for other it is easy to make

		if(!rinfo->mon1_EDIDvalid){
		//Try to get EDID from BIOS
		if(!getEDIDfromBIOS(rinfo)){
			IOLog("ATIFB: NO EDID DATA FOUND! Trying ATI,EDID\n");
			if((data = OSDynamicCast(OSData, device->getProperty("ATI,EDID"))))
			{
				rinfo->mon1_EDIDvalid = true;
				rinfo->mon1_EDID = *(EDID *)data->getBytesNoCopy();
				}
		} else 
			IOLog("ATIFB: EDID found from BIOS\n");
	}

Link to comment
Share on other sites

I've tested new IONDRVSupport.kext with Natit, nothing improved. I guess ATINDRV subclassed IONDRVFramebuffer and overwrited these member functions instead of only providing low level implementations in IOBootNDRV class.

 

The DDC line seems determined by corresponding MASK register value. All DDC lines are forced to be detected in this new code without consideration of card type. Please give it a try.

RadeonDump.zip

No Luck with the new RadeonDump detecting the internal LCD. Looks like the problem is something else. Would a clipping from my IO Registry help in any way?

gojiras-aspire-5670:~ gojira$ /Users/gojira/Desktop/Radeon\ PCI/RadeonPCI_compiled/RadeonDump -i
Found a device of class RadeonPCI: IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/PEGP@1/IOPCI2PCIBridge/VGA@0/RadeonPCI
it matched on name "ATY,WormyParent"
Card device id: 0x71c5
Start I2C dump
EDID at DDC 0:
Read EDID at DDC 0 failed
EDID at DDC 1:
Read EDID at DDC 1 failed
EDID at DDC 2:
Read EDID at DDC 2 failed
gojiras-aspire-5670:~ gojira$

Link to comment
Share on other sites

As I previously said I don't trust Linux codes.

These masks doesn't work for me. Windows driver has other masks (see my posts above) and doesn't work too. I don't know what is the problem. I did several attempts to change the masks in your codes but had no success yet.

I know it's a little frustrating for you when testing all this, but would you give another try with this RadeonDump.zipThis time, register masks have a possiblity to be set by BIOS values for legacy BIOS cards.

Frankly say, corresponding code (from radeon_atombios.c) for my ATOMBIOS card is not working and thus not included here.

That also means: no new things for asstastic to test yet.

Link to comment
Share on other sites

It is not a big problem to test. I am ready to try more and more

sergey:~/Desktop/RadeonDumpD3 sergey$ ./RadeonDump -i
Found a device of class RadeonPCI: IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/AGP@1/AGPGart/ATIM@5/RadeonPCI
it matched on name "display"
Detected ATI Radeon Mobility 9100 IGP (U3) 5835 (device id: 0x5835)
Start I2C dump
Legacy BIOS detected
Bios Connector table: 
Port0: DDCType-0x60, DACType-2, TMDSType-1, ConnectorType-1
Port4: DDCType-0x0, DACType-0, TMDSType-0, ConnectorType-7
Port5: DDCType-0x0, DACType-2, TMDSType-0, ConnectorType-5
EDID for connector 0:
Read data failed
sergey:~/Desktop/RadeonDumpD3 sergey$

In registry explorer I have three connectors, see pict. So LCD is not first connector. Connector table is not true?

My BIOS here

00000000: 55 AA 80 E9 56 04 00 00 85 1C 00 00 00 00 00 00 	U...V...........
00000010: 00 00 00 00 00 00 00 00 6C 01 00 85 1C 00 49 42 	........l.....IB
00000020: 4D C7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 	M...............
00000030: 20 37 36 31 32 39 35 35 32 30 00 00 00 00 00 00 	 761295520......
00000040: 3F 3F 00 00 00 00 00 00 04 01 00 00 00 00 00 00 	??..............
00000050: 32 30 30 35 2F 30 32 2F 30 31 20 31 32 3A 31 32 	2005/02/01 12:12
00000060: 00 00 00 00 E9 50 10 00 E9 04 1C 00 00 00 00 00 	.....P..........
00000070: 4D DF 5B 00 4D 14 02 61 00 00 00 00 00 00 00 00 	M.[.M..a........
00000080: 0D 0A 53 50 2D 32 38 20 49 47 50 39 20 56 47 41 	..SP-28 IGP9 VGA
00000090: 20 42 49 4F 53 20 33 30 30 4D 68 7A 0D 0A 00 28 	 BIOS 300Mhz...(
000000A0: 43 29 20 31 39 38 38 2D 32 30 30 32 2C 20 41 54 	C) 1988-2002, AT
000000B0: 49 20 54 65 63 68 6E 6F 6C 6F 67 69 65 73 20 49 	I Technologies I
000000C0: 6E 63 2E 20 42 4B 2D 41 54 49 20 56 45 52 30 30 	nc. BK-ATI VER00
000000D0: 38 2E 30 31 37 49 2E 30 36 30 2E 30 30 30 00 20 	8.017I.060.000. 
000000E0: 78 35 6F 73 63 61 72 2E 73 61 6D 20 76 36 31 31 	x5oscar.sam v611
000000F0: 20 00 42 43 33 20 41 47 50 20 44 47 4E 31 55 4E 	 .BC3 AGP DGN1UN

00000100: 00 00 68 00 08 A0 08 11 3C 00 68 00 85 1C 64 5E 	..h.....<.h...d^
00000110: 15 02 A1 01 DF 00 80 00 F2 00 28 01 00 C0 00 90 	..........(.....
00000120: 4D 14 02 61 35 58 00 00 00 00 00 00 00 00 8F 80 	M..a5X..........
00000130: C4 75 6F 0A B2 06 F6 D9 00 00 C1 03 00 00 24 54 	.uo...........$T
00000140: 56 53 06 DA 1A ED D1 03 00 00 23 03 00 00 A0 88 	VS........#.....
00000150: 00 00 AC 02 CB 03 8F 03 00 00 00 00 00 00 00 00 	................
00000160: 00 00 E1 01 00 00 00 00 00 00 00 00 50 43 49 52 	............PCIR
00000170: 02 10 35 58 00 00 18 00 00 00 00 03 80 00 11 08 	..5X............
00000180: 00 80 00 00 41 54 49 20 4D 4F 42 49 4C 49 54 59 	....ATI MOBILITY
00000190: 20 52 41 44 45 4F 4E 20 39 30 30 30 20 49 47 50 	 RADEON 9000 IGP
000001A0: 00 31 D8 D9 5E FF FF FF FF 54 4A 01 02 FF FF FF 	.1..^....TJ.....
000001B0: FF 00 00 00 00 FF FF FF FF 00 00 00 00 FF FF FF 	................
000001C0: FF 31 D8 D9 5E FF FF FF FF 54 4A 00 00 FF FF FF 	.1..^....TJ.....
000001D0: FF 00 00 00 00 FF FF FF FF 00 00 00 00 FF FF FF 	................
000001E0: FF 01 01 09 1E 03 20 03 EA 01 01 00 00 00 00 00 	...... .........
000001F0: 00 08 40 00 FF FF FF 8D 00 00 00 0C 00 00 80 FF 	..@.............

00000200: 1F 20 01 03 8D 00 00 00 80 F4 01 20 01 00 00 00 	. ......... ....
00000210: 00 00 00 00 00 30 20 B0 A3 33 51 30 60 FF FF FF 	.....0 ..3Q0`...
00000220: FF 00 00 00 00 EC 00 43 44 00 00 3C 02 00 00 00 	.......CD..<....
00000230: 00 20 04 00 00 7F 80 50 20 00 00 00 04 50 60 FF 	. ....P ....P`.
00000240: FF FF FF 00 00 00 00 58 20 02 41 60 FF 58 60 FF 	.......X .A`.X`.
00000250: FF FF FF 00 00 00 00 54 01 FF FF FF 01 20 00 00 	.......T..... ..
00000260: 00 00 00 24 00 00 00 00 00 00 4D FF FC FF 00 00 	...$......M.....
00000270: 03 00 5B 84 42 F7 BF FF FF 00 00 00 00 88 42 F7 	..[.B.........B.
00000280: FF FF FF 08 00 00 00 F8 43 7F FF FF FF 80 00 00 	........C......
00000290: 00 7C 02 00 00 00 00 8C 02 00 00 00 80 90 02 00 	.|..............
000002A0: 00 00 80 30 01 00 00 00 70 00 00 00 F4 02 34 34 	...0....p.....44
000002B0: 00 00 10 40 FB FF FF FF 04 00 00 00 A8 02 1B 0A 	...@............
000002C0: 00 00 64 4D FF FB FF FF 22 02 00 00 D4 42 E1 FF 	..dM...."....B..
000002D0: FF FF 08 00 00 00 64 4D FF FF FF FF 00 00 00 10 	......dM........
000002E0: 00 48 FF FF FF FF 00 00 00 40 10 4D FF FF FF EF 	.H.......@.M....
000002F0: 00 00 00 10 DC 44 FF FE FF FF 00 01 00 00 34 60 	.....D........4`

00000300: FF FF FF 73 00 00 00 84 34 60 FF FF FF FF 00 00 	...s....4`......
00000310: 00 00 8C 48 00 F0 00 FF 03 02 29 00 00 00 00 00 	...H......).....
00000320: 00 00 01 08 C0 00 00 00 2D 00 00 00 00 82 03 06 	........-.......
00000330: 00 00 00 0A 02 00 2A 00 24 02 00 00 00 0C 00 BC 	......*.$.......
00000340: 00 04 02 03 A4 00 00 82 4C 00 FE 00 81 82 4C 00 	........L.....L.
00000350: FD 00 82 15 06 00 10 00 0D 02 00 01 00 82 48 00 	..............H.
00000360: 3C 00 42 00 FF 03 04 54 00 03 00 05 5F 00 03 00 	<.B....T...._...
00000370: 06 54 00 03 00 07 5F 00 03 00 42 00 FD 00 81 82 	.T...._...B.....
00000380: 42 00 FE 00 82 48 00 3C 03 82 41 00 CF 10 00 14 	B....H.<..A.....
00000390: 00 14 00 00 41 01 FF 80 75 01 F8 00 75 00 F8 00 	....A...u...u...
000003A0: 75 00 CF 00 75 00 FF 18 75 02 FF 01 74 03 FF 08 	u...u...u...t...
000003B0: 82 75 00 FF 09 2D C0 FC 1A 00 08 C3 00 00 00 82 	.u...-..........
000003C0: 00 24 41 54 49 02 0A 0F 33 00 00 11 11 00 23 00 	.$ATI...3.....#.
000003D0: 00 06 19 00 00 00 00 00 00 02 00 00 00 00 00 00 	................
000003E0: 00 00 00 00 F5 03 EA 03 00 00 01 0B 00 00 00 00 	................
000003F0: 00 00 00 00 00 01 67 0A 60 00 00 00 00 00 00 00 	......g.`.......

Picture_4.png

Link to comment
Share on other sites

My BIOS here

00000300: FF FF FF 73 00 00 00 84 34 60 FF FF FF FF 00 00 	...s....4`......
00000310: 00 00 8C 48 00 F0 00 FF 03 02 29 00 00 00 00 00 	...H......).....
00000320: 00 00 01 08 C0 00 00 00 2D 00 00 00 00 82 03 06 	........-.......
00000330: 00 00 00 0A 02 00 2A 00 24 02 00 00 00 0C 00 BC 	......*.$.......
00000340: 00 04 02 03 A4 00 00 82 4C 00 FE 00 81 82 4C 00 	........L.....L.
00000350: FD 00 82 15 06 00 10 00 0D 02 00 01 00 82 48 00 	..............H.
00000360: 3C 00 42 00 FF 03 04 54 00 03 00 05 5F 00 03 00 	<.B....T...._...
00000370: 06 54 00 03 00 07 5F 00 03 00 42 00 FD 00 81 82 	.T...._...B.....
00000380: 42 00 FE 00 82 48 00 3C 03 82 41 00 CF 10 00 14 	B....H.<..A.....
00000390: 00 14 00 00 41 01 FF 80 75 01 F8 00 75 00 F8 00 	....A...u...u...
000003A0: 75 00 CF 00 75 00 FF 18 75 02 FF 01 74 03 FF 08 	u...u...u...t...
000003B0: 82 75 00 FF 09 2D C0 FC 1A 00 08 C3 00 00 00 82 	.u...-..........
000003C0: 00 24 41 54 49 02 0A 0F 33 00 00 11 11 00 23 00 	.$ATI...3.....#.
000003D0: 00 06 19 00 00 00 00 00 00 02 00 00 00 00 00 00 	................
000003E0: 00 00 00 00 F5 03 EA 03 00 00 01 0B 00 00 00 00 	................
000003F0: 00 00 00 00 00 01 67 0A 60 00 00 00 00 00 00 00 	......g.`.......

It's not complete. Can you provide it as a file?

Link to comment
Share on other sites

I have a radeon mobility x1600 and seem to get similar (though not identical) results to asstastic.

 

With an external monitor connected through vga

bash-3.2# ./radeondump -i
Found a device of class RadeonPCI: IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/P0P2@1/IOPCI2PCIBridge/VGA@0/RadeonPCI
it matched on name "ATY,WormyParent"
Detected ATI Mobility Radeon X1600 (device id: 0x71c5)
Start I2C dump
ATOM BIOS detected
EDID for connector 0:
Read data failed
EDID for connector 1:
0x0000: 00FFFFFFFFFFFF0010AC29A053594331
0x0010: 171201030E342078EAB325AC5130B426
0x0020: 105054A54B008180A940714F01010101
0x0030: 010101010101283C80A070B023403020
0x0040: 360007442100001A000000FF004A5534
0x0050: 3336383634314359530A000000FC0044
0x0060: 454C4C20323430385746500A000000FD
0x0070: 00384C1E5311000A2020202020200050

 

 

Thank you for all your hard work!!

Link to comment
Share on other sites

Native Mac EDID collection.

MacMini
   | |     |   "IOAGPFlags" = 0x1
   | |     |   "CRT2,EDID" = <00ffffffffffff004dd9005c01010101280f0103080000780ad9ada35546982410474a2dc8006
4f010101010101010101010101010164190040410026301d8836000000000000180e1f008051001e
04080370000000000001c000000fd003a3e1e3208000a202020202020000000fc004b444c2d53333
413132550a2000cb>

iMac 20
   | |   |     |   "LVDS,EDID" = <00ffffffffffff0006106a9c0101010100100103802b1b780acf74a2574a9c251150540000100
0101010101010101010101010101017c2e90a0601a1e4030203600b10e1100001c00000001000610
011080000000000000a20000000fe004c4d3230315745332d544c4631000000fc00436f6c6f72204
43440a202020002b>

MacPro nVidia + LCD
   | |   |     | |   "EDID" = <00ffffffffffff004c2d1c02303241481110010380291e782aee95a3544c99260f5054bfef809
408140714f818001010101010101018f2f78d0511a274058903400982c1100001d000000fd00384b
e5110000a202020202020000000fc0053796e634d61737465720a2020000000ff004853484c34303
3733360a2020008b>

MacBookPro
   | |   |     |   "LVDS,EDID" = <00ffffffffffff000610609c0000000004100103802216780a1cf59758508e272750540000000
0101010101010101010101010101019f25a04051840c30402033004bcf1000001900000001000610
000000000000000000a20000000fe0042313534505730312056300a20000000fc00436f6c6f72204
43440a20202000bc>

How to choose best for me? ;)

Link to comment
Share on other sites

I found some contradiction in registers descriptions

#define RADEON_MDGPIO_A_REG				 0x01ac
#define RADEON_MDGPIO_EN_REG				0x01b0
#define RADEON_MDGPIO_MASK				  0x0198
#define RADEON_MDGPIO_Y_REG				 0x01b4
#define R128_AMCGPIO_A_REG				0x01a0
#define R128_AMCGPIO_EN_REG			   0x01a8
#define R128_AMCGPIO_MASK				 0x0194
#define R128_AMCGPIO_Y_REG				0x01a4

but you suppose

#define RADEON_LCD_GPIO_MASK				0x01a0
#define RADEON_GPIOPAD_EN				   0x01a0
#define RADEON_LCD_GPIO_Y_REG			   0x01a4
#define RADEON_MDGPIO_A_REG				 0x01ac
#define RADEON_MDGPIO_EN_REG				0x01b0
#define RADEON_MDGPIO_MASK				  0x0198
#define RADEON_GPIOPAD_MASK				 0x0198
#define RADEON_GPIOPAD_A					0x019c
#define RADEON_MDGPIO_Y_REG				 0x01b4

My initial values

0x0180:  00000000 00400000 00000000 00000000 00050000 00002202 00000000 00000000
0x01A0:  00000000 000007DB 00000000 00000000 00000000 0B00FFFF 00000000 00000002
0x01C0:  00FF0000 00000105 00000000 00000000 00000001 00000004 09E0A000 00300000

so (194)=2202 really looks like mask!

(1A4)=7DB looks like input register

Link to comment
Share on other sites

I found some contradiction in registers descriptions

#define RADEON_MDGPIO_A_REG				 0x01ac
#define RADEON_MDGPIO_EN_REG				0x01b0
#define RADEON_MDGPIO_MASK				  0x0198
#define RADEON_MDGPIO_Y_REG				 0x01b4
#define R128_AMCGPIO_A_REG				0x01a0
#define R128_AMCGPIO_EN_REG			   0x01a8
#define R128_AMCGPIO_MASK				 0x0194
#define R128_AMCGPIO_Y_REG				0x01a4

so (194)=2202 really looks like mask!

(1A4)=7DB looks like input register

Still not work with your registers?

I have checked your BIOS rom, the corresponding entry for LVDS connector (port 4) only contains value of 0, that makes it not possible to initialize the i2c structure.

I've test the legacy bios code on my Dell, it works. I wonder what kind of card you have, is it a multimedia card?

Link to comment
Share on other sites

Still not work with your registers?

I have checked your BIOS rom, the corresponding entry for LVDS connector (4) only contains value of 0, that makes it not possible to initialize i2c structure.

I've test the legace bios code on my Dell, it works. I wonder what kind of card you have, is it a multimedia card?

Not work. But I don't change mask yet.

You want to say that LCD laptop screen has no DDC?

My card is a part of chipset. But in Linux codes there are checks for IGP and for mobility. But several mistakes as in getConnectorsFromBIOS so in I2C for my card.

Link to comment
Share on other sites

You want to say that LCD laptop screen has no DDC?
From your BIOS, it looks like so. Only the CRT connector (port 0) has DDC initialized. You can even test the code by connecting to an external monitor.

If your card is a multimedia card, you may test this code:RadeonDump.c.zip

 

To asstastic and llauqsd, please test this RadeonDump.zipIf it's not working, please use "RadeonDump -d" to dump a BIOS rom and upload it here.

Link to comment
Share on other sites

I may be making an obvious mistake, but I am unable to compile the above file.

 

I get:

i686-apple-darwin9-gcc-4.0.1: ./RadeonDump: No such file or directory

 

and if I put an old radeondump into the directory i get:

 

ld: warning in ./RadeonDump, file is not of required architecture
Undefined symbols:
 "_RADEONGetATOMConnectorInfoFromBIOSObject", referenced from:
  _RADEONGetATOMConnectorInfoFromBIOS in ccdEiofu.o
 "_rhdAtomInit", referenced from:
  _RADEONGetBIOSInfo in ccdEiofu.o
 "_RADEONGetATOMConnectorInfoFromBIOSConnectorTable", referenced from:
  _RADEONGetATOMConnectorInfoFromBIOS in ccdEiofu.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

Link to comment
Share on other sites

I get:
i686-apple-darwin9-gcc-4.0.1: ./RadeonDump: No such file or directory

Sorry that I made a mistake in typing. The compiling instruction should be:

cc ./RadeonDump.c ./xf86i2c.c ./radeon_atombios.c -o ./RadeonDump -framework IOKit -framework CoreFoundation -Wno-four-char-constants -Wall -g -arch i386

Link to comment
Share on other sites

 Share

×
×
  • Create New...