|
@@ -1902,6 +1902,22 @@ static void bdw_setup_private_ppat(struct drm_i915_private *dev_priv)
|
|
GEN8_PPAT(6, GEN8_PPAT_WB | GEN8_PPAT_LLCELLC | GEN8_PPAT_AGE(2)) |
|
|
GEN8_PPAT(6, GEN8_PPAT_WB | GEN8_PPAT_LLCELLC | GEN8_PPAT_AGE(2)) |
|
|
GEN8_PPAT(7, GEN8_PPAT_WB | GEN8_PPAT_LLCELLC | GEN8_PPAT_AGE(3));
|
|
GEN8_PPAT(7, GEN8_PPAT_WB | GEN8_PPAT_LLCELLC | GEN8_PPAT_AGE(3));
|
|
|
|
|
|
|
|
+ if (!USES_PPGTT(dev_priv->dev))
|
|
|
|
+ /* Spec: "For GGTT, there is NO pat_sel[2:0] from the entry,
|
|
|
|
+ * so RTL will always use the value corresponding to
|
|
|
|
+ * pat_sel = 000".
|
|
|
|
+ * So let's disable cache for GGTT to avoid screen corruptions.
|
|
|
|
+ * MOCS still can be used though.
|
|
|
|
+ * - 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.
|
|
|
|
+ */
|
|
|
|
+ pat = GEN8_PPAT(0, GEN8_PPAT_UC);
|
|
|
|
+
|
|
/* XXX: spec defines this as 2 distinct registers. It's unclear if a 64b
|
|
/* XXX: spec defines this as 2 distinct registers. It's unclear if a 64b
|
|
* write would work. */
|
|
* write would work. */
|
|
I915_WRITE(GEN8_PRIVATE_PAT, pat);
|
|
I915_WRITE(GEN8_PRIVATE_PAT, pat);
|