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.govindapil...@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.ha...@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,

Reply via email to