drm/i915: apply WaFbcAsynchFlipDisableFbcQueue earlier
authorPaulo Zanoni <[email protected]>
Mon, 14 Sep 2015 18:20:00 +0000 (15:20 -0300)
committerDaniel Vetter <[email protected]>
Wed, 23 Sep 2015 12:39:18 +0000 (14:39 +0200)
The spec says the register should have that value for the entire time
that FBC is enabled, so apply the WA before we enable FBC.

Notice that we also have this WA for ILK/SNB, but it is implemented at
init_clock_gating(). I could move the IVB/HSW/BDW WA code to
init_clock_gating() too, but since we recently had some complaints
about WAs not staying after being set, I'm going to play safe and keep
this here for now.

Reviewed-by: Ville Syrjälä <[email protected]>
Signed-off-by: Paulo Zanoni <[email protected]>
Signed-off-by: Daniel Vetter <[email protected]>
drivers/gpu/drm/i915/intel_fbc.c

index 1c4536ad4de984577b35d72701b0bd281d267858..2b75003eb79e06a5e756e2d960e3bc376a155288 100644 (file)
@@ -272,8 +272,6 @@ static void gen7_fbc_enable(struct intel_crtc *crtc)
        if (dev_priv->fbc.false_color)
                dpfc_ctl |= FBC_CTL_FALSE_COLOR;
 
-       I915_WRITE(ILK_DPFC_CONTROL, dpfc_ctl | DPFC_CTL_EN);
-
        if (IS_IVYBRIDGE(dev_priv)) {
                /* WaFbcAsynchFlipDisableFbcQueue:ivb */
                I915_WRITE(ILK_DISPLAY_CHICKEN1,
@@ -286,6 +284,8 @@ static void gen7_fbc_enable(struct intel_crtc *crtc)
                           HSW_FBCQ_DIS);
        }
 
+       I915_WRITE(ILK_DPFC_CONTROL, dpfc_ctl | DPFC_CTL_EN);
+
        I915_WRITE(SNB_DPFC_CTL_SA,
                   SNB_CPU_FENCE_ENABLE | obj->fence_reg);
        I915_WRITE(DPFC_CPU_FENCE_OFFSET, crtc->base.y);