Bug 35904 - [915GM bisected] Spurious inputs detected with drm-intel-fixes
Summary: [915GM bisected] Spurious inputs detected with drm-intel-fixes
Status: CLOSED FIXED
Alias: None
Product: DRI
Classification: Unclassified
Component: DRM/Intel (show other bugs)
Version: XOrg git
Hardware: x86 (IA32) Linux (All)
: medium normal
Assignee: Chris Wilson
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-04-02 03:36 UTC by Sitsofe Wheeler
Modified: 2017-07-24 23:05 UTC (History)
1 user (show)

See Also:
i915 platform:
i915 features:


Attachments
drm.debug=0xe output for 7f58aabc369014fda3a4a33604ba0a1b63b941ac (61.54 KB, text/plain)
2011-04-02 03:53 UTC, Sitsofe Wheeler
no flags Details

Description Sitsofe Wheeler 2011-04-02 03:36:39 UTC
Description of the problem:
When Xorg is started a strange screen resolution is detected and used.

Steps to reproduce:
1. Start EeePC .
2. Let the boot finish so xorg starts.

Expected result:
Screen resolution to be the native panel resolution of 1024x600 (no other inputs are attached). xrandr to return the following:

Screen 0: minimum 320 x 200, current 1024 x 600, maximum 4096 x 4096
LVDS1 connected 1024x600+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
   1024x600       59.5*+
   800x600        85.1     72.2     75.0     60.3     56.2  
   640x480        85.0     72.8     75.0     59.9  
   720x400        85.0  
   640x400        85.1  
   640x350        85.1  
VGA1 disconnected (normal left inverted right x axis y axis)
TV1 disconnected (normal left inverted right x axis y axis)

Actual result:
A strange non-native resolution is selected causing black borders. xrandr returns the following:

Screen 0: minimum 320 x 200, current 800 x 600, maximum 4096 x 4096
LVDS1 connected 800x600+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
   1024x600       59.5 +
   800x600        85.1     72.2     75.0     60.3*    56.2  
   640x480        85.0     72.8     75.0     59.9  
   720x400        85.0  
   640x400        85.1  
   640x350        85.1  
VGA1 connected 800x600+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
   1360x768       59.8  
   1024x768       60.0  
   800x600        60.3*    56.2  
   848x480        60.0  
   640x480        59.9     59.9  
TV1 unknown connection (normal left inverted right x axis y axis)
   848x480        30.0 +
   640x480        30.0 +
   1024x768       30.0  

How reproducible is the problem:
The problem is reproducible every time.

Version information:
EeePC 900
Ubuntu 10.04 (so an old xorg)
Kernel: 7f58aabc369014fda3a4a33604ba0a1b63b941ac (drm-intel-fixes)

Additional information:
This problem does not occur on 2.6.38 or below. A bisection narrowed it down to the following commit:

commit 7f58aabc369014fda3a4a33604ba0a1b63b941ac
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Wed Mar 30 16:20:43 2011 +0100

    drm/i915: Reset GMBUS controller after NAK
    
    Once a NAK has been asserted by the slave, we need to reset the GMBUS
    controller in order to continue. This is done by asserting the Software
    Clear Interrupt bit and then clearing it again to restore operations.
    
    If we don't clear the NAK, then all future GMBUS xfers will fail,
    including DDC probes and EDID retrieval.
    
    v2: Add some comments as suggested by Keith Packard.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=35781
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
    Reviewed-by: Keith Packard <keithp@keithp.com>
    Tested-by: Jesse Barnes <jbarnes@virtuousgeek.org>
    Tested-by: "Mengmeng Meng" <mengmeng.meng@intel.com>


Reverting this makes the problem go away.
Comment 1 Chris Wilson 2011-04-02 03:47:48 UTC
Step 1:

diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
index 8342259..41e41ad 100644
--- a/drivers/gpu/drm/i915/intel_crt.c
+++ b/drivers/gpu/drm/i915/intel_crt.c
@@ -293,9 +293,9 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector)
        if (crt->base.type != INTEL_OUTPUT_ANALOG)
                return false;
 
-       if (intel_crt_ddc_probe(dev_priv, dev_priv->crt_ddc_pin)) {
-               DRM_DEBUG_KMS("CRT detected via DDC:0xa0\n");
-               return true;
+       if (!intel_crt_ddc_probe(dev_priv, dev_priv->crt_ddc_pin)) {
+               DRM_DEBUG_KMS("CRT detected not via DDC:0xa0\n");
+               return false;
        }
 
        if (intel_ddc_probe(&crt->base, dev_priv->crt_ddc_pin)) {
Comment 2 Chris Wilson 2011-04-02 03:49:56 UTC
In fact that a0 probe can simply be removed, since all it does is confirm the existence of the controller not a connection.
Comment 3 Sitsofe Wheeler 2011-04-02 03:53:21 UTC
Created attachment 45156 [details]
drm.debug=0xe output for 7f58aabc369014fda3a4a33604ba0a1b63b941ac

I have a feeling this output won't be needed but I had just gathered it before your most recent messages :)
Comment 4 Chris Wilson 2011-04-02 04:02:49 UTC
And the unknown TV connection is a knock-on effect since we require a spare pipe to perform load-detection. (Without which the connection status is simply unknown.)
Comment 5 Sitsofe Wheeler 2011-04-02 04:08:57 UTC
Wham! And the problem's fixed with the patch in comment #1. You're fast Chris! Do you need debug output too?
Could "CRT detected not via DDC:0xa0\n" be better worded as "CRT absent via DDC:0xa0\n"?

Tested-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Comment 6 Chris Wilson 2011-04-02 23:30:51 UTC
I just need to work out if there is some permutation of the 0xa0 probe that has merit, or whether to simply remove it. I think removing it is simplest and so rely on EDID retrieval.
Comment 7 Chris Wilson 2011-04-05 23:28:41 UTC
linus commit 0de009c900e7ebd21097797f723a40813e953879
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Tue Apr 5 16:04:39 2011 +0100

    drm/i915/crt: Remove 0xa0 probe for VGA
    
    This is a moral revert of 6ec3d0c0e9c0c605696e91048eebaca7b0c36695.


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.