Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues
@ 2026-02-25 16:27 Imre Deak
  2026-02-25 16:27 ` [PATCH v2 01/20] drm/i915/dp_mst: Reprobe connector if the IRQ ESI read failed Imre Deak
                   ` (22 more replies)
  0 siblings, 23 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:27 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula

This is v2 of [1], addressing the review comments related to bool vs.
error code function return values from Luca and Jani in patches 2, 11,
12, 15 and adding R-bs.

The patchset also prepares for the upcoming UHBR DP tunnel support
changes.

Cc: Luca Coelho <luciano.coelho@intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>

[1] https://lore.kernel.org/all/20250626082053.219514-1-imre.deak@intel.com

Imre Deak (20):
  drm/i915/dp_mst: Reprobe connector if the IRQ ESI read failed
  drm/i915/dp_mst: Verify the link status always the same way
  drm/i915/dp_mst: Reuse intel_dp_check_link_state() in the HPD IRQ
    handler
  drm/i915/dp: Handle a tunneling IRQ after acking it
  drm/i915/dp: Handle the RX_CAP_CHANGED HPD IRQ
  drm/i915/dp: Handle the DOWNSTREAM_PORT_STATUS_CHANGED event
  drm/i915/dp: Don't clobber the encoder state in the HPD IRQ handler
  drm/i915/dp: Remove the device service IRQ handling from connector
    detect
  drm/i915/dp: Fix the device service IRQ DPCD_REV check
  drm/i915/dp: Fix the link service IRQ DPCD_REV check
  drm/i915/dp: Reprobe connector if getting/acking device IRQs fails
  drm/i915/dp: Reprobe connector if getting/acking link service IRQs
    fails
  drm/i915/dp: Return early if getting/acking device service IRQs fails
  drm/i915/dp: Return early if getting/acking link service IRQs fails
  drm/i915/dp: Read/ack sink count and sink IRQs for SST as it's done
    for MST
  drm/i915/dp: Print debug message for a sink connected off request
  drm/i915/dp: Check SST link status while handling link service IRQs
  drm/i915/dp_mst: Reuse intel_dp_handle_link_service_irq()
  drm/i915/dp: Ack only the handled device service IRQs
  drm/i915/dp: Ack only the handled link service IRQs

 .../drm/i915/display/intel_display_types.h    |   1 +
 drivers/gpu/drm/i915/display/intel_dp.c       | 253 ++++++++++++------
 2 files changed, 171 insertions(+), 83 deletions(-)

-- 
2.49.1


^ permalink raw reply	[flat|nested] 24+ messages in thread

* [PATCH v2 01/20] drm/i915/dp_mst: Reprobe connector if the IRQ ESI read failed
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
@ 2026-02-25 16:27 ` Imre Deak
  2026-02-25 16:27 ` [PATCH v2 02/20] drm/i915/dp_mst: Verify the link status always the same way Imre Deak
                   ` (21 subsequent siblings)
  22 siblings, 0 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:27 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Imre Deak

From: Imre Deak <imre.deak@gmail.com>

An AUX access failure during HPD IRQ handling should be handled by
falling back to a full connector detection, do so.

Signed-off-by: Imre Deak <imre.deak@gmail.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 025e906b63a97..eb4a1c5c55714 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5492,7 +5492,7 @@ intel_dp_check_mst_status(struct intel_dp *intel_dp)
 		if (!intel_dp_get_sink_irq_esi(intel_dp, esi)) {
 			drm_dbg_kms(display->drm,
 				    "failed to get ESI - device may have failed\n");
-			link_ok = false;
+			reprobe_needed = true;
 
 			break;
 		}
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v2 02/20] drm/i915/dp_mst: Verify the link status always the same way
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
  2026-02-25 16:27 ` [PATCH v2 01/20] drm/i915/dp_mst: Reprobe connector if the IRQ ESI read failed Imre Deak
@ 2026-02-25 16:27 ` Imre Deak
  2026-02-25 16:27 ` [PATCH v2 03/20] drm/i915/dp_mst: Reuse intel_dp_check_link_state() in the HPD IRQ handler Imre Deak
                   ` (20 subsequent siblings)
  22 siblings, 0 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:27 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Imre Deak

From: Imre Deak <imre.deak@gmail.com>

The MST link status should be always verified from the same DPCD
registers after link training. Atm, both the legacy (0x202 - 0x205) and
the ESI (0x200C - 0x200F) link status registers are used. Use always the
latter ESI version of link status registers.

Signed-off-by: Imre Deak <imre.deak@gmail.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index eb4a1c5c55714..7cd4fb130a7cd 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5555,6 +5555,23 @@ intel_dp_handle_hdmi_link_status_change(struct intel_dp *intel_dp)
 	}
 }
 
+static bool
+intel_dp_read_link_status(struct intel_dp *intel_dp, u8 link_status[DP_LINK_STATUS_SIZE])
+{
+	bool ret;
+
+	memset(link_status, 0, DP_LINK_STATUS_SIZE);
+
+	if (intel_dp_mst_active_streams(intel_dp) > 0)
+		ret = drm_dp_dpcd_read_data(&intel_dp->aux, DP_LANE0_1_STATUS_ESI,
+					    link_status, DP_LINK_STATUS_SIZE - 2) == 0;
+	else
+		ret = drm_dp_dpcd_read_phy_link_status(&intel_dp->aux, DP_PHY_DPRX,
+						       link_status) == 0;
+
+	return ret;
+}
+
 static bool
 intel_dp_needs_link_retrain(struct intel_dp *intel_dp)
 {
@@ -5577,8 +5594,7 @@ intel_dp_needs_link_retrain(struct intel_dp *intel_dp)
 	if (intel_dp->link.force_retrain)
 		return true;
 
-	if (drm_dp_dpcd_read_phy_link_status(&intel_dp->aux, DP_PHY_DPRX,
-					     link_status) < 0)
+	if (!intel_dp_read_link_status(intel_dp, link_status))
 		return false;
 
 	/*
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v2 03/20] drm/i915/dp_mst: Reuse intel_dp_check_link_state() in the HPD IRQ handler
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
  2026-02-25 16:27 ` [PATCH v2 01/20] drm/i915/dp_mst: Reprobe connector if the IRQ ESI read failed Imre Deak
  2026-02-25 16:27 ` [PATCH v2 02/20] drm/i915/dp_mst: Verify the link status always the same way Imre Deak
@ 2026-02-25 16:27 ` Imre Deak
  2026-02-25 16:27 ` [PATCH v2 04/20] drm/i915/dp: Handle a tunneling IRQ after acking it Imre Deak
                   ` (19 subsequent siblings)
  22 siblings, 0 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:27 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Imre Deak

From: Imre Deak <imre.deak@gmail.com>

Use intel_dp_check_link_state() in the MST HPD IRQ handler instead of
open-coding it.

Signed-off-by: Imre Deak <imre.deak@gmail.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 34 +++----------------------
 1 file changed, 4 insertions(+), 30 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 7cd4fb130a7cd..9c7359057fc8b 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5444,24 +5444,6 @@ intel_dp_mst_hpd_irq(struct intel_dp *intel_dp, u8 *esi, u8 *ack)
 	}
 }
 
-static bool intel_dp_mst_link_status(struct intel_dp *intel_dp)
-{
-	struct intel_display *display = to_intel_display(intel_dp);
-	struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
-	u8 link_status[DP_LINK_STATUS_SIZE] = {};
-	const size_t esi_link_status_size = DP_LINK_STATUS_SIZE - 2;
-
-	if (drm_dp_dpcd_read(&intel_dp->aux, DP_LANE0_1_STATUS_ESI, link_status,
-			     esi_link_status_size) != esi_link_status_size) {
-		drm_err(display->drm,
-			"[ENCODER:%d:%s] Failed to read link status\n",
-			encoder->base.base.id, encoder->base.name);
-		return false;
-	}
-
-	return intel_dp_link_ok(intel_dp, link_status);
-}
-
 /**
  * intel_dp_check_mst_status - service any pending MST interrupts, check link status
  * @intel_dp: Intel DP struct
@@ -5480,9 +5462,6 @@ static bool
 intel_dp_check_mst_status(struct intel_dp *intel_dp)
 {
 	struct intel_display *display = to_intel_display(intel_dp);
-	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
-	struct intel_encoder *encoder = &dig_port->base;
-	bool link_ok = true;
 	bool reprobe_needed = false;
 
 	for (;;) {
@@ -5499,12 +5478,7 @@ intel_dp_check_mst_status(struct intel_dp *intel_dp)
 
 		drm_dbg_kms(display->drm, "DPRX ESI: %4ph\n", esi);
 
-		if (intel_dp_mst_active_streams(intel_dp) > 0 && link_ok &&
-		    esi[3] & LINK_STATUS_CHANGED) {
-			if (!intel_dp_mst_link_status(intel_dp))
-				link_ok = false;
-			ack[3] |= LINK_STATUS_CHANGED;
-		}
+		ack[3] |= esi[3] & LINK_STATUS_CHANGED;
 
 		intel_dp_mst_hpd_irq(intel_dp, esi, ack);
 
@@ -5523,10 +5497,10 @@ intel_dp_check_mst_status(struct intel_dp *intel_dp)
 
 		if (ack[1] & (DP_DOWN_REP_MSG_RDY | DP_UP_REQ_MSG_RDY))
 			drm_dp_mst_hpd_irq_send_new_request(&intel_dp->mst.mgr);
-	}
 
-	if (!link_ok || intel_dp->link.force_retrain)
-		intel_encoder_link_check_queue_work(encoder, 0);
+		if ((ack[3] & LINK_STATUS_CHANGED) || intel_dp->link.force_retrain)
+			intel_dp_check_link_state(intel_dp);
+	}
 
 	return !reprobe_needed;
 }
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v2 04/20] drm/i915/dp: Handle a tunneling IRQ after acking it
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
                   ` (2 preceding siblings ...)
  2026-02-25 16:27 ` [PATCH v2 03/20] drm/i915/dp_mst: Reuse intel_dp_check_link_state() in the HPD IRQ handler Imre Deak
@ 2026-02-25 16:27 ` Imre Deak
  2026-02-25 16:27 ` [PATCH v2 05/20] drm/i915/dp: Handle the RX_CAP_CHANGED HPD IRQ Imre Deak
                   ` (18 subsequent siblings)
  22 siblings, 0 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:27 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Imre Deak

From: Imre Deak <imre.deak@gmail.com>

HPD IRQs in general should be handled after acking them. The

1. Read IRQ register (read DP_DEVICE_SERVICE_IRQ_VECTOR,
   DP_LINK_SERVICE_IRQ_VECTOR_ESI0)
2. Handle IRQ
3. Ack IRQ (write DP_DEVICE_SERVICE_IRQ_VECTOR,
   DP_LINK_SERVICE_IRQ_VECTOR_ESI0)

sequence would miss a new interrupt triggered after 2. and before 3.,
since the flag set in the IRQ register for this interrupt would be
cleared in step 3.

Fix the above by handling the IRQ after acking it.

Signed-off-by: Imre Deak <imre.deak@gmail.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 27 +++++++++++--------------
 1 file changed, 12 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 9c7359057fc8b..5c1529e38a6aa 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5478,17 +5478,10 @@ intel_dp_check_mst_status(struct intel_dp *intel_dp)
 
 		drm_dbg_kms(display->drm, "DPRX ESI: %4ph\n", esi);
 
-		ack[3] |= esi[3] & LINK_STATUS_CHANGED;
+		ack[3] |= esi[3] & (LINK_STATUS_CHANGED | DP_TUNNELING_IRQ);
 
 		intel_dp_mst_hpd_irq(intel_dp, esi, ack);
 
-		if (esi[3] & DP_TUNNELING_IRQ) {
-			if (drm_dp_tunnel_handle_irq(display->dp_tunnel_mgr,
-						     &intel_dp->aux))
-				reprobe_needed = true;
-			ack[3] |= DP_TUNNELING_IRQ;
-		}
-
 		if (mem_is_zero(ack, sizeof(ack)))
 			break;
 
@@ -5500,6 +5493,10 @@ intel_dp_check_mst_status(struct intel_dp *intel_dp)
 
 		if ((ack[3] & LINK_STATUS_CHANGED) || intel_dp->link.force_retrain)
 			intel_dp_check_link_state(intel_dp);
+
+		if ((ack[3] & DP_TUNNELING_IRQ) &&
+		    drm_dp_tunnel_handle_irq(display->dp_tunnel_mgr, &intel_dp->aux))
+			reprobe_needed = true;
 	}
 
 	return !reprobe_needed;
@@ -5802,18 +5799,18 @@ static bool intel_dp_check_link_service_irq(struct intel_dp *intel_dp)
 			      DP_LINK_SERVICE_IRQ_VECTOR_ESI0, &val) != 1 || !val)
 		return false;
 
+	if (drm_dp_dpcd_writeb(&intel_dp->aux,
+			       DP_LINK_SERVICE_IRQ_VECTOR_ESI0, val) != 1)
+		return false;
+
+	if (val & HDMI_LINK_STATUS_CHANGED)
+		intel_dp_handle_hdmi_link_status_change(intel_dp);
+
 	if ((val & DP_TUNNELING_IRQ) &&
 	    drm_dp_tunnel_handle_irq(display->dp_tunnel_mgr,
 				     &intel_dp->aux))
 		reprobe_needed = true;
 
-	if (drm_dp_dpcd_writeb(&intel_dp->aux,
-			       DP_LINK_SERVICE_IRQ_VECTOR_ESI0, val) != 1)
-		return reprobe_needed;
-
-	if (val & HDMI_LINK_STATUS_CHANGED)
-		intel_dp_handle_hdmi_link_status_change(intel_dp);
-
 	return reprobe_needed;
 }
 
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v2 05/20] drm/i915/dp: Handle the RX_CAP_CHANGED HPD IRQ
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
                   ` (3 preceding siblings ...)
  2026-02-25 16:27 ` [PATCH v2 04/20] drm/i915/dp: Handle a tunneling IRQ after acking it Imre Deak
@ 2026-02-25 16:27 ` Imre Deak
  2026-02-25 16:27 ` [PATCH v2 06/20] drm/i915/dp: Handle the DOWNSTREAM_PORT_STATUS_CHANGED event Imre Deak
                   ` (17 subsequent siblings)
  22 siblings, 0 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:27 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Imre Deak

From: Imre Deak <imre.deak@gmail.com>

Handle the RX_CAP_CHANGED IRQ, which a sink can use to indicate a DPRX
capability change without disconnecting and reconnecting itself (i.e.
through a short vs. long HPD pulse). Handle the IRQ by doing a full
connector detection.

Signed-off-by: Imre Deak <imre.deak@gmail.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 5c1529e38a6aa..f38913834644d 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5478,7 +5478,7 @@ intel_dp_check_mst_status(struct intel_dp *intel_dp)
 
 		drm_dbg_kms(display->drm, "DPRX ESI: %4ph\n", esi);
 
-		ack[3] |= esi[3] & (LINK_STATUS_CHANGED | DP_TUNNELING_IRQ);
+		ack[3] |= esi[3] & (RX_CAP_CHANGED | LINK_STATUS_CHANGED | DP_TUNNELING_IRQ);
 
 		intel_dp_mst_hpd_irq(intel_dp, esi, ack);
 
@@ -5491,6 +5491,9 @@ intel_dp_check_mst_status(struct intel_dp *intel_dp)
 		if (ack[1] & (DP_DOWN_REP_MSG_RDY | DP_UP_REQ_MSG_RDY))
 			drm_dp_mst_hpd_irq_send_new_request(&intel_dp->mst.mgr);
 
+		if (ack[3] & RX_CAP_CHANGED)
+			reprobe_needed = true;
+
 		if ((ack[3] & LINK_STATUS_CHANGED) || intel_dp->link.force_retrain)
 			intel_dp_check_link_state(intel_dp);
 
@@ -5803,6 +5806,9 @@ static bool intel_dp_check_link_service_irq(struct intel_dp *intel_dp)
 			       DP_LINK_SERVICE_IRQ_VECTOR_ESI0, val) != 1)
 		return false;
 
+	if (val & RX_CAP_CHANGED)
+		reprobe_needed = true;
+
 	if (val & HDMI_LINK_STATUS_CHANGED)
 		intel_dp_handle_hdmi_link_status_change(intel_dp);
 
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v2 06/20] drm/i915/dp: Handle the DOWNSTREAM_PORT_STATUS_CHANGED event
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
                   ` (4 preceding siblings ...)
  2026-02-25 16:27 ` [PATCH v2 05/20] drm/i915/dp: Handle the RX_CAP_CHANGED HPD IRQ Imre Deak
@ 2026-02-25 16:27 ` Imre Deak
  2026-02-25 16:27 ` [PATCH v2 07/20] drm/i915/dp: Don't clobber the encoder state in the HPD IRQ handler Imre Deak
                   ` (16 subsequent siblings)
  22 siblings, 0 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:27 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Imre Deak

From: Imre Deak <imre.deak@gmail.com>

Handle the DOWNSTREAM_PORT_STATUS_CHANGED event a branch device can use
to indicate the state change of a DFP connector on the branch device.
The event is signaled in the DP_LANE_ALIGN_STATUS_UPDATED DPCD register
setting a clear-on-read flag and triggering an HPD IRQ. Accordingly keep
a cached version of the flag, updating it whenever
DP_LANE_ALIGN_STATUS_UPDATED is read. Schedule a full connector
detection from the HPD IRQ handler if the cached flag is set and clear
the cached flag at the start of detection.

Signed-off-by: Imre Deak <imre.deak@gmail.com>
---
 .../gpu/drm/i915/display/intel_display_types.h   |  1 +
 drivers/gpu/drm/i915/display/intel_dp.c          | 16 +++++++++++++++-
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index e8e4af03a6a6c..126682ecabec9 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1796,6 +1796,7 @@ struct intel_dp {
 	int link_rate;
 	u8 lane_count;
 	u8 sink_count;
+	bool downstream_port_changed;
 	bool needs_modeset_retry;
 	bool use_max_params;
 	u8 dpcd[DP_RECEIVER_CAP_SIZE];
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index f38913834644d..25e14bc0f5b9e 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5543,7 +5543,14 @@ intel_dp_read_link_status(struct intel_dp *intel_dp, u8 link_status[DP_LINK_STAT
 		ret = drm_dp_dpcd_read_phy_link_status(&intel_dp->aux, DP_PHY_DPRX,
 						       link_status) == 0;
 
-	return ret;
+	if (!ret)
+		return false;
+
+	if (link_status[DP_LANE_ALIGN_STATUS_UPDATED - DP_LANE0_1_STATUS] &
+	    DP_DOWNSTREAM_PORT_STATUS_CHANGED)
+		WRITE_ONCE(intel_dp->downstream_port_changed, true);
+
+	return true;
 }
 
 static bool
@@ -5863,6 +5870,11 @@ intel_dp_short_pulse(struct intel_dp *intel_dp)
 
 	intel_dp_check_link_state(intel_dp);
 
+	if (READ_ONCE(intel_dp->downstream_port_changed)) {
+		WRITE_ONCE(intel_dp->downstream_port_changed, false);
+		reprobe_needed = true;
+	}
+
 	intel_psr_short_pulse(intel_dp);
 
 	if (intel_alpm_get_error(intel_dp)) {
@@ -5888,6 +5900,8 @@ intel_dp_detect_dpcd(struct intel_dp *intel_dp)
 	if (drm_WARN_ON(display->drm, intel_dp_is_edp(intel_dp)))
 		return connector_status_connected;
 
+	WRITE_ONCE(intel_dp->downstream_port_changed, false);
+
 	intel_lspcon_resume(dig_port);
 
 	if (!intel_dp_get_dpcd(intel_dp))
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v2 07/20] drm/i915/dp: Don't clobber the encoder state in the HPD IRQ handler
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
                   ` (5 preceding siblings ...)
  2026-02-25 16:27 ` [PATCH v2 06/20] drm/i915/dp: Handle the DOWNSTREAM_PORT_STATUS_CHANGED event Imre Deak
@ 2026-02-25 16:27 ` Imre Deak
  2026-02-25 16:27 ` [PATCH v2 08/20] drm/i915/dp: Remove the device service IRQ handling from connector detect Imre Deak
                   ` (15 subsequent siblings)
  22 siblings, 0 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:27 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Imre Deak

From: Imre Deak <imre.deak@gmail.com>

The intel_dp_get_dpcd() function called from an HPD IRQ handler reads
out the DPRX capabilities from the sink and updates these in the
intel_dp encoder state. Since the IRQ handler can run in parallel with
the encoder/connector detection (intel_dp_detect()) which also calls
intel_dp_get_dpcd(), the encoder state can get corrupted, since the two
updates happen in a racy way.

Fix the above by checking only for any change in the sink count value in
the HPD IRQ handler, without updating the encoder state.

Note that any state change in the sink requiring an update of the
encoder state is handled via the sink's SINK_COUNT change,
RX_CAPS_CHANGED, DOWNSTREAM_PORT_STATUS_CHANGED signaling, which all
should result in a full connector detection.

Signed-off-by: Imre Deak <imre.deak@gmail.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 25e14bc0f5b9e..a49e30e3edd16 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5843,9 +5843,7 @@ static bool intel_dp_check_link_service_irq(struct intel_dp *intel_dp)
 static bool
 intel_dp_short_pulse(struct intel_dp *intel_dp)
 {
-	u8 old_sink_count = intel_dp->sink_count;
 	bool reprobe_needed = false;
-	bool ret;
 
 	intel_dp_test_reset(intel_dp);
 
@@ -5855,12 +5853,10 @@ intel_dp_short_pulse(struct intel_dp *intel_dp)
 	 * the value that was stored earlier or dpcd read failed
 	 * we need to do full detection
 	 */
