drm/i915: Don't WARN nor handle unexpected hpd interrupts on gmch platforms
The status bits are unconditionally set, the control bits only enable
the actual interrupt generation. Which means if we get some random
other interrupts we'll bogusly complain about them.
So restrict the WARN to platforms with a sane hotplug interrupt
handling scheme. And even more important also don't attempt to process
the hpd bit since we've detected a storm already. Instead just clear
the bit silently.
This WARN has been introduced in
commit b8f102e8bf
Author: Egbert Eich <eich@suse.de>
Date: Fri Jul 26 14:14:24 2013 +0200
drm/i915: Add messages useful for HPD storm detection debugging (v2)
before that we silently handled the hpd event and so partially
defeated the storm detection.
v2: Pimp commit message (Jani)
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: Egbert Eich <eich@suse.de>
Cc: bitlord <bitlord0xff@gmail.com>
Reported-by: bitlord <bitlord0xff@gmail.com>
Cc: stable@vger.kernel.org
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
This commit is contained in:
parent
0f9dc59db6
commit
3ff04a160a
|
@ -1362,11 +1362,21 @@ static inline void intel_hpd_irq_handler(struct drm_device *dev,
|
||||||
spin_lock(&dev_priv->irq_lock);
|
spin_lock(&dev_priv->irq_lock);
|
||||||
for (i = 1; i < HPD_NUM_PINS; i++) {
|
for (i = 1; i < HPD_NUM_PINS; i++) {
|
||||||
|
|
||||||
WARN_ONCE(hpd[i] & hotplug_trigger &&
|
if (hpd[i] & hotplug_trigger &&
|
||||||
dev_priv->hpd_stats[i].hpd_mark == HPD_DISABLED,
|
dev_priv->hpd_stats[i].hpd_mark == HPD_DISABLED) {
|
||||||
|
/*
|
||||||
|
* On GMCH platforms the interrupt mask bits only
|
||||||
|
* prevent irq generation, not the setting of the
|
||||||
|
* hotplug bits itself. So only WARN about unexpected
|
||||||
|
* interrupts on saner platforms.
|
||||||
|
*/
|
||||||
|
WARN_ONCE(INTEL_INFO(dev)->gen >= 5 && !IS_VALLEYVIEW(dev),
|
||||||
"Received HPD interrupt (0x%08x) on pin %d (0x%08x) although disabled\n",
|
"Received HPD interrupt (0x%08x) on pin %d (0x%08x) although disabled\n",
|
||||||
hotplug_trigger, i, hpd[i]);
|
hotplug_trigger, i, hpd[i]);
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (!(hpd[i] & hotplug_trigger) ||
|
if (!(hpd[i] & hotplug_trigger) ||
|
||||||
dev_priv->hpd_stats[i].hpd_mark != HPD_ENABLED)
|
dev_priv->hpd_stats[i].hpd_mark != HPD_ENABLED)
|
||||||
continue;
|
continue;
|
||||||
|
|
Loading…
Reference in New Issue