aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_pm.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2015-04-07 11:20:28 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2015-04-10 02:56:01 -0400
commit8fb55197e64d5988ec57b54e973daeea72c3f2ff (patch)
tree15e9d92ec9346544fbcaad5a985123abd77e3946 /drivers/gpu/drm/i915/intel_pm.c
parentcf5d8a46a001c9421c7397699db55f962e0410fc (diff)
drm/i915: Agressive downclocking on Baytrail
Reuse the same reclocking strategy for Baytail as on its bigger brethren, Sandybridge and Ivybridge. In particular, this makes the device quicker to reclock (both up and down) though the tendency now is to downclock more aggressively to compensate for the RPS boosts. v2: Rebase v3: Exclude Cherrytrail as Deepak was concerned that the increased number of register writes would wake the common powerwell too often. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Deepak S <deepak.s@linux.intel.com> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Reviewed-by: Deepak S <deepak.s@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_pm.c')
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 67e1e61c50e7..9c705dec853e 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -3934,6 +3934,8 @@ static void gen6_set_rps_thresholds(struct drm_i915_private *dev_priv, u8 val)
3934 GEN6_RP_DOWN_IDLE_AVG); 3934 GEN6_RP_DOWN_IDLE_AVG);
3935 3935
3936 dev_priv->rps.power = new_power; 3936 dev_priv->rps.power = new_power;
3937 dev_priv->rps.up_threshold = threshold_up;
3938 dev_priv->rps.down_threshold = threshold_down;
3937 dev_priv->rps.last_adj = 0; 3939 dev_priv->rps.last_adj = 0;
3938} 3940}
3939 3941
@@ -4005,8 +4007,11 @@ static void valleyview_set_rps(struct drm_device *dev, u8 val)
4005 "Odd GPU freq value\n")) 4007 "Odd GPU freq value\n"))
4006 val &= ~1; 4008 val &= ~1;
4007 4009
4008 if (val != dev_priv->rps.cur_freq) 4010 if (val != dev_priv->rps.cur_freq) {
4009 vlv_punit_write(dev_priv, PUNIT_REG_GPU_FREQ_REQ, val); 4011 vlv_punit_write(dev_priv, PUNIT_REG_GPU_FREQ_REQ, val);
4012 if (!IS_CHERRYVIEW(dev_priv))
4013 gen6_set_rps_thresholds(dev_priv, val);
4014 }
4010 4015
4011 I915_WRITE(GEN6_PMINTRMSK, gen6_rps_pm_mask(dev_priv, val)); 4016 I915_WRITE(GEN6_PMINTRMSK, gen6_rps_pm_mask(dev_priv, val));
4012 4017
@@ -4055,6 +4060,7 @@ static void vlv_set_rps_idle(struct drm_i915_private *dev_priv)
4055 & GENFREQSTATUS) == 0, 100)) 4060 & GENFREQSTATUS) == 0, 100))
4056 DRM_ERROR("timed out waiting for Punit\n"); 4061 DRM_ERROR("timed out waiting for Punit\n");
4057 4062
4063 gen6_set_rps_thresholds(dev_priv, val);
4058 vlv_force_gfx_clock(dev_priv, false); 4064 vlv_force_gfx_clock(dev_priv, false);
4059 4065
4060 I915_WRITE(GEN6_PMINTRMSK, gen6_rps_pm_mask(dev_priv, val)); 4066 I915_WRITE(GEN6_PMINTRMSK, gen6_rps_pm_mask(dev_priv, val));