Jump to content

AMD Radeon HD 6650M, The Last Piece Of The Puzzle - EDID Injection with Clover or DSDT (The mistery of the "wrong" LVDS SenseID)


Trucker MK
 Share

38 posts in this topic

Recommended Posts

Those who followed my old thread about the AMD Radeon HD 6650M here already know that until now we were not able to inject custom EDID with Clover or with DSDT injection (needed for the gradients fix) . A while ago i finally solved the Gradients issue with the help from freeuser16 by using Andy Vandijck's FixEDID and DisplayMergeNUB.kext to inject custom EDID  but I always wondered what could be the problem and why Clover/DSDT EDID injection is not working for the 6650M. Few day ago i started to play around again with diferrent Transmitter, Encoder and SenseID values using Clover, of course using Custom EDID injection. Until now i always used Ipomoea or Pondweed patched framebuffer:

02000000400000000901000010000003
00080000000200000001000011020101
10000000100000000001000000000205

based on the decoded VBIOS with radeon_bios_decoder

PCI ID: 1002:6741
Connector at index 0
	Type [@offset 44838]: LVDS (7)
	Encoder [@offset 44842]: INTERNAL_UNIPHY (0x1e)
	i2cid [@offset 44912]: 0x92, OSX senseid: 0x3
Connector at index 1
	Type [@offset 44848]: HDMI-A (11)
	Encoder [@offset 44852]: INTERNAL_UNIPHY1 (0x20)
	i2cid [@offset 44935]: 0x90, OSX senseid: 0x1
Connector at index 2
	Type [@offset 44858]: VGA (1)
	Encoder [@offset 44862]: INTERNAL_KLDSCP_DAC1 (0x15)
	i2cid [@offset 44962]: 0x94, OSX senseid: 0x5

and redsock_bios decoder:

Connector Object Id [14] which is [LVDS]
	encoder obj id [0x1e] which is [INTERNAL_UNIPHY (osx txmit 0x10 [duallink 0x0] enc 0x0)] linkb: false
Connector Object Id [12] which is [HDMI_TYPE_A]
	encoder obj id [0x20] which is [INTERNAL_UNIPHY1 (osx txmit 0x11 [duallink 0x1] enc 0x2)] linkb: false
Connector Object Id [5] which is [VGA]
	encoder obj id [0x15] which is [INTERNAL_KLDSCP_DAC1 (osx txmit 0x00 enc 0x10?)] linkb: false

This time i decided to test few other framebuffers with the same patched framebuffer values i used for Ipomoea and Pondweed. I made the changes in Clover's config.plist (this time i used Cattail) , rebooted (without DisplayMergeNUB.kext) and no suprise at all, when using transmitter/encoder 10/00 and EDID is not injected, i get this:

post-423012-0-08581000-1402671527_thumb.jpg

I decided to go with Fanwort next but this time completly by accident/mistake i somehow used SenseID 0x5 instead of 0x3 (as you can see in the decoded VBIOS, LVDS uses SenseID 0x3), and guess what, finally the custom EDID was injected by Clover and everything was perfect. I opened the config.plist and i saw that i used wrong SenseID for LVDS but it was working perfect. To keep it short, out of curiousity i tried every framebuffer from the AMD6000Controller.kext with default values, and guess what,

Cattail (4) @ 0x167920
LVDS, DP, DP, DP
02000000400000002905000000000005
00040000040300000001000011020101
00040000000100000009100021030202
00040000000100000009100012040303

and

Fanwort (4) @ 0x1679f0	
LVDS, DP, DP, DP
02000000400000002905000000000004
00040000040300000001000011020101
00040000000100000009100021030202
00040000000100000009100012040303

both work with wrong LVDS SenseID and custom  EDID is injected.

 

