[Intel-gfx] [PATCH 05/24] drm/i915: fold the hpd_irq_setup call into intel_hpd_irq_handler
Daniel Vetter
daniel.vetter at ffwll.ch
Wed Jun 12 13:37:07 CEST 2013
We already have a vfunc for this (and other parts of the hpd storm
handling code already use it).
Cc: Egbert Eich <eich at suse.de>
Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
---
drivers/gpu/drm/i915/i915_irq.c | 29 +++++++++++------------------
1 file changed, 11 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index ab3368e..1f8d914 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -88,9 +88,6 @@ static const u32 hpd_status_i915[] = { /* i915 and valleyview are the same */
[HPD_PORT_D] = PORTD_HOTPLUG_INT_STATUS
};
-static void ibx_hpd_irq_setup(struct drm_device *dev);
-static void i915_hpd_irq_setup(struct drm_device *dev);
-
/* For display hotplug interrupt */
static void
ironlake_enable_display_irq(drm_i915_private_t *dev_priv, u32 mask)
@@ -878,14 +875,14 @@ static void gen6_queue_rps_work(struct drm_i915_private *dev_priv,
#define HPD_STORM_DETECT_PERIOD 1000
#define HPD_STORM_THRESHOLD 5
-static inline bool intel_hpd_irq_handler(struct drm_device *dev,
+static inline void intel_hpd_irq_handler(struct drm_device *dev,
u32 hotplug_trigger,
const u32 *hpd)
{
drm_i915_private_t *dev_priv = dev->dev_private;
unsigned long irqflags;
int i;
- bool ret = false;
+ bool storm_detected = false;
spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
@@ -905,7 +902,7 @@ static inline bool intel_hpd_irq_handler(struct drm_device *dev,
dev_priv->hpd_stats[i].hpd_mark = HPD_MARK_DISABLED;
dev_priv->hpd_event_bits &= ~(1 << i);
DRM_DEBUG_KMS("HPD interrupt storm detected on PIN %d\n", i);
- ret = true;
+ storm_detected = true;
} else {
dev_priv->hpd_stats[i].hpd_cnt++;
}
@@ -913,7 +910,8 @@ static inline bool intel_hpd_irq_handler(struct drm_device *dev,
spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
- return ret;
+ if (storm_detected)
+ dev_priv->display.hpd_irq_setup(dev);
}
static void gmbus_irq_handler(struct drm_device *dev)
@@ -1021,8 +1019,7 @@ static irqreturn_t valleyview_irq_handler(int irq, void *arg)
DRM_DEBUG_DRIVER("hotplug event received, stat 0x%08x\n",
hotplug_status);
if (hotplug_trigger) {
- if (intel_hpd_irq_handler(dev, hotplug_trigger, hpd_status_i915))
- i915_hpd_irq_setup(dev);
+ intel_hpd_irq_handler(dev, hotplug_trigger, hpd_status_i915);
queue_work(dev_priv->wq,
&dev_priv->hotplug_work);
}
@@ -1052,8 +1049,7 @@ static void ibx_irq_handler(struct drm_device *dev, u32 pch_iir)
u32 hotplug_trigger = pch_iir & SDE_HOTPLUG_MASK;
if (hotplug_trigger) {
- if (intel_hpd_irq_handler(dev, hotplug_trigger, hpd_ibx))
- ibx_hpd_irq_setup(dev);
+ intel_hpd_irq_handler(dev, hotplug_trigger, hpd_ibx);
queue_work(dev_priv->wq, &dev_priv->hotplug_work);
}
if (pch_iir & SDE_AUDIO_POWER_MASK) {
@@ -1157,8 +1153,7 @@ static void cpt_irq_handler(struct drm_device *dev, u32 pch_iir)
u32 hotplug_trigger = pch_iir & SDE_HOTPLUG_MASK_CPT;
if (hotplug_trigger) {
- if (intel_hpd_irq_handler(dev, hotplug_trigger, hpd_cpt))
- ibx_hpd_irq_setup(dev);
+ intel_hpd_irq_handler(dev, hotplug_trigger, hpd_cpt);
queue_work(dev_priv->wq, &dev_priv->hotplug_work);
}
if (pch_iir & SDE_AUDIO_POWER_MASK_CPT) {
@@ -3174,8 +3169,7 @@ static irqreturn_t i915_irq_handler(int irq, void *arg)
DRM_DEBUG_DRIVER("hotplug event received, stat 0x%08x\n",
hotplug_status);
if (hotplug_trigger) {
- if (intel_hpd_irq_handler(dev, hotplug_trigger, hpd_status_i915))
- i915_hpd_irq_setup(dev);
+ intel_hpd_irq_handler(dev, hotplug_trigger, hpd_status_i915);
queue_work(dev_priv->wq,
&dev_priv->hotplug_work);
}
@@ -3420,9 +3414,8 @@ static irqreturn_t i965_irq_handler(int irq, void *arg)
DRM_DEBUG_DRIVER("hotplug event received, stat 0x%08x\n",
hotplug_status);
if (hotplug_trigger) {
- if (intel_hpd_irq_handler(dev, hotplug_trigger,
- IS_G4X(dev) ? hpd_status_gen4 : hpd_status_i965))
- i915_hpd_irq_setup(dev);
+ intel_hpd_irq_handler(dev, hotplug_trigger,
+ IS_G4X(dev) ? hpd_status_gen4 : hpd_status_i965);
queue_work(dev_priv->wq,
&dev_priv->hotplug_work);
}
--
1.8.1.4
More information about the Intel-gfx
mailing list