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 |
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,
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 --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,
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(+)