Merge tag 'drm-for-v4.16' of git://people.freedesktop.org/~airlied/linux
[linux-2.6-block.git] / drivers / gpu / drm / i915 / i915_sysfs.c
index fb46ce3bd5f21f6519ef8ca432a22e6562882b73..b33d2158c234df68fc0a983b58daa37d74a74575 100644 (file)
@@ -42,14 +42,30 @@ static inline struct drm_i915_private *kdev_minor_to_i915(struct device *kdev)
 static u32 calc_residency(struct drm_i915_private *dev_priv,
                          i915_reg_t reg)
 {
-       return DIV_ROUND_CLOSEST_ULL(intel_rc6_residency_us(dev_priv, reg),
-                                    1000);
+       u64 res;
+
+       intel_runtime_pm_get(dev_priv);
+       res = intel_rc6_residency_us(dev_priv, reg);
+       intel_runtime_pm_put(dev_priv);
+
+       return DIV_ROUND_CLOSEST_ULL(res, 1000);
 }
 
 static ssize_t
 show_rc6_mask(struct device *kdev, struct device_attribute *attr, char *buf)
 {
-       return snprintf(buf, PAGE_SIZE, "%x\n", intel_rc6_enabled());
+       struct drm_i915_private *dev_priv = kdev_minor_to_i915(kdev);
+       unsigned int mask;
+
+       mask = 0;
+       if (HAS_RC6(dev_priv))
+               mask |= BIT(0);
+       if (HAS_RC6p(dev_priv))
+               mask |= BIT(1);
+       if (HAS_RC6pp(dev_priv))
+               mask |= BIT(2);
+
+       return snprintf(buf, PAGE_SIZE, "%x\n", mask);
 }
 
 static ssize_t
@@ -252,14 +268,9 @@ static ssize_t gt_act_freq_mhz_show(struct device *kdev,
                freq = vlv_punit_read(dev_priv, PUNIT_REG_GPU_FREQ_STS);
                ret = intel_gpu_freq(dev_priv, (freq >> 8) & 0xff);
        } else {
-               u32 rpstat = I915_READ(GEN6_RPSTAT1);
-               if (INTEL_GEN(dev_priv) >= 9)
-                       ret = (rpstat & GEN9_CAGF_MASK) >> GEN9_CAGF_SHIFT;
-               else if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv))
-                       ret = (rpstat & HSW_CAGF_MASK) >> HSW_CAGF_SHIFT;
-               else
-                       ret = (rpstat & GEN6_CAGF_MASK) >> GEN6_CAGF_SHIFT;
-               ret = intel_gpu_freq(dev_priv, ret);
+               ret = intel_gpu_freq(dev_priv,
+                                    intel_get_cagf(dev_priv,
+                                                   I915_READ(GEN6_RPSTAT1)));
        }
        mutex_unlock(&dev_priv->pcu_lock);