drm/i915: Disable caches for Global GTT.
authorFrançois Tigeot <ftigeot@wolfpond.org>
Sun, 13 Sep 2015 11:06:16 +0000 (13:06 +0200)
committerFrançois Tigeot <ftigeot@wolfpond.org>
Sun, 13 Sep 2015 11:07:19 +0000 (13:07 +0200)
commita6e033d9781ff46902c0ef5673e03e32da0aacb0
tree65e65defd56915435bb2bf97e8118cd63a9fa380
parentacf467cbfaf7ed6f2f14b125043829cb82aee35e
drm/i915: Disable caches for Global GTT.

This is commit 76d0c9869b8cdbdb978caa4e13bc98840daafa2b from Linux 3.17.8
Original author: Rodrigo Vivi <rodrigo.vivi@intel.com>
Original commit message:

commit d6a8b72edc92471283925ceb4ba12799b67c3ff8 upstream.

Global GTT doesn't have pat_sel[2:0] so it always point to pat_sel = 000;
So the only way to avoid screen corruptions is setting PAT 0 to Uncached.

MOCS can still be used though. But if userspace is trusting PTE for
cache selection the safest thing to do is to let caches disabled.

BSpec: "For GGTT, there is NO pat_sel[2:0] from the entry,
so RTL will always use the value corresponding to pat_sel = 000"

- System agent ggtt writes (i.e. cpu gtt mmaps) already work before
this patch, i.e. the same uncached + snooping access like on gen6/7
seems to be in effect.
- So this just fixes blitter/render access. Again it looks like it's
not just uncached access, but uncached + snooping. So we can still
hold onto all our assumptions wrt cpu clflushing on LLC machines.

v2: Cleaner patch as suggested by Chris.
v3: Add Daniel's comment

Reference: https://bugs.freedesktop.org/show_bug.cgi?id=85576
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: James Ausmus <james.ausmus@intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Jani Nikula <jani.nikula@intel.com>
Tested-by: James Ausmus <james.ausmus@intel.com>
Reviewed-by: James Ausmus <james.ausmus@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
sys/dev/drm/i915/i915_gem_gtt.c