diff mbox

[1/2] drm/i915: fix the SDE irq dmesg warnings properly

Message ID 1448462843-32739-1-git-send-email-jani.nikula@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jani Nikula Nov. 25, 2015, 2:47 p.m. UTC
We had the "The master control interrupt lied (SDE)!" check and error
message in place for a long time without any problems, until

commit aaf5ec2e51ab1d9c5e962b4728a1107ed3ff7a3e
Author: Sonika Jindal <sonika.jindal@intel.com>
Date:   Wed Jul 8 17:07:47 2015 +0530

    drm/i915: Handle HPD when it has actually occurred

caused the errors to start happening. This was bisected and reported,
but the error message was silenced in

commit 97e5ed1111dcc5300a0f59a55248cd243937a8ab
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
Date:   Fri Oct 23 10:56:12 2015 +0200

    drm/i915: shut up gen8+ SDE irq dmesg noise

shooting the messenger while the debugging for why Sonika's commit
triggered the errors was still in progress.

It looks like we need to read and acknowledge the PCH_PORT_HOTPLUG
register even though the hotplug trigger indicates there isn't a hotplug
irq to handle.

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Sonika Jindal <sonika.jindal@intel.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92084
Fixes: aaf5ec2e51ab ("drm/i915: Handle HPD when it has actually occurred")
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/i915_irq.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

Comments

