Bug 63860

Summary: [pnv] Phantom LVDS -- Intel D510MO mainboard
Product: DRI Reporter: Andrey <annndddrr>
Component: DRM/IntelAssignee: Jani Nikula <jani.nikula>
Status: CLOSED FIXED QA Contact: Intel GFX Bugs mailing list <intel-gfx-bugs>
Severity: normal    
Priority: medium    
Version: unspecified   
Hardware: x86 (IA32)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:
Attachments:
Description Flags
dmesg, vbiosdump, Xorg.0.log
none
dmidecode
none
Quirk phantom LVDS.
none
drm/i915: don't quirk away LVDS on D510MOV
none
dmi: add support for exact DMI matches in addition to substring matching
none
drm/i915: Quirk away phantom LVDS on Intel's D510MO mainboard v2 none

Description Andrey 2013-04-23 22:58:27 UTC
Created attachment 78403 [details]
dmesg, vbiosdump, Xorg.0.log

I had installed 64-bit Fedora 18 LXDE spin from CD. All installation went well. The display was autoconfigured to 1600x1200 resolution. Can see GRUB boot menu. But when system rebooted and run from HDD the black screen appeared with mouse pointer. Mouse worked fine.
Virtual terminal is available.
Xrandr returns no display was found

I can start X from virtual terminal, but the icons aren't appeared on the left bottom of LXDE desktop.
Comment 1 Chris Wilson 2013-04-24 09:00:47 UTC
Your screen size is 2880x1200. You must use Option AccelMethod "SNA" for that to work.

If you turn off one of monitors (e.g. xrandr -d :0 --output LVDS1 --off) then even UXA will work.
Comment 2 Andrey 2013-04-24 17:38:39 UTC
Chris.

Thank you for your comment. I understand that for some unknown reason resolution was set to 2880x1200. But why?

