drm/i915: merge the two hpd loops in intel_hpd_irq_handler to one
authorJani Nikula <jani.nikula@intel.com>
Thu, 28 May 2015 12:43:51 +0000 (15:43 +0300)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 29 May 2015 08:15:30 +0000 (10:15 +0200)
Nothing in the two consecutive loops over hpd pins depends on state in a
larger context than the single hpd pin. If we skip the rest of the loop
on short hpd pulses, we can merge the two loops into one.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_irq.c

index 4840b21c1869405b97d9c6ef39ed8262f25a8fc1..b53b91744a17b5d38840af3898e3a34be1318dd5 100644 (file)
@@ -1463,22 +1463,17 @@ static void intel_hpd_irq_handler(struct drm_device *dev,
                         * For long HPD pulses we want to have the digital queue happen,
                         * but we still want HPD storm detection to function.
                         */
+                       queue_dig = true;
                        if (long_hpd) {
                                dev_priv->hotplug.long_port_mask |= (1 << port);
+                               /* FIXME: this can be simplified. */
                                dig_port_mask |= hpd[i];
                        } else {
                                /* for short HPD just trigger the digital queue */
                                dev_priv->hotplug.short_port_mask |= (1 << port);
-                               hotplug_trigger &= ~hpd[i];
+                               continue;
                        }
-
-                       queue_dig = true;
                }
-       }
-
-       for_each_hpd_pin(i) {
-               if (!(hpd[i] & hotplug_trigger))
-                       continue;
 
                if (dev_priv->hotplug.stats[i].state == HPD_DISABLED) {
                        /*