i965/gen9: Use custom MOCS entries set up by the kernel.
authorFrancisco Jerez <currojerez@riseup.net>
Wed, 1 Jul 2015 13:32:24 +0000 (16:32 +0300)
committerFrancisco Jerez <currojerez@riseup.net>
Thu, 16 Jul 2015 10:48:20 +0000 (13:48 +0300)
commitaf768922cafa3eb3e78a2fdfee90380a74c79460
tree712cdd566fbb06178e588b4093fa2d74bc2c1f8a
parent7e0180d57d330bd8d3047e841086712376b2a1cc
i965/gen9: Use custom MOCS entries set up by the kernel.

Instead of relying on hardware defaults the i915 kernel driver is
going program custom MOCS tables system-wide on Gen9 hardware.  The
"WT" entry previously used for renderbuffers had a number of problems:
It disabled caching on eLLC, it used a reserved L3 cacheability
setting, and it used to override the PTE controls making renderbuffers
always WT on LLC regardless of the kernel's setting.  Instead use an
entry from the new MOCS tables with parameters: TC=LLC/eLLC, LeCC=PTE,
L3CC=WB.

The "WB" entry previously used for anything other than renderbuffers
has moved to a different index in the new MOCS tables but it should
have the same caching semantics as the old entry.

Even though the corresponding kernel change ("drm/i915: Added
Programming of the MOCS") is in a way an ABI break it doesn't seem
necessary to check that the kernel is recent enough because the change
should only affect Gen9 which is still unreleased hardware.

v2: Update MOCS values for the new Android-incompatible tables
    introduced in v7 of the kernel patch.

Cc: 10.6 <mesa-stable@lists.freedesktop.org>
Reference: http://lists.freedesktop.org/archives/intel-gfx/2015-July/071080.html
Reviewed-by: Ben Widawsky <ben@bwidawsk.net>
src/mesa/drivers/dri/i965/brw_defines.h
src/mesa/drivers/dri/i965/gen8_surface_state.c