summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_pm.c
diff options
context:
space:
mode:
authorVille Syrjälä2014-01-22 20:33:00 +0100
committerDaniel Vetter2014-01-29 20:15:48 +0100
commite36ea7ff40d08ef914ee08fde63a25a7ee93959c (patch)
treeabc773717fbfa30ac143d0d8078dc20d1af25dd8 /drivers/gpu/drm/i915/intel_pm.c
parentdrm/i915: gen7_setup_fixed_func_scheduler() actually implements WaVSThreadDis... (diff)
downloadkernel-qcow2-linux-e36ea7ff40d08ef914ee08fde63a25a7ee93959c.tar.gz
kernel-qcow2-linux-e36ea7ff40d08ef914ee08fde63a25a7ee93959c.tar.xz
kernel-qcow2-linux-e36ea7ff40d08ef914ee08fde63a25a7ee93959c.zip
drm/i915: Don't apply WaVSThreadDispatchOverride on HSW
BSpec states that the thread override values set by gen7_setup_fixed_func_scheduler() are invalid for HSW. So let's not muck around with them. Since gen7_setup_fixed_func_scheduler() now has two totally independent parts, one for IVB and one for HSW, move the HSW part directly into haswell_init_clock_gating(). Note tht there's another workaround by the name of WaHSWVSRefCountFullforceMissDisable which basically claims that later steppings don't need the fix, but since WaVSRefCountFullforceMissDisable is listed to be needed for all steppings play it safe and keep applying the workaround. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@gmail.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_pm.c')
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 9a4d52c5b0d0..5b1ca3a38e49 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -4658,7 +4658,7 @@ static void gen7_setup_fixed_func_scheduler(struct drm_i915_private *dev_priv)
uint32_t reg = I915_READ(GEN7_FF_THREAD_MODE);
/*
- * WaVSThreadDispatchOverride:ivb,hsw
+ * WaVSThreadDispatchOverride:ivb
*
* This actually overrides the dispatch
* mode for all thread types.
@@ -4668,10 +4668,6 @@ static void gen7_setup_fixed_func_scheduler(struct drm_i915_private *dev_priv)
reg |= GEN7_FF_VS_SCHED_HW;
reg |= GEN7_FF_DS_SCHED_HW;
- /* WaVSRefCountFullforceMissDisable:hsw */
- if (IS_HASWELL(dev_priv->dev))
- reg &= ~GEN7_FF_VS_REF_CNT_FFME;
-
I915_WRITE(GEN7_FF_THREAD_MODE, reg);
}
@@ -4782,7 +4778,9 @@ static void haswell_init_clock_gating(struct drm_device *dev)
I915_READ(GEN7_SQ_CHICKEN_MBCUNIT_CONFIG) |
GEN7_SQ_CHICKEN_MBCUNIT_SQINTMOB);
- gen7_setup_fixed_func_scheduler(dev_priv);
+ /* WaVSRefCountFullforceMissDisable:hsw */
+ I915_WRITE(GEN7_FF_THREAD_MODE,
+ I915_READ(GEN7_FF_THREAD_MODE) & ~GEN7_FF_VS_REF_CNT_FFME);
/* WaDisable4x2SubspanOptimization:hsw */
I915_WRITE(CACHE_MODE_1,