On Tue, Jul 07, 2015 at 02:22:20PM +0530, Sonika Jindal wrote: > Writing to PCH_PORT_HOTPLUG for each interrupt is not required. > Handle it only if hpd has actually occurred like we handle other > interrupts. > v2: Make few variables local to if block (Ville) > v3: Add check for ibx/cpt both (Ville). > While at it, remove the redundant check for hotplug_trigger from > pch_get_hpd_pins > > Signed-off-by: Sonika Jindal <sonika.jindal@xxxxxxxxx> > --- > drivers/gpu/drm/i915/i915_irq.c | 32 +++++++++++++++++--------------- > 1 file changed, 17 insertions(+), 15 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c > index a6fbe64..ba2c27c 100644 > --- a/drivers/gpu/drm/i915/i915_irq.c > +++ b/drivers/gpu/drm/i915/i915_irq.c > @@ -1266,9 +1266,6 @@ static void pch_get_hpd_pins(u32 *pin_mask, u32 *long_mask, > *pin_mask = 0; > *long_mask = 0; > > - if (!hotplug_trigger) > - return; > - Looks like BXT still depends on that. So you should change that too, or leave this in until someone else does it. > for_each_hpd_pin(i) { > if ((hpd[i] & hotplug_trigger) == 0) > continue; > @@ -1658,14 +1655,17 @@ static void ibx_irq_handler(struct drm_device *dev, u32 pch_iir) > struct drm_i915_private *dev_priv = dev->dev_private; > int pipe; > u32 hotplug_trigger = pch_iir & SDE_HOTPLUG_MASK; > - u32 dig_hotplug_reg; > - u32 pin_mask, long_mask; > > - dig_hotplug_reg = I915_READ(PCH_PORT_HOTPLUG); > - I915_WRITE(PCH_PORT_HOTPLUG, dig_hotplug_reg); > + if (hotplug_trigger) { > + u32 dig_hotplug_reg, pin_mask, long_mask; > > - pch_get_hpd_pins(&pin_mask, &long_mask, hotplug_trigger, dig_hotplug_reg, hpd_ibx); > - intel_hpd_irq_handler(dev, pin_mask, long_mask); > + dig_hotplug_reg = I915_READ(PCH_PORT_HOTPLUG); > + I915_WRITE(PCH_PORT_HOTPLUG, dig_hotplug_reg); > + > + pch_get_hpd_pins(&pin_mask, &long_mask, hotplug_trigger, > + dig_hotplug_reg, hpd_ibx); Indentation is fubar. > + intel_hpd_irq_handler(dev, pin_mask, long_mask); > + } > > if (pch_iir & SDE_AUDIO_POWER_MASK) { > int port = ffs((pch_iir & SDE_AUDIO_POWER_MASK) >> > @@ -1757,14 +1757,16 @@ static void cpt_irq_handler(struct drm_device *dev, u32 pch_iir) > struct drm_i915_private *dev_priv = dev->dev_private; > int pipe; > u32 hotplug_trigger = pch_iir & SDE_HOTPLUG_MASK_CPT; > - u32 dig_hotplug_reg; > - u32 pin_mask, long_mask; > > - dig_hotplug_reg = I915_READ(PCH_PORT_HOTPLUG); > - I915_WRITE(PCH_PORT_HOTPLUG, dig_hotplug_reg); > + if (hotplug_trigger) { > + u32 dig_hotplug_reg, pin_mask, long_mask; > > - pch_get_hpd_pins(&pin_mask, &long_mask, hotplug_trigger, dig_hotplug_reg, hpd_cpt); > - intel_hpd_irq_handler(dev, pin_mask, long_mask); > + dig_hotplug_reg = I915_READ(PCH_PORT_HOTPLUG); > + I915_WRITE(PCH_PORT_HOTPLUG, dig_hotplug_reg); > + pch_get_hpd_pins(&pin_mask, &long_mask, hotplug_trigger, > + dig_hotplug_reg, hpd_cpt); Ditto With those fixed this is Reviewed-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > + intel_hpd_irq_handler(dev, pin_mask, long_mask); > + } > > if (pch_iir & SDE_AUDIO_POWER_MASK_CPT) { > int port = ffs((pch_iir & SDE_AUDIO_POWER_MASK_CPT) >> > -- > 1.7.10.4 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Ville Syrjälä Intel OTC _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx