diff mbox series

[v2,1/2] drm/i915/display: ignore long HPDs based on a flag

Message ID 20221010083447.139768-2-vinod.govindapillai@intel.com (mailing list archive)
State New, archived
Headers show
Series Provision to ignore long HPDs in CI systems | expand

Commit Message

Vinod Govindapillai Oct. 10, 2022, 8:34 a.m. UTC
Some panels generate long HPD events even while connected to
the port. This cause some unexpected CI execution issues. A
new flag is added to track if such spurious long HPDs can be
ignored and are not processed further if the flag is set.

v2: Address patch styling comments (Jani Nikula)

Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
---
 drivers/gpu/drm/i915/display/intel_display_core.h | 11 +++++++++++
 drivers/gpu/drm/i915/display/intel_dp.c           |  7 +++++++
 2 files changed, 18 insertions(+)

Comments

Andrzej Hajda Oct. 10, 2022, 12:08 p.m. UTC | #1
On 10.10.2022 10:34, Vinod Govindapillai wrote:
> Some panels generate long HPD events even while connected to
> the port. This cause some unexpected CI execution issues. A
> new flag is added to track if such spurious long HPDs can be
> ignored and are not processed further if the flag is set.
> 
> v2: Address patch styling comments (Jani Nikula)
> 
> Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>

Yeah, especially bat-rpls-2 is quite buggy[1] (500 long HPDs per log).
Do you plan to integrate it to CI? I guess i915 should be immune to such 
misbehavior anyway.

[1]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12228/bat-rpls-2/dmesg0.txt

Reviewed-by: Andrzej Hajda <andrzej.hajda@intel.com>

Regards
Andrzej


