aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2014-03-27 04:24:20 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-03-31 04:46:35 -0400
commiteb64cad1c13a22cd4f3b061720c71f35e44eec20 (patch)
tree81f51b1115f8af2e985ea57b8cfcf26fd6123feb
parent037bde19a43e299d30f0490bba9be32ab355975c (diff)
drm/i915: Refactor gen6_set_rps
What used to be a short-circuit now needs to adjust interrupt masking in response to user requests for changing the min/max allowed frequencies. This is currently done by a special case and early return, but the next patch adds another common action to take, so refactor the code to reduce duplication. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by:Deepak S <deepak.s@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/intel_pm.c34
1 files changed, 14 insertions, 20 deletions
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index f702ac8a2f50..b6291835fb16 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -3017,36 +3017,30 @@ void gen6_set_rps(struct drm_device *dev, u8 val)
3017 WARN_ON(val > dev_priv->rps.max_freq_softlimit); 3017 WARN_ON(val > dev_priv->rps.max_freq_softlimit);
3018 WARN_ON(val < dev_priv->rps.min_freq_softlimit); 3018 WARN_ON(val < dev_priv->rps.min_freq_softlimit);
3019 3019
3020 if (val == dev_priv->rps.cur_freq) { 3020 /* min/max delay may still have been modified so be sure to
3021 /* min/max delay may still have been modified so be sure to 3021 * write the limits value.
3022 * write the limits value */ 3022 */
3023 I915_WRITE(GEN6_RP_INTERRUPT_LIMITS, 3023 if (val != dev_priv->rps.cur_freq) {
3024 gen6_rps_limits(dev_priv, val)); 3024 gen6_set_rps_thresholds(dev_priv, val);
3025 3025
3026 return; 3026 if (IS_HASWELL(dev))
3027 I915_WRITE(GEN6_RPNSWREQ,
3028 HSW_FREQUENCY(val));
3029 else
3030 I915_WRITE(GEN6_RPNSWREQ,
3031 GEN6_FREQUENCY(val) |
3032 GEN6_OFFSET(0) |
3033 GEN6_AGGRESSIVE_TURBO);
3027 } 3034 }
3028 3035
3029 gen6_set_rps_thresholds(dev_priv, val);
3030
3031 if (IS_HASWELL(dev))
3032 I915_WRITE(GEN6_RPNSWREQ,
3033 HSW_FREQUENCY(val));
3034 else
3035 I915_WRITE(GEN6_RPNSWREQ,
3036 GEN6_FREQUENCY(val) |
3037 GEN6_OFFSET(0) |
3038 GEN6_AGGRESSIVE_TURBO);
3039
3040 /* Make sure we continue to get interrupts 3036 /* Make sure we continue to get interrupts
3041 * until we hit the minimum or maximum frequencies. 3037 * until we hit the minimum or maximum frequencies.
3042 */ 3038 */
3043 I915_WRITE(GEN6_RP_INTERRUPT_LIMITS, 3039 I915_WRITE(GEN6_RP_INTERRUPT_LIMITS, gen6_rps_limits(dev_priv, val));
3044 gen6_rps_limits(dev_priv, val));
3045 3040
3046 POSTING_READ(GEN6_RPNSWREQ); 3041 POSTING_READ(GEN6_RPNSWREQ);
3047 3042
3048 dev_priv->rps.cur_freq = val; 3043 dev_priv->rps.cur_freq = val;
3049
3050 trace_intel_gpu_freq_change(val * 50); 3044 trace_intel_gpu_freq_change(val * 50);
3051} 3045}
3052 3046