-	ret = intel_dp_get_dpcd(intel_dp);
-
-	if ((old_sink_count != intel_dp->sink_count) || !ret) {
+	if (intel_dp_has_sink_count(intel_dp) &&
+	    drm_dp_read_sink_count(&intel_dp->aux) != intel_dp->sink_count)
 		/* No need to proceed if we are going to do full detect */
 		return false;
-	}
 
 	intel_dp_check_device_service_irq(intel_dp);
 	reprobe_needed = intel_dp_check_link_service_irq(intel_dp);
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v2 08/20] drm/i915/dp: Remove the device service IRQ handling from connector detect
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
                   ` (6 preceding siblings ...)
  2026-02-25 16:27 ` [PATCH v2 07/20] drm/i915/dp: Don't clobber the encoder state in the HPD IRQ handler Imre Deak
@ 2026-02-25 16:27 ` Imre Deak
  2026-02-25 16:27 ` [PATCH v2 09/20] drm/i915/dp: Fix the device service IRQ DPCD_REV check Imre Deak
                   ` (14 subsequent siblings)
  22 siblings, 0 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:27 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Imre Deak

From: Imre Deak <imre.deak@gmail.com>

The device service IRQ handling was added to the connector detect
function by

commit 09b1eb130e43 ("drm/i915: Move Displayport test request and sink
IRQ logic to intel_dp_detect()")

since some Automated Test Request IRQs couldn't be handled in the short
HPD IRQ handler context. This has been fixed meanwhile by deferring the
handling of all test request events from the IRQ handler to the hotplug
handler (intel_dp_short_pulse() -> intel_dp_test_short_pulse() ->
reprobe) and by handling all hotplug events (both for short and long HPD
pulses) in the test application.

Handling device IRQs during connector detection is not standard
compliant (the IRQs should be handled when an HPD IRQ is raised) and it
happens in a racy way with the same device IRQ handling happening from
the HPD IRQ handler (since the detect and HPD IRQ handler can run in
parallel).

Based on the above, remove the redundant call from the detect function.

Signed-off-by: Imre Deak <imre.deak@gmail.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index a49e30e3edd16..30b2aa3f5f5b5 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -6324,8 +6324,6 @@ intel_dp_detect(struct drm_connector *_connector,
 	if (intel_dp_is_edp(intel_dp) || connector->detect_edid)
 		status = connector_status_connected;
 
-	intel_dp_check_device_service_irq(intel_dp);
-
 out_unset_edid:
 	if (status != connector_status_connected && !intel_dp->is_mst)
 		intel_dp_unset_edid(intel_dp);
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v2 09/20] drm/i915/dp: Fix the device service IRQ DPCD_REV check
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
                   ` (7 preceding siblings ...)
  2026-02-25 16:27 ` [PATCH v2 08/20] drm/i915/dp: Remove the device service IRQ handling from connector detect Imre Deak
@ 2026-02-25 16:27 ` Imre Deak
  2026-02-25 16:27 ` [PATCH v2 10/20] drm/i915/dp: Fix the link " Imre Deak
                   ` (13 subsequent siblings)
  22 siblings, 0 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:27 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Imre Deak

From: Imre Deak <imre.deak@gmail.com>

The DP_DEVICE_SERVICE_IRQ_VECTOR DPCD register is supported since DPCD
REV 1.0, so read it out always. Flags added only by later DPCD revisions
are defined as reserved/must-be-zero by earlier DP Standard versions.

Signed-off-by: Imre Deak <imre.deak@gmail.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 30b2aa3f5f5b5..11091b31694bd 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5777,9 +5777,6 @@ static void intel_dp_check_device_service_irq(struct intel_dp *intel_dp)
 	struct intel_display *display = to_intel_display(intel_dp);
 	u8 val;
 
-	if (intel_dp->dpcd[DP_DPCD_REV] < 0x11)
-		return;
-
 	if (drm_dp_dpcd_readb(&intel_dp->aux,
 			      DP_DEVICE_SERVICE_IRQ_VECTOR, &val) != 1 || !val)
 		return;
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v2 10/20] drm/i915/dp: Fix the link service IRQ DPCD_REV check
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
                   ` (8 preceding siblings ...)
  2026-02-25 16:27 ` [PATCH v2 09/20] drm/i915/dp: Fix the device service IRQ DPCD_REV check Imre Deak
@ 2026-02-25 16:27 ` Imre Deak
  2026-02-25 16:27 ` [PATCH v2 11/20] drm/i915/dp: Reprobe connector if getting/acking device IRQs fails Imre Deak
                   ` (12 subsequent siblings)
  22 siblings, 0 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:27 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Imre Deak

From: Imre Deak <imre.deak@gmail.com>

The DP_LINK_SERVICE_IRQ_VECTOR_ESI0 DPCD register is supported only
since DPCD REV 1.2, so fix the revision check accordingly.

Signed-off-by: Imre Deak <imre.deak@gmail.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 11091b31694bd..3ac9458a2c7d0 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5799,7 +5799,7 @@ static bool intel_dp_check_link_service_irq(struct intel_dp *intel_dp)
 	bool reprobe_needed = false;
 	u8 val;
 
-	if (intel_dp->dpcd[DP_DPCD_REV] < 0x11)
+	if (intel_dp->dpcd[DP_DPCD_REV] < DP_DPCD_REV_12)
 		return false;
 
 	if (drm_dp_dpcd_readb(&intel_dp->aux,
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v2 11/20] drm/i915/dp: Reprobe connector if getting/acking device IRQs fails
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
                   ` (9 preceding siblings ...)
  2026-02-25 16:27 ` [PATCH v2 10/20] drm/i915/dp: Fix the link " Imre Deak
@ 2026-02-25 16:27 ` Imre Deak
  2026-02-25 16:27 ` [PATCH v2 12/20] drm/i915/dp: Reprobe connector if getting/acking link service " Imre Deak
                   ` (11 subsequent siblings)
  22 siblings, 0 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:27 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Imre Deak

From: Imre Deak <imre.deak@gmail.com>

An AUX access failure during HPD IRQ handling should be handled by
falling back to a full connector detection, ensure that if the failure
happens while reading/acking a device service IRQ.

Signed-off-by: Imre Deak <imre.deak@gmail.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 3ac9458a2c7d0..613fb0cd08b78 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5772,16 +5772,20 @@ void intel_dp_check_link_state(struct intel_dp *intel_dp)
 	intel_encoder_link_check_queue_work(encoder, 0);
 }
 
-static void intel_dp_check_device_service_irq(struct intel_dp *intel_dp)
+static bool intel_dp_check_device_service_irq(struct intel_dp *intel_dp)
 {
 	struct intel_display *display = to_intel_display(intel_dp);
 	u8 val;
 
 	if (drm_dp_dpcd_readb(&intel_dp->aux,
-			      DP_DEVICE_SERVICE_IRQ_VECTOR, &val) != 1 || !val)
-		return;
+			      DP_DEVICE_SERVICE_IRQ_VECTOR, &val) != 1)
+		return true;
 
-	drm_dp_dpcd_writeb(&intel_dp->aux, DP_DEVICE_SERVICE_IRQ_VECTOR, val);
+	if (!val)
+		return false;
+
+	if (drm_dp_dpcd_writeb(&intel_dp->aux, DP_DEVICE_SERVICE_IRQ_VECTOR, val) != 1)
+		return true;
 
 	if (val & DP_AUTOMATED_TEST_REQUEST)
 		intel_dp_test_request(intel_dp);
@@ -5791,6 +5795,8 @@ static void intel_dp_check_device_service_irq(struct intel_dp *intel_dp)
 
 	if (val & DP_SINK_SPECIFIC_IRQ)
 		drm_dbg_kms(display->drm, "Sink specific irq unhandled\n");
+
+	return false;
 }
 
 static bool intel_dp_check_link_service_irq(struct intel_dp *intel_dp)
@@ -5855,8 +5861,11 @@ intel_dp_short_pulse(struct intel_dp *intel_dp)
 		/* No need to proceed if we are going to do full detect */
 		return false;
 
-	intel_dp_check_device_service_irq(intel_dp);
-	reprobe_needed = intel_dp_check_link_service_irq(intel_dp);
+	if (intel_dp_check_device_service_irq(intel_dp))
+		reprobe_needed = true;
+
+	if (intel_dp_check_link_service_irq(intel_dp))
+		reprobe_needed = true;
 
 	/* Handle CEC interrupts, if any */
 	drm_dp_cec_irq(&intel_dp->aux);
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v2 12/20] drm/i915/dp: Reprobe connector if getting/acking link service IRQs fails
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
                   ` (10 preceding siblings ...)
  2026-02-25 16:27 ` [PATCH v2 11/20] drm/i915/dp: Reprobe connector if getting/acking device IRQs fails Imre Deak
@ 2026-02-25 16:27 ` Imre Deak
  2026-02-25 16:27 ` [PATCH v2 13/20] drm/i915/dp: Return early if getting/acking device " Imre Deak
                   ` (10 subsequent siblings)
  22 siblings, 0 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:27 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Imre Deak

From: Imre Deak <imre.deak@gmail.com>

An AUX access failure during HPD IRQ handling should be handled by
falling back to a full connector detection, ensure that if the failure
happens while reading/acking a link service IRQ.

Signed-off-by: Imre Deak <imre.deak@gmail.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 613fb0cd08b78..208b1027aeca8 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5809,12 +5809,15 @@ static bool intel_dp_check_link_service_irq(struct intel_dp *intel_dp)
 		return false;
 
 	if (drm_dp_dpcd_readb(&intel_dp->aux,
-			      DP_LINK_SERVICE_IRQ_VECTOR_ESI0, &val) != 1 || !val)
+			      DP_LINK_SERVICE_IRQ_VECTOR_ESI0, &val) != 1)
+		return true;
+
+	if (!val)
 		return false;
 
 	if (drm_dp_dpcd_writeb(&intel_dp->aux,
 			       DP_LINK_SERVICE_IRQ_VECTOR_ESI0, val) != 1)
-		return false;
+		return true;
 
 	if (val & RX_CAP_CHANGED)
 		reprobe_needed = true;
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v2 13/20] drm/i915/dp: Return early if getting/acking device service IRQs fails
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
                   ` (11 preceding siblings ...)
  2026-02-25 16:27 ` [PATCH v2 12/20] drm/i915/dp: Reprobe connector if getting/acking link service " Imre Deak
@ 2026-02-25 16:27 ` Imre Deak
  2026-02-25 16:27 ` [PATCH v2 14/20] drm/i915/dp: Return early if getting/acking link " Imre Deak
                   ` (9 subsequent siblings)
  22 siblings, 0 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:27 UTC (permalink / raw)
  To: intel-gfx, intel-xe

If getting/acking the device service IRQs fail, the short HPD handler
should bail out, falling back to a full connector detection as in case
of any AUX access failures during the HPD handling. Do this by
separating the getting/acking and handling steps of the IRQs.

Signed-off-by: Imre Deak <imre.deak@intel.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 37 ++++++++++++++++---------
 1 file changed, 24 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 208b1027aeca8..0b57d90604198 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5772,31 +5772,39 @@ void intel_dp_check_link_state(struct intel_dp *intel_dp)
 	intel_encoder_link_check_queue_work(encoder, 0);
 }
 
-static bool intel_dp_check_device_service_irq(struct intel_dp *intel_dp)
+static bool intel_dp_get_and_ack_device_service_irq(struct intel_dp *intel_dp, u8 *irq_mask)
 {
-	struct intel_display *display = to_intel_display(intel_dp);
 	u8 val;
 
+	*irq_mask = 0;
+
 	if (drm_dp_dpcd_readb(&intel_dp->aux,
 			      DP_DEVICE_SERVICE_IRQ_VECTOR, &val) != 1)
-		return true;
-
-	if (!val)
 		return false;
 
-	if (drm_dp_dpcd_writeb(&intel_dp->aux, DP_DEVICE_SERVICE_IRQ_VECTOR, val) != 1)
+	if (!val)
 		return true;
 
-	if (val & DP_AUTOMATED_TEST_REQUEST)
+	if (drm_dp_dpcd_writeb(&intel_dp->aux, DP_DEVICE_SERVICE_IRQ_VECTOR, val) != 1)
+		return false;
+
+	*irq_mask = val;
+
+	return true;
+}
+
+static void intel_dp_handle_device_service_irq(struct intel_dp *intel_dp, u8 irq_mask)
+{
+	struct intel_display *display = to_intel_display(intel_dp);
+
+	if (irq_mask & DP_AUTOMATED_TEST_REQUEST)
 		intel_dp_test_request(intel_dp);
 
-	if (val & DP_CP_IRQ)
+	if (irq_mask & DP_CP_IRQ)
 		intel_hdcp_handle_cp_irq(intel_dp->attached_connector);
 
-	if (val & DP_SINK_SPECIFIC_IRQ)
+	if (irq_mask & DP_SINK_SPECIFIC_IRQ)
 		drm_dbg_kms(display->drm, "Sink specific irq unhandled\n");
-
-	return false;
 }
 
 static bool intel_dp_check_link_service_irq(struct intel_dp *intel_dp)
@@ -5850,6 +5858,7 @@ static bool
 intel_dp_short_pulse(struct intel_dp *intel_dp)
 {
 	bool reprobe_needed = false;
+	u8 irq_mask;
 
 	intel_dp_test_reset(intel_dp);
 
@@ -5864,8 +5873,10 @@ intel_dp_short_pulse(struct intel_dp *intel_dp)
 		/* No need to proceed if we are going to do full detect */
 		return false;
 
-	if (intel_dp_check_device_service_irq(intel_dp))
-		reprobe_needed = true;
+	if (!intel_dp_get_and_ack_device_service_irq(intel_dp, &irq_mask))
+		return false;
+
+	intel_dp_handle_device_service_irq(intel_dp, irq_mask);
 
 	if (intel_dp_check_link_service_irq(intel_dp))
 		reprobe_needed = true;
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v2 14/20] drm/i915/dp: Return early if getting/acking link service IRQs fails
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
                   ` (12 preceding siblings ...)
  2026-02-25 16:27 ` [PATCH v2 13/20] drm/i915/dp: Return early if getting/acking device " Imre Deak
@ 2026-02-25 16:27 ` Imre Deak
  2026-02-25 16:27 ` [PATCH v2 15/20] drm/i915/dp: Read/ack sink count and sink IRQs for SST as it's done for MST Imre Deak
                   ` (8 subsequent siblings)
  22 siblings, 0 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:27 UTC (permalink / raw)
  To: intel-gfx, intel-xe

If getting/acking the link service IRQs fail, the short HPD handler
should bail out, falling back to a full connector detection as in case
of any AUX access failures during the HPD handling. Do this by
separating the getting/acking and handling steps of the IRQs.

Signed-off-by: Imre Deak <imre.deak@intel.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 35 +++++++++++++++++--------
 1 file changed, 24 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 0b57d90604198..6156fd91b13c5 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5807,33 +5807,43 @@ static void intel_dp_handle_device_service_irq(struct intel_dp *intel_dp, u8 irq
 		drm_dbg_kms(display->drm, "Sink specific irq unhandled\n");
 }
 
-static bool intel_dp_check_link_service_irq(struct intel_dp *intel_dp)
+static bool intel_dp_get_and_ack_link_service_irq(struct intel_dp *intel_dp, u8 *irq_mask)
 {
-	struct intel_display *display = to_intel_display(intel_dp);
-	bool reprobe_needed = false;
 	u8 val;
 
+	*irq_mask = 0;
+
 	if (intel_dp->dpcd[DP_DPCD_REV] < DP_DPCD_REV_12)
-		return false;
+		return true;
 
 	if (drm_dp_dpcd_readb(&intel_dp->aux,
 			      DP_LINK_SERVICE_IRQ_VECTOR_ESI0, &val) != 1)
-		return true;
+		return false;
 
 	if (!val)
-		return false;
+		return true;
 
 	if (drm_dp_dpcd_writeb(&intel_dp->aux,
 			       DP_LINK_SERVICE_IRQ_VECTOR_ESI0, val) != 1)
-		return true;
+		return false;
 
-	if (val & RX_CAP_CHANGED)
+	*irq_mask = val;
+
+	return true;
+}
+
+static bool intel_dp_handle_link_service_irq(struct intel_dp *intel_dp, u8 irq_mask)
+{
+	struct intel_display *display = to_intel_display(intel_dp);
+	bool reprobe_needed = false;
+
+	if (irq_mask & RX_CAP_CHANGED)
 		reprobe_needed = true;
 
-	if (val & HDMI_LINK_STATUS_CHANGED)
+	if (irq_mask & HDMI_LINK_STATUS_CHANGED)
 		intel_dp_handle_hdmi_link_status_change(intel_dp);
 
-	if ((val & DP_TUNNELING_IRQ) &&
+	if ((irq_mask & DP_TUNNELING_IRQ) &&
 	    drm_dp_tunnel_handle_irq(display->dp_tunnel_mgr,
 				     &intel_dp->aux))
 		reprobe_needed = true;
@@ -5878,7 +5888,10 @@ intel_dp_short_pulse(struct intel_dp *intel_dp)
 
 	intel_dp_handle_device_service_irq(intel_dp, irq_mask);
 
-	if (intel_dp_check_link_service_irq(intel_dp))
+	if (!intel_dp_get_and_ack_link_service_irq(intel_dp, &irq_mask))
+		return false;
+
+	if (intel_dp_handle_link_service_irq(intel_dp, irq_mask))
 		reprobe_needed = true;
 
 	/* Handle CEC interrupts, if any */
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v2 15/20] drm/i915/dp: Read/ack sink count and sink IRQs for SST as it's done for MST
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
                   ` (13 preceding siblings ...)
  2026-02-25 16:27 ` [PATCH v2 14/20] drm/i915/dp: Return early if getting/acking link " Imre Deak
@ 2026-02-25 16:27 ` Imre Deak
  2026-02-25 16:27 ` [PATCH v2 16/20] drm/i915/dp: Print debug message for a sink connected off request Imre Deak
                   ` (7 subsequent siblings)
  22 siblings, 0 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:27 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Imre Deak

From: Imre Deak <imre.deak@gmail.com>

Read and ack the sink count, sink device and link service IRQs for SST
the same way this is done for MST, the read/ack happening in separate
steps via an ESI (Event Status Indicator) vector.

The above way is more efficient, since on newer (DPCD_REV >= 1.2) sinks
the DP_SINK_COUNT_ESI..DP_LINK_SERVICE_IRQ_VECTOR_ESI0 registers can be
read out in one AUX transaction - and the 3 last one written in one
transaction. Also this allows sharing more of the SST and MST IRQ
handling code (done as a follow-up).