> ---
>   drivers/gpu/drm/i915/display/intel_display_core.h | 11 +++++++++++
>   drivers/gpu/drm/i915/display/intel_dp.c           |  7 +++++++
>   2 files changed, 18 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_core.h b/drivers/gpu/drm/i915/display/intel_display_core.h
> index 96cf994b0ad1..f84a2e760ef4 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_core.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_core.h
> @@ -170,6 +170,17 @@ struct intel_hotplug {
>   	 * blocked behind the non-DP one.
>   	 */
>   	struct workqueue_struct *dp_wq;
> +
> +	/*
> +	 * Flag to track if long HPDs need not to be processed
> +	 *
> +	 * Some panels generate long HPDs while keep connected to the port.
> +	 * This can cause issues with CI tests results. In CI systems we
> +	 * don't expect to disconnect the panels and could ignore the long
> +	 * HPDs generated from the faulty panels. This flag can be used as
> +	 * cue to ignore the long HPDs and can be set / unset using debugfs.
> +	 */
> +	bool ignore_long_hpd;
>   };
>   
>   struct intel_vbt_data {
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> index 70b06806ec0d..87a0d01d8003 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -5092,6 +5092,13 @@ intel_dp_hpd_pulse(struct intel_digital_port *dig_port, bool long_hpd)
>   		return IRQ_HANDLED;
>   	}
>   
> +	if (i915->display.hotplug.ignore_long_hpd && long_hpd) {
> +		drm_dbg_kms(&i915->drm, "[ENCODER:%d:%s] ignoring long hpd\n",
> +			    dig_port->base.base.base.id,
> +			    dig_port->base.base.name);
> +		return IRQ_HANDLED;
> +	}
> +
>   	drm_dbg_kms(&i915->drm, "got hpd irq on [ENCODER:%d:%s] - %s\n",
>   		    dig_port->base.base.base.id,
>   		    dig_port->base.base.name,
Vinod Govindapillai Oct. 10, 2022, 12:11 p.m. UTC | #2
On Mon, 2022-10-10 at 14:08 +0200, Andrzej Hajda wrote:
> On 10.10.2022 10:34, Vinod Govindapillai wrote:
> > Some panels generate long HPD events even while connected to
> > the port. This cause some unexpected CI execution issues. A
> > new flag is added to track if such spurious long HPDs can be
> > ignored and are not processed further if the flag is set.
> > 
> > v2: Address patch styling comments (Jani Nikula)
> > 
> > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@intel.com>
> 
> Yeah, especially bat-rpls-2 is quite buggy[1] (500 long HPDs per log).
> Do you plan to integrate it to CI? I guess i915 should be immune to such 
> misbehavior anyway.
> 
> [1]: 
> https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12228/bat-rpls-2/dmesg0.txt
> 
> Reviewed-by: Andrzej Hajda <andrzej.hajda@intel.com>
> 
> Regards
> Andrzej

Thanks. Yes. IGT patch is floated to take this into use in CI
https://patchwork.freedesktop.org/series/109531/

> 
> 
> > ---
> >   drivers/gpu/drm/i915/display/intel_display_core.h | 11 +++++++++++
> >   drivers/gpu/drm/i915/display/intel_dp.c           |  7 +++++++
> >   2 files changed, 18 insertions(+)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_display_core.h
> > b/drivers/gpu/drm/i915/display/intel_display_core.h
> > index 96cf994b0ad1..f84a2e760ef4 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display_core.h
> > +++ b/drivers/gpu/drm/i915/display/intel_display_core.h
> > @@ -170,6 +170,17 @@ struct intel_hotplug {
> >          * blocked behind the non-DP one.
> >          */
> >         struct workqueue_struct *dp_wq;
> > +
> > +       /*
> > +        * Flag to track if long HPDs need not to be processed
> > +        *
> > +        * Some panels generate long HPDs while keep connected to the port.
> > +        * This can cause issues with CI tests results. In CI systems we
> > +        * don't expect to disconnect the panels and could ignore the long
> > +        * HPDs generated from the faulty panels. This flag can be used as
> > +        * cue to ignore the long HPDs and can be set / unset using debugfs.
> > +        */
> > +       bool ignore_long_hpd;
> >   };
> >   
> >   struct intel_vbt_data {
> > diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> > index 70b06806ec0d..87a0d01d8003 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > @@ -5092,6 +5092,13 @@ intel_dp_hpd_pulse(struct intel_digital_port *dig_port, bool long_hpd)
> >                 return IRQ_HANDLED;
> >         }
> >   
> > +       if (i915->display.hotplug.ignore_long_hpd && long_hpd) {
> > +               drm_dbg_kms(&i915->drm, "[ENCODER:%d:%s] ignoring long hpd\n",
> > +                           dig_port->base.base.base.id,
> > +                           dig_port->base.base.name);
> > +               return IRQ_HANDLED;
> > +       }
> > +
> >         drm_dbg_kms(&i915->drm, "got hpd irq on [ENCODER:%d:%s] - %s\n",
> >                     dig_port->base.base.base.id,
> >                     dig_port->base.base.name,
>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_display_core.h b/drivers/gpu/drm/i915/display/intel_display_core.h
index 96cf994b0ad1..f84a2e760ef4 100644
--- a/drivers/gpu/drm/i915/display/intel_display_core.h
+++ b/drivers/gpu/drm/i915/display/intel_display_core.h
@@ -170,6 +170,17 @@  struct intel_hotplug {
 	 * blocked behind the non-DP one.
 	 */
 	struct workqueue_struct *dp_wq;
+
+	/*
+	 * Flag to track if long HPDs need not to be processed
+	 *
+	 * Some panels generate long HPDs while keep connected to the port.
+	 * This can cause issues with CI tests results. In CI systems we
+	 * don't expect to disconnect the panels and could ignore the long
+	 * HPDs generated from the faulty panels. This flag can be used as
+	 * cue to ignore the long HPDs and can be set / unset using debugfs.
+	 */
+	bool ignore_long_hpd;
 };
 
 struct intel_vbt_data {
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 70b06806ec0d..87a0d01d8003 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5092,6 +5092,13 @@  intel_dp_hpd_pulse(struct intel_digital_port *dig_port, bool long_hpd)
 		return IRQ_HANDLED;
 	}
 
+	if (i915->display.hotplug.ignore_long_hpd && long_hpd) {
+		drm_dbg_kms(&i915->drm, "[ENCODER:%d:%s] ignoring long hpd\n",
+			    dig_port->base.base.base.id,
+			    dig_port->base.base.name);
+		return IRQ_HANDLED;
+	}
+
 	drm_dbg_kms(&i915->drm, "got hpd irq on [ENCODER:%d:%s] - %s\n",
 		    dig_port->base.base.base.id,
 		    dig_port->base.base.name,