Ville Syrjälä Nov. 25, 2015, 2:49 p.m. UTC | #1
On Wed, Nov 25, 2015 at 04:47:22PM +0200, Jani Nikula wrote:
> We had the "The master control interrupt lied (SDE)!" check and error
> message in place for a long time without any problems, until
> 
> commit aaf5ec2e51ab1d9c5e962b4728a1107ed3ff7a3e
> Author: Sonika Jindal <sonika.jindal@intel.com>
> Date:   Wed Jul 8 17:07:47 2015 +0530
> 
>     drm/i915: Handle HPD when it has actually occurred
> 
> caused the errors to start happening. This was bisected and reported,
> but the error message was silenced in
> 
> commit 97e5ed1111dcc5300a0f59a55248cd243937a8ab
> Author: Daniel Vetter <daniel.vetter@ffwll.ch>
> Date:   Fri Oct 23 10:56:12 2015 +0200
> 
>     drm/i915: shut up gen8+ SDE irq dmesg noise
> 
> shooting the messenger while the debugging for why Sonika's commit
> triggered the errors was still in progress.
> 
> It looks like we need to read and acknowledge the PCH_PORT_HOTPLUG
> register even though the hotplug trigger indicates there isn't a hotplug
> irq to handle.
> 
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Sonika Jindal <sonika.jindal@intel.com>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92084
> Fixes: aaf5ec2e51ab ("drm/i915: Handle HPD when it has actually occurred")
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_irq.c | 16 ++++++++++++----
>  1 file changed, 12 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index c8ba94968aaf..982951d3153a 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -1825,7 +1825,17 @@ static void ibx_hpd_irq_handler(struct drm_device *dev, u32 hotplug_trigger,
>  	u32 dig_hotplug_reg, pin_mask = 0, long_mask = 0;
>  
>  	dig_hotplug_reg = I915_READ(PCH_PORT_HOTPLUG);
> +	if (!hotplug_trigger) {
> +		u32 mask = PORTA_HOTPLUG_STATUS_MASK |
> +			PORTD_HOTPLUG_STATUS_MASK |
> +			PORTC_HOTPLUG_STATUS_MASK |
> +			PORTB_HOTPLUG_STATUS_MASK;
> +		dig_hotplug_reg &= ~mask;
> +	}
> +
>  	I915_WRITE(PCH_PORT_HOTPLUG, dig_hotplug_reg);
> +	if (!hotplug_trigger)
> +		return;

I would add some kind of comment around these parts to explain that
somehow the PCH doesn't seem to really ack the interrupt to the CPU
unless we touch the hotplug register.

Otherwise (for both patches)
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Also not sure if SKL might need something similar as well...

>  
>  	intel_get_hpd_pins(&pin_mask, &long_mask, hotplug_trigger,
>  			   dig_hotplug_reg, hpd,
> @@ -1840,8 +1850,7 @@ static void ibx_irq_handler(struct drm_device *dev, u32 pch_iir)
>  	int pipe;
>  	u32 hotplug_trigger = pch_iir & SDE_HOTPLUG_MASK;
>  
> -	if (hotplug_trigger)
> -		ibx_hpd_irq_handler(dev, hotplug_trigger, hpd_ibx);
> +	ibx_hpd_irq_handler(dev, hotplug_trigger, hpd_ibx);
>  
>  	if (pch_iir & SDE_AUDIO_POWER_MASK) {
>  		int port = ffs((pch_iir & SDE_AUDIO_POWER_MASK) >>
> @@ -1934,8 +1943,7 @@ static void cpt_irq_handler(struct drm_device *dev, u32 pch_iir)
>  	int pipe;
>  	u32 hotplug_trigger = pch_iir & SDE_HOTPLUG_MASK_CPT;
>  
> -	if (hotplug_trigger)
> -		ibx_hpd_irq_handler(dev, hotplug_trigger, hpd_cpt);
> +	ibx_hpd_irq_handler(dev, hotplug_trigger, hpd_cpt);
>  
>  	if (pch_iir & SDE_AUDIO_POWER_MASK_CPT) {
>  		int port = ffs((pch_iir & SDE_AUDIO_POWER_MASK_CPT) >>
> -- 
> 2.1.4
Jani Nikula Nov. 26, 2015, 2:31 p.m. UTC | #2
On Wed, 25 Nov 2015, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> On Wed, Nov 25, 2015 at 04:47:22PM +0200, Jani Nikula wrote:
>> We had the "The master control interrupt lied (SDE)!" check and error
>> message in place for a long time without any problems, until
>> 
>> commit aaf5ec2e51ab1d9c5e962b4728a1107ed3ff7a3e
>> Author: Sonika Jindal <sonika.jindal@intel.com>
>> Date:   Wed Jul 8 17:07:47 2015 +0530
>> 
>>     drm/i915: Handle HPD when it has actually occurred
>> 
>> caused the errors to start happening. This was bisected and reported,
>> but the error message was silenced in
>> 
>> commit 97e5ed1111dcc5300a0f59a55248cd243937a8ab
>> Author: Daniel Vetter <daniel.vetter@ffwll.ch>
>> Date:   Fri Oct 23 10:56:12 2015 +0200
>> 
>>     drm/i915: shut up gen8+ SDE irq dmesg noise
>> 
>> shooting the messenger while the debugging for why Sonika's commit
>> triggered the errors was still in progress.
>> 
>> It looks like we need to read and acknowledge the PCH_PORT_HOTPLUG
>> register even though the hotplug trigger indicates there isn't a hotplug
>> irq to handle.
>> 
>> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
>> Cc: Sonika Jindal <sonika.jindal@intel.com>
>> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92084
>> Fixes: aaf5ec2e51ab ("drm/i915: Handle HPD when it has actually occurred")
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>> ---
>>  drivers/gpu/drm/i915/i915_irq.c | 16 ++++++++++++----
>>  1 file changed, 12 insertions(+), 4 deletions(-)
>> 
>> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
>> index c8ba94968aaf..982951d3153a 100644
>> --- a/drivers/gpu/drm/i915/i915_irq.c
>> +++ b/drivers/gpu/drm/i915/i915_irq.c
>> @@ -1825,7 +1825,17 @@ static void ibx_hpd_irq_handler(struct drm_device *dev, u32 hotplug_trigger,
>>  	u32 dig_hotplug_reg, pin_mask = 0, long_mask = 0;
>>  
>>  	dig_hotplug_reg = I915_READ(PCH_PORT_HOTPLUG);
>> +	if (!hotplug_trigger) {
>> +		u32 mask = PORTA_HOTPLUG_STATUS_MASK |
>> +			PORTD_HOTPLUG_STATUS_MASK |
>> +			PORTC_HOTPLUG_STATUS_MASK |
>> +			PORTB_HOTPLUG_STATUS_MASK;
>> +		dig_hotplug_reg &= ~mask;
>> +	}
>> +
>>  	I915_WRITE(PCH_PORT_HOTPLUG, dig_hotplug_reg);
>> +	if (!hotplug_trigger)
>> +		return;
>
> I would add some kind of comment around these parts to explain that
> somehow the PCH doesn't seem to really ack the interrupt to the CPU
> unless we touch the hotplug register.
>
> Otherwise (for both patches)
> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Pushed to drm-intel-next-queued, with a comment added and the commit
message amended slightly, thanks for the review.

BR,
Jani.



>
> Also not sure if SKL might need something similar as well...
>
>>  
>>  	intel_get_hpd_pins(&pin_mask, &long_mask, hotplug_trigger,
>>  			   dig_hotplug_reg, hpd,
>> @@ -1840,8 +1850,7 @@ static void ibx_irq_handler(struct drm_device *dev, u32 pch_iir)
>>  	int pipe;
>>  	u32 hotplug_trigger = pch_iir & SDE_HOTPLUG_MASK;
>>  
>> -	if (hotplug_trigger)
>> -		ibx_hpd_irq_handler(dev, hotplug_trigger, hpd_ibx);
>> +	ibx_hpd_irq_handler(dev, hotplug_trigger, hpd_ibx);
>>  
>>  	if (pch_iir & SDE_AUDIO_POWER_MASK) {
>>  		int port = ffs((pch_iir & SDE_AUDIO_POWER_MASK) >>
>> @@ -1934,8 +1943,7 @@ static void cpt_irq_handler(struct drm_device *dev, u32 pch_iir)
>>  	int pipe;
>>  	u32 hotplug_trigger = pch_iir & SDE_HOTPLUG_MASK_CPT;
>>  
>> -	if (hotplug_trigger)
>> -		ibx_hpd_irq_handler(dev, hotplug_trigger, hpd_cpt);
>> +	ibx_hpd_irq_handler(dev, hotplug_trigger, hpd_cpt);
>>  
>>  	if (pch_iir & SDE_AUDIO_POWER_MASK_CPT) {
>>  		int port = ffs((pch_iir & SDE_AUDIO_POWER_MASK_CPT) >>
>> -- 
>> 2.1.4
Chris Wilson Dec. 13, 2015, 12:49 p.m. UTC | #3
On Wed, Nov 25, 2015 at 04:47:22PM +0200, Jani Nikula wrote:
> We had the "The master control interrupt lied (SDE)!" check and error
> message in place for a long time without any problems, until
> 
> commit aaf5ec2e51ab1d9c5e962b4728a1107ed3ff7a3e
> Author: Sonika Jindal <sonika.jindal@intel.com>
> Date:   Wed Jul 8 17:07:47 2015 +0530
> 
>     drm/i915: Handle HPD when it has actually occurred
> 
> caused the errors to start happening. This was bisected and reported,
> but the error message was silenced in
> 
> commit 97e5ed1111dcc5300a0f59a55248cd243937a8ab
> Author: Daniel Vetter <daniel.vetter@ffwll.ch>
> Date:   Fri Oct 23 10:56:12 2015 +0200
> 
>     drm/i915: shut up gen8+ SDE irq dmesg noise
> 
> shooting the messenger while the debugging for why Sonika's commit
> triggered the errors was still in progress.
> 
> It looks like we need to read and acknowledge the PCH_PORT_HOTPLUG
> register even though the hotplug trigger indicates there isn't a hotplug
> irq to handle.
> 
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Cc: Sonika Jindal <sonika.jindal@intel.com>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92084
> Fixes: aaf5ec2e51ab ("drm/i915: Handle HPD when it has actually occurred")
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>

And to you I say:

[    4.249930] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.251037] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.251403] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.252141] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.252509] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.253247] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.253616] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.253985] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.254724] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.255460] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.256198] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.256567] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.257305] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.258043] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.258781] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.259519] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.259889] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.260626] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.261365] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.261734] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.262103] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.262163] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.263261] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.263999] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.264737] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.265106] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
[    4.266214] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!

