diff options
author | Ben Widawsky <benjamin.widawsky@intel.com> | 2013-12-12 18:28:04 -0500 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-12-13 11:55:54 -0500 |
commit | ab57fff1302c485d74992d34df24ccb5efda244e (patch) | |
tree | 52dcadb2d631f37037f01426bd08680ac11c4323 | |
parent | 63801f211c6eeb6def635ceee39d165e00fd6e09 (diff) |
drm/i915/bdw: Implement ff workarounds
WaVSRefCountFullforceMissDisable and
WaDSRefCountFullforceMissDisable
VS is a carry-over from HSW, and DS is likely not used by anyone yet.
Cc: Kenneth Graunke <kenneth@whitecape.org>
Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
Reviewed-by: Damien Lespiau <damien.lespiau@intel.com>
[danvet: Line of 106 chars is too long. Really.]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r-- | drivers/gpu/drm/i915/i915_reg.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_pm.c | 12 |
2 files changed, 10 insertions, 3 deletions
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index 3259e83eb2c6..f1eece4a63d5 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
@@ -1003,6 +1003,7 @@ | |||
1003 | 1003 | ||
1004 | #define GEN7_FF_THREAD_MODE 0x20a0 | 1004 | #define GEN7_FF_THREAD_MODE 0x20a0 |
1005 | #define GEN7_FF_SCHED_MASK 0x0077070 | 1005 | #define GEN7_FF_SCHED_MASK 0x0077070 |
1006 | #define GEN8_FF_DS_REF_CNT_FFME (1 << 19) | ||
1006 | #define GEN7_FF_TS_SCHED_HS1 (0x5<<16) | 1007 | #define GEN7_FF_TS_SCHED_HS1 (0x5<<16) |
1007 | #define GEN7_FF_TS_SCHED_HS0 (0x3<<16) | 1008 | #define GEN7_FF_TS_SCHED_HS0 (0x3<<16) |
1008 | #define GEN7_FF_TS_SCHED_LOAD_BALANCE (0x1<<16) | 1009 | #define GEN7_FF_TS_SCHED_LOAD_BALANCE (0x1<<16) |
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index 791fbe386b7c..b35f65ed6c5e 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c | |||
@@ -5256,14 +5256,14 @@ static void gen8_init_clock_gating(struct drm_device *dev) | |||
5256 | I915_WRITE(GEN7_HALF_SLICE_CHICKEN1, | 5256 | I915_WRITE(GEN7_HALF_SLICE_CHICKEN1, |
5257 | _MASKED_BIT_ENABLE(GEN7_SINGLE_SUBSCAN_DISPATCH_ENABLE)); | 5257 | _MASKED_BIT_ENABLE(GEN7_SINGLE_SUBSCAN_DISPATCH_ENABLE)); |
5258 | 5258 | ||
5259 | /* WaSwitchSolVfFArbitrationPriority */ | 5259 | /* WaSwitchSolVfFArbitrationPriority:bdw */ |
5260 | I915_WRITE(GAM_ECOCHK, I915_READ(GAM_ECOCHK) | HSW_ECOCHK_ARB_PRIO_SOL); | 5260 | I915_WRITE(GAM_ECOCHK, I915_READ(GAM_ECOCHK) | HSW_ECOCHK_ARB_PRIO_SOL); |
5261 | 5261 | ||
5262 | /* WaPsrDPAMaskVBlankInSRD */ | 5262 | /* WaPsrDPAMaskVBlankInSRD:bdw */ |
5263 | I915_WRITE(CHICKEN_PAR1_1, | 5263 | I915_WRITE(CHICKEN_PAR1_1, |
5264 | I915_READ(CHICKEN_PAR1_1) | DPA_MASK_VBLANK_SRD); | 5264 | I915_READ(CHICKEN_PAR1_1) | DPA_MASK_VBLANK_SRD); |
5265 | 5265 | ||
5266 | /* WaPsrDPRSUnmaskVBlankInSRD */ | 5266 | /* WaPsrDPRSUnmaskVBlankInSRD:bdw */ |
5267 | for_each_pipe(i) { | 5267 | for_each_pipe(i) { |
5268 | I915_WRITE(CHICKEN_PIPESL_1(i), | 5268 | I915_WRITE(CHICKEN_PIPESL_1(i), |
5269 | I915_READ(CHICKEN_PIPESL_1(i) | | 5269 | I915_READ(CHICKEN_PIPESL_1(i) | |
@@ -5277,6 +5277,12 @@ static void gen8_init_clock_gating(struct drm_device *dev) | |||
5277 | I915_WRITE(HDC_CHICKEN0, | 5277 | I915_WRITE(HDC_CHICKEN0, |
5278 | I915_READ(HDC_CHICKEN0) | | 5278 | I915_READ(HDC_CHICKEN0) | |
5279 | _MASKED_BIT_ENABLE(HDC_FORCE_NON_COHERENT)); | 5279 | _MASKED_BIT_ENABLE(HDC_FORCE_NON_COHERENT)); |
5280 | |||
5281 | /* WaVSRefCountFullforceMissDisable:bdw */ | ||
5282 | /* WaDSRefCountFullforceMissDisable:bdw */ | ||
5283 | I915_WRITE(GEN7_FF_THREAD_MODE, | ||
5284 | I915_READ(GEN7_FF_THREAD_MODE) & | ||
5285 | ~(GEN8_FF_DS_REF_CNT_FFME | GEN7_FF_VS_REF_CNT_FFME)); | ||
5280 | } | 5286 | } |
5281 | 5287 | ||
5282 | static void haswell_init_clock_gating(struct drm_device *dev) | 5288 | static void haswell_init_clock_gating(struct drm_device *dev) |