diff options
author | Sagar Arun Kamble <sagar.a.kamble@intel.com> | 2017-10-10 17:30:03 -0400 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2017-10-11 03:56:53 -0400 |
commit | d46b00dc38c8aea80357a0dd04f57c097dbfa5b9 (patch) | |
tree | 51523e2134f04aca20200e87a8e566df89549f2c /drivers/gpu/drm/i915/intel_pm.c | |
parent | 0d6fc92a73e0c4dd8635268ef0ffb852986bba89 (diff) |
drm/i915: Separate RPS and RC6 handling for CHV
This patch separates enable/disable of RC6 and RPS for CHV.
v2: Fixed comment.
Signed-off-by: Sagar Arun Kamble <sagar.a.kamble@intel.com>
Cc: Imre Deak <imre.deak@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Reviewed-by: Radoslaw Szwichtenberg <radoslaw.szwichtenberg@intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/1507360055-19948-6-git-send-email-sagar.a.kamble@intel.com
Acked-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20171010213010.7415-5-chris@chris-wilson.co.uk
Diffstat (limited to 'drivers/gpu/drm/i915/intel_pm.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_pm.c | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index 5fb08271b91c..4843e88a7f35 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c | |||
@@ -6345,11 +6345,16 @@ static void gen6_disable_rps(struct drm_i915_private *dev_priv) | |||
6345 | I915_WRITE(GEN6_RP_CONTROL, 0); | 6345 | I915_WRITE(GEN6_RP_CONTROL, 0); |
6346 | } | 6346 | } |
6347 | 6347 | ||
6348 | static void cherryview_disable_rps(struct drm_i915_private *dev_priv) | 6348 | static void cherryview_disable_rc6(struct drm_i915_private *dev_priv) |
6349 | { | 6349 | { |
6350 | I915_WRITE(GEN6_RC_CONTROL, 0); | 6350 | I915_WRITE(GEN6_RC_CONTROL, 0); |
6351 | } | 6351 | } |
6352 | 6352 | ||
6353 | static void cherryview_disable_rps(struct drm_i915_private *dev_priv) | ||
6354 | { | ||
6355 | I915_WRITE(GEN6_RP_CONTROL, 0); | ||
6356 | } | ||
6357 | |||
6353 | static void valleyview_disable_rc6(struct drm_i915_private *dev_priv) | 6358 | static void valleyview_disable_rc6(struct drm_i915_private *dev_priv) |
6354 | { | 6359 | { |
6355 | /* We're doing forcewake before Disabling RC6, | 6360 | /* We're doing forcewake before Disabling RC6, |
@@ -7199,11 +7204,11 @@ static void valleyview_cleanup_gt_powersave(struct drm_i915_private *dev_priv) | |||
7199 | valleyview_cleanup_pctx(dev_priv); | 7204 | valleyview_cleanup_pctx(dev_priv); |
7200 | } | 7205 | } |
7201 | 7206 | ||
7202 | static void cherryview_enable_rps(struct drm_i915_private *dev_priv) | 7207 | static void cherryview_enable_rc6(struct drm_i915_private *dev_priv) |
7203 | { | 7208 | { |
7204 | struct intel_engine_cs *engine; | 7209 | struct intel_engine_cs *engine; |
7205 | enum intel_engine_id id; | 7210 | enum intel_engine_id id; |
7206 | u32 gtfifodbg, val, rc6_mode = 0, pcbr; | 7211 | u32 gtfifodbg, rc6_mode = 0, pcbr; |
7207 | 7212 | ||
7208 | WARN_ON(!mutex_is_locked(&dev_priv->rps.hw_lock)); | 7213 | WARN_ON(!mutex_is_locked(&dev_priv->rps.hw_lock)); |
7209 | 7214 | ||
@@ -7236,7 +7241,7 @@ static void cherryview_enable_rps(struct drm_i915_private *dev_priv) | |||
7236 | /* TO threshold set to 500 us ( 0x186 * 1.28 us) */ | 7241 | /* TO threshold set to 500 us ( 0x186 * 1.28 us) */ |
7237 | I915_WRITE(GEN6_RC6_THRESHOLD, 0x186); | 7242 | I915_WRITE(GEN6_RC6_THRESHOLD, 0x186); |
7238 | 7243 | ||
7239 | /* allows RC6 residency counter to work */ | 7244 | /* Allows RC6 residency counter to work */ |
7240 | I915_WRITE(VLV_COUNTER_CONTROL, | 7245 | I915_WRITE(VLV_COUNTER_CONTROL, |
7241 | _MASKED_BIT_ENABLE(VLV_COUNT_RANGE_HIGH | | 7246 | _MASKED_BIT_ENABLE(VLV_COUNT_RANGE_HIGH | |
7242 | VLV_MEDIA_RC6_COUNT_EN | | 7247 | VLV_MEDIA_RC6_COUNT_EN | |
@@ -7252,7 +7257,18 @@ static void cherryview_enable_rps(struct drm_i915_private *dev_priv) | |||
7252 | 7257 | ||
7253 | I915_WRITE(GEN6_RC_CONTROL, rc6_mode); | 7258 | I915_WRITE(GEN6_RC_CONTROL, rc6_mode); |
7254 | 7259 | ||
7255 | /* 4 Program defaults and thresholds for RPS*/ | 7260 | intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL); |
7261 | } | ||
7262 | |||
7263 | static void cherryview_enable_rps(struct drm_i915_private *dev_priv) | ||
7264 | { | ||
7265 | u32 val; | ||
7266 | |||
7267 | WARN_ON(!mutex_is_locked(&dev_priv->rps.hw_lock)); | ||
7268 | |||
7269 | intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL); | ||
7270 | |||
7271 | /* 1: Program defaults and thresholds for RPS*/ | ||
7256 | I915_WRITE(GEN6_RP_DOWN_TIMEOUT, 1000000); | 7272 | I915_WRITE(GEN6_RP_DOWN_TIMEOUT, 1000000); |
7257 | I915_WRITE(GEN6_RP_UP_THRESHOLD, 59400); | 7273 | I915_WRITE(GEN6_RP_UP_THRESHOLD, 59400); |
7258 | I915_WRITE(GEN6_RP_DOWN_THRESHOLD, 245000); | 7274 | I915_WRITE(GEN6_RP_DOWN_THRESHOLD, 245000); |
@@ -7261,7 +7277,7 @@ static void cherryview_enable_rps(struct drm_i915_private *dev_priv) | |||
7261 | 7277 | ||
7262 | I915_WRITE(GEN6_RP_IDLE_HYSTERSIS, 10); | 7278 | I915_WRITE(GEN6_RP_IDLE_HYSTERSIS, 10); |
7263 | 7279 | ||
7264 | /* 5: Enable RPS */ | 7280 | /* 2: Enable RPS */ |
7265 | I915_WRITE(GEN6_RP_CONTROL, | 7281 | I915_WRITE(GEN6_RP_CONTROL, |
7266 | GEN6_RP_MEDIA_HW_NORMAL_MODE | | 7282 | GEN6_RP_MEDIA_HW_NORMAL_MODE | |
7267 | GEN6_RP_MEDIA_IS_GFX | | 7283 | GEN6_RP_MEDIA_IS_GFX | |
@@ -7958,6 +7974,7 @@ void intel_disable_gt_powersave(struct drm_i915_private *dev_priv) | |||
7958 | gen9_disable_rc6(dev_priv); | 7974 | gen9_disable_rc6(dev_priv); |
7959 | gen9_disable_rps(dev_priv); | 7975 | gen9_disable_rps(dev_priv); |
7960 | } else if (IS_CHERRYVIEW(dev_priv)) { | 7976 | } else if (IS_CHERRYVIEW(dev_priv)) { |
7977 | cherryview_disable_rc6(dev_priv); | ||
7961 | cherryview_disable_rps(dev_priv); | 7978 | cherryview_disable_rps(dev_priv); |
7962 | } else if (IS_VALLEYVIEW(dev_priv)) { | 7979 | } else if (IS_VALLEYVIEW(dev_priv)) { |
7963 | valleyview_disable_rc6(dev_priv); | 7980 | valleyview_disable_rc6(dev_priv); |
@@ -7988,6 +8005,7 @@ void intel_enable_gt_powersave(struct drm_i915_private *dev_priv) | |||
7988 | mutex_lock(&dev_priv->rps.hw_lock); | 8005 | mutex_lock(&dev_priv->rps.hw_lock); |
7989 | 8006 | ||
7990 | if (IS_CHERRYVIEW(dev_priv)) { | 8007 | if (IS_CHERRYVIEW(dev_priv)) { |
8008 | cherryview_enable_rc6(dev_priv); | ||
7991 | cherryview_enable_rps(dev_priv); | 8009 | cherryview_enable_rps(dev_priv); |
7992 | } else if (IS_VALLEYVIEW(dev_priv)) { | 8010 | } else if (IS_VALLEYVIEW(dev_priv)) { |
7993 | valleyview_enable_rc6(dev_priv); | 8011 | valleyview_enable_rc6(dev_priv); |