• Lukas Wunner's avatar
    drm/i915: Preserve SSC earlier · 69f92f67
    Lukas Wunner authored
    Commit 92122789 ("drm/i915: preserve SSC if previously set v3")
    added code to intel_modeset_gem_init to override the SSC status read
    from VBT with the SSC status set by BIOS.
    
    However, intel_modeset_gem_init is invoked *after* intel_modeset_init,
    which calls intel_setup_outputs, which *modifies* SSC status by way of
    intel_init_pch_refclk. So unlike advertised, intel_modeset_gem_init
    doesn't preserve the SSC status set by BIOS but whatever
    intel_init_pch_refclk decided on.
    
    This is a problem on dual gpu laptops such as the MacBook Pro which
    require either a handler to switch DDC lines, or the discrete gpu
    to proxy DDC/AUX communication: Both the handler and the discrete
    gpu may initialize after the i915 driver, and consequently, an LVDS
    connector may initially seem disconnected and the SSC therefore
    is disabled by intel_init_pch_refclk, but on reprobe the connector
    may turn out to be connected and the SSC must then be enabled.
    
    Due to 92122789 however, the SSC is not enabled on reprobe since
    it is assumed BIOS disabled it while in fact it was disabled by
    intel_init_pch_refclk.
    
    Also, because the SSC status is preserved so late, the preserved value
    only ever gets used on resume but not on panel initialization:
    intel_modeset_init calls intel_init_display which indirectly calls
    intel_panel_use_ssc via multiple subroutines, *before* the BIOS value
    overrides the VBT value in intel_modeset_gem_init (intel_panel_use_ssc
    is the sole user of dev_priv->vbt.lvds_use_ssc).
    
    Fix this by moving the code introduced by 92122789 from
    intel_modeset_gem_init to intel_modeset_init before the invocation
    of intel_setup_outputs and intel_init_display.
    
    Add a DRM_DEBUG_KMS as suggested way back by Jani:
    http://lists.freedesktop.org/archives/intel-gfx/2014-June/046666.html
    
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=88861
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=61115Tested-by: default avatarPaul Hordiienko <pvt.gord@gmail.com>
        [MBP  6,2 2010  intel ILK + nvidia GT216  pre-retina]
    Tested-by: default avatarWilliam Brown <william@blackhats.net.au>
        [MBP  8,2 2011  intel SNB + amd turks     pre-retina]
    Tested-by: default avatarLukas Wunner <lukas@wunner.de>
        [MBP  9,1 2012  intel IVB + nvidia GK107  pre-retina]
    Tested-by: default avatarBruno Bierbaumer <bruno@bierbaumer.net>
        [MBP 11,3 2013  intel HSW + nvidia GK107  retina -- work in progress]
    Fixes: 92122789 ("drm/i915: preserve SSC if previously set v3")
    Signed-off-by: default avatarLukas Wunner <lukas@wunner.de>
    Reviewed-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
    Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
    69f92f67
intel_display.c 431 KB