|
@@ -3017,36 +3017,30 @@ void gen6_set_rps(struct drm_device *dev, u8 val)
|
|
|
WARN_ON(val > dev_priv->rps.max_freq_softlimit);
|
|
|
WARN_ON(val < dev_priv->rps.min_freq_softlimit);
|
|
|
|
|
|
- if (val == dev_priv->rps.cur_freq) {
|
|
|
- /* min/max delay may still have been modified so be sure to
|
|
|
- * write the limits value */
|
|
|
- I915_WRITE(GEN6_RP_INTERRUPT_LIMITS,
|
|
|
- gen6_rps_limits(dev_priv, val));
|
|
|
+ /* min/max delay may still have been modified so be sure to
|
|
|
+ * write the limits value.
|
|
|
+ */
|
|
|
+ if (val != dev_priv->rps.cur_freq) {
|
|
|
+ gen6_set_rps_thresholds(dev_priv, val);
|
|
|
|
|
|
- return;
|
|
|
+ if (IS_HASWELL(dev))
|
|
|
+ I915_WRITE(GEN6_RPNSWREQ,
|
|
|
+ HSW_FREQUENCY(val));
|
|
|
+ else
|
|
|
+ I915_WRITE(GEN6_RPNSWREQ,
|
|
|
+ GEN6_FREQUENCY(val) |
|
|
|
+ GEN6_OFFSET(0) |
|
|
|
+ GEN6_AGGRESSIVE_TURBO);
|
|
|
}
|
|
|
|
|
|
- gen6_set_rps_thresholds(dev_priv, val);
|
|
|
-
|
|
|
- if (IS_HASWELL(dev))
|
|
|
- I915_WRITE(GEN6_RPNSWREQ,
|
|
|
- HSW_FREQUENCY(val));
|
|
|
- else
|
|
|
- I915_WRITE(GEN6_RPNSWREQ,
|
|
|
- GEN6_FREQUENCY(val) |
|
|
|
- GEN6_OFFSET(0) |
|
|
|
- GEN6_AGGRESSIVE_TURBO);
|
|
|
-
|
|
|
/* Make sure we continue to get interrupts
|
|
|
* until we hit the minimum or maximum frequencies.
|
|
|
*/
|
|
|
- I915_WRITE(GEN6_RP_INTERRUPT_LIMITS,
|
|
|
- gen6_rps_limits(dev_priv, val));
|
|
|
+ I915_WRITE(GEN6_RP_INTERRUPT_LIMITS, gen6_rps_limits(dev_priv, val));
|
|
|
|
|
|
POSTING_READ(GEN6_RPNSWREQ);
|
|
|
|
|
|
dev_priv->rps.cur_freq = val;
|
|
|
-
|
|
|
trace_intel_gpu_freq_change(val * 50);
|
|
|
}
|
|
|
|