|
@@ -3584,6 +3584,19 @@ static void cpt_init_clock_gating(struct drm_device *dev)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static void gen6_check_mch_setup(struct drm_device *dev)
|
|
|
+{
|
|
|
+ struct drm_i915_private *dev_priv = dev->dev_private;
|
|
|
+ uint32_t tmp;
|
|
|
+
|
|
|
+ tmp = I915_READ(MCH_SSKPD);
|
|
|
+ if ((tmp & MCH_SSKPD_WM0_MASK) != MCH_SSKPD_WM0_VAL) {
|
|
|
+ DRM_INFO("Wrong MCH_SSKPD value: 0x%08x\n", tmp);
|
|
|
+ DRM_INFO("This can cause pipe underruns and display issues.\n");
|
|
|
+ DRM_INFO("Please upgrade your BIOS to fix this.\n");
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static void gen6_init_clock_gating(struct drm_device *dev)
|
|
|
{
|
|
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
|
@@ -3676,6 +3689,8 @@ static void gen6_init_clock_gating(struct drm_device *dev)
|
|
|
I915_WRITE(GEN6_GT_MODE, _MASKED_BIT_ENABLE(GEN6_GT_MODE_HI));
|
|
|
|
|
|
cpt_init_clock_gating(dev);
|
|
|
+
|
|
|
+ gen6_check_mch_setup(dev);
|
|
|
}
|
|
|
|
|
|
static void gen7_setup_fixed_func_scheduler(struct drm_i915_private *dev_priv)
|
|
@@ -3861,6 +3876,8 @@ static void ivybridge_init_clock_gating(struct drm_device *dev)
|
|
|
I915_WRITE(GEN6_MBCUNIT_SNPCR, snpcr);
|
|
|
|
|
|
cpt_init_clock_gating(dev);
|
|
|
+
|
|
|
+ gen6_check_mch_setup(dev);
|
|
|
}
|
|
|
|
|
|
static void valleyview_init_clock_gating(struct drm_device *dev)
|