diff options
author | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2013-04-04 08:13:42 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-04-18 03:43:19 -0400 |
commit | a6f429a5a2f6ae0e1e8df2493884f9a881486d81 (patch) | |
tree | 467d802032ad600e98201ff1756cfc15e9d446da | |
parent | a65c2fcd00518b7339d72e08e6b2b4261fbcc22a (diff) |
drm/i915: Configure GAM_ECOCHK appropriatly for Gen7
IVB and HSW use different encodings for the PPGTT cacheability bits in
the GAM_ECOCHK register.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem_gtt.c | 11 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_reg.h | 5 |
2 files changed, 14 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c index fae638072d7d..b77e98c0812c 100644 --- a/drivers/gpu/drm/i915/i915_gem_gtt.c +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c | |||
@@ -117,12 +117,19 @@ static int gen6_ppgtt_enable(struct drm_device *dev) | |||
117 | ECOCHK_PPGTT_CACHE64B); | 117 | ECOCHK_PPGTT_CACHE64B); |
118 | I915_WRITE(GFX_MODE, _MASKED_BIT_ENABLE(GFX_PPGTT_ENABLE)); | 118 | I915_WRITE(GFX_MODE, _MASKED_BIT_ENABLE(GFX_PPGTT_ENABLE)); |
119 | } else if (INTEL_INFO(dev)->gen >= 7) { | 119 | } else if (INTEL_INFO(dev)->gen >= 7) { |
120 | uint32_t ecobits; | 120 | uint32_t ecochk, ecobits; |
121 | 121 | ||
122 | ecobits = I915_READ(GAC_ECO_BITS); | 122 | ecobits = I915_READ(GAC_ECO_BITS); |
123 | I915_WRITE(GAC_ECO_BITS, ecobits | ECOBITS_PPGTT_CACHE64B); | 123 | I915_WRITE(GAC_ECO_BITS, ecobits | ECOBITS_PPGTT_CACHE64B); |
124 | 124 | ||
125 | I915_WRITE(GAM_ECOCHK, ECOCHK_PPGTT_CACHE64B); | 125 | ecochk = I915_READ(GAM_ECOCHK); |
126 | if (IS_HASWELL(dev)) { | ||
127 | ecochk |= ECOCHK_PPGTT_WB_HSW; | ||
128 | } else { | ||
129 | ecochk |= ECOCHK_PPGTT_LLC_IVB; | ||
130 | ecochk &= ~ECOCHK_PPGTT_GFDT_IVB; | ||
131 | } | ||
132 | I915_WRITE(GAM_ECOCHK, ecochk); | ||
126 | /* GFX_MODE is per-ring on gen7+ */ | 133 | /* GFX_MODE is per-ring on gen7+ */ |
127 | } | 134 | } |
128 | 135 | ||
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index 96b361f9a32d..3b9ec9bcd383 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
@@ -125,6 +125,11 @@ | |||
125 | #define HSW_ECOCHK_ARB_PRIO_SOL (1<<6) | 125 | #define HSW_ECOCHK_ARB_PRIO_SOL (1<<6) |
126 | #define ECOCHK_PPGTT_CACHE64B (0x3<<3) | 126 | #define ECOCHK_PPGTT_CACHE64B (0x3<<3) |
127 | #define ECOCHK_PPGTT_CACHE4B (0x0<<3) | 127 | #define ECOCHK_PPGTT_CACHE4B (0x0<<3) |
128 | #define ECOCHK_PPGTT_GFDT_IVB (0x1<<4) | ||
129 | #define ECOCHK_PPGTT_LLC_IVB (0x1<<3) | ||
130 | #define ECOCHK_PPGTT_UC_HSW (0x1<<3) | ||
131 | #define ECOCHK_PPGTT_WT_HSW (0x2<<3) | ||
132 | #define ECOCHK_PPGTT_WB_HSW (0x3<<3) | ||
128 | 133 | ||
129 | #define GAC_ECO_BITS 0x14090 | 134 | #define GAC_ECO_BITS 0x14090 |
130 | #define ECOBITS_SNB_BIT (1<<13) | 135 | #define ECOBITS_SNB_BIT (1<<13) |