[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