Commit 0759af9e authored by Lyude Paul's avatar Lyude Paul

drm/i915: Clarify flow for disabling IRQs on storms

This is rather confusing to look at as-is:
dev_priv->display.hpd_irq_setup(dev_priv); in intel_hpd_irq_handler()
handles disabling the actual HPD IRQ, while
intel_hpd_irq_storm_disable() handles moving the HPD pin state over from
MARK_DISABLED to DISABLED along with enabling polling for it.

Changes since v3:
- Rename i915_hpd_irq_storm_disable() to
  i915_hpd_irq_storm_switch_to_polling() - Rodrigo Vivi
Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20181106213017.14563-5-lyude@redhat.com
parent a4af7889
...@@ -161,7 +161,8 @@ static bool intel_hpd_irq_storm_detect(struct drm_i915_private *dev_priv, ...@@ -161,7 +161,8 @@ static bool intel_hpd_irq_storm_detect(struct drm_i915_private *dev_priv,
return storm; return storm;
} }
static void intel_hpd_irq_storm_disable(struct drm_i915_private *dev_priv) static void
intel_hpd_irq_storm_switch_to_polling(struct drm_i915_private *dev_priv)
{ {
struct drm_device *dev = &dev_priv->drm; struct drm_device *dev = &dev_priv->drm;
struct intel_connector *intel_connector; struct intel_connector *intel_connector;
...@@ -351,8 +352,8 @@ static void i915_hotplug_work_func(struct work_struct *work) ...@@ -351,8 +352,8 @@ static void i915_hotplug_work_func(struct work_struct *work)
hpd_event_bits = dev_priv->hotplug.event_bits; hpd_event_bits = dev_priv->hotplug.event_bits;
dev_priv->hotplug.event_bits = 0; dev_priv->hotplug.event_bits = 0;
/* Disable hotplug on connectors that hit an irq storm. */ /* Enable polling for connectors which had HPD IRQ storms */
intel_hpd_irq_storm_disable(dev_priv); intel_hpd_irq_storm_switch_to_polling(dev_priv);
spin_unlock_irq(&dev_priv->irq_lock); spin_unlock_irq(&dev_priv->irq_lock);
...@@ -458,6 +459,10 @@ void intel_hpd_irq_handler(struct drm_i915_private *dev_priv, ...@@ -458,6 +459,10 @@ void intel_hpd_irq_handler(struct drm_i915_private *dev_priv,
} }
} }
/*
* Disable any IRQs that storms were detected on. Polling enablement
* happens later in our hotplug work.
*/
if (storm_detected && dev_priv->display_irqs_enabled) if (storm_detected && dev_priv->display_irqs_enabled)
dev_priv->display.hpd_irq_setup(dev_priv); dev_priv->display.hpd_irq_setup(dev_priv);
spin_unlock(&dev_priv->irq_lock); spin_unlock(&dev_priv->irq_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment