diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2016-05-19 03:14:20 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2016-05-20 03:53:52 -0400 |
commit | dc00b6a07c2206e7b7dbcbeff856049264c40faa (patch) | |
tree | 24123c75b03bed3e5ccef96c7c5f66981f786117 | |
parent | d4dcbdceabe4d447d292457bdbd877a0a9532d45 (diff) |
drm/i915/psr: Implement PSR2 w/a for gen9
Found this while browsing Bspec. Looks like it applies to both skl and
kbl.
v2: Also for bxt (Art).
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Sonika Jindal <sonika.jindal@intel.com>
Cc: Durgadoss R <durgadoss.r@intel.com>
Cc: "Pandiyan, Dhinakaran" <dhinakaran.pandiyan@intel.com>
Cc: "Runyan, Arthur J" <arthur.j.runyan@intel.com>
Reviewed-by: Sonika Jindal<sonika.jindal@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1463642060-30728-1-git-send-email-daniel.vetter@ffwll.ch
-rw-r--r-- | drivers/gpu/drm/i915/i915_reg.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_pm.c | 17 |
2 files changed, 16 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index 86fbf723eca7..e3077259541a 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h | |||
@@ -6033,6 +6033,7 @@ enum skl_disp_power_wells { | |||
6033 | #define CHICKEN_PAR1_1 _MMIO(0x42080) | 6033 | #define CHICKEN_PAR1_1 _MMIO(0x42080) |
6034 | #define DPA_MASK_VBLANK_SRD (1 << 15) | 6034 | #define DPA_MASK_VBLANK_SRD (1 << 15) |
6035 | #define FORCE_ARB_IDLE_PLANES (1 << 14) | 6035 | #define FORCE_ARB_IDLE_PLANES (1 << 14) |
6036 | #define SKL_EDP_PSR_FIX_RDWRAP (1 << 3) | ||
6036 | 6037 | ||
6037 | #define _CHICKEN_PIPESL_1_A 0x420b0 | 6038 | #define _CHICKEN_PIPESL_1_A 0x420b0 |
6038 | #define _CHICKEN_PIPESL_1_B 0x420b4 | 6039 | #define _CHICKEN_PIPESL_1_B 0x420b4 |
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index adb64638f595..29bdd79d9039 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c | |||
@@ -58,6 +58,10 @@ static void bxt_init_clock_gating(struct drm_device *dev) | |||
58 | { | 58 | { |
59 | struct drm_i915_private *dev_priv = dev->dev_private; | 59 | struct drm_i915_private *dev_priv = dev->dev_private; |
60 | 60 | ||
61 | /* See Bspec note for PSR2_CTL bit 31, Wa#828:bxt */ | ||
62 | I915_WRITE(CHICKEN_PAR1_1, | ||
63 | I915_READ(CHICKEN_PAR1_1) | SKL_EDP_PSR_FIX_RDWRAP); | ||
64 | |||
61 | /* WaDisableSDEUnitClockGating:bxt */ | 65 | /* WaDisableSDEUnitClockGating:bxt */ |
62 | I915_WRITE(GEN8_UCGCTL6, I915_READ(GEN8_UCGCTL6) | | 66 | I915_WRITE(GEN8_UCGCTL6, I915_READ(GEN8_UCGCTL6) | |
63 | GEN8_SDEUNIT_CLOCK_GATE_DISABLE); | 67 | GEN8_SDEUNIT_CLOCK_GATE_DISABLE); |
@@ -6845,6 +6849,15 @@ static void gen8_set_l3sqc_credits(struct drm_i915_private *dev_priv, | |||
6845 | I915_WRITE(GEN7_MISCCPCTL, misccpctl); | 6849 | I915_WRITE(GEN7_MISCCPCTL, misccpctl); |
6846 | } | 6850 | } |
6847 | 6851 | ||
6852 | static void skylake_init_clock_gating(struct drm_device *dev) | ||
6853 | { | ||
6854 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
6855 | |||
6856 | /* See Bspec note for PSR2_CTL bit 31, Wa#828:skl,kbl */ | ||
6857 | I915_WRITE(CHICKEN_PAR1_1, | ||
6858 | I915_READ(CHICKEN_PAR1_1) | SKL_EDP_PSR_FIX_RDWRAP); | ||
6859 | } | ||
6860 | |||
6848 | static void broadwell_init_clock_gating(struct drm_device *dev) | 6861 | static void broadwell_init_clock_gating(struct drm_device *dev) |
6849 | { | 6862 | { |
6850 | struct drm_i915_private *dev_priv = dev->dev_private; | 6863 | struct drm_i915_private *dev_priv = dev->dev_private; |
@@ -7304,9 +7317,9 @@ static void nop_init_clock_gating(struct drm_device *dev) | |||
7304 | void intel_init_clock_gating_hooks(struct drm_i915_private *dev_priv) | 7317 | void intel_init_clock_gating_hooks(struct drm_i915_private *dev_priv) |
7305 | { | 7318 | { |
7306 | if (IS_SKYLAKE(dev_priv)) | 7319 | if (IS_SKYLAKE(dev_priv)) |
7307 | dev_priv->display.init_clock_gating = nop_init_clock_gating; | 7320 | dev_priv->display.init_clock_gating = skylake_init_clock_gating; |
7308 | else if (IS_KABYLAKE(dev_priv)) | 7321 | else if (IS_KABYLAKE(dev_priv)) |
7309 | dev_priv->display.init_clock_gating = nop_init_clock_gating; | 7322 | dev_priv->display.init_clock_gating = skylake_init_clock_gating; |
7310 | else if (IS_BROXTON(dev_priv)) | 7323 | else if (IS_BROXTON(dev_priv)) |
7311 | dev_priv->display.init_clock_gating = bxt_init_clock_gating; | 7324 | dev_priv->display.init_clock_gating = bxt_init_clock_gating; |
7312 | else if (IS_BROADWELL(dev_priv)) | 7325 | else if (IS_BROADWELL(dev_priv)) |