|
@@ -3330,8 +3330,12 @@ static void gen6_init_clock_gating(struct drm_device *dev)
|
|
|
*
|
|
|
* According to the spec, bit 11 (RCCUNIT) must also be set,
|
|
|
* but we didn't debug actual testcases to find it out.
|
|
|
+ *
|
|
|
+ * Also apply WaDisableVDSUnitClockGating and
|
|
|
+ * WaDisableRCPBUnitClockGating.
|
|
|
*/
|
|
|
I915_WRITE(GEN6_UCGCTL2,
|
|
|
+ GEN7_VDSUNIT_CLOCK_GATE_DISABLE |
|
|
|
GEN6_RCPBUNIT_CLOCK_GATE_DISABLE |
|
|
|
GEN6_RCCUNIT_CLOCK_GATE_DISABLE);
|
|
|
|
|
@@ -3392,11 +3396,6 @@ static void ivybridge_init_clock_gating(struct drm_device *dev)
|
|
|
I915_WRITE(WM2_LP_ILK, 0);
|
|
|
I915_WRITE(WM1_LP_ILK, 0);
|
|
|
|
|
|
- /* According to the spec, bit 13 (RCZUNIT) must be set on IVB.
|
|
|
- * This implements the WaDisableRCZUnitClockGating workaround.
|
|
|
- */
|
|
|
- I915_WRITE(GEN6_UCGCTL2, GEN6_RCZUNIT_CLOCK_GATE_DISABLE);
|
|
|
-
|
|
|
I915_WRITE(ILK_DSPCLK_GATE, IVB_VRHUNIT_CLK_GATE);
|
|
|
|
|
|
I915_WRITE(IVB_CHICKEN3,
|
|
@@ -3413,6 +3412,23 @@ static void ivybridge_init_clock_gating(struct drm_device *dev)
|
|
|
I915_WRITE(GEN7_L3_CHICKEN_MODE_REGISTER,
|
|
|
GEN7_WA_L3_CHICKEN_MODE);
|
|
|
|
|
|
+ /* According to the BSpec vol1g, bit 12 (RCPBUNIT) clock
|
|
|
+ * gating disable must be set. Failure to set it results in
|
|
|
+ * flickering pixels due to Z write ordering failures after
|
|
|
+ * some amount of runtime in the Mesa "fire" demo, and Unigine
|
|
|
+ * Sanctuary and Tropics, and apparently anything else with
|
|
|
+ * alpha test or pixel discard.
|
|
|
+ *
|
|
|
+ * According to the spec, bit 11 (RCCUNIT) must also be set,
|
|
|
+ * but we didn't debug actual testcases to find it out.
|
|
|
+ *
|
|
|
+ * According to the spec, bit 13 (RCZUNIT) must be set on IVB.
|
|
|
+ * This implements the WaDisableRCZUnitClockGating workaround.
|
|
|
+ */
|
|
|
+ I915_WRITE(GEN6_UCGCTL2,
|
|
|
+ GEN6_RCZUNIT_CLOCK_GATE_DISABLE |
|
|
|
+ GEN6_RCCUNIT_CLOCK_GATE_DISABLE);
|
|
|
+
|
|
|
/* This is required by WaCatErrorRejectionIssue */
|
|
|
I915_WRITE(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG,
|
|
|
I915_READ(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG) |
|
|
@@ -3449,11 +3465,6 @@ static void valleyview_init_clock_gating(struct drm_device *dev)
|
|
|
I915_WRITE(WM2_LP_ILK, 0);
|
|
|
I915_WRITE(WM1_LP_ILK, 0);
|
|
|
|
|
|
- /* According to the spec, bit 13 (RCZUNIT) must be set on IVB.
|
|
|
- * This implements the WaDisableRCZUnitClockGating workaround.
|
|
|
- */
|
|
|
- I915_WRITE(GEN6_UCGCTL2, GEN6_RCZUNIT_CLOCK_GATE_DISABLE);
|
|
|
-
|
|
|
I915_WRITE(ILK_DSPCLK_GATE, IVB_VRHUNIT_CLK_GATE);
|
|
|
|
|
|
I915_WRITE(IVB_CHICKEN3,
|
|
@@ -3473,6 +3484,29 @@ static void valleyview_init_clock_gating(struct drm_device *dev)
|
|
|
I915_READ(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG) |
|
|
|
GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB);
|
|
|
|
|
|
+
|
|
|
+ /* According to the BSpec vol1g, bit 12 (RCPBUNIT) clock
|
|
|
+ * gating disable must be set. Failure to set it results in
|
|
|
+ * flickering pixels due to Z write ordering failures after
|
|
|
+ * some amount of runtime in the Mesa "fire" demo, and Unigine
|
|
|
+ * Sanctuary and Tropics, and apparently anything else with
|
|
|
+ * alpha test or pixel discard.
|
|
|
+ *
|
|
|
+ * According to the spec, bit 11 (RCCUNIT) must also be set,
|
|
|
+ * but we didn't debug actual testcases to find it out.
|
|
|
+ *
|
|
|
+ * According to the spec, bit 13 (RCZUNIT) must be set on IVB.
|
|
|
+ * This implements the WaDisableRCZUnitClockGating workaround.
|
|
|
+ *
|
|
|
+ * Also apply WaDisableVDSUnitClockGating and
|
|
|
+ * WaDisableRCPBUnitClockGating.
|
|
|
+ */
|
|
|
+ I915_WRITE(GEN6_UCGCTL2,
|
|
|
+ GEN7_VDSUNIT_CLOCK_GATE_DISABLE |
|
|
|
+ GEN6_RCZUNIT_CLOCK_GATE_DISABLE |
|
|
|
+ GEN6_RCPBUNIT_CLOCK_GATE_DISABLE |
|
|
|
+ GEN6_RCCUNIT_CLOCK_GATE_DISABLE);
|
|
|
+
|
|
|
for_each_pipe(pipe) {
|
|
|
I915_WRITE(DSPCNTR(pipe),
|
|
|
I915_READ(DSPCNTR(pipe)) |
|