drm/i915: properly set ppgtt cacheability on snb
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 11 Apr 2012 18:42:40 +0000 (20:42 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 17 Apr 2012 09:19:59 +0000 (11:19 +0200)
For some reason snb has 2 fields to set ppgtt cacheability. This one
here does not exist on gen7.

This might explain why ppgtt wasn't a win on snb like on ivb - not
enough pte caching.

v2: Fixup rebase fail.

Reviewed-by: Ben Widawsky <ben@bwidawsk.net>
Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_gem.c
drivers/gpu/drm/i915/i915_reg.h

index 92acc5f8e334cc24278ecc688722b0eec40b5350..aa44ff240147284d90f9d4febe3c16666742d34c 100644 (file)
@@ -3669,7 +3669,10 @@ void i915_gem_init_ppgtt(struct drm_device *dev)
        pd_offset <<= 16;
 
        if (INTEL_INFO(dev)->gen == 6) {
-               uint32_t ecochk, gab_ctl;
+               uint32_t ecochk, gab_ctl, ecobits;
+
+               ecobits = I915_READ(GAC_ECO_BITS); 
+               I915_WRITE(GAC_ECO_BITS, ecobits | ECOBITS_PPGTT_CACHE64B);
 
                gab_ctl = I915_READ(GAB_CTL);
                I915_WRITE(GAB_CTL, gab_ctl | GAB_CTL_CONT_AFTER_PAGEFAULT);
index d875fb19f62da95958eb5e5007f22cbd093fe81b..a9030f852cf9270f6ed06bc752ce580f75d5bfed 100644 (file)
 #define   ECOCHK_PPGTT_CACHE64B                (0x3<<3)
 #define   ECOCHK_PPGTT_CACHE4B         (0x0<<3)
 
+#define GAC_ECO_BITS                   0x14090
+#define   ECOBITS_PPGTT_CACHE64B       (3<<8)
+#define   ECOBITS_PPGTT_CACHE4B                (0<<8)
+
 #define GAB_CTL                                0x24000
 #define   GAB_CTL_CONT_AFTER_PAGEFAULT (1<<8)