[PATCH 11/14] drm/i915: Do not turn power wells on or off when display is disabled

José Roberto de Souza jose.souza at intel.com
Sat Nov 10 02:18:24 UTC 2018


There is just two power wells calls left after the previous changes:
- POWER_DOMAIN_INIT: used in load, unload, resume and suspend driver
paths
- POWER_DOMAIN_GT_IRQ: used by GEM to reduce interrupt latencies when
DMC is loaded

Instead of adding several more 'if (INTEL_INFO(dev_priv)->num_pipes)'
it will be handled in intel_display_power_get/put() and if any
erroneous call is added later a error message will be printed making
easy get regressions.

Other important point is that it will not turn power wells on or off
but it will still grab and release runtime power management
references this way kernel can power down the whole GPU when it is
not in use.

Signed-off-by: José Roberto de Souza <jose.souza at intel.com>
---
 drivers/gpu/drm/i915/intel_runtime_pm.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c
index 0a982d0ca4c1..aa0baf8c2120 100644
--- a/drivers/gpu/drm/i915/intel_runtime_pm.c
+++ b/drivers/gpu/drm/i915/intel_runtime_pm.c
@@ -1572,6 +1572,9 @@ __intel_display_power_get_domain(struct drm_i915_private *dev_priv,
 	struct i915_power_domains *power_domains = &dev_priv->power_domains;
 	struct i915_power_well *power_well;
 
+	if (!HAS_DISPLAY(dev_priv))
+		DRM_ERROR("Enabling a power well with display disabled");
+
 	for_each_power_domain_well(dev_priv, power_well, BIT_ULL(domain))
 		intel_power_well_get(dev_priv, power_well);
 
@@ -1597,6 +1600,13 @@ void intel_display_power_get(struct drm_i915_private *dev_priv,
 
 	intel_runtime_pm_get(dev_priv);
 
+	/* With display disabled this should be the only 2 power domains
+	 * requested
+	 */
+	if ((domain == POWER_DOMAIN_INIT || domain == POWER_DOMAIN_GT_IRQ) &&
+	    !HAS_DISPLAY(dev_priv))
+		return;
+
 	mutex_lock(&power_domains->lock);
 
 	__intel_display_power_get_domain(dev_priv, domain);
@@ -1657,6 +1667,10 @@ void intel_display_power_put(struct drm_i915_private *dev_priv,
 	struct i915_power_domains *power_domains;
 	struct i915_power_well *power_well;
 
+	if ((domain == POWER_DOMAIN_INIT || domain == POWER_DOMAIN_GT_IRQ) &&
+	    !HAS_DISPLAY(dev_priv))
+		goto end;
+
 	power_domains = &dev_priv->power_domains;
 
 	mutex_lock(&power_domains->lock);
@@ -1671,6 +1685,7 @@ void intel_display_power_put(struct drm_i915_private *dev_priv,
 
 	mutex_unlock(&power_domains->lock);
 
+end:
 	intel_runtime_pm_put(dev_priv);
 }
 
-- 
2.19.1



More information about the Intel-gfx-trybot mailing list