aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMika Kuoppala <mika.kuoppala@linux.intel.com>2016-06-07 10:19:18 -0400
committerMika Kuoppala <mika.kuoppala@intel.com>2016-07-15 08:51:29 -0400
commitc584e2d38fb84513944feeb25072dd8b17a6d3b6 (patch)
treef250f0f1790ec036982ce5a11b91cb5545dc6de8
parent5b889896be07cb12f0401dc2cfdec6eb6413c774 (diff)
drm/i195/fbc: Add WaFbcNukeOnHostModify
Bspec states that we need to set nuke on modify all to prevent screen corruption with fbc on skl and kbl. v2: proper workaround name References: HSD#2227109, HSDES#1404569388 Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1465309159-30531-27-git-send-email-mika.kuoppala@intel.com (cherry picked from commit 031cd8c85aefad31e7af91eba7bc4735a6dfcc79) Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com>
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h1
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c10
2 files changed, 11 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 235dfac9fe93..3b374284f739 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -2206,6 +2206,7 @@ enum skl_disp_power_wells {
2206#define ILK_DPFC_STATUS _MMIO(0x43210) 2206#define ILK_DPFC_STATUS _MMIO(0x43210)
2207#define ILK_DPFC_FENCE_YOFF _MMIO(0x43218) 2207#define ILK_DPFC_FENCE_YOFF _MMIO(0x43218)
2208#define ILK_DPFC_CHICKEN _MMIO(0x43224) 2208#define ILK_DPFC_CHICKEN _MMIO(0x43224)
2209#define ILK_DPFC_NUKE_ON_ANY_MODIFICATION (1<<23)
2209#define ILK_FBC_RT_BASE _MMIO(0x2128) 2210#define ILK_FBC_RT_BASE _MMIO(0x2128)
2210#define ILK_FBC_RT_VALID (1<<0) 2211#define ILK_FBC_RT_VALID (1<<0)
2211#define SNB_FBC_FRONT_BUFFER (1<<1) 2212#define SNB_FBC_FRONT_BUFFER (1<<1)
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 61113a22bc89..074d6a53cc3e 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -6737,11 +6737,21 @@ static void kabylake_init_clock_gating(struct drm_device *dev)
6737 if (IS_KBL_REVID(dev_priv, 0, KBL_REVID_B0)) 6737 if (IS_KBL_REVID(dev_priv, 0, KBL_REVID_B0))
6738 I915_WRITE(GEN6_UCGCTL1, I915_READ(GEN6_UCGCTL1) | 6738 I915_WRITE(GEN6_UCGCTL1, I915_READ(GEN6_UCGCTL1) |
6739 GEN6_GAMUNIT_CLOCK_GATE_DISABLE); 6739 GEN6_GAMUNIT_CLOCK_GATE_DISABLE);
6740
6741 /* WaFbcNukeOnHostModify:kbl */
6742 I915_WRITE(ILK_DPFC_CHICKEN, I915_READ(ILK_DPFC_CHICKEN) |
6743 ILK_DPFC_NUKE_ON_ANY_MODIFICATION);
6740} 6744}
6741 6745
6742static void skylake_init_clock_gating(struct drm_device *dev) 6746static void skylake_init_clock_gating(struct drm_device *dev)
6743{ 6747{
6748 struct drm_i915_private *dev_priv = dev->dev_private;
6749
6744 gen9_init_clock_gating(dev); 6750 gen9_init_clock_gating(dev);
6751
6752 /* WaFbcNukeOnHostModify:skl */
6753 I915_WRITE(ILK_DPFC_CHICKEN, I915_READ(ILK_DPFC_CHICKEN) |
6754 ILK_DPFC_NUKE_ON_ANY_MODIFICATION);
6745} 6755}
6746 6756
6747static void broadwell_init_clock_gating(struct drm_device *dev) 6757static void broadwell_init_clock_gating(struct drm_device *dev)