For now keep the current behavior of always reading the legacy
DP_SINK_COUNT, DP_DEVICE_SERVICE_IRQ_VECTOR registers and not reading
the DP_DEVICE_SERVICE_IRQ_VECTOR_ESI1 register.

Signed-off-by: Imre Deak <imre.deak@gmail.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 132 +++++++++++++-----------
 1 file changed, 73 insertions(+), 59 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 6156fd91b13c5..749bcb4dfe4e7 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -4952,6 +4952,70 @@ static bool intel_dp_ack_sink_irq_esi(struct intel_dp *intel_dp, u8 esi[4])
 	return false;
 }
 
+static bool intel_dp_get_sink_irq_esi_sst(struct intel_dp *intel_dp, u8 esi[4])
+{
+	memset(esi, 0, 4);
+
+	/*
+	 * TODO: For DP_DPCD_REV >= 0x12 read
+	 * DP_SINK_COUNT_ESI and DP_DEVICE_SERVICE_IRQ_VECTOR_ESI0.
+	 */
+	if (drm_dp_dpcd_read_data(&intel_dp->aux, DP_SINK_COUNT, esi, 2) != 0)
+		return false;
+
+	if (intel_dp->dpcd[DP_DPCD_REV] < DP_DPCD_REV_12)
+		return true;
+
+	/* TODO: Read DP_DEVICE_SERVICE_IRQ_VECTOR_ESI1 as well */
+	if (drm_dp_dpcd_read_byte(&intel_dp->aux, DP_LINK_SERVICE_IRQ_VECTOR_ESI0, &esi[3]) != 0)
+		return false;
+
+	return true;
+}
+
+static bool intel_dp_ack_sink_irq_esi_sst(struct intel_dp *intel_dp, u8 esi[4])
+{
+	/*
+	 * TODO: For DP_DPCD_REV >= 0x12 write
+	 * DP_DEVICE_SERVICE_IRQ_VECTOR_ESI0
+	 */
+	if (drm_dp_dpcd_write_byte(&intel_dp->aux, DP_DEVICE_SERVICE_IRQ_VECTOR, esi[1]) != 0)
+		return false;
+
+	if (intel_dp->dpcd[DP_DPCD_REV] < DP_DPCD_REV_12)
+		return true;
+
+	/* TODO: Read DP_DEVICE_SERVICE_IRQ_VECTOR_ESI1 as well */
+	if (drm_dp_dpcd_write_byte(&intel_dp->aux, DP_LINK_SERVICE_IRQ_VECTOR_ESI0, esi[3]) != 0)
+		return false;
+
+	return true;
+}
+
+static bool intel_dp_get_and_ack_sink_irq_esi_sst(struct intel_dp *intel_dp, u8 esi[4])
+{
+	struct intel_display *display = to_intel_display(intel_dp);
+	struct intel_connector *connector = intel_dp->attached_connector;
+	struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
+
+	if (!intel_dp_get_sink_irq_esi_sst(intel_dp, esi))
+		return false;
+
+	drm_dbg_kms(display->drm,
+		    "[CONNECTOR:%d:%s][ENCODER:%d:%s] DPRX ESI: %4ph\n",
+		    connector->base.base.id, connector->base.name,
+		    encoder->base.base.id, encoder->base.name,
+		    esi);
+
+	if (mem_is_zero(&esi[1], 3))
+		return true;
+
+	if (!intel_dp_ack_sink_irq_esi_sst(intel_dp, esi))
+		return false;
+
+	return true;
+}
+
 bool
 intel_dp_needs_vsc_sdp(const struct intel_crtc_state *crtc_state,
 		       const struct drm_connector_state *conn_state)
@@ -5772,27 +5836,6 @@ void intel_dp_check_link_state(struct intel_dp *intel_dp)
 	intel_encoder_link_check_queue_work(encoder, 0);
 }
 
