linux/drivers/gpu/drm/i915
Lukas Wunner 69f92f67b6 drm/i915: Preserve SSC earlier
Commit 92122789b2 ("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 92122789b2 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 92122789b2 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=61115
Tested-by: Paul Hordiienko <pvt.gord@gmail.com>
    [MBP  6,2 2010  intel ILK + nvidia GT216  pre-retina]
Tested-by: William Brown <william@blackhats.net.au>
    [MBP  8,2 2011  intel SNB + amd turks     pre-retina]
Tested-by: Lukas Wunner <lukas@wunner.de>
    [MBP  9,1 2012  intel IVB + nvidia GK107  pre-retina]
Tested-by: Bruno Bierbaumer <bruno@bierbaumer.net>
    [MBP 11,3 2013  intel HSW + nvidia GK107  retina -- work in progress]
Fixes: 92122789b2 ("drm/i915: preserve SSC if previously set v3")
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
2015-09-01 09:38:49 +03:00
..
dvo.h
dvo_ch7xxx.c
dvo_ch7017.c
dvo_ivch.c
dvo_ns2501.c
dvo_sil164.c
dvo_tfp410.c
i915_cmd_parser.c drm/i915: Fix command parser table validator 2015-07-29 10:31:04 +02:00
i915_debugfs.c drm/i915/skl: Adding DDI_E power well domain 2015-08-31 18:40:48 +03:00
i915_dma.c drm/i915: Fake AGP is dead 2015-07-28 13:30:00 +02:00
i915_drv.c drm/i915: apply the PCI_D0/D3 hibernation workaround everywhere on pre GEN6 2015-08-31 18:18:51 +03:00
i915_drv.h drm/i915/skl: Adding DDI_E power well domain 2015-08-31 18:40:48 +03:00
i915_gem.c drm/i915: Keep the mm.bound_list in rough LRU order 2015-07-28 16:05:41 +02:00
i915_gem_batch_pool.c
i915_gem_batch_pool.h
i915_gem_context.c drm/i915: Remove the failed context from the fpriv->context_idr 2015-08-14 17:50:41 +02:00
i915_gem_debug.c
i915_gem_dmabuf.c drm/i915: remove unused has_dma_mapping flag 2015-07-13 22:42:41 +02:00
i915_gem_evict.c
i915_gem_execbuffer.c Merge tag 'drm-intel-fixes-2015-07-15' into drm-intel-next-queued 2015-07-15 16:36:50 +02:00
i915_gem_fence.c drm/i915: kerneldoc for tiling IOCTL and swizzle functions 2015-07-27 10:26:30 +02:00
i915_gem_gtt.c Linux 4.2-rc7 2015-08-17 14:13:53 +10:00
i915_gem_gtt.h
i915_gem_render_state.c drm/i915: Add provision to extend Golden context batch 2015-07-21 09:30:57 +02:00
i915_gem_render_state.h drm/i915: Add provision to extend Golden context batch 2015-07-21 09:30:57 +02:00
i915_gem_shrinker.c
i915_gem_stolen.c drm/i915: Fix build warning on 32-bit 2015-08-26 10:15:36 +03:00
i915_gem_tiling.c Merge tag 'drm-intel-fixes-2015-08-14' into drm-intel-next-fixes 2015-08-14 18:11:30 +02:00
i915_gem_userptr.c drm/i915: avoid leaking DMA mappings 2015-07-13 22:42:40 +02:00
i915_gpu_error.c drm/i915: Report IOMMU enabled status for GPU hangs 2015-08-14 17:50:41 +02:00
i915_guc_reg.h drm/i915: Add GuC-related header files 2015-07-21 08:38:00 +02:00
i915_ioc32.c Merge tag 'drm-intel-fixes-2015-07-15' into drm-intel-next-queued 2015-07-15 16:36:50 +02:00
i915_irq.c drm/i915/skl: enable DDI-E hotplug 2015-08-26 10:24:25 +03:00
i915_params.c drm/i915: Add GuC-related module parameters 2015-07-21 08:37:35 +02:00
i915_reg.h drm/i915/skl: enable DDI-E hotplug 2015-08-26 10:24:25 +03:00
i915_suspend.c drm/i915: use dev_priv for the FBC functions 2015-07-08 11:39:45 +02:00
i915_sysfs.c
i915_trace.h Merge tag 'drm-intel-fixes-2015-07-15' into drm-intel-next-queued 2015-07-15 16:36:50 +02:00
i915_trace_points.c
i915_vgpu.c
i915_vgpu.h
intel_acpi.c
intel_atomic.c drm/i915: Commit planes on each crtc separately. 2015-08-13 12:09:18 +03:00
intel_atomic_plane.c
intel_audio.c Merge tag 'drm-intel-fixes-2015-07-15' into drm-intel-next-queued 2015-07-15 16:36:50 +02:00
intel_bios.c drm/i915/skl: Enable DDI-E 2015-08-31 18:28:09 +03:00
intel_bios.h drm/i915: eDP can be present on DDI-E 2015-08-31 18:36:38 +03:00
intel_crt.c drm/i915: Get rid of dpms handling. 2015-08-14 17:50:33 +02:00
intel_csr.c drm/i915/gen9: Removed byte swapping for csr firmware 2015-08-05 11:00:04 +02:00
intel_ddi.c drm/i915/skl: Update DDI buffer translation programming. 2015-08-26 09:55:48 +03:00
intel_display.c drm/i915: Preserve SSC earlier 2015-09-01 09:38:49 +03:00
intel_dp.c drm/i915: eDP can be present on DDI-E 2015-08-31 18:36:38 +03:00
intel_dp_mst.c Merge tag 'drm-intel-next-fixes-2015-08-16' of git://anongit.freedesktop.org/drm-intel into drm-next 2015-08-17 14:14:44 +10:00
intel_drv.h Merge tag 'drm-intel-next-fixes-2015-08-16' of git://anongit.freedesktop.org/drm-intel into drm-next 2015-08-17 14:14:44 +10:00
intel_dsi.c drm/i915: Get rid of dpms handling. 2015-08-14 17:50:33 +02:00
intel_dsi.h drm/i915: Use the CRC gpio for panel enable/disable 2015-07-21 09:22:43 +02:00
intel_dsi_panel_vbt.c
intel_dsi_pll.c drm/i915: Changes required to enable DSI Video Mode on CHT 2015-07-03 07:39:02 +02:00
intel_dvo.c drm/i915: Get rid of dpms handling. 2015-08-14 17:50:33 +02:00
intel_fbc.c drm/i915: fix FBC frontbuffer tracking flushing code 2015-08-05 09:59:44 +02:00
intel_fbdev.c drm/i915: Use new drm_fb_helper functions 2015-08-06 14:13:05 +02:00
intel_fifo_underrun.c
intel_frontbuffer.c drm/i915: fix FBC frontbuffer tracking flushing code 2015-08-05 09:59:44 +02:00
intel_guc_fwif.h drm/i915: Add GuC-related header files 2015-07-21 08:38:00 +02:00
intel_hdmi.c drm/i915: Enable HDMI on DDI-E 2015-08-31 18:27:02 +03:00
intel_hotplug.c drm/i915/skl: enable DDI-E hotplug 2015-08-26 10:24:25 +03:00
intel_i2c.c
intel_lrc.c Linux 4.2-rc8 2015-08-24 16:36:42 +10:00
intel_lrc.h drm/i915: Added Programming of the MOCS 2015-07-14 17:13:14 +02:00
intel_lvds.c drm/i915: Get rid of dpms handling. 2015-08-14 17:50:33 +02:00
intel_mocs.c drm/i915: Added Programming of the MOCS 2015-07-14 17:13:14 +02:00
intel_mocs.h drm/i915: Added Programming of the MOCS 2015-07-14 17:13:14 +02:00
intel_modes.c
intel_opregion.c Merge tag 'drm-intel-fixes-2015-07-15' into drm-intel-next-queued 2015-07-15 16:36:50 +02:00
intel_overlay.c
intel_panel.c drm/i915: Backlight control using CRC PMIC based PWM driver 2015-07-21 09:22:48 +02:00
intel_pm.c Merge tag 'topic/drm-misc-2015-07-28' into drm-intel-next-queued 2015-08-06 14:27:09 +02:00
intel_psr.c drm/i915: VLV/CHV PSR: Increase wait delay time before active PSR. 2015-08-05 10:07:44 +02:00
intel_renderstate.h
intel_renderstate_gen6.c
intel_renderstate_gen7.c
intel_renderstate_gen8.c
intel_renderstate_gen9.c
intel_ringbuffer.c drm/i915: Contain the WA_REG macro 2015-08-14 17:50:42 +02:00
intel_ringbuffer.h Merge tag 'drm-intel-fixes-2015-07-15' into drm-intel-next-queued 2015-07-15 16:36:50 +02:00
intel_runtime_pm.c drm/i915/skl: Adding DDI_E power well domain 2015-08-31 18:40:48 +03:00
intel_sdvo.c drm/i915: Get rid of dpms handling. 2015-08-14 17:50:33 +02:00
intel_sdvo_regs.h
intel_sideband.c
intel_sprite.c drm/i915: always disable irqs in intel_pipe_update_start 2015-07-15 15:06:02 +02:00
intel_tv.c drm/i915: Get rid of dpms handling. 2015-08-14 17:50:33 +02:00
intel_uncore.c Linux 4.2-rc7 2015-08-17 14:13:53 +10:00
Kconfig drm/i915: Use CONFIG_DRM_FBDEV_EMULATION 2015-08-11 14:00:29 +02:00
Makefile Merge tag 'drm-intel-next-fixes-2015-08-16' of git://anongit.freedesktop.org/drm-intel into drm-next 2015-08-17 14:14:44 +10:00