[PATCH 4/4] fixing runtime pm

José Roberto de Souza jose.souza at intel.com
Sat Jan 19 02:06:58 UTC 2019


---
 drivers/gpu/drm/i915/intel_hotplug.c | 32 ++++++++++++++++++++--------
 1 file changed, 23 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_hotplug.c b/drivers/gpu/drm/i915/intel_hotplug.c
index ae7b13150211..2e8aa7459a79 100644
--- a/drivers/gpu/drm/i915/intel_hotplug.c
+++ b/drivers/gpu/drm/i915/intel_hotplug.c
@@ -392,11 +392,16 @@ void intel_hotplug_tc_wa_work(struct work_struct *work)
 	struct intel_dp *intel_dp = &dig_port->dp;
 	struct intel_connector *intel_connector = intel_dp->attached_connector;
 	struct drm_device *dev = &dev_priv->drm;
+	intel_wakeref_t wakeref;
 	bool ret;
 
+	wakeref = intel_runtime_pm_get(dev_priv);
+
 	if (!intel_digital_port_connected(intel_encoder) ||
-	    dig_port->tc_type != TC_PORT_TYPEC)
+	    dig_port->tc_type != TC_PORT_TYPEC) {
+		intel_runtime_pm_put(dev_priv, wakeref);
 		return;
+	}
 
 	mutex_lock(&dev->mode_config.mutex);
 	ret = intel_hotplug_tc_wa_test(dig_port);
@@ -406,6 +411,8 @@ void intel_hotplug_tc_wa_work(struct work_struct *work)
 
 	if (ret)
 		drm_kms_helper_hotplug_event(dev);
+
+	intel_runtime_pm_put(dev_priv, wakeref);
 }
 
 /*
@@ -448,9 +455,6 @@ static void i915_hotplug_work_func(struct work_struct *work)
 			DRM_DEBUG_KMS("Connector %s (pin %i) received hotplug event.\n",
 				      connector->name, intel_encoder->hpd_pin);
 
-
-			// missing get a intel_wakeref_t wakeref = intel_runtime_pm_get(dev_priv);?
-
 			/*
 			 * Type-C dongles WA: Unpowered type-C dongles can take
 			 * some time to be responsible, so let's try to do a
@@ -459,11 +463,21 @@ static void i915_hotplug_work_func(struct work_struct *work)
 			 * to try a DPCD read again after a few micro-seconds.
 			 */
 			if (IS_ICELAKE(dev_priv) &&
-			    intel_port_is_tc(dev_priv, intel_encoder->port) &&
-			    intel_digital_port_connected(intel_encoder) &&
-			    dig_port->tc_type == TC_PORT_TYPEC) {
-				dig_port->tc_wa_count = 0;
-				if (!intel_hotplug_tc_wa_test(dig_port))
+			    intel_port_is_tc(dev_priv, intel_encoder->port)) {
+				intel_wakeref_t wakeref;
+				bool skip_hotplug = false;
+
+				wakeref = intel_runtime_pm_get(dev_priv);
+
+				if (intel_digital_port_connected(intel_encoder) &&
+				    dig_port->tc_type == TC_PORT_TYPEC) {
+					dig_port->tc_wa_count = 0;
+					skip_hotplug = !intel_hotplug_tc_wa_test(dig_port);
+				}
+
+				intel_runtime_pm_put(dev_priv, wakeref);
+
+				if (skip_hotplug)
 					continue;
 			}
 
-- 
2.20.1



More information about the Intel-gfx-trybot mailing list