Răsfoiți Sursa

drm/i915: Fix DP enhanced framing for CPT

Currently we're always enabling enhanced framing on CPT even if the sink
doesn't support it. Fix this up by actaully looking at what the sink
tells us.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Ville Syrjälä 10 ani în urmă
părinte
comite
e3ef4479bb
2 a modificat fișierele cu 10 adăugiri și 2 ștergeri
  1. 1 2
      drivers/gpu/drm/i915/intel_display.c
  2. 9 0
      drivers/gpu/drm/i915/intel_dp.c

+ 1 - 2
drivers/gpu/drm/i915/intel_display.c

@@ -4168,8 +4168,7 @@ static void ironlake_pch_enable(struct drm_crtc *crtc)
 		temp &= ~(TRANS_DP_PORT_SEL_MASK |
 		temp &= ~(TRANS_DP_PORT_SEL_MASK |
 			  TRANS_DP_SYNC_MASK |
 			  TRANS_DP_SYNC_MASK |
 			  TRANS_DP_BPC_MASK);
 			  TRANS_DP_BPC_MASK);
-		temp |= (TRANS_DP_OUTPUT_ENABLE |
-			 TRANS_DP_ENH_FRAMING);
+		temp |= TRANS_DP_OUTPUT_ENABLE;
 		temp |= bpc << 9; /* same format but at 11:9 */
 		temp |= bpc << 9; /* same format but at 11:9 */
 
 
 		if (crtc->mode.flags & DRM_MODE_FLAG_PHSYNC)
 		if (crtc->mode.flags & DRM_MODE_FLAG_PHSYNC)

+ 9 - 0
drivers/gpu/drm/i915/intel_dp.c

@@ -1582,7 +1582,16 @@ static void intel_dp_prepare(struct intel_encoder *encoder)
 
 
 		intel_dp->DP |= crtc->pipe << 29;
 		intel_dp->DP |= crtc->pipe << 29;
 	} else if (HAS_PCH_CPT(dev) && port != PORT_A) {
 	} else if (HAS_PCH_CPT(dev) && port != PORT_A) {
+		u32 trans_dp;
+
 		intel_dp->DP |= DP_LINK_TRAIN_OFF_CPT;
 		intel_dp->DP |= DP_LINK_TRAIN_OFF_CPT;
+
+		trans_dp = I915_READ(TRANS_DP_CTL(crtc->pipe));
+		if (drm_dp_enhanced_frame_cap(intel_dp->dpcd))
+			trans_dp |= TRANS_DP_ENH_FRAMING;
+		else
+			trans_dp &= ~TRANS_DP_ENH_FRAMING;
+		I915_WRITE(TRANS_DP_CTL(crtc->pipe), trans_dp);
 	} else {
 	} else {
 		if (!HAS_PCH_SPLIT(dev) && !IS_VALLEYVIEW(dev))
 		if (!HAS_PCH_SPLIT(dev) && !IS_VALLEYVIEW(dev))
 			intel_dp->DP |= intel_dp->color_range;
 			intel_dp->DP |= intel_dp->color_range;