diff options
author | Sagar Arun Kamble <sagar.a.kamble@intel.com> | 2017-10-10 17:30:01 -0400 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2017-10-11 03:56:52 -0400 |
commit | 3a85392c0ea0689d8d3ba1f9c9df5d3e32bfa517 (patch) | |
tree | ba2f1a7ffee28c0503d1be1f96866847a43d7e8e | |
parent | 415544d5a89fb2be3b12dc7c4682806323aabdbf (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.c | 18 |
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 | ||
6624 | static void gen8_enable_rps(struct drm_i915_private *dev_priv) | 6624 | static 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 | |||
6661 | static 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) { |