diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2014-03-27 04:24:20 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2014-03-31 04:46:35 -0400 |
commit | eb64cad1c13a22cd4f3b061720c71f35e44eec20 (patch) | |
tree | 81f51b1115f8af2e985ea57b8cfcf26fd6123feb | |
parent | 037bde19a43e299d30f0490bba9be32ab355975c (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.c | 34 |
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 | ||