|
@@ -743,17 +743,32 @@ static int i915_interrupt_info(struct seq_file *m, void *data)
|
|
|
I915_READ(VLV_IIR_RW));
|
|
|
seq_printf(m, "Display IMR:\t%08x\n",
|
|
|
I915_READ(VLV_IMR));
|
|
|
- for_each_pipe(dev_priv, pipe)
|
|
|
+ for_each_pipe(dev_priv, pipe) {
|
|
|
+ enum intel_display_power_domain power_domain;
|
|
|
+
|
|
|
+ power_domain = POWER_DOMAIN_PIPE(pipe);
|
|
|
+ if (!intel_display_power_get_if_enabled(dev_priv,
|
|
|
+ power_domain)) {
|
|
|
+ seq_printf(m, "Pipe %c power disabled\n",
|
|
|
+ pipe_name(pipe));
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
seq_printf(m, "Pipe %c stat:\t%08x\n",
|
|
|
pipe_name(pipe),
|
|
|
I915_READ(PIPESTAT(pipe)));
|
|
|
|
|
|
+ intel_display_power_put(dev_priv, power_domain);
|
|
|
+ }
|
|
|
+
|
|
|
+ intel_display_power_get(dev_priv, POWER_DOMAIN_INIT);
|
|
|
seq_printf(m, "Port hotplug:\t%08x\n",
|
|
|
I915_READ(PORT_HOTPLUG_EN));
|
|
|
seq_printf(m, "DPFLIPSTAT:\t%08x\n",
|
|
|
I915_READ(VLV_DPFLIPSTAT));
|
|
|
seq_printf(m, "DPINVGTT:\t%08x\n",
|
|
|
I915_READ(DPINVGTT));
|
|
|
+ intel_display_power_put(dev_priv, POWER_DOMAIN_INIT);
|
|
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
|
seq_printf(m, "GT Interrupt IMR %d:\t%08x\n",
|
|
@@ -1396,14 +1411,9 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused)
|
|
|
static int ironlake_drpc_info(struct seq_file *m)
|
|
|
{
|
|
|
struct drm_i915_private *dev_priv = node_to_i915(m->private);
|
|
|
- struct drm_device *dev = &dev_priv->drm;
|
|
|
u32 rgvmodectl, rstdbyctl;
|
|
|
u16 crstandvid;
|
|
|
- int ret;
|
|
|
|
|
|
- ret = mutex_lock_interruptible(&dev->struct_mutex);
|
|
|
- if (ret)
|
|
|
- return ret;
|
|
|
intel_runtime_pm_get(dev_priv);
|
|
|
|
|
|
rgvmodectl = I915_READ(MEMMODECTL);
|
|
@@ -1411,7 +1421,6 @@ static int ironlake_drpc_info(struct seq_file *m)
|
|
|
crstandvid = I915_READ16(CRSTANDVID);
|
|
|
|
|
|
intel_runtime_pm_put(dev_priv);
|
|
|
- mutex_unlock(&dev->struct_mutex);
|
|
|
|
|
|
seq_printf(m, "HD boost: %s\n", yesno(rgvmodectl & MEMMODE_BOOST_EN));
|
|
|
seq_printf(m, "Boost freq: %d\n",
|
|
@@ -1757,6 +1766,7 @@ static int i915_sr_status(struct seq_file *m, void *unused)
|
|
|
bool sr_enabled = false;
|
|
|
|
|
|
intel_runtime_pm_get(dev_priv);
|
|
|
+ intel_display_power_get(dev_priv, POWER_DOMAIN_INIT);
|
|
|
|
|
|
if (HAS_PCH_SPLIT(dev_priv))
|
|
|
sr_enabled = I915_READ(WM1_LP_ILK) & WM1_LP_SR_EN;
|
|
@@ -1770,6 +1780,7 @@ static int i915_sr_status(struct seq_file *m, void *unused)
|
|
|
else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
|
|
|
sr_enabled = I915_READ(FW_BLC_SELF_VLV) & FW_CSPWRDWNEN;
|
|
|
|
|
|
+ intel_display_power_put(dev_priv, POWER_DOMAIN_INIT);
|
|
|
intel_runtime_pm_put(dev_priv);
|
|
|
|
|
|
seq_printf(m, "self-refresh: %s\n",
|
|
@@ -2091,12 +2102,7 @@ static const char *swizzle_string(unsigned swizzle)
|
|
|
static int i915_swizzle_info(struct seq_file *m, void *data)
|
|
|
{
|
|
|
struct drm_i915_private *dev_priv = node_to_i915(m->private);
|
|
|
- struct drm_device *dev = &dev_priv->drm;
|
|
|
- int ret;
|
|
|
|
|
|
- ret = mutex_lock_interruptible(&dev->struct_mutex);
|
|
|
- if (ret)
|
|
|
- return ret;
|
|
|
intel_runtime_pm_get(dev_priv);
|
|
|
|
|
|
seq_printf(m, "bit6 swizzle for X-tiling = %s\n",
|
|
@@ -2136,7 +2142,6 @@ static int i915_swizzle_info(struct seq_file *m, void *data)
|
|
|
seq_puts(m, "L-shaped memory detected\n");
|
|
|
|
|
|
intel_runtime_pm_put(dev_priv);
|
|
|
- mutex_unlock(&dev->struct_mutex);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -2542,11 +2547,22 @@ static int i915_edp_psr_status(struct seq_file *m, void *data)
|
|
|
enabled = I915_READ(EDP_PSR_CTL) & EDP_PSR_ENABLE;
|
|
|
else {
|
|
|
for_each_pipe(dev_priv, pipe) {
|
|
|
+ enum transcoder cpu_transcoder =
|
|
|
+ intel_pipe_to_cpu_transcoder(dev_priv, pipe);
|
|
|
+ enum intel_display_power_domain power_domain;
|
|
|
+
|
|
|
+ power_domain = POWER_DOMAIN_TRANSCODER(cpu_transcoder);
|
|
|
+ if (!intel_display_power_get_if_enabled(dev_priv,
|
|
|
+ power_domain))
|
|
|
+ continue;
|
|
|
+
|
|
|
stat[pipe] = I915_READ(VLV_PSRSTAT(pipe)) &
|
|
|
VLV_EDP_PSR_CURR_STATE_MASK;
|
|
|
if ((stat[pipe] == VLV_EDP_PSR_ACTIVE_NORFB_UP) ||
|
|
|
(stat[pipe] == VLV_EDP_PSR_ACTIVE_SF_UPDATE))
|
|
|
enabled = true;
|
|
|
+
|
|
|
+ intel_display_power_put(dev_priv, power_domain);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -3094,6 +3110,8 @@ static int i915_engine_info(struct seq_file *m, void *unused)
|
|
|
struct intel_engine_cs *engine;
|
|
|
enum intel_engine_id id;
|
|
|
|
|
|
+ intel_runtime_pm_get(dev_priv);
|
|
|
+
|
|
|
for_each_engine(engine, dev_priv, id) {
|
|
|
struct intel_breadcrumbs *b = &engine->breadcrumbs;
|
|
|
struct drm_i915_gem_request *rq;
|
|
@@ -3213,6 +3231,8 @@ static int i915_engine_info(struct seq_file *m, void *unused)
|
|
|
seq_puts(m, "\n");
|
|
|
}
|
|
|
|
|
|
+ intel_runtime_pm_put(dev_priv);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -4799,13 +4819,9 @@ i915_wedged_set(void *data, u64 val)
|
|
|
if (i915_reset_in_progress(&dev_priv->gpu_error))
|
|
|
return -EAGAIN;
|
|
|
|
|
|
- intel_runtime_pm_get(dev_priv);
|
|
|
-
|
|
|
i915_handle_error(dev_priv, val,
|
|
|
"Manually setting wedged to %llu", val);
|
|
|
|
|
|
- intel_runtime_pm_put(dev_priv);
|
|
|
-
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -5040,22 +5056,16 @@ static int
|
|
|
i915_cache_sharing_get(void *data, u64 *val)
|
|
|
{
|
|
|
struct drm_i915_private *dev_priv = data;
|
|
|
- struct drm_device *dev = &dev_priv->drm;
|
|
|
u32 snpcr;
|
|
|
- int ret;
|
|
|
|
|
|
if (!(IS_GEN6(dev_priv) || IS_GEN7(dev_priv)))
|
|
|
return -ENODEV;
|
|
|
|
|
|
- ret = mutex_lock_interruptible(&dev->struct_mutex);
|
|
|
- if (ret)
|
|
|
- return ret;
|
|
|
intel_runtime_pm_get(dev_priv);
|
|
|
|
|
|
snpcr = I915_READ(GEN6_MBCUNIT_SNPCR);
|
|
|
|
|
|
intel_runtime_pm_put(dev_priv);
|
|
|
- mutex_unlock(&dev->struct_mutex);
|
|
|
|
|
|
*val = (snpcr & GEN6_MBC_SNPCR_MASK) >> GEN6_MBC_SNPCR_SHIFT;
|
|
|
|