diff options
author | Mika Kuoppala <mika.kuoppala@linux.intel.com> | 2016-06-07 10:19:18 -0400 |
---|---|---|
committer | Mika Kuoppala <mika.kuoppala@intel.com> | 2016-07-15 08:51:29 -0400 |
commit | c584e2d38fb84513944feeb25072dd8b17a6d3b6 (patch) | |
tree | f250f0f1790ec036982ce5a11b91cb5545dc6de8 | |
parent | 5b889896be07cb12f0401dc2cfdec6eb6413c774 (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.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_pm.c | 10 |
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 | ||
6742 | static void skylake_init_clock_gating(struct drm_device *dev) | 6746 | static 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 | ||
6747 | static void broadwell_init_clock_gating(struct drm_device *dev) | 6757 | static void broadwell_init_clock_gating(struct drm_device *dev) |