The next thing i tried, it was using "wrong" SenseID in Ipomoea (i tried with 0x2, 0x4, 0x6, 0x7 and 0x8 - EDID is injected with all off these, except of course with 0x3, which is in the VBIOS. Why? I have no idea.

Today i tried to inject the EDID with DSTD and it also works with this framebuffer: (SenseID 0x4 and probably others, 0x2, 0x5, 0x6, 0x7, 0x8)

02000000400000000901000010000004
00080000000200000001000011020101
10000000100000000001000000000205

and this in your DSDT in Device (PEGP). This is my custom EDID, i have the 17" Display, DisplayProductID 0x289 and DisplayVendorID 0x30e4

                            "AAPL00,override-no-connect", 
                            Buffer (0x80)
                            {
                                /* 0000 */    0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 
                                /* 0008 */    0x06, 0x10, 0x14, 0xA0, 0x00, 0x00, 0x00, 0x00, 
                                /* 0010 */    0x0A, 0x16, 0x01, 0x04, 0x90, 0x26, 0x15, 0x78, 
                                /* 0018 */    0x0A, 0x6F, 0xB1, 0xA7, 0x55, 0x4C, 0x9E, 0x25, 
                                /* 0020 */    0x0C, 0x50, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 
                                /* 0028 */    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 
                                /* 0030 */    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x2F, 0x26, 
                                /* 0038 */    0x40, 0xB8, 0x60, 0x84, 0x0C, 0x30, 0x30, 0x30, 
                                /* 0040 */    0x23, 0x00, 0x7E, 0xD7, 0x10, 0x00, 0x00, 0x19, 
                                /* 0048 */    0x00, 0x00, 0x00, 0xFC, 0x00, 0x43, 0x6F, 0x6C, 
                                /* 0050 */    0x6F, 0x72, 0x20, 0x4C, 0x43, 0x44, 0x0A, 0x20, 
                                /* 0058 */    0x20, 0x20, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 
                                /* 0060 */    0x00, 0x00, 0x4C, 0x47, 0x44, 0x69, 0x73, 0x70, 
                                /* 0068 */    0x6C, 0x61, 0x79, 0x0A, 0x00, 0x00, 0x00, 0xFE, 
                                /* 0070 */    0x00, 0x4C, 0x50, 0x31, 0x37, 0x33, 0x57, 0x44, 
                                /* 0078 */    0x31, 0x2D, 0x54, 0x4C, 0x41, 0x33, 0x00, 0x66
                            }, 

custom EDID for Clover

00FFFFFFFFFFFF00061014A0000000000A160104902615780A6FB1A7554C9E250C5054000000010101010101010101010101010101012F2640B860840C30303023007ED710000019000000FC00436F6C6F72204C43440A202020000000FE000000004C47446973706C61790A000000FE004C503137335744312D544C41330066

This could also work for others who have the gradients issue.

I need someone (maybe you Basss) who uses Clover to test this with VGA, Plug in - Plug Out was not detected properly until now, but maybe with this SenseID we will have some changes.

  • Like 1
Link to comment
Share on other sites

It sleeps like a baby. Computer Sleep/Wake,  Display Sleep/Wake

EDIT 1.

I just double checked, It works with this patched Fanwort framebuffer:

Original

02000000400000002905000000000005000400000403000000010000110201010004000000010000000910002103020200040000000100000009100012040303

Patched

02000000400000000901000010000004000800000002000000010000110201011000000010000000000100000010020500000000000000000000000000000300

I will try with patched Ipomoea in a bit, because i am using Fanwort at the moment.

EDIT 2.

Yep, it works.

  • Like 1
Link to comment
Share on other sites

I've also noticed, that "wrong" senseid values cause positive effects)

 

 

ATOM BIOS Rom:
SubsystemVendorID: 0x1179 SubsystemID: 0xfd12
IOBaseAddress: 0x4000
Filename: BR36889.001
BIOS Bootup Message:
Toshiba Berlin10G PARK M2 XT DDR3 64Mx16 256/512MB

PCI ID: 1002:68e0
Connector at index 0
Type [@offset 45508]: LVDS (7)
Encoder [@offset 45512]: INTERNAL_UNIPHY (0x1e)
i2cid [@offset 45582]: 0x96, OSX senseid: 0x7
Connector at index 1
Type [@offset 45518]: HDMI-A (11)
Encoder [@offset 45522]: INTERNAL_UNIPHY1 (0x20)
i2cid [@offset 45605]: 0x90, OSX senseid: 0x1
Connector at index 2
Type [@offset 45528]: VGA (1)
Encoder [@offset 45532]: INTERNAL_KLDSCP_DAC1 (0x15)
i2cid [@offset 45632]: 0x93, OSX senseid: 0x4

Toshiba Berlin10G PARK M2 XT DDR3 64Mx16 256/512MB

 

On my 5470m if I set senseid to 0x04 for vga output - vga doesn't work at all

if I set for instance 0x03 - it works, but system doesn't react on unplugging vga (always have a mirror display)

Link to comment
Share on other sites

Try different senseid for LVDS with 0x4 or 0x3 for VGA

LVDS and HDMI works flawlessly with values from vbios report.

 

0200 0000 4000 0000 0901 0000 1000 0007 LVDS

0008 0000 0002 0000 0071 0000 1102 0101 HDMI

1000 0000 1000 0000 0000 0000 0010 0204 VGA

 

VGA doesn't work with "proper" 0x04 and works with any other value

Link to comment
Share on other sites

I understand, but maybe using different senseid for LVDS will fix your VGA with 0x4 or some other, doesn't hurt to try, it's easy with Clover.

Edit. By fix your VGA i mean, fix the plugging in and out detection and not able to use as extended desktop, just mirror.

Link to comment
Share on other sites

I changed senseid for LVDS from 0x7 to 0x5, nothing happened to vga

I think that senseid is not the main issue. Who knows what are working values for other properties of personality(features, controlflags..) for vga?

Link to comment
Share on other sites

1000 0000 1000 0000 0000 0000 0000 0204

Try this with senseid which is working for you. With this framebuffer for VGA i can use it as extended desktop/mirror display only if i connect it when i power on my laptop. If my laptop is already running it can't detect it. When i disconnect the VGA,i can still see it in System Preferences/Displays. When i connect it back  it's detected.

(It behaved like this before, i haven't test it now with the "wrong" senseid)

Link to comment
Share on other sites

1000 0000 1000 0000 0000 0000 0000 0204

Try this with senseid which is working for you. With this framebuffer for VGA i can use it as extended desktop/mirror display only if i connect it when i power on my laptop. If my laptop is already running it can't detect it. When i disconnect the VGA,i can still see it in System Preferences/Displays. When i connect it back  it's detected.

(It behaved like this before, i haven't test it now with the "wrong" senseid)

 

Cool. VGA works fine if I boot with plugged cable. Both LVDS and VGA are working. Nice)

 

What I've noticed. All two boots were with plugged VGA cable on cold boot.

Firstly I booted with 1000 0000 1000 0000 0000 0000 0010 0204 - I saw some artifacts on my vga screen. Image was distorted and littly shifted with 1366x768 resolution(like on lvds?).

Secondly I booted with 1000 0000 1000 0000 0000 0000 0000 0204 and all is perfect) But there is no plug/unplug detection(

 

I've also disabled PatchVBIOS  option in clover for any case

I think, that we are missing some value in features property. For HDMI plug/unplug detection we should set 0x71 in features. Will try the same trick in vga personality)

UPD: Not sure if 0x71 in features causes this but...

VGA turns on if I put Laptop in sleep, plug vga and wake. Doesn't matter if you boot with plugged cable or not. There is no system response but it just works.

And if you unplug cable and make sleep/wake laptop again, vga monitor "became disconnected" and disappear from active displays

post-964902-0-45702600-1402687119_thumb.png

Link to comment
Share on other sites

It appears that no matter what I do, I cannot successfully inject the EDID using clover.  Even if I take a known working EDID that's being used in DisplayMergeNub.kext and add to the Clover custom EDID field, I either end up with a completely black screen or a black screen with backlight.  When it's just a black screen, its not recognized at all in ioreg, when it's a black screen + backlight, it is recognized as AppleDisplay.  This is on a Radeon HD 7650M.  Dual link is set to 1 in the Clover configuration.  Any other ideas why this wouldn't work???

Link to comment
Share on other sites

It appears that no matter what I do, I cannot successfully inject the EDID using clover.  Even if I take a known working EDID that's being used in DisplayMergeNub.kext and add to the Clover custom EDID field, I either end up with a completely black screen or a black screen with backlight.  When it's just a black screen, its not recognized at all in ioreg, when it's a black screen + backlight, it is recognized as AppleDisplay.  This is on a Radeon HD 7650M.  Dual link is set to 1 in the Clover configuration.  Any other ideas why this wouldn't work???

 

Try with duallink 0

 

 

Does it show a VGA monitor in the menu bar? I'm not sure if it should, it never did for me since Lion and for HDMI monitors it does..

 

Nope, there is no menu bar option like for HDMI, system only shows that monitor is connected in active displays menu. 

Link to comment
Share on other sites

Now I really got it why EDID is not being injected with senseid 0x3, I just managed to do it :D Tomorrow I will have a VGA monitor to run some tests and I will update my OP if there are changes, my guess is there are gonna be. If anyone with 6650M wants to test it today, let me know. (You need to have VGA and HDMI)

@mmon

Which framebuffer you are patching?

Link to comment
Share on other sites

@mmon

Which framebuffer you are patching?

 

 

Hoolock

Some tests

features bits 00FF in VGA personality doesn't make a difference

features bits FF00 - system doesn't boot at all

Link to comment
Share on other sites

Can you test another framebuffer and see if there are any changes?

Original:

02000000000100000901000012040303000400000406000000710000110201010004000004060000007100002103020200040000040600000071000022050404

Patched:

02000000400000000901000010000307000800000002000000710000110201010004000004060000007100002103020210000000100000000071000000000404

This is Alouatta framebuffer, use AtiPorts=3

Link to comment
Share on other sites

It appears that no matter what I do, I cannot successfully inject the EDID using clover.  Even if I take a known working EDID that's being used in DisplayMergeNub.kext and add to the Clover custom EDID field, I either end up with a completely black screen or a black screen with backlight.  When it's just a black screen, its not recognized at all in ioreg, when it's a black screen + backlight, it is recognized as AppleDisplay.  This is on a Radeon HD 7650M.  Dual link is set to 1 in the Clover configuration.  Any other ideas why this wouldn't work???

The reason why EDID injection works and it works also with "wrong" senseid for me is because in my custom EDID i am using Descriptor Name from MacBook Pro, i just figured this out (my display was recognized as DisplayProductID 0x0a14 and DisplayVendorID 0x610). I tried with my original Descriptor Name and it's not working.

Post your original and custom EDID, i will help you.

  • Like 1
Link to comment
Share on other sites

 Share

×
×
  • Create New...