0xdeadbeef Posted April 19, 2011 Share Posted April 19, 2011 Thanks to great work by bcc9, mucha, dong and everyone else, things are moving with regard to the newer ati framebuffers. I was wondering if there is anyone out there with older cards like me (HD Mobility 2400) that might be interested in trying to get the older framebuffers working with this new information. The newer cards have the transmitter and encoder as separate units, but in the older cards these are one unit. here is the personality table from Iago: 02 00 00 00 40 00 00 00 09 00 00 00 00 01 01 12 00 10 00 00 16 00 00 00 C4 00 00 00 10 00 02 11 This corresponds with the dumps from an iMac 2400XT vbios: dump from bcc9's tool: ATOM BIOS Rom: SubsystemVendorID: 0x106b SubsystemID: 0x0084 IOBaseAddress: 0x0000 Filename: 13B22505.011 BIOS Bootup Message: 113-B22505-011 M74 GDDR3_16Mx32 64bit 128MB 650e/800m PCI ID: 1002:94c8 Connector at index 0 Type [@offset 44716]: DVI-I (2) Encoder [@offset 44720]: INTERNAL_KLDSCP_DAC1 (0x15) i2cid [@offset 44782]: 0x90, OSX senseid: 0x1 Connector at index 1 Type [@offset 44726]: DVI-I (2) Encoder [@offset 44730]: INTERNAL_KLDSCP_TMDS1 (0x13) i2cid [@offset 44782]: 0x90, OSX senseid: 0x1 Connector at index 2 Type [@offset 44736]: LVDS (7) Encoder [@offset 44740]: INTERNAL_LVTM1 (0xf) i2cid [@offset 44825]: 0x91, OSX senseid: 0x2 Connector at index 3 Type [@offset 44746]: DVI-I (2) Encoder [@offset 44750]: INTERNAL_KLDSCP_DAC2 (0x16) and from redsock_bios_decoder: 13B22505.011: 113-B22505-011 M74 GDDR3_16Mx32 64bit 128MB 650e/800m Subsystem Vendor ID: 106b Subsystem ID: 84 Object Header Structure Size: 208 Connector Object Table Offset: 3c Router Object Table Offset: 0 Encoder Object Table Offset: 94 Display Path Table Offset: 10 Connector Object Id [1] which is [DVI_I] encoder obj id [0x15] which is [INTERNAL_KLDSCP_DAC1 (osx txmit 0x00 enc 0x10?)] linkb: false Connector Object Id [1] which is [DVI_I] encoder obj id [0x13] which is [INTERNAL_KLDSCP_TMDS1] linkb: false Connector Object Id [14] which is [LVDS] encoder obj id [0xf] which is [INTERNAL_LVTM1] linkb: false Connector Object Id [1] which is [DVI_I] encoder obj id [0x16] which is [INTERNAL_KLDSCP_DAC2] linkb: false And here are the dumps from my 2400 mobility bcc9: ATOM BIOS Rom: SubsystemVendorID: 0x1179 SubsystemID: 0xff00 IOBaseAddress: 0x0000 Filename: BR26685.BIN BIOS Bootup Message: Minnesota M72M GDDR2 128/256M 400m/450e PCI ID: 1002:94c9 Connector at index 0 Type [@offset 44480]: VGA (1) Encoder [@offset 44484]: INTERNAL_KLDSCP_DAC1 (0x15) i2cid [@offset 44560]: 0x90, OSX senseid: 0x1 Connector at index 1 Type [@offset 44490]: HDMI-A (11) Encoder [@offset 44494]: INTERNAL_KLDSCP_TMDS1 (0x13) i2cid [@offset 44583]: 0x91, OSX senseid: 0x2 Connector at index 2 Type [@offset 44500]: 9 pin DIN (9) Encoder [@offset 44504]: INTERNAL_KLDSCP_DAC2 (0x16) Connector at index 3 Type [@offset 44510]: LVDS (7) Encoder [@offset 44514]: INTERNAL_LVTM1 (0xf) i2cid [@offset 44637]: 0x14, OSX senseid: 0x5 and radeon_bios_dump: BR26685.BIN : Minnesota M72M GDDR2 128/256M 400m/450e Subsystem Vendor ID: 1179 Subsystem ID: ff00 Object Header Structure Size: 256 Connector Object Table Offset: 3c Router Object Table Offset: 0 Encoder Object Table Offset: c4 Display Path Table Offset: 10 Connector Object Id [5] which is [VGA] encoder obj id [0x15] which is [INTERNAL_KLDSCP_DAC1 (osx txmit 0x00 enc 0x10?)] linkb: false Connector Object Id [12] which is [HDMI_TYPE_A] encoder obj id [0x13] which is [INTERNAL_KLDSCP_TMDS1] linkb: false Connector Object Id [15] which is [DIN] encoder obj id [0x16] which is [INTERNAL_KLDSCP_DAC2] linkb: false Connector Object Id [14] which is [LVDS] encoder obj id [0xf] which is [INTERNAL_LVTM1] linkb: false And RadeonDump output for my card (internal only connected): [RadeonHD]: rhdAtomConnectorInfo [RadeonHD]: rhdAtomConnectorInfoFromObjectHeader [RadeonHD]: ObjectTable - size: 252, BIOS - size: 65536 TableOffset: 60 object_header_end: 312 [RadeonHD]: Object: ID: 3105 name: VGA type: 3 id: 5 [RadeonHD]: rhdAtomGetConnectorID [RadeonHD]: * SrcObject: ID: 2115 name: INTERNAL_KLDSCP_DAC1 enum: 1 [RadeonHD]: - Record Type: 1 [RadeonHD]: rhdAtomDDCFromI2CRecord: I2C Record: HW_Line[0] EngineID: 1 I2CAddr: 0 [RadeonHD]: rhdAtomGetDDCIndex [RadeonHD]: Found DDC GPIO Index: 0 [RadeonHD]: - Record Type: 4 [RadeonHD]: rhdAtomDeviceTagsFromRecord [RadeonHD]: NumberOfDevice: 1 [RadeonHD]: Devices: CRT1 [RadeonHD]: Object: ID: 310c name: HDMI_TYPE_A type: 3 id: c [RadeonHD]: rhdAtomGetConnectorID [RadeonHD]: * SrcObject: ID: 2113 name: INTERNAL_KLDSCP_TMDS1 enum: 1 [RadeonHD]: - Record Type: 1 [RadeonHD]: rhdAtomDDCFromI2CRecord: I2C Record: HW_Line[1] EngineID: 1 I2CAddr: 0 [RadeonHD]: rhdAtomGetDDCIndex [RadeonHD]: Found DDC GPIO Index: 1 [RadeonHD]: - Record Type: 2 [RadeonHD]: rhdAtomHPDFromRecord: HPD Record: GPIO ID: 6 Plugged_PinState: 0 [RadeonHD]: rhdAtomParseGPIOLutForHPD [RadeonHD]: rhdAtomParseGPIOLutForHPD: GPIO PinID: 6 Index: 1fa5 Shift: 0 [RadeonHD]: - Record Type: 4 [RadeonHD]: rhdAtomDeviceTagsFromRecord [RadeonHD]: NumberOfDevice: 1 [RadeonHD]: Devices: DFP1 [RadeonHD]: Object: ID: 310f name: 7PIN_DIN type: 3 id: f [RadeonHD]: rhdAtomGetConnectorID [RadeonHD]: * SrcObject: ID: 2116 name: INTERNAL_KLDSCP_DAC2 enum: 1 [RadeonHD]: - Record Type: 4 [RadeonHD]: rhdAtomDeviceTagsFromRecord [RadeonHD]: NumberOfDevice: 2 [RadeonHD]: Devices: TV1 CV [RadeonHD]: Object: ID: 310e name: LVDS type: 3 id: e [RadeonHD]: rhdAtomGetConnectorID [RadeonHD]: * SrcObject: ID: 210f name: INTERNAL_LVTM1 enum: 1 [RadeonHD]: - Record Type: 1 [RadeonHD]: rhdAtomDDCFromI2CRecord: I2C Record: GPIO_ID[4] EngineID: 1 I2CAddr: 0 [RadeonHD]: rhdAtomGetDDCIndex [RadeonHD]: Found DDC GPIO Index: 4 [RadeonHD]: - Record Type: 4 [RadeonHD]: rhdAtomDeviceTagsFromRecord [RadeonHD]: NumberOfDevice: 1 [RadeonHD]: Devices: LCD1 [RadeonHD]: Connector[0] {RHD_CONNECTOR_VGA, "VGA CRT1", RHD_DDC_0, RHD_HPD_NONE, { RHD_OUTPUT_DACA, RHD_OUTPUT_NONE } } [RadeonHD]: Connector[1] {RHD_CONNECTOR_DVI_SINGLE, "HDMI_TYPE_A DFP1", RHD_DDC_1, RHD_HPD_0, { RHD_OUTPUT_TMDSA, RHD_OUTPUT_NONE } } [RadeonHD]: Connector[2] {RHD_CONNECTOR_TV, "7PIN_DIN TV1 CV", RHD_DDC_NONE, RHD_HPD_NONE, { RHD_OUTPUT_DACB, RHD_OUTPUT_NONE } } [RadeonHD]: Connector[3] {RHD_CONNECTOR_PANEL, "LVDS LCD1", RHD_DDC_4, RHD_HPD_NONE, { RHD_OUTPUT_LVTMA, RHD_OUTPUT_NONE } } [RadeonHD]: Call to AtomBIOS Get Connectors succeeded [RadeonHD]: RHDHPDSave [RadeonHD]: RHDHPDSet [RadeonHD]: RHDConnectorsInit: 0 (VGA CRT1) type 1, ddc 0, hpd 0 [RadeonHD]: RHDI2CFunc [RadeonHD]: RHDDACAInit [RadeonHD]: RHDOutputAdd [RadeonHD]: Attaching Output DAC A to Connector VGA 1 [RadeonHD]: RHDConnectorsInit: 1 (HDMI_TYPE_A DFP1) type 3, ddc 1, hpd 1 [RadeonHD]: RHDI2CFunc [RadeonHD]: RHDTMDSAInit [RadeonHD]: RHDHdmiInit [RadeonHD]: RHDOutputAdd [RadeonHD]: Attaching Output TMDS A to Connector DVI-D 1 [RadeonHD]: RHDConnectorsInit: 2 (7PIN_DIN TV1 CV) type 5, ddc 255, hpd 0 [RadeonHD]: RHDDACBInit [RadeonHD]: RHDOutputAdd [RadeonHD]: Attaching Output DAC B to Connector TV 7PIN_DIN [RadeonHD]: RHDConnectorsInit: 3 (LVDS LCD1) type 4, ddc 4, hpd 0 [RadeonHD]: RHDI2CFunc [RadeonHD]: RHDLVTMAInit [RadeonHD]: RHDAtomBiosFunc [RadeonHD]: rhdAtomLvdsInfoQuery ..... Listing modesetting layout: [RadeonHD]: CRTC 1: tied to PLL 1 and LUT A: [RadeonHD]: Outputs: LVDS (PANEL)[RadeonHD]: [RadeonHD]: CRTC 2: unused [RadeonHD]: Unused Outputs: DAC A[RadeonHD]: , TMDS A[RadeonHD]: , DAC B[RadeonHD]: [RadeonHD]: RHDModesPoolCreate [RadeonHD]: rhdCreateModesListAndValidate [RadeonHD]: Validating Modes from Monitor "LVDS Panel" on "PANEL" I have tried many different combinations of sense_id and encoder id without success, but the i2cid and sense from my own vbios appears to be weird with regard to the iMac one, as if it is obtained by a different method. If anyone else is prepared to help investigate this further, I'd like to hear your results, if any. One more thing: I'm not sure if having a dual-link 1440x900 lvds panel has some bearing on this: any thoughts? Link to comment Share on other sites More sharing options...
netkas Posted April 19, 2011 Share Posted April 19, 2011 Hey, still has that lappy with mob 2400 ? Link to comment Share on other sites More sharing options...
0xdeadbeef Posted April 20, 2011 Author Share Posted April 20, 2011 Hey, still has that lappy with mob 2400 ? Yeah netkas. I'm poor, but I never give up :-) Link to comment Share on other sites More sharing options...
crazybirdy Posted April 21, 2011 Share Posted April 21, 2011 Yeah netkas. I'm poor, but I never give up :-) Misha Vakulich's HD 4650m works with 1600x900 (QE/CI). Check this. Link to comment Share on other sites More sharing options...
0xdeadbeef Posted April 21, 2011 Author Share Posted April 21, 2011 Misha Vakulich's HD 4650m works with 1600x900 (QE/CI). Check this. Thanks crazybirdy - yes the dual-link dsdt edit is next on my agenda. In all the patching and messing around with Iago and Wormy framebuffers over the years, I've never managed to actually get the panel detected at all. My guess is the newer personalities are pretty much useless for these older cards because of the old cards' hard-coded transmitter/encoder layout. But you never know if you'll get lucky. Link to comment Share on other sites More sharing options...
0xdeadbeef Posted May 3, 2011 Author Share Posted May 3, 2011 Mobility HD2400 10.6.7 Well now, no luck with getting the sense to detect my internal LCD at all, so I have abandoned personality editing for the moment. BUT! First the good news: I managed to get my internal to switch on at full resolution using Iago at last! Here's how: Using ATY_Init and 10.6.7 kexts Add your EDID to key AAPL00,override-no-connect ( This causes the framebuffer to completely ignore the first entry in the connector table) @0,override-no-connect will NOT work. My colours were all messed up, setting @0,display-link-component-bits to 6 fixed this. Now the bad news: I'm still getting a random black flicker every 1/2 to 1 second: playing with inverter and backlight settings doesn't seem to have any effect,and X2000 gives me a white screen with a mangled square cursor. Wonder if the flicker is due to AppleDisplay being loaded instead of AppleBacklightDisplay, or a PM prob, or if I need some more injector values like display-power-sequence, etc. Any ideas? Link to comment Share on other sites More sharing options...
0xdeadbeef Posted May 5, 2011 Author Share Posted May 5, 2011 Ok doesn't look like anyone is paying attention, but I'll write this here for the record anyway The DDC sense for ATIFramebuffer is proxied through the ATIXXXXContoller - when the connector info is read from the table, the sense id is sent off to DDCProxy with a pointer to the card controller. To find a list of possible sense id's for your card, look in your controller kext for function: RVXXXSharedController::hwGetSenseConfig(). Here is the one from ATI2400Controller: RV610SharedController::hwGetSenseConfig(unsigned long, SenseDataInfo &) proc near __text:0001A364 ; CODE XREF: RV610SharedController::getSenseData(ulong)+1Cp __text:0001A364 ; RV610SharedController::setSenseData(ulong,uchar)+27p ... __text:0001A364 __text:0001A364 arg_4 = dword ptr 0Ch __text:0001A364 arg_8 = dword ptr 10h __text:0001A364 __text:0001A364 push ebp __text:0001A365 mov ebp, esp __text:0001A367 mov eax, [ebp+arg_8] __text:0001A36A mov dword ptr [eax+18h], 1 __text:0001A371 mov dword ptr [eax+20h], 100h __text:0001A378 mov dword ptr [eax+1Ch], 1 __text:0001A37F mov dword ptr [eax+24h], 100h __text:0001A386 mov dword ptr [eax+10h], 101h __text:0001A38D mov dword ptr [eax+14h], 0 __text:0001A394 mov edx, [ebp+arg_4] __text:0001A397 and edx, 0Fh ; MASK OUT HARDWARE ASSIST FLAG __text:0001A39A cmp edx, 7 ; switch 8 cases __text:0001A39D ja short loc_1A3A6; default __text:0001A39D ; jumptable 0001A39F cases 0,5,6 ; DO NOTHING INVALID SENSE IDs __text:0001A39F jmp ds:off_61CE0[edx*4]; switch jump __text:0001A3A6 __text:0001A3A6 loc_1A3A6: __text:0001A3A6 mov eax, 0E00002F0h; default __text:0001A3A6 ; jumptable 0001A39F cases 0,5,6 SENSE IDs 0,5,6 __text:0001A3AB jmp locret_1A46E __text:0001A3B0; --------------------------------------------------------------------------- __text:0001A3B0 __text:0001A3B0 loc_1A3B0: __text:0001A3B0 mov dword ptr [eax], 7E48h; jumptable 0001A39F case 1 SENSE ID 1 __text:0001A3B6 mov dword ptr [eax+4], 7E40h __text:0001A3BD mov dword ptr [eax+8], 7E44h __text:0001A3C4 mov dword ptr [eax+0Ch], 7E4Ch __text:0001A3CB jmp loc_1A46C __text:0001A3D0; --------------------------------------------------------------------------- __text:0001A3D0 __text:0001A3D0 loc_1A3D0: __text:0001A3D0 mov dword ptr [eax], 7E58h; jumptable 0001A39F case 2 SENSE ID 2 __text:0001A3D6 mov dword ptr [eax+4], 7E50h __text:0001A3DD mov dword ptr [eax+8], 7E54h __text:0001A3E4 mov dword ptr [eax+0Ch], 7E5Ch __text:0001A3EB jmp short loc_1A46C __text:0001A3ED; --------------------------------------------------------------------------- __text:0001A3ED __text:0001A3ED loc_1A3ED: __text:0001A3ED mov dword ptr [eax], 7E68h; jumptable 0001A39F case 3 SENSE ID 3 __text:0001A3F3 mov dword ptr [eax+4], 7E60h __text:0001A3FA mov dword ptr [eax+8], 7E64h __text:0001A401 mov dword ptr [eax+0Ch], 7E6Ch __text:0001A408 jmp short loc_1A46C __text:0001A40A; --------------------------------------------------------------------------- __text:0001A40A __text:0001A40A loc_1A40A: __text:0001A40A mov dword ptr [eax], 7E08h; jumptable 0001A39F case 4 SENSE ID 4 __text:0001A410 mov dword ptr [eax+4], 7E00h __text:0001A417 mov dword ptr [eax+8], 7E04h __text:0001A41E mov dword ptr [eax+0Ch], 7E0Ch __text:0001A425 jmp short loc_1A46C __text:0001A427; --------------------------------------------------------------------------- __text:0001A427 __text:0001A427 loc_1A427: __text:0001A427 mov dword ptr [eax], 0AC8h; jumptable 0001A39F case 7 SENSE ID 7 __text:0001A42D mov dword ptr [eax+4], 0AC0h __text:0001A434 mov dword ptr [eax+8], 0AC4h __text:0001A43B mov dword ptr [eax+0Ch], 0ACCh __text:0001A442 mov dword ptr [eax+18h], 1 __text:0001A449 mov dword ptr [eax+20h], 2 __text:0001A450 mov dword ptr [eax+1Ch], 1 __text:0001A457 mov dword ptr [eax+24h], 2 __text:0001A45E mov dword ptr [eax+10h], 3 __text:0001A465 mov dword ptr [eax+14h], 0 __text:0001A46C __text:0001A46C loc_1A46C: __text:0001A46C xor eax, eax __text:0001A46E __text:0001A46E locret_1A46E: __text:0001A46E leave __text:0001A46F retn __text:0001A46F RV610SharedController::hwGetSenseConfig(unsigned long, SenseDataInfo &) endp Now it just so happens, SENSE ID 7 is what works to detect my panel ( The ROM utilities returned 0x5 for sense_id which is totally wrong) Hope this info helps. Link to comment Share on other sites More sharing options...
Recommended Posts