(In reply to Jani Nikula from comment #15)
> (In reply to Ville Syrjala from comment #13)
> > (In reply to Jani Nikula from comment #12)
> > > However this helps. We're missing something.
> > >
> > > diff --git a/drivers/gpu/drm/i915/i915_irq.c
> > > b/drivers/gpu/drm/i915/i915_irq.c
> > > index 76bd40e13391..0d524034abd7 100644
> > > --- a/drivers/gpu/drm/i915/i915_irq.c
> > > +++ b/drivers/gpu/drm/i915/i915_irq.c
> > > @@ -1827,6 +1827,9 @@ static void ibx_hpd_irq_handler(struct drm_device
> > > *dev, u32 hotplug_trigger,
> > > dig_hotplug_reg = I915_READ(PCH_PORT_HOTPLUG);
> > > I915_WRITE(PCH_PORT_HOTPLUG, dig_hotplug_reg);
> >
> > Is the read alone enough, or do you need the write too?
>
> Moving the write below the !hotplug_trigger check brings the problem back,
> i.e. the write is also needed.
Are the status bits actually showing long/short pulses when this happens?
Maybe we can just do something like this:
dig_hotplug_reg = I915_READ(PCH_PORT_HOTPLUG);
if (!hotplug_trigger)
dig_hotplug_reg &= ~(*_HOTPLUG_STATUS_MASK);
I915_WRITE(PCH_PORT_HOTPLUG, dig_hotplug_reg
if (!hotplug_trigger)
return;
(In reply to Jani Nikula from comment #15) gpu/drm/ i915/i915_ irq.c gpu/drm/ i915/i915_ irq.c .0d524034abd7 100644 gpu/drm/ i915/i915_ irq.c gpu/drm/ i915/i915_ irq.c irq_handler( struct drm_device PCH_PORT_ HOTPLUG) ; PCH_PORT_ HOTPLUG, dig_hotplug_reg);
> (In reply to Ville Syrjala from comment #13)
> > (In reply to Jani Nikula from comment #12)
> > > However this helps. We're missing something.
> > >
> > > diff --git a/drivers/
> > > b/drivers/
> > > index 76bd40e13391.
> > > --- a/drivers/
> > > +++ b/drivers/
> > > @@ -1827,6 +1827,9 @@ static void ibx_hpd_
> > > *dev, u32 hotplug_trigger,
> > > dig_hotplug_reg = I915_READ(
> > > I915_WRITE(
> >
> > Is the read alone enough, or do you need the write too?
>
> Moving the write below the !hotplug_trigger check brings the problem back,
> i.e. the write is also needed.
Are the status bits actually showing long/short pulses when this happens?
Maybe we can just do something like this:
dig_hotplug_reg = I915_READ( PCH_PORT_ HOTPLUG) ; STATUS_ MASK); PCH_PORT_ HOTPLUG, dig_hotplug_reg
if (!hotplug_trigger)
dig_hotplug_reg &= ~(*_HOTPLUG_
I915_WRITE(
if (!hotplug_trigger)
return;