diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_display.c')
| -rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 981b1f1c04d8..e77a863a3833 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
| @@ -2933,7 +2933,8 @@ static void ironlake_pch_enable(struct drm_crtc *crtc) | |||
| 2933 | 2933 | ||
| 2934 | /* For PCH DP, enable TRANS_DP_CTL */ | 2934 | /* For PCH DP, enable TRANS_DP_CTL */ |
| 2935 | if (HAS_PCH_CPT(dev) && | 2935 | if (HAS_PCH_CPT(dev) && |
| 2936 | intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT)) { | 2936 | (intel_pipe_has_type(crtc, INTEL_OUTPUT_DISPLAYPORT) || |
| 2937 | intel_pipe_has_type(crtc, INTEL_OUTPUT_EDP))) { | ||
| 2937 | u32 bpc = (I915_READ(PIPECONF(pipe)) & PIPE_BPC_MASK) >> 5; | 2938 | u32 bpc = (I915_READ(PIPECONF(pipe)) & PIPE_BPC_MASK) >> 5; |
| 2938 | reg = TRANS_DP_CTL(pipe); | 2939 | reg = TRANS_DP_CTL(pipe); |
| 2939 | temp = I915_READ(reg); | 2940 | temp = I915_READ(reg); |
| @@ -4711,7 +4712,7 @@ static bool intel_choose_pipe_bpp_dither(struct drm_crtc *crtc, | |||
| 4711 | lvds_bpc = 6; | 4712 | lvds_bpc = 6; |
| 4712 | 4713 | ||
| 4713 | if (lvds_bpc < display_bpc) { | 4714 | if (lvds_bpc < display_bpc) { |
| 4714 | DRM_DEBUG_DRIVER("clamping display bpc (was %d) to LVDS (%d)\n", display_bpc, lvds_bpc); | 4715 | DRM_DEBUG_KMS("clamping display bpc (was %d) to LVDS (%d)\n", display_bpc, lvds_bpc); |
| 4715 | display_bpc = lvds_bpc; | 4716 | display_bpc = lvds_bpc; |
| 4716 | } | 4717 | } |
| 4717 | continue; | 4718 | continue; |
| @@ -4722,7 +4723,7 @@ static bool intel_choose_pipe_bpp_dither(struct drm_crtc *crtc, | |||
| 4722 | unsigned int edp_bpc = dev_priv->edp.bpp / 3; | 4723 | unsigned int edp_bpc = dev_priv->edp.bpp / 3; |
| 4723 | 4724 | ||
| 4724 | if (edp_bpc < display_bpc) { | 4725 | if (edp_bpc < display_bpc) { |
| 4725 | DRM_DEBUG_DRIVER("clamping display bpc (was %d) to eDP (%d)\n", display_bpc, edp_bpc); | 4726 | DRM_DEBUG_KMS("clamping display bpc (was %d) to eDP (%d)\n", display_bpc, edp_bpc); |
| 4726 | display_bpc = edp_bpc; | 4727 | display_bpc = edp_bpc; |
| 4727 | } | 4728 | } |
| 4728 | continue; | 4729 | continue; |
| @@ -4737,7 +4738,7 @@ static bool intel_choose_pipe_bpp_dither(struct drm_crtc *crtc, | |||
| 4737 | /* Don't use an invalid EDID bpc value */ | 4738 | /* Don't use an invalid EDID bpc value */ |
| 4738 | if (connector->display_info.bpc && | 4739 | if (connector->display_info.bpc && |
| 4739 | connector->display_info.bpc < display_bpc) { | 4740 | connector->display_info.bpc < display_bpc) { |
| 4740 | DRM_DEBUG_DRIVER("clamping display bpc (was %d) to EDID reported max of %d\n", display_bpc, connector->display_info.bpc); | 4741 | DRM_DEBUG_KMS("clamping display bpc (was %d) to EDID reported max of %d\n", display_bpc, connector->display_info.bpc); |
| 4741 | display_bpc = connector->display_info.bpc; | 4742 | display_bpc = connector->display_info.bpc; |
| 4742 | } | 4743 | } |
| 4743 | } | 4744 | } |
| @@ -4748,10 +4749,10 @@ static bool intel_choose_pipe_bpp_dither(struct drm_crtc *crtc, | |||
| 4748 | */ | 4749 | */ |
| 4749 | if (intel_encoder->type == INTEL_OUTPUT_HDMI) { | 4750 | if (intel_encoder->type == INTEL_OUTPUT_HDMI) { |
| 4750 | if (display_bpc > 8 && display_bpc < 12) { | 4751 | if (display_bpc > 8 && display_bpc < 12) { |
| 4751 | DRM_DEBUG_DRIVER("forcing bpc to 12 for HDMI\n"); | 4752 | DRM_DEBUG_KMS("forcing bpc to 12 for HDMI\n"); |
| 4752 | display_bpc = 12; | 4753 | display_bpc = 12; |
| 4753 | } else { | 4754 | } else { |
| 4754 | DRM_DEBUG_DRIVER("forcing bpc to 8 for HDMI\n"); | 4755 | DRM_DEBUG_KMS("forcing bpc to 8 for HDMI\n"); |
| 4755 | display_bpc = 8; | 4756 | display_bpc = 8; |
| 4756 | } | 4757 | } |
| 4757 | } | 4758 | } |
| @@ -4789,8 +4790,8 @@ static bool intel_choose_pipe_bpp_dither(struct drm_crtc *crtc, | |||
| 4789 | 4790 | ||
| 4790 | display_bpc = min(display_bpc, bpc); | 4791 | display_bpc = min(display_bpc, bpc); |
| 4791 | 4792 | ||
| 4792 | DRM_DEBUG_DRIVER("setting pipe bpc to %d (max display bpc %d)\n", | 4793 | DRM_DEBUG_KMS("setting pipe bpc to %d (max display bpc %d)\n", |
| 4793 | bpc, display_bpc); | 4794 | bpc, display_bpc); |
| 4794 | 4795 | ||
| 4795 | *pipe_bpp = display_bpc * 3; | 4796 | *pipe_bpp = display_bpc * 3; |
| 4796 | 4797 | ||
| @@ -5671,7 +5672,7 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc, | |||
| 5671 | pipeconf &= ~PIPECONF_DITHER_TYPE_MASK; | 5672 | pipeconf &= ~PIPECONF_DITHER_TYPE_MASK; |
| 5672 | if ((is_lvds && dev_priv->lvds_dither) || dither) { | 5673 | if ((is_lvds && dev_priv->lvds_dither) || dither) { |
| 5673 | pipeconf |= PIPECONF_DITHER_EN; | 5674 | pipeconf |= PIPECONF_DITHER_EN; |
| 5674 | pipeconf |= PIPECONF_DITHER_TYPE_ST1; | 5675 | pipeconf |= PIPECONF_DITHER_TYPE_SP; |
| 5675 | } | 5676 | } |
| 5676 | if (is_dp || intel_encoder_is_pch_edp(&has_edp_encoder->base)) { | 5677 | if (is_dp || intel_encoder_is_pch_edp(&has_edp_encoder->base)) { |
| 5677 | intel_dp_set_m_n(crtc, mode, adjusted_mode); | 5678 | intel_dp_set_m_n(crtc, mode, adjusted_mode); |
| @@ -8148,6 +8149,20 @@ static void gen6_init_clock_gating(struct drm_device *dev) | |||
| 8148 | I915_WRITE(WM2_LP_ILK, 0); | 8149 | I915_WRITE(WM2_LP_ILK, 0); |
| 8149 | I915_WRITE(WM1_LP_ILK, 0); | 8150 | I915_WRITE(WM1_LP_ILK, 0); |
| 8150 | 8151 | ||
| 8152 | /* According to the BSpec vol1g, bit 12 (RCPBUNIT) clock | ||
| 8153 | * gating disable must be set. Failure to set it results in | ||
| 8154 | * flickering pixels due to Z write ordering failures after | ||
| 8155 | * some amount of runtime in the Mesa "fire" demo, and Unigine | ||
| 8156 | * Sanctuary and Tropics, and apparently anything else with | ||
| 8157 | * alpha test or pixel discard. | ||
| 8158 | * | ||
| 8159 | * According to the spec, bit 11 (RCCUNIT) must also be set, | ||
| 8160 | * but we didn't debug actual testcases to find it out. | ||
| 8161 | */ | ||
| 8162 | I915_WRITE(GEN6_UCGCTL2, | ||
| 8163 | GEN6_RCPBUNIT_CLOCK_GATE_DISABLE | | ||
| 8164 | GEN6_RCCUNIT_CLOCK_GATE_DISABLE); | ||
| 8165 | |||
| 8151 | /* | 8166 | /* |
| 8152 | * According to the spec the following bits should be | 8167 | * According to the spec the following bits should be |
| 8153 | * set in order to enable memory self-refresh and fbc: | 8168 | * set in order to enable memory self-refresh and fbc: |
