|
@@ -3700,7 +3700,23 @@ struct drm_i915_gem_object *i915_gem_alloc_object(struct drm_device *dev,
|
|
|
obj->base.write_domain = I915_GEM_DOMAIN_CPU;
|
|
|
obj->base.read_domains = I915_GEM_DOMAIN_CPU;
|
|
|
|
|
|
- obj->cache_level = I915_CACHE_NONE;
|
|
|
+ if (IS_GEN6(dev)) {
|
|
|
+ /* On Gen6, we can have the GPU use the LLC (the CPU
|
|
|
+ * cache) for about a 10% performance improvement
|
|
|
+ * compared to uncached. Graphics requests other than
|
|
|
+ * display scanout are coherent with the CPU in
|
|
|
+ * accessing this cache. This means in this mode we
|
|
|
+ * don't need to clflush on the CPU side, and on the
|
|
|
+ * GPU side we only need to flush internal caches to
|
|
|
+ * get data visible to the CPU.
|
|
|
+ *
|
|
|
+ * However, we maintain the display planes as UC, and so
|
|
|
+ * need to rebind when first used as such.
|
|
|
+ */
|
|
|
+ obj->cache_level = I915_CACHE_LLC;
|
|
|
+ } else
|
|
|
+ obj->cache_level = I915_CACHE_NONE;
|
|
|
+
|
|
|
obj->base.driver_private = NULL;
|
|
|
obj->fence_reg = I915_FENCE_REG_NONE;
|
|
|
INIT_LIST_HEAD(&obj->mm_list);
|