-static bool intel_dp_get_and_ack_device_service_irq(struct intel_dp *intel_dp, u8 *irq_mask)
-{
-	u8 val;
-
-	*irq_mask = 0;
-
-	if (drm_dp_dpcd_readb(&intel_dp->aux,
-			      DP_DEVICE_SERVICE_IRQ_VECTOR, &val) != 1)
-		return false;
-
-	if (!val)
-		return true;
-
-	if (drm_dp_dpcd_writeb(&intel_dp->aux, DP_DEVICE_SERVICE_IRQ_VECTOR, val) != 1)
-		return false;
-
-	*irq_mask = val;
-
-	return true;
-}
-
 static void intel_dp_handle_device_service_irq(struct intel_dp *intel_dp, u8 irq_mask)
 {
 	struct intel_display *display = to_intel_display(intel_dp);
@@ -5807,31 +5850,6 @@ static void intel_dp_handle_device_service_irq(struct intel_dp *intel_dp, u8 irq
 		drm_dbg_kms(display->drm, "Sink specific irq unhandled\n");
 }
 
-static bool intel_dp_get_and_ack_link_service_irq(struct intel_dp *intel_dp, u8 *irq_mask)
-{
-	u8 val;
-
-	*irq_mask = 0;
-
-	if (intel_dp->dpcd[DP_DPCD_REV] < DP_DPCD_REV_12)
-		return true;
-
-	if (drm_dp_dpcd_readb(&intel_dp->aux,
-			      DP_LINK_SERVICE_IRQ_VECTOR_ESI0, &val) != 1)
-		return false;
-
-	if (!val)
-		return true;
-
-	if (drm_dp_dpcd_writeb(&intel_dp->aux,
-			       DP_LINK_SERVICE_IRQ_VECTOR_ESI0, val) != 1)
-		return false;
-
-	*irq_mask = val;
-
-	return true;
-}
-
 static bool intel_dp_handle_link_service_irq(struct intel_dp *intel_dp, u8 irq_mask)
 {
 	struct intel_display *display = to_intel_display(intel_dp);
@@ -5868,30 +5886,26 @@ static bool
 intel_dp_short_pulse(struct intel_dp *intel_dp)
 {
 	bool reprobe_needed = false;
-	u8 irq_mask;
+	u8 esi[4] = {};
 
 	intel_dp_test_reset(intel_dp);
 
+	if (!intel_dp_get_and_ack_sink_irq_esi_sst(intel_dp, esi))
+		return false;
+
 	/*
-	 * Now read the DPCD to see if it's actually running
 	 * If the current value of sink count doesn't match with
-	 * the value that was stored earlier or dpcd read failed
-	 * we need to do full detection
+	 * the value that was stored earlier we need to do full
+	 * detection.
 	 */
 	if (intel_dp_has_sink_count(intel_dp) &&
-	    drm_dp_read_sink_count(&intel_dp->aux) != intel_dp->sink_count)
+	    DP_GET_SINK_COUNT(esi[0]) != intel_dp->sink_count)
 		/* No need to proceed if we are going to do full detect */
 		return false;
 
-	if (!intel_dp_get_and_ack_device_service_irq(intel_dp, &irq_mask))
-		return false;
+	intel_dp_handle_device_service_irq(intel_dp, esi[1]);
 
-	intel_dp_handle_device_service_irq(intel_dp, irq_mask);
-
-	if (!intel_dp_get_and_ack_link_service_irq(intel_dp, &irq_mask))
-		return false;
-
-	if (intel_dp_handle_link_service_irq(intel_dp, irq_mask))
+	if (intel_dp_handle_link_service_irq(intel_dp, esi[3]))
 		reprobe_needed = true;
 
 	/* Handle CEC interrupts, if any */
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v2 16/20] drm/i915/dp: Print debug message for a sink connected off request
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
                   ` (14 preceding siblings ...)
  2026-02-25 16:27 ` [PATCH v2 15/20] drm/i915/dp: Read/ack sink count and sink IRQs for SST as it's done for MST Imre Deak
@ 2026-02-25 16:27 ` Imre Deak
  2026-02-25 16:27 ` [PATCH v2 17/20] drm/i915/dp: Check SST link status while handling link service IRQs Imre Deak
                   ` (6 subsequent siblings)
  22 siblings, 0 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:27 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Imre Deak

From: Imre Deak <imre.deak@gmail.com>

So far the CONNECTED_OFF_ENTRY_REQUESTED request was accepted only
implicitly, by acking all the IRQs raised by the sink. Make this
explicit by printing a debug message.

Signed-off-by: Imre Deak <imre.deak@gmail.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 749bcb4dfe4e7..a3bcc5de37442 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5853,6 +5853,8 @@ static void intel_dp_handle_device_service_irq(struct intel_dp *intel_dp, u8 irq
 static bool intel_dp_handle_link_service_irq(struct intel_dp *intel_dp, u8 irq_mask)
 {
 	struct intel_display *display = to_intel_display(intel_dp);
+	struct intel_connector *connector = intel_dp->attached_connector;
+	struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
 	bool reprobe_needed = false;
 
 	if (irq_mask & RX_CAP_CHANGED)
@@ -5861,6 +5863,12 @@ static bool intel_dp_handle_link_service_irq(struct intel_dp *intel_dp, u8 irq_m
 	if (irq_mask & HDMI_LINK_STATUS_CHANGED)
 		intel_dp_handle_hdmi_link_status_change(intel_dp);
 
+	if (irq_mask & CONNECTED_OFF_ENTRY_REQUESTED)
+		drm_dbg_kms(display->drm,
+			    "[CONNECTOR:%d:%s][ENCODER:%d:%s] Allowing connected off request\n",
+			    connector->base.base.id, connector->base.name,
+			    encoder->base.base.id, encoder->base.name);
+
 	if ((irq_mask & DP_TUNNELING_IRQ) &&
 	    drm_dp_tunnel_handle_irq(display->dp_tunnel_mgr,
 				     &intel_dp->aux))
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v2 17/20] drm/i915/dp: Check SST link status while handling link service IRQs
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
                   ` (15 preceding siblings ...)
  2026-02-25 16:27 ` [PATCH v2 16/20] drm/i915/dp: Print debug message for a sink connected off request Imre Deak
@ 2026-02-25 16:27 ` Imre Deak
  2026-02-25 16:27 ` [PATCH v2 18/20] drm/i915/dp_mst: Reuse intel_dp_handle_link_service_irq() Imre Deak
                   ` (5 subsequent siblings)
  22 siblings, 0 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:27 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Imre Deak

From: Imre Deak <imre.deak@gmail.com>

Move checking the link status for SST to
intel_dp_handle_link_service_irq(). This is the logical place for the
check which should only happen in response to a LINK_STATUS_CHANGE sink
IRQ. This IRQ is only supported by DPCD revision >= 1.2, so for sinks
with an older DPCD revision the link status is checked in response to
any HPD IRQ. For newer DPCD revisions however the link status check can
be made conditional on LINK_STATUS_CHANGE.

For now keep the current behavior of always forcing a link status check
regardless of LINK_STATUS_CHANGE being set or not.

This also prepares for a follow-up change sharing the link service IRQ
handler for SST and MST (on MST the link status check only happening in
response to a LINK_STATUS_CHANGE IRQ).

Signed-off-by: Imre Deak <imre.deak@gmail.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index a3bcc5de37442..826d3d63c43ff 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5860,6 +5860,9 @@ static bool intel_dp_handle_link_service_irq(struct intel_dp *intel_dp, u8 irq_m
 	if (irq_mask & RX_CAP_CHANGED)
 		reprobe_needed = true;
 
+	if (irq_mask & LINK_STATUS_CHANGED)
+		intel_dp_check_link_state(intel_dp);
+
 	if (irq_mask & HDMI_LINK_STATUS_CHANGED)
 		intel_dp_handle_hdmi_link_status_change(intel_dp);
 
@@ -5913,14 +5916,18 @@ intel_dp_short_pulse(struct intel_dp *intel_dp)
 
 	intel_dp_handle_device_service_irq(intel_dp, esi[1]);
 
+	/*
+	 * Force checking the link status for DPCD_REV < 1.2
+	 * TODO: let the link status check depend on LINK_STATUS_CHANGED
+	 * for DPCD_REV >= 1.2
+	 */
+	esi[3] |= LINK_STATUS_CHANGED;
 	if (intel_dp_handle_link_service_irq(intel_dp, esi[3]))
 		reprobe_needed = true;
 
 	/* Handle CEC interrupts, if any */
 	drm_dp_cec_irq(&intel_dp->aux);
 
-	intel_dp_check_link_state(intel_dp);
-
 	if (READ_ONCE(intel_dp->downstream_port_changed)) {
 		WRITE_ONCE(intel_dp->downstream_port_changed, false);
 		reprobe_needed = true;
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v2 18/20] drm/i915/dp_mst: Reuse intel_dp_handle_link_service_irq()
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
                   ` (16 preceding siblings ...)
  2026-02-25 16:27 ` [PATCH v2 17/20] drm/i915/dp: Check SST link status while handling link service IRQs Imre Deak
@ 2026-02-25 16:27 ` Imre Deak
  2026-02-25 16:27 ` [PATCH v2 19/20] drm/i915/dp: Ack only the handled device service IRQs Imre Deak
                   ` (4 subsequent siblings)
  22 siblings, 0 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:27 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Imre Deak

From: Imre Deak <imre.deak@gmail.com>

Use intel_dp_handle_link_service_irq() while handling an MST HPD IRQ,
instead of open-coding this.

Signed-off-by: Imre Deak <imre.deak@gmail.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 826d3d63c43ff..27eea2cc0c301 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5508,6 +5508,8 @@ intel_dp_mst_hpd_irq(struct intel_dp *intel_dp, u8 *esi, u8 *ack)
 	}
 }
 
+static bool intel_dp_handle_link_service_irq(struct intel_dp *intel_dp, u8 irq_mask);
+
 /**
  * intel_dp_check_mst_status - service any pending MST interrupts, check link status
  * @intel_dp: Intel DP struct
@@ -5555,14 +5557,7 @@ intel_dp_check_mst_status(struct intel_dp *intel_dp)
 		if (ack[1] & (DP_DOWN_REP_MSG_RDY | DP_UP_REQ_MSG_RDY))
 			drm_dp_mst_hpd_irq_send_new_request(&intel_dp->mst.mgr);
 
-		if (ack[3] & RX_CAP_CHANGED)
-			reprobe_needed = true;
-
-		if ((ack[3] & LINK_STATUS_CHANGED) || intel_dp->link.force_retrain)
-			intel_dp_check_link_state(intel_dp);
-
-		if ((ack[3] & DP_TUNNELING_IRQ) &&
-		    drm_dp_tunnel_handle_irq(display->dp_tunnel_mgr, &intel_dp->aux))
+		if (intel_dp_handle_link_service_irq(intel_dp, ack[3]))
 			reprobe_needed = true;
 	}
 
@@ -5860,7 +5855,7 @@ static bool intel_dp_handle_link_service_irq(struct intel_dp *intel_dp, u8 irq_m
 	if (irq_mask & RX_CAP_CHANGED)
 		reprobe_needed = true;
 
-	if (irq_mask & LINK_STATUS_CHANGED)
+	if ((irq_mask & LINK_STATUS_CHANGED) || intel_dp->link.force_retrain)
 		intel_dp_check_link_state(intel_dp);
 
 	if (irq_mask & HDMI_LINK_STATUS_CHANGED)
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v2 19/20] drm/i915/dp: Ack only the handled device service IRQs
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
                   ` (17 preceding siblings ...)
  2026-02-25 16:27 ` [PATCH v2 18/20] drm/i915/dp_mst: Reuse intel_dp_handle_link_service_irq() Imre Deak
@ 2026-02-25 16:27 ` Imre Deak
  2026-02-25 16:27 ` [PATCH v2 20/20] drm/i915/dp: Ack only the handled link " Imre Deak
                   ` (3 subsequent siblings)
  22 siblings, 0 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:27 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Imre Deak

From: Imre Deak <imre.deak@gmail.com>

Only those IRQs should be acked that are handled, however for SST all
IRQs triggered by the sink are acked. This can be a problem for flags
that are reserved/reading zero at a given moment, but become used for
some purpose - with a side-effect if set - in a future DPCD revision.

Fix the above by acking only those device service IRQs that will be
handled. While at it add asserts that only the known/acked device
service IRQs are handled both in the MST and SST case.

Signed-off-by: Imre Deak <imre.deak@gmail.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 27eea2cc0c301..52f3b1e88599c 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -4916,6 +4916,14 @@ intel_dp_mst_disconnect(struct intel_dp *intel_dp)
 	drm_dp_mst_topology_mgr_set_mst(&intel_dp->mst.mgr, intel_dp->is_mst);
 }
 
+#define INTEL_DP_DEVICE_SERVICE_IRQ_MASK_SST	(DP_AUTOMATED_TEST_REQUEST | \
+						 DP_CP_IRQ | \
+						 DP_SINK_SPECIFIC_IRQ)
+
+#define INTEL_DP_DEVICE_SERVICE_IRQ_MASK_MST	(DP_CP_IRQ | \
+						 DP_DOWN_REP_MSG_RDY | \
+						 DP_UP_REQ_MSG_RDY)
+
 static bool
 intel_dp_get_sink_irq_esi(struct intel_dp *intel_dp, u8 *esi)
 {
@@ -5007,6 +5015,8 @@ static bool intel_dp_get_and_ack_sink_irq_esi_sst(struct intel_dp *intel_dp, u8
 		    encoder->base.base.id, encoder->base.name,
 		    esi);
 
+	esi[1] &= INTEL_DP_DEVICE_SERVICE_IRQ_MASK_SST;
+
 	if (mem_is_zero(&esi[1], 3))
 		return true;
 
@@ -5551,6 +5561,8 @@ intel_dp_check_mst_status(struct intel_dp *intel_dp)
 		if (mem_is_zero(ack, sizeof(ack)))
 			break;
 
+		drm_WARN_ON(display->drm, ack[1] & ~INTEL_DP_DEVICE_SERVICE_IRQ_MASK_MST);
+
 		if (!intel_dp_ack_sink_irq_esi(intel_dp, ack))
 			drm_dbg_kms(display->drm, "Failed to ack ESI\n");
 
@@ -5835,6 +5847,8 @@ static void intel_dp_handle_device_service_irq(struct intel_dp *intel_dp, u8 irq
 {
 	struct intel_display *display = to_intel_display(intel_dp);
 
+	drm_WARN_ON(display->drm, irq_mask & ~INTEL_DP_DEVICE_SERVICE_IRQ_MASK_SST);
+
 	if (irq_mask & DP_AUTOMATED_TEST_REQUEST)
 		intel_dp_test_request(intel_dp);
 
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v2 20/20] drm/i915/dp: Ack only the handled link service IRQs
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
                   ` (18 preceding siblings ...)
  2026-02-25 16:27 ` [PATCH v2 19/20] drm/i915/dp: Ack only the handled device service IRQs Imre Deak
@ 2026-02-25 16:27 ` Imre Deak
  2026-02-25 16:34 ` [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
                   ` (2 subsequent siblings)
  22 siblings, 0 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:27 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Imre Deak

From: Imre Deak <imre.deak@gmail.com>

Ack only those SST link service IRQs that will be handled, similarly to
device service IRQs. While at it add asserts that only the known/acked
link service IRQs are handled both in the MST and SST case.

Signed-off-by: Imre Deak <imre.deak@gmail.com>
---
 drivers/gpu/drm/i915/display/intel_dp.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 52f3b1e88599c..09367205bab76 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -4924,6 +4924,16 @@ intel_dp_mst_disconnect(struct intel_dp *intel_dp)
 						 DP_DOWN_REP_MSG_RDY | \
 						 DP_UP_REQ_MSG_RDY)
 
+#define INTEL_DP_LINK_SERVICE_IRQ_MASK_SST	(RX_CAP_CHANGED | \
+						 LINK_STATUS_CHANGED | \
+						 HDMI_LINK_STATUS_CHANGED | \
+						 CONNECTED_OFF_ENTRY_REQUESTED | \
+						 DP_TUNNELING_IRQ)
+
+#define INTEL_DP_LINK_SERVICE_IRQ_MASK_MST	(RX_CAP_CHANGED | \
+						 LINK_STATUS_CHANGED | \
+						 DP_TUNNELING_IRQ)
+
 static bool
 intel_dp_get_sink_irq_esi(struct intel_dp *intel_dp, u8 *esi)
 {
@@ -5016,6 +5026,7 @@ static bool intel_dp_get_and_ack_sink_irq_esi_sst(struct intel_dp *intel_dp, u8
 		    esi);
 
 	esi[1] &= INTEL_DP_DEVICE_SERVICE_IRQ_MASK_SST;
+	esi[3] &= INTEL_DP_LINK_SERVICE_IRQ_MASK_SST;
 
 	if (mem_is_zero(&esi[1], 3))
 		return true;
@@ -5554,7 +5565,7 @@ intel_dp_check_mst_status(struct intel_dp *intel_dp)
 
 		drm_dbg_kms(display->drm, "DPRX ESI: %4ph\n", esi);
 
-		ack[3] |= esi[3] & (RX_CAP_CHANGED | LINK_STATUS_CHANGED | DP_TUNNELING_IRQ);
+		ack[3] |= esi[3] & INTEL_DP_LINK_SERVICE_IRQ_MASK_MST;
 
 		intel_dp_mst_hpd_irq(intel_dp, esi, ack);
 
@@ -5562,6 +5573,7 @@ intel_dp_check_mst_status(struct intel_dp *intel_dp)
 			break;
 
 		drm_WARN_ON(display->drm, ack[1] & ~INTEL_DP_DEVICE_SERVICE_IRQ_MASK_MST);
+		drm_WARN_ON(display->drm, ack[3] & ~INTEL_DP_LINK_SERVICE_IRQ_MASK_MST);
 
 		if (!intel_dp_ack_sink_irq_esi(intel_dp, ack))
 			drm_dbg_kms(display->drm, "Failed to ack ESI\n");
@@ -5866,6 +5878,9 @@ static bool intel_dp_handle_link_service_irq(struct intel_dp *intel_dp, u8 irq_m
 	struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
 	bool reprobe_needed = false;
 
+	drm_WARN_ON(display->drm, irq_mask & ~(INTEL_DP_LINK_SERVICE_IRQ_MASK_SST |
+					       INTEL_DP_LINK_SERVICE_IRQ_MASK_MST));
+
 	if (irq_mask & RX_CAP_CHANGED)
 		reprobe_needed = true;
 
-- 
2.49.1


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* Re: [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
                   ` (19 preceding siblings ...)
  2026-02-25 16:27 ` [PATCH v2 20/20] drm/i915/dp: Ack only the handled link " Imre Deak
@ 2026-02-25 16:34 ` Imre Deak
  2026-02-25 16:52 ` ✓ CI.KUnit: success for drm/i915/dp: Fix few SST HPD IRQ handling issues (rev2) Patchwork
  2026-02-25 17:26 ` ✓ Xe.CI.BAT: " Patchwork
  22 siblings, 0 replies; 24+ messages in thread
From: Imre Deak @ 2026-02-25 16:34 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: Luca Coelho, Jani Nikula

Please disregard this version, I managed to send v1 without the actual
v2 changes. I'll resend the updated version.

On Wed, Feb 25, 2026 at 06:27:31PM +0200, Imre Deak wrote:
> This is v2 of [1], addressing the review comments related to bool vs.
> error code function return values from Luca and Jani in patches 2, 11,
> 12, 15 and adding R-bs.
> 
> The patchset also prepares for the upcoming UHBR DP tunnel support
> changes.
> 
> Cc: Luca Coelho <luciano.coelho@intel.com>
> Cc: Jani Nikula <jani.nikula@intel.com>
> 
> [1] https://lore.kernel.org/all/20250626082053.219514-1-imre.deak@intel.com
> 
> Imre Deak (20):
>   drm/i915/dp_mst: Reprobe connector if the IRQ ESI read failed
>   drm/i915/dp_mst: Verify the link status always the same way
>   drm/i915/dp_mst: Reuse intel_dp_check_link_state() in the HPD IRQ
>     handler
>   drm/i915/dp: Handle a tunneling IRQ after acking it
>   drm/i915/dp: Handle the RX_CAP_CHANGED HPD IRQ
>   drm/i915/dp: Handle the DOWNSTREAM_PORT_STATUS_CHANGED event
>   drm/i915/dp: Don't clobber the encoder state in the HPD IRQ handler
>   drm/i915/dp: Remove the device service IRQ handling from connector
>     detect
>   drm/i915/dp: Fix the device service IRQ DPCD_REV check
>   drm/i915/dp: Fix the link service IRQ DPCD_REV check
>   drm/i915/dp: Reprobe connector if getting/acking device IRQs fails
>   drm/i915/dp: Reprobe connector if getting/acking link service IRQs
>     fails
>   drm/i915/dp: Return early if getting/acking device service IRQs fails
>   drm/i915/dp: Return early if getting/acking link service IRQs fails
>   drm/i915/dp: Read/ack sink count and sink IRQs for SST as it's done
>     for MST
>   drm/i915/dp: Print debug message for a sink connected off request
>   drm/i915/dp: Check SST link status while handling link service IRQs
>   drm/i915/dp_mst: Reuse intel_dp_handle_link_service_irq()
>   drm/i915/dp: Ack only the handled device service IRQs
>   drm/i915/dp: Ack only the handled link service IRQs
> 
>  .../drm/i915/display/intel_display_types.h    |   1 +
>  drivers/gpu/drm/i915/display/intel_dp.c       | 253 ++++++++++++------
>  2 files changed, 171 insertions(+), 83 deletions(-)
> 
> -- 
> 2.49.1
> 

^ permalink raw reply	[flat|nested] 24+ messages in thread

* ✓ CI.KUnit: success for drm/i915/dp: Fix few SST HPD IRQ handling issues (rev2)
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
                   ` (20 preceding siblings ...)
  2026-02-25 16:34 ` [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
@ 2026-02-25 16:52 ` Patchwork
  2026-02-25 17:26 ` ✓ Xe.CI.BAT: " Patchwork
  22 siblings, 0 replies; 24+ messages in thread
From: Patchwork @ 2026-02-25 16:52 UTC (permalink / raw)
  To: Imre Deak; +Cc: intel-xe

== Series Details ==

Series: drm/i915/dp: Fix few SST HPD IRQ handling issues (rev2)
URL   : https://patchwork.freedesktop.org/series/150799/
State : success

== Summary ==

+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[16:51:16] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[16:51:20] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[16:51:50] Starting KUnit Kernel (1/1)...
[16:51:50] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[16:51:51] ================== guc_buf (11 subtests) ===================
[16:51:51] [PASSED] test_smallest
[16:51:51] [PASSED] test_largest
[16:51:51] [PASSED] test_granular
[16:51:51] [PASSED] test_unique
[16:51:51] [PASSED] test_overlap
[16:51:51] [PASSED] test_reusable
[16:51:51] [PASSED] test_too_big
[16:51:51] [PASSED] test_flush
[16:51:51] [PASSED] test_lookup
[16:51:51] [PASSED] test_data
[16:51:51] [PASSED] test_class
[16:51:51] ===================== [PASSED] guc_buf =====================
[16:51:51] =================== guc_dbm (7 subtests) ===================
[16:51:51] [PASSED] test_empty
[16:51:51] [PASSED] test_default
[16:51:51] ======================== test_size  ========================
[16:51:51] [PASSED] 4
[16:51:51] [PASSED] 8
[16:51:51] [PASSED] 32
[16:51:51] [PASSED] 256
[16:51:51] ==================== [PASSED] test_size ====================
[16:51:51] ======================= test_reuse  ========================
[16:51:51] [PASSED] 4
[16:51:51] [PASSED] 8
[16:51:51] [PASSED] 32
[16:51:51] [PASSED] 256
[16:51:51] =================== [PASSED] test_reuse ====================
[16:51:51] =================== test_range_overlap  ====================
[16:51:51] [PASSED] 4
[16:51:51] [PASSED] 8
[16:51:51] [PASSED] 32
[16:51:51] [PASSED] 256
[16:51:51] =============== [PASSED] test_range_overlap ================
[16:51:51] =================== test_range_compact  ====================
[16:51:51] [PASSED] 4
[16:51:51] [PASSED] 8
[16:51:51] [PASSED] 32
[16:51:51] [PASSED] 256
[16:51:51] =============== [PASSED] test_range_compact ================
[16:51:51] ==================== test_range_spare  =====================
[16:51:51] [PASSED] 4
[16:51:51] [PASSED] 8
[16:51:51] [PASSED] 32
[16:51:51] [PASSED] 256
[16:51:51] ================ [PASSED] test_range_spare =================
[16:51:51] ===================== [PASSED] guc_dbm =====================
[16:51:51] =================== guc_idm (6 subtests) ===================
[16:51:51] [PASSED] bad_init
[16:51:51] [PASSED] no_init
[16:51:51] [PASSED] init_fini
[16:51:51] [PASSED] check_used
[16:51:51] [PASSED] check_quota
[16:51:51] [PASSED] check_all
[16:51:51] ===================== [PASSED] guc_idm =====================
[16:51:51] ================== no_relay (3 subtests) ===================
[16:51:51] [PASSED] xe_drops_guc2pf_if_not_ready
[16:51:51] [PASSED] xe_drops_guc2vf_if_not_ready
[16:51:51] [PASSED] xe_rejects_send_if_not_ready
[16:51:51] ==================== [PASSED] no_relay =====================
[16:51:51] ================== pf_relay (14 subtests) ==================
[16:51:51] [PASSED] pf_rejects_guc2pf_too_short
[16:51:51] [PASSED] pf_rejects_guc2pf_too_long
[16:51:51] [PASSED] pf_rejects_guc2pf_no_payload
[16:51:51] [PASSED] pf_fails_no_payload
[16:51:51] [PASSED] pf_fails_bad_origin
[16:51:51] [PASSED] pf_fails_bad_type
[16:51:51] [PASSED] pf_txn_reports_error
[16:51:51] [PASSED] pf_txn_sends_pf2guc
[16:51:51] [PASSED] pf_sends_pf2guc
[16:51:51] [SKIPPED] pf_loopback_nop
[16:51:51] [SKIPPED] pf_loopback_echo
[16:51:51] [SKIPPED] pf_loopback_fail
[16:51:51] [SKIPPED] pf_loopback_busy
[16:51:51] [SKIPPED] pf_loopback_retry
[16:51:51] ==================== [PASSED] pf_relay =====================
[16:51:51] ================== vf_relay (3 subtests) ===================
[16:51:51] [PASSED] vf_rejects_guc2vf_too_short
[16:51:51] [PASSED] vf_rejects_guc2vf_too_long
[16:51:51] [PASSED] vf_rejects_guc2vf_no_payload
[16:51:51] ==================== [PASSED] vf_relay =====================
[16:51:51] ================ pf_gt_config (9 subtests) =================
[16:51:51] [PASSED] fair_contexts_1vf
[16:51:51] [PASSED] fair_doorbells_1vf
[16:51:51] [PASSED] fair_ggtt_1vf
[16:51:51] ====================== fair_vram_1vf  ======================
[16:51:51] [PASSED] 3.50 GiB
[16:51:51] [PASSED] 11.5 GiB
[16:51:51] [PASSED] 15.5 GiB
[16:51:51] [PASSED] 31.5 GiB
[16:51:51] [PASSED] 63.5 GiB
[16:51:51] [PASSED] 13.9 GiB
[16:51:51] ================== [PASSED] fair_vram_1vf ==================
[16:51:51] ================ fair_vram_1vf_admin_only  =================
[16:51:51] [PASSED] 3.50 GiB
[16:51:51] [PASSED] 11.5 GiB
[16:51:51] [PASSED] 15.5 GiB
[16:51:51] [PASSED] 31.5 GiB
[16:51:51] [PASSED] 63.5 GiB
[16:51:51] [PASSED] 13.9 GiB
[16:51:51] ============ [PASSED] fair_vram_1vf_admin_only =============
[16:51:51] ====================== fair_contexts  ======================
[16:51:51] [PASSED] 1 VF
[16:51:51] [PASSED] 2 VFs
[16:51:51] [PASSED] 3 VFs
[16:51:51] [PASSED] 4 VFs
[16:51:51] [PASSED] 5 VFs
[16:51:51] [PASSED] 6 VFs
[16:51:51] [PASSED] 7 VFs
[16:51:51] [PASSED] 8 VFs
[16:51:51] [PASSED] 9 VFs
[16:51:51] [PASSED] 10 VFs
[16:51:51] [PASSED] 11 VFs
[16:51:51] [PASSED] 12 VFs
[16:51:51] [PASSED] 13 VFs
[16:51:51] [PASSED] 14 VFs
[16:51:51] [PASSED] 15 VFs
[16:51:51] [PASSED] 16 VFs
[16:51:51] [PASSED] 17 VFs
[16:51:51] [PASSED] 18 VFs
[16:51:51] [PASSED] 19 VFs
[16:51:51] [PASSED] 20 VFs
[16:51:51] [PASSED] 21 VFs
[16:51:51] [PASSED] 22 VFs
[16:51:51] [PASSED] 23 VFs
[16:51:51] [PASSED] 24 VFs
[16:51:51] [PASSED] 25 VFs
[16:51:51] [PASSED] 26 VFs
[16:51:51] [PASSED] 27 VFs
[16:51:51] [PASSED] 28 VFs
[16:51:51] [PASSED] 29 VFs
[16:51:51] [PASSED] 30 VFs
[16:51:51] [PASSED] 31 VFs
[16:51:51] [PASSED] 32 VFs
[16:51:51] [PASSED] 33 VFs
[16:51:51] [PASSED] 34 VFs
[16:51:51] [PASSED] 35 VFs
[16:51:51] [PASSED] 36 VFs
[16:51:51] [PASSED] 37 VFs
[16:51:51] [PASSED] 38 VFs
[16:51:51] [PASSED] 39 VFs
[16:51:51] [PASSED] 40 VFs
[16:51:51] [PASSED] 41 VFs
[16:51:51] [PASSED] 42 VFs
[16:51:51] [PASSED] 43 VFs
[16:51:51] [PASSED] 44 VFs
[16:51:51] [PASSED] 45 VFs
[16:51:51] [PASSED] 46 VFs
[16:51:51] [PASSED] 47 VFs
[16:51:51] [PASSED] 48 VFs
[16:51:51] [PASSED] 49 VFs
[16:51:51] [PASSED] 50 VFs
[16:51:51] [PASSED] 51 VFs
[16:51:51] [PASSED] 52 VFs
[16:51:51] [PASSED] 53 VFs
[16:51:51] [PASSED] 54 VFs
[16:51:51] [PASSED] 55 VFs
[16:51:51] [PASSED] 56 VFs
[16:51:51] [PASSED] 57 VFs
[16:51:51] [PASSED] 58 VFs
[16:51:51] [PASSED] 59 VFs
[16:51:51] [PASSED] 60 VFs
[16:51:51] [PASSED] 61 VFs
[16:51:51] [PASSED] 62 VFs
[16:51:51] [PASSED] 63 VFs
[16:51:51] ================== [PASSED] fair_contexts ==================
[16:51:51] ===================== fair_doorbells  ======================
[16:51:51] [PASSED] 1 VF
[16:51:51] [PASSED] 2 VFs
[16:51:51] [PASSED] 3 VFs
[16:51:51] [PASSED] 4 VFs
[16:51:51] [PASSED] 5 VFs
[16:51:51] [PASSED] 6 VFs
[16:51:51] [PASSED] 7 VFs
[16:51:51] [PASSED] 8 VFs
[16:51:51] [PASSED] 9 VFs
[16:51:51] [PASSED] 10 VFs
[16:51:51] [PASSED] 11 VFs
[16:51:51] [PASSED] 12 VFs
[16:51:51] [PASSED] 13 VFs
[16:51:51] [PASSED] 14 VFs
[16:51:51] [PASSED] 15 VFs
[16:51:51] [PASSED] 16 VFs
[16:51:51] [PASSED] 17 VFs
[16:51:51] [PASSED] 18 VFs
[16:51:51] [PASSED] 19 VFs
[16:51:51] [PASSED] 20 VFs
[16:51:51] [PASSED] 21 VFs
[16:51:51] [PASSED] 22 VFs
[16:51:51] [PASSED] 23 VFs
[16:51:51] [PASSED] 24 VFs
[16:51:51] [PASSED] 25 VFs
[16:51:51] [PASSED] 26 VFs
[16:51:51] [PASSED] 27 VFs
[16:51:51] [PASSED] 28 VFs
[16:51:51] [PASSED] 29 VFs
[16:51:51] [PASSED] 30 VFs
[16:51:51] [PASSED] 31 VFs
[16:51:51] [PASSED] 32 VFs
[16:51:51] [PASSED] 33 VFs
[16:51:51] [PASSED] 34 VFs
[16:51:51] [PASSED] 35 VFs
[16:51:51] [PASSED] 36 VFs
[16:51:51] [PASSED] 37 VFs
[16:51:51] [PASSED] 38 VFs
[16:51:51] [PASSED] 39 VFs
[16:51:51] [PASSED] 40 VFs
[16:51:51] [PASSED] 41 VFs
[16:51:51] [PASSED] 42 VFs
[16:51:51] [PASSED] 43 VFs
[16:51:51] [PASSED] 44 VFs
[16:51:51] [PASSED] 45 VFs
[16:51:51] [PASSED] 46 VFs
[16:51:51] [PASSED] 47 VFs
[16:51:51] [PASSED] 48 VFs
[16:51:51] [PASSED] 49 VFs
[16:51:51] [PASSED] 50 VFs
[16:51:51] [PASSED] 51 VFs
[16:51:51] [PASSED] 52 VFs
[16:51:51] [PASSED] 53 VFs
[16:51:51] [PASSED] 54 VFs
[16:51:51] [PASSED] 55 VFs
[16:51:51] [PASSED] 56 VFs
[16:51:51] [PASSED] 57 VFs
[16:51:51] [PASSED] 58 VFs
[16:51:51] [PASSED] 59 VFs
[16:51:51] [PASSED] 60 VFs
[16:51:51] [PASSED] 61 VFs
[16:51:51] [PASSED] 62 VFs
[16:51:51] [PASSED] 63 VFs
[16:51:51] ================= [PASSED] fair_doorbells ==================
[16:51:51] ======================== fair_ggtt  ========================
[16:51:51] [PASSED] 1 VF
[16:51:51] [PASSED] 2 VFs
[16:51:51] [PASSED] 3 VFs
[16:51:51] [PASSED] 4 VFs
[16:51:51] [PASSED] 5 VFs
[16:51:51] [PASSED] 6 VFs
[16:51:51] [PASSED] 7 VFs
[16:51:51] [PASSED] 8 VFs
[16:51:51] [PASSED] 9 VFs
[16:51:51] [PASSED] 10 VFs
[16:51:51] [PASSED] 11 VFs
[16:51:51] [PASSED] 12 VFs
[16:51:51] [PASSED] 13 VFs
[16:51:51] [PASSED] 14 VFs
[16:51:51] [PASSED] 15 VFs
[16:51:51] [PASSED] 16 VFs
[16:51:51] [PASSED] 17 VFs
[16:51:51] [PASSED] 18 VFs
[16:51:51] [PASSED] 19 VFs
[16:51:51] [PASSED] 20 VFs
[16:51:51] [PASSED] 21 VFs
[16:51:51] [PASSED] 22 VFs
[16:51:51] [PASSED] 23 VFs
[16:51:51] [PASSED] 24 VFs
[16:51:51] [PASSED] 25 VFs
[16:51:51] [PASSED] 26 VFs
[16:51:51] [PASSED] 27 VFs
[16:51:51] [PASSED] 28 VFs
[16:51:51] [PASSED] 29 VFs
[16:51:51] [PASSED] 30 VFs
[16:51:51] [PASSED] 31 VFs
[16:51:51] [PASSED] 32 VFs
[16:51:51] [PASSED] 33 VFs
[16:51:51] [PASSED] 34 VFs
[16:51:51] [PASSED] 35 VFs
[16:51:51] [PASSED] 36 VFs
[16:51:51] [PASSED] 37 VFs
[16:51:51] [PASSED] 38 VFs
[16:51:51] [PASSED] 39 VFs
[16:51:51] [PASSED] 40 VFs
[16:51:51] [PASSED] 41 VFs
[16:51:51] [PASSED] 42 VFs
[16:51:51] [PASSED] 43 VFs
[16:51:51] [PASSED] 44 VFs
[16:51:51] [PASSED] 45 VFs
[16:51:51] [PASSED] 46 VFs
[16:51:51] [PASSED] 47 VFs
[16:51:51] [PASSED] 48 VFs
[16:51:51] [PASSED] 49 VFs
[16:51:51] [PASSED] 50 VFs
[16:51:51] [PASSED] 51 VFs
[16:51:51] [PASSED] 52 VFs
[16:51:51] [PASSED] 53 VFs
[16:51:51] [PASSED] 54 VFs
[16:51:51] [PASSED] 55 VFs
[16:51:51] [PASSED] 56 VFs
[16:51:51] [PASSED] 57 VFs
[16:51:51] [PASSED] 58 VFs
[16:51:51] [PASSED] 59 VFs
[16:51:51] [PASSED] 60 VFs
[16:51:51] [PASSED] 61 VFs
[16:51:51] [PASSED] 62 VFs
[16:51:51] [PASSED] 63 VFs
[16:51:51] ==================== [PASSED] fair_ggtt ====================
[16:51:51] ======================== fair_vram  ========================
[16:51:51] [PASSED] 1 VF
[16:51:51] [PASSED] 2 VFs
[16:51:51] [PASSED] 3 VFs
[16:51:51] [PASSED] 4 VFs
[16:51:51] [PASSED] 5 VFs
[16:51:51] [PASSED] 6 VFs
[16:51:51] [PASSED] 7 VFs
[16:51:51] [PASSED] 8 VFs
[16:51:51] [PASSED] 9 VFs
[16:51:51] [PASSED] 10 VFs
[16:51:51] [PASSED] 11 VFs
[16:51:51] [PASSED] 12 VFs
[16:51:51] [PASSED] 13 VFs
[16:51:51] [PASSED] 14 VFs
[16:51:51] [PASSED] 15 VFs
[16:51:51] [PASSED] 16 VFs
[16:51:51] [PASSED] 17 VFs
[16:51:51] [PASSED] 18 VFs
[16:51:51] [PASSED] 19 VFs
[16:51:51] [PASSED] 20 VFs
[16:51:51] [PASSED] 21 VFs
[16:51:51] [PASSED] 22 VFs
[16:51:51] [PASSED] 23 VFs
[16:51:51] [PASSED] 24 VFs
[16:51:51] [PASSED] 25 VFs
[16:51:51] [PASSED] 26 VFs
[16:51:51] [PASSED] 27 VFs
[16:51:51] [PASSED] 28 VFs
[16:51:51] [PASSED] 29 VFs
[16:51:51] [PASSED] 30 VFs
[16:51:51] [PASSED] 31 VFs
[16:51:51] [PASSED] 32 VFs
[16:51:51] [PASSED] 33 VFs
[16:51:51] [PASSED] 34 VFs
[16:51:51] [PASSED] 35 VFs
[16:51:51] [PASSED] 36 VFs
[16:51:51] [PASSED] 37 VFs
[16:51:51] [PASSED] 38 VFs
[16:51:51] [PASSED] 39 VFs
[16:51:51] [PASSED] 40 VFs
[16:51:51] [PASSED] 41 VFs
[16:51:51] [PASSED] 42 VFs
[16:51:51] [PASSED] 43 VFs
[16:51:51] [PASSED] 44 VFs
[16:51:51] [PASSED] 45 VFs
[16:51:51] [PASSED] 46 VFs
[16:51:51] [PASSED] 47 VFs
[16:51:51] [PASSED] 48 VFs
[16:51:51] [PASSED] 49 VFs
[16:51:51] [PASSED] 50 VFs
[16:51:51] [PASSED] 51 VFs
[16:51:51] [PASSED] 52 VFs
[16:51:51] [PASSED] 53 VFs
[16:51:51] [PASSED] 54 VFs
[16:51:51] [PASSED] 55 VFs
[16:51:51] [PASSED] 56 VFs
[16:51:51] [PASSED] 57 VFs
[16:51:51] [PASSED] 58 VFs
[16:51:51] [PASSED] 59 VFs
[16:51:51] [PASSED] 60 VFs
[16:51:51] [PASSED] 61 VFs
[16:51:51] [PASSED] 62 VFs
[16:51:51] [PASSED] 63 VFs
[16:51:51] ==================== [PASSED] fair_vram ====================
[16:51:51] ================== [PASSED] pf_gt_config ===================
[16:51:51] ===================== lmtt (1 subtest) =====================
[16:51:51] ======================== test_ops  =========================
[16:51:51] [PASSED] 2-level
[16:51:51] [PASSED] multi-level
[16:51:51] ==================== [PASSED] test_ops =====================
[16:51:51] ====================== [PASSED] lmtt =======================
[16:51:51] ================= pf_service (11 subtests) =================
[16:51:51] [PASSED] pf_negotiate_any
[16:51:51] [PASSED] pf_negotiate_base_match
[16:51:51] [PASSED] pf_negotiate_base_newer
[16:51:51] [PASSED] pf_negotiate_base_next
[16:51:51] [SKIPPED] pf_negotiate_base_older
[16:51:51] [PASSED] pf_negotiate_base_prev
[16:51:51] [PASSED] pf_negotiate_latest_match
[16:51:51] [PASSED] pf_negotiate_latest_newer
[16:51:51] [PASSED] pf_negotiate_latest_next
[16:51:51] [SKIPPED] pf_negotiate_latest_older
[16:51:51] [SKIPPED] pf_negotiate_latest_prev
[16:51:51] =================== [PASSED] pf_service ====================
[16:51:51] ================= xe_guc_g2g (2 subtests) ==================
[16:51:51] ============== xe_live_guc_g2g_kunit_default  ==============
[16:51:51] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[16:51:51] ============== xe_live_guc_g2g_kunit_allmem  ===============
[16:51:51] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[16:51:51] =================== [SKIPPED] xe_guc_g2g ===================
[16:51:51] =================== xe_mocs (2 subtests) ===================
[16:51:51] ================ xe_live_mocs_kernel_kunit  ================
[16:51:51] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[16:51:51] ================ xe_live_mocs_reset_kunit  =================
[16:51:51] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[16:51:51] ==================== [SKIPPED] xe_mocs =====================
[16:51:51] ================= xe_migrate (2 subtests) ==================
[16:51:51] ================= xe_migrate_sanity_kunit  =================
[16:51:51] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[16:51:51] ================== xe_validate_ccs_kunit  ==================
[16:51:51] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[16:51:51] =================== [SKIPPED] xe_migrate ===================
[16:51:51] ================== xe_dma_buf (1 subtest) ==================
[16:51:51] ==================== xe_dma_buf_kunit  =====================
[16:51:51] ================ [SKIPPED] xe_dma_buf_kunit ================
[16:51:51] =================== [SKIPPED] xe_dma_buf ===================
[16:51:51] ================= xe_bo_shrink (1 subtest) =================
[16:51:51] =================== xe_bo_shrink_kunit  ====================
[16:51:51] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[16:51:51] ================== [SKIPPED] xe_bo_shrink ==================
[16:51:51] ==================== xe_bo (2 subtests) ====================
[16:51:51] ================== xe_ccs_migrate_kunit  ===================
[16:51:51] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[16:51:51] ==================== xe_bo_evict_kunit  ====================
[16:51:51] =============== [SKIPPED] xe_bo_evict_kunit ================
[16:51:51] ===================== [SKIPPED] xe_bo ======================
[16:51:51] ==================== args (13 subtests) ====================
[16:51:51] [PASSED] count_args_test
[16:51:51] [PASSED] call_args_example
[16:51:51] [PASSED] call_args_test
[16:51:51] [PASSED] drop_first_arg_example
[16:51:51] [PASSED] drop_first_arg_test
[16:51:51] [PASSED] first_arg_example
[16:51:51] [PASSED] first_arg_test
[16:51:51] [PASSED] last_arg_example
[16:51:51] [PASSED] last_arg_test
[16:51:51] [PASSED] pick_arg_example
[16:51:51] [PASSED] if_args_example
[16:51:51] [PASSED] if_args_test
[16:51:51] [PASSED] sep_comma_example
[16:51:51] ====================== [PASSED] args =======================
[16:51:51] =================== xe_pci (3 subtests) ====================
[16:51:51] ==================== check_graphics_ip  ====================
[16:51:51] [PASSED] 12.00 Xe_LP
[16:51:51] [PASSED] 12.10 Xe_LP+
[16:51:51] [PASSED] 12.55 Xe_HPG
[16:51:51] [PASSED] 12.60 Xe_HPC
[16:51:51] [PASSED] 12.70 Xe_LPG
[16:51:51] [PASSED] 12.71 Xe_LPG
[16:51:51] [PASSED] 12.74 Xe_LPG+
[16:51:51] [PASSED] 20.01 Xe2_HPG
[16:51:51] [PASSED] 20.02 Xe2_HPG
[16:51:51] [PASSED] 20.04 Xe2_LPG
[16:51:51] [PASSED] 30.00 Xe3_LPG
[16:51:51] [PASSED] 30.01 Xe3_LPG
[16:51:51] [PASSED] 30.03 Xe3_LPG
[16:51:51] [PASSED] 30.04 Xe3_LPG
[16:51:51] [PASSED] 30.05 Xe3_LPG
[16:51:51] [PASSED] 35.10 Xe3p_LPG
[16:51:51] [PASSED] 35.11 Xe3p_XPC
[16:51:51] ================ [PASSED] check_graphics_ip ================
[16:51:51] ===================== check_media_ip  ======================
[16:51:51] [PASSED] 12.00 Xe_M
[16:51:51] [PASSED] 12.55 Xe_HPM
[16:51:51] [PASSED] 13.00 Xe_LPM+
[16:51:51] [PASSED] 13.01 Xe2_HPM
[16:51:51] [PASSED] 20.00 Xe2_LPM
[16:51:51] [PASSED] 30.00 Xe3_LPM
[16:51:51] [PASSED] 30.02 Xe3_LPM
[16:51:51] [PASSED] 35.00 Xe3p_LPM
[16:51:51] [PASSED] 35.03 Xe3p_HPM
[16:51:51] ================= [PASSED] check_media_ip ==================
[16:51:51] =================== check_platform_desc  ===================
[16:51:51] [PASSED] 0x9A60 (TIGERLAKE)
[16:51:51] [PASSED] 0x9A68 (TIGERLAKE)
[16:51:51] [PASSED] 0x9A70 (TIGERLAKE)
[16:51:51] [PASSED] 0x9A40 (TIGERLAKE)
[16:51:51] [PASSED] 0x9A49 (TIGERLAKE)
[16:51:51] [PASSED] 0x9A59 (TIGERLAKE)
[16:51:51] [PASSED] 0x9A78 (TIGERLAKE)
[16:51:51] [PASSED] 0x9AC0 (TIGERLAKE)
[16:51:51] [PASSED] 0x9AC9 (TIGERLAKE)
[16:51:51] [PASSED] 0x9AD9 (TIGERLAKE)
[16:51:51] [PASSED] 0x9AF8 (TIGERLAKE)
[16:51:51] [PASSED] 0x4C80 (ROCKETLAKE)
[16:51:51] [PASSED] 0x4C8A (ROCKETLAKE)
[16:51:51] [PASSED] 0x4C8B (ROCKETLAKE)
[16:51:51] [PASSED] 0x4C8C (ROCKETLAKE)
[16:51:51] [PASSED] 0x4C90 (ROCKETLAKE)
[16:51:51] [PASSED] 0x4C9A (ROCKETLAKE)
[16:51:51] [PASSED] 0x4680 (ALDERLAKE_S)
[16:51:51] [PASSED] 0x4682 (ALDERLAKE_S)
[16:51:51] [PASSED] 0x4688 (ALDERLAKE_S)
[16:51:51] [PASSED] 0x468A (ALDERLAKE_S)
[16:51:51] [PASSED] 0x468B (ALDERLAKE_S)
[16:51:51] [PASSED] 0x4690 (ALDERLAKE_S)
[16:51:51] [PASSED] 0x4692 (ALDERLAKE_S)
[16:51:51] [PASSED] 0x4693 (ALDERLAKE_S)
[16:51:51] [PASSED] 0x46A0 (ALDERLAKE_P)
[16:51:51] [PASSED] 0x46A1 (ALDERLAKE_P)
[16:51:51] [PASSED] 0x46A2 (ALDERLAKE_P)
[16:51:51] [PASSED] 0x46A3 (ALDERLAKE_P)
[16:51:51] [PASSED] 0x46A6 (ALDERLAKE_P)
[16:51:51] [PASSED] 0x46A8 (ALDERLAKE_P)
[16:51:51] [PASSED] 0x46AA (ALDERLAKE_P)
[16:51:51] [PASSED] 0x462A (ALDERLAKE_P)
[16:51:51] [PASSED] 0x4626 (ALDERLAKE_P)
[16:51:51] [PASSED] 0x4628 (ALDERLAKE_P)
[16:51:51] [PASSED] 0x46B0 (ALDERLAKE_P)
[16:51:51] [PASSED] 0x46B1 (ALDERLAKE_P)
[16:51:51] [PASSED] 0x46B2 (ALDERLAKE_P)
[16:51:51] [PASSED] 0x46B3 (ALDERLAKE_P)
[16:51:51] [PASSED] 0x46C0 (ALDERLAKE_P)
[16:51:51] [PASSED] 0x46C1 (ALDERLAKE_P)
[16:51:51] [PASSED] 0x46C2 (ALDERLAKE_P)
[16:51:51] [PASSED] 0x46C3 (ALDERLAKE_P)
[16:51:51] [PASSED] 0x46D0 (ALDERLAKE_N)
[16:51:51] [PASSED] 0x46D1 (ALDERLAKE_N)
[16:51:51] [PASSED] 0x46D2 (ALDERLAKE_N)
[16:51:51] [PASSED] 0x46D3 (ALDERLAKE_N)
[16:51:51] [PASSED] 0x46D4 (ALDERLAKE_N)
[16:51:51] [PASSED] 0xA721 (ALDERLAKE_P)
[16:51:51] [PASSED] 0xA7A1 (ALDERLAKE_P)
[16:51:51] [PASSED] 0xA7A9 (ALDERLAKE_P)
[16:51:51] [PASSED] 0xA7AC (ALDERLAKE_P)
[16:51:51] [PASSED] 0xA7AD (ALDERLAKE_P)
[16:51:51] [PASSED] 0xA720 (ALDERLAKE_P)
[16:51:51] [PASSED] 0xA7A0 (ALDERLAKE_P)
[16:51:51] [PASSED] 0xA7A8 (ALDERLAKE_P)
[16:51:51] [PASSED] 0xA7AA (ALDERLAKE_P)
[16:51:51] [PASSED] 0xA7AB (ALDERLAKE_P)
[16:51:51] [PASSED] 0xA780 (ALDERLAKE_S)
[16:51:51] [PASSED] 0xA781 (ALDERLAKE_S)
[16:51:51] [PASSED] 0xA782 (ALDERLAKE_S)
[16:51:51] [PASSED] 0xA783 (ALDERLAKE_S)
[16:51:51] [PASSED] 0xA788 (ALDERLAKE_S)
[16:51:51] [PASSED] 0xA789 (ALDERLAKE_S)
[16:51:51] [PASSED] 0xA78A (ALDERLAKE_S)
[16:51:51] [PASSED] 0xA78B (ALDERLAKE_S)
[16:51:51] [PASSED] 0x4905 (DG1)
[16:51:51] [PASSED] 0x4906 (DG1)
[16:51:51] [PASSED] 0x4907 (DG1)
[16:51:51] [PASSED] 0x4908 (DG1)
[16:51:51] [PASSED] 0x4909 (DG1)
[16:51:51] [PASSED] 0x56C0 (DG2)
[16:51:51] [PASSED] 0x56C2 (DG2)
[16:51:51] [PASSED] 0x56C1 (DG2)
[16:51:51] [PASSED] 0x7D51 (METEORLAKE)
[16:51:51] [PASSED] 0x7DD1 (METEORLAKE)
[16:51:51] [PASSED] 0x7D41 (METEORLAKE)
[16:51:51] [PASSED] 0x7D67 (METEORLAKE)
[16:51:51] [PASSED] 0xB640 (METEORLAKE)
[16:51:51] [PASSED] 0x56A0 (DG2)
[16:51:51] [PASSED] 0x56A1 (DG2)
[16:51:51] [PASSED] 0x56A2 (DG2)
[16:51:51] [PASSED] 0x56BE (DG2)
[16:51:51] [PASSED] 0x56BF (DG2)
[16:51:51] [PASSED] 0x5690 (DG2)
[16:51:51] [PASSED] 0x5691 (DG2)
[16:51:51] [PASSED] 0x5692 (DG2)
[16:51:51] [PASSED] 0x56A5 (DG2)
[16:51:51] [PASSED] 0x56A6 (DG2)
[16:51:51] [PASSED] 0x56B0 (DG2)
[16:51:51] [PASSED] 0x56B1 (DG2)
[16:51:51] [PASSED] 0x56BA (DG2)
[16:51:51] [PASSED] 0x56BB (DG2)
[16:51:51] [PASSED] 0x56BC (DG2)
[16:51:51] [PASSED] 0x56BD (DG2)
[16:51:51] [PASSED] 0x5693 (DG2)
[16:51:51] [PASSED] 0x5694 (DG2)
[16:51:51] [PASSED] 0x5695 (DG2)
[16:51:51] [PASSED] 0x56A3 (DG2)
[16:51:51] [PASSED] 0x56A4 (DG2)
[16:51:51] [PASSED] 0x56B2 (DG2)
[16:51:51] [PASSED] 0x56B3 (DG2)
[16:51:51] [PASSED] 0x5696 (DG2)
[16:51:51] [PASSED] 0x5697 (DG2)
[16:51:51] [PASSED] 0xB69 (PVC)
[16:51:51] [PASSED] 0xB6E (PVC)
[16:51:51] [PASSED] 0xBD4 (PVC)
[16:51:51] [PASSED] 0xBD5 (PVC)
[16:51:51] [PASSED] 0xBD6 (PVC)
[16:51:51] [PASSED] 0xBD7 (PVC)
[16:51:51] [PASSED] 0xBD8 (PVC)
[16:51:51] [PASSED] 0xBD9 (PVC)
[16:51:51] [PASSED] 0xBDA (PVC)
[16:51:51] [PASSED] 0xBDB (PVC)
[16:51:51] [PASSED] 0xBE0 (PVC)
[16:51:51] [PASSED] 0xBE1 (PVC)
[16:51:51] [PASSED] 0xBE5 (PVC)
[16:51:51] [PASSED] 0x7D40 (METEORLAKE)
[16:51:51] [PASSED] 0x7D45 (METEORLAKE)
[16:51:51] [PASSED] 0x7D55 (METEORLAKE)
[16:51:51] [PASSED] 0x7D60 (METEORLAKE)
[16:51:51] [PASSED] 0x7DD5 (METEORLAKE)
[16:51:51] [PASSED] 0x6420 (LUNARLAKE)
[16:51:51] [PASSED] 0x64A0 (LUNARLAKE)
[16:51:51] [PASSED] 0x64B0 (LUNARLAKE)
[16:51:51] [PASSED] 0xE202 (BATTLEMAGE)
[16:51:51] [PASSED] 0xE209 (BATTLEMAGE)
[16:51:51] [PASSED] 0xE20B (BATTLEMAGE)
[16:51:51] [PASSED] 0xE20C (BATTLEMAGE)
[16:51:51] [PASSED] 0xE20D (BATTLEMAGE)
[16:51:51] [PASSED] 0xE210 (BATTLEMAGE)
[16:51:51] [PASSED] 0xE211 (BATTLEMAGE)
[16:51:51] [PASSED] 0xE212 (BATTLEMAGE)
[16:51:51] [PASSED] 0xE216 (BATTLEMAGE)
[16:51:51] [PASSED] 0xE220 (BATTLEMAGE)
[16:51:51] [PASSED] 0xE221 (BATTLEMAGE)
[16:51:51] [PASSED] 0xE222 (BATTLEMAGE)
[16:51:51] [PASSED] 0xE223 (BATTLEMAGE)
[16:51:51] [PASSED] 0xB080 (PANTHERLAKE)
[16:51:51] [PASSED] 0xB081 (PANTHERLAKE)
[16:51:51] [PASSED] 0xB082 (PANTHERLAKE)
[16:51:51] [PASSED] 0xB083 (PANTHERLAKE)
[16:51:51] [PASSED] 0xB084 (PANTHERLAKE)
[16:51:51] [PASSED] 0xB085 (PANTHERLAKE)
[16:51:51] [PASSED] 0xB086 (PANTHERLAKE)
[16:51:51] [PASSED] 0xB087 (PANTHERLAKE)
[16:51:51] [PASSED] 0xB08F (PANTHERLAKE)
[16:51:51] [PASSED] 0xB090 (PANTHERLAKE)
[16:51:51] [PASSED] 0xB0A0 (PANTHERLAKE)
[16:51:51] [PASSED] 0xB0B0 (PANTHERLAKE)
[16:51:51] [PASSED] 0xFD80 (PANTHERLAKE)
[16:51:51] [PASSED] 0xFD81 (PANTHERLAKE)
[16:51:51] [PASSED] 0xD740 (NOVALAKE_S)
[16:51:51] [PASSED] 0xD741 (NOVALAKE_S)
[16:51:51] [PASSED] 0xD742 (NOVALAKE_S)
[16:51:51] [PASSED] 0xD743 (NOVALAKE_S)
[16:51:51] [PASSED] 0xD744 (NOVALAKE_S)
[16:51:51] [PASSED] 0xD745 (NOVALAKE_S)
[16:51:51] [PASSED] 0x674C (CRESCENTISLAND)
[16:51:51] [PASSED] 0xD750 (NOVALAKE_P)
[16:51:51] [PASSED] 0xD751 (NOVALAKE_P)
[16:51:51] [PASSED] 0xD752 (NOVALAKE_P)
[16:51:51] [PASSED] 0xD753 (NOVALAKE_P)
[16:51:51] [PASSED] 0xD754 (NOVALAKE_P)
[16:51:51] [PASSED] 0xD755 (NOVALAKE_P)
[16:51:51] [PASSED] 0xD756 (NOVALAKE_P)
[16:51:51] [PASSED] 0xD757 (NOVALAKE_P)
[16:51:51] [PASSED] 0xD75F (NOVALAKE_P)
[16:51:51] =============== [PASSED] check_platform_desc ===============
[16:51:51] ===================== [PASSED] xe_pci ======================
[16:51:51] =================== xe_rtp (2 subtests) ====================
[16:51:51] =============== xe_rtp_process_to_sr_tests  ================
[16:51:51] [PASSED] coalesce-same-reg
[16:51:51] [PASSED] no-match-no-add
[16:51:51] [PASSED] match-or
[16:51:51] [PASSED] match-or-xfail
[16:51:51] [PASSED] no-match-no-add-multiple-rules
[16:51:51] [PASSED] two-regs-two-entries
[16:51:51] [PASSED] clr-one-set-other
[16:51:51] [PASSED] set-field
[16:51:51] [PASSED] conflict-duplicate
stty: 'standard input': Inappropriate ioctl for device
[16:51:51] [PASSED] conflict-not-disjoint
[16:51:51] [PASSED] conflict-reg-type
[16:51:51] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[16:51:51] ================== xe_rtp_process_tests  ===================
[16:51:51] [PASSED] active1
[16:51:51] [PASSED] active2
[16:51:51] [PASSED] active-inactive
[16:51:51] [PASSED] inactive-active
[16:51:51] [PASSED] inactive-1st_or_active-inactive
[16:51:51] [PASSED] inactive-2nd_or_active-inactive
[16:51:51] [PASSED] inactive-last_or_active-inactive
[16:51:51] [PASSED] inactive-no_or_active-inactive
[16:51:51] ============== [PASSED] xe_rtp_process_tests ===============
[16:51:51] ===================== [PASSED] xe_rtp ======================
[16:51:51] ==================== xe_wa (1 subtest) =====================
[16:51:51] ======================== xe_wa_gt  =========================
[16:51:51] [PASSED] TIGERLAKE B0
[16:51:51] [PASSED] DG1 A0
[16:51:51] [PASSED] DG1 B0
[16:51:51] [PASSED] ALDERLAKE_S A0
[16:51:51] [PASSED] ALDERLAKE_S B0
[16:51:51] [PASSED] ALDERLAKE_S C0
[16:51:51] [PASSED] ALDERLAKE_S D0
[16:51:51] [PASSED] ALDERLAKE_P A0
[16:51:51] [PASSED] ALDERLAKE_P B0
[16:51:51] [PASSED] ALDERLAKE_P C0
[16:51:51] [PASSED] ALDERLAKE_S RPLS D0
[16:51:51] [PASSED] ALDERLAKE_P RPLU E0
[16:51:51] [PASSED] DG2 G10 C0
[16:51:51] [PASSED] DG2 G11 B1
[16:51:51] [PASSED] DG2 G12 A1
[16:51:51] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[16:51:51] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[16:51:51] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[16:51:51] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[16:51:51] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[16:51:51] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[16:51:51] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[16:51:51] ==================== [PASSED] xe_wa_gt =====================
[16:51:51] ====================== [PASSED] xe_wa ======================
[16:51:51] ============================================================
[16:51:51] Testing complete. Ran 597 tests: passed: 579, skipped: 18
[16:51:51] Elapsed time: 35.430s total, 4.241s configuring, 30.572s building, 0.604s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[16:51:51] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[16:51:53] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[16:52:17] Starting KUnit Kernel (1/1)...
[16:52:17] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[16:52:17] ============ drm_test_pick_cmdline (2 subtests) ============
[16:52:17] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[16:52:17] =============== drm_test_pick_cmdline_named  ===============
[16:52:17] [PASSED] NTSC
[16:52:17] [PASSED] NTSC-J
[16:52:17] [PASSED] PAL
[16:52:17] [PASSED] PAL-M
[16:52:17] =========== [PASSED] drm_test_pick_cmdline_named ===========
[16:52:17] ============== [PASSED] drm_test_pick_cmdline ==============
[16:52:17] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[16:52:17] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[16:52:17] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[16:52:17] =========== drm_validate_clone_mode (2 subtests) ===========
[16:52:17] ============== drm_test_check_in_clone_mode  ===============
[16:52:17] [PASSED] in_clone_mode
[16:52:17] [PASSED] not_in_clone_mode
[16:52:17] ========== [PASSED] drm_test_check_in_clone_mode ===========
[16:52:17] =============== drm_test_check_valid_clones  ===============
[16:52:17] [PASSED] not_in_clone_mode
[16:52:17] [PASSED] valid_clone
[16:52:17] [PASSED] invalid_clone
[16:52:17] =========== [PASSED] drm_test_check_valid_clones ===========
[16:52:17] ============= [PASSED] drm_validate_clone_mode =============
[16:52:17] ============= drm_validate_modeset (1 subtest) =============
[16:52:17] [PASSED] drm_test_check_connector_changed_modeset
[16:52:17] ============== [PASSED] drm_validate_modeset ===============
[16:52:17] ====== drm_test_bridge_get_current_state (2 subtests) ======
[16:52:17] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[16:52:17] [PASSED] drm_test_drm_bridge_get_current_state_legacy
[16:52:17] ======== [PASSED] drm_test_bridge_get_current_state ========
[16:52:17] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[16:52:17] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[16:52:17] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[16:52:17] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy
[16:52:17] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[16:52:17] ============== drm_bridge_alloc (2 subtests) ===============
[16:52:17] [PASSED] drm_test_drm_bridge_alloc_basic
[16:52:17] [PASSED] drm_test_drm_bridge_alloc_get_put
[16:52:17] ================ [PASSED] drm_bridge_alloc =================
[16:52:17] ============= drm_cmdline_parser (40 subtests) =============
[16:52:17] [PASSED] drm_test_cmdline_force_d_only
[16:52:17] [PASSED] drm_test_cmdline_force_D_only_dvi
[16:52:17] [PASSED] drm_test_cmdline_force_D_only_hdmi
[16:52:17] [PASSED] drm_test_cmdline_force_D_only_not_digital
[16:52:17] [PASSED] drm_test_cmdline_force_e_only
[16:52:17] [PASSED] drm_test_cmdline_res
[16:52:17] [PASSED] drm_test_cmdline_res_vesa
[16:52:17] [PASSED] drm_test_cmdline_res_vesa_rblank
[16:52:17] [PASSED] drm_test_cmdline_res_rblank
[16:52:17] [PASSED] drm_test_cmdline_res_bpp
[16:52:17] [PASSED] drm_test_cmdline_res_refresh
[16:52:17] [PASSED] drm_test_cmdline_res_bpp_refresh
[16:52:17] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[16:52:17] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[16:52:17] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[16:52:17] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[16:52:17] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[16:52:17] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[16:52:17] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[16:52:17] [PASSED] drm_test_cmdline_res_margins_force_on
[16:52:17] [PASSED] drm_test_cmdline_res_vesa_margins
[16:52:17] [PASSED] drm_test_cmdline_name
[16:52:17] [PASSED] drm_test_cmdline_name_bpp
[16:52:17] [PASSED] drm_test_cmdline_name_option
[16:52:17] [PASSED] drm_test_cmdline_name_bpp_option
[16:52:17] [PASSED] drm_test_cmdline_rotate_0
[16:52:17] [PASSED] drm_test_cmdline_rotate_90
[16:52:17] [PASSED] drm_test_cmdline_rotate_180
[16:52:17] [PASSED] drm_test_cmdline_rotate_270
[16:52:17] [PASSED] drm_test_cmdline_hmirror
[16:52:17] [PASSED] drm_test_cmdline_vmirror
[16:52:17] [PASSED] drm_test_cmdline_margin_options
[16:52:17] [PASSED] drm_test_cmdline_multiple_options
[16:52:17] [PASSED] drm_test_cmdline_bpp_extra_and_option
[16:52:17] [PASSED] drm_test_cmdline_extra_and_option
[16:52:17] [PASSED] drm_test_cmdline_freestanding_options
[16:52:17] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[16:52:17] [PASSED] drm_test_cmdline_panel_orientation
[16:52:17] ================ drm_test_cmdline_invalid  =================
[16:52:17] [PASSED] margin_only
[16:52:17] [PASSED] interlace_only
[16:52:17] [PASSED] res_missing_x
[16:52:17] [PASSED] res_missing_y
[16:52:17] [PASSED] res_bad_y
[16:52:17] [PASSED] res_missing_y_bpp
[16:52:17] [PASSED] res_bad_bpp
[16:52:17] [PASSED] res_bad_refresh
[16:52:17] [PASSED] res_bpp_refresh_force_on_off
[16:52:17] [PASSED] res_invalid_mode
[16:52:17] [PASSED] res_bpp_wrong_place_mode
[16:52:17] [PASSED] name_bpp_refresh
[16:52:17] [PASSED] name_refresh
[16:52:17] [PASSED] name_refresh_wrong_mode
[16:52:17] [PASSED] name_refresh_invalid_mode
[16:52:17] [PASSED] rotate_multiple
[16:52:17] [PASSED] rotate_invalid_val
[16:52:17] [PASSED] rotate_truncated
[16:52:17] [PASSED] invalid_option
[16:52:17] [PASSED] invalid_tv_option
[16:52:17] [PASSED] truncated_tv_option
[16:52:17] ============ [PASSED] drm_test_cmdline_invalid =============
[16:52:17] =============== drm_test_cmdline_tv_options  ===============
[16:52:17] [PASSED] NTSC
[16:52:17] [PASSED] NTSC_443
[16:52:17] [PASSED] NTSC_J
[16:52:17] [PASSED] PAL
[16:52:17] [PASSED] PAL_M
[16:52:17] [PASSED] PAL_N
[16:52:17] [PASSED] SECAM
[16:52:17] [PASSED] MONO_525
[16:52:17] [PASSED] MONO_625
[16:52:17] =========== [PASSED] drm_test_cmdline_tv_options ===========
[16:52:17] =============== [PASSED] drm_cmdline_parser ================
[16:52:17] ========== drmm_connector_hdmi_init (20 subtests) ==========
[16:52:17] [PASSED] drm_test_connector_hdmi_init_valid
[16:52:17] [PASSED] drm_test_connector_hdmi_init_bpc_8
[16:52:17] [PASSED] drm_test_connector_hdmi_init_bpc_10
[16:52:17] [PASSED] drm_test_connector_hdmi_init_bpc_12
[16:52:17] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[16:52:17] [PASSED] drm_test_connector_hdmi_init_bpc_null
[16:52:17] [PASSED] drm_test_connector_hdmi_init_formats_empty
[16:52:17] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[16:52:17] === drm_test_connector_hdmi_init_formats_yuv420_allowed  ===
[16:52:17] [PASSED] supported_formats=0x9 yuv420_allowed=1
[16:52:17] [PASSED] supported_formats=0x9 yuv420_allowed=0
[16:52:17] [PASSED] supported_formats=0x3 yuv420_allowed=1
[16:52:17] [PASSED] supported_formats=0x3 yuv420_allowed=0
[16:52:17] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[16:52:17] [PASSED] drm_test_connector_hdmi_init_null_ddc
[16:52:17] [PASSED] drm_test_connector_hdmi_init_null_product
[16:52:17] [PASSED] drm_test_connector_hdmi_init_null_vendor
[16:52:17] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[16:52:17] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[16:52:17] [PASSED] drm_test_connector_hdmi_init_product_valid
[16:52:17] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[16:52:17] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[16:52:17] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[16:52:17] ========= drm_test_connector_hdmi_init_type_valid  =========
[16:52:17] [PASSED] HDMI-A
[16:52:17] [PASSED] HDMI-B
[16:52:17] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[16:52:17] ======== drm_test_connector_hdmi_init_type_invalid  ========
[16:52:17] [PASSED] Unknown
[16:52:17] [PASSED] VGA
[16:52:17] [PASSED] DVI-I
[16:52:17] [PASSED] DVI-D
[16:52:17] [PASSED] DVI-A
[16:52:17] [PASSED] Composite
[16:52:17] [PASSED] SVIDEO
[16:52:17] [PASSED] LVDS
[16:52:17] [PASSED] Component
[16:52:17] [PASSED] DIN
[16:52:17] [PASSED] DP
[16:52:17] [PASSED] TV
[16:52:17] [PASSED] eDP
[16:52:17] [PASSED] Virtual
[16:52:17] [PASSED] DSI
[16:52:17] [PASSED] DPI
[16:52:17] [PASSED] Writeback
[16:52:17] [PASSED] SPI
[16:52:17] [PASSED] USB
[16:52:17] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[16:52:17] ============ [PASSED] drmm_connector_hdmi_init =============
[16:52:17] ============= drmm_connector_init (3 subtests) =============
[16:52:17] [PASSED] drm_test_drmm_connector_init
[16:52:17] [PASSED] drm_test_drmm_connector_init_null_ddc
[16:52:17] ========= drm_test_drmm_connector_init_type_valid  =========
[16:52:17] [PASSED] Unknown
[16:52:17] [PASSED] VGA
[16:52:17] [PASSED] DVI-I
[16:52:17] [PASSED] DVI-D
[16:52:17] [PASSED] DVI-A
[16:52:17] [PASSED] Composite
[16:52:17] [PASSED] SVIDEO
[16:52:17] [PASSED] LVDS
[16:52:17] [PASSED] Component
[16:52:17] [PASSED] DIN
[16:52:17] [PASSED] DP
[16:52:17] [PASSED] HDMI-A
[16:52:17] [PASSED] HDMI-B
[16:52:17] [PASSED] TV
[16:52:17] [PASSED] eDP
[16:52:17] [PASSED] Virtual
[16:52:17] [PASSED] DSI
[16:52:17] [PASSED] DPI
[16:52:17] [PASSED] Writeback
[16:52:17] [PASSED] SPI
[16:52:17] [PASSED] USB
[16:52:17] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[16:52:17] =============== [PASSED] drmm_connector_init ===============
[16:52:17] ========= drm_connector_dynamic_init (6 subtests) ==========
[16:52:17] [PASSED] drm_test_drm_connector_dynamic_init
[16:52:17] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[16:52:17] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[16:52:17] [PASSED] drm_test_drm_connector_dynamic_init_properties
[16:52:17] ===== drm_test_drm_connector_dynamic_init_type_valid  ======
[16:52:17] [PASSED] Unknown
[16:52:17] [PASSED] VGA
[16:52:17] [PASSED] DVI-I
[16:52:17] [PASSED] DVI-D
[16:52:17] [PASSED] DVI-A
[16:52:17] [PASSED] Composite
[16:52:17] [PASSED] SVIDEO
[16:52:17] [PASSED] LVDS
[16:52:17] [PASSED] Component
[16:52:17] [PASSED] DIN
[16:52:17] [PASSED] DP
[16:52:17] [PASSED] HDMI-A
[16:52:17] [PASSED] HDMI-B
[16:52:17] [PASSED] TV
[16:52:17] [PASSED] eDP
[16:52:17] [PASSED] Virtual
[16:52:17] [PASSED] DSI
[16:52:17] [PASSED] DPI
[16:52:17] [PASSED] Writeback
[16:52:17] [PASSED] SPI
[16:52:17] [PASSED] USB
[16:52:17] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[16:52:17] ======== drm_test_drm_connector_dynamic_init_name  =========
[16:52:17] [PASSED] Unknown
[16:52:17] [PASSED] VGA
[16:52:17] [PASSED] DVI-I
[16:52:17] [PASSED] DVI-D
[16:52:17] [PASSED] DVI-A
[16:52:17] [PASSED] Composite
[16:52:17] [PASSED] SVIDEO
[16:52:17] [PASSED] LVDS
[16:52:17] [PASSED] Component
[16:52:17] [PASSED] DIN
[16:52:17] [PASSED] DP
[16:52:17] [PASSED] HDMI-A
[16:52:17] [PASSED] HDMI-B
[16:52:17] [PASSED] TV
[16:52:17] [PASSED] eDP
[16:52:17] [PASSED] Virtual
[16:52:17] [PASSED] DSI
[16:52:17] [PASSED] DPI
[16:52:17] [PASSED] Writeback
[16:52:17] [PASSED] SPI
[16:52:17] [PASSED] USB
[16:52:17] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[16:52:17] =========== [PASSED] drm_connector_dynamic_init ============
[16:52:17] ==== drm_connector_dynamic_register_early (4 subtests) =====
[16:52:17] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[16:52:17] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[16:52:17] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[16:52:17] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[16:52:17] ====== [PASSED] drm_connector_dynamic_register_early =======
[16:52:17] ======= drm_connector_dynamic_register (7 subtests) ========
[16:52:17] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[16:52:17] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[16:52:17] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[16:52:17] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[16:52:17] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[16:52:17] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[16:52:17] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[16:52:17] ========= [PASSED] drm_connector_dynamic_register ==========
[16:52:17] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[16:52:17] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[16:52:17] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[16:52:17] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[16:52:17] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[16:52:17] ========== drm_test_get_tv_mode_from_name_valid  ===========
[16:52:17] [PASSED] NTSC
[16:52:17] [PASSED] NTSC-443
[16:52:17] [PASSED] NTSC-J
[16:52:17] [PASSED] PAL
[16:52:17] [PASSED] PAL-M
[16:52:17] [PASSED] PAL-N
[16:52:17] [PASSED] SECAM
[16:52:17] [PASSED] Mono
[16:52:17] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[16:52:17] [PASSED] drm_test_get_tv_mode_from_name_truncated
[16:52:17] ============ [PASSED] drm_get_tv_mode_from_name ============
[16:52:17] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[16:52:17] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[16:52:17] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[16:52:17] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[16:52:17] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[16:52:17] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[16:52:17] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[16:52:17] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid  =
[16:52:17] [PASSED] VIC 96
[16:52:17] [PASSED] VIC 97
[16:52:17] [PASSED] VIC 101
[16:52:17] [PASSED] VIC 102
[16:52:17] [PASSED] VIC 106
[16:52:17] [PASSED] VIC 107
[16:52:17] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[16:52:17] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[16:52:17] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[16:52:17] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[16:52:17] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[16:52:17] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[16:52:17] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[16:52:17] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[16:52:17] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name  ====
[16:52:17] [PASSED] Automatic
[16:52:17] [PASSED] Full
[16:52:17] [PASSED] Limited 16:235
[16:52:17] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[16:52:17] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[16:52:17] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[16:52:17] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[16:52:17] === drm_test_drm_hdmi_connector_get_output_format_name  ====
[16:52:17] [PASSED] RGB
[16:52:17] [PASSED] YUV 4:2:0
[16:52:17] [PASSED] YUV 4:2:2
[16:52:17] [PASSED] YUV 4:4:4
[16:52:17] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[16:52:17] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[16:52:17] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[16:52:17] ============= drm_damage_helper (21 subtests) ==============
[16:52:17] [PASSED] drm_test_damage_iter_no_damage
[16:52:17] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[16:52:17] [PASSED] drm_test_damage_iter_no_damage_src_moved
[16:52:17] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[16:52:17] [PASSED] drm_test_damage_iter_no_damage_not_visible
[16:52:17] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[16:52:17] [PASSED] drm_test_damage_iter_no_damage_no_fb
[16:52:17] [PASSED] drm_test_damage_iter_simple_damage
[16:52:17] [PASSED] drm_test_damage_iter_single_damage
[16:52:17] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[16:52:17] [PASSED] drm_test_damage_iter_single_damage_outside_src
[16:52:17] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[16:52:17] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[16:52:17] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[16:52:17] [PASSED] drm_test_damage_iter_single_damage_src_moved
[16:52:17] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[16:52:17] [PASSED] drm_test_damage_iter_damage
[16:52:17] [PASSED] drm_test_damage_iter_damage_one_intersect
[16:52:17] [PASSED] drm_test_damage_iter_damage_one_outside
[16:52:17] [PASSED] drm_test_damage_iter_damage_src_moved
[16:52:17] [PASSED] drm_test_damage_iter_damage_not_visible
[16:52:17] ================ [PASSED] drm_damage_helper ================
[16:52:17] ============== drm_dp_mst_helper (3 subtests) ==============
[16:52:17] ============== drm_test_dp_mst_calc_pbn_mode  ==============
[16:52:17] [PASSED] Clock 154000 BPP 30 DSC disabled
[16:52:17] [PASSED] Clock 234000 BPP 30 DSC disabled
[16:52:17] [PASSED] Clock 297000 BPP 24 DSC disabled
[16:52:17] [PASSED] Clock 332880 BPP 24 DSC enabled
[16:52:17] [PASSED] Clock 324540 BPP 24 DSC enabled
[16:52:17] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[16:52:17] ============== drm_test_dp_mst_calc_pbn_div  ===============
[16:52:17] [PASSED] Link rate 2000000 lane count 4
[16:52:17] [PASSED] Link rate 2000000 lane count 2
[16:52:17] [PASSED] Link rate 2000000 lane count 1
[16:52:17] [PASSED] Link rate 1350000 lane count 4
[16:52:17] [PASSED] Link rate 1350000 lane count 2
[16:52:17] [PASSED] Link rate 1350000 lane count 1
[16:52:17] [PASSED] Link rate 1000000 lane count 4
[16:52:17] [PASSED] Link rate 1000000 lane count 2
[16:52:17] [PASSED] Link rate 1000000 lane count 1
[16:52:17] [PASSED] Link rate 810000 lane count 4
[16:52:17] [PASSED] Link rate 810000 lane count 2
[16:52:17] [PASSED] Link rate 810000 lane count 1
[16:52:17] [PASSED] Link rate 540000 lane count 4
[16:52:17] [PASSED] Link rate 540000 lane count 2
[16:52:17] [PASSED] Link rate 540000 lane count 1
[16:52:17] [PASSED] Link rate 270000 lane count 4
[16:52:17] [PASSED] Link rate 270000 lane count 2
[16:52:17] [PASSED] Link rate 270000 lane count 1
[16:52:17] [PASSED] Link rate 162000 lane count 4
[16:52:17] [PASSED] Link rate 162000 lane count 2
[16:52:17] [PASSED] Link rate 162000 lane count 1
[16:52:17] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[16:52:17] ========= drm_test_dp_mst_sideband_msg_req_decode  =========
[16:52:17] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[16:52:17] [PASSED] DP_POWER_UP_PHY with port number
[16:52:17] [PASSED] DP_POWER_DOWN_PHY with port number
[16:52:17] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[16:52:17] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[16:52:17] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[16:52:17] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[16:52:17] [PASSED] DP_QUERY_PAYLOAD with port number
[16:52:17] [PASSED] DP_QUERY_PAYLOAD with VCPI
[16:52:17] [PASSED] DP_REMOTE_DPCD_READ with port number
[16:52:17] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[16:52:17] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[16:52:17] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[16:52:17] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[16:52:17] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[16:52:17] [PASSED] DP_REMOTE_I2C_READ with port number
[16:52:17] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[16:52:17] [PASSED] DP_REMOTE_I2C_READ with transactions array
[16:52:17] [PASSED] DP_REMOTE_I2C_WRITE with port number
[16:52:17] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[16:52:17] [PASSED] DP_REMOTE_I2C_WRITE with data array
[16:52:17] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[16:52:17] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[16:52:17] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[16:52:17] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[16:52:17] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[16:52:17] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[16:52:17] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[16:52:17] ================ [PASSED] drm_dp_mst_helper ================
[16:52:17] ================== drm_exec (7 subtests) ===================
[16:52:17] [PASSED] sanitycheck
[16:52:17] [PASSED] test_lock
[16:52:17] [PASSED] test_lock_unlock
[16:52:17] [PASSED] test_duplicates
[16:52:17] [PASSED] test_prepare
[16:52:17] [PASSED] test_prepare_array
[16:52:17] [PASSED] test_multiple_loops
[16:52:17] ==================== [PASSED] drm_exec =====================
[16:52:17] =========== drm_format_helper_test (17 subtests) ===========
[16:52:17] ============== drm_test_fb_xrgb8888_to_gray8  ==============
[16:52:17] [PASSED] single_pixel_source_buffer
[16:52:17] [PASSED] single_pixel_clip_rectangle
[16:52:17] [PASSED] well_known_colors
[16:52:17] [PASSED] destination_pitch
[16:52:17] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[16:52:17] ============= drm_test_fb_xrgb8888_to_rgb332  ==============
[16:52:17] [PASSED] single_pixel_source_buffer
[16:52:17] [PASSED] single_pixel_clip_rectangle
[16:52:17] [PASSED] well_known_colors
[16:52:17] [PASSED] destination_pitch
[16:52:17] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[16:52:17] ============= drm_test_fb_xrgb8888_to_rgb565  ==============
[16:52:17] [PASSED] single_pixel_source_buffer
[16:52:17] [PASSED] single_pixel_clip_rectangle
[16:52:17] [PASSED] well_known_colors
[16:52:17] [PASSED] destination_pitch
[16:52:17] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[16:52:17] ============ drm_test_fb_xrgb8888_to_xrgb1555  =============
[16:52:17] [PASSED] single_pixel_source_buffer
[16:52:17] [PASSED] single_pixel_clip_rectangle
[16:52:17] [PASSED] well_known_colors
[16:52:17] [PASSED] destination_pitch
[16:52:17] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[16:52:17] ============ drm_test_fb_xrgb8888_to_argb1555  =============
[16:52:17] [PASSED] single_pixel_source_buffer
[16:52:17] [PASSED] single_pixel_clip_rectangle
[16:52:17] [PASSED] well_known_colors
[16:52:17] [PASSED] destination_pitch
[16:52:17] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[16:52:17] ============ drm_test_fb_xrgb8888_to_rgba5551  =============
[16:52:17] [PASSED] single_pixel_source_buffer
[16:52:17] [PASSED] single_pixel_clip_rectangle
[16:52:17] [PASSED] well_known_colors
[16:52:17] [PASSED] destination_pitch
[16:52:17] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[16:52:17] ============= drm_test_fb_xrgb8888_to_rgb888  ==============
[16:52:17] [PASSED] single_pixel_source_buffer
[16:52:17] [PASSED] single_pixel_clip_rectangle
[16:52:17] [PASSED] well_known_colors
[16:52:17] [PASSED] destination_pitch
[16:52:17] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[16:52:17] ============= drm_test_fb_xrgb8888_to_bgr888  ==============
[16:52:17] [PASSED] single_pixel_source_buffer
[16:52:17] [PASSED] single_pixel_clip_rectangle
[16:52:17] [PASSED] well_known_colors
[16:52:17] [PASSED] destination_pitch
[16:52:17] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[16:52:17] ============ drm_test_fb_xrgb8888_to_argb8888  =============
[16:52:17] [PASSED] single_pixel_source_buffer
[16:52:17] [PASSED] single_pixel_clip_rectangle
[16:52:17] [PASSED] well_known_colors
[16:52:17] [PASSED] destination_pitch
[16:52:17] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[16:52:17] =========== drm_test_fb_xrgb8888_to_xrgb2101010  ===========
[16:52:17] [PASSED] single_pixel_source_buffer
[16:52:17] [PASSED] single_pixel_clip_rectangle
[16:52:17] [PASSED] well_known_colors
[16:52:17] [PASSED] destination_pitch
[16:52:17] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[16:52:17] =========== drm_test_fb_xrgb8888_to_argb2101010  ===========
[16:52:17] [PASSED] single_pixel_source_buffer
[16:52:17] [PASSED] single_pixel_clip_rectangle
[16:52:17] [PASSED] well_known_colors
[16:52:17] [PASSED] destination_pitch
[16:52:17] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[16:52:17] ============== drm_test_fb_xrgb8888_to_mono  ===============
[16:52:17] [PASSED] single_pixel_source_buffer
[16:52:17] [PASSED] single_pixel_clip_rectangle
[16:52:17] [PASSED] well_known_colors
[16:52:17] [PASSED] destination_pitch
[16:52:17] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[16:52:17] ==================== drm_test_fb_swab  =====================
[16:52:17] [PASSED] single_pixel_source_buffer
[16:52:17] [PASSED] single_pixel_clip_rectangle
[16:52:17] [PASSED] well_known_colors
[16:52:17] [PASSED] destination_pitch
[16:52:17] ================ [PASSED] drm_test_fb_swab =================
[16:52:17] ============ drm_test_fb_xrgb8888_to_xbgr8888  =============
[16:52:17] [PASSED] single_pixel_source_buffer
[16:52:17] [PASSED] single_pixel_clip_rectangle
[16:52:17] [PASSED] well_known_colors
[16:52:17] [PASSED] destination_pitch
[16:52:17] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[16:52:17] ============ drm_test_fb_xrgb8888_to_abgr8888  =============
[16:52:17] [PASSED] single_pixel_source_buffer
[16:52:17] [PASSED] single_pixel_clip_rectangle
[16:52:17] [PASSED] well_known_colors
[16:52:17] [PASSED] destination_pitch
[16:52:17] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[16:52:17] ================= drm_test_fb_clip_offset  =================
[16:52:17] [PASSED] pass through
[16:52:17] [PASSED] horizontal offset
[16:52:17] [PASSED] vertical offset
[16:52:17] [PASSED] horizontal and vertical offset
[16:52:17] [PASSED] horizontal offset (custom pitch)
[16:52:17] [PASSED] vertical offset (custom pitch)
[16:52:17] [PASSED] horizontal and vertical offset (custom pitch)
[16:52:17] ============= [PASSED] drm_test_fb_clip_offset =============
[16:52:17] =================== drm_test_fb_memcpy  ====================
[16:52:17] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[16:52:17] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[16:52:17] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[16:52:17] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[16:52:17] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[16:52:17] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[16:52:17] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[16:52:17] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[16:52:17] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[16:52:17] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[16:52:17] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[16:52:17] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[16:52:17] =============== [PASSED] drm_test_fb_memcpy ================
[16:52:17] ============= [PASSED] drm_format_helper_test ==============
[16:52:17] ================= drm_format (18 subtests) =================
[16:52:17] [PASSED] drm_test_format_block_width_invalid
[16:52:17] [PASSED] drm_test_format_block_width_one_plane
[16:52:17] [PASSED] drm_test_format_block_width_two_plane
[16:52:17] [PASSED] drm_test_format_block_width_three_plane
[16:52:17] [PASSED] drm_test_format_block_width_tiled
[16:52:17] [PASSED] drm_test_format_block_height_invalid
[16:52:17] [PASSED] drm_test_format_block_height_one_plane
[16:52:17] [PASSED] drm_test_format_block_height_two_plane
[16:52:17] [PASSED] drm_test_format_block_height_three_plane
[16:52:17] [PASSED] drm_test_format_block_height_tiled
[16:52:17] [PASSED] drm_test_format_min_pitch_invalid
[16:52:17] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[16:52:17] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[16:52:17] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[16:52:17] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[16:52:17] [PASSED] drm_test_format_min_pitch_two_plane
[16:52:17] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[16:52:17] [PASSED] drm_test_format_min_pitch_tiled
[16:52:17] =================== [PASSED] drm_format ====================
[16:52:17] ============== drm_framebuffer (10 subtests) ===============
[16:52:17] ========== drm_test_framebuffer_check_src_coords  ==========
[16:52:17] [PASSED] Success: source fits into fb
[16:52:17] [PASSED] Fail: overflowing fb with x-axis coordinate
[16:52:17] [PASSED] Fail: overflowing fb with y-axis coordinate
[16:52:17] [PASSED] Fail: overflowing fb with source width
[16:52:17] [PASSED] Fail: overflowing fb with source height
[16:52:17] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[16:52:17] [PASSED] drm_test_framebuffer_cleanup
[16:52:17] =============== drm_test_framebuffer_create  ===============
[16:52:17] [PASSED] ABGR8888 normal sizes
[16:52:17] [PASSED] ABGR8888 max sizes
[16:52:17] [PASSED] ABGR8888 pitch greater than min required
[16:52:17] [PASSED] ABGR8888 pitch less than min required
[16:52:17] [PASSED] ABGR8888 Invalid width
[16:52:17] [PASSED] ABGR8888 Invalid buffer handle
[16:52:17] [PASSED] No pixel format
[16:52:17] [PASSED] ABGR8888 Width 0
[16:52:17] [PASSED] ABGR8888 Height 0
[16:52:17] [PASSED] ABGR8888 Out of bound height * pitch combination
[16:52:17] [PASSED] ABGR8888 Large buffer offset
[16:52:17] [PASSED] ABGR8888 Buffer offset for inexistent plane
[16:52:17] [PASSED] ABGR8888 Invalid flag
[16:52:17] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[16:52:17] [PASSED] ABGR8888 Valid buffer modifier
[16:52:17] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[16:52:17] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[16:52:17] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[16:52:17] [PASSED] NV12 Normal sizes
[16:52:17] [PASSED] NV12 Max sizes
[16:52:17] [PASSED] NV12 Invalid pitch
[16:52:17] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[16:52:17] [PASSED] NV12 different  modifier per-plane
[16:52:17] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[16:52:17] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[16:52:17] [PASSED] NV12 Modifier for inexistent plane
[16:52:17] [PASSED] NV12 Handle for inexistent plane
[16:52:17] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[16:52:17] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[16:52:17] [PASSED] YVU420 Normal sizes
[16:52:17] [PASSED] YVU420 Max sizes
[16:52:17] [PASSED] YVU420 Invalid pitch
[16:52:17] [PASSED] YVU420 Different pitches
[16:52:17] [PASSED] YVU420 Different buffer offsets/pitches
[16:52:17] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[16:52:17] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[16:52:17] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[16:52:17] [PASSED] YVU420 Valid modifier
[16:52:17] [PASSED] YVU420 Different modifiers per plane
[16:52:17] [PASSED] YVU420 Modifier for inexistent plane
[16:52:17] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[16:52:17] [PASSED] X0L2 Normal sizes
[16:52:17] [PASSED] X0L2 Max sizes
[16:52:17] [PASSED] X0L2 Invalid pitch
[16:52:17] [PASSED] X0L2 Pitch greater than minimum required
[16:52:17] [PASSED] X0L2 Handle for inexistent plane
[16:52:17] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[16:52:17] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[16:52:17] [PASSED] X0L2 Valid modifier
[16:52:17] [PASSED] X0L2 Modifier for inexistent plane
[16:52:17] =========== [PASSED] drm_test_framebuffer_create ===========
[16:52:17] [PASSED] drm_test_framebuffer_free
[16:52:17] [PASSED] drm_test_framebuffer_init
[16:52:17] [PASSED] drm_test_framebuffer_init_bad_format
[16:52:17] [PASSED] drm_test_framebuffer_init_dev_mismatch
[16:52:17] [PASSED] drm_test_framebuffer_lookup
[16:52:17] [PASSED] drm_test_framebuffer_lookup_inexistent
[16:52:17] [PASSED] drm_test_framebuffer_modifiers_not_supported
[16:52:17] ================= [PASSED] drm_framebuffer =================
[16:52:17] ================ drm_gem_shmem (8 subtests) ================
[16:52:17] [PASSED] drm_gem_shmem_test_obj_create
[16:52:17] [PASSED] drm_gem_shmem_test_obj_create_private
[16:52:17] [PASSED] drm_gem_shmem_test_pin_pages
[16:52:17] [PASSED] drm_gem_shmem_test_vmap
[16:52:17] [PASSED] drm_gem_shmem_test_get_sg_table
[16:52:17] [PASSED] drm_gem_shmem_test_get_pages_sgt
[16:52:17] [PASSED] drm_gem_shmem_test_madvise
[16:52:17] [PASSED] drm_gem_shmem_test_purge
[16:52:17] ================== [PASSED] drm_gem_shmem ==================
[16:52:17] === drm_atomic_helper_connector_hdmi_check (27 subtests) ===
[16:52:17] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[16:52:17] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[16:52:17] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[16:52:17] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[16:52:17] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[16:52:17] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[16:52:17] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420  =======
[16:52:17] [PASSED] Automatic
[16:52:17] [PASSED] Full
[16:52:17] [PASSED] Limited 16:235
[16:52:17] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[16:52:17] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[16:52:17] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[16:52:17] [PASSED] drm_test_check_disable_connector
[16:52:17] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[16:52:17] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[16:52:17] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[16:52:17] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[16:52:17] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[16:52:17] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[16:52:17] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[16:52:17] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[16:52:17] [PASSED] drm_test_check_output_bpc_dvi
[16:52:17] [PASSED] drm_test_check_output_bpc_format_vic_1
[16:52:17] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[16:52:17] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[16:52:17] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[16:52:17] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[16:52:17] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[16:52:17] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[16:52:17] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[16:52:17] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[16:52:17] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[16:52:17] [PASSED] drm_test_check_broadcast_rgb_value
[16:52:17] [PASSED] drm_test_check_bpc_8_value
[16:52:17] [PASSED] drm_test_check_bpc_10_value
[16:52:17] [PASSED] drm_test_check_bpc_12_value
[16:52:17] [PASSED] drm_test_check_format_value
[16:52:17] [PASSED] drm_test_check_tmds_char_value
[16:52:17] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[16:52:17] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) =
[16:52:17] [PASSED] drm_test_check_mode_valid
[16:52:17] [PASSED] drm_test_check_mode_valid_reject
[16:52:17] [PASSED] drm_test_check_mode_valid_reject_rate
[16:52:17] [PASSED] drm_test_check_mode_valid_reject_max_clock
[16:52:17] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[16:52:17] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[16:52:17] [PASSED] drm_test_check_infoframes
[16:52:17] [PASSED] drm_test_check_reject_avi_infoframe
[16:52:17] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[16:52:17] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[16:52:17] [PASSED] drm_test_check_reject_audio_infoframe
[16:52:17] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[16:52:17] ================= drm_managed (2 subtests) =================
[16:52:17] [PASSED] drm_test_managed_release_action
[16:52:17] [PASSED] drm_test_managed_run_action
[16:52:17] =================== [PASSED] drm_managed ===================
[16:52:17] =================== drm_mm (6 subtests) ====================
[16:52:17] [PASSED] drm_test_mm_init
[16:52:17] [PASSED] drm_test_mm_debug
[16:52:17] [PASSED] drm_test_mm_align32
[16:52:17] [PASSED] drm_test_mm_align64
[16:52:17] [PASSED] drm_test_mm_lowest
[16:52:17] [PASSED] drm_test_mm_highest
[16:52:17] ===================== [PASSED] drm_mm ======================
[16:52:17] ============= drm_modes_analog_tv (5 subtests) =============
[16:52:17] [PASSED] drm_test_modes_analog_tv_mono_576i
[16:52:17] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[16:52:17] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[16:52:17] [PASSED] drm_test_modes_analog_tv_pal_576i
[16:52:17] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[16:52:17] =============== [PASSED] drm_modes_analog_tv ===============
[16:52:17] ============== drm_plane_helper (2 subtests) ===============
[16:52:17] =============== drm_test_check_plane_state  ================
[16:52:17] [PASSED] clipping_simple
[16:52:17] [PASSED] clipping_rotate_reflect
[16:52:17] [PASSED] positioning_simple
[16:52:17] [PASSED] upscaling
[16:52:17] [PASSED] downscaling
[16:52:17] [PASSED] rounding1
[16:52:17] [PASSED] rounding2
[16:52:17] [PASSED] rounding3
[16:52:17] [PASSED] rounding4
[16:52:17] =========== [PASSED] drm_test_check_plane_state ============
[16:52:17] =========== drm_test_check_invalid_plane_state  ============
[16:52:17] [PASSED] positioning_invalid
[16:52:17] [PASSED] upscaling_invalid
[16:52:17] [PASSED] downscaling_invalid
[16:52:17] ======= [PASSED] drm_test_check_invalid_plane_state ========
[16:52:17] ================ [PASSED] drm_plane_helper =================
[16:52:17] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[16:52:17] ====== drm_test_connector_helper_tv_get_modes_check  =======
[16:52:17] [PASSED] None
[16:52:17] [PASSED] PAL
[16:52:17] [PASSED] NTSC
[16:52:17] [PASSED] Both, NTSC Default
[16:52:17] [PASSED] Both, PAL Default
[16:52:17] [PASSED] Both, NTSC Default, with PAL on command-line
[16:52:17] [PASSED] Both, PAL Default, with NTSC on command-line
[16:52:17] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[16:52:17] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[16:52:17] ================== drm_rect (9 subtests) ===================
[16:52:17] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[16:52:17] [PASSED] drm_test_rect_clip_scaled_not_clipped
[16:52:17] [PASSED] drm_test_rect_clip_scaled_clipped
[16:52:17] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[16:52:17] ================= drm_test_rect_intersect  =================
[16:52:17] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[16:52:17] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[16:52:17] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[16:52:17] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[16:52:17] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[16:52:17] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[16:52:17] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[16:52:17] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[16:52:17] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[16:52:17] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[16:52:17] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[16:52:17] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[16:52:17] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[16:52:17] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[16:52:17] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[16:52:17] ============= [PASSED] drm_test_rect_intersect =============
[16:52:17] ================ drm_test_rect_calc_hscale  ================
[16:52:17] [PASSED] normal use
[16:52:17] [PASSED] out of max range
[16:52:17] [PASSED] out of min range
[16:52:17] [PASSED] zero dst
[16:52:17] [PASSED] negative src
[16:52:17] [PASSED] negative dst
[16:52:17] ============ [PASSED] drm_test_rect_calc_hscale ============
[16:52:17] ================ drm_test_rect_calc_vscale  ================
[16:52:17] [PASSED] normal use
[16:52:17] [PASSED] out of max range
[16:52:17] [PASSED] out of min range
[16:52:17] [PASSED] zero dst
[16:52:17] [PASSED] negative src
[16:52:17] [PASSED] negative dst
stty: 'standard input': Inappropriate ioctl for device
[16:52:17] ============ [PASSED] drm_test_rect_calc_vscale ============
[16:52:17] ================== drm_test_rect_rotate  ===================
[16:52:17] [PASSED] reflect-x
[16:52:17] [PASSED] reflect-y
[16:52:17] [PASSED] rotate-0
[16:52:17] [PASSED] rotate-90
[16:52:17] [PASSED] rotate-180
[16:52:17] [PASSED] rotate-270
[16:52:17] ============== [PASSED] drm_test_rect_rotate ===============
[16:52:17] ================ drm_test_rect_rotate_inv  =================
[16:52:17] [PASSED] reflect-x
[16:52:17] [PASSED] reflect-y
[16:52:17] [PASSED] rotate-0
[16:52:17] [PASSED] rotate-90
[16:52:17] [PASSED] rotate-180
[16:52:17] [PASSED] rotate-270
[16:52:17] ============ [PASSED] drm_test_rect_rotate_inv =============
[16:52:17] ==================== [PASSED] drm_rect =====================
[16:52:17] ============ drm_sysfb_modeset_test (1 subtest) ============
[16:52:17] ============ drm_test_sysfb_build_fourcc_list  =============
[16:52:17] [PASSED] no native formats
[16:52:17] [PASSED] XRGB8888 as native format
[16:52:17] [PASSED] remove duplicates
[16:52:17] [PASSED] convert alpha formats
[16:52:17] [PASSED] random formats
[16:52:17] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[16:52:17] ============= [PASSED] drm_sysfb_modeset_test ==============
[16:52:17] ================== drm_fixp (2 subtests) ===================
[16:52:17] [PASSED] drm_test_int2fixp
[16:52:17] [PASSED] drm_test_sm2fixp
[16:52:17] ==================== [PASSED] drm_fixp =====================
[16:52:17] ============================================================
[16:52:17] Testing complete. Ran 621 tests: passed: 621
[16:52:17] Elapsed time: 25.997s total, 1.694s configuring, 24.125s building, 0.177s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[16:52:17] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[16:52:19] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[16:52:29] Starting KUnit Kernel (1/1)...
[16:52:29] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[16:52:29] ================= ttm_device (5 subtests) ==================
[16:52:29] [PASSED] ttm_device_init_basic
[16:52:29] [PASSED] ttm_device_init_multiple
[16:52:29] [PASSED] ttm_device_fini_basic
[16:52:29] [PASSED] ttm_device_init_no_vma_man
[16:52:29] ================== ttm_device_init_pools  ==================
[16:52:29] [PASSED] No DMA allocations, no DMA32 required
[16:52:29] [PASSED] DMA allocations, DMA32 required
[16:52:29] [PASSED] No DMA allocations, DMA32 required
[16:52:29] [PASSED] DMA allocations, no DMA32 required
[16:52:29] ============== [PASSED] ttm_device_init_pools ==============
[16:52:29] =================== [PASSED] ttm_device ====================
[16:52:29] ================== ttm_pool (8 subtests) ===================
[16:52:29] ================== ttm_pool_alloc_basic  ===================
[16:52:29] [PASSED] One page
[16:52:29] [PASSED] More than one page
[16:52:29] [PASSED] Above the allocation limit
[16:52:29] [PASSED] One page, with coherent DMA mappings enabled
[16:52:29] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[16:52:29] ============== [PASSED] ttm_pool_alloc_basic ===============
[16:52:29] ============== ttm_pool_alloc_basic_dma_addr  ==============
[16:52:29] [PASSED] One page
[16:52:29] [PASSED] More than one page
[16:52:29] [PASSED] Above the allocation limit
[16:52:29] [PASSED] One page, with coherent DMA mappings enabled
[16:52:29] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[16:52:29] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[16:52:29] [PASSED] ttm_pool_alloc_order_caching_match
[16:52:29] [PASSED] ttm_pool_alloc_caching_mismatch
[16:52:29] [PASSED] ttm_pool_alloc_order_mismatch
[16:52:29] [PASSED] ttm_pool_free_dma_alloc
[16:52:29] [PASSED] ttm_pool_free_no_dma_alloc
[16:52:29] [PASSED] ttm_pool_fini_basic
[16:52:29] ==================== [PASSED] ttm_pool =====================
[16:52:29] ================ ttm_resource (8 subtests) =================
[16:52:29] ================= ttm_resource_init_basic  =================
[16:52:29] [PASSED] Init resource in TTM_PL_SYSTEM
[16:52:29] [PASSED] Init resource in TTM_PL_VRAM
[16:52:29] [PASSED] Init resource in a private placement
[16:52:29] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[16:52:29] ============= [PASSED] ttm_resource_init_basic =============
[16:52:29] [PASSED] ttm_resource_init_pinned
[16:52:29] [PASSED] ttm_resource_fini_basic
[16:52:29] [PASSED] ttm_resource_manager_init_basic
[16:52:29] [PASSED] ttm_resource_manager_usage_basic
[16:52:29] [PASSED] ttm_resource_manager_set_used_basic
[16:52:29] [PASSED] ttm_sys_man_alloc_basic
[16:52:29] [PASSED] ttm_sys_man_free_basic
[16:52:29] ================== [PASSED] ttm_resource ===================
[16:52:29] =================== ttm_tt (15 subtests) ===================
[16:52:29] ==================== ttm_tt_init_basic  ====================
[16:52:29] [PASSED] Page-aligned size
[16:52:29] [PASSED] Extra pages requested
[16:52:29] ================ [PASSED] ttm_tt_init_basic ================
[16:52:29] [PASSED] ttm_tt_init_misaligned
[16:52:29] [PASSED] ttm_tt_fini_basic
[16:52:29] [PASSED] ttm_tt_fini_sg
[16:52:29] [PASSED] ttm_tt_fini_shmem
[16:52:29] [PASSED] ttm_tt_create_basic
[16:52:29] [PASSED] ttm_tt_create_invalid_bo_type
[16:52:29] [PASSED] ttm_tt_create_ttm_exists
[16:52:29] [PASSED] ttm_tt_create_failed
[16:52:29] [PASSED] ttm_tt_destroy_basic
[16:52:29] [PASSED] ttm_tt_populate_null_ttm
[16:52:29] [PASSED] ttm_tt_populate_populated_ttm
[16:52:29] [PASSED] ttm_tt_unpopulate_basic
[16:52:29] [PASSED] ttm_tt_unpopulate_empty_ttm
[16:52:29] [PASSED] ttm_tt_swapin_basic
[16:52:29] ===================== [PASSED] ttm_tt ======================
[16:52:29] =================== ttm_bo (14 subtests) ===================
[16:52:29] =========== ttm_bo_reserve_optimistic_no_ticket  ===========
[16:52:29] [PASSED] Cannot be interrupted and sleeps
[16:52:29] [PASSED] Cannot be interrupted, locks straight away
[16:52:29] [PASSED] Can be interrupted, sleeps
[16:52:29] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[16:52:29] [PASSED] ttm_bo_reserve_locked_no_sleep
[16:52:29] [PASSED] ttm_bo_reserve_no_wait_ticket
[16:52:29] [PASSED] ttm_bo_reserve_double_resv
[16:52:29] [PASSED] ttm_bo_reserve_interrupted
[16:52:29] [PASSED] ttm_bo_reserve_deadlock
[16:52:29] [PASSED] ttm_bo_unreserve_basic
[16:52:29] [PASSED] ttm_bo_unreserve_pinned
[16:52:29] [PASSED] ttm_bo_unreserve_bulk
[16:52:29] [PASSED] ttm_bo_fini_basic
[16:52:29] [PASSED] ttm_bo_fini_shared_resv
[16:52:29] [PASSED] ttm_bo_pin_basic
[16:52:29] [PASSED] ttm_bo_pin_unpin_resource
[16:52:29] [PASSED] ttm_bo_multiple_pin_one_unpin
[16:52:29] ===================== [PASSED] ttm_bo ======================
[16:52:29] ============== ttm_bo_validate (21 subtests) ===============
[16:52:29] ============== ttm_bo_init_reserved_sys_man  ===============
[16:52:29] [PASSED] Buffer object for userspace
[16:52:29] [PASSED] Kernel buffer object
[16:52:29] [PASSED] Shared buffer object
[16:52:29] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[16:52:29] ============== ttm_bo_init_reserved_mock_man  ==============
[16:52:29] [PASSED] Buffer object for userspace
[16:52:29] [PASSED] Kernel buffer object
[16:52:29] [PASSED] Shared buffer object
[16:52:29] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[16:52:29] [PASSED] ttm_bo_init_reserved_resv
[16:52:29] ================== ttm_bo_validate_basic  ==================
[16:52:29] [PASSED] Buffer object for userspace
[16:52:29] [PASSED] Kernel buffer object
[16:52:29] [PASSED] Shared buffer object
[16:52:29] ============== [PASSED] ttm_bo_validate_basic ==============
[16:52:29] [PASSED] ttm_bo_validate_invalid_placement
[16:52:29] ============= ttm_bo_validate_same_placement  ==============
[16:52:29] [PASSED] System manager
[16:52:29] [PASSED] VRAM manager
[16:52:29] ========= [PASSED] ttm_bo_validate_same_placement ==========
[16:52:29] [PASSED] ttm_bo_validate_failed_alloc
[16:52:29] [PASSED] ttm_bo_validate_pinned
[16:52:29] [PASSED] ttm_bo_validate_busy_placement
[16:52:29] ================ ttm_bo_validate_multihop  =================
[16:52:29] [PASSED] Buffer object for userspace
[16:52:29] [PASSED] Kernel buffer object
[16:52:29] [PASSED] Shared buffer object
[16:52:29] ============ [PASSED] ttm_bo_validate_multihop =============
[16:52:29] ========== ttm_bo_validate_no_placement_signaled  ==========
[16:52:29] [PASSED] Buffer object in system domain, no page vector
[16:52:29] [PASSED] Buffer object in system domain with an existing page vector
[16:52:29] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[16:52:29] ======== ttm_bo_validate_no_placement_not_signaled  ========
[16:52:29] [PASSED] Buffer object for userspace
[16:52:29] [PASSED] Kernel buffer object
[16:52:29] [PASSED] Shared buffer object
[16:52:29] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[16:52:29] [PASSED] ttm_bo_validate_move_fence_signaled
[16:52:29] ========= ttm_bo_validate_move_fence_not_signaled  =========
[16:52:29] [PASSED] Waits for GPU
[16:52:29] [PASSED] Tries to lock straight away
[16:52:29] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[16:52:29] [PASSED] ttm_bo_validate_happy_evict
[16:52:29] [PASSED] ttm_bo_validate_all_pinned_evict
[16:52:29] [PASSED] ttm_bo_validate_allowed_only_evict
[16:52:29] [PASSED] ttm_bo_validate_deleted_evict
[16:52:29] [PASSED] ttm_bo_validate_busy_domain_evict
[16:52:29] [PASSED] ttm_bo_validate_evict_gutting
[16:52:29] [PASSED] ttm_bo_validate_recrusive_evict
stty: 'standard input': Inappropriate ioctl for device
[16:52:29] ================= [PASSED] ttm_bo_validate =================
[16:52:29] ============================================================
[16:52:29] Testing complete. Ran 101 tests: passed: 101
[16:52:29] Elapsed time: 11.419s total, 1.742s configuring, 9.460s building, 0.188s running

+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel



^ permalink raw reply	[flat|nested] 24+ messages in thread

* ✓ Xe.CI.BAT: success for drm/i915/dp: Fix few SST HPD IRQ handling issues (rev2)
  2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
                   ` (21 preceding siblings ...)
  2026-02-25 16:52 ` ✓ CI.KUnit: success for drm/i915/dp: Fix few SST HPD IRQ handling issues (rev2) Patchwork
@ 2026-02-25 17:26 ` Patchwork
  22 siblings, 0 replies; 24+ messages in thread
From: Patchwork @ 2026-02-25 17:26 UTC (permalink / raw)
  To: Imre Deak; +Cc: intel-xe

[-- Attachment #1: Type: text/plain, Size: 878 bytes --]

== Series Details ==

Series: drm/i915/dp: Fix few SST HPD IRQ handling issues (rev2)
URL   : https://patchwork.freedesktop.org/series/150799/
State : success

== Summary ==

CI Bug Log - changes from xe-4617-3b1923ab37ecd72e1405c7b8d3b1d9e1f3e59f86_BAT -> xe-pw-150799v2_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (14 -> 14)
------------------------------

  No changes in participating hosts


Changes
-------

  No changes found


Build changes
-------------

  * Linux: xe-4617-3b1923ab37ecd72e1405c7b8d3b1d9e1f3e59f86 -> xe-pw-150799v2

  IGT_8771: 8771
  xe-4617-3b1923ab37ecd72e1405c7b8d3b1d9e1f3e59f86: 3b1923ab37ecd72e1405c7b8d3b1d9e1f3e59f86
  xe-pw-150799v2: 150799v2

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-150799v2/index.html

[-- Attachment #2: Type: text/html, Size: 1426 bytes --]

^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2026-02-25 17:26 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-25 16:27 [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
2026-02-25 16:27 ` [PATCH v2 01/20] drm/i915/dp_mst: Reprobe connector if the IRQ ESI read failed Imre Deak
2026-02-25 16:27 ` [PATCH v2 02/20] drm/i915/dp_mst: Verify the link status always the same way Imre Deak
2026-02-25 16:27 ` [PATCH v2 03/20] drm/i915/dp_mst: Reuse intel_dp_check_link_state() in the HPD IRQ handler Imre Deak
2026-02-25 16:27 ` [PATCH v2 04/20] drm/i915/dp: Handle a tunneling IRQ after acking it Imre Deak
2026-02-25 16:27 ` [PATCH v2 05/20] drm/i915/dp: Handle the RX_CAP_CHANGED HPD IRQ Imre Deak
2026-02-25 16:27 ` [PATCH v2 06/20] drm/i915/dp: Handle the DOWNSTREAM_PORT_STATUS_CHANGED event Imre Deak
2026-02-25 16:27 ` [PATCH v2 07/20] drm/i915/dp: Don't clobber the encoder state in the HPD IRQ handler Imre Deak
2026-02-25 16:27 ` [PATCH v2 08/20] drm/i915/dp: Remove the device service IRQ handling from connector detect Imre Deak
2026-02-25 16:27 ` [PATCH v2 09/20] drm/i915/dp: Fix the device service IRQ DPCD_REV check Imre Deak
2026-02-25 16:27 ` [PATCH v2 10/20] drm/i915/dp: Fix the link " Imre Deak
2026-02-25 16:27 ` [PATCH v2 11/20] drm/i915/dp: Reprobe connector if getting/acking device IRQs fails Imre Deak
2026-02-25 16:27 ` [PATCH v2 12/20] drm/i915/dp: Reprobe connector if getting/acking link service " Imre Deak
2026-02-25 16:27 ` [PATCH v2 13/20] drm/i915/dp: Return early if getting/acking device " Imre Deak
2026-02-25 16:27 ` [PATCH v2 14/20] drm/i915/dp: Return early if getting/acking link " Imre Deak
2026-02-25 16:27 ` [PATCH v2 15/20] drm/i915/dp: Read/ack sink count and sink IRQs for SST as it's done for MST Imre Deak
2026-02-25 16:27 ` [PATCH v2 16/20] drm/i915/dp: Print debug message for a sink connected off request Imre Deak
2026-02-25 16:27 ` [PATCH v2 17/20] drm/i915/dp: Check SST link status while handling link service IRQs Imre Deak
2026-02-25 16:27 ` [PATCH v2 18/20] drm/i915/dp_mst: Reuse intel_dp_handle_link_service_irq() Imre Deak
2026-02-25 16:27 ` [PATCH v2 19/20] drm/i915/dp: Ack only the handled device service IRQs Imre Deak
2026-02-25 16:27 ` [PATCH v2 20/20] drm/i915/dp: Ack only the handled link " Imre Deak
2026-02-25 16:34 ` [PATCH v2 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
2026-02-25 16:52 ` ✓ CI.KUnit: success for drm/i915/dp: Fix few SST HPD IRQ handling issues (rev2) Patchwork
2026-02-25 17:26 ` ✓ Xe.CI.BAT: " Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox