diff options
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index a5cddcd6d3e0..ca9278be49f7 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -14740,6 +14740,24 @@ void intel_modeset_init(struct drm_device *dev) | |||
14740 | if (INTEL_INFO(dev)->num_pipes == 0) | 14740 | if (INTEL_INFO(dev)->num_pipes == 0) |
14741 | return; | 14741 | return; |
14742 | 14742 | ||
14743 | /* | ||
14744 | * There may be no VBT; and if the BIOS enabled SSC we can | ||
14745 | * just keep using it to avoid unnecessary flicker. Whereas if the | ||
14746 | * BIOS isn't using it, don't assume it will work even if the VBT | ||
14747 | * indicates as much. | ||
14748 | */ | ||
14749 | if (HAS_PCH_IBX(dev) || HAS_PCH_CPT(dev)) { | ||
14750 | bool bios_lvds_use_ssc = !!(I915_READ(PCH_DREF_CONTROL) & | ||
14751 | DREF_SSC1_ENABLE); | ||
14752 | |||
14753 | if (dev_priv->vbt.lvds_use_ssc != bios_lvds_use_ssc) { | ||
14754 | DRM_DEBUG_KMS("SSC %sabled by BIOS, overriding VBT which says %sabled\n", | ||
14755 | bios_lvds_use_ssc ? "en" : "dis", | ||
14756 | dev_priv->vbt.lvds_use_ssc ? "en" : "dis"); | ||
14757 | dev_priv->vbt.lvds_use_ssc = bios_lvds_use_ssc; | ||
14758 | } | ||
14759 | } | ||
14760 | |||
14743 | intel_init_display(dev); | 14761 | intel_init_display(dev); |
14744 | intel_init_audio(dev); | 14762 | intel_init_audio(dev); |
14745 | 14763 | ||
@@ -15299,7 +15317,6 @@ err: | |||
15299 | 15317 | ||
15300 | void intel_modeset_gem_init(struct drm_device *dev) | 15318 | void intel_modeset_gem_init(struct drm_device *dev) |
15301 | { | 15319 | { |
15302 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
15303 | struct drm_crtc *c; | 15320 | struct drm_crtc *c; |
15304 | struct drm_i915_gem_object *obj; | 15321 | struct drm_i915_gem_object *obj; |
15305 | int ret; | 15322 | int ret; |
@@ -15308,16 +15325,6 @@ void intel_modeset_gem_init(struct drm_device *dev) | |||
15308 | intel_init_gt_powersave(dev); | 15325 | intel_init_gt_powersave(dev); |
15309 | mutex_unlock(&dev->struct_mutex); | 15326 | mutex_unlock(&dev->struct_mutex); |
15310 | 15327 | ||
15311 | /* | ||
15312 | * There may be no VBT; and if the BIOS enabled SSC we can | ||
15313 | * just keep using it to avoid unnecessary flicker. Whereas if the | ||
15314 | * BIOS isn't using it, don't assume it will work even if the VBT | ||
15315 | * indicates as much. | ||
15316 | */ | ||
15317 | if (HAS_PCH_IBX(dev) || HAS_PCH_CPT(dev)) | ||
15318 | dev_priv->vbt.lvds_use_ssc = !!(I915_READ(PCH_DREF_CONTROL) & | ||
15319 | DREF_SSC1_ENABLE); | ||
15320 | |||
15321 | intel_modeset_init_hw(dev); | 15328 | intel_modeset_init_hw(dev); |
15322 | 15329 | ||
15323 | intel_setup_overlay(dev); | 15330 | intel_setup_overlay(dev); |