i7-5557U nuc currently connected to HDMI.
-Chris
Ville Syrjälä Dec. 14, 2015, 2:54 p.m. UTC | #4
On Sun, Dec 13, 2015 at 12:49:45PM +0000, Chris Wilson wrote:
> On Wed, Nov 25, 2015 at 04:47:22PM +0200, Jani Nikula wrote:
> > We had the "The master control interrupt lied (SDE)!" check and error
> > message in place for a long time without any problems, until
> > 
> > commit aaf5ec2e51ab1d9c5e962b4728a1107ed3ff7a3e
> > Author: Sonika Jindal <sonika.jindal@intel.com>
> > Date:   Wed Jul 8 17:07:47 2015 +0530
> > 
> >     drm/i915: Handle HPD when it has actually occurred
> > 
> > caused the errors to start happening. This was bisected and reported,
> > but the error message was silenced in
> > 
> > commit 97e5ed1111dcc5300a0f59a55248cd243937a8ab
> > Author: Daniel Vetter <daniel.vetter@ffwll.ch>
> > Date:   Fri Oct 23 10:56:12 2015 +0200
> > 
> >     drm/i915: shut up gen8+ SDE irq dmesg noise
> > 
> > shooting the messenger while the debugging for why Sonika's commit
> > triggered the errors was still in progress.
> > 
> > It looks like we need to read and acknowledge the PCH_PORT_HOTPLUG
> > register even though the hotplug trigger indicates there isn't a hotplug
> > irq to handle.
> > 
> > Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > Cc: Sonika Jindal <sonika.jindal@intel.com>
> > Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92084
> > Fixes: aaf5ec2e51ab ("drm/i915: Handle HPD when it has actually occurred")
> > Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> 
> And to you I say:
> 
> [    4.249930] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.251037] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.251403] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.252141] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.252509] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.253247] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.253616] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.253985] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.254724] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.255460] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.256198] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.256567] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.257305] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.258043] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.258781] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.259519] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.259889] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.260626] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.261365] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.261734] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.262103] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.262163] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.263261] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.263999] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.264737] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.265106] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> [    4.266214] [drm:gen8_irq_handler [i915]] *ERROR* The master control interrupt lied (SDE)!
> 
> i7-5557U nuc currently connected to HDMI.

