[PATCH] drm/i915: Add additional power well get/put logs
Vanshidhar Konda
vanshidhar.r.konda at intel.com
Sat Mar 2 21:22:42 UTC 2019
For FDO 108800 it seems like the reference count on the display
power-well is non-zero at the time the other power-wells for
display domain are turned off. The kernel doesn't invoke runtime
suspend call on the Intel GFX device due to non-zero ref count.
This patch adds additional logging for ref count on display domain
and individual power wells in the display domain.
---
drivers/gpu/drm/i915/intel_runtime_pm.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c
index aa974b11928a..0f152bd88ecd 100644
--- a/drivers/gpu/drm/i915/intel_runtime_pm.c
+++ b/drivers/gpu/drm/i915/intel_runtime_pm.c
@@ -437,6 +437,8 @@ static void intel_power_well_disable(struct drm_i915_private *dev_priv,
static void intel_power_well_get(struct drm_i915_private *dev_priv,
struct i915_power_well *power_well)
{
+ DRM_DEBUG_KMS("Getting power-well %s count: %d\n", power_well->desc->name,
+ power_well->count);
if (!power_well->count++)
intel_power_well_enable(dev_priv, power_well);
}
@@ -447,6 +449,8 @@ static void intel_power_well_put(struct drm_i915_private *dev_priv,
WARN(!power_well->count, "Use count on power well %s is already zero",
power_well->desc->name);
+ DRM_DEBUG_KMS("Putting power-well %s count: %d\n", power_well->desc->name,
+ power_well->count);
if (!--power_well->count)
intel_power_well_disable(dev_priv, power_well);
}
@@ -1859,14 +1863,18 @@ intel_wakeref_t intel_display_power_get(struct drm_i915_private *dev_priv,
enum intel_display_power_domain domain)
{
struct i915_power_domains *power_domains = &dev_priv->power_domains;
+ int display_power_domain_count;
intel_wakeref_t wakeref = intel_runtime_pm_get(dev_priv);
mutex_lock(&power_domains->lock);
+ display_power_domain_count = power_domains->domain_use_count[domain];
__intel_display_power_get_domain(dev_priv, domain);
mutex_unlock(&power_domains->lock);
+ DRM_DEBUG_KMS("Getting display domain use count: %d",
+ display_power_domain_count);
return wakeref;
}
@@ -1889,6 +1897,7 @@ intel_display_power_get_if_enabled(struct drm_i915_private *dev_priv,
struct i915_power_domains *power_domains = &dev_priv->power_domains;
intel_wakeref_t wakeref;
bool is_enabled;
+ int display_power_domain_count;
wakeref = intel_runtime_pm_get_if_in_use(dev_priv);
if (!wakeref)
@@ -1896,6 +1905,7 @@ intel_display_power_get_if_enabled(struct drm_i915_private *dev_priv,
mutex_lock(&power_domains->lock);
+ display_power_domain_count = power_domains->domain_use_count[domain];
if (__intel_display_power_is_enabled(dev_priv, domain)) {
__intel_display_power_get_domain(dev_priv, domain);
is_enabled = true;
@@ -1910,6 +1920,9 @@ intel_display_power_get_if_enabled(struct drm_i915_private *dev_priv,
wakeref = 0;
}
+ DRM_DEBUG_KMS("Get display domain use count: %d, is_enabled: %d",
+ display_power_domain_count, is_enabled);
+
return wakeref;
}
@@ -1918,11 +1931,13 @@ static void __intel_display_power_put(struct drm_i915_private *dev_priv,
{
struct i915_power_domains *power_domains;
struct i915_power_well *power_well;
+ int display_domain_use_count;
power_domains = &dev_priv->power_domains;
mutex_lock(&power_domains->lock);
+ display_domain_use_count = power_domains->domain_use_count[domain];
WARN(!power_domains->domain_use_count[domain],
"Use count on domain %s is already zero\n",
intel_display_power_domain_str(domain));
@@ -1932,6 +1947,8 @@ static void __intel_display_power_put(struct drm_i915_private *dev_priv,
intel_power_well_put(dev_priv, power_well);
mutex_unlock(&power_domains->lock);
+
+ DRM_DEBUG_KMS("Put display domain use count: %d", display_domain_use_count);
}
/**
--
2.20.1
More information about the Intel-gfx-trybot
mailing list