i915_queue_hangcheck(dev);
}
-void gen6_set_pm_mask(struct drm_i915_private *dev_priv,
- u32 pm_iir, int new_delay)
-{
- if (pm_iir & GEN6_PM_RP_UP_THRESHOLD) {
- if (new_delay >= dev_priv->rps.max_freq_softlimit) {
- /* Mask UP THRESHOLD Interrupts */
- I915_WRITE(GEN6_PMINTRMSK,
- I915_READ(GEN6_PMINTRMSK) |
- GEN6_PM_RP_UP_THRESHOLD);
- dev_priv->rps.rp_up_masked = true;
- }
- if (dev_priv->rps.rp_down_masked) {
- /* UnMask DOWN THRESHOLD Interrupts */
- I915_WRITE(GEN6_PMINTRMSK,
- I915_READ(GEN6_PMINTRMSK) &
- ~GEN6_PM_RP_DOWN_THRESHOLD);
- dev_priv->rps.rp_down_masked = false;
- }
- } else if (pm_iir & GEN6_PM_RP_DOWN_THRESHOLD) {
- if (new_delay <= dev_priv->rps.min_freq_softlimit) {
- /* Mask DOWN THRESHOLD Interrupts */
- I915_WRITE(GEN6_PMINTRMSK,
- I915_READ(GEN6_PMINTRMSK) |
- GEN6_PM_RP_DOWN_THRESHOLD);
- dev_priv->rps.rp_down_masked = true;
- }
-
- if (dev_priv->rps.rp_up_masked) {
- /* UnMask UP THRESHOLD Interrupts */
- I915_WRITE(GEN6_PMINTRMSK,
- I915_READ(GEN6_PMINTRMSK) &
- ~GEN6_PM_RP_UP_THRESHOLD);
- dev_priv->rps.rp_up_masked = false;
- }
- }
-}
-
static void gen6_pm_rps_work(struct work_struct *work)
{
drm_i915_private_t *dev_priv = container_of(work, drm_i915_private_t,
dev_priv->rps.min_freq_softlimit,
dev_priv->rps.max_freq_softlimit);
- gen6_set_pm_mask(dev_priv, pm_iir, new_delay);
dev_priv->rps.last_adj = new_delay - dev_priv->rps.cur_freq;
if (IS_VALLEYVIEW(dev_priv->dev))
I915_WRITE(VLV_GTLC_SURVIVABILITY_REG,
I915_READ(VLV_GTLC_SURVIVABILITY_REG) &
~VLV_GFX_CLK_FORCE_ON_BIT);
-
- /* Unmask Up interrupts */
- dev_priv->rps.rp_up_masked = true;
- gen6_set_pm_mask(dev_priv, GEN6_PM_RP_DOWN_THRESHOLD,
- dev_priv->rps.min_freq_softlimit);
}
void gen6_rps_idle(struct drm_i915_private *dev_priv)
valleyview_set_rps(dev_priv->dev, dev_priv->rps.efficient_freq);
- dev_priv->rps.rp_up_masked = false;
- dev_priv->rps.rp_down_masked = false;
-
gen6_enable_rps_interrupts(dev);
gen6_gt_force_wake_put(dev_priv, FORCEWAKE_ALL);