Sigh. Do those correcpond to AUX attempts by any chance? IIRC that was where
Jani saw the problem on his BDW.

Oh and maybe you can try Jani's debug patch
https://bugs.freedesktop.org/show_bug.cgi?id=92084#c20
to show us what the hotplug register says during these fails?
Chris Wilson Dec. 15, 2015, 3:26 p.m. UTC | #5
On Mon, Dec 14, 2015 at 04:54:02PM +0200, Ville Syrjälä wrote:
> On Sun, Dec 13, 2015 at 12:49:45PM +0000, Chris Wilson wrote:
> > i7-5557U nuc currently connected to HDMI.
> 
> Sigh. Do those correcpond to AUX attempts by any chance? IIRC that was where
> Jani saw the problem on his BDW.
> 
> Oh and maybe you can try Jani's debug patch
> https://bugs.freedesktop.org/show_bug.cgi?id=92084#c20
> to show us what the hotplug register says during these fails?

Sure, just only happens when plugged in, so likely be a while before I
allow it back into the warmth.
-Chris
Josh Boyer Jan. 6, 2016, 1:47 a.m. UTC | #6
On Tue, Dec 15, 2015 at 10:26 AM, Chris Wilson <chris@chris-wilson.co.uk> wrote:
> On Mon, Dec 14, 2015 at 04:54:02PM +0200, Ville Syrjälä wrote:
>> On Sun, Dec 13, 2015 at 12:49:45PM +0000, Chris Wilson wrote:
>> > i7-5557U nuc currently connected to HDMI.
>>
>> Sigh. Do those correcpond to AUX attempts by any chance? IIRC that was where
>> Jani saw the problem on his BDW.
>>
>> Oh and maybe you can try Jani's debug patch
>> https://bugs.freedesktop.org/show_bug.cgi?id=92084#c20
>> to show us what the hotplug register says during these fails?
>
> Sure, just only happens when plugged in, so likely be a while before I
> allow it back into the warmth.

