aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/intel_display.c25
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c5
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h2
3 files changed, 32 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index ed5d4f4d702e..ad3a0187d306 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -2971,6 +2971,24 @@ static void ironlake_pch_enable(struct drm_crtc *crtc)
2971 intel_enable_transcoder(dev_priv, pipe); 2971 intel_enable_transcoder(dev_priv, pipe);
2972} 2972}
2973 2973
2974void intel_cpt_verify_modeset(struct drm_device *dev, int pipe)
2975{
2976 struct drm_i915_private *dev_priv = dev->dev_private;
2977 int dslreg = PIPEDSL(pipe), tc2reg = TRANS_CHICKEN2(pipe);
2978 u32 temp;
2979
2980 temp = I915_READ(dslreg);
2981 udelay(500);
2982 if (wait_for(I915_READ(dslreg) != temp, 5)) {
2983 /* Without this, mode sets may fail silently on FDI */
2984 I915_WRITE(tc2reg, TRANS_AUTOTRAIN_GEN_STALL_DIS);
2985 udelay(250);
2986 I915_WRITE(tc2reg, 0);
2987 if (wait_for(I915_READ(dslreg) != temp, 5))
2988 DRM_ERROR("mode set failed: pipe %d stuck\n", pipe);
2989 }
2990}
2991
2974static void ironlake_crtc_enable(struct drm_crtc *crtc) 2992static void ironlake_crtc_enable(struct drm_crtc *crtc)
2975{ 2993{
2976 struct drm_device *dev = crtc->dev; 2994 struct drm_device *dev = crtc->dev;
@@ -3340,8 +3358,15 @@ void intel_encoder_prepare(struct drm_encoder *encoder)
3340void intel_encoder_commit(struct drm_encoder *encoder) 3358void intel_encoder_commit(struct drm_encoder *encoder)
3341{ 3359{
3342 struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private; 3360 struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
3361 struct drm_device *dev = encoder->dev;
3362 struct intel_encoder *intel_encoder = to_intel_encoder(encoder);
3363 struct intel_crtc *intel_crtc = to_intel_crtc(intel_encoder->base.crtc);
3364
3343 /* lvds has its own version of commit see intel_lvds_commit */ 3365 /* lvds has its own version of commit see intel_lvds_commit */
3344 encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON); 3366 encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON);
3367
3368 if (HAS_PCH_CPT(dev))
3369 intel_cpt_verify_modeset(dev, intel_crtc->pipe);
3345} 3370}
3346 3371
3347void intel_encoder_destroy(struct drm_encoder *encoder) 3372void intel_encoder_destroy(struct drm_encoder *encoder)
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 3009d2aaaa3a..74c835272292 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1191,6 +1191,8 @@ static void intel_dp_prepare(struct drm_encoder *encoder)
1191static void intel_dp_commit(struct drm_encoder *encoder) 1191static void intel_dp_commit(struct drm_encoder *encoder)
1192{ 1192{
1193 struct intel_dp *intel_dp = enc_to_intel_dp(encoder); 1193 struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1194 struct drm_device *dev = encoder->dev;
1195 struct intel_crtc *intel_crtc = to_intel_crtc(intel_dp->base.base.crtc);
1194 1196
1195 ironlake_edp_panel_vdd_on(intel_dp); 1197 ironlake_edp_panel_vdd_on(intel_dp);
1196 intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON); 1198 intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON);
@@ -1202,6 +1204,9 @@ static void intel_dp_commit(struct drm_encoder *encoder)
1202 ironlake_edp_backlight_on(intel_dp); 1204 ironlake_edp_backlight_on(intel_dp);
1203 1205
1204 intel_dp->dpms_mode = DRM_MODE_DPMS_ON; 1206 intel_dp->dpms_mode = DRM_MODE_DPMS_ON;
1207
1208 if (HAS_PCH_CPT(dev))
1209 intel_cpt_verify_modeset(dev, intel_crtc->pipe);
1205} 1210}
1206 1211
1207static void 1212static void
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 5829854ecbf6..51b1d752940b 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -382,4 +382,6 @@ extern void intel_fb_restore_mode(struct drm_device *dev);
382extern void intel_init_clock_gating(struct drm_device *dev); 382extern void intel_init_clock_gating(struct drm_device *dev);
383extern void intel_write_eld(struct drm_encoder *encoder, 383extern void intel_write_eld(struct drm_encoder *encoder,
384 struct drm_display_mode *mode); 384 struct drm_display_mode *mode);
385extern void intel_cpt_verify_modeset(struct drm_device *dev, int pipe);
386
385#endif /* __INTEL_DRV_H__ */ 387#endif /* __INTEL_DRV_H__ */