aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSagar Arun Kamble <sagar.a.kamble@intel.com>2017-10-10 17:30:01 -0400
committerChris Wilson <chris@chris-wilson.co.uk>2017-10-11 03:56:52 -0400
commit3a85392c0ea0689d8d3ba1f9c9df5d3e32bfa517 (patch)
treeba2f1a7ffee28c0503d1be1f96866847a43d7e8e
parent415544d5a89fb2be3b12dc7c4682806323aabdbf (diff)
drm/i915: Separate RPS and RC6 handling for BDW
This patch separates RC6 and RPS enabling for BDW. RC6/RPS Disabling are handled through gen6 functions. PM Programming guide recommends a sequence within forcewakes to configure RC6, RPS and ring frequencies in sequence. With this patch the order is still maintained. v2: Update sequence numbers in RC6 programming and comment about intent of reset_rps during gen8_enable_rps. (Radoslaw) v3: Rebase. 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-4-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-3-chris@chris-wilson.co.uk
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 21a72f660e0f..540e23ab51df 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -6621,7 +6621,7 @@ static void gen9_enable_rc6(struct drm_i915_private *dev_priv)
6621 intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL); 6621 intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL);
6622} 6622}
6623 6623
6624static void gen8_enable_rps(struct drm_i915_private *dev_priv) 6624static void gen8_enable_rc6(struct drm_i915_private *dev_priv)
6625{ 6625{
6626 struct intel_engine_cs *engine; 6626 struct intel_engine_cs *engine;
6627 enum intel_engine_id id; 6627 enum intel_engine_id id;
@@ -6630,7 +6630,7 @@ static void gen8_enable_rps(struct drm_i915_private *dev_priv)
6630 /* 1a: Software RC state - RC0 */ 6630 /* 1a: Software RC state - RC0 */
6631 I915_WRITE(GEN6_RC_STATE, 0); 6631 I915_WRITE(GEN6_RC_STATE, 0);
6632 6632
6633 /* 1c & 1d: Get forcewake during program sequence. Although the driver 6633 /* 1b: Get forcewake during program sequence. Although the driver
6634 * hasn't enabled a state yet where we need forcewake, BIOS may have.*/ 6634 * hasn't enabled a state yet where we need forcewake, BIOS may have.*/
6635 intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL); 6635 intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL);
6636 6636
@@ -6655,7 +6655,14 @@ static void gen8_enable_rps(struct drm_i915_private *dev_priv)
6655 GEN7_RC_CTL_TO_MODE | 6655 GEN7_RC_CTL_TO_MODE |
6656 rc6_mask); 6656 rc6_mask);
6657 6657
6658 /* 4 Program defaults and thresholds for RPS*/ 6658 intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL);
6659}
6660
6661static void gen8_enable_rps(struct drm_i915_private *dev_priv)
6662{
6663 intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL);
6664
6665 /* 1 Program defaults and thresholds for RPS*/
6659 I915_WRITE(GEN6_RPNSWREQ, 6666 I915_WRITE(GEN6_RPNSWREQ,
6660 HSW_FREQUENCY(dev_priv->rps.rp1_freq)); 6667 HSW_FREQUENCY(dev_priv->rps.rp1_freq));
6661 I915_WRITE(GEN6_RC_VIDEO_FREQ, 6668 I915_WRITE(GEN6_RC_VIDEO_FREQ,
@@ -6675,7 +6682,7 @@ static void gen8_enable_rps(struct drm_i915_private *dev_priv)
6675 6682
6676 I915_WRITE(GEN6_RP_IDLE_HYSTERSIS, 10); 6683 I915_WRITE(GEN6_RP_IDLE_HYSTERSIS, 10);
6677 6684
6678 /* 5: Enable RPS */ 6685 /* 2: Enable RPS */
6679 I915_WRITE(GEN6_RP_CONTROL, 6686 I915_WRITE(GEN6_RP_CONTROL,
6680 GEN6_RP_MEDIA_TURBO | 6687 GEN6_RP_MEDIA_TURBO |
6681 GEN6_RP_MEDIA_HW_NORMAL_MODE | 6688 GEN6_RP_MEDIA_HW_NORMAL_MODE |
@@ -6684,8 +6691,6 @@ static void gen8_enable_rps(struct drm_i915_private *dev_priv)
6684 GEN6_RP_UP_BUSY_AVG | 6691 GEN6_RP_UP_BUSY_AVG |
6685 GEN6_RP_DOWN_IDLE_AVG); 6692 GEN6_RP_DOWN_IDLE_AVG);
6686 6693
6687 /* 6: Ring frequency + overclocking (our driver does this later */
6688
6689 reset_rps(dev_priv, gen6_set_rps); 6694 reset_rps(dev_priv, gen6_set_rps);
6690 6695
6691 intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL); 6696 intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL);
@@ -7976,6 +7981,7 @@ void intel_enable_gt_powersave(struct drm_i915_private *dev_priv)
7976 if (IS_GEN9_BC(dev_priv) || IS_CANNONLAKE(dev_priv)) 7981 if (IS_GEN9_BC(dev_priv) || IS_CANNONLAKE(dev_priv))
7977 gen6_update_ring_freq(dev_priv); 7982 gen6_update_ring_freq(dev_priv);
7978 } else if (IS_BROADWELL(dev_priv)) { 7983 } else if (IS_BROADWELL(dev_priv)) {
7984 gen8_enable_rc6(dev_priv);
7979 gen8_enable_rps(dev_priv); 7985 gen8_enable_rps(dev_priv);
7980 gen6_update_ring_freq(dev_priv); 7986 gen6_update_ring_freq(dev_priv);
7981 } else if (INTEL_GEN(dev_priv) >= 6) { 7987 } else if (INTEL_GEN(dev_priv) >= 6) {