I have only one monitor attached to the system through the installation and after, besides I have only one connector on the MB for video output - it is VGA 15-pin DSUB (LVDS connector isn't populated) Monitor highest supported resolution is 1600x1200. And this resolution is set correctly at GRUB stage (I see menu and vbeinfo returns 1600x1200). Kernel is configured to load with this resolution too.

Why did X desided to go with 2880x1600 on my system???  How could I make it follow 1600x1200 during boot?
Comment 3 Chris Wilson 2013-04-24 18:27:49 UTC
Ok, so it's a phantom LVDS connection. For the time being, append video=LVDS-1:d to your kernel commandline.

Can you please also grab the output of dmidecode for your system?
Comment 4 Andrey 2013-04-25 00:54:47 UTC
Created attachment 78435 [details]
dmidecode
Comment 5 Andrey 2013-04-25 00:57:21 UTC
appending video=LVDS-1:d seems fixing the issue. System was able to boot in X with correct resolution for external monitor. 

I attached dmidecode
Comment 6 Chris Wilson 2013-04-25 07:03:08 UTC
Well that is odd. It's an Intel mainboard and Intel BIOS that appears broken.
http://ark.intel.com/products/42645/Intel-Desktop-Board-D510MO confirms that there is no LVDS header, nor should there be en embedded version of the board with the same tag (that might actually use the LVDS).

Looks like it might be safe enough for us to quirk...
Comment 7 Chris Wilson 2013-04-25 10:54:11 UTC
Created attachment 78457 [details] [review]
Quirk phantom LVDS.

Can you please try this patch (without video=LVDS-1:d on the commandline)?
Comment 8 Andrey 2013-04-25 19:57:15 UTC
Chris,

Let me share additional info before I try your patch.

D510 motheboards had 2 spins:
D510MOV http://ark.intel.com/products/48478/Intel-Desktop-Board-D510MOV
D510MO  http://ark.intel.com/products/42645/Intel-Desktop-Board-D510MO.
The difference was that on MOV there was LVDS connector populated.
BIOS seems to be the same for both motherboards - latest available version is 0542
https://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&DwnldID=20288&lang=eng&OSVersion=&DownloadType=BIOS

For LVDS there is no any plug-in detection mechanism other than reading EDID through I2C. So, to support a possibility, when both LVDS and VGA or only LVDS is connected to the motherboard, the LVDS EDID read should be executed in default case. It should help to detect complete list of active (means connected) displays. An additional mechanism to suppress output to LVDS or use custom DTD for a specific LVDS panel would be additional advantage to support custom design configurations and speed up boot.
Comment 9 Daniel Vetter 2013-04-25 21:09:23 UTC
Which is pretty much what we do, with the exception that a suprising large bunch of panels don't have EDID support at all. So we also check the vbios as a last resort to figure out whether a panel is there.

And since BIOS are equally cheap&buggy, we throw a quirk table on top to fix the remaining bits. Which for your board here isn't possible, since one version does indeed have an lvds port.

So conclusion: You're unfortunately stuck with the kernel boot parameter, since I see no way to properly make this work in all configurations. My apologies for the sorry state of affairs here.
Comment 10 Andrey 2013-04-26 01:02:58 UTC
I guess I do not agree with this resolution. It is not because I have to work around this by extra kernel option (I did this for my system and it works). It is because the logic looks incorrect. It is irrelevant to this specific motherboard and its bios.

How will your driver work for a buggy free bios and motherboard that support internal LVDS panel and external VGA(or HDMI or DP) panel, when only external monitor was attached? Output the reproduction of famous Kazimir Malevich's Black Square?

BIOS at his end have no chance to detect EDID-less panel too, but on the other hand it should be reliably enough to output BIOS menu for any display configuration. To achieve that, VBIOS orom configures in clone mode to make sure, if any display connected the bios menu will be displayed. This is not a bug. It doesn’t cause problem at bios level and work well in any display configuration. 

In your attempt to rely on BIOS configuration, you have to consider that the one is good for BIOS may not be good for OS driver in all cases.

If  you leave this issue unfixed, it would affect many dual panel motherboard with LVDS
Comment 11 Daniel Vetter 2013-04-26 06:44:47 UTC
Well, the BIOS can't do more probing than what i915.ko can do, that's correct. But the BIOS has a hw description table (called VBT) which the board manufacturer is supposed to fill out, which tells it (and our driver) whether there's and LVDS.

I guess we could just merge the quirk and revert it in case someone else (with the LVDS header configuration) complains that we broke his setup.
Comment 12 Jesse Barnes 2013-04-26 17:04:40 UTC
Yeah why not merge the quirk?  It makes life better on this board, so what's the problem?  Looks like we can differentiate based on the DMI string between the board with and LVDS header and the one without...
Comment 13 Chris Wilson 2013-04-26 20:34:43 UTC
(In reply to comment #12)
> Yeah why not merge the quirk?  It makes life better on this board, so what's
> the problem?  Looks like we can differentiate based on the DMI string
> between the board with and LVDS header and the one without...

Apart from the dmi_match table uses strstr() and so the shorter D510MO will also quirk away the D510MOV...
Comment 14 Jani Nikula 2013-04-30 08:23:06 UTC
Created attachment 78636 [details] [review]
drm/i915: don't quirk away LVDS on D510MOV

(In reply to comment #13)
> (In reply to comment #12)
> > Yeah why not merge the quirk?  It makes life better on this board, so what's
> > the problem?  Looks like we can differentiate based on the DMI string
> > between the board with and LVDS header and the one without...
> 
> Apart from the dmi_match table uses strstr() and so the shorter D510MO will
> also quirk away the D510MOV...

Use your imagination! The attached patch (n.b. not even compile tested) on top of Chris' D510MO quirk patch de-quirks D510MOV. Whether we want such an abomination is another matter. ;)
Comment 15 Daniel Vetter 2013-04-30 08:30:14 UTC
Yeah, that's a workable solution.
Comment 16 Chris Wilson 2013-04-30 08:36:40 UTC
And there I was thinking we should teach the dmi_matcher to be exact where necessary...
Comment 17 Jani Nikula 2013-04-30 10:30:24 UTC
Created attachment 78640 [details] [review]
dmi: add support for exact DMI matches in addition to substring matching

Chris, but that's so conventional and boring and totally the right thing to do! Care to check this patch before I send it off to whichever is the appropriate list, please?
Comment 18 Jani Nikula 2013-04-30 10:33:38 UTC
Created attachment 78642 [details] [review]
drm/i915: Quirk away phantom LVDS on Intel's D510MO mainboard v2

Andrey, please apply this patch and the patch from comment #17 above, and let us know if they fix the problem for you. We'll need that to move on. Thanks.
Comment 19 Jani Nikula 2013-05-06 13:31:44 UTC
Andrey, please try the patches attached in comment #17 and comment #18. Thanks.
Comment 20 Chris Wilson 2013-06-04 21:57:14 UTC
Ping for testing feedback, thanks.
Comment 21 Chris Wilson 2013-06-06 13:26:10 UTC
See bug 65256, it looks like Intel repeated their tricks of making two motherboards (one with and one without lvds) and using the same bios and broken layout. Jani, can you submit those patches along with a third for DMI_EXACT_MATCH(DMI_BOARD_NAME, "D525MW")?
Comment 22 Chris Wilson 2013-07-07 10:18:30 UTC
commit 5017b2851373ee15c7035151853bb1448800cae2
Author: Jani Nikula <jani.nikula@intel.com>
Date:   Wed Jul 3 15:05:02 2013 -0700

    dmi: add support for exact DMI matches in addition to substring matching
Comment 23 Chris Wilson 2013-07-07 10:18:58 UTC
commit e5614f0c2d0f4d7f0b8ef745d34593baf2c5dbf8
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Wed Jul 3 15:05:03 2013 -0700

    drm/i915: quirk away phantom LVDS on Intel's D510MO mainboard

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.