aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2011-03-29 19:59:54 -0400
committerKeith Packard <keithp@keithp.com>2011-06-10 00:51:20 -0400
commita7ef0640d984e265393a76aa08a09febd3e7ce34 (patch)
tree47fc1704f12debd5fad55bbc785f8b8876e47884
parent2da3b9b940e2a18147422c54ed8b29d01e1ade88 (diff)
drm/i915: Use the uncached domain for the display planes
The simplest and common method for ensuring scanout coherency on all chipsets is to mark the scanout buffers as uncached (and for userspace to remember to flush the render cache every so often). We can improve upon this for later generations by marking scanout objects as GFDT and only flush those cachelines when required. However, we start simple. [v2: Move the set to uncached above the clflush. Otherwise, we'd skip the clflush and try to scan out data that was still sitting in the cache.] Signed-off-by: Eric Anholt <eric@anholt.net> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 8a439f0c21f5..fb0538358c34 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -3122,6 +3122,19 @@ i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
3122 return ret; 3122 return ret;
3123 } 3123 }
3124 3124
3125 /* The display engine is not coherent with the LLC cache on gen6. As
3126 * a result, we make sure that the pinning that is about to occur is
3127 * done with uncached PTEs. This is lowest common denominator for all
3128 * chipsets.
3129 *
3130 * However for gen6+, we could do better by using the GFDT bit instead
3131 * of uncaching, which would allow us to flush all the LLC-cached data
3132 * with that bit in the PTE to main memory with just one PIPE_CONTROL.
3133 */
3134 ret = i915_gem_object_set_cache_level(obj, I915_CACHE_NONE);
3135 if (ret)
3136 return ret;
3137
3125 /* As the user may map the buffer once pinned in the display plane 3138 /* As the user may map the buffer once pinned in the display plane
3126 * (e.g. libkms for the bootup splash), we have to ensure that we 3139 * (e.g. libkms for the bootup splash), we have to ensure that we
3127 * always use map_and_fenceable for all scanout buffers. 3140 * always use map_and_fenceable for all scanout buffers.