sna/gen8: Check for WT support before attempting to use the WT mocs
authorChris Wilson <chris@chris-wilson.co.uk>
Fri, 13 Jun 2014 07:27:05 +0000 (08:27 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Fri, 13 Jun 2014 07:27:05 +0000 (08:27 +0100)
It appears the kernel has a better idea when WT is supported on which
gen8 parts. I assumed it was always supported, but experience suggests
otherwise, so only use WT support when advertised.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=79967
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
src/sna/gen6_common.h
src/sna/gen8_render.c

index 8b60ef6..6668620 100644 (file)
@@ -36,7 +36,7 @@
 static inline bool is_uncached(struct sna *sna,
                               struct kgem_bo *bo)
 {
-       return bo->scanout && !sna->kgem.has_wt;
+       return bo->io || (bo->scanout && !sna->kgem.has_wt);
 }
 
 inline static bool can_switch_to_blt(struct sna *sna,
index 466fe01..a48ccf4 100644 (file)
@@ -1377,7 +1377,7 @@ gen8_bind_bo(struct sna *sna,
                domains = I915_GEM_DOMAIN_RENDER << 16 |I915_GEM_DOMAIN_RENDER;
        } else
                domains = I915_GEM_DOMAIN_SAMPLER << 16;
-       ss[1] = bo->io ? 0 : is_scanout ? (MOCS_WT | MOCS_ALL_CACHES) << 24 : (MOCS_WB | MOCS_ALL_CACHES) << 24;
+       ss[1] = is_uncached(sna, bo) ? 0 : is_scanout ? (MOCS_WT | MOCS_ALL_CACHES) << 24 : (MOCS_WB | MOCS_ALL_CACHES) << 24;
        ss[2] = ((width - 1)  << SURFACE_WIDTH_SHIFT |
                 (height - 1) << SURFACE_HEIGHT_SHIFT);
        ss[3] = (bo->pitch - 1) << SURFACE_PITCH_SHIFT;