diff options
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 13 |
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. |