* [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues
@ 2025-06-26 8:20 Imre Deak
2025-06-26 8:20 ` [PATCH 01/20] drm/i915/dp_mst: Reprobe connector if the IRQ ESI read failed Imre Deak
` (21 more replies)
0 siblings, 22 replies; 62+ messages in thread
From: Imre Deak @ 2025-06-26 8:20 UTC (permalink / raw)
To: intel-gfx, intel-xe
This patchset fixes a few HPD IRQ handling issues on SST links and
makes the SST and MST IRQ handling code more unified.
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/ackink 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 | 249 ++++++++++++------
2 files changed, 169 insertions(+), 81 deletions(-)
--
2.44.2
^ permalink raw reply [flat|nested] 62+ messages in thread
* [PATCH 01/20] drm/i915/dp_mst: Reprobe connector if the IRQ ESI read failed
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
@ 2025-06-26 8:20 ` Imre Deak
2025-06-27 7:42 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 02/20] drm/i915/dp_mst: Verify the link status always the same way Imre Deak
` (20 subsequent siblings)
21 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 8:20 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 f48912f308df7..3f911c930a30b 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5113,7 +5113,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.44.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 02/20] drm/i915/dp_mst: Verify the link status always the same way
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
2025-06-26 8:20 ` [PATCH 01/20] drm/i915/dp_mst: Reprobe connector if the IRQ ESI read failed Imre Deak
@ 2025-06-26 8:20 ` Imre Deak
2025-06-26 8:31 ` Jani Nikula
2025-06-26 8:20 ` [PATCH 03/20] drm/i915/dp_mst: Reuse intel_dp_check_link_state() in the HPD IRQ handler Imre Deak
` (19 subsequent siblings)
21 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 8:20 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 3f911c930a30b..ac7e08f485309 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5176,6 +5176,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)
{
@@ -5198,8 +5215,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.44.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 03/20] drm/i915/dp_mst: Reuse intel_dp_check_link_state() in the HPD IRQ handler
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
2025-06-26 8:20 ` [PATCH 01/20] drm/i915/dp_mst: Reprobe connector if the IRQ ESI read failed Imre Deak
2025-06-26 8:20 ` [PATCH 02/20] drm/i915/dp_mst: Verify the link status always the same way Imre Deak
@ 2025-06-26 8:20 ` Imre Deak
2025-07-01 7:50 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 04/20] drm/i915/dp: Handle a tunneling IRQ after acking it Imre Deak
` (18 subsequent siblings)
21 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 8:20 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 ac7e08f485309..285cd9a5d4a7b 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5065,24 +5065,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
@@ -5101,9 +5083,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 (;;) {
@@ -5120,12 +5099,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);
@@ -5144,10 +5118,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.44.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 04/20] drm/i915/dp: Handle a tunneling IRQ after acking it
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
` (2 preceding siblings ...)
2025-06-26 8:20 ` [PATCH 03/20] drm/i915/dp_mst: Reuse intel_dp_check_link_state() in the HPD IRQ handler Imre Deak
@ 2025-06-26 8:20 ` Imre Deak
2025-07-01 8:02 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 05/20] drm/i915/dp: Handle the RX_CAP_CHANGED HPD IRQ Imre Deak
` (17 subsequent siblings)
21 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 8:20 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 | 25 +++++++++++--------------
1 file changed, 11 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 285cd9a5d4a7b..453416b9e9bec 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5099,17 +5099,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;
@@ -5121,6 +5114,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;
@@ -5423,18 +5420,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 ((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;
+ 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;
+
return reprobe_needed;
}
--
2.44.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 05/20] drm/i915/dp: Handle the RX_CAP_CHANGED HPD IRQ
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
` (3 preceding siblings ...)
2025-06-26 8:20 ` [PATCH 04/20] drm/i915/dp: Handle a tunneling IRQ after acking it Imre Deak
@ 2025-06-26 8:20 ` Imre Deak
2025-07-01 8:03 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 06/20] drm/i915/dp: Handle the DOWNSTREAM_PORT_STATUS_CHANGED event Imre Deak
` (16 subsequent siblings)
21 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 8:20 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 453416b9e9bec..c2eadfa060c2d 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5099,7 +5099,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);
@@ -5112,6 +5112,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);
@@ -5424,6 +5427,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.44.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 06/20] drm/i915/dp: Handle the DOWNSTREAM_PORT_STATUS_CHANGED event
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
` (4 preceding siblings ...)
2025-06-26 8:20 ` [PATCH 05/20] drm/i915/dp: Handle the RX_CAP_CHANGED HPD IRQ Imre Deak
@ 2025-06-26 8:20 ` Imre Deak
2025-07-01 8:52 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 07/20] drm/i915/dp: Don't clobber the encoder state in the HPD IRQ handler Imre Deak
` (15 subsequent siblings)
21 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 8:20 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 30c7315fc25e3..039a65a6b68d4 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1669,6 +1669,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 c2eadfa060c2d..7d8421649be0d 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5164,7 +5164,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
@@ -5484,6 +5491,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)) {
@@ -5509,6 +5521,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.44.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 07/20] drm/i915/dp: Don't clobber the encoder state in the HPD IRQ handler
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
` (5 preceding siblings ...)
2025-06-26 8:20 ` [PATCH 06/20] drm/i915/dp: Handle the DOWNSTREAM_PORT_STATUS_CHANGED event Imre Deak
@ 2025-06-26 8:20 ` Imre Deak
2025-07-01 8:56 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 08/20] drm/i915/dp: Remove the device service IRQ handling from connector detect Imre Deak
` (14 subsequent siblings)
21 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 8:20 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 7d8421649be0d..2592afb96ab58 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5464,9 +5464,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);
@@ -5476,12 +5474,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.44.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 08/20] drm/i915/dp: Remove the device service IRQ handling from connector detect
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
` (6 preceding siblings ...)
2025-06-26 8:20 ` [PATCH 07/20] drm/i915/dp: Don't clobber the encoder state in the HPD IRQ handler Imre Deak
@ 2025-06-26 8:20 ` Imre Deak
2025-07-01 9:00 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 09/20] drm/i915/dp: Fix the device service IRQ DPCD_REV check Imre Deak
` (13 subsequent siblings)
21 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 8:20 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 2592afb96ab58..aacea2d7b9738 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5940,8 +5940,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.44.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 09/20] drm/i915/dp: Fix the device service IRQ DPCD_REV check
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
` (7 preceding siblings ...)
2025-06-26 8:20 ` [PATCH 08/20] drm/i915/dp: Remove the device service IRQ handling from connector detect Imre Deak
@ 2025-06-26 8:20 ` Imre Deak
2025-07-01 9:01 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 10/20] drm/i915/dp: Fix the link " Imre Deak
` (12 subsequent siblings)
21 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 8:20 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 aacea2d7b9738..6262b661d026e 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5398,9 +5398,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.44.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 10/20] drm/i915/dp: Fix the link service IRQ DPCD_REV check
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
` (8 preceding siblings ...)
2025-06-26 8:20 ` [PATCH 09/20] drm/i915/dp: Fix the device service IRQ DPCD_REV check Imre Deak
@ 2025-06-26 8:20 ` Imre Deak
2025-07-01 9:12 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 11/20] drm/i915/dp: Reprobe connector if getting/acking device IRQs fails Imre Deak
` (11 subsequent siblings)
21 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 8:20 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 6262b661d026e..7793a72983abd 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5420,7 +5420,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.44.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 11/20] drm/i915/dp: Reprobe connector if getting/acking device IRQs fails
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
` (9 preceding siblings ...)
2025-06-26 8:20 ` [PATCH 10/20] drm/i915/dp: Fix the link " Imre Deak
@ 2025-06-26 8:20 ` Imre Deak
2025-06-26 9:12 ` Jani Nikula
2025-06-26 8:20 ` [PATCH 12/20] drm/i915/dp: Reprobe connector if getting/acking link service " Imre Deak
` (10 subsequent siblings)
21 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 8:20 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 7793a72983abd..7eb208d2c321b 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5393,16 +5393,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);
@@ -5412,6 +5416,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)
@@ -5476,8 +5482,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.44.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 12/20] drm/i915/dp: Reprobe connector if getting/acking link service IRQs fails
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
` (10 preceding siblings ...)
2025-06-26 8:20 ` [PATCH 11/20] drm/i915/dp: Reprobe connector if getting/acking device IRQs fails Imre Deak
@ 2025-06-26 8:20 ` Imre Deak
2025-07-03 11:37 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 13/20] drm/i915/dp: Return early if getting/acking device " Imre Deak
` (9 subsequent siblings)
21 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 8:20 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 7eb208d2c321b..66db426b4aca1 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5430,12 +5430,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.44.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 13/20] drm/i915/dp: Return early if getting/acking device service IRQs fails
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
` (11 preceding siblings ...)
2025-06-26 8:20 ` [PATCH 12/20] drm/i915/dp: Reprobe connector if getting/acking link service " Imre Deak
@ 2025-06-26 8:20 ` Imre Deak
2025-07-03 11:59 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 14/20] drm/i915/dp: Return early if getting/ackink link " Imre Deak
` (8 subsequent siblings)
21 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 8:20 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 | 35 ++++++++++++++++---------
1 file changed, 23 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
index 66db426b4aca1..cfbe7c6f896ab 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5393,31 +5393,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;
+ return false;
if (!val)
- return false;
+ return true;
if (drm_dp_dpcd_writeb(&intel_dp->aux, DP_DEVICE_SERVICE_IRQ_VECTOR, val) != 1)
- return true;
+ return false;
- if (val & DP_AUTOMATED_TEST_REQUEST)
+ *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)
@@ -5471,6 +5479,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);
@@ -5485,8 +5494,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.44.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 14/20] drm/i915/dp: Return early if getting/ackink link service IRQs fails
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
` (12 preceding siblings ...)
2025-06-26 8:20 ` [PATCH 13/20] drm/i915/dp: Return early if getting/acking device " Imre Deak
@ 2025-06-26 8:20 ` Imre Deak
2025-07-03 12:29 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 15/20] drm/i915/dp: Read/ack sink count and sink IRQs for SST as it's done for MST Imre Deak
` (7 subsequent siblings)
21 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 8:20 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 cfbe7c6f896ab..2ba4a810f22c2 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5428,33 +5428,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;
@@ -5499,7 +5509,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.44.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 15/20] drm/i915/dp: Read/ack sink count and sink IRQs for SST as it's done for MST
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
` (13 preceding siblings ...)
2025-06-26 8:20 ` [PATCH 14/20] drm/i915/dp: Return early if getting/ackink link " Imre Deak
@ 2025-06-26 8:20 ` Imre Deak
2025-07-03 13:02 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 16/20] drm/i915/dp: Print debug message for a sink connected off request Imre Deak
` (6 subsequent siblings)
21 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 8:20 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 2ba4a810f22c2..2e6ed7d2a64a6 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -4573,6 +4573,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)
@@ -5393,27 +5457,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);
@@ -5428,31 +5471,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);
@@ -5489,30 +5507,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.44.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 16/20] drm/i915/dp: Print debug message for a sink connected off request
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
` (14 preceding siblings ...)
2025-06-26 8:20 ` [PATCH 15/20] drm/i915/dp: Read/ack sink count and sink IRQs for SST as it's done for MST Imre Deak
@ 2025-06-26 8:20 ` Imre Deak
2025-07-03 13:03 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 17/20] drm/i915/dp: Check SST link status while handling link service IRQs Imre Deak
` (5 subsequent siblings)
21 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 8:20 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 2e6ed7d2a64a6..90f6fe20e4c0d 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5474,6 +5474,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)
@@ -5482,6 +5484,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.44.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 17/20] drm/i915/dp: Check SST link status while handling link service IRQs
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
` (15 preceding siblings ...)
2025-06-26 8:20 ` [PATCH 16/20] drm/i915/dp: Print debug message for a sink connected off request Imre Deak
@ 2025-06-26 8:20 ` Imre Deak
2025-07-03 13:05 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 18/20] drm/i915/dp_mst: Reuse intel_dp_handle_link_service_irq() Imre Deak
` (4 subsequent siblings)
21 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 8:20 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 90f6fe20e4c0d..000c57da92d60 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5481,6 +5481,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);
@@ -5534,14 +5537,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.44.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 18/20] drm/i915/dp_mst: Reuse intel_dp_handle_link_service_irq()
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
` (16 preceding siblings ...)
2025-06-26 8:20 ` [PATCH 17/20] drm/i915/dp: Check SST link status while handling link service IRQs Imre Deak
@ 2025-06-26 8:20 ` Imre Deak
2025-07-03 13:07 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 19/20] drm/i915/dp: Ack only the handled device service IRQs Imre Deak
` (3 subsequent siblings)
21 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 8:20 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 000c57da92d60..52249fa5c8a6d 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -5129,6 +5129,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
@@ -5176,14 +5178,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;
}
@@ -5481,7 +5476,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.44.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 19/20] drm/i915/dp: Ack only the handled device service IRQs
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
` (17 preceding siblings ...)
2025-06-26 8:20 ` [PATCH 18/20] drm/i915/dp_mst: Reuse intel_dp_handle_link_service_irq() Imre Deak
@ 2025-06-26 8:20 ` Imre Deak
2025-07-03 13:14 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 20/20] drm/i915/dp: Ack only the handled link " Imre Deak
` (2 subsequent siblings)
21 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 8:20 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 52249fa5c8a6d..6f67fac9724e1 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -4537,6 +4537,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)
{
@@ -4628,6 +4636,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;
@@ -5172,6 +5182,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");
@@ -5456,6 +5468,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.44.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* [PATCH 20/20] drm/i915/dp: Ack only the handled link service IRQs
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
` (18 preceding siblings ...)
2025-06-26 8:20 ` [PATCH 19/20] drm/i915/dp: Ack only the handled device service IRQs Imre Deak
@ 2025-06-26 8:20 ` Imre Deak
2025-07-03 13:18 ` Luca Coelho
2025-06-26 13:06 ` ✓ i915.CI.BAT: success for drm/i915/dp: Fix few SST HPD IRQ handling issues Patchwork
2025-06-26 22:48 ` ✗ i915.CI.Full: failure " Patchwork
21 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 8:20 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 6f67fac9724e1..0e3e9ab3ac604 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -4545,6 +4545,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)
{
@@ -4637,6 +4647,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;
@@ -5175,7 +5186,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);
@@ -5183,6 +5194,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");
@@ -5487,6 +5499,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.44.2
^ permalink raw reply related [flat|nested] 62+ messages in thread
* Re: [PATCH 02/20] drm/i915/dp_mst: Verify the link status always the same way
2025-06-26 8:20 ` [PATCH 02/20] drm/i915/dp_mst: Verify the link status always the same way Imre Deak
@ 2025-06-26 8:31 ` Jani Nikula
2025-06-27 15:19 ` Imre Deak
0 siblings, 1 reply; 62+ messages in thread
From: Jani Nikula @ 2025-06-26 8:31 UTC (permalink / raw)
To: Imre Deak, intel-gfx, intel-xe; +Cc: Imre Deak
On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
> 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 3f911c930a30b..ac7e08f485309 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -5176,6 +5176,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;
Please propagate the int instead of having "== 0" at the end of the
assignment.
I'm increasingly critical of bool returns for success/failure, because
they don't really mix well with 0 for success and negative values for
error.
> +
> + return ret;
> +}
> +
> static bool
> intel_dp_needs_link_retrain(struct intel_dp *intel_dp)
> {
> @@ -5198,8 +5215,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;
>
> /*
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 11/20] drm/i915/dp: Reprobe connector if getting/acking device IRQs fails
2025-06-26 8:20 ` [PATCH 11/20] drm/i915/dp: Reprobe connector if getting/acking device IRQs fails Imre Deak
@ 2025-06-26 9:12 ` Jani Nikula
2025-06-26 9:35 ` Imre Deak
0 siblings, 1 reply; 62+ messages in thread
From: Jani Nikula @ 2025-06-26 9:12 UTC (permalink / raw)
To: Imre Deak, intel-gfx, intel-xe; +Cc: Imre Deak
On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
> 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 7793a72983abd..7eb208d2c321b 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -5393,16 +5393,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)
I don't think "check" is very intuitive in function names. Check
something, but then what? Is it like an assert or does it do something
active or what?
What does a boolean return from a check function mean?
It's not obvious to the reader at all.
> {
> 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;
Looks like true means the check failed... while usually true for boolean
functions means success.
>
> - 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);
Whoa, it's not a *check* function at all?! It actually *handles* the
service irqs.
Can we rephrase the function name?
int intel_dp_handle_device_service_irq() and int returns maybe?
BR,
Jani.
> @@ -5412,6 +5416,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)
> @@ -5476,8 +5482,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);
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 11/20] drm/i915/dp: Reprobe connector if getting/acking device IRQs fails
2025-06-26 9:12 ` Jani Nikula
@ 2025-06-26 9:35 ` Imre Deak
2025-06-26 10:23 ` Jani Nikula
0 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 9:35 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx, intel-xe, Imre Deak
On Thu, Jun 26, 2025 at 12:12:11PM +0300, Jani Nikula wrote:
> On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
> > 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 7793a72983abd..7eb208d2c321b 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > @@ -5393,16 +5393,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)
>
> I don't think "check" is very intuitive in function names. Check
> something, but then what? Is it like an assert or does it do something
> active or what?
>
> What does a boolean return from a check function mean?
>
> It's not obvious to the reader at all.
I agree, but in this patch I didn't want to change the function name.
>
> > {
> > 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;
>
> Looks like true means the check failed... while usually true for boolean
> functions means success.
The function returns true as before if a full connector detection is needed.
>
> >
> > - 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);
>
> Whoa, it's not a *check* function at all?! It actually *handles* the
> service irqs.
>
> Can we rephrase the function name?
I want to keep the function name in this patch. In the following patches
I will separate this part and rename it to
intel_dp_get_and_ack_device_service_irq().
> int intel_dp_handle_device_service_irq() and int returns maybe?
> BR,
> Jani.
>
> > @@ -5412,6 +5416,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)
> > @@ -5476,8 +5482,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);
>
> --
> Jani Nikula, Intel
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 11/20] drm/i915/dp: Reprobe connector if getting/acking device IRQs fails
2025-06-26 9:35 ` Imre Deak
@ 2025-06-26 10:23 ` Jani Nikula
2025-06-26 10:43 ` Imre Deak
0 siblings, 1 reply; 62+ messages in thread
From: Jani Nikula @ 2025-06-26 10:23 UTC (permalink / raw)
To: imre.deak; +Cc: intel-gfx, intel-xe, Imre Deak
On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
> On Thu, Jun 26, 2025 at 12:12:11PM +0300, Jani Nikula wrote:
>> On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
>> > 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 7793a72983abd..7eb208d2c321b 100644
>> > --- a/drivers/gpu/drm/i915/display/intel_dp.c
>> > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
>> > @@ -5393,16 +5393,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)
>>
>> I don't think "check" is very intuitive in function names. Check
>> something, but then what? Is it like an assert or does it do something
>> active or what?
>>
>> What does a boolean return from a check function mean?
>>
>> It's not obvious to the reader at all.
>
> I agree, but in this patch I didn't want to change the function name.
Arguably adding a return value changes the meaning already...
>
>>
>> > {
>> > 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;
>>
>> Looks like true means the check failed... while usually true for boolean
>> functions means success.
>
> The function returns true as before if a full connector detection is needed.
But it didn't return anything before! And that meaning is not conveyed
to the reader in *any* reasonable way!
The absolute minimum is to add a comment (mind you, kernel-doc is
overkill) stating what the return value means.
>
>>
>> >
>> > - 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);
>>
>> Whoa, it's not a *check* function at all?! It actually *handles* the
>> service irqs.
>>
>> Can we rephrase the function name?
>
> I want to keep the function name in this patch. In the following patches
> I will separate this part and rename it to
> intel_dp_get_and_ack_device_service_irq().
Right, saw that now. But even for that function name the meaning of the
return value is ambiguous.
BR,
Jani.
>
>
>> int intel_dp_handle_device_service_irq() and int returns maybe?
>> BR,
>> Jani.
>>
>> > @@ -5412,6 +5416,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)
>> > @@ -5476,8 +5482,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);
>>
>> --
>> Jani Nikula, Intel
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 11/20] drm/i915/dp: Reprobe connector if getting/acking device IRQs fails
2025-06-26 10:23 ` Jani Nikula
@ 2025-06-26 10:43 ` Imre Deak
2025-06-26 10:46 ` Jani Nikula
0 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 10:43 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx, intel-xe, Imre Deak
On Thu, Jun 26, 2025 at 01:23:12PM +0300, Jani Nikula wrote:
> On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
> > On Thu, Jun 26, 2025 at 12:12:11PM +0300, Jani Nikula wrote:
> >> On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
> >> > 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 7793a72983abd..7eb208d2c321b 100644
> >> > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> >> > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> >> > @@ -5393,16 +5393,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)
> >>
> >> I don't think "check" is very intuitive in function names. Check
> >> something, but then what? Is it like an assert or does it do something
> >> active or what?
> >>
> >> What does a boolean return from a check function mean?
> >>
> >> It's not obvious to the reader at all.
> >
> > I agree, but in this patch I didn't want to change the function name.
>
> Arguably adding a return value changes the meaning already...
>
> >
> >>
> >> > {
> >> > 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;
> >>
> >> Looks like true means the check failed... while usually true for boolean
> >> functions means success.
> >
> > The function returns true as before if a full connector detection is needed.
>
> But it didn't return anything before! And that meaning is not conveyed
> to the reader in *any* reasonable way!
This function is the counterpart of intel_dp_check_link_service_irq()
both functions having the same purpose, reading and handling HPD IRQs.
The latter one's return value is true if a reprobe is needed and this
patch doesn't change that, it keeps the two functions behave the same
way.
> The absolute minimum is to add a comment (mind you, kernel-doc is
> overkill) stating what the return value means.
The function name will change in a follow-up patch and I think that
doesn't require a comment on the return value.
> >>
> >> >
> >> > - 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);
> >>
> >> Whoa, it's not a *check* function at all?! It actually *handles* the
> >> service irqs.
> >>
> >> Can we rephrase the function name?
> >
> > I want to keep the function name in this patch. In the following patches
> > I will separate this part and rename it to
> > intel_dp_get_and_ack_device_service_irq().
>
> Right, saw that now. But even for that function name the meaning of the
> return value is ambiguous.
All the get/ack IRQ functions in intel_dp.c return true for success.
>
> BR,
> Jani.
>
> >
> >
> >> int intel_dp_handle_device_service_irq() and int returns maybe?
> >> BR,
> >> Jani.
> >>
> >> > @@ -5412,6 +5416,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)
> >> > @@ -5476,8 +5482,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);
> >>
> >> --
> >> Jani Nikula, Intel
>
> --
> Jani Nikula, Intel
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 11/20] drm/i915/dp: Reprobe connector if getting/acking device IRQs fails
2025-06-26 10:43 ` Imre Deak
@ 2025-06-26 10:46 ` Jani Nikula
2025-06-26 10:56 ` Imre Deak
0 siblings, 1 reply; 62+ messages in thread
From: Jani Nikula @ 2025-06-26 10:46 UTC (permalink / raw)
To: imre.deak; +Cc: intel-gfx, intel-xe, Imre Deak
On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
> On Thu, Jun 26, 2025 at 01:23:12PM +0300, Jani Nikula wrote:
>> On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
>> > On Thu, Jun 26, 2025 at 12:12:11PM +0300, Jani Nikula wrote:
>> >> On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
>> >> > 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 7793a72983abd..7eb208d2c321b 100644
>> >> > --- a/drivers/gpu/drm/i915/display/intel_dp.c
>> >> > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
>> >> > @@ -5393,16 +5393,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)
>> >>
>> >> I don't think "check" is very intuitive in function names. Check
>> >> something, but then what? Is it like an assert or does it do something
>> >> active or what?
>> >>
>> >> What does a boolean return from a check function mean?
>> >>
>> >> It's not obvious to the reader at all.
>> >
>> > I agree, but in this patch I didn't want to change the function name.
>>
>> Arguably adding a return value changes the meaning already...
>>
>> >
>> >>
>> >> > {
>> >> > 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;
>> >>
>> >> Looks like true means the check failed... while usually true for boolean
>> >> functions means success.
>> >
>> > The function returns true as before if a full connector detection is needed.
>>
>> But it didn't return anything before! And that meaning is not conveyed
>> to the reader in *any* reasonable way!
>
> This function is the counterpart of intel_dp_check_link_service_irq()
> both functions having the same purpose, reading and handling HPD IRQs.
> The latter one's return value is true if a reprobe is needed and this
> patch doesn't change that, it keeps the two functions behave the same
> way.
>
>> The absolute minimum is to add a comment (mind you, kernel-doc is
>> overkill) stating what the return value means.
>
> The function name will change in a follow-up patch and I think that
> doesn't require a comment on the return value.
>
>> >>
>> >> >
>> >> > - 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);
>> >>
>> >> Whoa, it's not a *check* function at all?! It actually *handles* the
>> >> service irqs.
>> >>
>> >> Can we rephrase the function name?
>> >
>> > I want to keep the function name in this patch. In the following patches
>> > I will separate this part and rename it to
>> > intel_dp_get_and_ack_device_service_irq().
>>
>> Right, saw that now. But even for that function name the meaning of the
>> return value is ambiguous.
>
> All the get/ack IRQ functions in intel_dp.c return true for success.
Argh. You just said it doesn't mean success/failure, it means if full
connector detection is needed?!
BR,
Jani
>
>>
>> BR,
>> Jani.
>>
>> >
>> >
>> >> int intel_dp_handle_device_service_irq() and int returns maybe?
>> >> BR,
>> >> Jani.
>> >>
>> >> > @@ -5412,6 +5416,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)
>> >> > @@ -5476,8 +5482,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);
>> >>
>> >> --
>> >> Jani Nikula, Intel
>>
>> --
>> Jani Nikula, Intel
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 11/20] drm/i915/dp: Reprobe connector if getting/acking device IRQs fails
2025-06-26 10:46 ` Jani Nikula
@ 2025-06-26 10:56 ` Imre Deak
2025-07-03 11:28 ` Luca Coelho
0 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-26 10:56 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx, intel-xe, Imre Deak
On Thu, Jun 26, 2025 at 01:46:27PM +0300, Jani Nikula wrote:
> On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
> > On Thu, Jun 26, 2025 at 01:23:12PM +0300, Jani Nikula wrote:
> >> On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
> >> > On Thu, Jun 26, 2025 at 12:12:11PM +0300, Jani Nikula wrote:
> >> >> On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
> >> >> > 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 7793a72983abd..7eb208d2c321b 100644
> >> >> > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> >> >> > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> >> >> > @@ -5393,16 +5393,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)
> >> >>
> >> >> I don't think "check" is very intuitive in function names. Check
> >> >> something, but then what? Is it like an assert or does it do something
> >> >> active or what?
> >> >>
> >> >> What does a boolean return from a check function mean?
> >> >>
> >> >> It's not obvious to the reader at all.
> >> >
> >> > I agree, but in this patch I didn't want to change the function name.
> >>
> >> Arguably adding a return value changes the meaning already...
> >>
> >> >
> >> >>
> >> >> > {
> >> >> > 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;
> >> >>
> >> >> Looks like true means the check failed... while usually true for boolean
> >> >> functions means success.
> >> >
> >> > The function returns true as before if a full connector detection is needed.
> >>
> >> But it didn't return anything before! And that meaning is not conveyed
> >> to the reader in *any* reasonable way!
> >
> > This function is the counterpart of intel_dp_check_link_service_irq()
> > both functions having the same purpose, reading and handling HPD IRQs.
> > The latter one's return value is true if a reprobe is needed and this
> > patch doesn't change that, it keeps the two functions behave the same
> > way.
> >
> >> The absolute minimum is to add a comment (mind you, kernel-doc is
> >> overkill) stating what the return value means.
> >
> > The function name will change in a follow-up patch and I think that
> > doesn't require a comment on the return value.
> >
> >> >>
> >> >> >
> >> >> > - 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);
> >> >>
> >> >> Whoa, it's not a *check* function at all?! It actually *handles* the
> >> >> service irqs.
> >> >>
> >> >> Can we rephrase the function name?
> >> >
> >> > I want to keep the function name in this patch. In the following patches
> >> > I will separate this part and rename it to
> >> > intel_dp_get_and_ack_device_service_irq().
> >>
> >> Right, saw that now. But even for that function name the meaning of the
> >> return value is ambiguous.
> >
> > All the get/ack IRQ functions in intel_dp.c return true for success.
>
> Argh. You just said it doesn't mean success/failure, it means if full
> connector detection is needed?!
intel_dp_check_device_service_irq(),
intel_dp_check_link_service_irq() -> return value indicates if a
connector detection is needed.
intel_dp_get_and_ack_device_service_irq(),
intel_dp_get_and_ack_link_service_irq() -> return value indicates if
getting/acking the IRQ succeeded,s imilarly to
intel_dp_get_sink_irq_esi(), intel_dp_ack_sink_irq_esi().
> BR,
> Jani
>
>
> >
> >>
> >> BR,
> >> Jani.
> >>
> >> >
> >> >
> >> >> int intel_dp_handle_device_service_irq() and int returns maybe?
> >> >> BR,
> >> >> Jani.
> >> >>
> >> >> > @@ -5412,6 +5416,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)
> >> >> > @@ -5476,8 +5482,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);
> >> >>
> >> >> --
> >> >> Jani Nikula, Intel
> >>
> >> --
> >> Jani Nikula, Intel
>
> --
> Jani Nikula, Intel
^ permalink raw reply [flat|nested] 62+ messages in thread
* ✓ i915.CI.BAT: success for drm/i915/dp: Fix few SST HPD IRQ handling issues
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
` (19 preceding siblings ...)
2025-06-26 8:20 ` [PATCH 20/20] drm/i915/dp: Ack only the handled link " Imre Deak
@ 2025-06-26 13:06 ` Patchwork
2025-06-26 22:48 ` ✗ i915.CI.Full: failure " Patchwork
21 siblings, 0 replies; 62+ messages in thread
From: Patchwork @ 2025-06-26 13:06 UTC (permalink / raw)
To: Imre Deak; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 8693 bytes --]
== Series Details ==
Series: drm/i915/dp: Fix few SST HPD IRQ handling issues
URL : https://patchwork.freedesktop.org/series/150800/
State : success
== Summary ==
CI Bug Log - changes from CI_DRM_16760 -> Patchwork_150800v1
====================================================
Summary
-------
**SUCCESS**
No regressions found.
External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/index.html
Participating hosts (44 -> 43)
------------------------------
Additional (1): bat-arlh-2
Missing (2): bat-twl-1 fi-snb-2520m
Known issues
------------
Here are the changes found in Patchwork_150800v1 that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@fbdev@eof:
- bat-arlh-2: NOTRUN -> [SKIP][1] ([i915#11345] / [i915#11346]) +3 other tests skip
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/bat-arlh-2/igt@fbdev@eof.html
* igt@fbdev@info:
- bat-arlh-2: NOTRUN -> [SKIP][2] ([i915#11346] / [i915#1849])
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/bat-arlh-2/igt@fbdev@info.html
* igt@gem_lmem_swapping@basic:
- bat-arlh-2: NOTRUN -> [SKIP][3] ([i915#10213] / [i915#11346] / [i915#11671]) +3 other tests skip
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/bat-arlh-2/igt@gem_lmem_swapping@basic.html
* igt@gem_mmap@basic:
- bat-arlh-2: NOTRUN -> [SKIP][4] ([i915#11343] / [i915#11346])
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/bat-arlh-2/igt@gem_mmap@basic.html
* igt@gem_render_tiled_blits@basic:
- bat-arlh-2: NOTRUN -> [SKIP][5] ([i915#10197] / [i915#10211] / [i915#11346] / [i915#11725] / [i915#4079])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/bat-arlh-2/igt@gem_render_tiled_blits@basic.html
* igt@gem_tiled_blits@basic:
- bat-arlh-2: NOTRUN -> [SKIP][6] ([i915#11346] / [i915#12637]) +4 other tests skip
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/bat-arlh-2/igt@gem_tiled_blits@basic.html
* igt@gem_tiled_pread_basic:
- bat-arlh-2: NOTRUN -> [SKIP][7] ([i915#10206] / [i915#11346] / [i915#11724] / [i915#4079])
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/bat-arlh-2/igt@gem_tiled_pread_basic.html
* igt@i915_pm_rps@basic-api:
- bat-arlh-2: NOTRUN -> [SKIP][8] ([i915#10209] / [i915#11346] / [i915#11681])
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/bat-arlh-2/igt@i915_pm_rps@basic-api.html
* igt@i915_selftest@live@workarounds:
- bat-arlh-3: [PASS][9] -> [DMESG-FAIL][10] ([i915#12061]) +1 other test dmesg-fail
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/bat-arlh-3/igt@i915_selftest@live@workarounds.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/bat-arlh-3/igt@i915_selftest@live@workarounds.html
- bat-dg2-14: [PASS][11] -> [DMESG-FAIL][12] ([i915#12061]) +1 other test dmesg-fail
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/bat-dg2-14/igt@i915_selftest@live@workarounds.html
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/bat-dg2-14/igt@i915_selftest@live@workarounds.html
* igt@intel_hwmon@hwmon-read:
- bat-arlh-2: NOTRUN -> [SKIP][13] ([i915#11346] / [i915#11680] / [i915#7707]) +1 other test skip
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/bat-arlh-2/igt@intel_hwmon@hwmon-read.html
* igt@kms_addfb_basic@addfb25-y-tiled-small-legacy:
- bat-arlh-2: NOTRUN -> [SKIP][14] ([i915#10200] / [i915#11346] / [i915#11666] / [i915#12203])
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/bat-arlh-2/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html
* igt@kms_addfb_basic@basic-x-tiled-legacy:
- bat-arlh-2: NOTRUN -> [SKIP][15] ([i915#10200] / [i915#11346] / [i915#11666]) +8 other tests skip
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/bat-arlh-2/igt@kms_addfb_basic@basic-x-tiled-legacy.html
* igt@kms_pipe_crc_basic@nonblocking-crc:
- bat-arlh-2: NOTRUN -> [SKIP][16] ([i915#11190] / [i915#11346]) +16 other tests skip
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/bat-arlh-2/igt@kms_pipe_crc_basic@nonblocking-crc.html
* igt@kms_psr@psr-primary-page-flip:
- bat-arlh-2: NOTRUN -> [SKIP][17] ([i915#11346]) +15 other tests skip
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/bat-arlh-2/igt@kms_psr@psr-primary-page-flip.html
* igt@kms_setmode@basic-clone-single-crtc:
- bat-arlh-2: NOTRUN -> [SKIP][18] ([i915#10208] / [i915#11346] / [i915#8809])
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/bat-arlh-2/igt@kms_setmode@basic-clone-single-crtc.html
* igt@prime_vgem@basic-fence-read:
- bat-arlh-2: NOTRUN -> [SKIP][19] ([i915#10212] / [i915#11346] / [i915#11726])
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/bat-arlh-2/igt@prime_vgem@basic-fence-read.html
* igt@prime_vgem@basic-read:
- bat-arlh-2: NOTRUN -> [SKIP][20] ([i915#10214] / [i915#11346] / [i915#11726])
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/bat-arlh-2/igt@prime_vgem@basic-read.html
* igt@prime_vgem@basic-write:
- bat-arlh-2: NOTRUN -> [SKIP][21] ([i915#10216] / [i915#11346] / [i915#11723])
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/bat-arlh-2/igt@prime_vgem@basic-write.html
#### Possible fixes ####
* igt@i915_selftest@live@workarounds:
- bat-arls-5: [DMESG-FAIL][22] ([i915#12061]) -> [PASS][23] +1 other test pass
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/bat-arls-5/igt@i915_selftest@live@workarounds.html
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/bat-arls-5/igt@i915_selftest@live@workarounds.html
[i915#10197]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10197
[i915#10200]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10200
[i915#10206]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10206
[i915#10208]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10208
[i915#10209]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10209
[i915#10211]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10211
[i915#10212]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10212
[i915#10213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10213
[i915#10214]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10214
[i915#10216]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10216
[i915#11190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11190
[i915#11343]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11343
[i915#11345]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11345
[i915#11346]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11346
[i915#11666]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11666
[i915#11671]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11671
[i915#11680]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11680
[i915#11681]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11681
[i915#11723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11723
[i915#11724]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11724
[i915#11725]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11725
[i915#11726]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11726
[i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
[i915#12203]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12203
[i915#12637]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12637
[i915#1849]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1849
[i915#4079]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4079
[i915#7707]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7707
[i915#8809]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8809
Build changes
-------------
* Linux: CI_DRM_16760 -> Patchwork_150800v1
CI-20190529: 20190529
CI_DRM_16760: d76821a5677456269831568238080f923bc4bf49 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_8428: 8428
Patchwork_150800v1: d76821a5677456269831568238080f923bc4bf49 @ git://anongit.freedesktop.org/gfx-ci/linux
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/index.html
[-- Attachment #2: Type: text/html, Size: 11348 bytes --]
^ permalink raw reply [flat|nested] 62+ messages in thread
* ✗ i915.CI.Full: failure for drm/i915/dp: Fix few SST HPD IRQ handling issues
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
` (20 preceding siblings ...)
2025-06-26 13:06 ` ✓ i915.CI.BAT: success for drm/i915/dp: Fix few SST HPD IRQ handling issues Patchwork
@ 2025-06-26 22:48 ` Patchwork
21 siblings, 0 replies; 62+ messages in thread
From: Patchwork @ 2025-06-26 22:48 UTC (permalink / raw)
To: Imre Deak; +Cc: intel-gfx
[-- Attachment #1: Type: text/plain, Size: 109834 bytes --]
== Series Details ==
Series: drm/i915/dp: Fix few SST HPD IRQ handling issues
URL : https://patchwork.freedesktop.org/series/150800/
State : failure
== Summary ==
CI Bug Log - changes from CI_DRM_16760_full -> Patchwork_150800v1_full
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with Patchwork_150800v1_full absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in Patchwork_150800v1_full, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (10 -> 11)
------------------------------
Additional (1): shard-snb-0
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in Patchwork_150800v1_full:
### IGT changes ###
#### Possible regressions ####
* igt@kms_fbcon_fbt@fbc:
- shard-rkl: [PASS][1] -> [SKIP][2]
[1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-7/igt@kms_fbcon_fbt@fbc.html
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_fbcon_fbt@fbc.html
New tests
---------
New tests have been introduced between CI_DRM_16760_full and Patchwork_150800v1_full:
### New IGT tests (1) ###
* igt@kms_cursor_crc@cursor-size-change@pipe-b-hdmi-a-2:
- Statuses : 1 pass(s)
- Exec time: [0.60] s
Known issues
------------
Here are the changes found in Patchwork_150800v1_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@api_intel_bb@blit-reloc-keep-cache:
- shard-dg2: NOTRUN -> [SKIP][3] ([i915#8411])
[3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@api_intel_bb@blit-reloc-keep-cache.html
* igt@api_intel_bb@object-reloc-keep-cache:
- shard-dg2-9: NOTRUN -> [SKIP][4] ([i915#8411])
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@api_intel_bb@object-reloc-keep-cache.html
* igt@device_reset@unbind-cold-reset-rebind:
- shard-rkl: NOTRUN -> [SKIP][5] ([i915#11078])
[5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@device_reset@unbind-cold-reset-rebind.html
- shard-tglu: NOTRUN -> [SKIP][6] ([i915#11078])
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-7/igt@device_reset@unbind-cold-reset-rebind.html
* igt@fbdev@nullptr:
- shard-rkl: [PASS][7] -> [SKIP][8] ([i915#2582])
[7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-5/igt@fbdev@nullptr.html
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@fbdev@nullptr.html
* igt@gem_ccs@suspend-resume:
- shard-dg2: [PASS][9] -> [INCOMPLETE][10] ([i915#13356])
[9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg2-7/igt@gem_ccs@suspend-resume.html
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-1/igt@gem_ccs@suspend-resume.html
- shard-tglu-1: NOTRUN -> [SKIP][11] ([i915#9323])
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@gem_ccs@suspend-resume.html
* igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-lmem0-lmem0:
- shard-dg2: [PASS][12] -> [INCOMPLETE][13] ([i915#12392])
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg2-7/igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-lmem0-lmem0.html
[13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-1/igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-lmem0-lmem0.html
* igt@gem_close_race@multigpu-basic-process:
- shard-tglu-1: NOTRUN -> [SKIP][14] ([i915#7697])
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@gem_close_race@multigpu-basic-process.html
* igt@gem_compute@compute-square:
- shard-dg2-9: NOTRUN -> [FAIL][15] ([i915#13665])
[15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@gem_compute@compute-square.html
* igt@gem_create@create-ext-set-pat:
- shard-dg2: NOTRUN -> [SKIP][16] ([i915#8562])
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@gem_create@create-ext-set-pat.html
* igt@gem_ctx_freq@sysfs:
- shard-dg2-9: NOTRUN -> [FAIL][17] ([i915#9561]) +1 other test fail
[17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@gem_ctx_freq@sysfs.html
* igt@gem_ctx_persistence@heartbeat-hang:
- shard-dg2-9: NOTRUN -> [SKIP][18] ([i915#8555])
[18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@gem_ctx_persistence@heartbeat-hang.html
* igt@gem_ctx_sseu@invalid-sseu:
- shard-tglu-1: NOTRUN -> [SKIP][19] ([i915#280])
[19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@gem_ctx_sseu@invalid-sseu.html
* igt@gem_exec_balancer@bonded-sync:
- shard-dg2: NOTRUN -> [SKIP][20] ([i915#4771])
[20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@gem_exec_balancer@bonded-sync.html
* igt@gem_exec_balancer@parallel-ordering:
- shard-tglu-1: NOTRUN -> [SKIP][21] ([i915#4525]) +1 other test skip
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@gem_exec_balancer@parallel-ordering.html
* igt@gem_exec_capture@capture-recoverable:
- shard-tglu-1: NOTRUN -> [SKIP][22] ([i915#6344])
[22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@gem_exec_capture@capture-recoverable.html
* igt@gem_exec_capture@capture@vecs0-lmem0:
- shard-dg2: NOTRUN -> [FAIL][23] ([i915#11965]) +4 other tests fail
[23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@gem_exec_capture@capture@vecs0-lmem0.html
* igt@gem_exec_flush@basic-wb-ro-default:
- shard-dg2: NOTRUN -> [SKIP][24] ([i915#3539] / [i915#4852])
[24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@gem_exec_flush@basic-wb-ro-default.html
* igt@gem_exec_reloc@basic-gtt-cpu-noreloc:
- shard-dg2-9: NOTRUN -> [SKIP][25] ([i915#3281]) +5 other tests skip
[25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@gem_exec_reloc@basic-gtt-cpu-noreloc.html
* igt@gem_exec_reloc@basic-wc:
- shard-dg2: NOTRUN -> [SKIP][26] ([i915#3281]) +1 other test skip
[26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@gem_exec_reloc@basic-wc.html
* igt@gem_exec_reloc@basic-wc-gtt:
- shard-rkl: NOTRUN -> [SKIP][27] ([i915#3281]) +1 other test skip
[27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@gem_exec_reloc@basic-wc-gtt.html
* igt@gem_exec_schedule@preempt-queue-contexts:
- shard-dg2: NOTRUN -> [SKIP][28] ([i915#4537] / [i915#4812])
[28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@gem_exec_schedule@preempt-queue-contexts.html
* igt@gem_fence_thrash@bo-copy:
- shard-dg2-9: NOTRUN -> [SKIP][29] ([i915#4860])
[29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@gem_fence_thrash@bo-copy.html
* igt@gem_fenced_exec_thrash@2-spare-fences:
- shard-dg2: NOTRUN -> [SKIP][30] ([i915#4860]) +1 other test skip
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@gem_fenced_exec_thrash@2-spare-fences.html
* igt@gem_lmem_swapping@heavy-verify-random:
- shard-tglu: NOTRUN -> [SKIP][31] ([i915#4613])
[31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-6/igt@gem_lmem_swapping@heavy-verify-random.html
* igt@gem_lmem_swapping@parallel-multi:
- shard-tglu-1: NOTRUN -> [SKIP][32] ([i915#4613]) +2 other tests skip
[32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@gem_lmem_swapping@parallel-multi.html
* igt@gem_lmem_swapping@smem-oom@lmem0:
- shard-dg1: [PASS][33] -> [DMESG-WARN][34] ([i915#5493]) +1 other test dmesg-warn
[33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg1-16/igt@gem_lmem_swapping@smem-oom@lmem0.html
[34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg1-12/igt@gem_lmem_swapping@smem-oom@lmem0.html
* igt@gem_mmap@basic:
- shard-dg2-9: NOTRUN -> [SKIP][35] ([i915#4083]) +3 other tests skip
[35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@gem_mmap@basic.html
* igt@gem_mmap_gtt@hang-busy:
- shard-dg2-9: NOTRUN -> [SKIP][36] ([i915#4077]) +1 other test skip
[36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@gem_mmap_gtt@hang-busy.html
* igt@gem_mmap_wc@pf-nonblock:
- shard-dg2: NOTRUN -> [SKIP][37] ([i915#4083])
[37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@gem_mmap_wc@pf-nonblock.html
* igt@gem_partial_pwrite_pread@reads-display:
- shard-dg2-9: NOTRUN -> [SKIP][38] ([i915#3282]) +2 other tests skip
[38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@gem_partial_pwrite_pread@reads-display.html
* igt@gem_partial_pwrite_pread@reads-snoop:
- shard-dg2: NOTRUN -> [SKIP][39] ([i915#3282])
[39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@gem_partial_pwrite_pread@reads-snoop.html
* igt@gem_pxp@create-regular-buffer:
- shard-dg2-9: NOTRUN -> [SKIP][40] ([i915#4270]) +1 other test skip
[40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@gem_pxp@create-regular-buffer.html
* igt@gem_pxp@create-regular-context-2:
- shard-dg2: NOTRUN -> [SKIP][41] ([i915#4270]) +1 other test skip
[41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@gem_pxp@create-regular-context-2.html
* igt@gem_pxp@hw-rejects-pxp-context:
- shard-rkl: NOTRUN -> [TIMEOUT][42] ([i915#12917] / [i915#12964])
[42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@gem_pxp@hw-rejects-pxp-context.html
- shard-tglu: NOTRUN -> [SKIP][43] ([i915#13398])
[43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-7/igt@gem_pxp@hw-rejects-pxp-context.html
* igt@gem_readwrite@beyond-eob:
- shard-rkl: NOTRUN -> [SKIP][44] ([i915#3282]) +1 other test skip
[44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@gem_readwrite@beyond-eob.html
* igt@gem_render_copy@mixed-tiled-to-y-tiled-ccs:
- shard-dg2-9: NOTRUN -> [SKIP][45] ([i915#5190] / [i915#8428]) +1 other test skip
[45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@gem_render_copy@mixed-tiled-to-y-tiled-ccs.html
* igt@gem_render_copy@yf-tiled:
- shard-dg2: NOTRUN -> [SKIP][46] ([i915#5190] / [i915#8428]) +2 other tests skip
[46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@gem_render_copy@yf-tiled.html
* igt@gem_set_tiling_vs_blt@tiled-to-untiled:
- shard-dg2-9: NOTRUN -> [SKIP][47] ([i915#4079])
[47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@gem_set_tiling_vs_blt@tiled-to-untiled.html
* igt@gem_set_tiling_vs_blt@untiled-to-tiled:
- shard-rkl: NOTRUN -> [SKIP][48] ([i915#8411])
[48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@gem_set_tiling_vs_blt@untiled-to-tiled.html
* igt@gem_tiled_blits@basic:
- shard-dg2: NOTRUN -> [SKIP][49] ([i915#4077]) +9 other tests skip
[49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@gem_tiled_blits@basic.html
* igt@gem_userptr_blits@coherency-sync:
- shard-rkl: NOTRUN -> [SKIP][50] ([i915#3297])
[50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@gem_userptr_blits@coherency-sync.html
- shard-tglu: NOTRUN -> [SKIP][51] ([i915#3297])
[51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-7/igt@gem_userptr_blits@coherency-sync.html
* igt@gem_userptr_blits@invalid-mmap-offset-unsync:
- shard-dg2: NOTRUN -> [SKIP][52] ([i915#3297])
[52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@gem_userptr_blits@invalid-mmap-offset-unsync.html
* igt@gem_userptr_blits@unsync-overlap:
- shard-dg2-9: NOTRUN -> [SKIP][53] ([i915#3297])
[53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@gem_userptr_blits@unsync-overlap.html
* igt@gem_userptr_blits@unsync-unmap:
- shard-tglu-1: NOTRUN -> [SKIP][54] ([i915#3297])
[54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@gem_userptr_blits@unsync-unmap.html
* igt@gem_wait@wait@vcs0:
- shard-rkl: [PASS][55] -> [DMESG-WARN][56] ([i915#12964]) +5 other tests dmesg-warn
[55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-7/igt@gem_wait@wait@vcs0.html
[56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@gem_wait@wait@vcs0.html
* igt@gen3_render_tiledy_blits:
- shard-dg2-9: NOTRUN -> [SKIP][57] +11 other tests skip
[57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@gen3_render_tiledy_blits.html
* igt@gen9_exec_parse@bb-start-param:
- shard-tglu-1: NOTRUN -> [SKIP][58] ([i915#2527] / [i915#2856]) +3 other tests skip
[58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@gen9_exec_parse@bb-start-param.html
* igt@gen9_exec_parse@cmd-crossing-page:
- shard-tglu: NOTRUN -> [SKIP][59] ([i915#2527] / [i915#2856])
[59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-7/igt@gen9_exec_parse@cmd-crossing-page.html
- shard-rkl: NOTRUN -> [SKIP][60] ([i915#2527])
[60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@gen9_exec_parse@cmd-crossing-page.html
* igt@gen9_exec_parse@shadow-peek:
- shard-dg2: NOTRUN -> [SKIP][61] ([i915#2856]) +1 other test skip
[61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@gen9_exec_parse@shadow-peek.html
* igt@gen9_exec_parse@valid-registers:
- shard-dg2-9: NOTRUN -> [SKIP][62] ([i915#2856])
[62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@gen9_exec_parse@valid-registers.html
* igt@i915_drm_fdinfo@busy-idle@vecs0:
- shard-dg2: NOTRUN -> [SKIP][63] ([i915#14073]) +7 other tests skip
[63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@i915_drm_fdinfo@busy-idle@vecs0.html
* igt@i915_module_load@reload-no-display:
- shard-tglu-1: NOTRUN -> [DMESG-WARN][64] ([i915#13029] / [i915#14545])
[64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@i915_module_load@reload-no-display.html
* igt@i915_pm_freq_api@freq-basic-api:
- shard-tglu: NOTRUN -> [SKIP][65] ([i915#8399])
[65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-6/igt@i915_pm_freq_api@freq-basic-api.html
* igt@i915_pm_freq_api@freq-reset:
- shard-tglu-1: NOTRUN -> [SKIP][66] ([i915#8399])
[66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@i915_pm_freq_api@freq-reset.html
* igt@i915_pm_rc6_residency@media-rc6-accuracy:
- shard-rkl: NOTRUN -> [SKIP][67] +3 other tests skip
[67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@i915_pm_rc6_residency@media-rc6-accuracy.html
* igt@i915_pm_rps@thresholds:
- shard-dg2-9: NOTRUN -> [SKIP][68] ([i915#11681])
[68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@i915_pm_rps@thresholds.html
* igt@i915_pm_sseu@full-enable:
- shard-tglu-1: NOTRUN -> [SKIP][69] ([i915#4387])
[69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@i915_pm_sseu@full-enable.html
* igt@i915_selftest@live@workarounds:
- shard-dg2: [PASS][70] -> [DMESG-FAIL][71] ([i915#12061]) +1 other test dmesg-fail
[70]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg2-8/igt@i915_selftest@live@workarounds.html
[71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-2/igt@i915_selftest@live@workarounds.html
* igt@kms_addfb_basic@addfb25-x-tiled-mismatch-legacy:
- shard-dg2-9: NOTRUN -> [SKIP][72] ([i915#4212])
[72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_addfb_basic@addfb25-x-tiled-mismatch-legacy.html
* igt@kms_async_flips@async-flip-with-page-flip-events-tiled@pipe-c-dp-3-4-mc-ccs:
- shard-dg2: NOTRUN -> [SKIP][73] ([i915#8709]) +7 other tests skip
[73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@kms_async_flips@async-flip-with-page-flip-events-tiled@pipe-c-dp-3-4-mc-ccs.html
* igt@kms_async_flips@async-flip-with-page-flip-events-tiled@pipe-d-hdmi-a-4-y-rc-ccs-cc:
- shard-dg1: NOTRUN -> [SKIP][74] ([i915#8709]) +3 other tests skip
[74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg1-15/igt@kms_async_flips@async-flip-with-page-flip-events-tiled@pipe-d-hdmi-a-4-y-rc-ccs-cc.html
* igt@kms_async_flips@invalid-async-flip-atomic:
- shard-dg2-9: NOTRUN -> [SKIP][75] ([i915#12967])
[75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_async_flips@invalid-async-flip-atomic.html
* igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels:
- shard-rkl: NOTRUN -> [SKIP][76] ([i915#1769] / [i915#3555])
[76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html
- shard-tglu: NOTRUN -> [SKIP][77] ([i915#1769] / [i915#3555])
[77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-7/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html
* igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels:
- shard-dg2: NOTRUN -> [SKIP][78] ([i915#1769] / [i915#3555])
[78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels.html
* igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-hdmi-a-1:
- shard-tglu-1: NOTRUN -> [FAIL][79] ([i915#11808]) +1 other test fail
[79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-hdmi-a-1.html
* igt@kms_big_fb@4-tiled-8bpp-rotate-180:
- shard-tglu-1: NOTRUN -> [SKIP][80] ([i915#5286]) +4 other tests skip
[80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_big_fb@4-tiled-8bpp-rotate-180.html
* igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
- shard-tglu: NOTRUN -> [SKIP][81] ([i915#5286]) +1 other test skip
[81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-6/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
* igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-async-flip:
- shard-rkl: NOTRUN -> [SKIP][82] ([i915#5286])
[82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html
* igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180:
- shard-mtlp: [PASS][83] -> [FAIL][84] ([i915#5138])
[83]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-mtlp-4/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180.html
[84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-mtlp-6/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180.html
* igt@kms_big_fb@y-tiled-64bpp-rotate-0:
- shard-dg2: NOTRUN -> [SKIP][85] ([i915#4538] / [i915#5190]) +4 other tests skip
[85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@kms_big_fb@y-tiled-64bpp-rotate-0.html
* igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip:
- shard-rkl: [PASS][86] -> [SKIP][87] ([i915#14544]) +43 other tests skip
[86]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-4/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
[87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
- shard-dg2-9: NOTRUN -> [SKIP][88] ([i915#4538] / [i915#5190]) +5 other tests skip
[88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
* igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs:
- shard-tglu-1: NOTRUN -> [SKIP][89] ([i915#12313])
[89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs.html
* igt@kms_ccs@bad-rotation-90-4-tiled-dg2-rc-ccs-cc@pipe-a-hdmi-a-2:
- shard-rkl: NOTRUN -> [SKIP][90] ([i915#6095]) +30 other tests skip
[90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-3/igt@kms_ccs@bad-rotation-90-4-tiled-dg2-rc-ccs-cc@pipe-a-hdmi-a-2.html
* igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2:
- shard-rkl: NOTRUN -> [SKIP][91] ([i915#14098] / [i915#6095]) +32 other tests skip
[91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-3/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2.html
* igt@kms_ccs@crc-primary-basic-y-tiled-gen12-rc-ccs@pipe-d-hdmi-a-1:
- shard-dg2: NOTRUN -> [SKIP][92] ([i915#10307] / [i915#10434] / [i915#6095]) +3 other tests skip
[92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-4/igt@kms_ccs@crc-primary-basic-y-tiled-gen12-rc-ccs@pipe-d-hdmi-a-1.html
* igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs-cc@pipe-b-hdmi-a-1:
- shard-tglu-1: NOTRUN -> [SKIP][93] ([i915#6095]) +54 other tests skip
[93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs-cc@pipe-b-hdmi-a-1.html
* igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs@pipe-c-hdmi-a-1:
- shard-tglu: NOTRUN -> [SKIP][94] ([i915#6095]) +19 other tests skip
[94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-6/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs@pipe-c-hdmi-a-1.html
* igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-b-dp-3:
- shard-dg2: NOTRUN -> [SKIP][95] ([i915#6095]) +8 other tests skip
[95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-b-dp-3.html
* igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs:
- shard-tglu: NOTRUN -> [SKIP][96] ([i915#12313])
[96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-6/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs.html
- shard-dg2-9: NOTRUN -> [SKIP][97] ([i915#12313]) +1 other test skip
[97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs.html
* igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-3:
- shard-dg2: NOTRUN -> [SKIP][98] ([i915#10307] / [i915#6095]) +157 other tests skip
[98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-8/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-3.html
* igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-4:
- shard-dg1: NOTRUN -> [SKIP][99] ([i915#6095]) +111 other tests skip
[99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg1-15/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-4.html
* igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-c-hdmi-a-2:
- shard-dg2-9: NOTRUN -> [SKIP][100] ([i915#10307] / [i915#6095]) +34 other tests skip
[100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_ccs@random-ccs-data-yf-tiled-ccs@pipe-c-hdmi-a-2.html
* igt@kms_cdclk@mode-transition-all-outputs:
- shard-tglu-1: NOTRUN -> [SKIP][101] ([i915#3742])
[101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_cdclk@mode-transition-all-outputs.html
* igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-3:
- shard-dg2: NOTRUN -> [SKIP][102] ([i915#13781]) +3 other tests skip
[102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-8/igt@kms_cdclk@mode-transition@pipe-d-hdmi-a-3.html
* igt@kms_cdclk@plane-scaling@pipe-d-hdmi-a-1:
- shard-dg2: NOTRUN -> [SKIP][103] ([i915#13783]) +3 other tests skip
[103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-4/igt@kms_cdclk@plane-scaling@pipe-d-hdmi-a-1.html
* igt@kms_chamelium_audio@dp-audio:
- shard-tglu: NOTRUN -> [SKIP][104] ([i915#11151] / [i915#7828]) +3 other tests skip
[104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-6/igt@kms_chamelium_audio@dp-audio.html
- shard-dg2-9: NOTRUN -> [SKIP][105] ([i915#11151] / [i915#7828]) +2 other tests skip
[105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_chamelium_audio@dp-audio.html
* igt@kms_chamelium_audio@hdmi-audio-edid:
- shard-tglu-1: NOTRUN -> [SKIP][106] ([i915#11151] / [i915#7828]) +7 other tests skip
[106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_chamelium_audio@hdmi-audio-edid.html
* igt@kms_chamelium_color@ctm-0-50:
- shard-dg2: NOTRUN -> [SKIP][107] +2 other tests skip
[107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@kms_chamelium_color@ctm-0-50.html
* igt@kms_chamelium_edid@hdmi-edid-stress-resolution-non-4k:
- shard-dg2: NOTRUN -> [SKIP][108] ([i915#11151] / [i915#7828]) +4 other tests skip
[108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@kms_chamelium_edid@hdmi-edid-stress-resolution-non-4k.html
* igt@kms_chamelium_frames@hdmi-crc-nonplanar-formats:
- shard-rkl: NOTRUN -> [SKIP][109] ([i915#11151] / [i915#7828]) +1 other test skip
[109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_chamelium_frames@hdmi-crc-nonplanar-formats.html
* igt@kms_color@ctm-0-50:
- shard-rkl: [PASS][110] -> [SKIP][111] ([i915#12655])
[110]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-5/igt@kms_color@ctm-0-50.html
[111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_color@ctm-0-50.html
* igt@kms_color@deep-color:
- shard-tglu-1: NOTRUN -> [SKIP][112] ([i915#3555] / [i915#9979])
[112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_color@deep-color.html
* igt@kms_content_protection@dp-mst-lic-type-1:
- shard-dg2: NOTRUN -> [SKIP][113] ([i915#3299])
[113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@kms_content_protection@dp-mst-lic-type-1.html
* igt@kms_content_protection@dp-mst-type-1:
- shard-tglu-1: NOTRUN -> [SKIP][114] ([i915#3116] / [i915#3299])
[114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_content_protection@dp-mst-type-1.html
* igt@kms_content_protection@lic-type-0:
- shard-tglu-1: NOTRUN -> [SKIP][115] ([i915#6944] / [i915#9424])
[115]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_content_protection@lic-type-0.html
* igt@kms_cursor_crc@cursor-onscreen-512x170:
- shard-dg2-9: NOTRUN -> [SKIP][116] ([i915#13049])
[116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_cursor_crc@cursor-onscreen-512x170.html
- shard-tglu: NOTRUN -> [SKIP][117] ([i915#13049])
[117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-6/igt@kms_cursor_crc@cursor-onscreen-512x170.html
* igt@kms_cursor_crc@cursor-onscreen-64x21:
- shard-rkl: NOTRUN -> [FAIL][118] ([i915#13566]) +1 other test fail
[118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_cursor_crc@cursor-onscreen-64x21.html
* igt@kms_cursor_crc@cursor-onscreen-64x21@pipe-a-hdmi-a-1:
- shard-tglu: NOTRUN -> [FAIL][119] ([i915#13566]) +1 other test fail
[119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-7/igt@kms_cursor_crc@cursor-onscreen-64x21@pipe-a-hdmi-a-1.html
* igt@kms_cursor_crc@cursor-random-512x170:
- shard-tglu-1: NOTRUN -> [SKIP][120] ([i915#13049]) +2 other tests skip
[120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_cursor_crc@cursor-random-512x170.html
* igt@kms_cursor_crc@cursor-sliding-32x32:
- shard-tglu: NOTRUN -> [SKIP][121] ([i915#3555])
[121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-7/igt@kms_cursor_crc@cursor-sliding-32x32.html
* igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size:
- shard-tglu-1: NOTRUN -> [SKIP][122] ([i915#4103]) +1 other test skip
[122]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html
* igt@kms_cursor_legacy@basic-flip-after-cursor-varying-size:
- shard-rkl: [PASS][123] -> [SKIP][124] ([i915#11190] / [i915#14544]) +1 other test skip
[123]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-5/igt@kms_cursor_legacy@basic-flip-after-cursor-varying-size.html
[124]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_cursor_legacy@basic-flip-after-cursor-varying-size.html
* igt@kms_cursor_legacy@cursora-vs-flipb-toggle:
- shard-dg2-9: NOTRUN -> [SKIP][125] ([i915#13046] / [i915#5354]) +2 other tests skip
[125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_cursor_legacy@cursora-vs-flipb-toggle.html
* igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions:
- shard-rkl: [PASS][126] -> [FAIL][127] ([i915#2346])
[126]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-3/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html
[127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html
* igt@kms_dirtyfb@drrs-dirtyfb-ioctl:
- shard-dg2-9: NOTRUN -> [SKIP][128] ([i915#9833])
[128]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_dirtyfb@drrs-dirtyfb-ioctl.html
* igt@kms_dp_link_training@non-uhbr-mst:
- shard-tglu-1: NOTRUN -> [SKIP][129] ([i915#13749]) +1 other test skip
[129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_dp_link_training@non-uhbr-mst.html
* igt@kms_draw_crc@draw-method-mmap-gtt:
- shard-dg2: NOTRUN -> [SKIP][130] ([i915#8812])
[130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@kms_draw_crc@draw-method-mmap-gtt.html
* igt@kms_dsc@dsc-basic:
- shard-tglu: NOTRUN -> [SKIP][131] ([i915#3555] / [i915#3840]) +1 other test skip
[131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-6/igt@kms_dsc@dsc-basic.html
- shard-dg2-9: NOTRUN -> [SKIP][132] ([i915#3555] / [i915#3840])
[132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_dsc@dsc-basic.html
* igt@kms_dsc@dsc-fractional-bpp:
- shard-tglu-1: NOTRUN -> [SKIP][133] ([i915#3840])
[133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_dsc@dsc-fractional-bpp.html
* igt@kms_dsc@dsc-with-bpc:
- shard-rkl: NOTRUN -> [SKIP][134] ([i915#3555] / [i915#3840])
[134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_dsc@dsc-with-bpc.html
* igt@kms_fbcon_fbt@psr-suspend:
- shard-tglu-1: NOTRUN -> [SKIP][135] ([i915#3469])
[135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_fbcon_fbt@psr-suspend.html
* igt@kms_feature_discovery@display-2x:
- shard-dg2-9: NOTRUN -> [SKIP][136] ([i915#1839])
[136]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_feature_discovery@display-2x.html
* igt@kms_feature_discovery@psr1:
- shard-rkl: NOTRUN -> [SKIP][137] ([i915#658])
[137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-3/igt@kms_feature_discovery@psr1.html
- shard-tglu-1: NOTRUN -> [SKIP][138] ([i915#658])
[138]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_feature_discovery@psr1.html
* igt@kms_flip@2x-absolute-wf_vblank-interruptible:
- shard-dg2: NOTRUN -> [SKIP][139] ([i915#9934]) +2 other tests skip
[139]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@kms_flip@2x-absolute-wf_vblank-interruptible.html
* igt@kms_flip@2x-blocking-wf_vblank:
- shard-tglu-1: NOTRUN -> [SKIP][140] ([i915#3637] / [i915#9934]) +2 other tests skip
[140]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_flip@2x-blocking-wf_vblank.html
* igt@kms_flip@2x-flip-vs-absolute-wf_vblank:
- shard-tglu: NOTRUN -> [SKIP][141] ([i915#3637] / [i915#9934]) +1 other test skip
[141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-6/igt@kms_flip@2x-flip-vs-absolute-wf_vblank.html
- shard-dg2-9: NOTRUN -> [SKIP][142] ([i915#9934]) +3 other tests skip
[142]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_flip@2x-flip-vs-absolute-wf_vblank.html
* igt@kms_flip@2x-flip-vs-dpms-on-nop:
- shard-tglu: NOTRUN -> [SKIP][143] ([i915#9934])
[143]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-6/igt@kms_flip@2x-flip-vs-dpms-on-nop.html
* igt@kms_flip@2x-flip-vs-dpms-on-nop-interruptible:
- shard-tglu-1: NOTRUN -> [SKIP][144] ([i915#9934])
[144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_flip@2x-flip-vs-dpms-on-nop-interruptible.html
* igt@kms_flip@2x-flip-vs-suspend@ab-vga1-hdmi-a1:
- shard-snb: [PASS][145] -> [TIMEOUT][146] ([i915#14033]) +1 other test timeout
[145]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-snb7/igt@kms_flip@2x-flip-vs-suspend@ab-vga1-hdmi-a1.html
[146]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-snb4/igt@kms_flip@2x-flip-vs-suspend@ab-vga1-hdmi-a1.html
* igt@kms_flip@2x-plain-flip:
- shard-rkl: NOTRUN -> [SKIP][147] ([i915#9934])
[147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_flip@2x-plain-flip.html
* igt@kms_flip@basic-flip-vs-dpms@b-hdmi-a2:
- shard-rkl: NOTRUN -> [DMESG-WARN][148] ([i915#12964]) +4 other tests dmesg-warn
[148]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-3/igt@kms_flip@basic-flip-vs-dpms@b-hdmi-a2.html
* igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible:
- shard-rkl: [PASS][149] -> [SKIP][150] ([i915#3637]) +4 other tests skip
[149]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-5/igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible.html
[150]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible.html
* igt@kms_flip@plain-flip-fb-recreate@a-vga1:
- shard-snb: [PASS][151] -> [FAIL][152] ([i915#13734]) +2 other tests fail
[151]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-snb2/igt@kms_flip@plain-flip-fb-recreate@a-vga1.html
[152]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-snb6/igt@kms_flip@plain-flip-fb-recreate@a-vga1.html
* igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling:
- shard-tglu-1: NOTRUN -> [SKIP][153] ([i915#2672] / [i915#3555]) +1 other test skip
[153]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling.html
* igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-downscaling:
- shard-rkl: [PASS][154] -> [SKIP][155] ([i915#3555]) +1 other test skip
[154]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-7/igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-downscaling.html
[155]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-downscaling.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling@pipe-a-valid-mode:
- shard-tglu-1: NOTRUN -> [SKIP][156] ([i915#2587] / [i915#2672]) +1 other test skip
[156]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-downscaling@pipe-a-valid-mode:
- shard-rkl: NOTRUN -> [SKIP][157] ([i915#2672]) +3 other tests skip
[157]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-7/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-downscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling:
- shard-tglu: NOTRUN -> [SKIP][158] ([i915#2672] / [i915#3555])
[158]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-6/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling@pipe-a-valid-mode:
- shard-tglu: NOTRUN -> [SKIP][159] ([i915#2587] / [i915#2672])
[159]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-6/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-upscaling@pipe-a-valid-mode:
- shard-dg2: NOTRUN -> [SKIP][160] ([i915#2672]) +3 other tests skip
[160]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-upscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling:
- shard-dg2: NOTRUN -> [SKIP][161] ([i915#2672] / [i915#3555] / [i915#5190]) +3 other tests skip
[161]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling.html
* igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-mmap-cpu:
- shard-rkl: [PASS][162] -> [SKIP][163] ([i915#1849] / [i915#5354]) +8 other tests skip
[162]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-7/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-mmap-cpu.html
[163]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-mmap-cpu.html
* igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-cpu:
- shard-dg2: NOTRUN -> [FAIL][164] ([i915#6880])
[164]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-cpu.html
* igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-pwrite:
- shard-dg2: [PASS][165] -> [FAIL][166] ([i915#6880]) +1 other test fail
[165]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg2-2/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-pwrite.html
[166]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-5/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-pwrite.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-pwrite:
- shard-dg2-9: NOTRUN -> [SKIP][167] ([i915#5354]) +15 other tests skip
[167]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-pwrite.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-mmap-cpu:
- shard-dg2: NOTRUN -> [SKIP][168] ([i915#3458]) +8 other tests skip
[168]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-indfb-draw-mmap-cpu.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-cur-indfb-draw-mmap-gtt:
- shard-dg2: NOTRUN -> [SKIP][169] ([i915#8708]) +6 other tests skip
[169]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-cur-indfb-draw-mmap-gtt.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt:
- shard-rkl: NOTRUN -> [SKIP][170] ([i915#1825]) +5 other tests skip
[170]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-pwrite:
- shard-dg2-9: NOTRUN -> [SKIP][171] ([i915#3458]) +6 other tests skip
[171]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-pwrite.html
* igt@kms_frontbuffer_tracking@fbcpsr-tiling-y:
- shard-dg2-9: NOTRUN -> [SKIP][172] ([i915#10055])
[172]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_frontbuffer_tracking@fbcpsr-tiling-y.html
* igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-indfb-draw-mmap-cpu:
- shard-tglu: NOTRUN -> [SKIP][173] +45 other tests skip
[173]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-7/igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-indfb-draw-mmap-cpu.html
* igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-indfb-draw-mmap-gtt:
- shard-dg2-9: NOTRUN -> [SKIP][174] ([i915#8708]) +10 other tests skip
[174]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-indfb-draw-mmap-gtt.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-shrfb-msflip-blt:
- shard-rkl: NOTRUN -> [SKIP][175] ([i915#3023]) +5 other tests skip
[175]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_frontbuffer_tracking@psr-1p-primscrn-shrfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@psr-2p-primscrn-pri-indfb-draw-render:
- shard-dg2: NOTRUN -> [SKIP][176] ([i915#5354]) +16 other tests skip
[176]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@kms_frontbuffer_tracking@psr-2p-primscrn-pri-indfb-draw-render.html
* igt@kms_hdr@brightness-with-hdr:
- shard-tglu-1: NOTRUN -> [SKIP][177] ([i915#12713])
[177]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_hdr@brightness-with-hdr.html
* igt@kms_hdr@static-toggle-dpms:
- shard-tglu-1: NOTRUN -> [SKIP][178] ([i915#3555] / [i915#8228])
[178]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_hdr@static-toggle-dpms.html
* igt@kms_hdr@static-toggle-suspend:
- shard-dg2: [PASS][179] -> [SKIP][180] ([i915#3555] / [i915#8228]) +2 other tests skip
[179]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg2-11/igt@kms_hdr@static-toggle-suspend.html
[180]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-7/igt@kms_hdr@static-toggle-suspend.html
* igt@kms_invalid_mode@bad-htotal:
- shard-rkl: [PASS][181] -> [SKIP][182] ([i915#3555] / [i915#8826]) +2 other tests skip
[181]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-4/igt@kms_invalid_mode@bad-htotal.html
[182]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_invalid_mode@bad-htotal.html
* igt@kms_joiner@invalid-modeset-big-joiner:
- shard-tglu-1: NOTRUN -> [SKIP][183] ([i915#10656])
[183]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_joiner@invalid-modeset-big-joiner.html
* igt@kms_joiner@invalid-modeset-force-big-joiner:
- shard-dg2-9: NOTRUN -> [SKIP][184] ([i915#12388])
[184]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_joiner@invalid-modeset-force-big-joiner.html
* igt@kms_joiner@invalid-modeset-ultra-joiner:
- shard-tglu-1: NOTRUN -> [SKIP][185] ([i915#12339])
[185]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_joiner@invalid-modeset-ultra-joiner.html
* igt@kms_panel_fitting@atomic-fastset:
- shard-dg2-9: NOTRUN -> [SKIP][186] ([i915#6301])
[186]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_panel_fitting@atomic-fastset.html
* igt@kms_pipe_b_c_ivb@enable-pipe-c-while-b-has-3-lanes:
- shard-tglu-1: NOTRUN -> [SKIP][187] +61 other tests skip
[187]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_pipe_b_c_ivb@enable-pipe-c-while-b-has-3-lanes.html
* igt@kms_plane@plane-panning-bottom-right:
- shard-rkl: [PASS][188] -> [SKIP][189] ([i915#8825])
[188]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-4/igt@kms_plane@plane-panning-bottom-right.html
[189]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_plane@plane-panning-bottom-right.html
* igt@kms_plane_alpha_blend@alpha-7efc:
- shard-rkl: [PASS][190] -> [SKIP][191] ([i915#7294])
[190]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-5/igt@kms_plane_alpha_blend@alpha-7efc.html
[191]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_plane_alpha_blend@alpha-7efc.html
* igt@kms_plane_multiple@2x-tiling-4:
- shard-dg2: NOTRUN -> [SKIP][192] ([i915#13958])
[192]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@kms_plane_multiple@2x-tiling-4.html
* igt@kms_plane_multiple@2x-tiling-y:
- shard-rkl: NOTRUN -> [SKIP][193] ([i915#13958])
[193]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_plane_multiple@2x-tiling-y.html
- shard-tglu: NOTRUN -> [SKIP][194] ([i915#13958])
[194]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-7/igt@kms_plane_multiple@2x-tiling-y.html
* igt@kms_plane_multiple@2x-tiling-yf:
- shard-dg2-9: NOTRUN -> [SKIP][195] ([i915#13958])
[195]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_plane_multiple@2x-tiling-yf.html
* igt@kms_plane_multiple@tiling-4:
- shard-tglu-1: NOTRUN -> [SKIP][196] ([i915#14259])
[196]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_plane_multiple@tiling-4.html
* igt@kms_plane_scaling@intel-max-src-size:
- shard-dg2: [PASS][197] -> [SKIP][198] ([i915#6953] / [i915#9423])
[197]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg2-11/igt@kms_plane_scaling@intel-max-src-size.html
[198]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-8/igt@kms_plane_scaling@intel-max-src-size.html
* igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats:
- shard-rkl: [PASS][199] -> [SKIP][200] ([i915#3555] / [i915#8152])
[199]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-4/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats.html
[200]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats.html
* igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-a:
- shard-rkl: [PASS][201] -> [SKIP][202] ([i915#12247]) +2 other tests skip
[201]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-4/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-a.html
[202]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-a.html
* igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-b:
- shard-rkl: [PASS][203] -> [SKIP][204] ([i915#12247] / [i915#8152]) +3 other tests skip
[203]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-4/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-b.html
[204]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-pixel-formats@pipe-b.html
* igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation:
- shard-tglu-1: NOTRUN -> [SKIP][205] ([i915#3555]) +4 other tests skip
[205]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation.html
* igt@kms_plane_scaling@plane-upscale-factor-0-25-with-rotation@pipe-d:
- shard-tglu-1: NOTRUN -> [SKIP][206] ([i915#12247]) +8 other tests skip
[206]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_plane_scaling@plane-upscale-factor-0-25-with-rotation@pipe-d.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-a:
- shard-rkl: NOTRUN -> [SKIP][207] ([i915#12247]) +2 other tests skip
[207]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-a.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20:
- shard-dg2-9: NOTRUN -> [SKIP][208] ([i915#12247] / [i915#9423])
[208]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20.html
* igt@kms_plane_scaling@planes-downscale-factor-0-75-upscale-factor-0-25:
- shard-rkl: [PASS][209] -> [SKIP][210] ([i915#6953] / [i915#8152])
[209]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-7/igt@kms_plane_scaling@planes-downscale-factor-0-75-upscale-factor-0-25.html
[210]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_plane_scaling@planes-downscale-factor-0-75-upscale-factor-0-25.html
* igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25:
- shard-tglu: NOTRUN -> [SKIP][211] ([i915#12247] / [i915#3555])
[211]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-6/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25.html
- shard-dg2-9: NOTRUN -> [SKIP][212] ([i915#12247] / [i915#3555] / [i915#9423])
[212]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25.html
* igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-a:
- shard-tglu: NOTRUN -> [SKIP][213] ([i915#12247]) +8 other tests skip
[213]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-6/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-a.html
* igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-d:
- shard-dg2-9: NOTRUN -> [SKIP][214] ([i915#12247]) +7 other tests skip
[214]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-d.html
* igt@kms_pm_backlight@fade-with-suspend:
- shard-tglu: NOTRUN -> [SKIP][215] ([i915#9812])
[215]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-6/igt@kms_pm_backlight@fade-with-suspend.html
* igt@kms_pm_dc@dc5-retention-flops:
- shard-tglu-1: NOTRUN -> [SKIP][216] ([i915#3828])
[216]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_pm_dc@dc5-retention-flops.html
* igt@kms_pm_dc@dc9-dpms:
- shard-tglu-1: NOTRUN -> [SKIP][217] ([i915#4281])
[217]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_pm_dc@dc9-dpms.html
* igt@kms_pm_rpm@cursor-dpms:
- shard-rkl: [PASS][218] -> [SKIP][219] ([i915#12916])
[218]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-7/igt@kms_pm_rpm@cursor-dpms.html
[219]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_pm_rpm@cursor-dpms.html
* igt@kms_pm_rpm@dpms-lpsp:
- shard-rkl: NOTRUN -> [SKIP][220] ([i915#9519])
[220]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_pm_rpm@dpms-lpsp.html
* igt@kms_pm_rpm@dpms-non-lpsp:
- shard-rkl: [PASS][221] -> [SKIP][222] ([i915#9519])
[221]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-5/igt@kms_pm_rpm@dpms-non-lpsp.html
[222]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-2/igt@kms_pm_rpm@dpms-non-lpsp.html
* igt@kms_pm_rpm@i2c:
- shard-dg1: [PASS][223] -> [DMESG-WARN][224] ([i915#4423])
[223]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg1-13/igt@kms_pm_rpm@i2c.html
[224]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg1-19/igt@kms_pm_rpm@i2c.html
* igt@kms_pm_rpm@modeset-non-lpsp:
- shard-tglu-1: NOTRUN -> [SKIP][225] ([i915#9519])
[225]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_pm_rpm@modeset-non-lpsp.html
* igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
- shard-dg2: [PASS][226] -> [SKIP][227] ([i915#9519]) +2 other tests skip
[226]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg2-10/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html
[227]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-4/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html
* igt@kms_prime@basic-crc-hybrid:
- shard-rkl: NOTRUN -> [SKIP][228] ([i915#6524])
[228]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_prime@basic-crc-hybrid.html
- shard-tglu: NOTRUN -> [SKIP][229] ([i915#6524])
[229]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-7/igt@kms_prime@basic-crc-hybrid.html
* igt@kms_prime@basic-crc-vgem:
- shard-rkl: [PASS][230] -> [SKIP][231] ([i915#6524])
[230]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-5/igt@kms_prime@basic-crc-vgem.html
[231]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_prime@basic-crc-vgem.html
* igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-sf:
- shard-dg2: NOTRUN -> [SKIP][232] ([i915#11520]) +2 other tests skip
[232]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-sf.html
* igt@kms_psr2_sf@fbc-pr-overlay-plane-update-continuous-sf:
- shard-rkl: NOTRUN -> [SKIP][233] ([i915#11520])
[233]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_psr2_sf@fbc-pr-overlay-plane-update-continuous-sf.html
* igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-sf:
- shard-tglu-1: NOTRUN -> [SKIP][234] ([i915#11520]) +5 other tests skip
[234]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-sf.html
* igt@kms_psr2_sf@psr2-overlay-plane-update-sf-dmg-area:
- shard-tglu: NOTRUN -> [SKIP][235] ([i915#11520]) +4 other tests skip
[235]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-7/igt@kms_psr2_sf@psr2-overlay-plane-update-sf-dmg-area.html
* igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area:
- shard-dg2-9: NOTRUN -> [SKIP][236] ([i915#11520]) +3 other tests skip
[236]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area.html
* igt@kms_psr@fbc-psr-primary-mmap-gtt:
- shard-rkl: NOTRUN -> [SKIP][237] ([i915#1072] / [i915#9732]) +1 other test skip
[237]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_psr@fbc-psr-primary-mmap-gtt.html
* igt@kms_psr@fbc-psr-suspend:
- shard-dg2-9: NOTRUN -> [SKIP][238] ([i915#1072] / [i915#9732]) +9 other tests skip
[238]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_psr@fbc-psr-suspend.html
* igt@kms_psr@fbc-psr2-cursor-mmap-gtt:
- shard-tglu: NOTRUN -> [SKIP][239] ([i915#9732]) +8 other tests skip
[239]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-6/igt@kms_psr@fbc-psr2-cursor-mmap-gtt.html
* igt@kms_psr@pr-cursor-mmap-cpu:
- shard-dg2: NOTRUN -> [SKIP][240] ([i915#1072] / [i915#9732]) +9 other tests skip
[240]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@kms_psr@pr-cursor-mmap-cpu.html
* igt@kms_psr@psr2-sprite-mmap-gtt:
- shard-tglu-1: NOTRUN -> [SKIP][241] ([i915#9732]) +15 other tests skip
[241]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_psr@psr2-sprite-mmap-gtt.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
- shard-dg2: NOTRUN -> [SKIP][242] ([i915#5190])
[242]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270:
- shard-tglu-1: NOTRUN -> [SKIP][243] ([i915#5289])
[243]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html
* igt@kms_rotation_crc@sprite-rotation-270:
- shard-dg2: NOTRUN -> [SKIP][244] ([i915#12755])
[244]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@kms_rotation_crc@sprite-rotation-270.html
* igt@kms_scaling_modes@scaling-mode-full:
- shard-dg2-9: NOTRUN -> [SKIP][245] ([i915#3555]) +1 other test skip
[245]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_scaling_modes@scaling-mode-full.html
* igt@kms_setmode@clone-exclusive-crtc:
- shard-dg2: NOTRUN -> [SKIP][246] ([i915#3555])
[246]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@kms_setmode@clone-exclusive-crtc.html
* igt@kms_tiled_display@basic-test-pattern:
- shard-dg2-9: NOTRUN -> [SKIP][247] ([i915#8623])
[247]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_tiled_display@basic-test-pattern.html
* igt@kms_vrr@max-min:
- shard-tglu: NOTRUN -> [SKIP][248] ([i915#9906]) +1 other test skip
[248]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-6/igt@kms_vrr@max-min.html
* igt@kms_vrr@negative-basic:
- shard-tglu-1: NOTRUN -> [SKIP][249] ([i915#3555] / [i915#9906])
[249]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-1/igt@kms_vrr@negative-basic.html
* igt@kms_vrr@seamless-rr-switch-virtual:
- shard-dg2-9: NOTRUN -> [SKIP][250] ([i915#9906]) +1 other test skip
[250]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@kms_vrr@seamless-rr-switch-virtual.html
* igt@perf_pmu@busy-idle-check-all:
- shard-dg1: [PASS][251] -> [FAIL][252] ([i915#4349]) +1 other test fail
[251]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg1-16/igt@perf_pmu@busy-idle-check-all.html
[252]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg1-12/igt@perf_pmu@busy-idle-check-all.html
* igt@perf_pmu@module-unload:
- shard-rkl: NOTRUN -> [FAIL][253] ([i915#14433])
[253]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@perf_pmu@module-unload.html
- shard-tglu: NOTRUN -> [FAIL][254] ([i915#14433])
[254]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-7/igt@perf_pmu@module-unload.html
* igt@perf_pmu@rc6-all-gts:
- shard-dg2: NOTRUN -> [SKIP][255] ([i915#8516])
[255]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@perf_pmu@rc6-all-gts.html
* igt@prime_vgem@basic-fence-mmap:
- shard-dg2-9: NOTRUN -> [SKIP][256] ([i915#3708] / [i915#4077])
[256]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-9/igt@prime_vgem@basic-fence-mmap.html
* igt@prime_vgem@basic-fence-read:
- shard-dg2: NOTRUN -> [SKIP][257] ([i915#3291] / [i915#3708]) +1 other test skip
[257]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@prime_vgem@basic-fence-read.html
* igt@prime_vgem@fence-write-hang:
- shard-dg2: NOTRUN -> [SKIP][258] ([i915#3708])
[258]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@prime_vgem@fence-write-hang.html
* igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all:
- shard-dg2: NOTRUN -> [SKIP][259] ([i915#9917])
[259]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all.html
#### Possible fixes ####
* igt@fbdev@write:
- shard-rkl: [SKIP][260] ([i915#2582]) -> [PASS][261]
[260]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@fbdev@write.html
[261]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@fbdev@write.html
* igt@gem_eio@hibernate:
- shard-rkl: [ABORT][262] ([i915#7975] / [i915#8213]) -> [PASS][263]
[262]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-2/igt@gem_eio@hibernate.html
[263]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-3/igt@gem_eio@hibernate.html
* igt@gem_eio@in-flight-suspend:
- shard-rkl: [INCOMPLETE][264] ([i915#13390]) -> [PASS][265]
[264]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-3/igt@gem_eio@in-flight-suspend.html
[265]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@gem_eio@in-flight-suspend.html
* igt@gem_exec_balancer@full:
- shard-rkl: [DMESG-WARN][266] ([i915#12964]) -> [PASS][267] +4 other tests pass
[266]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-4/igt@gem_exec_balancer@full.html
[267]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-4/igt@gem_exec_balancer@full.html
* igt@i915_module_load@resize-bar:
- shard-dg2: [DMESG-WARN][268] ([i915#14545]) -> [PASS][269]
[268]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg2-4/igt@i915_module_load@resize-bar.html
[269]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-8/igt@i915_module_load@resize-bar.html
* igt@kms_async_flips@alternate-sync-async-flip:
- shard-mtlp: [FAIL][270] ([i915#10991]) -> [PASS][271] +1 other test pass
[270]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-mtlp-4/igt@kms_async_flips@alternate-sync-async-flip.html
[271]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-mtlp-6/igt@kms_async_flips@alternate-sync-async-flip.html
* igt@kms_atomic_transition@plane-use-after-nonblocking-unbind:
- shard-rkl: [SKIP][272] ([i915#14544]) -> [PASS][273] +35 other tests pass
[272]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_atomic_transition@plane-use-after-nonblocking-unbind.html
[273]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_atomic_transition@plane-use-after-nonblocking-unbind.html
* igt@kms_color@ctm-0-75:
- shard-rkl: [SKIP][274] ([i915#12655]) -> [PASS][275]
[274]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_color@ctm-0-75.html
[275]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-4/igt@kms_color@ctm-0-75.html
* igt@kms_color@deep-color:
- shard-dg2: [SKIP][276] ([i915#12655] / [i915#3555]) -> [PASS][277]
[276]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg2-8/igt@kms_color@deep-color.html
[277]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-10/igt@kms_color@deep-color.html
* igt@kms_cursor_crc@cursor-sliding-256x85:
- shard-rkl: [FAIL][278] ([i915#13566]) -> [PASS][279] +1 other test pass
[278]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-8/igt@kms_cursor_crc@cursor-sliding-256x85.html
[279]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-8/igt@kms_cursor_crc@cursor-sliding-256x85.html
* igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size:
- shard-rkl: [FAIL][280] ([i915#2346]) -> [PASS][281]
[280]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-7/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
[281]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-2/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
* igt@kms_flip@bo-too-big:
- shard-rkl: [SKIP][282] ([i915#3637]) -> [PASS][283] +6 other tests pass
[282]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_flip@bo-too-big.html
[283]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-7/igt@kms_flip@bo-too-big.html
* igt@kms_flip@flip-vs-dpms-on-nop:
- shard-rkl: [SKIP][284] -> [PASS][285] +1 other test pass
[284]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_flip@flip-vs-dpms-on-nop.html
[285]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-7/igt@kms_flip@flip-vs-dpms-on-nop.html
* igt@kms_flip@flip-vs-expired-vblank:
- shard-dg2: [FAIL][286] ([i915#13027]) -> [PASS][287]
[286]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg2-7/igt@kms_flip@flip-vs-expired-vblank.html
[287]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@kms_flip@flip-vs-expired-vblank.html
* igt@kms_flip@plain-flip-fb-recreate-interruptible:
- shard-tglu: [FAIL][288] ([i915#13734]) -> [PASS][289] +1 other test pass
[288]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-tglu-8/igt@kms_flip@plain-flip-fb-recreate-interruptible.html
[289]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-tglu-7/igt@kms_flip@plain-flip-fb-recreate-interruptible.html
* igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-upscaling:
- shard-rkl: [SKIP][290] ([i915#3555]) -> [PASS][291] +1 other test pass
[290]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-upscaling.html
[291]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-4/igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-upscaling.html
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-cpu:
- shard-rkl: [SKIP][292] ([i915#1849] / [i915#5354]) -> [PASS][293] +6 other tests pass
[292]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-cpu.html
[293]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-7/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-cpu.html
* igt@kms_frontbuffer_tracking@fbc-indfb-scaledprimary:
- shard-dg2: [FAIL][294] ([i915#6880]) -> [PASS][295]
[294]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg2-5/igt@kms_frontbuffer_tracking@fbc-indfb-scaledprimary.html
[295]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-2/igt@kms_frontbuffer_tracking@fbc-indfb-scaledprimary.html
* igt@kms_hdr@static-swap:
- shard-dg2: [SKIP][296] ([i915#3555] / [i915#8228]) -> [PASS][297] +1 other test pass
[296]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg2-7/igt@kms_hdr@static-swap.html
[297]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@kms_hdr@static-swap.html
* igt@kms_invalid_mode@zero-hdisplay:
- shard-rkl: [SKIP][298] ([i915#3555] / [i915#8826]) -> [PASS][299]
[298]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_invalid_mode@zero-hdisplay.html
[299]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_invalid_mode@zero-hdisplay.html
* igt@kms_plane@planar-pixel-format-settings:
- shard-rkl: [SKIP][300] ([i915#9581]) -> [PASS][301]
[300]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_plane@planar-pixel-format-settings.html
[301]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-7/igt@kms_plane@planar-pixel-format-settings.html
* igt@kms_plane_alpha_blend@coverage-vs-premult-vs-constant:
- shard-rkl: [SKIP][302] ([i915#7294]) -> [PASS][303] +1 other test pass
[302]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_plane_alpha_blend@coverage-vs-premult-vs-constant.html
[303]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-7/igt@kms_plane_alpha_blend@coverage-vs-premult-vs-constant.html
* igt@kms_plane_scaling@invalid-num-scalers:
- shard-rkl: [SKIP][304] ([i915#3555] / [i915#6953] / [i915#8152]) -> [PASS][305]
[304]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_plane_scaling@invalid-num-scalers.html
[305]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-7/igt@kms_plane_scaling@invalid-num-scalers.html
* igt@kms_plane_scaling@plane-downscale-factor-0-5-with-modifiers:
- shard-rkl: [SKIP][306] ([i915#12247] / [i915#8152]) -> [PASS][307] +1 other test pass
[306]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-modifiers.html
[307]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-modifiers.html
* igt@kms_plane_scaling@plane-downscale-factor-0-5-with-modifiers@pipe-a:
- shard-rkl: [SKIP][308] ([i915#12247]) -> [PASS][309]
[308]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-modifiers@pipe-a.html
[309]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-modifiers@pipe-a.html
* igt@kms_pm_rpm@dpms-lpsp:
- shard-dg2: [SKIP][310] ([i915#9519]) -> [PASS][311] +1 other test pass
[310]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg2-10/igt@kms_pm_rpm@dpms-lpsp.html
[311]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-4/igt@kms_pm_rpm@dpms-lpsp.html
* igt@kms_pm_rpm@fences:
- shard-rkl: [SKIP][312] ([i915#1849]) -> [PASS][313]
[312]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_pm_rpm@fences.html
[313]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_pm_rpm@fences.html
* igt@kms_universal_plane@cursor-fb-leak@pipe-d-edp-1:
- shard-mtlp: [FAIL][314] ([i915#9196]) -> [PASS][315] +1 other test pass
[314]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-mtlp-3/igt@kms_universal_plane@cursor-fb-leak@pipe-d-edp-1.html
[315]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-mtlp-2/igt@kms_universal_plane@cursor-fb-leak@pipe-d-edp-1.html
* igt@perf_pmu@busy-double-start@bcs0:
- shard-mtlp: [FAIL][316] ([i915#4349]) -> [PASS][317]
[316]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-mtlp-7/igt@perf_pmu@busy-double-start@bcs0.html
[317]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-mtlp-6/igt@perf_pmu@busy-double-start@bcs0.html
* igt@perf_pmu@most-busy-check-all:
- shard-rkl: [FAIL][318] ([i915#4349]) -> [PASS][319] +1 other test pass
[318]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-7/igt@perf_pmu@most-busy-check-all.html
[319]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-2/igt@perf_pmu@most-busy-check-all.html
#### Warnings ####
* igt@kms_big_fb@4-tiled-16bpp-rotate-0:
- shard-rkl: [SKIP][320] ([i915#14544]) -> [SKIP][321] ([i915#5286]) +3 other tests skip
[320]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_big_fb@4-tiled-16bpp-rotate-0.html
[321]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-7/igt@kms_big_fb@4-tiled-16bpp-rotate-0.html
* igt@kms_big_fb@4-tiled-addfb:
- shard-rkl: [SKIP][322] ([i915#5286]) -> [SKIP][323] ([i915#14544]) +3 other tests skip
[322]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-5/igt@kms_big_fb@4-tiled-addfb.html
[323]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_big_fb@4-tiled-addfb.html
* igt@kms_big_fb@linear-8bpp-rotate-270:
- shard-rkl: [SKIP][324] ([i915#3638]) -> [SKIP][325] ([i915#14544]) +1 other test skip
[324]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-4/igt@kms_big_fb@linear-8bpp-rotate-270.html
[325]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_big_fb@linear-8bpp-rotate-270.html
* igt@kms_big_fb@y-tiled-64bpp-rotate-270:
- shard-rkl: [SKIP][326] ([i915#14544]) -> [SKIP][327] ([i915#3638]) +1 other test skip
[326]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_big_fb@y-tiled-64bpp-rotate-270.html
[327]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-7/igt@kms_big_fb@y-tiled-64bpp-rotate-270.html
* igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs:
- shard-rkl: [SKIP][328] ([i915#14544]) -> [SKIP][329] ([i915#12313]) +1 other test skip
[328]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs.html
[329]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-4/igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs.html
* igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs:
- shard-rkl: [SKIP][330] ([i915#12313]) -> [SKIP][331] ([i915#14544])
[330]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-4/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs.html
[331]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs.html
* igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs:
- shard-rkl: [SKIP][332] ([i915#14098] / [i915#6095]) -> [SKIP][333] ([i915#14544]) +8 other tests skip
[332]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-7/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs.html
[333]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs.html
* igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-mc-ccs:
- shard-rkl: [SKIP][334] ([i915#14544]) -> [SKIP][335] ([i915#14098] / [i915#6095]) +10 other tests skip
[334]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-mc-ccs.html
[335]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-4/igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-mc-ccs.html
* igt@kms_chamelium_hpd@dp-hpd-storm:
- shard-dg1: [SKIP][336] ([i915#11151] / [i915#7828]) -> [SKIP][337] ([i915#11151] / [i915#4423] / [i915#7828]) +1 other test skip
[336]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg1-19/igt@kms_chamelium_hpd@dp-hpd-storm.html
[337]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg1-13/igt@kms_chamelium_hpd@dp-hpd-storm.html
* igt@kms_content_protection@dp-mst-lic-type-0:
- shard-rkl: [SKIP][338] ([i915#14544]) -> [SKIP][339] ([i915#3116])
[338]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_content_protection@dp-mst-lic-type-0.html
[339]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-7/igt@kms_content_protection@dp-mst-lic-type-0.html
* igt@kms_content_protection@legacy:
- shard-rkl: [SKIP][340] ([i915#14544]) -> [SKIP][341] ([i915#7118] / [i915#9424])
[340]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_content_protection@legacy.html
[341]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_content_protection@legacy.html
* igt@kms_content_protection@mei-interface:
- shard-rkl: [SKIP][342] ([i915#9424]) -> [SKIP][343] ([i915#14544])
[342]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-5/igt@kms_content_protection@mei-interface.html
[343]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_content_protection@mei-interface.html
- shard-dg1: [SKIP][344] ([i915#9424]) -> [SKIP][345] ([i915#9433])
[344]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg1-17/igt@kms_content_protection@mei-interface.html
[345]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg1-13/igt@kms_content_protection@mei-interface.html
* igt@kms_content_protection@srm:
- shard-dg2: [FAIL][346] ([i915#7173]) -> [SKIP][347] ([i915#7118])
[346]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg2-10/igt@kms_content_protection@srm.html
[347]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-4/igt@kms_content_protection@srm.html
* igt@kms_content_protection@type1:
- shard-dg2: [SKIP][348] ([i915#7118] / [i915#9424]) -> [SKIP][349] ([i915#7118] / [i915#7162] / [i915#9424])
[348]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg2-7/igt@kms_content_protection@type1.html
[349]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-11/igt@kms_content_protection@type1.html
* igt@kms_cursor_crc@cursor-offscreen-max-size:
- shard-rkl: [SKIP][350] ([i915#3555]) -> [SKIP][351] ([i915#14544])
[350]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-5/igt@kms_cursor_crc@cursor-offscreen-max-size.html
[351]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_cursor_crc@cursor-offscreen-max-size.html
* igt@kms_cursor_crc@cursor-rapid-movement-32x32:
- shard-rkl: [SKIP][352] ([i915#14544]) -> [SKIP][353] ([i915#3555]) +3 other tests skip
[352]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_cursor_crc@cursor-rapid-movement-32x32.html
[353]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_cursor_crc@cursor-rapid-movement-32x32.html
* igt@kms_cursor_crc@cursor-sliding-128x128:
- shard-rkl: [SKIP][354] ([i915#14544]) -> [DMESG-WARN][355] ([i915#12964])
[354]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_cursor_crc@cursor-sliding-128x128.html
[355]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-7/igt@kms_cursor_crc@cursor-sliding-128x128.html
* igt@kms_cursor_crc@cursor-sliding-512x170:
- shard-rkl: [SKIP][356] ([i915#13049]) -> [SKIP][357] ([i915#14544]) +1 other test skip
[356]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-5/igt@kms_cursor_crc@cursor-sliding-512x170.html
[357]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_cursor_crc@cursor-sliding-512x170.html
* igt@kms_cursor_crc@cursor-sliding-64x64:
- shard-rkl: [DMESG-WARN][358] ([i915#12964]) -> [SKIP][359] ([i915#14544]) +2 other tests skip
[358]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-4/igt@kms_cursor_crc@cursor-sliding-64x64.html
[359]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_cursor_crc@cursor-sliding-64x64.html
* igt@kms_cursor_edge_walk@64x64-top-edge:
- shard-rkl: [SKIP][360] ([i915#14544]) -> [DMESG-WARN][361] ([i915#12917] / [i915#12964])
[360]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_cursor_edge_walk@64x64-top-edge.html
[361]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-7/igt@kms_cursor_edge_walk@64x64-top-edge.html
* igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy:
- shard-rkl: [SKIP][362] ([i915#14544]) -> [SKIP][363] +11 other tests skip
[362]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html
[363]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html
* igt@kms_cursor_legacy@cursora-vs-flipb-varying-size:
- shard-rkl: [SKIP][364] -> [SKIP][365] ([i915#14544]) +8 other tests skip
[364]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-5/igt@kms_cursor_legacy@cursora-vs-flipb-varying-size.html
[365]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_cursor_legacy@cursora-vs-flipb-varying-size.html
* igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size:
- shard-rkl: [SKIP][366] ([i915#4103]) -> [SKIP][367] ([i915#14544]) +1 other test skip
[366]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-5/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html
[367]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html
* igt@kms_dirtyfb@psr-dirtyfb-ioctl:
- shard-rkl: [SKIP][368] ([i915#14544]) -> [SKIP][369] ([i915#9723]) +1 other test skip
[368]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_dirtyfb@psr-dirtyfb-ioctl.html
[369]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-7/igt@kms_dirtyfb@psr-dirtyfb-ioctl.html
* igt@kms_dsc@dsc-basic:
- shard-rkl: [SKIP][370] ([i915#3555] / [i915#3840]) -> [SKIP][371] ([i915#11190] / [i915#14544])
[370]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-4/igt@kms_dsc@dsc-basic.html
[371]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_dsc@dsc-basic.html
* igt@kms_dsc@dsc-with-bpc-formats:
- shard-rkl: [SKIP][372] ([i915#3555] / [i915#3840]) -> [SKIP][373] ([i915#14544])
[372]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-5/igt@kms_dsc@dsc-with-bpc-formats.html
[373]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_dsc@dsc-with-bpc-formats.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling:
- shard-rkl: [SKIP][374] ([i915#3555]) -> [SKIP][375] ([i915#2672] / [i915#3555]) +3 other tests skip
[374]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling.html
[375]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling:
- shard-rkl: [SKIP][376] ([i915#2672] / [i915#3555]) -> [SKIP][377] ([i915#3555]) +1 other test skip
[376]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-4/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling.html
[377]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling.html
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-pwrite:
- shard-rkl: [DMESG-WARN][378] ([i915#12964]) -> [SKIP][379] ([i915#1849] / [i915#5354]) +1 other test skip
[378]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-7/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-pwrite.html
[379]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-pwrite.html
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-pgflip-blt:
- shard-rkl: [SKIP][380] ([i915#1849] / [i915#5354]) -> [DMESG-WARN][381] ([i915#12964])
[380]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-pgflip-blt.html
[381]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-7/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-pgflip-blt.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt:
- shard-rkl: [SKIP][382] ([i915#1825]) -> [SKIP][383] ([i915#1849] / [i915#5354]) +30 other tests skip
[382]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-4/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt.html
[383]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-move:
- shard-rkl: [SKIP][384] ([i915#3023]) -> [SKIP][385] ([i915#1849] / [i915#5354]) +17 other tests skip
[384]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-7/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-move.html
[385]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-move.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-blt:
- shard-dg2: [SKIP][386] ([i915#3458]) -> [SKIP][387] ([i915#10433] / [i915#3458]) +5 other tests skip
[386]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg2-10/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-blt.html
[387]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-indfb-fliptrack-mmap-gtt:
- shard-rkl: [SKIP][388] ([i915#1849] / [i915#5354]) -> [SKIP][389]
[388]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-indfb-fliptrack-mmap-gtt.html
[389]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_frontbuffer_tracking@fbcpsr-2p-indfb-fliptrack-mmap-gtt.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-blt:
- shard-rkl: [SKIP][390] ([i915#1849] / [i915#5354]) -> [SKIP][391] ([i915#1825]) +21 other tests skip
[390]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-blt.html
[391]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-blt:
- shard-dg2: [SKIP][392] ([i915#10433] / [i915#3458]) -> [SKIP][393] ([i915#3458]) +2 other tests skip
[392]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-dg2-4/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-blt.html
[393]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-dg2-8/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-blt.html
* igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-gtt:
- shard-rkl: [SKIP][394] ([i915#1849] / [i915#5354]) -> [SKIP][395] ([i915#3023]) +18 other tests skip
[394]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-gtt.html
[395]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-5/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-gtt.html
* igt@kms_hdr@brightness-with-hdr:
- shard-rkl: [SKIP][396] ([i915#12713]) -> [SKIP][397] ([i915#1187] / [i915#12713])
[396]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-2/igt@kms_hdr@brightness-with-hdr.html
[397]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-3/igt@kms_hdr@brightness-with-hdr.html
* igt@kms_hdr@invalid-metadata-sizes:
- shard-rkl: [SKIP][398] ([i915#3555] / [i915#8228]) -> [SKIP][399] ([i915#14544])
[398]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-7/igt@kms_hdr@invalid-metadata-sizes.html
[399]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_hdr@invalid-metadata-sizes.html
* igt@kms_panel_fitting@atomic-fastset:
- shard-rkl: [SKIP][400] ([i915#14544]) -> [SKIP][401] ([i915#6301])
[400]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_panel_fitting@atomic-fastset.html
[401]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-4/igt@kms_panel_fitting@atomic-fastset.html
* igt@kms_panel_fitting@legacy:
- shard-rkl: [SKIP][402] ([i915#6301]) -> [SKIP][403] ([i915#14544])
[402]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-7/igt@kms_panel_fitting@legacy.html
[403]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_panel_fitting@legacy.html
* igt@kms_plane_multiple@2x-tiling-x:
- shard-rkl: [SKIP][404] ([i915#13958]) -> [SKIP][405] ([i915#14544])
[404]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-5/igt@kms_plane_multiple@2x-tiling-x.html
[405]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_plane_multiple@2x-tiling-x.html
* igt@kms_plane_multiple@2x-tiling-yf:
- shard-rkl: [SKIP][406] ([i915#14544]) -> [SKIP][407] ([i915#13958])
[406]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_plane_multiple@2x-tiling-yf.html
[407]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-4/igt@kms_plane_multiple@2x-tiling-yf.html
* igt@kms_plane_scaling@intel-max-src-size:
- shard-rkl: [SKIP][408] ([i915#6953]) -> [SKIP][409] ([i915#6953] / [i915#8152])
[408]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-7/igt@kms_plane_scaling@intel-max-src-size.html
[409]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_plane_scaling@intel-max-src-size.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25:
- shard-rkl: [SKIP][410] ([i915#12247] / [i915#6953]) -> [SKIP][411] ([i915#12247] / [i915#6953] / [i915#8152])
[410]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-5/igt@kms_plane_scaling@planes-downscale-factor-0-25.html
[411]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_plane_scaling@planes-downscale-factor-0-25.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-b:
- shard-rkl: [SKIP][412] ([i915#12247] / [i915#8152]) -> [SKIP][413] ([i915#12247]) +2 other tests skip
[412]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-b.html
[413]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-4/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-b.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-b:
- shard-rkl: [SKIP][414] ([i915#12247]) -> [SKIP][415] ([i915#12247] / [i915#8152]) +3 other tests skip
[414]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-5/igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-b.html
[415]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-b.html
* igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25:
- shard-rkl: [SKIP][416] ([i915#12247] / [i915#3555]) -> [SKIP][417] ([i915#12247] / [i915#3555] / [i915#8152])
[416]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-4/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25.html
[417]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25.html
* igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25:
- shard-rkl: [SKIP][418] ([i915#12247] / [i915#6953] / [i915#8152]) -> [SKIP][419] ([i915#12247] / [i915#6953])
[418]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25.html
[419]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-7/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25.html
* igt@kms_pm_rpm@dpms-mode-unset-lpsp:
- shard-rkl: [DMESG-WARN][420] ([i915#12964]) -> [SKIP][421] ([i915#9519])
[420]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-2/igt@kms_pm_rpm@dpms-mode-unset-lpsp.html
[421]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-3/igt@kms_pm_rpm@dpms-mode-unset-lpsp.html
* igt@kms_pm_rpm@drm-resources-equal:
- shard-rkl: [DMESG-WARN][422] ([i915#12964]) -> [SKIP][423]
[422]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-5/igt@kms_pm_rpm@drm-resources-equal.html
[423]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_pm_rpm@drm-resources-equal.html
* igt@kms_pm_rpm@modeset-pc8-residency-stress:
- shard-rkl: [SKIP][424] -> [SKIP][425] ([i915#12916])
[424]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-4/igt@kms_pm_rpm@modeset-pc8-residency-stress.html
[425]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_pm_rpm@modeset-pc8-residency-stress.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180:
- shard-rkl: [SKIP][426] ([i915#5289]) -> [SKIP][427] ([i915#14544]) +1 other test skip
[426]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-7/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html
[427]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html
* igt@kms_tiled_display@basic-test-pattern:
- shard-rkl: [SKIP][428] ([i915#14544]) -> [SKIP][429] ([i915#8623])
[428]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-6/igt@kms_tiled_display@basic-test-pattern.html
[429]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-4/igt@kms_tiled_display@basic-test-pattern.html
* igt@kms_vrr@max-min:
- shard-rkl: [SKIP][430] ([i915#9906]) -> [SKIP][431] ([i915#14544]) +1 other test skip
[430]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16760/shard-rkl-4/igt@kms_vrr@max-min.html
[431]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/shard-rkl-6/igt@kms_vrr@max-min.html
[i915#10055]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10055
[i915#10307]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10307
[i915#10433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10433
[i915#10434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10434
[i915#10656]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10656
[i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
[i915#10991]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10991
[i915#11078]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11078
[i915#11151]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11151
[i915#11190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11190
[i915#11520]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11520
[i915#11681]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11681
[i915#11808]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11808
[i915#1187]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1187
[i915#11965]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11965
[i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
[i915#12247]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12247
[i915#12313]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12313
[i915#12339]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12339
[i915#12388]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12388
[i915#12392]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12392
[i915#12655]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12655
[i915#12713]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12713
[i915#12755]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12755
[i915#12916]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12916
[i915#12917]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12917
[i915#12964]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12964
[i915#12967]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12967
[i915#13027]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13027
[i915#13029]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13029
[i915#13046]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13046
[i915#13049]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13049
[i915#13356]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13356
[i915#13390]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13390
[i915#13398]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13398
[i915#13566]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13566
[i915#13665]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13665
[i915#13734]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13734
[i915#13749]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13749
[i915#13781]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13781
[i915#13783]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13783
[i915#13958]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13958
[i915#14033]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14033
[i915#14073]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14073
[i915#14098]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14098
[i915#14259]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14259
[i915#14433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14433
[i915#14544]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14544
[i915#14545]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14545
[i915#1769]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1769
[i915#1825]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1825
[i915#1839]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1839
[i915#1849]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1849
[i915#2346]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2346
[i915#2527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2527
[i915#2582]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2582
[i915#2587]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2587
[i915#2672]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2672
[i915#280]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/280
[i915#2856]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2856
[i915#3023]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3023
[i915#3116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3116
[i915#3281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3281
[i915#3282]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3282
[i915#3291]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3291
[i915#3297]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3297
[i915#3299]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3299
[i915#3458]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3458
[i915#3469]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3469
[i915#3539]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3539
[i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555
[i915#3637]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3637
[i915#3638]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3638
[i915#3708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3708
[i915#3742]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3742
[i915#3828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3828
[i915#3840]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3840
[i915#4077]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4077
[i915#4079]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4079
[i915#4083]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4083
[i915#4103]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4103
[i915#4212]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4212
[i915#4270]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4270
[i915#4281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4281
[i915#4349]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4349
[i915#4387]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4387
[i915#4423]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4423
[i915#4525]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4525
[i915#4537]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4537
[i915#4538]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4538
[i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
[i915#4771]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4771
[i915#4812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4812
[i915#4852]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4852
[i915#4860]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4860
[i915#5138]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5138
[i915#5190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5190
[i915#5286]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5286
[i915#5289]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5289
[i915#5354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5354
[i915#5493]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5493
[i915#6095]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6095
[i915#6301]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6301
[i915#6344]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6344
[i915#6524]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6524
[i915#658]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/658
[i915#6880]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6880
[i915#6944]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6944
[i915#6953]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6953
[i915#7118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7118
[i915#7162]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7162
[i915#7173]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7173
[i915#7294]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7294
[i915#7697]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7697
[i915#7828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7828
[i915#7975]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7975
[i915#8152]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8152
[i915#8213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8213
[i915#8228]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8228
[i915#8399]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8399
[i915#8411]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8411
[i915#8428]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8428
[i915#8516]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8516
[i915#8555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8555
[i915#8562]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8562
[i915#8623]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8623
[i915#8708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8708
[i915#8709]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8709
[i915#8812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8812
[i915#8825]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8825
[i915#8826]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8826
[i915#9196]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9196
[i915#9323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9323
[i915#9423]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9423
[i915#9424]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9424
[i915#9433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9433
[i915#9519]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9519
[i915#9561]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9561
[i915#9581]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9581
[i915#9723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9723
[i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732
[i915#9812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9812
[i915#9833]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9833
[i915#9906]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9906
[i915#9917]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9917
[i915#9934]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9934
[i915#9979]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9979
Build changes
-------------
* Linux: CI_DRM_16760 -> Patchwork_150800v1
CI-20190529: 20190529
CI_DRM_16760: d76821a5677456269831568238080f923bc4bf49 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_8428: 8428
Patchwork_150800v1: d76821a5677456269831568238080f923bc4bf49 @ git://anongit.freedesktop.org/gfx-ci/linux
piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_150800v1/index.html
[-- Attachment #2: Type: text/html, Size: 140692 bytes --]
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 01/20] drm/i915/dp_mst: Reprobe connector if the IRQ ESI read failed
2025-06-26 8:20 ` [PATCH 01/20] drm/i915/dp_mst: Reprobe connector if the IRQ ESI read failed Imre Deak
@ 2025-06-27 7:42 ` Luca Coelho
0 siblings, 0 replies; 62+ messages in thread
From: Luca Coelho @ 2025-06-27 7:42 UTC (permalink / raw)
To: Imre Deak, intel-gfx, intel-xe; +Cc: Imre Deak
On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> 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>
> ---
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 02/20] drm/i915/dp_mst: Verify the link status always the same way
2025-06-26 8:31 ` Jani Nikula
@ 2025-06-27 15:19 ` Imre Deak
2025-07-03 11:14 ` Luca Coelho
0 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-06-27 15:19 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx, intel-xe, Imre Deak
On Thu, Jun 26, 2025 at 11:31:31AM +0300, Jani Nikula wrote:
> On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
> > 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 3f911c930a30b..ac7e08f485309 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > @@ -5176,6 +5176,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;
>
> Please propagate the int instead of having "== 0" at the end of the
> assignment.
>
> I'm increasingly critical of bool returns for success/failure, because
> they don't really mix well with 0 for success and negative values for
> error.
Ok will do that.
Both ways are used all around, but I suppose propagating the error code
should be the default choice. An exception being adding a new variant
of an already existing function with a bool success/failure return type
where the new variant should do the same.
> > +
> > + return ret;
> > +}
> > +
> > static bool
> > intel_dp_needs_link_retrain(struct intel_dp *intel_dp)
> > {
> > @@ -5198,8 +5215,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;
> >
> > /*
>
> --
> Jani Nikula, Intel
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 03/20] drm/i915/dp_mst: Reuse intel_dp_check_link_state() in the HPD IRQ handler
2025-06-26 8:20 ` [PATCH 03/20] drm/i915/dp_mst: Reuse intel_dp_check_link_state() in the HPD IRQ handler Imre Deak
@ 2025-07-01 7:50 ` Luca Coelho
0 siblings, 0 replies; 62+ messages in thread
From: Luca Coelho @ 2025-07-01 7:50 UTC (permalink / raw)
To: Imre Deak, intel-gfx, intel-xe; +Cc: Imre Deak
On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> 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>
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
--
Cheers,
Luca.
> ---
> 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 ac7e08f485309..285cd9a5d4a7b 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -5065,24 +5065,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
> @@ -5101,9 +5083,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 (;;) {
> @@ -5120,12 +5099,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);
>
> @@ -5144,10 +5118,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;
> }
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 04/20] drm/i915/dp: Handle a tunneling IRQ after acking it
2025-06-26 8:20 ` [PATCH 04/20] drm/i915/dp: Handle a tunneling IRQ after acking it Imre Deak
@ 2025-07-01 8:02 ` Luca Coelho
2025-07-01 8:32 ` Imre Deak
0 siblings, 1 reply; 62+ messages in thread
From: Luca Coelho @ 2025-07-01 8:02 UTC (permalink / raw)
To: Imre Deak, intel-gfx, intel-xe; +Cc: Imre Deak
On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> 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 | 25 +++++++++++--------------
> 1 file changed, 11 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> index 285cd9a5d4a7b..453416b9e9bec 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -5099,17 +5099,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;
What happens if we ack the interrupt, but end up not handling it, e.g.
if mem_is_zero() returns true here?
>
> @@ -5121,6 +5114,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;
> @@ -5423,18 +5420,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 ((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;
> + 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;
> +
> return reprobe_needed;
> }
>
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 05/20] drm/i915/dp: Handle the RX_CAP_CHANGED HPD IRQ
2025-06-26 8:20 ` [PATCH 05/20] drm/i915/dp: Handle the RX_CAP_CHANGED HPD IRQ Imre Deak
@ 2025-07-01 8:03 ` Luca Coelho
2025-07-01 10:30 ` Imre Deak
0 siblings, 1 reply; 62+ messages in thread
From: Luca Coelho @ 2025-07-01 8:03 UTC (permalink / raw)
To: Imre Deak, intel-gfx, intel-xe; +Cc: Imre Deak
On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> 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 453416b9e9bec..c2eadfa060c2d 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -5099,7 +5099,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);
>
> @@ -5112,6 +5112,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);
>
> @@ -5424,6 +5427,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);
>
Same question as to the previous patch. What happens if the interrupt
is not actually handled?
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 04/20] drm/i915/dp: Handle a tunneling IRQ after acking it
2025-07-01 8:02 ` Luca Coelho
@ 2025-07-01 8:32 ` Imre Deak
2025-07-01 8:47 ` Luca Coelho
0 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-07-01 8:32 UTC (permalink / raw)
To: Luca Coelho; +Cc: intel-gfx, intel-xe, Imre Deak
On Tue, Jul 01, 2025 at 11:02:30AM +0300, Luca Coelho wrote:
> On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> > 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 | 25 +++++++++++--------------
> > 1 file changed, 11 insertions(+), 14 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> > index 285cd9a5d4a7b..453416b9e9bec 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > @@ -5099,17 +5099,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;
>
> What happens if we ack the interrupt, but end up not handling it, e.g.
> if mem_is_zero() returns true here?
This is an optimization in case of ack[] having no bits set (and also to
break from the loop acking->handling IRQs). I.e. if ack[] is zero the
AUX write to ack IRQs in intel_dp_ack_sink_irq_esi() can be skipped,
since no IRQ needs to be acked and then also no IRQ needs to be handled.
> >
> > @@ -5121,6 +5114,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;
> > @@ -5423,18 +5420,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 ((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;
> > + 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;
> > +
> > return reprobe_needed;
> > }
> >
>
> --
> Cheers,
> Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 04/20] drm/i915/dp: Handle a tunneling IRQ after acking it
2025-07-01 8:32 ` Imre Deak
@ 2025-07-01 8:47 ` Luca Coelho
0 siblings, 0 replies; 62+ messages in thread
From: Luca Coelho @ 2025-07-01 8:47 UTC (permalink / raw)
To: imre.deak; +Cc: intel-gfx, intel-xe, Imre Deak
On Tue, 2025-07-01 at 11:32 +0300, Imre Deak wrote:
> On Tue, Jul 01, 2025 at 11:02:30AM +0300, Luca Coelho wrote:
> > On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> > > 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 | 25 +++++++++++--------------
> > > 1 file changed, 11 insertions(+), 14 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> > > index 285cd9a5d4a7b..453416b9e9bec 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > > @@ -5099,17 +5099,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;
> >
> > What happens if we ack the interrupt, but end up not handling it, e.g.
> > if mem_is_zero() returns true here?
>
> This is an optimization in case of ack[] having no bits set (and also to
> break from the loop acking->handling IRQs). I.e. if ack[] is zero the
> AUX write to ack IRQs in intel_dp_ack_sink_irq_esi() can be skipped,
> since no IRQ needs to be acked and then also no IRQ needs to be handled.
Okay, makes sense.
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 06/20] drm/i915/dp: Handle the DOWNSTREAM_PORT_STATUS_CHANGED event
2025-06-26 8:20 ` [PATCH 06/20] drm/i915/dp: Handle the DOWNSTREAM_PORT_STATUS_CHANGED event Imre Deak
@ 2025-07-01 8:52 ` Luca Coelho
0 siblings, 0 replies; 62+ messages in thread
From: Luca Coelho @ 2025-07-01 8:52 UTC (permalink / raw)
To: Imre Deak, intel-gfx, intel-xe; +Cc: Imre Deak
On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> 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>
> ---
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 07/20] drm/i915/dp: Don't clobber the encoder state in the HPD IRQ handler
2025-06-26 8:20 ` [PATCH 07/20] drm/i915/dp: Don't clobber the encoder state in the HPD IRQ handler Imre Deak
@ 2025-07-01 8:56 ` Luca Coelho
0 siblings, 0 replies; 62+ messages in thread
From: Luca Coelho @ 2025-07-01 8:56 UTC (permalink / raw)
To: Imre Deak, intel-gfx, intel-xe; +Cc: Imre Deak
On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> 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>
> ---
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 08/20] drm/i915/dp: Remove the device service IRQ handling from connector detect
2025-06-26 8:20 ` [PATCH 08/20] drm/i915/dp: Remove the device service IRQ handling from connector detect Imre Deak
@ 2025-07-01 9:00 ` Luca Coelho
0 siblings, 0 replies; 62+ messages in thread
From: Luca Coelho @ 2025-07-01 9:00 UTC (permalink / raw)
To: Imre Deak, intel-gfx, intel-xe; +Cc: Imre Deak
On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> 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>
> ---
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 09/20] drm/i915/dp: Fix the device service IRQ DPCD_REV check
2025-06-26 8:20 ` [PATCH 09/20] drm/i915/dp: Fix the device service IRQ DPCD_REV check Imre Deak
@ 2025-07-01 9:01 ` Luca Coelho
0 siblings, 0 replies; 62+ messages in thread
From: Luca Coelho @ 2025-07-01 9:01 UTC (permalink / raw)
To: Imre Deak, intel-gfx, intel-xe; +Cc: Imre Deak
On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> 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>
> ---
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 10/20] drm/i915/dp: Fix the link service IRQ DPCD_REV check
2025-06-26 8:20 ` [PATCH 10/20] drm/i915/dp: Fix the link " Imre Deak
@ 2025-07-01 9:12 ` Luca Coelho
0 siblings, 0 replies; 62+ messages in thread
From: Luca Coelho @ 2025-07-01 9:12 UTC (permalink / raw)
To: Imre Deak, intel-gfx, intel-xe; +Cc: Imre Deak
On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> 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 6262b661d026e..7793a72983abd 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -5420,7 +5420,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,
At first I was confused by the revision being in "decimal hex", but
then I realized that the revisions are actually using fixed point
representation. IMHO the macros would be more intuitive if they were
called, e.g. DP_DCPD_REV_1_2. But this is orthogonal to this patch.
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 05/20] drm/i915/dp: Handle the RX_CAP_CHANGED HPD IRQ
2025-07-01 8:03 ` Luca Coelho
@ 2025-07-01 10:30 ` Imre Deak
2025-07-03 11:16 ` Luca Coelho
0 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-07-01 10:30 UTC (permalink / raw)
To: Luca Coelho; +Cc: intel-gfx, intel-xe, Imre Deak
On Tue, Jul 01, 2025 at 11:03:56AM +0300, Luca Coelho wrote:
> On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> > 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 453416b9e9bec..c2eadfa060c2d 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > @@ -5099,7 +5099,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);
> >
> > @@ -5112,6 +5112,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);
> >
> > @@ -5424,6 +5427,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);
> >
>
> Same question as to the previous patch. What happens if the interrupt
> is not actually handled?
For the MST case the same thing applies as discussed in the previous
patch, the acked interrupts will be handled and only those interrupts
will be acked that are also handled.
In the SST case here all the interrupts handled were acked above. It's
possible that an interrupt is acked and then not handled or at least
indicated that it's handled on purpose (atm the only such case is
CONNECTED_OFF_ENTRY_REQUESTED), but this will be addressed later in the
patchset.
> --
> Cheers,
> Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 02/20] drm/i915/dp_mst: Verify the link status always the same way
2025-06-27 15:19 ` Imre Deak
@ 2025-07-03 11:14 ` Luca Coelho
0 siblings, 0 replies; 62+ messages in thread
From: Luca Coelho @ 2025-07-03 11:14 UTC (permalink / raw)
To: imre.deak, Jani Nikula; +Cc: intel-gfx, intel-xe, Imre Deak
On Fri, 2025-06-27 at 18:19 +0300, Imre Deak wrote:
> On Thu, Jun 26, 2025 at 11:31:31AM +0300, Jani Nikula wrote:
> > On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
> > > 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 3f911c930a30b..ac7e08f485309 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > > @@ -5176,6 +5176,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;
> >
> > Please propagate the int instead of having "== 0" at the end of the
> > assignment.
> >
> > I'm increasingly critical of bool returns for success/failure, because
> > they don't really mix well with 0 for success and negative values for
> > error.
>
> Ok will do that.
>
> Both ways are used all around, but I suppose propagating the error code
> should be the default choice. An exception being adding a new variant
> of an already existing function with a bool success/failure return type
> where the new variant should do the same.
I agree that here it makes sense to propagate the error. There's no
reason to swallow it.
With that change:
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 05/20] drm/i915/dp: Handle the RX_CAP_CHANGED HPD IRQ
2025-07-01 10:30 ` Imre Deak
@ 2025-07-03 11:16 ` Luca Coelho
0 siblings, 0 replies; 62+ messages in thread
From: Luca Coelho @ 2025-07-03 11:16 UTC (permalink / raw)
To: imre.deak; +Cc: intel-gfx, intel-xe, Imre Deak
On Tue, 2025-07-01 at 13:30 +0300, Imre Deak wrote:
> On Tue, Jul 01, 2025 at 11:03:56AM +0300, Luca Coelho wrote:
> > On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> > > 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 453416b9e9bec..c2eadfa060c2d 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > > @@ -5099,7 +5099,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);
> > >
> > > @@ -5112,6 +5112,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);
> > >
> > > @@ -5424,6 +5427,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);
> > >
> >
> > Same question as to the previous patch. What happens if the interrupt
> > is not actually handled?
>
> For the MST case the same thing applies as discussed in the previous
> patch, the acked interrupts will be handled and only those interrupts
> will be acked that are also handled.
>
> In the SST case here all the interrupts handled were acked above. It's
> possible that an interrupt is acked and then not handled or at least
> indicated that it's handled on purpose (atm the only such case is
> CONNECTED_OFF_ENTRY_REQUESTED), but this will be addressed later in the
> patchset.
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 11/20] drm/i915/dp: Reprobe connector if getting/acking device IRQs fails
2025-06-26 10:56 ` Imre Deak
@ 2025-07-03 11:28 ` Luca Coelho
2025-07-03 11:43 ` Imre Deak
0 siblings, 1 reply; 62+ messages in thread
From: Luca Coelho @ 2025-07-03 11:28 UTC (permalink / raw)
To: imre.deak, Jani Nikula; +Cc: intel-gfx, intel-xe, Imre Deak
On Thu, 2025-06-26 at 13:56 +0300, Imre Deak wrote:
> On Thu, Jun 26, 2025 at 01:46:27PM +0300, Jani Nikula wrote:
> > On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
> > > On Thu, Jun 26, 2025 at 01:23:12PM +0300, Jani Nikula wrote:
> > > > On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
> > > > > On Thu, Jun 26, 2025 at 12:12:11PM +0300, Jani Nikula wrote:
> > > > > > On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
> > > > > > > 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 7793a72983abd..7eb208d2c321b 100644
> > > > > > > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > > > > > > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > > > > > > @@ -5393,16 +5393,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)
> > > > > >
> > > > > > I don't think "check" is very intuitive in function names. Check
> > > > > > something, but then what? Is it like an assert or does it do something
> > > > > > active or what?
> > > > > >
> > > > > > What does a boolean return from a check function mean?
> > > > > >
> > > > > > It's not obvious to the reader at all.
> > > > >
> > > > > I agree, but in this patch I didn't want to change the function name.
> > > >
> > > > Arguably adding a return value changes the meaning already...
> > > >
> > > > >
> > > > > >
> > > > > > > {
> > > > > > > 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;
> > > > > >
> > > > > > Looks like true means the check failed... while usually true for boolean
> > > > > > functions means success.
> > > > >
> > > > > The function returns true as before if a full connector detection is needed.
> > > >
> > > > But it didn't return anything before! And that meaning is not conveyed
> > > > to the reader in *any* reasonable way!
> > >
> > > This function is the counterpart of intel_dp_check_link_service_irq()
> > > both functions having the same purpose, reading and handling HPD IRQs.
> > > The latter one's return value is true if a reprobe is needed and this
> > > patch doesn't change that, it keeps the two functions behave the same
> > > way.
> > >
> > > > The absolute minimum is to add a comment (mind you, kernel-doc is
> > > > overkill) stating what the return value means.
> > >
> > > The function name will change in a follow-up patch and I think that
> > > doesn't require a comment on the return value.
> > >
> > > > > >
> > > > > > >
> > > > > > > - 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);
> > > > > >
> > > > > > Whoa, it's not a *check* function at all?! It actually *handles* the
> > > > > > service irqs.
> > > > > >
> > > > > > Can we rephrase the function name?
> > > > >
> > > > > I want to keep the function name in this patch. In the following patches
> > > > > I will separate this part and rename it to
> > > > > intel_dp_get_and_ack_device_service_irq().
> > > >
> > > > Right, saw that now. But even for that function name the meaning of the
> > > > return value is ambiguous.
> > >
> > > All the get/ack IRQ functions in intel_dp.c return true for success.
> >
> > Argh. You just said it doesn't mean success/failure, it means if full
> > connector detection is needed?!
>
> intel_dp_check_device_service_irq(),
> intel_dp_check_link_service_irq() -> return value indicates if a
> connector detection is needed.
>
> intel_dp_get_and_ack_device_service_irq(),
> intel_dp_get_and_ack_link_service_irq() -> return value indicates if
> getting/acking the IRQ succeeded,s imilarly to
> intel_dp_get_sink_irq_esi(), intel_dp_ack_sink_irq_esi().
Do we need to distinguish between when getting or acking failed? You
may have handled the irq but failed to ack (theoretically). Do you
just abort the whole thing in either case?
I still tend to agree with Jani that the idea of actually handling the
interrupt is not clear in the function name. _get_and_ack doesn't imply
that either. But this is getting too nitpicky at this point, so I'll
leave it up to you and Jani. :)
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 12/20] drm/i915/dp: Reprobe connector if getting/acking link service IRQs fails
2025-06-26 8:20 ` [PATCH 12/20] drm/i915/dp: Reprobe connector if getting/acking link service " Imre Deak
@ 2025-07-03 11:37 ` Luca Coelho
0 siblings, 0 replies; 62+ messages in thread
From: Luca Coelho @ 2025-07-03 11:37 UTC (permalink / raw)
To: Imre Deak, intel-gfx, intel-xe; +Cc: Imre Deak
On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> 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 7eb208d2c321b..66db426b4aca1 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -5430,12 +5430,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;
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 11/20] drm/i915/dp: Reprobe connector if getting/acking device IRQs fails
2025-07-03 11:28 ` Luca Coelho
@ 2025-07-03 11:43 ` Imre Deak
2025-07-07 10:05 ` Luca Coelho
0 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-07-03 11:43 UTC (permalink / raw)
To: Luca Coelho; +Cc: Jani Nikula, intel-gfx, intel-xe, Imre Deak
On Thu, Jul 03, 2025 at 02:28:01PM +0300, Luca Coelho wrote:
> On Thu, 2025-06-26 at 13:56 +0300, Imre Deak wrote:
> > On Thu, Jun 26, 2025 at 01:46:27PM +0300, Jani Nikula wrote:
> > > On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
> > > > On Thu, Jun 26, 2025 at 01:23:12PM +0300, Jani Nikula wrote:
> > > > > On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
> > > > > > On Thu, Jun 26, 2025 at 12:12:11PM +0300, Jani Nikula wrote:
> > > > > > > On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
> > > > > > > > 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 7793a72983abd..7eb208d2c321b 100644
> > > > > > > > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > > > > > > > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > > > > > > > @@ -5393,16 +5393,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)
> > > > > > >
> > > > > > > I don't think "check" is very intuitive in function names. Check
> > > > > > > something, but then what? Is it like an assert or does it do something
> > > > > > > active or what?
> > > > > > >
> > > > > > > What does a boolean return from a check function mean?
> > > > > > >
> > > > > > > It's not obvious to the reader at all.
> > > > > >
> > > > > > I agree, but in this patch I didn't want to change the function name.
> > > > >
> > > > > Arguably adding a return value changes the meaning already...
> > > > >
> > > > > >
> > > > > > >
> > > > > > > > {
> > > > > > > > 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;
> > > > > > >
> > > > > > > Looks like true means the check failed... while usually true for boolean
> > > > > > > functions means success.
> > > > > >
> > > > > > The function returns true as before if a full connector detection is needed.
> > > > >
> > > > > But it didn't return anything before! And that meaning is not conveyed
> > > > > to the reader in *any* reasonable way!
> > > >
> > > > This function is the counterpart of intel_dp_check_link_service_irq()
> > > > both functions having the same purpose, reading and handling HPD IRQs.
> > > > The latter one's return value is true if a reprobe is needed and this
> > > > patch doesn't change that, it keeps the two functions behave the same
> > > > way.
> > > >
> > > > > The absolute minimum is to add a comment (mind you, kernel-doc is
> > > > > overkill) stating what the return value means.
> > > >
> > > > The function name will change in a follow-up patch and I think that
> > > > doesn't require a comment on the return value.
> > > >
> > > > > > >
> > > > > > > >
> > > > > > > > - 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);
> > > > > > >
> > > > > > > Whoa, it's not a *check* function at all?! It actually *handles* the
> > > > > > > service irqs.
> > > > > > >
> > > > > > > Can we rephrase the function name?
> > > > > >
> > > > > > I want to keep the function name in this patch. In the following patches
> > > > > > I will separate this part and rename it to
> > > > > > intel_dp_get_and_ack_device_service_irq().
> > > > >
> > > > > Right, saw that now. But even for that function name the meaning of the
> > > > > return value is ambiguous.
> > > >
> > > > All the get/ack IRQ functions in intel_dp.c return true for success.
> > >
> > > Argh. You just said it doesn't mean success/failure, it means if full
> > > connector detection is needed?!
> >
> > intel_dp_check_device_service_irq(),
> > intel_dp_check_link_service_irq() -> return value indicates if a
> > connector detection is needed.
> >
> > intel_dp_get_and_ack_device_service_irq(),
> > intel_dp_get_and_ack_link_service_irq() -> return value indicates if
> > getting/acking the IRQ succeeded,s imilarly to
> > intel_dp_get_sink_irq_esi(), intel_dp_ack_sink_irq_esi().
>
> Do we need to distinguish between when getting or acking failed?
No, in either case the IRQ shouldn't be handled and a full detection
should be scheduled for the connector.
> You may have handled the irq but failed to ack (theoretically). Do
> you just abort the whole thing in either case?
If reading or acking the IRQs fail, which would be due to the relevant
AUX read/write failing, then the IRQ will not be handled and a full
connector detection will be scheduled.
> I still tend to agree with Jani that the idea of actually handling the
> interrupt is not clear in the function name.
Yes, I agree it's not clear, but that is the current name, which I don't
want to change in this patch. In patch 13 I separate the function into
intel_dp_get_and_ack_device_service_irq() and
intel_dp_handle_device_service_irq().
> _get_and_ack doesn't imply that either.
intel_dp_get_and_ack_device_irq(), added in patch 13, will only get and
ack the IRQ, the handling happening in
intel_dp_handle_device_service_irq().
> But this is getting too nitpicky at this point, so I'll leave it up to
> you and Jani. :)
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 13/20] drm/i915/dp: Return early if getting/acking device service IRQs fails
2025-06-26 8:20 ` [PATCH 13/20] drm/i915/dp: Return early if getting/acking device " Imre Deak
@ 2025-07-03 11:59 ` Luca Coelho
0 siblings, 0 replies; 62+ messages in thread
From: Luca Coelho @ 2025-07-03 11:59 UTC (permalink / raw)
To: Imre Deak, intel-gfx, intel-xe
On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> 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 | 35 ++++++++++++++++---------
> 1 file changed, 23 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> index 66db426b4aca1..cfbe7c6f896ab 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -5393,31 +5393,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)
I think these names are still a bit confusing, so adding short comment
explaining what the bool is, as Jani suggested,is a good thing.
> {
> - 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;
> + return false;
>
> if (!val)
> - return false;
> + return true;
>
> if (drm_dp_dpcd_writeb(&intel_dp->aux, DP_DEVICE_SERVICE_IRQ_VECTOR, val) != 1)
> - return true;
> + return false;
>
> - if (val & DP_AUTOMATED_TEST_REQUEST)
> + *irq_mask = val;
> +
> + return true;
> +}
> +
> +static void intel_dp_handle_device_service_irq(struct intel_dp *intel_dp, u8 irq_mask)
Same for this function.
With these changes:
Reviwed-by: Luca Coelho <luciano.coelho@intel.com>
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 14/20] drm/i915/dp: Return early if getting/ackink link service IRQs fails
2025-06-26 8:20 ` [PATCH 14/20] drm/i915/dp: Return early if getting/ackink link " Imre Deak
@ 2025-07-03 12:29 ` Luca Coelho
0 siblings, 0 replies; 62+ messages in thread
From: Luca Coelho @ 2025-07-03 12:29 UTC (permalink / raw)
To: Imre Deak, intel-gfx, intel-xe
On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> 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 cfbe7c6f896ab..2ba4a810f22c2 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -5428,33 +5428,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;
> @@ -5499,7 +5509,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 */
Same as with the previous patch. With a short comment about the bool
meaning:
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 15/20] drm/i915/dp: Read/ack sink count and sink IRQs for SST as it's done for MST
2025-06-26 8:20 ` [PATCH 15/20] drm/i915/dp: Read/ack sink count and sink IRQs for SST as it's done for MST Imre Deak
@ 2025-07-03 13:02 ` Luca Coelho
2025-07-03 13:14 ` Imre Deak
0 siblings, 1 reply; 62+ messages in thread
From: Luca Coelho @ 2025-07-03 13:02 UTC (permalink / raw)
To: Imre Deak, intel-gfx, intel-xe; +Cc: Imre Deak
On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> 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 2ba4a810f22c2..2e6ed7d2a64a6 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -4573,6 +4573,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;
> +}
> +
Again, I think it's better to propagate the error than to swallow it
and return a bool.
Other than that, it looks good to me. So if you agree with this
change:
Reviewed-by: Luca Coelho <luciano.coelho@tintel.com>
--
Cheers,
Luca.
> @@ -5393,27 +5457,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);
> @@ -5428,31 +5471,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);
> @@ -5489,30 +5507,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 */
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 16/20] drm/i915/dp: Print debug message for a sink connected off request
2025-06-26 8:20 ` [PATCH 16/20] drm/i915/dp: Print debug message for a sink connected off request Imre Deak
@ 2025-07-03 13:03 ` Luca Coelho
0 siblings, 0 replies; 62+ messages in thread
From: Luca Coelho @ 2025-07-03 13:03 UTC (permalink / raw)
To: Imre Deak, intel-gfx, intel-xe; +Cc: Imre Deak
On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> 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 2e6ed7d2a64a6..90f6fe20e4c0d 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -5474,6 +5474,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)
> @@ -5482,6 +5484,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))
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 17/20] drm/i915/dp: Check SST link status while handling link service IRQs
2025-06-26 8:20 ` [PATCH 17/20] drm/i915/dp: Check SST link status while handling link service IRQs Imre Deak
@ 2025-07-03 13:05 ` Luca Coelho
0 siblings, 0 replies; 62+ messages in thread
From: Luca Coelho @ 2025-07-03 13:05 UTC (permalink / raw)
To: Imre Deak, intel-gfx, intel-xe; +Cc: Imre Deak
On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> 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 90f6fe20e4c0d..000c57da92d60 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -5481,6 +5481,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);
>
> @@ -5534,14 +5537,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;
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 18/20] drm/i915/dp_mst: Reuse intel_dp_handle_link_service_irq()
2025-06-26 8:20 ` [PATCH 18/20] drm/i915/dp_mst: Reuse intel_dp_handle_link_service_irq() Imre Deak
@ 2025-07-03 13:07 ` Luca Coelho
0 siblings, 0 replies; 62+ messages in thread
From: Luca Coelho @ 2025-07-03 13:07 UTC (permalink / raw)
To: Imre Deak, intel-gfx, intel-xe; +Cc: Imre Deak
On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> 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 000c57da92d60..52249fa5c8a6d 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -5129,6 +5129,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
> @@ -5176,14 +5178,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;
> }
>
> @@ -5481,7 +5476,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)
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 15/20] drm/i915/dp: Read/ack sink count and sink IRQs for SST as it's done for MST
2025-07-03 13:02 ` Luca Coelho
@ 2025-07-03 13:14 ` Imre Deak
2025-07-03 13:24 ` Luca Coelho
0 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-07-03 13:14 UTC (permalink / raw)
To: Luca Coelho; +Cc: intel-gfx, intel-xe, Imre Deak
On Thu, Jul 03, 2025 at 04:02:18PM +0300, Luca Coelho wrote:
> On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> > 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 2ba4a810f22c2..2e6ed7d2a64a6 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > @@ -4573,6 +4573,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;
> > +}
> > +
>
> Again, I think it's better to propagate the error than to swallow it
> and return a bool.
I agree. But doing that would make these functions return error in
different ways than the MST
intel_dp_get_sink_irq_esi(), intel_dp_ack_sink_irq_esi()
functions, which return a pass/fail bool. Imo the error return should be
the same for both the SST and MST variety of functions and converting
to propagate an error instead of a pass/fail bool should be done for
both (SST and MST), which is best done as a follow-up. Are you ok with
that?
> Other than that, it looks good to me. So if you agree with this
> change:
>
> Reviewed-by: Luca Coelho <luciano.coelho@tintel.com>
>
> --
> Cheers,
> Luca.
>
> > @@ -5393,27 +5457,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);
> > @@ -5428,31 +5471,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);
> > @@ -5489,30 +5507,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 */
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 19/20] drm/i915/dp: Ack only the handled device service IRQs
2025-06-26 8:20 ` [PATCH 19/20] drm/i915/dp: Ack only the handled device service IRQs Imre Deak
@ 2025-07-03 13:14 ` Luca Coelho
2025-07-03 13:18 ` Imre Deak
0 siblings, 1 reply; 62+ messages in thread
From: Luca Coelho @ 2025-07-03 13:14 UTC (permalink / raw)
To: Imre Deak, intel-gfx, intel-xe; +Cc: Imre Deak
On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> 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 52249fa5c8a6d..6f67fac9724e1 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -4537,6 +4537,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)
> {
> @@ -4628,6 +4636,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;
>
> @@ -5172,6 +5182,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");
>
> @@ -5456,6 +5468,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);
>
Evidently, this function is specific to SST irq. Wouldn't it be better
to have _sst in the name like in "intel_dp_check_mst_status()"? This
function is probably in an earlier patch, though, so if handled it
should be obviously be done there.
Otherwise:
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 19/20] drm/i915/dp: Ack only the handled device service IRQs
2025-07-03 13:14 ` Luca Coelho
@ 2025-07-03 13:18 ` Imre Deak
2025-07-03 13:27 ` Imre Deak
0 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-07-03 13:18 UTC (permalink / raw)
To: Luca Coelho; +Cc: intel-gfx, intel-xe, Imre Deak
On Thu, Jul 03, 2025 at 04:14:51PM +0300, Luca Coelho wrote:
> On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> > 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 52249fa5c8a6d..6f67fac9724e1 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > @@ -4537,6 +4537,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)
> > {
> > @@ -4628,6 +4636,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;
> >
> > @@ -5172,6 +5182,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");
> >
> > @@ -5456,6 +5468,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);
> >
>
> Evidently, this function is specific to SST irq. Wouldn't it be better
> to have _sst in the name like in "intel_dp_check_mst_status()"? This
> function is probably in an earlier patch, though, so if handled it
> should be obviously be done there.
Yes, it used to be SST specific, but patch 18 reused it for MST as well.
> Otherwise:
>
> Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
>
> --
> Cheers,
> Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 20/20] drm/i915/dp: Ack only the handled link service IRQs
2025-06-26 8:20 ` [PATCH 20/20] drm/i915/dp: Ack only the handled link " Imre Deak
@ 2025-07-03 13:18 ` Luca Coelho
0 siblings, 0 replies; 62+ messages in thread
From: Luca Coelho @ 2025-07-03 13:18 UTC (permalink / raw)
To: Imre Deak, intel-gfx, intel-xe; +Cc: Imre Deak
On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> 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 6f67fac9724e1..0e3e9ab3ac604 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -4545,6 +4545,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)
> {
> @@ -4637,6 +4647,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;
> @@ -5175,7 +5186,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);
>
> @@ -5183,6 +5194,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");
> @@ -5487,6 +5499,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;
>
Okay, so for link service, this is function also handles MST stuff.
So, maybe for consistency, you can ignore my comment about adding
"_sst" in the previous patch.
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 15/20] drm/i915/dp: Read/ack sink count and sink IRQs for SST as it's done for MST
2025-07-03 13:14 ` Imre Deak
@ 2025-07-03 13:24 ` Luca Coelho
0 siblings, 0 replies; 62+ messages in thread
From: Luca Coelho @ 2025-07-03 13:24 UTC (permalink / raw)
To: imre.deak; +Cc: intel-gfx, intel-xe, Imre Deak
On Thu, 2025-07-03 at 16:14 +0300, Imre Deak wrote:
> On Thu, Jul 03, 2025 at 04:02:18PM +0300, Luca Coelho wrote:
> > On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> > > 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 2ba4a810f22c2..2e6ed7d2a64a6 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > > @@ -4573,6 +4573,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;
> > > +}
> > > +
> >
> > Again, I think it's better to propagate the error than to swallow it
> > and return a bool.
>
> I agree. But doing that would make these functions return error in
> different ways than the MST
>
> intel_dp_get_sink_irq_esi(), intel_dp_ack_sink_irq_esi()
>
> functions, which return a pass/fail bool. Imo the error return should be
> the same for both the SST and MST variety of functions and converting
> to propagate an error instead of a pass/fail bool should be done for
> both (SST and MST), which is best done as a follow-up. Are you ok with
> that?
>
Okay, a follow-up patch sounds good to me.
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 19/20] drm/i915/dp: Ack only the handled device service IRQs
2025-07-03 13:18 ` Imre Deak
@ 2025-07-03 13:27 ` Imre Deak
2025-07-03 13:34 ` Luca Coelho
0 siblings, 1 reply; 62+ messages in thread
From: Imre Deak @ 2025-07-03 13:27 UTC (permalink / raw)
To: Luca Coelho, intel-gfx, intel-xe, Imre Deak
On Thu, Jul 03, 2025 at 04:18:21PM +0300, Imre Deak wrote:
> On Thu, Jul 03, 2025 at 04:14:51PM +0300, Luca Coelho wrote:
> > On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> > > 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 52249fa5c8a6d..6f67fac9724e1 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > > @@ -4537,6 +4537,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)
> > > {
> > > @@ -4628,6 +4636,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;
> > >
> > > @@ -5172,6 +5182,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");
> > >
> > > @@ -5456,6 +5468,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);
> > >
> >
> > Evidently, this function is specific to SST irq. Wouldn't it be better
> > to have _sst in the name like in "intel_dp_check_mst_status()"? This
> > function is probably in an earlier patch, though, so if handled it
> > should be obviously be done there.
>
> Yes, it used to be SST specific, but patch 18 reused it for MST as well.
Ah, sorry, yes this function is still only used for SST. However the
device service IRQs handled here are not SST specific and imo the
function should be used for MST as well. But until that I can rename it
to intel_dp_handle_device_service_irq_sst().
> > Otherwise:
> >
> > Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
> >
> > --
> > Cheers,
> > Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 19/20] drm/i915/dp: Ack only the handled device service IRQs
2025-07-03 13:27 ` Imre Deak
@ 2025-07-03 13:34 ` Luca Coelho
0 siblings, 0 replies; 62+ messages in thread
From: Luca Coelho @ 2025-07-03 13:34 UTC (permalink / raw)
To: imre.deak, intel-gfx, intel-xe, Imre Deak
On Thu, 2025-07-03 at 16:27 +0300, Imre Deak wrote:
> On Thu, Jul 03, 2025 at 04:18:21PM +0300, Imre Deak wrote:
> > On Thu, Jul 03, 2025 at 04:14:51PM +0300, Luca Coelho wrote:
> > > On Thu, 2025-06-26 at 11:20 +0300, Imre Deak wrote:
> > > > 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 52249fa5c8a6d..6f67fac9724e1 100644
> > > > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > > > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > > > @@ -4537,6 +4537,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)
> > > > {
> > > > @@ -4628,6 +4636,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;
> > > >
> > > > @@ -5172,6 +5182,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");
> > > >
> > > > @@ -5456,6 +5468,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);
> > > >
> > >
> > > Evidently, this function is specific to SST irq. Wouldn't it be better
> > > to have _sst in the name like in "intel_dp_check_mst_status()"? This
> > > function is probably in an earlier patch, though, so if handled it
> > > should be obviously be done there.
> >
> > Yes, it used to be SST specific, but patch 18 reused it for MST as well.
>
> Ah, sorry, yes this function is still only used for SST. However the
> device service IRQs handled here are not SST specific and imo the
> function should be used for MST as well. But until that I can rename it
> to intel_dp_handle_device_service_irq_sst().
No, no need to rename it temporarily. I changed my mind when I read
the next patch (see my comment there). The only difference is that one
is link service and the other one is device service, not MST vs SST, so
I think it's better to keep this function consistent with the next one.
It's just an artifact that it is not needed for MST in this case.
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
* Re: [PATCH 11/20] drm/i915/dp: Reprobe connector if getting/acking device IRQs fails
2025-07-03 11:43 ` Imre Deak
@ 2025-07-07 10:05 ` Luca Coelho
0 siblings, 0 replies; 62+ messages in thread
From: Luca Coelho @ 2025-07-07 10:05 UTC (permalink / raw)
To: imre.deak; +Cc: Jani Nikula, intel-gfx, intel-xe, Imre Deak
On Thu, 2025-07-03 at 14:43 +0300, Imre Deak wrote:
> On Thu, Jul 03, 2025 at 02:28:01PM +0300, Luca Coelho wrote:
> > On Thu, 2025-06-26 at 13:56 +0300, Imre Deak wrote:
> > > On Thu, Jun 26, 2025 at 01:46:27PM +0300, Jani Nikula wrote:
> > > > On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
> > > > > On Thu, Jun 26, 2025 at 01:23:12PM +0300, Jani Nikula wrote:
> > > > > > On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
> > > > > > > On Thu, Jun 26, 2025 at 12:12:11PM +0300, Jani Nikula wrote:
> > > > > > > > On Thu, 26 Jun 2025, Imre Deak <imre.deak@intel.com> wrote:
> > > > > > > > > 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 7793a72983abd..7eb208d2c321b 100644
> > > > > > > > > --- a/drivers/gpu/drm/i915/display/intel_dp.c
> > > > > > > > > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> > > > > > > > > @@ -5393,16 +5393,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)
> > > > > > > >
> > > > > > > > I don't think "check" is very intuitive in function names. Check
> > > > > > > > something, but then what? Is it like an assert or does it do something
> > > > > > > > active or what?
> > > > > > > >
> > > > > > > > What does a boolean return from a check function mean?
> > > > > > > >
> > > > > > > > It's not obvious to the reader at all.
> > > > > > >
> > > > > > > I agree, but in this patch I didn't want to change the function name.
> > > > > >
> > > > > > Arguably adding a return value changes the meaning already...
> > > > > >
> > > > > > >
> > > > > > > >
> > > > > > > > > {
> > > > > > > > > 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;
> > > > > > > >
> > > > > > > > Looks like true means the check failed... while usually true for boolean
> > > > > > > > functions means success.
> > > > > > >
> > > > > > > The function returns true as before if a full connector detection is needed.
> > > > > >
> > > > > > But it didn't return anything before! And that meaning is not conveyed
> > > > > > to the reader in *any* reasonable way!
> > > > >
> > > > > This function is the counterpart of intel_dp_check_link_service_irq()
> > > > > both functions having the same purpose, reading and handling HPD IRQs.
> > > > > The latter one's return value is true if a reprobe is needed and this
> > > > > patch doesn't change that, it keeps the two functions behave the same
> > > > > way.
> > > > >
> > > > > > The absolute minimum is to add a comment (mind you, kernel-doc is
> > > > > > overkill) stating what the return value means.
> > > > >
> > > > > The function name will change in a follow-up patch and I think that
> > > > > doesn't require a comment on the return value.
> > > > >
> > > > > > > >
> > > > > > > > >
> > > > > > > > > - 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);
> > > > > > > >
> > > > > > > > Whoa, it's not a *check* function at all?! It actually *handles* the
> > > > > > > > service irqs.
> > > > > > > >
> > > > > > > > Can we rephrase the function name?
> > > > > > >
> > > > > > > I want to keep the function name in this patch. In the following patches
> > > > > > > I will separate this part and rename it to
> > > > > > > intel_dp_get_and_ack_device_service_irq().
> > > > > >
> > > > > > Right, saw that now. But even for that function name the meaning of the
> > > > > > return value is ambiguous.
> > > > >
> > > > > All the get/ack IRQ functions in intel_dp.c return true for success.
> > > >
> > > > Argh. You just said it doesn't mean success/failure, it means if full
> > > > connector detection is needed?!
> > >
> > > intel_dp_check_device_service_irq(),
> > > intel_dp_check_link_service_irq() -> return value indicates if a
> > > connector detection is needed.
> > >
> > > intel_dp_get_and_ack_device_service_irq(),
> > > intel_dp_get_and_ack_link_service_irq() -> return value indicates if
> > > getting/acking the IRQ succeeded,s imilarly to
> > > intel_dp_get_sink_irq_esi(), intel_dp_ack_sink_irq_esi().
> >
> > Do we need to distinguish between when getting or acking failed?
>
> No, in either case the IRQ shouldn't be handled and a full detection
> should be scheduled for the connector.
>
> > You may have handled the irq but failed to ack (theoretically). Do
> > you just abort the whole thing in either case?
>
> If reading or acking the IRQs fail, which would be due to the relevant
> AUX read/write failing, then the IRQ will not be handled and a full
> connector detection will be scheduled.
>
> > I still tend to agree with Jani that the idea of actually handling the
> > interrupt is not clear in the function name.
>
> Yes, I agree it's not clear, but that is the current name, which I don't
> want to change in this patch. In patch 13 I separate the function into
> intel_dp_get_and_ack_device_service_irq() and
> intel_dp_handle_device_service_irq().
>
> > _get_and_ack doesn't imply that either.
>
> intel_dp_get_and_ack_device_irq(), added in patch 13, will only get and
> ack the IRQ, the handling happening in
> intel_dp_handle_device_service_irq().
>
> > But this is getting too nitpicky at this point, so I'll leave it up to
> > you and Jani. :)
As discussed offline, we all agreed to go ahead like this and make the
bool vs. int change in follow up patches. So:
Reviewed-by: Luca Coelho <luciano.coelho@intel.com>
--
Cheers,
Luca.
^ permalink raw reply [flat|nested] 62+ messages in thread
end of thread, other threads:[~2025-07-07 10:05 UTC | newest]
Thread overview: 62+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-26 8:20 [PATCH 00/20] drm/i915/dp: Fix few SST HPD IRQ handling issues Imre Deak
2025-06-26 8:20 ` [PATCH 01/20] drm/i915/dp_mst: Reprobe connector if the IRQ ESI read failed Imre Deak
2025-06-27 7:42 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 02/20] drm/i915/dp_mst: Verify the link status always the same way Imre Deak
2025-06-26 8:31 ` Jani Nikula
2025-06-27 15:19 ` Imre Deak
2025-07-03 11:14 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 03/20] drm/i915/dp_mst: Reuse intel_dp_check_link_state() in the HPD IRQ handler Imre Deak
2025-07-01 7:50 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 04/20] drm/i915/dp: Handle a tunneling IRQ after acking it Imre Deak
2025-07-01 8:02 ` Luca Coelho
2025-07-01 8:32 ` Imre Deak
2025-07-01 8:47 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 05/20] drm/i915/dp: Handle the RX_CAP_CHANGED HPD IRQ Imre Deak
2025-07-01 8:03 ` Luca Coelho
2025-07-01 10:30 ` Imre Deak
2025-07-03 11:16 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 06/20] drm/i915/dp: Handle the DOWNSTREAM_PORT_STATUS_CHANGED event Imre Deak
2025-07-01 8:52 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 07/20] drm/i915/dp: Don't clobber the encoder state in the HPD IRQ handler Imre Deak
2025-07-01 8:56 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 08/20] drm/i915/dp: Remove the device service IRQ handling from connector detect Imre Deak
2025-07-01 9:00 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 09/20] drm/i915/dp: Fix the device service IRQ DPCD_REV check Imre Deak
2025-07-01 9:01 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 10/20] drm/i915/dp: Fix the link " Imre Deak
2025-07-01 9:12 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 11/20] drm/i915/dp: Reprobe connector if getting/acking device IRQs fails Imre Deak
2025-06-26 9:12 ` Jani Nikula
2025-06-26 9:35 ` Imre Deak
2025-06-26 10:23 ` Jani Nikula
2025-06-26 10:43 ` Imre Deak
2025-06-26 10:46 ` Jani Nikula
2025-06-26 10:56 ` Imre Deak
2025-07-03 11:28 ` Luca Coelho
2025-07-03 11:43 ` Imre Deak
2025-07-07 10:05 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 12/20] drm/i915/dp: Reprobe connector if getting/acking link service " Imre Deak
2025-07-03 11:37 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 13/20] drm/i915/dp: Return early if getting/acking device " Imre Deak
2025-07-03 11:59 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 14/20] drm/i915/dp: Return early if getting/ackink link " Imre Deak
2025-07-03 12:29 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 15/20] drm/i915/dp: Read/ack sink count and sink IRQs for SST as it's done for MST Imre Deak
2025-07-03 13:02 ` Luca Coelho
2025-07-03 13:14 ` Imre Deak
2025-07-03 13:24 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 16/20] drm/i915/dp: Print debug message for a sink connected off request Imre Deak
2025-07-03 13:03 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 17/20] drm/i915/dp: Check SST link status while handling link service IRQs Imre Deak
2025-07-03 13:05 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 18/20] drm/i915/dp_mst: Reuse intel_dp_handle_link_service_irq() Imre Deak
2025-07-03 13:07 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 19/20] drm/i915/dp: Ack only the handled device service IRQs Imre Deak
2025-07-03 13:14 ` Luca Coelho
2025-07-03 13:18 ` Imre Deak
2025-07-03 13:27 ` Imre Deak
2025-07-03 13:34 ` Luca Coelho
2025-06-26 8:20 ` [PATCH 20/20] drm/i915/dp: Ack only the handled link " Imre Deak
2025-07-03 13:18 ` Luca Coelho
2025-06-26 13:06 ` ✓ i915.CI.BAT: success for drm/i915/dp: Fix few SST HPD IRQ handling issues Patchwork
2025-06-26 22:48 ` ✗ i915.CI.Full: failure " Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).