Has there been any further progress on this issue?  I'm still seeing
this with 4.3.3 and we're looking to rebase Fedora to 4.3.y or 4.4
soon.  As far as I'm aware this remains unfixed upstream.

josh
Jani Nikula Jan. 7, 2016, 9:45 a.m. UTC | #7
On Wed, 06 Jan 2016, Josh Boyer <jwboyer@fedoraproject.org> wrote:
> On Tue, Dec 15, 2015 at 10:26 AM, Chris Wilson <chris@chris-wilson.co.uk> wrote:
>> On Mon, Dec 14, 2015 at 04:54:02PM +0200, Ville Syrjälä wrote:
>>> On Sun, Dec 13, 2015 at 12:49:45PM +0000, Chris Wilson wrote:
>>> > i7-5557U nuc currently connected to HDMI.
>>>
>>> Sigh. Do those correcpond to AUX attempts by any chance? IIRC that was where
>>> Jani saw the problem on his BDW.
>>>
>>> Oh and maybe you can try Jani's debug patch
>>> https://bugs.freedesktop.org/show_bug.cgi?id=92084#c20
>>> to show us what the hotplug register says during these fails?
>>
>> Sure, just only happens when plugged in, so likely be a while before I
>> allow it back into the warmth.
>
> Has there been any further progress on this issue?  I'm still seeing
> this with 4.3.3 and we're looking to rebase Fedora to 4.3.y or 4.4
> soon.  As far as I'm aware this remains unfixed upstream.

Back and forth,

http://patchwork.freedesktop.org/patch/msgid/1452155350-14658-1-git-send-email-jani.nikula@intel.com

BR,
Jani.

>
> josh
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index c8ba94968aaf..982951d3153a 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -1825,7 +1825,17 @@  static void ibx_hpd_irq_handler(struct drm_device *dev, u32 hotplug_trigger,
 	u32 dig_hotplug_reg, pin_mask = 0, long_mask = 0;
 
 	dig_hotplug_reg = I915_READ(PCH_PORT_HOTPLUG);
+	if (!hotplug_trigger) {
+		u32 mask = PORTA_HOTPLUG_STATUS_MASK |
+			PORTD_HOTPLUG_STATUS_MASK |
+			PORTC_HOTPLUG_STATUS_MASK |
+			PORTB_HOTPLUG_STATUS_MASK;
+		dig_hotplug_reg &= ~mask;
+	}
+
 	I915_WRITE(PCH_PORT_HOTPLUG, dig_hotplug_reg);
+	if (!hotplug_trigger)
+		return;
 
 	intel_get_hpd_pins(&pin_mask, &long_mask, hotplug_trigger,
 			   dig_hotplug_reg, hpd,
@@ -1840,8 +1850,7 @@  static void ibx_irq_handler(struct drm_device *dev, u32 pch_iir)
 	int pipe;
 	u32 hotplug_trigger = pch_iir & SDE_HOTPLUG_MASK;
 
-	if (hotplug_trigger)
-		ibx_hpd_irq_handler(dev, hotplug_trigger, hpd_ibx);
+	ibx_hpd_irq_handler(dev, hotplug_trigger, hpd_ibx);
 
 	if (pch_iir & SDE_AUDIO_POWER_MASK) {
 		int port = ffs((pch_iir & SDE_AUDIO_POWER_MASK) >>
@@ -1934,8 +1943,7 @@  static void cpt_irq_handler(struct drm_device *dev, u32 pch_iir)
 	int pipe;
 	u32 hotplug_trigger = pch_iir & SDE_HOTPLUG_MASK_CPT;
 
-	if (hotplug_trigger)
-		ibx_hpd_irq_handler(dev, hotplug_trigger, hpd_cpt);
+	ibx_hpd_irq_handler(dev, hotplug_trigger, hpd_cpt);
 
 	if (pch_iir & SDE_AUDIO_POWER_MASK_CPT) {
 		int port = ffs((pch_iir & SDE_AUDIO_POWER_MASK_CPT) >>