Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH i-g-t 00/13] Expand kms_dp_link_training coverage
@ 2026-09-16  4:47 Kunal Joshi
  2026-09-16  4:47 ` [PATCH i-g-t 01/13] lib/i915/i915_dp: Add helpers for the allowed link configs debugfs Kunal Joshi
                   ` (16 more replies)
  0 siblings, 17 replies; 31+ messages in thread
From: Kunal Joshi @ 2026-09-16  4:47 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi

kms_dp_link_training forces the maximum link config, reads the link rate
back from debugfs, and asserts the two match. Both values are
intel_dp->link_rate, i.e. what the driver asked the sink for, not what
the link ended up running at, so a link that failed training and fell
back still passes. The FIXME in the test has been saying this for a
while. Nothing below the maximum is trained at all, which is precisely
the range every fallback and every bandwidth constrained modeset uses.

The series turns this into a sweep over the link configuration space:

 - lib helpers for the debugfs the test needs (allowed link configs,
   forced rate/lane, retrain state, Type-C port mode), plus generic DPCD
   read and link status helpers in lib/igt_dp covering both 8b/10b and
   128b/132b.

 - Enumerate the configs in intel_dp_allowed_link_configs, i.e. the
   intersection the driver really picks from, force each in turn as a
   dynamic subtest, and verify from both ends: no link recovery in
   progress, retraining not disabled, and the sink reporting CR, EQ and
   symbol lock on every active lane.

 - Configs that cannot carry the modes are skipped rather than failed,
   using the aggregate data rate of all streams the commit enables.
   Deriving the floor from the driver's unforced choice does not work
   for MST, where it always configures max link bw.

 - Outputs are grouped into links, so an MST topology is trained once as
   a unit, and every output is covered instead of the first one. Per
   connector mode subtests drive the smallest mode the sink offers,
   which keeps the most configs reachable.

 - Separate subtests for tbt-alt and direct links. That is where the
   link clock comes from, and today a lab with no dock and a lab with a
   broken tunnel look identical. The connector mode has to be in the
   static subtest name, since a dynamic subtest that skips is not
   counted as executed and the no-dock lab would report green.

The old four subtests keep their names and their PHY agnostic scope.
Everything new is guarded by igt_require() on the debugfs it needs, and
the sink side checks skip when the DP AUX chardev is not built in.

Kunal Joshi (13):
  lib/i915/i915_dp: Add helpers for the allowed link configs debugfs
  tests/intel/kms_dp_link_training: Use the UHBR helpers from lib
  tests/intel/kms_dp_link_training: Extract train_link_config()
  tests/intel/kms_dp_link_training: Check the config survived training
  tests/intel/kms_dp_link_training: Drive the smallest mode the sink
    offers
  tests/intel/kms_dp_link_training: Train every allowed link config
  lib/i915/i915_dp: Add a Type-C port mode query
  tests/intel/kms_dp_link_training: Log the DP link inventory in the
    fixture
  tests/intel/kms_dp_link_training: Group the outputs into links
  tests/intel/kms_dp_link_training: Add per connector mode subtests
  lib/igt_dp: Add DPCD read helpers
  lib/igt_dp: Add link status predicates for both channel codings
  tests/intel/kms_dp_link_training: Verify the trained link from the
    sink side

 lib/i915/i915_dp.c                 | 192 ++++++++
 lib/i915/i915_dp.h                 |  41 ++
 lib/igt_dp.c                       | 211 ++++++++
 lib/igt_dp.h                       |  13 +
 tests/intel/kms_dp_link_training.c | 767 +++++++++++++++++++++++++----
 5 files changed, 1123 insertions(+), 101 deletions(-)

-- 
2.25.1


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

* [PATCH i-g-t 01/13] lib/i915/i915_dp: Add helpers for the allowed link configs debugfs
  2026-09-16  4:47 [PATCH i-g-t 00/13] Expand kms_dp_link_training coverage Kunal Joshi
@ 2026-09-16  4:47 ` Kunal Joshi
  2026-09-21  8:37   ` S, Sowmiya
  2026-09-16  4:47 ` [PATCH i-g-t 02/13] tests/intel/kms_dp_link_training: Use the UHBR helpers from lib Kunal Joshi
                   ` (15 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Kunal Joshi @ 2026-09-16  4:47 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi

i915_dp_get_max_supported_rate() parses i915_dp_force_link_rate, which
lists the source rates only. Writing back a rate from that list which
the sink never advertised still succeeds, and the kernel silently
clamps the effective rate, so a test built on it reports a rate the
link was never trained at.

The kernel already exports the set the driver actually picks from, the
intersection of the source rates, the rates the sink advertises and the
current link limits, as space separated "<lanes>x<rate>" entries in
the per-connector intel_dp_allowed_link_configs debugfs file.

Add i915_dp_get_allowed_link_configs() to read that set into an array
of struct i915_dp_link_config, and
i915_dp_has_allowed_link_configs_debugfs() so a test can skip on a
kernel without the file.

i915_dp_get_next_lower_rate() already reads this file, but only for the
rate; the lane count of each entry is discarded. Keep both, so callers
that want a single rate do not have to handle the whole set.

The driver lists the configurations in its own preference order, which
differs between SST and MST, so callers must treat the result as an
unordered set.

Assisted-by: GitHub_Copilot:claude-opus-5
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
 lib/i915/i915_dp.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++
 lib/i915/i915_dp.h | 17 ++++++++++
 2 files changed, 98 insertions(+)

diff --git a/lib/i915/i915_dp.c b/lib/i915/i915_dp.c
index 3d570f7cc..aba6aa8d5 100644
--- a/lib/i915/i915_dp.c
+++ b/lib/i915/i915_dp.c
@@ -37,6 +37,12 @@
 #include "igt_core.h"
 #include "igt_kms.h"
 
+/*
+ * The driver allows at most 10 link rates over 3 lane counts, i.e. 30 entries
+ * of at most "4x2000000 ", so 1024 has plenty of room to spare.
+ */
+#define LINK_CONFIGS_BUF_SIZE	1024
+
 /**
  * i915_dp_parse_marked_value:
  * @buf: Buffer containing the content to parse
@@ -391,6 +397,81 @@ int i915_dp_get_max_supported_rate(int drm_fd, const igt_output_t *output)
 	return max_rate;
 }
 
+/**
+ * i915_dp_has_allowed_link_configs_debugfs:
+ * @drm_fd: A drm file descriptor
+ * @output: Target output
+ *
+ * Checks if the allowed link configs debugfs is available for a specific
+ * output.
+ *
+ * Returns: True if the debugfs is available, false otherwise
+ */
+bool i915_dp_has_allowed_link_configs_debugfs(int drm_fd, igt_output_t *output)
+{
+	char buf[LINK_CONFIGS_BUF_SIZE];
+
+	return igt_debugfs_read_connector_file(drm_fd, igt_output_name(output),
+					       "intel_dp_allowed_link_configs",
+					       buf, sizeof(buf)) == 0;
+}
+
+/**
+ * i915_dp_get_allowed_link_configs:
+ * @drm_fd: A drm file descriptor
+ * @output: Target output
+ * @configs: Array to store the allowed link configurations in
+ * @max_configs: Number of entries in @configs
+ *
+ * Read the link configurations the driver currently allows on @output, i.e.
+ * the intersection of the source rates, the rates the sink advertises and the
+ * current link limits.
+ *
+ * The driver lists them in the order it would pick them, which differs between
+ * SST and MST and depends on earlier link training results, so callers have to
+ * treat the result as an unordered set.
+ *
+ * Returns: The number of configurations stored in @configs
+ */
+int i915_dp_get_allowed_link_configs(int drm_fd, igt_output_t *output,
+				     struct i915_dp_link_config *configs,
+				     int max_configs)
+{
+	char buf[LINK_CONFIGS_BUF_SIZE];
+	char *token, *saveptr = NULL;
+	int count = 0;
+	int res;
+
+	res = igt_debugfs_read_connector_file(drm_fd, igt_output_name(output),
+					      "intel_dp_allowed_link_configs",
+					      buf, sizeof(buf));
+	igt_assert_f(res == 0, "Unable to read %s/intel_dp_allowed_link_configs\n",
+		     igt_output_name(output));
+
+	/* An empty set of allowed configurations reads back as a bare newline. */
+	buf[strcspn(buf, "\n")] = '\0';
+
+	for (token = strtok_r(buf, " ", &saveptr); token;
+	     token = strtok_r(NULL, " ", &saveptr)) {
+		int lane_count, link_rate;
+		char extra;
+
+		igt_assert_f(count < max_configs,
+			     "More than %d link configs on %s\n",
+			     max_configs, igt_output_name(output));
+		igt_assert_f(sscanf(token, "%dx%d%c", &lane_count, &link_rate,
+				    &extra) == 2 && lane_count > 0 &&
+			     link_rate > 0,
+			     "Failed to parse link config '%s'\n", token);
+
+		configs[count].lane_count = lane_count;
+		configs[count].link_rate = link_rate;
+		count++;
+	}
+
+	return count;
+}
+
 /**
  * i915_dp_get_next_lower_rate:
  * @drm_fd: A drm file descriptor
diff --git a/lib/i915/i915_dp.h b/lib/i915/i915_dp.h
index 5d17713e2..c818b3937 100644
--- a/lib/i915/i915_dp.h
+++ b/lib/i915/i915_dp.h
@@ -10,6 +10,19 @@
 /* DP link rates are in 10 kbit/s units; UHBR10 is 10 Gbps. */
 #define I915_DP_UHBR10_LINK_RATE	1000000
 
+/**
+ * struct i915_dp_link_config:
+ * @lane_count: Number of lanes
+ * @link_rate: Link rate in 10 kbit/s units
+ *
+ * A single link configuration, as listed by the intel_dp_allowed_link_configs
+ * connector debugfs file.
+ */
+struct i915_dp_link_config {
+	int lane_count;
+	int link_rate;
+};
+
 /**
  * i915_dp_is_uhbr_rate:
  * @link_rate: DP link rate in 10 kbit/s units, as reported by the
@@ -40,6 +53,10 @@ void i915_dp_reset_link_params(int drm_fd, igt_output_t *output);
 void i915_dp_set_link_params(int drm_fd, igt_output_t *output,
 			     const char *link_rate, const char *lane_count);
 int i915_dp_get_max_supported_rate(int drm_fd, const igt_output_t *output);
+bool i915_dp_has_allowed_link_configs_debugfs(int drm_fd, igt_output_t *output);
+int i915_dp_get_allowed_link_configs(int drm_fd, igt_output_t *output,
+				     struct i915_dp_link_config *configs,
+				     int max_configs);
 int i915_dp_get_next_lower_rate(int drm_fd, igt_output_t *output, int rate);
 
 #endif
-- 
2.25.1


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

* [PATCH i-g-t 02/13] tests/intel/kms_dp_link_training: Use the UHBR helpers from lib
  2026-09-16  4:47 [PATCH i-g-t 00/13] Expand kms_dp_link_training coverage Kunal Joshi
  2026-09-16  4:47 ` [PATCH i-g-t 01/13] lib/i915/i915_dp: Add helpers for the allowed link configs debugfs Kunal Joshi
@ 2026-09-16  4:47 ` Kunal Joshi
  2026-09-21  8:38   ` S, Sowmiya
  2026-09-16  4:47 ` [PATCH i-g-t 03/13] tests/intel/kms_dp_link_training: Extract train_link_config() Kunal Joshi
                   ` (14 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Kunal Joshi @ 2026-09-16  4:47 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi

The test defines its own UHBR_LINK_RATE and open codes the UHBR
comparison, while lib/i915/i915_dp.h already has
I915_DP_UHBR10_LINK_RATE and i915_dp_is_uhbr_rate() for exactly that.

Drop the local define and use the lib helpers.

There should be no functional changes here.

Assisted-by: GitHub_Copilot:claude-opus-5
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
 tests/intel/kms_dp_link_training.c | 11 ++---------
 1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/tests/intel/kms_dp_link_training.c b/tests/intel/kms_dp_link_training.c
index f67fdf59d..2d5241246 100644
--- a/tests/intel/kms_dp_link_training.c
+++ b/tests/intel/kms_dp_link_training.c
@@ -27,11 +27,6 @@
 #include "intel/kms_joiner_helper.h"
 #include "intel/kms_mst_helper.h"
 
-/*
- * DP Spec defines 10, 13.5, and 20 Gbps as UHBR.
- * Anything below that is considered NON-UHBR.
- */
-#define UHBR_LINK_RATE	1000000
 #define RETRAIN_COUNT	1
 
 typedef struct {
@@ -217,7 +212,7 @@ static bool run_link_rate_test(data_t *data, bool mst, bool uhbr)
 	max_lane_count = i915_dp_get_max_lane_count(data->drm_fd, data->output);
 
 	/* Check sink supports uhbr or not */
-	is_uhbr_output = (max_link_rate >= UHBR_LINK_RATE);
+	is_uhbr_output = i915_dp_is_uhbr_rate(max_link_rate);
 	if ((uhbr && !is_uhbr_output) || (!uhbr && is_uhbr_output)) {
 		igt_info("Test expects %s, but output %s is %s.\n",
 			 uhbr ? "UHBR" : "NON-UHBR",
@@ -244,9 +239,7 @@ static bool run_link_rate_test(data_t *data, bool mst, bool uhbr)
 	igt_info("Current link rate is %d\n", current_link_rate);
 	igt_assert_f(current_link_rate == max_link_rate,
 		     "Link training did not succeed at max link rate.\n");
-	igt_assert_f(is_uhbr_output ?
-		     current_link_rate >= UHBR_LINK_RATE :
-		     current_link_rate < UHBR_LINK_RATE,
+	igt_assert_f(i915_dp_is_uhbr_rate(current_link_rate) == is_uhbr_output,
 		     is_uhbr_output ? "Link training didn't happen at uhbr rates" :
 		     "Link training didn't happen at non-uhbr rates");
 	igt_info("----------------------------------------------------\n");
-- 
2.25.1


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

* [PATCH i-g-t 03/13] tests/intel/kms_dp_link_training: Extract train_link_config()
  2026-09-16  4:47 [PATCH i-g-t 00/13] Expand kms_dp_link_training coverage Kunal Joshi
  2026-09-16  4:47 ` [PATCH i-g-t 01/13] lib/i915/i915_dp: Add helpers for the allowed link configs debugfs Kunal Joshi
  2026-09-16  4:47 ` [PATCH i-g-t 02/13] tests/intel/kms_dp_link_training: Use the UHBR helpers from lib Kunal Joshi
@ 2026-09-16  4:47 ` Kunal Joshi
  2026-09-22 11:51   ` S, Sowmiya
  2026-09-16  4:47 ` [PATCH i-g-t 04/13] tests/intel/kms_dp_link_training: Check the config survived training Kunal Joshi
                   ` (13 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Kunal Joshi @ 2026-09-16  4:47 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi

The force and retrain sequence is written inline in
run_link_rate_test(), which makes it impossible to run for more than
one configuration.

Extract it into train_link_config(), taking the configuration to train
as a struct i915_dp_link_config. Prep for training more than the
maximum.

While here, stop passing a drmModePropertyPtr to kmstest_get_property()
in assert_link_status_good(). That function returns whether it found the
property and allocates the out parameter on success; the existing call
ignores the return value, asserts on a possibly uninitialised value and
leaks the property on every call. Pass NULL and check the return. That
also lets the SST and MST branches share one loop.

The trailing UHBR assertion goes away with the move. It could not fire:
the rate is asserted to equal the forced rate, and the forced rate was
already classified as UHBR or not a few lines above.

There should be no functional changes here.

Assisted-by: GitHub_Copilot:claude-opus-5
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
 tests/intel/kms_dp_link_training.c | 97 +++++++++++++++---------------
 1 file changed, 48 insertions(+), 49 deletions(-)

diff --git a/tests/intel/kms_dp_link_training.c b/tests/intel/kms_dp_link_training.c
index 2d5241246..595d78d98 100644
--- a/tests/intel/kms_dp_link_training.c
+++ b/tests/intel/kms_dp_link_training.c
@@ -72,9 +72,7 @@ static int check_condition_with_timeout(int drm_fd, igt_output_t *output,
 static void assert_link_status_good(data_t *data, bool mst)
 {
 	igt_output_t *outputs[IGT_MAX_PIPES];
-	uint32_t link_status_prop_id;
 	uint64_t link_status_value;
-	drmModePropertyPtr link_status_prop;
 	int count = 0;
 	int i;
 
@@ -83,32 +81,54 @@ static void assert_link_status_good(data_t *data, bool mst)
 								 &data->display, data->output,
 								 outputs, &count) == 0,
 								 "Unable to find MST outputs\n");
-
-		for (i = 0; i < count; i++) {
-			kmstest_get_property(data->drm_fd,
-					     outputs[i]->config.connector->connector_id,
-					     DRM_MODE_OBJECT_CONNECTOR,
-					     "link-status",
-					     &link_status_prop_id,
-					     &link_status_value,
-					     &link_status_prop);
-
-			igt_assert_eq(link_status_value,
-				      DRM_MODE_LINK_STATUS_GOOD);
-		}
 	} else {
-		kmstest_get_property(data->drm_fd,
-				     data->output->config.connector->connector_id,
-				     DRM_MODE_OBJECT_CONNECTOR,
-				     "link-status",
-				     &link_status_prop_id,
-				     &link_status_value,
-				     &link_status_prop);
+		outputs[0] = data->output;
+		count = 1;
+	}
+
+	for (i = 0; i < count; i++) {
+		igt_assert_f(kmstest_get_property(data->drm_fd,
+						  outputs[i]->config.connector->connector_id,
+						  DRM_MODE_OBJECT_CONNECTOR,
+						  "link-status", NULL,
+						  &link_status_value, NULL),
+			     "No link-status property on %s\n",
+			     igt_output_name(outputs[i]));
 
 		igt_assert_eq(link_status_value, DRM_MODE_LINK_STATUS_GOOD);
 	}
 }
 
+/*
+ * train_link_config - Force one link configuration, re-establish the link and
+ * check that the configuration took effect.
+ */
+static void train_link_config(data_t *data, bool mst,
+			      const struct i915_dp_link_config *config)
+{
+	int current_link_rate;
+	char rate_str[32];
+	char lane_str[32];
+
+	snprintf(rate_str, sizeof(rate_str), "%d", config->link_rate);
+	snprintf(lane_str, sizeof(lane_str), "%d", config->lane_count);
+	igt_info("Training %s at %d lanes, rate %d\n",
+		 igt_output_name(data->output), config->lane_count,
+		 config->link_rate);
+
+	i915_dp_set_link_params(data->drm_fd, data->output, rate_str, lane_str);
+	i915_dp_force_link_retrain(data->drm_fd, data->output, RETRAIN_COUNT);
+	igt_assert_eq(check_condition_with_timeout(data->drm_fd, data->output,
+						   i915_dp_get_pending_retrain,
+						   1.0, 20.0), 0);
+	assert_link_status_good(data, mst);
+
+	current_link_rate = i915_dp_get_current_link_rate(data->drm_fd, data->output);
+	igt_info("Current link rate is %d\n", current_link_rate);
+	igt_assert_f(current_link_rate == config->link_rate,
+		     "Link training did not succeed at the forced link rate.\n");
+}
+
 /*
  * setup_planes_fbs - Create solid-color FBs and attach them to the primary plane.
  */
@@ -188,12 +208,8 @@ static void do_modeset(data_t *data, bool mst)
  */
 static bool run_link_rate_test(data_t *data, bool mst, bool uhbr)
 {
-	int max_link_rate;
-	int max_lane_count;
-	int current_link_rate;
+	struct i915_dp_link_config config;
 	bool is_uhbr_output;
-	char rate_str[32];
-	char lane_str[32];
 
 	igt_display_reset(&data->display);
 	i915_dp_reset_link_params(data->drm_fd, data->output);
@@ -208,12 +224,12 @@ static bool run_link_rate_test(data_t *data, bool mst, bool uhbr)
 
 	/* FIXME : Driver may lie max link rate or max lane count */
 	/* Read max_link_rate and max_lane_count */
-	max_link_rate = i915_dp_get_max_link_rate(data->drm_fd, data->output);
-	max_lane_count = i915_dp_get_max_lane_count(data->drm_fd, data->output);
+	config.link_rate = i915_dp_get_max_link_rate(data->drm_fd, data->output);
+	config.lane_count = i915_dp_get_max_lane_count(data->drm_fd, data->output);
 
 	/* Check sink supports uhbr or not */
-	is_uhbr_output = i915_dp_is_uhbr_rate(max_link_rate);
-	if ((uhbr && !is_uhbr_output) || (!uhbr && is_uhbr_output)) {
+	is_uhbr_output = i915_dp_is_uhbr_rate(config.link_rate);
+	if (uhbr != is_uhbr_output) {
 		igt_info("Test expects %s, but output %s is %s.\n",
 			 uhbr ? "UHBR" : "NON-UHBR",
 			 data->output->name,
@@ -222,26 +238,9 @@ static bool run_link_rate_test(data_t *data, bool mst, bool uhbr)
 		return false;
 	}
 
-	snprintf(rate_str, sizeof(rate_str), "%d", max_link_rate);
-	snprintf(lane_str, sizeof(lane_str), "%d", max_lane_count);
-	igt_info("Max link rate for %s is %s, lane count = %d\n",
-		 data->output->name, rate_str, max_lane_count);
-
 	/* Force retrain at max link params */
-	i915_dp_set_link_params(data->drm_fd, data->output, rate_str, lane_str);
-	i915_dp_force_link_retrain(data->drm_fd, data->output, RETRAIN_COUNT);
-	igt_assert_eq(check_condition_with_timeout(data->drm_fd, data->output,
-						   i915_dp_get_pending_retrain,
-						   1.0, 20.0), 0);
-	assert_link_status_good(data, mst);
+	train_link_config(data, mst, &config);
 
-	current_link_rate = i915_dp_get_current_link_rate(data->drm_fd, data->output);
-	igt_info("Current link rate is %d\n", current_link_rate);
-	igt_assert_f(current_link_rate == max_link_rate,
-		     "Link training did not succeed at max link rate.\n");
-	igt_assert_f(i915_dp_is_uhbr_rate(current_link_rate) == is_uhbr_output,
-		     is_uhbr_output ? "Link training didn't happen at uhbr rates" :
-		     "Link training didn't happen at non-uhbr rates");
 	igt_info("----------------------------------------------------\n");
 	return true;
 }
-- 
2.25.1


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

* [PATCH i-g-t 04/13] tests/intel/kms_dp_link_training: Check the config survived training
  2026-09-16  4:47 [PATCH i-g-t 00/13] Expand kms_dp_link_training coverage Kunal Joshi
                   ` (2 preceding siblings ...)
  2026-09-16  4:47 ` [PATCH i-g-t 03/13] tests/intel/kms_dp_link_training: Extract train_link_config() Kunal Joshi
@ 2026-09-16  4:47 ` Kunal Joshi
  2026-09-22  5:25   ` S, Sowmiya
  2026-09-16  4:47 ` [PATCH i-g-t 05/13] tests/intel/kms_dp_link_training: Drive the smallest mode the sink offers Kunal Joshi
                   ` (12 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Kunal Joshi @ 2026-09-16  4:47 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi

The test asserts that the current link rate equals the rate it forced.
Both values come from the same debugfs file, which the kernel prints
from intel_dp->link_rate, the rate the driver asked the sink for, not
the rate the link ended up running at. A link that failed training and
fell back still reads back the forced value, so the assertion passes on
a link that never trained. The FIXME in the test says as much.

link-status does not close the gap either. With both the rate and the
lane count forced there is nothing to fall back to, so the driver never
reaches intel_dp_queue_modeset_retry_for_link() and link-status stays
GOOD on a link that failed for good. What it does instead is mark
retraining disabled, which i915_dp_link_retrain_disabled exposes. Assert
on that.

Wait for the verdict rather than reading it once. The driver clears the
forced retrain flag when the retrain modeset starts and only then queues
its automatic retrain, so when the test's poll for the flag completes
the first failure is still in flight. Recovery ends either with a
trained link or with retraining disabled, so poll for the whole recovery
timeout before calling the link trained.

Read the state before the next force: forcing a rate or a lane count
runs intel_dp_reset_link_params(), which resets the recovery state and
would mask the failure.

Drop the FIXME.

Note this can newly fail a link whose advertised maximum never trained.
That is the bug the FIXME was placed for.

Assisted-by: GitHub_Copilot:claude-opus-5
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
 tests/intel/kms_dp_link_training.c | 57 ++++++++++++++++++++++++++++--
 1 file changed, 55 insertions(+), 2 deletions(-)

diff --git a/tests/intel/kms_dp_link_training.c b/tests/intel/kms_dp_link_training.c
index 595d78d98..b2d686f28 100644
--- a/tests/intel/kms_dp_link_training.c
+++ b/tests/intel/kms_dp_link_training.c
@@ -29,6 +29,13 @@
 
 #define RETRAIN_COUNT	1
 
+/*
+ * How long the driver's link recovery is given to reach a verdict, in seconds.
+ * The automatic retrain is queued without a delay, so this only has to cover
+ * one retrain and the fallback selection that follows it.
+ */
+#define LINK_RECOVERY_TIMEOUT	5.0
+
 typedef struct {
 	int drm_fd;
 	uint32_t devid;
@@ -99,9 +106,46 @@ static void assert_link_status_good(data_t *data, bool mst)
 	}
 }
 
+/*
+ * assert_link_recovery_idle - Let the driver's link recovery reach a verdict
+ * and check it had nothing to recover.
+ *
+ * A failed training is not visible the moment the forced retrain flag clears:
+ * the driver clears that flag when the retrain modeset starts and only then
+ * queues its automatic retrain, so the first failure is still in flight. Once
+ * the automatic retrain is used up the driver looks for a configuration to
+ * fall back to, and with both the rate and the lane count forced there is
+ * none. It then marks retraining disabled, which is the one place a link that
+ * failed for good becomes visible.
+ *
+ * Poll for that verdict rather than reading it once, and give recovery the
+ * full timeout to reach it before calling the link trained.
+ */
+static void assert_link_recovery_idle(data_t *data,
+				      const struct i915_dp_link_config *config)
+{
+	struct timespec start, now;
+	double elapsed;
+
+	clock_gettime(CLOCK_MONOTONIC, &start);
+
+	do {
+		igt_assert_f(!i915_dp_get_link_retrain_disabled(data->drm_fd,
+								data->output),
+			     "Link training at %d lanes, rate %d was given up on.\n",
+			     config->lane_count, config->link_rate);
+
+		usleep(200 * 1000);
+
+		clock_gettime(CLOCK_MONOTONIC, &now);
+		elapsed = (now.tv_sec - start.tv_sec) +
+			(now.tv_nsec - start.tv_nsec) / 1e9;
+	} while (elapsed < LINK_RECOVERY_TIMEOUT);
+}
+
 /*
  * train_link_config - Force one link configuration, re-establish the link and
- * check that the configuration took effect.
+ * check that the configuration took effect and survived training.
  */
 static void train_link_config(data_t *data, bool mst,
 			      const struct i915_dp_link_config *config)
@@ -127,6 +171,16 @@ static void train_link_config(data_t *data, bool mst,
 	igt_info("Current link rate is %d\n", current_link_rate);
 	igt_assert_f(current_link_rate == config->link_rate,
 		     "Link training did not succeed at the forced link rate.\n");
+
+	/*
+	 * The link parameters read back above are the ones the driver asked
+	 * the sink for, not the ones the link ended up running at, so ask the
+	 * driver whether it had to recover the link after training it.
+	 *
+	 * This has to happen before the next force: forcing a rate or a lane
+	 * count resets the recovery state, which would mask the failure.
+	 */
+	assert_link_recovery_idle(data, config);
 }
 
 /*
@@ -222,7 +276,6 @@ static bool run_link_rate_test(data_t *data, bool mst, bool uhbr)
 						   1.0, 20.0), 0);
 	assert_link_status_good(data, mst);
 
-	/* FIXME : Driver may lie max link rate or max lane count */
 	/* Read max_link_rate and max_lane_count */
 	config.link_rate = i915_dp_get_max_link_rate(data->drm_fd, data->output);
 	config.lane_count = i915_dp_get_max_lane_count(data->drm_fd, data->output);
-- 
2.25.1


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

* [PATCH i-g-t 05/13] tests/intel/kms_dp_link_training: Drive the smallest mode the sink offers
  2026-09-16  4:47 [PATCH i-g-t 00/13] Expand kms_dp_link_training coverage Kunal Joshi
                   ` (3 preceding siblings ...)
  2026-09-16  4:47 ` [PATCH i-g-t 04/13] tests/intel/kms_dp_link_training: Check the config survived training Kunal Joshi
@ 2026-09-16  4:47 ` Kunal Joshi
  2026-09-22 11:59   ` S, Sowmiya
  2026-09-16  4:47 ` [PATCH i-g-t 06/13] tests/intel/kms_dp_link_training: Train every allowed link config Kunal Joshi
                   ` (11 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Kunal Joshi @ 2026-09-16  4:47 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi

The test modesets the output's preferred mode, which on a modern
monitor needs most of the link. The driver picks the lowest
configuration that carries the mode, so a large mode leaves most of the
link configurations below the threshold where they can be used at all.

Override the smallest mode the sink offers instead. That keeps the
largest number of configurations usable, and it stays out of the
compressed regime, where the bpp the driver picks rather than the link
configuration absorbs the difference.

The override is cleared by the igt_display_reset() each run starts
with, so it needs no explicit teardown.

Prep for training every allowed configuration.

Assisted-by: GitHub_Copilot:claude-opus-5
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
 tests/intel/kms_dp_link_training.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/tests/intel/kms_dp_link_training.c b/tests/intel/kms_dp_link_training.c
index b2d686f28..6a174da88 100644
--- a/tests/intel/kms_dp_link_training.c
+++ b/tests/intel/kms_dp_link_training.c
@@ -183,6 +183,25 @@ static void train_link_config(data_t *data, bool mst,
 	assert_link_recovery_idle(data, config);
 }
 
+/*
+ * override_lowest_mode - Drive the mode with the lowest pixel clock, so that
+ * the largest number of link configurations can carry it.
+ */
+static void override_lowest_mode(data_t *data, igt_output_t *output)
+{
+	drmModeConnector *connector = output->config.connector;
+	drmModeModeInfo *mode = NULL;
+	int i;
+
+	for (i = 0; i < connector->count_modes; i++)
+		if (!mode || connector->modes[i].clock < mode->clock)
+			mode = &connector->modes[i];
+
+	igt_assert_f(mode, "No mode on output %s\n", igt_output_name(output));
+
+	igt_output_override_mode(output, mode);
+}
+
 /*
  * setup_planes_fbs - Create solid-color FBs and attach them to the primary plane.
  */
@@ -222,6 +241,7 @@ static void do_modeset(data_t *data, bool mst)
 	int n_pipes = 0;
 	int out_count = 0;
 	igt_crtc_t *crtc;
+	int i;
 
 	for_each_crtc(&data->display, crtc) {
 		valid_pipes_mask |= BIT(crtc->hardware_pipe);
@@ -241,6 +261,9 @@ static void do_modeset(data_t *data, bool mst)
 
 	igt_assert_f(out_count > 0, "Require at least one output\n");
 
+	for (i = 0; i < out_count; i++)
+		override_lowest_mode(data, outs[i]);
+
 	igt_set_all_master_pipes_for_platform(&data->display, &master_pipes_mask);
 
 	igt_assert_f(igt_assign_pipes_for_outputs(data->drm_fd,
-- 
2.25.1


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

* [PATCH i-g-t 06/13] tests/intel/kms_dp_link_training: Train every allowed link config
  2026-09-16  4:47 [PATCH i-g-t 00/13] Expand kms_dp_link_training coverage Kunal Joshi
                   ` (4 preceding siblings ...)
  2026-09-16  4:47 ` [PATCH i-g-t 05/13] tests/intel/kms_dp_link_training: Drive the smallest mode the sink offers Kunal Joshi
@ 2026-09-16  4:47 ` Kunal Joshi
  2026-09-22 13:51   ` S, Sowmiya
  2026-09-16  4:47 ` [PATCH i-g-t 07/13] lib/i915/i915_dp: Add a Type-C port mode query Kunal Joshi
                   ` (10 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Kunal Joshi @ 2026-09-16  4:47 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi

Currently test trains one configuration per output, the maximum. Everything
below it which is what a bandwidth constrained modeset and every
fallback actually use and currently is never trained.

Train every configuration in intel_dp_allowed_link_configs that belongs
to the subtest's encoding class, as one dynamic subtest each, named
<connector>-<lanes>x<rate>. Enumerate with the forced parameters reset,
or the set being read is the forced one rather than the one the driver
would pick from.

Bring the link up inside the dynamic subtest rather than once per
output. The reset, the modeset, the retrain poll and the link-status
check can all fail, and igt_subtest_with_dynamic() does not allow
explicit failure in the container: igt_fail() asserts on it and aborts
the whole test instead of yielding a dynamic subtest result.

A configuration too narrow to carry the modes is skipped, not failed. A
forced retrain goes through a modeset commit, so such a configuration
makes the retrain fail and the driver queue a modeset retry, which
shows up as a BAD link-status, a correct driver rejection that must
not be reported as a link training failure. Derive the floor from the
modes' own bandwidth requirement rather than from the configuration the
driver picks when nothing is forced: for MST, and for eDP after a
fallback, the driver configures the maximum link bandwidth regardless
of the mode i.e "For MST we always configure max link bw" in
intel_dp_compute_config_link_bpp_limits(), so using its unforced
choice as the floor would mark every other configuration unreachable
and quietly reduce MST back to training one configuration.

Sum the floor over every stream driven over the link. The modeset
drives all of an MST topology's streams, so the link carries all of
them; a single stream's requirement would let a configuration that
cannot carry the aggregate payload through and turn a correct driver
rejection into a link training failure.

The floor assumes uncompressed 8 bpc and so overestimates what the modes
need, which biases a borderline configuration towards skipping rather
than failing. Note also that 8b/10b MST runs at 78.75% efficiency
rather than 80%, because of the 1-in-64 MTPH overhead that
drm_dp_bw_channel_coding_efficiency() deliberately does not account
for; using 80% there overestimates the available bandwidth and turns a
correct rejection into a failure.

Clear link-status before every attempt. It latches BAD when the driver
falls back and only userspace can clear it, so without this a single
fallback anywhere in the run poisons every later assertion. Assert the
forced lane count took effect too, which only becomes meaningful now
that the configurations differ in lane count. Reset the forced
parameters after every configuration, since they otherwise survive a
sink disconnect.

Require the allowed link configs debugfs, so that a kernel too old to
have it skips rather than training nothing.

The subtest names and their scope are unchanged.

Assisted-by: GitHub_Copilot:claude-opus-5
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
 tests/intel/kms_dp_link_training.c | 193 +++++++++++++++++++++++++----
 1 file changed, 167 insertions(+), 26 deletions(-)

diff --git a/tests/intel/kms_dp_link_training.c b/tests/intel/kms_dp_link_training.c
index 6a174da88..71531e8dc 100644
--- a/tests/intel/kms_dp_link_training.c
+++ b/tests/intel/kms_dp_link_training.c
@@ -29,6 +29,9 @@
 
 #define RETRAIN_COUNT	1
 
+/* The driver allows at most 10 link rates over 3 lane counts. */
+#define MAX_LINK_CONFIGS	32
+
 /*
  * How long the driver's link recovery is given to reach a verdict, in seconds.
  * The automatic retrain is queued without a delay, so this only has to cover
@@ -106,6 +109,103 @@ static void assert_link_status_good(data_t *data, bool mst)
 	}
 }
 
+/*
+ * set_link_status_good - Clear a latched BAD link-status.
+ *
+ * The property latches BAD when the driver falls back and only userspace can
+ * clear it, so without clearing it before every attempt a single fallback
+ * anywhere in the run poisons every later assertion.
+ */
+static void set_link_status_good(data_t *data, bool mst)
+{
+	igt_output_t *outputs[IGT_MAX_PIPES];
+	int count = 0;
+	int i;
+
+	if (mst) {
+		igt_assert_f(igt_find_all_mst_output_in_topology(data->drm_fd,
+								 &data->display, data->output,
+								 outputs, &count) == 0,
+								 "Unable to find MST outputs\n");
+	} else {
+		outputs[0] = data->output;
+		count = 1;
+	}
+
+	for (i = 0; i < count; i++)
+		igt_output_set_prop_value(outputs[i], IGT_CONNECTOR_LINK_STATUS,
+					  DRM_MODE_LINK_STATUS_GOOD);
+
+	igt_display_commit2(&data->display, COMMIT_ATOMIC);
+}
+
+/*
+ * link_config_data_rate - Data rate a link configuration carries, in
+ * 10 kbit/s units.
+ *
+ * Channel coding efficiency is in 1ppm units, matching the kernel's
+ * drm_dp_bw_channel_coding_efficiency(): 96.71% for 128b/132b and 80% for
+ * 8b/10b. 8b/10b MST is 78.75% instead, because of the 1-in-64 MTPH overhead
+ * that helper deliberately does not account for. Using 80% there overestimates
+ * the available bandwidth and turns a correct driver rejection into a failure.
+ */
+static int link_config_data_rate(const struct i915_dp_link_config *config,
+				 bool mst)
+{
+	uint64_t symbol_rate = (uint64_t)config->link_rate * config->lane_count;
+	int efficiency;
+
+	if (i915_dp_is_uhbr_rate(config->link_rate))
+		efficiency = 967100;
+	else
+		efficiency = mst ? 787500 : 800000;
+
+	return symbol_rate * efficiency / 1000000;
+}
+
+/*
+ * mode_data_rate - Data rate a mode needs, in 10 kbit/s units.
+ *
+ * Uncompressed 8 bpc, which is what the smallest mode of a DP sink is driven
+ * at. Deliberately pessimistic: overestimating what the mode needs makes a
+ * borderline configuration skip rather than fail.
+ */
+static int mode_data_rate(const drmModeModeInfo *mode)
+{
+	return DIV_ROUND_UP(mode->clock * 24, 10);
+}
+
+/*
+ * link_min_data_rate - Data rate the link has to carry, in 10 kbit/s units.
+ *
+ * do_modeset() drives every stream of an MST topology, so the link carries all
+ * of them at once. Summing them is what tells a configuration that cannot
+ * carry the whole payload apart from one that can, which a single stream's
+ * requirement would let through and turn into a false link training failure.
+ */
+static int link_min_data_rate(data_t *data, bool mst)
+{
+	igt_output_t *outputs[IGT_MAX_PIPES];
+	int count = 0;
+	int rate = 0;
+	int i;
+
+	if (mst) {
+		igt_assert_f(igt_find_all_mst_output_in_topology(data->drm_fd,
+								 &data->display, data->output,
+								 outputs, &count) == 0,
+								 "Unable to find MST outputs\n");
+	} else {
+		outputs[0] = data->output;
+		count = 1;
+	}
+
+	for (i = 0; i < count; i++)
+		rate += mode_data_rate(igt_output_get_mode(outputs[i]));
+
+	return rate;
+}
+
 /*
  * assert_link_recovery_idle - Let the driver's link recovery reach a verdict
  * and check it had nothing to recover.
@@ -160,6 +260,8 @@ static void train_link_config(data_t *data, bool mst,
 		 igt_output_name(data->output), config->lane_count,
 		 config->link_rate);
 
+	set_link_status_good(data, mst);
+
 	i915_dp_set_link_params(data->drm_fd, data->output, rate_str, lane_str);
 	i915_dp_force_link_retrain(data->drm_fd, data->output, RETRAIN_COUNT);
 	igt_assert_eq(check_condition_with_timeout(data->drm_fd, data->output,
@@ -171,6 +273,9 @@ static void train_link_config(data_t *data, bool mst,
 	igt_info("Current link rate is %d\n", current_link_rate);
 	igt_assert_f(current_link_rate == config->link_rate,
 		     "Link training did not succeed at the forced link rate.\n");
+	igt_assert_f(i915_dp_get_current_lane_count(data->drm_fd, data->output) ==
+		     config->lane_count,
+		     "Link training did not succeed at the forced lane count.\n");
 
 	/*
 	 * The link parameters read back above are the ones the driver asked
@@ -280,14 +385,14 @@ static void do_modeset(data_t *data, bool mst)
 }
 
 /*
- * run_link_rate_test - Main link training routine. Expects the MST vs. SST check
- * to be done beforehand. Returns true if tested at the correct rate.
+ * setup_link - Bring the link up at the parameters the driver picks itself.
+ *
+ * Runs per dynamic subtest rather than once per link: everything it does can
+ * fail, and a failure in a igt_subtest_with_dynamic() container aborts the
+ * whole test instead of yielding a dynamic subtest result.
  */
-static bool run_link_rate_test(data_t *data, bool mst, bool uhbr)
+static void setup_link(data_t *data, bool mst)
 {
-	struct i915_dp_link_config config;
-	bool is_uhbr_output;
-
 	igt_display_reset(&data->display);
 	i915_dp_reset_link_params(data->drm_fd, data->output);
 	do_modeset(data, mst);
@@ -298,27 +403,63 @@ static bool run_link_rate_test(data_t *data, bool mst, bool uhbr)
 						   i915_dp_get_pending_retrain,
 						   1.0, 20.0), 0);
 	assert_link_status_good(data, mst);
+}
+
+/*
+ * run_link_rate_test - Main link training routine. Expects the MST vs. SST check
+ * to be done beforehand. Returns true if tested at the correct rate.
+ */
+static bool run_link_rate_test(data_t *data, bool mst, bool uhbr)
+{
+	struct i915_dp_link_config configs[MAX_LINK_CONFIGS];
+	int num_configs, num_dynamics = 0;
+	int i;
+
+	igt_require_f(i915_dp_has_allowed_link_configs_debugfs(data->drm_fd,
+							       data->output),
+		      "Kernel has no intel_dp_allowed_link_configs debugfs\n");
+
+	/*
+	 * Enumerate with the forced parameters reset, or the set being read is
+	 * the forced one rather than the one the driver would pick from.
+	 */
+	i915_dp_reset_link_params(data->drm_fd, data->output);
+	num_configs = i915_dp_get_allowed_link_configs(data->drm_fd, data->output,
+						       configs, ARRAY_SIZE(configs));
+
+	for (i = 0; i < num_configs; i++) {
+		char name[64];
+
+		if (i915_dp_is_uhbr_rate(configs[i].link_rate) != uhbr)
+			continue;
+
+		snprintf(name, sizeof(name), "%s-%dx%d",
+			 igt_output_name(data->output),
+			 configs[i].lane_count, configs[i].link_rate);
+
+		num_dynamics++;
+
+		igt_dynamic(name) {
+			setup_link(data, mst);
+
+			igt_require_f(link_config_data_rate(&configs[i], mst) >=
+				      link_min_data_rate(data, mst),
+				      "%d lanes, rate %d is too narrow for the mode\n",
+				      configs[i].lane_count,
+				      configs[i].link_rate);
+
+			train_link_config(data, mst, &configs[i]);
+		}
 
-	/* Read max_link_rate and max_lane_count */
-	config.link_rate = i915_dp_get_max_link_rate(data->drm_fd, data->output);
-	config.lane_count = i915_dp_get_max_lane_count(data->drm_fd, data->output);
-
-	/* Check sink supports uhbr or not */
-	is_uhbr_output = i915_dp_is_uhbr_rate(config.link_rate);
-	if (uhbr != is_uhbr_output) {
-		igt_info("Test expects %s, but output %s is %s.\n",
-			 uhbr ? "UHBR" : "NON-UHBR",
-			 data->output->name,
-			 is_uhbr_output ? "UHBR" : "NON-UHBR");
-		igt_info("----------------------------------------------------\n");
-		return false;
+		i915_dp_reset_link_params(data->drm_fd, data->output);
 	}
 
-	/* Force retrain at max link params */
-	train_link_config(data, mst, &config);
+	if (!num_dynamics)
+		igt_info("Output %s allows no %sUHBR link config\n",
+			 igt_output_name(data->output), uhbr ? "" : "non-");
 
 	igt_info("----------------------------------------------------\n");
-	return true;
+	return num_dynamics > 0;
 }
 
 /*
@@ -386,7 +527,7 @@ int igt_main()
 	}
 
 	igt_describe("Test we can drive UHBR rates over SST");
-	igt_subtest("uhbr-sst") {
+	igt_subtest_with_dynamic("uhbr-sst") {
 		igt_require_f(intel_display_ver(data.devid) > 13,
 			      "UHBR not supported on platform\n");
 		igt_require_f(test_link_rate(&data, false, true),
@@ -394,7 +535,7 @@ int igt_main()
 	}
 
 	igt_describe("Test we can drive UHBR rates over MST");
-	igt_subtest("uhbr-mst") {
+	igt_subtest_with_dynamic("uhbr-mst") {
                 igt_require_f(intel_display_ver(data.devid) > 13,
                               "UHBR not supported on platform\n");
 		igt_require_f(test_link_rate(&data, true, true),
@@ -402,13 +543,13 @@ int igt_main()
 	}
 
 	igt_describe("Test we can drive NON-UHBR rates over SST");
-	igt_subtest("non-uhbr-sst") {
+	igt_subtest_with_dynamic("non-uhbr-sst") {
 		igt_require_f(test_link_rate(&data, false, false),
 			      "Didn't find any SST output with NON-UHBR rates.\n");
 	}
 
 	igt_describe("Test we can drive NON-UHBR rates over MST");
-	igt_subtest("non-uhbr-mst") {
+	igt_subtest_with_dynamic("non-uhbr-mst") {
 		igt_require_f(test_link_rate(&data, true, false),
 			      "Didn't find any MST output with NON-UHBR rates.\n");
 	}
-- 
2.25.1


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

* [PATCH i-g-t 07/13] lib/i915/i915_dp: Add a Type-C port mode query
  2026-09-16  4:47 [PATCH i-g-t 00/13] Expand kms_dp_link_training coverage Kunal Joshi
                   ` (5 preceding siblings ...)
  2026-09-16  4:47 ` [PATCH i-g-t 06/13] tests/intel/kms_dp_link_training: Train every allowed link config Kunal Joshi
@ 2026-09-16  4:47 ` Kunal Joshi
  2026-09-22 14:55   ` S, Sowmiya
  2026-09-16  4:47 ` [PATCH i-g-t 08/13] tests/intel/kms_dp_link_training: Log the DP link inventory in the fixture Kunal Joshi
                   ` (9 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Kunal Joshi @ 2026-09-16  4:47 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi

Whether a DP link is tunneled over USB4/Thunderbolt decides where its
link clock comes from: a tbt-alt link is clocked by the Thunderbolt
PLL, every other mode by the PHY PLL. A test that wants to cover the
tunneled path has to be able to tell them apart, and nothing in IGT
can today.

The driver already reports it. For every connected Type-C connector
intel_connector_info() prints

	TC Port TC1: mode: tbt-alt, pin assignment: D, max lanes: 4

in the i915_display_info debugfs file, with the mode being one of
disconnected, tbt-alt, dp-alt or legacy. A connector with no TC Port
line is on a combo or native PHY.

Add i915_dp_get_tc_mode() returning that mode as an enum, optionally
along with the pin assignment and the Type-C max lane count, which are
worth having in a log line, and i915_dp_tc_mode_name() to get the
driver's spelling back for the same purpose.

i915_display_info is a per-device file listing the CRTCs first and the
connectors after them, so find the [CONNECTOR:<id>: block belonging to
the output and terminate it at the next [CONNECTOR: marker. Without
that second step a connector on a combo PHY picks up the TC Port line
of whichever connector comes after it.

Start the search at the "Connector info" heading. The CRTC section
names the connectors of every active output, so for an active output
the first [CONNECTOR:<id>: match is intel_encoder_info()'s reference to
it, not its own block. Parsing would then stop before ever reaching the
TC Port line and report a tbt-alt connector as having no Type-C port at
all.

Read the file with igt_sysfs_get(), which sizes the buffer from the
file, rather than the fixed 16 KiB and 8 KiB stack buffers the existing
readers in lib/igt_kms.c use without checking for truncation.

Note that MST stream connectors do report the TC line, since both
branches of intel_connector_info() resolve the digital port with
intel_attached_dp(), so an MST topology can be classified from any of
its streams without finding the root. Disconnected connectors return
early and print no TC line at all, which is why the root connector of
an active MST topology has none.

Assisted-by: GitHub_Copilot:claude-opus-5
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
 lib/i915/i915_dp.c | 111 +++++++++++++++++++++++++++++++++++++++++++++
 lib/i915/i915_dp.h |  24 ++++++++++
 2 files changed, 135 insertions(+)

diff --git a/lib/i915/i915_dp.c b/lib/i915/i915_dp.c
index aba6aa8d5..89d1dbd4d 100644
--- a/lib/i915/i915_dp.c
+++ b/lib/i915/i915_dp.c
@@ -35,7 +35,9 @@
 
 #include "i915_dp.h"
 #include "igt_core.h"
+#include "igt_debugfs.h"
 #include "igt_kms.h"
+#include "igt_sysfs.h"
 
 /*
  * The driver allows at most 10 link rates over 3 lane counts, i.e. 30 entries
@@ -527,3 +529,112 @@ int i915_dp_get_next_lower_rate(int drm_fd, igt_output_t *output, int rate)
 
 	return next;
 }
+
+/**
+ * i915_dp_tc_mode_name:
+ * @mode: Connector mode
+ *
+ * Returns: The driver's name for @mode, for use in a log line
+ */
+const char *i915_dp_tc_mode_name(enum i915_dp_tc_mode mode)
+{
+	switch (mode) {
+	case I915_DP_TC_DISCONNECTED:
+		return "disconnected";
+	case I915_DP_TC_LEGACY:
+		return "legacy";
+	case I915_DP_TC_DP_ALT:
+		return "dp-alt";
+	case I915_DP_TC_TBT_ALT:
+		return "tbt-alt";
+	default:
+		return "native";
+	}
+}
+
+/**
+ * i915_dp_get_tc_mode:
+ * @drm_fd: A drm file descriptor
+ * @output: Target output
+ * @pin_assignment: Where to store the Type-C pin assignment, or NULL
+ * @max_lanes: Where to store the Type-C max lane count, or NULL
+ *
+ * Read the connector mode of @output out of the TC Port line the driver
+ * prints for every connected Type-C connector in the i915_display_info
+ * debugfs file:
+ *
+ *	TC Port TC1: mode: tbt-alt, pin assignment: D, max lanes: 4
+ *
+ * @pin_assignment and @max_lanes are only written when the line is present.
+ *
+ * Returns: The connector mode, or I915_DP_TC_NONE when @output has no TC Port
+ * line, i.e. it is on a combo or native PHY
+ */
+enum i915_dp_tc_mode i915_dp_get_tc_mode(int drm_fd, igt_output_t *output,
+					 char *pin_assignment, int *max_lanes)
+{
+	enum i915_dp_tc_mode mode = I915_DP_TC_NONE;
+	char marker[32];
+	char mode_str[32];
+	char *info, *block, *next_block, *line;
+	char pin;
+	int lanes;
+	int dir;
+
+	dir = igt_debugfs_dir(drm_fd);
+	igt_assert_fd(dir);
+	info = igt_sysfs_get(dir, "i915_display_info");
+	close(dir);
+	igt_assert_f(info, "Unable to read i915_display_info\n");
+
+	/*
+	 * i915_display_info is a per-device file that lists the CRTCs first
+	 * and the connectors after them. The CRTC section names the connectors
+	 * of every active output, so the search has to start at the connector
+	 * section, or an active output's first match is that reference rather
+	 * than the connector's own block and the TC Port line is never
+	 * reached. The block ends where the next connector's begins.
+	 */
+	snprintf(marker, sizeof(marker), "[CONNECTOR:%d:",
+		 output->config.connector->connector_id);
+
+	block = strstr(info, "Connector info");
+	if (!block)
+		goto out;
+
+	block = strstr(block, marker);
+	if (!block)
+		goto out;
+
+	next_block = strstr(block + strlen(marker), "[CONNECTOR:");
+	if (next_block)
+		*next_block = '\0';
+
+	line = strstr(block, "TC Port ");
+	if (!line)
+		goto out;
+
+	if (sscanf(line,
+		   "TC Port %*[^:]: mode: %31[^,], pin assignment: %c, max lanes: %d",
+		   mode_str, &pin, &lanes) != 3)
+		goto out;
+
+	if (!strcmp(mode_str, "tbt-alt"))
+		mode = I915_DP_TC_TBT_ALT;
+	else if (!strcmp(mode_str, "dp-alt"))
+		mode = I915_DP_TC_DP_ALT;
+	else if (!strcmp(mode_str, "legacy"))
+		mode = I915_DP_TC_LEGACY;
+	else
+		mode = I915_DP_TC_DISCONNECTED;
+
+	if (pin_assignment)
+		*pin_assignment = pin;
+	if (max_lanes)
+		*max_lanes = lanes;
+
+out:
+	free(info);
+
+	return mode;
+}
diff --git a/lib/i915/i915_dp.h b/lib/i915/i915_dp.h
index c818b3937..883ac346d 100644
--- a/lib/i915/i915_dp.h
+++ b/lib/i915/i915_dp.h
@@ -23,6 +23,27 @@ struct i915_dp_link_config {
 	int link_rate;
 };
 
+/**
+ * enum i915_dp_tc_mode:
+ * @I915_DP_TC_NONE: not a Type-C port, i.e. a combo or native PHY
+ * @I915_DP_TC_DISCONNECTED: Type-C port with nothing connected
+ * @I915_DP_TC_LEGACY: fixed DP connection on a Type-C port
+ * @I915_DP_TC_DP_ALT: USB-C DP alt mode, driven by the PHY PLL
+ * @I915_DP_TC_TBT_ALT: DP tunneled over USB4/Thunderbolt, driven by the
+ *			Thunderbolt PLL
+ *
+ * The connector mode of a DP output, as reported by the i915_display_info
+ * debugfs file. Only I915_DP_TC_TBT_ALT takes its link clock from the
+ * Thunderbolt PLL; every other value uses the PHY PLL.
+ */
+enum i915_dp_tc_mode {
+	I915_DP_TC_NONE,
+	I915_DP_TC_DISCONNECTED,
+	I915_DP_TC_LEGACY,
+	I915_DP_TC_DP_ALT,
+	I915_DP_TC_TBT_ALT,
+};
+
 /**
  * i915_dp_is_uhbr_rate:
  * @link_rate: DP link rate in 10 kbit/s units, as reported by the
@@ -58,5 +79,8 @@ int i915_dp_get_allowed_link_configs(int drm_fd, igt_output_t *output,
 				     struct i915_dp_link_config *configs,
 				     int max_configs);
 int i915_dp_get_next_lower_rate(int drm_fd, igt_output_t *output, int rate);
+enum i915_dp_tc_mode i915_dp_get_tc_mode(int drm_fd, igt_output_t *output,
+					 char *pin_assignment, int *max_lanes);
+const char *i915_dp_tc_mode_name(enum i915_dp_tc_mode mode);
 
 #endif
-- 
2.25.1


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

* [PATCH i-g-t 08/13] tests/intel/kms_dp_link_training: Log the DP link inventory in the fixture
  2026-09-16  4:47 [PATCH i-g-t 00/13] Expand kms_dp_link_training coverage Kunal Joshi
                   ` (6 preceding siblings ...)
  2026-09-16  4:47 ` [PATCH i-g-t 07/13] lib/i915/i915_dp: Add a Type-C port mode query Kunal Joshi
@ 2026-09-16  4:47 ` Kunal Joshi
  2026-09-23 12:46   ` S, Sowmiya
  2026-09-16  4:47 ` [PATCH i-g-t 09/13] tests/intel/kms_dp_link_training: Group the outputs into links Kunal Joshi
                   ` (8 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Kunal Joshi @ 2026-09-16  4:47 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi

The test logs which rate it trained at, but nothing about the link it
trained on: whether the connector is SST or MST, whether it is tunneled
over USB4/Thunderbolt, and which configurations the driver would pick
from. When a subtest skips there is no way to tell a missing monitor
from a missing dock without re-running by hand.

Print one line per connected DP output in the fixture, giving the
protocol, the connector mode, pin assignment and max lanes, followed by
the allowed configuration set:

	DP-2: MST, tbt-alt, pin assignment D, TC max lanes 4
	DP-2: allowed configs: 4x2000000 4x1000000 4x810000 2x810000

Read the allowed set with the forced parameters reset, or the set being
enumerated is the forced one rather than the real one.

No subtest behaviour changes; this is log output only.

Assisted-by: GitHub_Copilot:claude-opus-5
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
 tests/intel/kms_dp_link_training.c | 68 ++++++++++++++++++++++++++++++
 1 file changed, 68 insertions(+)

diff --git a/tests/intel/kms_dp_link_training.c b/tests/intel/kms_dp_link_training.c
index 71531e8dc..812c4b6bc 100644
--- a/tests/intel/kms_dp_link_training.c
+++ b/tests/intel/kms_dp_link_training.c
@@ -288,6 +288,71 @@ static void train_link_config(data_t *data, bool mst,
 	assert_link_recovery_idle(data, config);
 }
 
+/*
+ * log_link_inventory - Describe every connected DP link once.
+ *
+ * With the configuration in the subtest name, most subtests skip on any one
+ * machine. This is what tells a missing monitor apart from a monitor behind a
+ * dock that offers no UHBR configuration, without having to re-run by hand.
+ */
+static void log_link_inventory(data_t *data)
+{
+	igt_output_t *output;
+
+	for_each_connected_output(&data->display, output) {
+		struct i915_dp_link_config configs[MAX_LINK_CONFIGS];
+		enum i915_dp_tc_mode tc_mode;
+		char configs_str[512];
+		char pin_assignment;
+		int tc_max_lanes;
+		int num_configs;
+		int len = 0;
+		int i;
+
+		if (output->config.connector->connector_type !=
+		    DRM_MODE_CONNECTOR_DisplayPort)
+			continue;
+
+		tc_mode = i915_dp_get_tc_mode(data->drm_fd, output,
+					      &pin_assignment, &tc_max_lanes);
+
+		if (tc_mode == I915_DP_TC_NONE)
+			igt_info("%s: %s, %s\n", igt_output_name(output),
+				 igt_check_output_is_dp_mst(output) ? "MST" : "SST",
+				 i915_dp_tc_mode_name(tc_mode));
+		else
+			igt_info("%s: %s, %s, pin assignment %c, TC max lanes %d\n",
+				 igt_output_name(output),
+				 igt_check_output_is_dp_mst(output) ? "MST" : "SST",
+				 i915_dp_tc_mode_name(tc_mode),
+				 pin_assignment, tc_max_lanes);
+
+		if (!i915_dp_has_allowed_link_configs_debugfs(data->drm_fd, output)) {
+			igt_info("%s: no allowed link configs debugfs\n",
+				 igt_output_name(output));
+			continue;
+		}
+
+		/*
+		 * Enumerate with the forced parameters reset, or the set read
+		 * back is the forced one rather than the real one.
+		 */
+		i915_dp_reset_link_params(data->drm_fd, output);
+
+		num_configs = i915_dp_get_allowed_link_configs(data->drm_fd, output,
+							       configs,
+							       ARRAY_SIZE(configs));
+
+		for (i = 0; i < num_configs && len < (int)sizeof(configs_str); i++)
+			len += snprintf(configs_str + len, sizeof(configs_str) - len,
+					" %dx%d", configs[i].lane_count,
+					configs[i].link_rate);
+
+		igt_info("%s: allowed configs:%s\n", igt_output_name(output),
+			 num_configs ? configs_str : " none");
+	}
+}
+
 /*
  * override_lowest_mode - Drive the mode with the lowest pixel clock, so that
  * the largest number of link configurations can carry it.
@@ -524,6 +589,9 @@ int igt_main()
 		 */
 		igt_assert_f(igt_ignore_long_hpd(data.drm_fd, false),
 			     "Unable to disable ignore long hpd\n");
+
+		if (is_intel_device(data.drm_fd))
+			log_link_inventory(&data);
 	}
 
 	igt_describe("Test we can drive UHBR rates over SST");
-- 
2.25.1


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

* [PATCH i-g-t 09/13] tests/intel/kms_dp_link_training: Group the outputs into links
  2026-09-16  4:47 [PATCH i-g-t 00/13] Expand kms_dp_link_training coverage Kunal Joshi
                   ` (7 preceding siblings ...)
  2026-09-16  4:47 ` [PATCH i-g-t 08/13] tests/intel/kms_dp_link_training: Log the DP link inventory in the fixture Kunal Joshi
@ 2026-09-16  4:47 ` Kunal Joshi
  2026-09-23 13:10   ` S, Sowmiya
  2026-09-16  4:47 ` [PATCH i-g-t 10/13] tests/intel/kms_dp_link_training: Add per connector mode subtests Kunal Joshi
                   ` (7 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Kunal Joshi @ 2026-09-16  4:47 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi

The output loop walks connectors and decides SST or MST for each one,
so an MST topology is visited once per stream: the classification is
redone every time and the same link is trained once per stream, since
forcing link parameters on one stream affects the whole topology.

Collect the connected DP outputs into a list of links, where one link
is one trainable DP link and a whole MST topology is a single entry
represented by the first of its streams, and record the protocol and
the connector mode once per link.

Stop collecting rather than fail when more links are connected than the
list holds. Discovery runs in a igt_subtest_with_dynamic() container,
where explicit failure is not allowed.

An MST topology is now trained once instead of once per stream, so the
dynamic subtests named after the other streams go away. They were
training the same link at the same configurations.

Prep for subtests that select links by connector mode.

Assisted-by: GitHub_Copilot:claude-opus-5
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
 tests/intel/kms_dp_link_training.c | 111 +++++++++++++++++++++++------
 1 file changed, 89 insertions(+), 22 deletions(-)

diff --git a/tests/intel/kms_dp_link_training.c b/tests/intel/kms_dp_link_training.c
index 812c4b6bc..e6160cee5 100644
--- a/tests/intel/kms_dp_link_training.c
+++ b/tests/intel/kms_dp_link_training.c
@@ -39,6 +39,8 @@
  */
 #define LINK_RECOVERY_TIMEOUT	5.0
 
+#define MAX_LINKS		16
+
 typedef struct {
 	int drm_fd;
 	uint32_t devid;
@@ -46,6 +48,18 @@ typedef struct {
 	igt_output_t *output;
 } data_t;
 
+/*
+ * struct dp_link - One trainable DP link.
+ *
+ * @output is the output the link is driven through, which for MST is the first
+ * of the topology's streams. The classification is discovered, never chosen.
+ */
+struct dp_link {
+	igt_output_t *output;
+	bool mst;
+	enum i915_dp_tc_mode tc_mode;
+};
+
 /*
  * check_condition_with_timeout - Polls check_fn until it returns 0
  * or until 'timeout' seconds elapse.
@@ -532,42 +546,95 @@ static bool run_link_rate_test(data_t *data, bool mst, bool uhbr)
  * early, then calls run_link_rate_test(). Returns true if it ran on at
  * least one matching output.
  */
-static bool test_link_rate(data_t *data, bool mst, bool uhbr)
+/*
+ * discover_links - Collapse the connected DP outputs into links.
+ *
+ * One link is one trainable DP link, so a whole MST topology becomes a single
+ * entry, represented by the first of its streams. Forcing link parameters on
+ * one stream affects every stream in the topology, so training a topology once
+ * per stream would train the same link repeatedly.
+ */
+static int discover_links(data_t *data, struct dp_link *links, int max_links)
 {
-	bool ran_any_output = false, is_mst = false;
-	igt_output_t *tmp_output;
+	igt_output_t *output;
+	int num_links = 0;
+	int i;
 
-	igt_skip_on_f(!is_intel_device(data->drm_fd),
-		      "Test supported only on Intel platforms.\n");
+	for_each_connected_output(&data->display, output) {
+		bool mst, seen = false;
 
-	for_each_connected_output(&data->display, tmp_output) {
-		if (tmp_output->config.connector->connector_type !=
+		if (output->config.connector->connector_type !=
 		    DRM_MODE_CONNECTOR_DisplayPort) {
 			igt_info("Skipping non-DisplayPort output %s\n",
-					tmp_output->name);
-			igt_info("----------------------------------------------------\n");
+				 igt_output_name(output));
 			continue;
 		}
 
-		/* Early skip if MST vs. SST does not match. */
-		is_mst = igt_check_output_is_dp_mst(tmp_output);
-		if (mst && !is_mst) {
-			igt_info("Skipping %s: MST requested but it's SST.\n",
-					tmp_output->name);
-			igt_info("----------------------------------------------------\n");
+		mst = igt_check_output_is_dp_mst(output);
+
+		if (mst) {
+			int root = igt_get_dp_mst_connector_id(output);
+
+			for (i = 0; i < num_links; i++)
+				if (links[i].mst &&
+				    igt_get_dp_mst_connector_id(links[i].output) == root) {
+					seen = true;
+					break;
+				}
+		}
+
+		if (seen) {
+			igt_info("Skipping %s: same MST topology as %s\n",
+				 igt_output_name(output),
+				 igt_output_name(links[i].output));
+			continue;
+		}
+
+		if (num_links == max_links) {
+			igt_info("Skipping %s: more than %d DP links connected\n",
+				 igt_output_name(output), max_links);
 			continue;
-		} else if (!mst && is_mst) {
-			igt_info("Skipping %s: SST requested but it's MST.\n",
-					tmp_output->name);
+		}
+
+		links[num_links].output = output;
+		links[num_links].mst = mst;
+		links[num_links].tc_mode = i915_dp_get_tc_mode(data->drm_fd,
+							       output, NULL, NULL);
+		num_links++;
+	}
+
+	return num_links;
+}
+
+static bool test_link_rate(data_t *data, bool mst, bool uhbr)
+{
+	struct dp_link links[MAX_LINKS];
+	bool ran_any_link = false;
+	int num_links;
+	int i;
+
+	igt_skip_on_f(!is_intel_device(data->drm_fd),
+		      "Test supported only on Intel platforms.\n");
+
+	num_links = discover_links(data, links, ARRAY_SIZE(links));
+
+	for (i = 0; i < num_links; i++) {
+		if (links[i].mst != mst) {
+			igt_info("Skipping %s: %s requested but it's %s.\n",
+				 igt_output_name(links[i].output),
+				 mst ? "MST" : "SST",
+				 links[i].mst ? "MST" : "SST");
 			igt_info("----------------------------------------------------\n");
 			continue;
 		}
-		data->output = tmp_output;
+
+		data->output = links[i].output;
 		igt_info("Running link training test for %s\n",
-			 data->output->name);
-		ran_any_output = ran_any_output | run_link_rate_test(data, mst, uhbr);
+			 igt_output_name(data->output));
+		ran_any_link |= run_link_rate_test(data, mst, uhbr);
 	}
-	return ran_any_output;
+
+	return ran_any_link;
 }
 
 IGT_TEST_DESCRIPTION("Test to validate link training on SST/MST with "
-- 
2.25.1


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

* [PATCH i-g-t 10/13] tests/intel/kms_dp_link_training: Add per connector mode subtests
  2026-09-16  4:47 [PATCH i-g-t 00/13] Expand kms_dp_link_training coverage Kunal Joshi
                   ` (8 preceding siblings ...)
  2026-09-16  4:47 ` [PATCH i-g-t 09/13] tests/intel/kms_dp_link_training: Group the outputs into links Kunal Joshi
@ 2026-09-16  4:47 ` Kunal Joshi
  2026-09-23 13:29   ` S, Sowmiya
  2026-09-16  4:47 ` [PATCH i-g-t 11/13] lib/igt_dp: Add DPCD read helpers Kunal Joshi
                   ` (6 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Kunal Joshi @ 2026-09-16  4:47 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi

The four existing subtests cover whichever connector mode the machine
presents. On a machine with a Thunderbolt dock they train a tunneled
link, on one without they train a direct link, and the result is
identical either way, so a lab that never had a dock looks the same as
one where the tunnel works.

Add eight subtests selecting links by connector mode:

	uhbr-sst-tbtalt-train        non-uhbr-sst-tbtalt-train
	uhbr-mst-tbtalt-train        non-uhbr-mst-tbtalt-train
	uhbr-sst-direct-train        non-uhbr-sst-direct-train
	uhbr-mst-direct-train        non-uhbr-mst-direct-train

with the same per configuration dynamic subtests as the existing ones.
"direct" is native, DP alt mode and legacy together: they all take the
link clock from the PHY PLL, and only tbt-alt takes it from the
Thunderbolt PLL, so that is the only split that changes which driver
code runs. The raw mode stays in the inventory line, so dp-alt against
legacy is still diagnosable from a failing run.

The connector mode has to be in the static subtest name rather than a
dynamic one, because a dynamic subtest that skips is not counted as
executed: a container with one pass and twenty skips reports PASS, so a
lab with no dock would look green.

Keep the four existing names and their PHY agnostic scope. They are not
redundant: they are what to run on a machine nobody provisioned for
this matrix.

Expect most of the eight to skip on any one machine, since dp-alt and
tbt-alt are mutually exclusive on a port at a given moment. The skip
reasons name the connector mode so the two causes - no such link, and a
link that allows no configuration in the encoding class - stay
greppable apart.

Assisted-by: GitHub_Copilot:claude-opus-5
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
 tests/intel/kms_dp_link_training.c | 142 ++++++++++++++++++++++++++++-
 1 file changed, 137 insertions(+), 5 deletions(-)

diff --git a/tests/intel/kms_dp_link_training.c b/tests/intel/kms_dp_link_training.c
index e6160cee5..229eb3d69 100644
--- a/tests/intel/kms_dp_link_training.c
+++ b/tests/intel/kms_dp_link_training.c
@@ -21,6 +21,40 @@
  * Description: Test we can drive non-UHBR rates over MST.
  */
 
+/**
+ * SUBTEST: uhbr-sst-tbtalt-train
+ * Description: Test we can drive UHBR rates over an SST link tunneled over
+ *              USB4/Thunderbolt.
+ *
+ * SUBTEST: uhbr-mst-tbtalt-train
+ * Description: Test we can drive UHBR rates over an MST link tunneled over
+ *              USB4/Thunderbolt.
+ *
+ * SUBTEST: uhbr-sst-direct-train
+ * Description: Test we can drive UHBR rates over a directly connected SST
+ *              link.
+ *
+ * SUBTEST: uhbr-mst-direct-train
+ * Description: Test we can drive UHBR rates over a directly connected MST
+ *              link.
+ *
+ * SUBTEST: non-uhbr-sst-tbtalt-train
+ * Description: Test we can drive non-UHBR rates over an SST link tunneled over
+ *              USB4/Thunderbolt.
+ *
+ * SUBTEST: non-uhbr-mst-tbtalt-train
+ * Description: Test we can drive non-UHBR rates over an MST link tunneled over
+ *              USB4/Thunderbolt.
+ *
+ * SUBTEST: non-uhbr-sst-direct-train
+ * Description: Test we can drive non-UHBR rates over a directly connected SST
+ *              link.
+ *
+ * SUBTEST: non-uhbr-mst-direct-train
+ * Description: Test we can drive non-UHBR rates over a directly connected MST
+ *              link.
+ */
+
 #include "i915/i915_dp.h"
 #include "igt.h"
 #include "igt_kms.h"
@@ -60,6 +94,38 @@ struct dp_link {
 	enum i915_dp_tc_mode tc_mode;
 };
 
+/*
+ * enum phy_filter - Which links a subtest selects.
+ *
+ * PHY_ANY is the PHY agnostic scope of the original subtests. The split
+ * between PHY_TBTALT and PHY_DIRECT is where the link clock comes from: only a
+ * tbt-alt link is clocked by the Thunderbolt PLL, native, DP alt mode and
+ * legacy all use the PHY PLL, so folding the latter three together does not
+ * change which driver code runs.
+ */
+enum phy_filter {
+	PHY_ANY,
+	PHY_TBTALT,
+	PHY_DIRECT,
+};
+
+static const char *phy_filter_name(enum phy_filter phy)
+{
+	return phy == PHY_TBTALT ? "tbt-alt" : "direct";
+}
+
+static bool link_matches_phy(const struct dp_link *link, enum phy_filter phy)
+{
+	switch (phy) {
+	case PHY_TBTALT:
+		return link->tc_mode == I915_DP_TC_TBT_ALT;
+	case PHY_DIRECT:
+		return link->tc_mode != I915_DP_TC_TBT_ALT;
+	default:
+		return true;
+	}
+}
+
 /*
  * check_condition_with_timeout - Polls check_fn until it returns 0
  * or until 'timeout' seconds elapse.
@@ -606,7 +672,8 @@ static int discover_links(data_t *data, struct dp_link *links, int max_links)
 	return num_links;
 }
 
-static bool test_link_rate(data_t *data, bool mst, bool uhbr)
+static bool test_link_rate(data_t *data, bool mst, bool uhbr,
+			   enum phy_filter phy)
 {
 	struct dp_link links[MAX_LINKS];
 	bool ran_any_link = false;
@@ -628,6 +695,15 @@ static bool test_link_rate(data_t *data, bool mst, bool uhbr)
 			continue;
 		}
 
+		if (!link_matches_phy(&links[i], phy)) {
+			igt_info("Skipping %s: %s requested but it's %s.\n",
+				 igt_output_name(links[i].output),
+				 phy_filter_name(phy),
+				 i915_dp_tc_mode_name(links[i].tc_mode));
+			igt_info("----------------------------------------------------\n");
+			continue;
+		}
+
 		data->output = links[i].output;
 		igt_info("Running link training test for %s\n",
 			 igt_output_name(data->output));
@@ -665,7 +741,7 @@ int igt_main()
 	igt_subtest_with_dynamic("uhbr-sst") {
 		igt_require_f(intel_display_ver(data.devid) > 13,
 			      "UHBR not supported on platform\n");
-		igt_require_f(test_link_rate(&data, false, true),
+		igt_require_f(test_link_rate(&data, false, true, PHY_ANY),
 			      "Didn't find any SST output with UHBR rates.\n");
 	}
 
@@ -673,22 +749,78 @@ int igt_main()
 	igt_subtest_with_dynamic("uhbr-mst") {
                 igt_require_f(intel_display_ver(data.devid) > 13,
                               "UHBR not supported on platform\n");
-		igt_require_f(test_link_rate(&data, true, true),
+		igt_require_f(test_link_rate(&data, true, true, PHY_ANY),
 			      "Didn't find any MST output with UHBR rates.\n");
 	}
 
 	igt_describe("Test we can drive NON-UHBR rates over SST");
 	igt_subtest_with_dynamic("non-uhbr-sst") {
-		igt_require_f(test_link_rate(&data, false, false),
+		igt_require_f(test_link_rate(&data, false, false, PHY_ANY),
 			      "Didn't find any SST output with NON-UHBR rates.\n");
 	}
 
 	igt_describe("Test we can drive NON-UHBR rates over MST");
 	igt_subtest_with_dynamic("non-uhbr-mst") {
-		igt_require_f(test_link_rate(&data, true, false),
+		igt_require_f(test_link_rate(&data, true, false, PHY_ANY),
 			      "Didn't find any MST output with NON-UHBR rates.\n");
 	}
 
+	igt_describe("Test we can drive UHBR rates over a tunneled SST link");
+	igt_subtest_with_dynamic("uhbr-sst-tbtalt-train") {
+		igt_require_f(intel_display_ver(data.devid) > 13,
+			      "UHBR not supported on platform\n");
+		igt_require_f(test_link_rate(&data, false, true, PHY_TBTALT),
+			      "No tbt-alt DP SST link allows a UHBR config\n");
+	}
+
+	igt_describe("Test we can drive UHBR rates over a tunneled MST link");
+	igt_subtest_with_dynamic("uhbr-mst-tbtalt-train") {
+		igt_require_f(intel_display_ver(data.devid) > 13,
+			      "UHBR not supported on platform\n");
+		igt_require_f(test_link_rate(&data, true, true, PHY_TBTALT),
+			      "No tbt-alt DP MST link allows a UHBR config\n");
+	}
+
+	igt_describe("Test we can drive UHBR rates over a direct SST link");
+	igt_subtest_with_dynamic("uhbr-sst-direct-train") {
+		igt_require_f(intel_display_ver(data.devid) > 13,
+			      "UHBR not supported on platform\n");
+		igt_require_f(test_link_rate(&data, false, true, PHY_DIRECT),
+			      "No direct DP SST link allows a UHBR config\n");
+	}
+
+	igt_describe("Test we can drive UHBR rates over a direct MST link");
+	igt_subtest_with_dynamic("uhbr-mst-direct-train") {
+		igt_require_f(intel_display_ver(data.devid) > 13,
+			      "UHBR not supported on platform\n");
+		igt_require_f(test_link_rate(&data, true, true, PHY_DIRECT),
+			      "No direct DP MST link allows a UHBR config\n");
+	}
+
+	igt_describe("Test we can drive non-UHBR rates over a tunneled SST link");
+	igt_subtest_with_dynamic("non-uhbr-sst-tbtalt-train") {
+		igt_require_f(test_link_rate(&data, false, false, PHY_TBTALT),
+			      "No tbt-alt DP SST link allows a non-UHBR config\n");
+	}
+
+	igt_describe("Test we can drive non-UHBR rates over a tunneled MST link");
+	igt_subtest_with_dynamic("non-uhbr-mst-tbtalt-train") {
+		igt_require_f(test_link_rate(&data, true, false, PHY_TBTALT),
+			      "No tbt-alt DP MST link allows a non-UHBR config\n");
+	}
+
+	igt_describe("Test we can drive non-UHBR rates over a direct SST link");
+	igt_subtest_with_dynamic("non-uhbr-sst-direct-train") {
+		igt_require_f(test_link_rate(&data, false, false, PHY_DIRECT),
+			      "No direct DP SST link allows a non-UHBR config\n");
+	}
+
+	igt_describe("Test we can drive non-UHBR rates over a direct MST link");
+	igt_subtest_with_dynamic("non-uhbr-mst-direct-train") {
+		igt_require_f(test_link_rate(&data, true, false, PHY_DIRECT),
+			      "No direct DP MST link allows a non-UHBR config\n");
+	}
+
 	igt_fixture() {
 		igt_reset_connectors();
 		igt_display_fini(&data.display);
-- 
2.25.1


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

* [PATCH i-g-t 11/13] lib/igt_dp: Add DPCD read helpers
  2026-09-16  4:47 [PATCH i-g-t 00/13] Expand kms_dp_link_training coverage Kunal Joshi
                   ` (9 preceding siblings ...)
  2026-09-16  4:47 ` [PATCH i-g-t 10/13] tests/intel/kms_dp_link_training: Add per connector mode subtests Kunal Joshi
@ 2026-09-16  4:47 ` Kunal Joshi
  2026-09-23 13:34   ` S, Sowmiya
  2026-09-16  4:48 ` [PATCH i-g-t 12/13] lib/igt_dp: Add link status predicates for both channel codings Kunal Joshi
                   ` (5 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Kunal Joshi @ 2026-09-16  4:47 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi

Reading the DPCD of a connector means finding the drm_dp_aux child of
its sysfs directory and reading from the matching character device.
Four tests already carry their own copy of that: kms_dp_aux_dev,
amd_assr, amd_replay and amd_multidisplay_modeset.

Add the AUX channel lookup and the DPCD read to the library so that new
tests do not have to add a fifth. The helpers are read only, since
writing DPCD from userspace races with the driver doing the same.

Use pread() rather than lseek() plus read(), which is both shorter and
free of the failure the amd_assr copy has, where the lseek() return
value is asserted to be non-zero and a read at DPCD offset 0 would
therefore fail.

Assisted-by: GitHub_Copilot:claude-opus-5
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
 lib/igt_dp.c | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++
 lib/igt_dp.h |   9 +++++
 2 files changed, 117 insertions(+)

diff --git a/lib/igt_dp.c b/lib/igt_dp.c
index 9f71c9e72..0b1fe73de 100644
--- a/lib/igt_dp.c
+++ b/lib/igt_dp.c
@@ -6,7 +6,13 @@
  *   Louis Chauvet <louis.chauvet@bootlin.com>
  */
 
+#include <dirent.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <limits.h>
 #include <stdint.h>
+#include <string.h>
+#include <unistd.h>
 
 #include "drmtest.h"
 #include "i915/i915_dp.h"
@@ -173,3 +179,105 @@ void igt_dp_wait_pending_retrain(int drm_fd, igt_output_t *output)
 	}
 	igt_assert_f(false, "Timeout waiting for pending retrain to complete\n");
 }
+
+/**
+ * igt_dp_aux_open: Open the AUX channel device of a display port
+ * @drm_fd: DRM file descriptor
+ * @output: igt_output_t object representing the display port
+ *
+ * The AUX channel of a connector is exposed as a character device when the
+ * kernel is built with CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV. The device is
+ * parented to the connector, so it is the connector's own sysfs directory
+ * which is scanned here and not /dev, and there is at most one entry in it to
+ * match. /dev is only where the matched entry is then opened from.
+ *
+ * Returns:
+ * A file descriptor for the AUX channel device, or a negative error code on
+ * failure.
+ */
+int igt_dp_aux_open(int drm_fd, igt_output_t *output)
+{
+	struct dirent *entry;
+	int aux_fd = -ENOENT;
+	int dir_fd;
+	DIR *dir;
+
+	dir_fd = igt_connector_sysfs_open(drm_fd, output->config.connector);
+	if (dir_fd < 0)
+		return -ENOENT;
+
+	dir = fdopendir(dir_fd);
+	if (!dir) {
+		/* Save the error before close() gets a chance to overwrite it. */
+		int err = -errno;
+
+		close(dir_fd);
+		return err;
+	}
+
+	errno = 0;
+
+	while ((entry = readdir(dir))) {
+		char path[NAME_MAX + sizeof("/dev/")];
+
+		if (strncmp(entry->d_name, "drm_dp_aux", strlen("drm_dp_aux")))
+			continue;
+
+		snprintf(path, sizeof(path), "/dev/%s", entry->d_name);
+
+		aux_fd = open(path, O_RDONLY);
+		if (aux_fd < 0)
+			aux_fd = -errno;
+
+		break;
+	}
+
+	/* readdir() reports both the end of the directory and an error as NULL. */
+	if (!entry && errno)
+		aux_fd = -errno;
+
+	closedir(dir);
+
+	return aux_fd;
+}
+
+/**
+ * igt_dp_dpcd_read: Read from the DPCD of a display port
+ * @aux_fd:	AUX channel device file descriptor from igt_dp_aux_open()
+ * @offset:	DPCD offset to read from
+ * @buf:	Buffer to read into
+ * @size:	Number of bytes to read
+ *
+ * Returns:
+ * The number of bytes read, or a negative error code on failure.
+ */
+int igt_dp_dpcd_read(int aux_fd, unsigned int offset, void *buf, size_t size)
+{
+	ssize_t ret;
+
+	ret = pread(aux_fd, buf, size, offset);
+	if (ret < 0)
+		return -errno;
+
+	return ret;
+}
+
+/**
+ * igt_dp_dpcd_read_byte: Read a single byte from the DPCD of a display port
+ * @aux_fd:	AUX channel device file descriptor from igt_dp_aux_open()
+ * @offset:	DPCD offset to read from
+ * @val:	Location to store the value read
+ *
+ * Returns:
+ * 0 on success, or a negative error code on failure.
+ */
+int igt_dp_dpcd_read_byte(int aux_fd, unsigned int offset, uint8_t *val)
+{
+	int ret;
+
+	ret = igt_dp_dpcd_read(aux_fd, offset, val, sizeof(*val));
+	if (ret < 0)
+		return ret;
+
+	return ret == 1 ? 0 : -EIO;
+}
diff --git a/lib/igt_dp.h b/lib/igt_dp.h
index 0c56ad2ec..44f3b11a1 100644
--- a/lib/igt_dp.h
+++ b/lib/igt_dp.h
@@ -9,6 +9,9 @@
 #ifndef _IGT_DP_H_
 #define _IGT_DP_H_
 
+#include <stddef.h>
+#include <stdint.h>
+
 #include "igt_kms.h"
 
 int igt_dp_get_current_link_rate(int drm_fd, igt_output_t *output);
@@ -27,4 +30,10 @@ int igt_dp_get_pending_retrain(int drm_fd, igt_output_t *output);
 
 void igt_dp_wait_pending_retrain(int drm_fd, igt_output_t *output);
 
+int igt_dp_aux_open(int drm_fd, igt_output_t *output);
+
+int igt_dp_dpcd_read(int aux_fd, unsigned int offset, void *buf, size_t size);
+
+int igt_dp_dpcd_read_byte(int aux_fd, unsigned int offset, uint8_t *val);
+
 #endif
-- 
2.25.1


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

* [PATCH i-g-t 12/13] lib/igt_dp: Add link status predicates for both channel codings
  2026-09-16  4:47 [PATCH i-g-t 00/13] Expand kms_dp_link_training coverage Kunal Joshi
                   ` (10 preceding siblings ...)
  2026-09-16  4:47 ` [PATCH i-g-t 11/13] lib/igt_dp: Add DPCD read helpers Kunal Joshi
@ 2026-09-16  4:48 ` Kunal Joshi
  2026-09-23 13:55   ` S, Sowmiya
  2026-09-16  4:48 ` [PATCH i-g-t 13/13] tests/intel/kms_dp_link_training: Verify the trained link from the sink side Kunal Joshi
                   ` (4 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Kunal Joshi @ 2026-09-16  4:48 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi

A link that is up has, for every lane in use, clock recovery done,
channel equalisation done and symbols locked, plus interlane alignment
done for the link as a whole. 128b/132b reports that differently from
8b/10b: there is no clock recovery phase and so no CR_DONE bit, and a
training failure has its own bit in DP_LANE_ALIGN_STATUS_UPDATED.

Add igt_dp_link_status_ok() covering both, mirroring
drm_dp_channel_eq_ok() and the drm_dp_128b132b_* predicates in
drm_dp_helper.c, so a caller does not have to know which set of bits
applies to the rate it forced.

Add igt_dp_channel_coding_ok() next to it, reading
MAIN_LINK_CHANNEL_CODING_SET, so that the DPCD offsets stay inside the
library and a test can ask the two questions it cares about without
handling raw registers.

Both return 1, 0 or a negative error code, so that a caller can tell a
sink which disagrees apart from a DPCD it could not read at all. That
matters because the AUX character device is not always there.

Assisted-by: GitHub_Copilot:claude-opus-5
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
 lib/igt_dp.c | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++
 lib/igt_dp.h |   4 ++
 2 files changed, 107 insertions(+)

diff --git a/lib/igt_dp.c b/lib/igt_dp.c
index 0b1fe73de..a7d9f1e77 100644
--- a/lib/igt_dp.c
+++ b/lib/igt_dp.c
@@ -281,3 +281,106 @@ int igt_dp_dpcd_read_byte(int aux_fd, unsigned int offset, uint8_t *val)
 
 	return ret == 1 ? 0 : -EIO;
 }
+
+/*
+ * DPCD registers and bits used by the sink side link checks, mirroring the
+ * kernel's include/drm/display/drm_dp.h.
+ */
+#define DPCD_MAIN_LINK_CHANNEL_CODING_SET	0x108
+#define  DPCD_SET_ANSI_8B10B			(1 << 0)
+#define  DPCD_SET_ANSI_128B132B			(1 << 1)
+
+#define DPCD_LANE0_1_STATUS			0x202
+#define DPCD_LINK_STATUS_SIZE			6
+#define  DPCD_LANE_CR_DONE			(1 << 0)
+#define  DPCD_LANE_CHANNEL_EQ_DONE		(1 << 1)
+#define  DPCD_LANE_SYMBOL_LOCKED		(1 << 2)
+
+/* DP_LANE_ALIGN_STATUS_UPDATED, the third byte of the status block. */
+#define  DPCD_INTERLANE_ALIGN_DONE		(1 << 0)
+#define  DPCD_128B132B_LT_FAILED		(1 << 4)
+
+static uint8_t dpcd_lane_status(const uint8_t link_status[DPCD_LINK_STATUS_SIZE],
+				int lane)
+{
+	return (link_status[lane / 2] >> (4 * (lane % 2))) & 0xf;
+}
+
+/**
+ * igt_dp_channel_coding_ok: Check the channel coding the sink was told to use
+ * @aux_fd:	AUX channel device file descriptor from igt_dp_aux_open()
+ * @uhbr:	Whether 128b/132b is expected
+ *
+ * Read MAIN_LINK_CHANNEL_CODING_SET and check that it selects the encoding the
+ * link rate implies. This is the only direct evidence that the coding a UHBR
+ * rate implies is the coding that reached the wire.
+ *
+ * Returns:
+ * 1 when the expected coding is selected, 0 when it is not, or a negative
+ * error code when the DPCD could not be read.
+ */
+int igt_dp_channel_coding_ok(int aux_fd, bool uhbr)
+{
+	uint8_t coding;
+	int ret;
+
+	ret = igt_dp_dpcd_read_byte(aux_fd, DPCD_MAIN_LINK_CHANNEL_CODING_SET,
+				    &coding);
+	if (ret < 0)
+		return ret;
+
+	return !!(coding & (uhbr ? DPCD_SET_ANSI_128B132B : DPCD_SET_ANSI_8B10B));
+}
+
+/**
+ * igt_dp_link_status_ok: Check the sink considers the link trained
+ * @aux_fd:	AUX channel device file descriptor from igt_dp_aux_open()
+ * @lane_count:	Number of lanes in use
+ * @uhbr:	Whether the link runs at a UHBR rate, i.e. uses 128b/132b
+ *
+ * Read the link status block at DP_LANE0_1_STATUS and check that every lane in
+ * use is locked and the lanes are aligned.
+ *
+ * 128b/132b reports this differently from 8b/10b: there is no clock recovery
+ * bit, and a training failure has its own bit in
+ * DP_LANE_ALIGN_STATUS_UPDATED. Mirrors drm_dp_channel_eq_ok() and the
+ * drm_dp_128b132b_* predicates.
+ *
+ * Returns:
+ * 1 when the sink considers the link trained, 0 when it does not, or a
+ * negative error code when the DPCD could not be read.
+ */
+int igt_dp_link_status_ok(int aux_fd, int lane_count, bool uhbr)
+{
+	uint8_t link_status[DPCD_LINK_STATUS_SIZE];
+	uint8_t lane_mask;
+	uint8_t align;
+	int ret;
+	int lane;
+
+	ret = igt_dp_dpcd_read(aux_fd, DPCD_LANE0_1_STATUS, link_status,
+			       sizeof(link_status));
+	if (ret < 0)
+		return ret;
+	if (ret != sizeof(link_status))
+		return -EIO;
+
+	align = link_status[2];
+
+	if (uhbr && (align & DPCD_128B132B_LT_FAILED))
+		return 0;
+
+	if (!(align & DPCD_INTERLANE_ALIGN_DONE))
+		return 0;
+
+	/* 128b/132b has no clock recovery phase, so no CR_DONE bit. */
+	lane_mask = DPCD_LANE_CHANNEL_EQ_DONE | DPCD_LANE_SYMBOL_LOCKED;
+	if (!uhbr)
+		lane_mask |= DPCD_LANE_CR_DONE;
+
+	for (lane = 0; lane < lane_count; lane++)
+		if ((dpcd_lane_status(link_status, lane) & lane_mask) != lane_mask)
+			return 0;
+
+	return 1;
+}
diff --git a/lib/igt_dp.h b/lib/igt_dp.h
index 44f3b11a1..332656aae 100644
--- a/lib/igt_dp.h
+++ b/lib/igt_dp.h
@@ -36,4 +36,8 @@ int igt_dp_dpcd_read(int aux_fd, unsigned int offset, void *buf, size_t size);
 
 int igt_dp_dpcd_read_byte(int aux_fd, unsigned int offset, uint8_t *val);
 
+int igt_dp_channel_coding_ok(int aux_fd, bool uhbr);
+
+int igt_dp_link_status_ok(int aux_fd, int lane_count, bool uhbr);
+
 #endif
-- 
2.25.1


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

* [PATCH i-g-t 13/13] tests/intel/kms_dp_link_training: Verify the trained link from the sink side
  2026-09-16  4:47 [PATCH i-g-t 00/13] Expand kms_dp_link_training coverage Kunal Joshi
                   ` (11 preceding siblings ...)
  2026-09-16  4:48 ` [PATCH i-g-t 12/13] lib/igt_dp: Add link status predicates for both channel codings Kunal Joshi
@ 2026-09-16  4:48 ` Kunal Joshi
  2026-09-23 14:00   ` S, Sowmiya
  2026-09-16  5:08 ` ✓ Xe.CI.BAT: success for Expand kms_dp_link_training coverage Patchwork
                   ` (3 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Kunal Joshi @ 2026-09-16  4:48 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi

The test reads everything back from the driver. A driver that believes
a link is up when the sink does not would pass, and the UHBR subtests
infer 128b/132b from the rate rather than checking it.

After training, ask the sink. MAIN_LINK_CHANNEL_CODING_SET must select
128b/132b for a UHBR configuration and 8b/10b otherwise, and the link
status must show every lane in use locked. That is the only direct
evidence that the coding the rate implies is the coding that reached
the wire.

Skip when the DPCD can be opened but not read, rather than reporting the
configuration as trained on evidence the test failed to collect. A
missing AUX character device is treated differently and only logged:
CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not enabled by default, so there is
often none at all, and that says nothing about the link, whereas AUX is
out of band and answers whether or not the link trained, so a read that
fails once the device is open is a result in itself.

An MST stream connector's AUX reaches the far sink over sideband rather
than the link partner, which is the end of the link being trained, so
use the topology's root connector for MST. The root reads disconnected
while MST is active, so find it by id instead of walking the connected
outputs.

Assisted-by: GitHub_Copilot:claude-opus-5
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
 tests/intel/kms_dp_link_training.c | 91 +++++++++++++++++++++++++++++-
 1 file changed, 90 insertions(+), 1 deletion(-)

diff --git a/tests/intel/kms_dp_link_training.c b/tests/intel/kms_dp_link_training.c
index 229eb3d69..a228b5493 100644
--- a/tests/intel/kms_dp_link_training.c
+++ b/tests/intel/kms_dp_link_training.c
@@ -55,8 +55,11 @@
  *              link.
  */
 
+#include <string.h>
+
 #include "i915/i915_dp.h"
 #include "igt.h"
+#include "igt_dp.h"
 #include "igt_kms.h"
 #include "intel/kms_joiner_helper.h"
 #include "intel/kms_mst_helper.h"
@@ -80,6 +83,7 @@ typedef struct {
 	uint32_t devid;
 	igt_display_t display;
 	igt_output_t *output;
+	int aux_fd;
 } data_t;
 
 /*
@@ -323,6 +327,79 @@ static void assert_link_recovery_idle(data_t *data,
 	} while (elapsed < LINK_RECOVERY_TIMEOUT);
 }
 
+/*
+ * open_link_aux - Open the AUX device at the near end of the link.
+ *
+ * An MST stream connector's AUX reaches the far sink over sideband rather than
+ * the link partner, which is the end of the link being trained, so for MST it
+ * is the topology's root connector that has to be asked. The root reads
+ * disconnected while MST is active, so it is found by id rather than by
+ * walking the connected outputs.
+ */
+static int open_link_aux(data_t *data, bool mst)
+{
+	igt_output_t *output = data->output;
+
+	if (mst) {
+		int root_id = igt_get_dp_mst_connector_id(data->output);
+		int i;
+
+		output = NULL;
+
+		for (i = 0; i < data->display.n_outputs; i++) {
+			igt_output_t *root = &data->display.outputs[i];
+
+			if (root->config.connector &&
+			    root->config.connector->connector_id == root_id) {
+				output = root;
+				break;
+			}
+		}
+
+		if (!output)
+			return -ENOENT;
+	}
+
+	return igt_dp_aux_open(data->drm_fd, output);
+}
+
+/*
+ * assert_sink_agrees - Ask the sink whether the link is really up.
+ *
+ * Everything else the test checks is read back from the driver. This is the
+ * only check that the sink agrees, and the only direct evidence of which
+ * channel coding reached the wire.
+ *
+ * A DPCD the test could open but cannot read leaves the case unverified, so
+ * skip rather than report it as trained. A missing AUX device does not: AUX is
+ * out of band and answers whether or not the link trained, so a read that
+ * fails once the device is open is a result in itself, while
+ * CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV not being enabled - it is not by default -
+ * says nothing about the link and would take every driver side check down with
+ * it.
+ */
+static void assert_sink_agrees(data_t *data,
+			       const struct i915_dp_link_config *config)
+{
+	bool uhbr = i915_dp_is_uhbr_rate(config->link_rate);
+	int ret;
+
+	if (data->aux_fd < 0)
+		return;
+
+	ret = igt_dp_channel_coding_ok(data->aux_fd, uhbr);
+	igt_skip_on_f(ret < 0, "Unable to read the sink's channel coding: %s\n",
+		      strerror(-ret));
+	igt_assert_f(ret, "Sink is not set to %s at rate %d\n",
+		     uhbr ? "128b/132b" : "8b/10b", config->link_rate);
+
+	ret = igt_dp_link_status_ok(data->aux_fd, config->lane_count, uhbr);
+	igt_skip_on_f(ret < 0, "Unable to read the sink's link status: %s\n",
+		      strerror(-ret));
+	igt_assert_f(ret, "Sink does not report %d lanes locked at rate %d\n",
+		     config->lane_count, config->link_rate);
+}
+
 /*
  * train_link_config - Force one link configuration, re-establish the link and
  * check that the configuration took effect and survived training.
@@ -366,6 +443,8 @@ static void train_link_config(data_t *data, bool mst,
 	 * count resets the recovery state, which would mask the failure.
 	 */
 	assert_link_recovery_idle(data, config);
+
+	assert_sink_agrees(data, config);
 }
 
 /*
@@ -564,6 +643,11 @@ static bool run_link_rate_test(data_t *data, bool mst, bool uhbr)
 							       data->output),
 		      "Kernel has no intel_dp_allowed_link_configs debugfs\n");
 
+	data->aux_fd = open_link_aux(data, mst);
+	if (data->aux_fd < 0)
+		igt_info("%s: no AUX device (%s), sink side checks are skipped\n",
+			 igt_output_name(data->output), strerror(-data->aux_fd));
+
 	/*
 	 * Enumerate with the forced parameters reset, or the set being read is
 	 * the forced one rather than the one the driver would pick from.
@@ -603,6 +687,11 @@ static bool run_link_rate_test(data_t *data, bool mst, bool uhbr)
 		igt_info("Output %s allows no %sUHBR link config\n",
 			 igt_output_name(data->output), uhbr ? "" : "non-");
 
+	if (data->aux_fd >= 0) {
+		close(data->aux_fd);
+		data->aux_fd = -1;
+	}
+
 	igt_info("----------------------------------------------------\n");
 	return num_dynamics > 0;
 }
@@ -718,7 +807,7 @@ IGT_TEST_DESCRIPTION("Test to validate link training on SST/MST with "
 
 int igt_main()
 {
-	data_t data = {};
+	data_t data = { .aux_fd = -1 };
 
 	igt_fixture() {
 		data.drm_fd = drm_open_driver_master(DRIVER_INTEL | DRIVER_XE);
-- 
2.25.1


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

* ✓ Xe.CI.BAT: success for Expand kms_dp_link_training coverage
  2026-09-16  4:47 [PATCH i-g-t 00/13] Expand kms_dp_link_training coverage Kunal Joshi
                   ` (12 preceding siblings ...)
  2026-09-16  4:48 ` [PATCH i-g-t 13/13] tests/intel/kms_dp_link_training: Verify the trained link from the sink side Kunal Joshi
@ 2026-09-16  5:08 ` Patchwork
  2026-09-16  5:25 ` ✓ i915.CI.BAT: " Patchwork
                   ` (2 subsequent siblings)
  16 siblings, 0 replies; 31+ messages in thread
From: Patchwork @ 2026-09-16  5:08 UTC (permalink / raw)
  To: Kunal Joshi; +Cc: igt-dev

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

== Series Details ==

Series: Expand kms_dp_link_training coverage
URL   : https://patchwork.freedesktop.org/series/174224/
State : success

== Summary ==

CI Bug Log - changes from XEIGT_9098_BAT -> XEIGTPW_15849_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (15 -> 15)
------------------------------

  No changes in participating hosts

Known issues
------------

  Here are the changes found in XEIGTPW_15849_BAT that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@xe_waitfence@engine:
    - bat-ptl-2:          [PASS][1] -> [FAIL][2] ([Intel XE#9109])
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/bat-ptl-2/igt@xe_waitfence@engine.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/bat-ptl-2/igt@xe_waitfence@engine.html

  * igt@xe_waitfence@reltime:
    - bat-ptl-2:          [PASS][3] -> [FAIL][4] ([Intel XE#9115])
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/bat-ptl-2/igt@xe_waitfence@reltime.html
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/bat-ptl-2/igt@xe_waitfence@reltime.html

  
  [Intel XE#9109]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9109
  [Intel XE#9115]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9115


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

  * IGT: IGT_9098 -> IGTPW_15849
  * Linux: xe-5752-2bd2887dd30703cc280a0ca64919784240f66e2d -> xe-5755-0fb8d1900f1a6b9d21aadbfa5f784979b950bcf8

  IGTPW_15849: 15849
  IGT_9098: 9098
  xe-5752-2bd2887dd30703cc280a0ca64919784240f66e2d: 2bd2887dd30703cc280a0ca64919784240f66e2d
  xe-5755-0fb8d1900f1a6b9d21aadbfa5f784979b950bcf8: 0fb8d1900f1a6b9d21aadbfa5f784979b950bcf8

== Logs ==

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

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

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

* ✓ i915.CI.BAT: success for Expand kms_dp_link_training coverage
  2026-09-16  4:47 [PATCH i-g-t 00/13] Expand kms_dp_link_training coverage Kunal Joshi
                   ` (13 preceding siblings ...)
  2026-09-16  5:08 ` ✓ Xe.CI.BAT: success for Expand kms_dp_link_training coverage Patchwork
@ 2026-09-16  5:25 ` Patchwork
  2026-09-16  6:15 ` ✗ Xe.CI.FULL: failure " Patchwork
  2026-09-16 11:59 ` ✗ i915.CI.Full: " Patchwork
  16 siblings, 0 replies; 31+ messages in thread
From: Patchwork @ 2026-09-16  5:25 UTC (permalink / raw)
  To: Kunal Joshi; +Cc: igt-dev

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

== Series Details ==

Series: Expand kms_dp_link_training coverage
URL   : https://patchwork.freedesktop.org/series/174224/
State : success

== Summary ==

CI Bug Log - changes from IGT_9098 -> IGTPW_15849
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/index.html

Participating hosts (39 -> 37)
------------------------------

  Missing    (2): bat-dg2-13 fi-glk-j4005 

Known issues
------------

  Here are the changes found in IGTPW_15849 that come from known issues:

### IGT changes ###

#### Possible fixes ####

  * igt@i915_pm_rpm@module-reload:
    - bat-apl-1:          [DMESG-WARN][1] ([i915#16685]) -> [PASS][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9098/bat-apl-1/igt@i915_pm_rpm@module-reload.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/bat-apl-1/igt@i915_pm_rpm@module-reload.html

  
  [i915#16685]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16685


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

  * CI: CI-20190529 -> None
  * IGT: IGT_9098 -> IGTPW_15849
  * Linux: CI_DRM_19149 -> CI_DRM_19152

  CI-20190529: 20190529
  CI_DRM_19149: 2bd2887dd30703cc280a0ca64919784240f66e2d @ git://anongit.freedesktop.org/gfx-ci/linux
  CI_DRM_19152: 0fb8d1900f1a6b9d21aadbfa5f784979b950bcf8 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_15849: 15849
  IGT_9098: 9098

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/index.html

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

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

* ✗ Xe.CI.FULL: failure for Expand kms_dp_link_training coverage
  2026-09-16  4:47 [PATCH i-g-t 00/13] Expand kms_dp_link_training coverage Kunal Joshi
                   ` (14 preceding siblings ...)
  2026-09-16  5:25 ` ✓ i915.CI.BAT: " Patchwork
@ 2026-09-16  6:15 ` Patchwork
  2026-09-16 11:59 ` ✗ i915.CI.Full: " Patchwork
  16 siblings, 0 replies; 31+ messages in thread
From: Patchwork @ 2026-09-16  6:15 UTC (permalink / raw)
  To: Kunal Joshi; +Cc: igt-dev

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

== Series Details ==

Series: Expand kms_dp_link_training coverage
URL   : https://patchwork.freedesktop.org/series/174224/
State : failure

== Summary ==

CI Bug Log - changes from XEIGT_9098_FULL -> XEIGTPW_15849_FULL
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with XEIGTPW_15849_FULL absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in XEIGTPW_15849_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 (2 -> 2)
------------------------------

  No changes in participating hosts

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in XEIGTPW_15849_FULL:

### IGT changes ###

#### Possible regressions ####

  * {igt@kms_dp_link_training@uhbr-mst-tbtalt-train} (NEW):
    - shard-bmg:          NOTRUN -> [SKIP][1] +4 other tests skip
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-9/igt@kms_dp_link_training@uhbr-mst-tbtalt-train.html

  * igt@kms_dp_link_training@uhbr-sst:
    - shard-lnl:          NOTRUN -> [SKIP][2] +6 other tests skip
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-4/igt@kms_dp_link_training@uhbr-sst.html

  * igt@kms_pm_dc@dc5-dpms-suspend-resume:
    - shard-bmg:          [PASS][3] -> [INCOMPLETE][4]
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-bmg-7/igt@kms_pm_dc@dc5-dpms-suspend-resume.html
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-6/igt@kms_pm_dc@dc5-dpms-suspend-resume.html

  
#### Warnings ####

  * igt@kms_dp_link_training@non-uhbr-mst:
    - shard-lnl:          [SKIP][5] ([Intel XE#4354] / [Intel XE#5882]) -> [SKIP][6]
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-lnl-8/igt@kms_dp_link_training@non-uhbr-mst.html
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-3/igt@kms_dp_link_training@non-uhbr-mst.html
    - shard-bmg:          [SKIP][7] ([Intel XE#4354] / [Intel XE#5882]) -> [SKIP][8]
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-bmg-7/igt@kms_dp_link_training@non-uhbr-mst.html
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-4/igt@kms_dp_link_training@non-uhbr-mst.html

  * igt@kms_dp_link_training@non-uhbr-sst:
    - shard-lnl:          [SKIP][9] ([Intel XE#4354] / [Intel XE#7450]) -> [SKIP][10]
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-lnl-7/igt@kms_dp_link_training@non-uhbr-sst.html
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-1/igt@kms_dp_link_training@non-uhbr-sst.html

  * igt@kms_dp_link_training@uhbr-mst:
    - shard-lnl:          [SKIP][11] ([Intel XE#4354] / [Intel XE#7386]) -> [SKIP][12]
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-lnl-5/igt@kms_dp_link_training@uhbr-mst.html
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-8/igt@kms_dp_link_training@uhbr-mst.html

  * igt@kms_dp_link_training@uhbr-sst:
    - shard-bmg:          [SKIP][13] ([Intel XE#4354] / [Intel XE#5870]) -> [SKIP][14]
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-bmg-4/igt@kms_dp_link_training@uhbr-sst.html
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-3/igt@kms_dp_link_training@uhbr-sst.html

  
New tests
---------

  New tests have been introduced between XEIGT_9098_FULL and XEIGTPW_15849_FULL:

### New IGT tests (26) ###

  * igt@kms_dp_link_training@non-uhbr-mst-direct-train:
    - Statuses : 2 skip(s)
    - Exec time: [0.02, 0.03] s

  * igt@kms_dp_link_training@non-uhbr-mst-tbtalt-train:
    - Statuses : 2 skip(s)
    - Exec time: [0.01, 0.03] s

  * igt@kms_dp_link_training@non-uhbr-sst-direct-train:
    - Statuses : 1 pass(s) 1 skip(s)
    - Exec time: [0.01, 66.10] s

  * igt@kms_dp_link_training@non-uhbr-sst-direct-train@dp-2-1x162000:
    - Statuses : 1 pass(s)
    - Exec time: [7.42] s

  * igt@kms_dp_link_training@non-uhbr-sst-direct-train@dp-2-1x270000:
    - Statuses : 1 pass(s)
    - Exec time: [7.26] s

  * igt@kms_dp_link_training@non-uhbr-sst-direct-train@dp-2-1x540000:
    - Statuses : 1 pass(s)
    - Exec time: [7.25] s

  * igt@kms_dp_link_training@non-uhbr-sst-direct-train@dp-2-2x162000:
    - Statuses : 1 pass(s)
    - Exec time: [7.25] s

  * igt@kms_dp_link_training@non-uhbr-sst-direct-train@dp-2-2x270000:
    - Statuses : 1 pass(s)
    - Exec time: [7.25] s

  * igt@kms_dp_link_training@non-uhbr-sst-direct-train@dp-2-2x540000:
    - Statuses : 1 pass(s)
    - Exec time: [7.24] s

  * igt@kms_dp_link_training@non-uhbr-sst-direct-train@dp-2-4x162000:
    - Statuses : 1 pass(s)
    - Exec time: [7.25] s

  * igt@kms_dp_link_training@non-uhbr-sst-direct-train@dp-2-4x270000:
    - Statuses : 1 pass(s)
    - Exec time: [7.23] s

  * igt@kms_dp_link_training@non-uhbr-sst-direct-train@dp-2-4x540000:
    - Statuses : 1 pass(s)
    - Exec time: [7.23] s

  * igt@kms_dp_link_training@non-uhbr-sst-tbtalt-train:
    - Statuses : 1 skip(s)
    - Exec time: [0.03] s

  * igt@kms_dp_link_training@non-uhbr-sst@dp-2-1x162000:
    - Statuses : 1 pass(s)
    - Exec time: [7.44] s

  * igt@kms_dp_link_training@non-uhbr-sst@dp-2-1x270000:
    - Statuses : 1 pass(s)
    - Exec time: [7.26] s

  * igt@kms_dp_link_training@non-uhbr-sst@dp-2-1x540000:
    - Statuses : 1 pass(s)
    - Exec time: [7.24] s

  * igt@kms_dp_link_training@non-uhbr-sst@dp-2-2x162000:
    - Statuses : 1 pass(s)
    - Exec time: [7.27] s

  * igt@kms_dp_link_training@non-uhbr-sst@dp-2-2x270000:
    - Statuses : 1 pass(s)
    - Exec time: [7.25] s

  * igt@kms_dp_link_training@non-uhbr-sst@dp-2-2x540000:
    - Statuses : 1 pass(s)
    - Exec time: [7.23] s

  * igt@kms_dp_link_training@non-uhbr-sst@dp-2-4x162000:
    - Statuses : 1 pass(s)
    - Exec time: [7.25] s

  * igt@kms_dp_link_training@non-uhbr-sst@dp-2-4x270000:
    - Statuses : 1 pass(s)
    - Exec time: [7.25] s

  * igt@kms_dp_link_training@non-uhbr-sst@dp-2-4x540000:
    - Statuses : 1 pass(s)
    - Exec time: [7.24] s

  * igt@kms_dp_link_training@uhbr-mst-direct-train:
    - Statuses :
    - Exec time: [None] s

  * igt@kms_dp_link_training@uhbr-mst-tbtalt-train:
    - Statuses : 2 skip(s)
    - Exec time: [0.01, 0.03] s

  * igt@kms_dp_link_training@uhbr-sst-direct-train:
    - Statuses : 1 skip(s)
    - Exec time: [0.02] s

  * igt@kms_dp_link_training@uhbr-sst-tbtalt-train:
    - Statuses : 2 skip(s)
    - Exec time: [0.02, 0.03] s

  

Known issues
------------

  Here are the changes found in XEIGTPW_15849_FULL that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@kms_addfb_basic@addfb25-y-tiled-small-legacy:
    - shard-lnl:          NOTRUN -> [SKIP][15] ([Intel XE#1466])
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-1/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html
    - shard-bmg:          NOTRUN -> [SKIP][16] ([Intel XE#2233])
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-9/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html

  * igt@kms_addfb_basic@invalid-smem-bo-on-discrete:
    - shard-lnl:          NOTRUN -> [SKIP][17] ([Intel XE#3157])
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-3/igt@kms_addfb_basic@invalid-smem-bo-on-discrete.html

  * igt@kms_atomic_transition@plane-all-modeset-transition:
    - shard-lnl:          NOTRUN -> [SKIP][18] ([Intel XE#3279])
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-4/igt@kms_atomic_transition@plane-all-modeset-transition.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels:
    - shard-bmg:          NOTRUN -> [SKIP][19] ([Intel XE#2370])
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-7/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html

  * igt@kms_big_fb@linear-64bpp-rotate-90:
    - shard-lnl:          NOTRUN -> [SKIP][20] ([Intel XE#1407]) +4 other tests skip
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-7/igt@kms_big_fb@linear-64bpp-rotate-90.html
    - shard-bmg:          NOTRUN -> [SKIP][21] ([Intel XE#2327]) +2 other tests skip
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-9/igt@kms_big_fb@linear-64bpp-rotate-90.html

  * igt@kms_big_fb@y-tiled-32bpp-rotate-270:
    - shard-bmg:          NOTRUN -> [SKIP][22] ([Intel XE#1124]) +10 other tests skip
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-7/igt@kms_big_fb@y-tiled-32bpp-rotate-270.html

  * igt@kms_big_fb@y-tiled-64bpp-rotate-270:
    - shard-lnl:          NOTRUN -> [SKIP][23] ([Intel XE#1124]) +9 other tests skip
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-4/igt@kms_big_fb@y-tiled-64bpp-rotate-270.html

  * igt@kms_big_fb@y-tiled-addfb-size-offset-overflow:
    - shard-lnl:          NOTRUN -> [SKIP][24] ([Intel XE#1477] / [Intel XE#7361])
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-5/igt@kms_big_fb@y-tiled-addfb-size-offset-overflow.html

  * igt@kms_bw@connected-linear-tiling-3-displays-target-2160x1440p:
    - shard-lnl:          NOTRUN -> [SKIP][25] ([Intel XE#7679]) +1 other test skip
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-4/igt@kms_bw@connected-linear-tiling-3-displays-target-2160x1440p.html

  * igt@kms_bw@connected-linear-tiling-3-displays-target-2560x1440p:
    - shard-bmg:          NOTRUN -> [SKIP][26] ([Intel XE#7679])
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-2/igt@kms_bw@connected-linear-tiling-3-displays-target-2560x1440p.html

  * igt@kms_bw@linear-tiling-3-displays-target-1920x1080p:
    - shard-lnl:          NOTRUN -> [SKIP][27] ([Intel XE#367])
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-4/igt@kms_bw@linear-tiling-3-displays-target-1920x1080p.html
    - shard-bmg:          NOTRUN -> [SKIP][28] ([Intel XE#367]) +3 other tests skip
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-3/igt@kms_bw@linear-tiling-3-displays-target-1920x1080p.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-lnl-ccs@pipe-c-dp-2:
    - shard-bmg:          NOTRUN -> [SKIP][29] ([Intel XE#2652]) +8 other tests skip
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-10/igt@kms_ccs@bad-rotation-90-4-tiled-lnl-ccs@pipe-c-dp-2.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs:
    - shard-bmg:          NOTRUN -> [SKIP][30] ([Intel XE#3432]) +3 other tests skip
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-8/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs-cc:
    - shard-lnl:          NOTRUN -> [SKIP][31] ([Intel XE#3432]) +1 other test skip
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-4/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs-cc.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs:
    - shard-lnl:          NOTRUN -> [SKIP][32] ([Intel XE#2887]) +11 other tests skip
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-4/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs.html

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs:
    - shard-bmg:          NOTRUN -> [SKIP][33] ([Intel XE#2887]) +16 other tests skip
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-4/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs.html

  * igt@kms_chamelium_audio@dp-audio-after-suspend:
    - shard-bmg:          NOTRUN -> [SKIP][34] ([Intel XE#2252]) +8 other tests skip
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-5/igt@kms_chamelium_audio@dp-audio-after-suspend.html

  * igt@kms_chamelium_color@ctm-green-to-red:
    - shard-lnl:          NOTRUN -> [SKIP][35] ([Intel XE#306] / [Intel XE#7358])
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-3/igt@kms_chamelium_color@ctm-green-to-red.html

  * igt@kms_chamelium_color@ctm-negative:
    - shard-bmg:          NOTRUN -> [SKIP][36] ([Intel XE#2325] / [Intel XE#7358]) +1 other test skip
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-7/igt@kms_chamelium_color@ctm-negative.html

  * igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4-lut1d:
    - shard-bmg:          NOTRUN -> [SKIP][37] ([Intel XE#7358])
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-9/igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4-lut1d.html

  * igt@kms_chamelium_color_pipeline@plane-lut1d-pre-ctm3x4:
    - shard-lnl:          NOTRUN -> [SKIP][38] ([Intel XE#7358]) +1 other test skip
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-7/igt@kms_chamelium_color_pipeline@plane-lut1d-pre-ctm3x4.html

  * igt@kms_chamelium_frames@hdmi-frame-dump:
    - shard-lnl:          NOTRUN -> [SKIP][39] ([Intel XE#373]) +5 other tests skip
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-3/igt@kms_chamelium_frames@hdmi-frame-dump.html

  * igt@kms_color_pipeline@plane-lut1d-ctm3x4@pipe-a-plane-4:
    - shard-lnl:          NOTRUN -> [SKIP][40] ([Intel XE#6969]) +5 other tests skip
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-3/igt@kms_color_pipeline@plane-lut1d-ctm3x4@pipe-a-plane-4.html

  * igt@kms_content_protection@atomic-hdcp14:
    - shard-bmg:          NOTRUN -> [FAIL][41] ([Intel XE#1178] / [Intel XE#3304] / [Intel XE#7374]) +7 other tests fail
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-5/igt@kms_content_protection@atomic-hdcp14.html

  * igt@kms_content_protection@dp-mst-type-1:
    - shard-bmg:          NOTRUN -> [SKIP][42] ([Intel XE#2390] / [Intel XE#6974])
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-3/igt@kms_content_protection@dp-mst-type-1.html

  * igt@kms_content_protection@suspend-resume:
    - shard-lnl:          NOTRUN -> [SKIP][43] ([Intel XE#7642])
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-3/igt@kms_content_protection@suspend-resume.html

  * igt@kms_content_protection@uevent-hdcp14:
    - shard-bmg:          NOTRUN -> [FAIL][44] ([Intel XE#6707] / [Intel XE#7439]) +3 other tests fail
   [44]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-5/igt@kms_content_protection@uevent-hdcp14.html

  * igt@kms_cursor_crc@cursor-onscreen-max-size:
    - shard-bmg:          NOTRUN -> [SKIP][45] ([Intel XE#2320]) +6 other tests skip
   [45]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-2/igt@kms_cursor_crc@cursor-onscreen-max-size.html

  * igt@kms_cursor_crc@cursor-random-32x10:
    - shard-lnl:          NOTRUN -> [SKIP][46] ([Intel XE#1424])
   [46]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-7/igt@kms_cursor_crc@cursor-random-32x10.html

  * igt@kms_cursor_crc@cursor-random-512x170:
    - shard-lnl:          NOTRUN -> [SKIP][47] ([Intel XE#2321] / [Intel XE#7355]) +2 other tests skip
   [47]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-3/igt@kms_cursor_crc@cursor-random-512x170.html
    - shard-bmg:          NOTRUN -> [SKIP][48] ([Intel XE#2321] / [Intel XE#7355]) +2 other tests skip
   [48]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-7/igt@kms_cursor_crc@cursor-random-512x170.html

  * igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy:
    - shard-lnl:          NOTRUN -> [SKIP][49] ([Intel XE#309] / [Intel XE#7343]) +2 other tests skip
   [49]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-1/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size:
    - shard-bmg:          NOTRUN -> [SKIP][50] ([Intel XE#2286] / [Intel XE#6035]) +1 other test skip
   [50]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-10/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle:
    - shard-lnl:          NOTRUN -> [SKIP][51] ([Intel XE#323] / [Intel XE#6035])
   [51]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-3/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html

  * igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-3:
    - shard-bmg:          NOTRUN -> [SKIP][52] ([Intel XE#1340] / [Intel XE#7435])
   [52]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-5/igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-3.html

  * igt@kms_dsc@dsc-basic-ultrajoiner:
    - shard-lnl:          NOTRUN -> [SKIP][53] ([Intel XE#8265]) +2 other tests skip
   [53]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-4/igt@kms_dsc@dsc-basic-ultrajoiner.html

  * igt@kms_dsc@dsc-with-bpc-bigjoiner:
    - shard-bmg:          NOTRUN -> [SKIP][54] ([Intel XE#8265]) +4 other tests skip
   [54]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-9/igt@kms_dsc@dsc-with-bpc-bigjoiner.html

  * igt@kms_feature_discovery@chamelium:
    - shard-lnl:          NOTRUN -> [SKIP][55] ([Intel XE#701] / [Intel XE#7359])
   [55]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-8/igt@kms_feature_discovery@chamelium.html

  * igt@kms_feature_discovery@dp-mst:
    - shard-bmg:          NOTRUN -> [SKIP][56] ([Intel XE#2375])
   [56]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-5/igt@kms_feature_discovery@dp-mst.html

  * igt@kms_feature_discovery@vrr:
    - shard-bmg:          NOTRUN -> [SKIP][57] ([Intel XE#8586])
   [57]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-8/igt@kms_feature_discovery@vrr.html

  * igt@kms_flip@2x-flip-vs-suspend-interruptible:
    - shard-lnl:          NOTRUN -> [SKIP][58] ([Intel XE#1421]) +6 other tests skip
   [58]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-5/igt@kms_flip@2x-flip-vs-suspend-interruptible.html

  * igt@kms_flip@flip-vs-expired-vblank@c-edp1:
    - shard-lnl:          [PASS][59] -> [FAIL][60] ([Intel XE#301] / [Intel XE#3149])
   [59]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-lnl-2/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html
   [60]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html

  * igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-downscaling:
    - shard-lnl:          NOTRUN -> [SKIP][61] ([Intel XE#1397] / [Intel XE#1745] / [Intel XE#7385] / [Intel XE#9144])
   [61]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-2/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-downscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-downscaling@pipe-a-default-mode:
    - shard-lnl:          NOTRUN -> [SKIP][62] ([Intel XE#1397] / [Intel XE#7385] / [Intel XE#9144])
   [62]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-2/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-downscaling@pipe-a-default-mode.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling:
    - shard-lnl:          NOTRUN -> [SKIP][63] ([Intel XE#7178] / [Intel XE#7351]) +4 other tests skip
   [63]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-5/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-16bpp-ytile-downscaling:
    - shard-bmg:          NOTRUN -> [SKIP][64] ([Intel XE#7178] / [Intel XE#7351]) +3 other tests skip
   [64]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-5/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-16bpp-ytile-downscaling.html

  * igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-render:
    - shard-lnl:          NOTRUN -> [SKIP][65] ([Intel XE#656] / [Intel XE#7905]) +31 other tests skip
   [65]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-8/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@drrs-argb161616f-draw-mmap-wc:
    - shard-lnl:          NOTRUN -> [SKIP][66] ([Intel XE#7061] / [Intel XE#7356]) +3 other tests skip
   [66]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-5/igt@kms_frontbuffer_tracking@drrs-argb161616f-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@drrshdr-argb161616f-draw-mmap-wc:
    - shard-bmg:          NOTRUN -> [SKIP][67] ([Intel XE#7061]) +7 other tests skip
   [67]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-7/igt@kms_frontbuffer_tracking@drrshdr-argb161616f-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-onoff:
    - shard-bmg:          NOTRUN -> [SKIP][68] ([Intel XE#4141]) +20 other tests skip
   [68]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-8/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@fbc-argb161616f-draw-render:
    - shard-bmg:          NOTRUN -> [SKIP][69] ([Intel XE#7061] / [Intel XE#7356]) +4 other tests skip
   [69]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-3/igt@kms_frontbuffer_tracking@fbc-argb161616f-draw-render.html

  * igt@kms_frontbuffer_tracking@fbc-tiling-y:
    - shard-lnl:          NOTRUN -> [SKIP][70] ([Intel XE#1469] / [Intel XE#7399])
   [70]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-5/igt@kms_frontbuffer_tracking@fbc-tiling-y.html
    - shard-bmg:          NOTRUN -> [SKIP][71] ([Intel XE#2352] / [Intel XE#7399])
   [71]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-8/igt@kms_frontbuffer_tracking@fbc-tiling-y.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscreen-pri-shrfb-draw-mmap-wc:
    - shard-lnl:          NOTRUN -> [SKIP][72] ([Intel XE#6312]) +13 other tests skip
   [72]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-3/igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscreen-pri-shrfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-blt:
    - shard-lnl:          NOTRUN -> [SKIP][73] ([Intel XE#6312] / [Intel XE#651]) +9 other tests skip
   [73]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-1/igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-cur-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-shrfb-plflip-blt:
    - shard-bmg:          NOTRUN -> [SKIP][74] ([Intel XE#2311]) +67 other tests skip
   [74]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-9/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-shrfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcdrrshdr-2p-scndscrn-cur-indfb-draw-render:
    - shard-lnl:          NOTRUN -> [SKIP][75] ([Intel XE#7905]) +39 other tests skip
   [75]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-8/igt@kms_frontbuffer_tracking@fbcdrrshdr-2p-scndscrn-cur-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcdrrshdr-abgr161616f-draw-mmap-wc:
    - shard-lnl:          NOTRUN -> [SKIP][76] ([Intel XE#7061]) +4 other tests skip
   [76]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-5/igt@kms_frontbuffer_tracking@fbcdrrshdr-abgr161616f-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbchdr-tiling-y:
    - shard-lnl:          NOTRUN -> [SKIP][77] ([Intel XE#7399])
   [77]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-8/igt@kms_frontbuffer_tracking@fbchdr-tiling-y.html

  * igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-blt:
    - shard-bmg:          NOTRUN -> [SKIP][78] ([Intel XE#2313]) +63 other tests skip
   [78]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-8/igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-blt.html

  * igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-cur-indfb-draw-render:
    - shard-lnl:          NOTRUN -> [SKIP][79] ([Intel XE#7865]) +20 other tests skip
   [79]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-5/igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-cur-indfb-draw-render.html

  * igt@kms_hdmi_inject@inject-audio:
    - shard-bmg:          [PASS][80] -> [SKIP][81] ([Intel XE#7308])
   [80]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-bmg-1/igt@kms_hdmi_inject@inject-audio.html
   [81]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-5/igt@kms_hdmi_inject@inject-audio.html

  * igt@kms_joiner@basic-force-ultra-joiner:
    - shard-bmg:          NOTRUN -> [SKIP][82] ([Intel XE#6911] / [Intel XE#7466])
   [82]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-3/igt@kms_joiner@basic-force-ultra-joiner.html

  * igt@kms_joiner@basic-max-non-joiner:
    - shard-bmg:          NOTRUN -> [SKIP][83] ([Intel XE#4298] / [Intel XE#5873])
   [83]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-3/igt@kms_joiner@basic-max-non-joiner.html

  * igt@kms_joiner@basic-ultra-joiner:
    - shard-lnl:          NOTRUN -> [SKIP][84] ([Intel XE#6900] / [Intel XE#7362]) +1 other test skip
   [84]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-1/igt@kms_joiner@basic-ultra-joiner.html

  * igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner:
    - shard-bmg:          NOTRUN -> [SKIP][85] ([Intel XE#4090] / [Intel XE#7443])
   [85]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-2/igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner.html
    - shard-lnl:          NOTRUN -> [SKIP][86] ([Intel XE#7173] / [Intel XE#7294])
   [86]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-5/igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner.html

  * igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
    - shard-lnl:          NOTRUN -> [SKIP][87] ([Intel XE#7591])
   [87]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-2/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html

  * igt@kms_panel_fitting@atomic-fastset:
    - shard-bmg:          NOTRUN -> [SKIP][88] ([Intel XE#2486])
   [88]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-3/igt@kms_panel_fitting@atomic-fastset.html

  * igt@kms_pipe_stress@stress-xrgb8888-ytiled:
    - shard-bmg:          NOTRUN -> [SKIP][89] ([Intel XE#4329] / [Intel XE#6912] / [Intel XE#7375])
   [89]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-2/igt@kms_pipe_stress@stress-xrgb8888-ytiled.html

  * igt@kms_plane@pixel-format-x-tiled-modifier@pipe-b-plane-5:
    - shard-bmg:          NOTRUN -> [SKIP][90] ([Intel XE#8303]) +1 other test skip
   [90]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-9/igt@kms_plane@pixel-format-x-tiled-modifier@pipe-b-plane-5.html

  * igt@kms_plane@pixel-format-y-tiled-ccs-modifier-source-clamping:
    - shard-bmg:          NOTRUN -> [SKIP][91] ([Intel XE#7283]) +6 other tests skip
   [91]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-8/igt@kms_plane@pixel-format-y-tiled-ccs-modifier-source-clamping.html

  * igt@kms_plane@pixel-format-y-tiled-modifier-source-clamping:
    - shard-lnl:          NOTRUN -> [SKIP][92] ([Intel XE#7283]) +3 other tests skip
   [92]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-1/igt@kms_plane@pixel-format-y-tiled-modifier-source-clamping.html

  * igt@kms_plane_lowres@tiling-x@pipe-b-edp-1:
    - shard-lnl:          NOTRUN -> [SKIP][93] ([Intel XE#599] / [Intel XE#7382]) +3 other tests skip
   [93]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-4/igt@kms_plane_lowres@tiling-x@pipe-b-edp-1.html

  * igt@kms_plane_multiple@2x-tiling-yf:
    - shard-bmg:          NOTRUN -> [SKIP][94] ([Intel XE#5021] / [Intel XE#7377]) +1 other test skip
   [94]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-9/igt@kms_plane_multiple@2x-tiling-yf.html
    - shard-lnl:          NOTRUN -> [SKIP][95] ([Intel XE#4596] / [Intel XE#5854])
   [95]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-7/igt@kms_plane_multiple@2x-tiling-yf.html

  * igt@kms_plane_multiple@tiling-y:
    - shard-lnl:          NOTRUN -> [SKIP][96] ([Intel XE#5020] / [Intel XE#7348])
   [96]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-1/igt@kms_plane_multiple@tiling-y.html

  * igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-5@pipe-c:
    - shard-lnl:          NOTRUN -> [SKIP][97] ([Intel XE#2763] / [Intel XE#6886]) +7 other tests skip
   [97]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-3/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-5@pipe-c.html

  * igt@kms_pm_backlight@fade-with-dpms:
    - shard-bmg:          NOTRUN -> [SKIP][98] ([Intel XE#7376] / [Intel XE#7760] / [Intel XE#870])
   [98]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-4/igt@kms_pm_backlight@fade-with-dpms.html

  * igt@kms_pm_dc@dc3co-after-dc6:
    - shard-bmg:          NOTRUN -> [SKIP][99] ([Intel XE#8395] / [Intel XE#8396]) +1 other test skip
   [99]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-8/igt@kms_pm_dc@dc3co-after-dc6.html

  * igt@kms_pm_dc@dc3co-after-dc6@psr2-xrgb8888:
    - shard-bmg:          NOTRUN -> [SKIP][100] ([Intel XE#8396]) +1 other test skip
   [100]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-8/igt@kms_pm_dc@dc3co-after-dc6@psr2-xrgb8888.html

  * igt@kms_pm_dc@dc5-pageflip-negative:
    - shard-bmg:          NOTRUN -> [SKIP][101] ([Intel XE#6927] / [Intel XE#8854])
   [101]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-5/igt@kms_pm_dc@dc5-pageflip-negative.html

  * igt@kms_pm_dc@dc5-psr-suspend-resume:
    - shard-bmg:          NOTRUN -> [SKIP][102] ([Intel XE#8854])
   [102]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-7/igt@kms_pm_dc@dc5-psr-suspend-resume.html

  * igt@kms_pm_dc@dc5-retention-flops:
    - shard-bmg:          NOTRUN -> [SKIP][103] ([Intel XE#3309] / [Intel XE#7368])
   [103]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-2/igt@kms_pm_dc@dc5-retention-flops.html

  * igt@kms_pm_rpm@modeset-lpsp-stress-no-wait:
    - shard-bmg:          NOTRUN -> [SKIP][104] ([Intel XE#1439] / [Intel XE#3141] / [Intel XE#7383] / [Intel XE#836])
   [104]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-3/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html

  * igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-fully-sf:
    - shard-bmg:          NOTRUN -> [SKIP][105] ([Intel XE#1489]) +8 other tests skip
   [105]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-9/igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area:
    - shard-lnl:          NOTRUN -> [SKIP][106] ([Intel XE#2893] / [Intel XE#7304]) +3 other tests skip
   [106]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-2/igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area.html

  * igt@kms_psr2_sf@fbc-psr2-primary-plane-update-sf-dmg-area:
    - shard-lnl:          NOTRUN -> [SKIP][107] ([Intel XE#2893] / [Intel XE#4608] / [Intel XE#7304])
   [107]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-4/igt@kms_psr2_sf@fbc-psr2-primary-plane-update-sf-dmg-area.html

  * igt@kms_psr2_sf@fbc-psr2-primary-plane-update-sf-dmg-area@pipe-a-edp-1:
    - shard-lnl:          NOTRUN -> [SKIP][108] ([Intel XE#4608])
   [108]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-4/igt@kms_psr2_sf@fbc-psr2-primary-plane-update-sf-dmg-area@pipe-a-edp-1.html

  * igt@kms_psr2_sf@fbc-psr2-primary-plane-update-sf-dmg-area@pipe-b-edp-1:
    - shard-lnl:          NOTRUN -> [SKIP][109] ([Intel XE#4608] / [Intel XE#7304])
   [109]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-4/igt@kms_psr2_sf@fbc-psr2-primary-plane-update-sf-dmg-area@pipe-b-edp-1.html

  * igt@kms_psr2_su@page_flip-p010:
    - shard-bmg:          NOTRUN -> [SKIP][110] ([Intel XE#2387] / [Intel XE#7429])
   [110]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-8/igt@kms_psr2_su@page_flip-p010.html

  * igt@kms_psr@fbc-pr-cursor-plane-move:
    - shard-lnl:          NOTRUN -> [SKIP][111] ([Intel XE#1406]) +3 other tests skip
   [111]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-4/igt@kms_psr@fbc-pr-cursor-plane-move.html

  * igt@kms_psr@fbc-psr2-primary-blt:
    - shard-lnl:          NOTRUN -> [SKIP][112] ([Intel XE#1406] / [Intel XE#7345])
   [112]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-3/igt@kms_psr@fbc-psr2-primary-blt.html

  * igt@kms_psr@fbc-psr2-primary-blt@edp-1:
    - shard-lnl:          NOTRUN -> [SKIP][113] ([Intel XE#1406] / [Intel XE#4609] / [Intel XE#7345])
   [113]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-3/igt@kms_psr@fbc-psr2-primary-blt@edp-1.html

  * igt@kms_psr@psr2-primary-page-flip:
    - shard-bmg:          NOTRUN -> [SKIP][114] ([Intel XE#2234] / [Intel XE#2850]) +12 other tests skip
   [114]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-7/igt@kms_psr@psr2-primary-page-flip.html

  * igt@kms_psr_stress_test@flip-primary-invalidate-overlay:
    - shard-bmg:          NOTRUN -> [SKIP][115] ([Intel XE#7795]) +1 other test skip
   [115]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-5/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html

  * igt@kms_rotation_crc@bad-pixel-format:
    - shard-lnl:          NOTRUN -> [SKIP][116] ([Intel XE#3414] / [Intel XE#3904] / [Intel XE#7342])
   [116]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-3/igt@kms_rotation_crc@bad-pixel-format.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
    - shard-lnl:          NOTRUN -> [SKIP][117] ([Intel XE#1127] / [Intel XE#5813])
   [117]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-7/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html
    - shard-bmg:          NOTRUN -> [SKIP][118] ([Intel XE#2330] / [Intel XE#5813])
   [118]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-8/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html

  * igt@kms_rotation_crc@sprite-rotation-270:
    - shard-bmg:          NOTRUN -> [SKIP][119] ([Intel XE#3904] / [Intel XE#7342])
   [119]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-2/igt@kms_rotation_crc@sprite-rotation-270.html

  * igt@kms_setmode@basic:
    - shard-bmg:          NOTRUN -> [FAIL][120] ([Intel XE#8618]) +2 other tests fail
   [120]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-3/igt@kms_setmode@basic.html

  * igt@kms_setmode@invalid-clone-exclusive-crtc:
    - shard-bmg:          NOTRUN -> [SKIP][121] ([Intel XE#1435] / [Intel XE#8695])
   [121]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-4/igt@kms_setmode@invalid-clone-exclusive-crtc.html

  * igt@kms_sharpness_filter@invalid-filter-with-plane:
    - shard-bmg:          NOTRUN -> [SKIP][122] ([Intel XE#6503]) +4 other tests skip
   [122]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-9/igt@kms_sharpness_filter@invalid-filter-with-plane.html

  * igt@kms_tv_load_detect@load-detect:
    - shard-lnl:          NOTRUN -> [SKIP][123] ([Intel XE#330] / [Intel XE#5857])
   [123]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-1/igt@kms_tv_load_detect@load-detect.html

  * igt@kms_vrr@flip-basic-fastset:
    - shard-bmg:          NOTRUN -> [SKIP][124] ([Intel XE#1499] / [Intel XE#9271])
   [124]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-9/igt@kms_vrr@flip-basic-fastset.html

  * igt@kms_vrr@lobf-dc3co:
    - shard-bmg:          NOTRUN -> [SKIP][125] ([Intel XE#8397])
   [125]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-9/igt@kms_vrr@lobf-dc3co.html

  * igt@sriov_basic@pf-unbind-with-vf-probed:
    - shard-lnl:          NOTRUN -> [SKIP][126] ([Intel XE#8866])
   [126]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-5/igt@sriov_basic@pf-unbind-with-vf-probed.html
    - shard-bmg:          NOTRUN -> [ABORT][127] ([Intel XE#8868])
   [127]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-5/igt@sriov_basic@pf-unbind-with-vf-probed.html

  * igt@xe_compute@eu-busy-10s:
    - shard-lnl:          NOTRUN -> [SKIP][128] ([Intel XE#6592] / [Intel XE#6645] / [Intel XE#7391])
   [128]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-8/igt@xe_compute@eu-busy-10s.html

  * igt@xe_create@create-big-vram:
    - shard-lnl:          NOTRUN -> [SKIP][129] ([Intel XE#1062] / [Intel XE#7318] / [Intel XE#7457])
   [129]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-5/igt@xe_create@create-big-vram.html

  * igt@xe_create@multigpu-create-massive-size:
    - shard-bmg:          NOTRUN -> [SKIP][130] ([Intel XE#2504] / [Intel XE#7319] / [Intel XE#7350])
   [130]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-3/igt@xe_create@multigpu-create-massive-size.html

  * igt@xe_cw_post_sync@walker-post-sync:
    - shard-lnl:          NOTRUN -> [SKIP][131] ([Intel XE#8608])
   [131]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-7/igt@xe_cw_post_sync@walker-post-sync.html

  * igt@xe_evict@evict-small-multi-queue-priority-cm:
    - shard-bmg:          NOTRUN -> [SKIP][132] ([Intel XE#8370])
   [132]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-4/igt@xe_evict@evict-small-multi-queue-priority-cm.html

  * igt@xe_evict_ccs@evict-overcommit-parallel-nofree-samefd:
    - shard-lnl:          NOTRUN -> [SKIP][133] ([Intel XE#6540] / [Intel XE#688]) +12 other tests skip
   [133]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-7/igt@xe_evict_ccs@evict-overcommit-parallel-nofree-samefd.html

  * igt@xe_exec_balancer@once-virtual-basic:
    - shard-lnl:          NOTRUN -> [SKIP][134] ([Intel XE#7482]) +12 other tests skip
   [134]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-8/igt@xe_exec_balancer@once-virtual-basic.html

  * igt@xe_exec_basic@multigpu-no-exec-null-defer-mmap:
    - shard-lnl:          NOTRUN -> [SKIP][135] ([Intel XE#1392]) +5 other tests skip
   [135]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-8/igt@xe_exec_basic@multigpu-no-exec-null-defer-mmap.html

  * igt@xe_exec_basic@multigpu-once-basic-defer-bind:
    - shard-bmg:          NOTRUN -> [SKIP][136] ([Intel XE#2322] / [Intel XE#7372]) +11 other tests skip
   [136]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-4/igt@xe_exec_basic@multigpu-once-basic-defer-bind.html

  * igt@xe_exec_fault_mode@many-multi-queue-userptr-invalidate-imm:
    - shard-bmg:          NOTRUN -> [SKIP][137] ([Intel XE#8374]) +13 other tests skip
   [137]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-3/igt@xe_exec_fault_mode@many-multi-queue-userptr-invalidate-imm.html

  * igt@xe_exec_fault_mode@twice-multi-queue-userptr-invalidate-race-imm:
    - shard-lnl:          NOTRUN -> [SKIP][138] ([Intel XE#8374]) +9 other tests skip
   [138]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-5/igt@xe_exec_fault_mode@twice-multi-queue-userptr-invalidate-race-imm.html

  * igt@xe_exec_multi_queue@many-queues-preempt-mode-fault-userptr-invalidate:
    - shard-lnl:          NOTRUN -> [SKIP][139] ([Intel XE#8364]) +25 other tests skip
   [139]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-5/igt@xe_exec_multi_queue@many-queues-preempt-mode-fault-userptr-invalidate.html

  * igt@xe_exec_multi_queue@two-queues-priority:
    - shard-bmg:          NOTRUN -> [SKIP][140] ([Intel XE#8364]) +33 other tests skip
   [140]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-5/igt@xe_exec_multi_queue@two-queues-priority.html

  * igt@xe_exec_reset@cm-multi-queue-cat-error:
    - shard-bmg:          NOTRUN -> [SKIP][141] ([Intel XE#8369]) +1 other test skip
   [141]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-3/igt@xe_exec_reset@cm-multi-queue-cat-error.html

  * igt@xe_exec_reset@cm-multi-queue-close-fd:
    - shard-lnl:          NOTRUN -> [SKIP][142] ([Intel XE#8369]) +2 other tests skip
   [142]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-7/igt@xe_exec_reset@cm-multi-queue-close-fd.html

  * igt@xe_exec_system_allocator@many-stride-new-prefetch:
    - shard-bmg:          NOTRUN -> [INCOMPLETE][143] ([Intel XE#7098] / [Intel XE#8159])
   [143]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-3/igt@xe_exec_system_allocator@many-stride-new-prefetch.html

  * igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-comp-single-vma:
    - shard-lnl:          NOTRUN -> [SKIP][144] ([Intel XE#6196])
   [144]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-5/igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-comp-single-vma.html

  * igt@xe_exec_threads@threads-hang-userptr-invalidate-race:
    - shard-lnl:          [PASS][145] -> [FAIL][146] ([Intel XE#9096])
   [145]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-lnl-3/igt@xe_exec_threads@threads-hang-userptr-invalidate-race.html
   [146]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-7/igt@xe_exec_threads@threads-hang-userptr-invalidate-race.html

  * igt@xe_exec_threads@threads-multi-queue-cm-fd-rebind:
    - shard-bmg:          NOTRUN -> [SKIP][147] ([Intel XE#8378]) +10 other tests skip
   [147]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-8/igt@xe_exec_threads@threads-multi-queue-cm-fd-rebind.html

  * igt@xe_exec_threads@threads-multi-queue-fd-userptr-invalidate:
    - shard-lnl:          NOTRUN -> [SKIP][148] ([Intel XE#8378]) +8 other tests skip
   [148]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-2/igt@xe_exec_threads@threads-multi-queue-fd-userptr-invalidate.html

  * igt@xe_fault_injection@inject-fault-probe-function-xe_ggtt_init_early:
    - shard-bmg:          [PASS][149] -> [ABORT][150] ([Intel XE#8007]) +1 other test abort
   [149]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-bmg-9/igt@xe_fault_injection@inject-fault-probe-function-xe_ggtt_init_early.html
   [150]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-1/igt@xe_fault_injection@inject-fault-probe-function-xe_ggtt_init_early.html

  * igt@xe_gt_freq@freq_suspend:
    - shard-lnl:          NOTRUN -> [SKIP][151] ([Intel XE#584] / [Intel XE#7369]) +1 other test skip
   [151]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-1/igt@xe_gt_freq@freq_suspend.html

  * igt@xe_media_fill@media-fill:
    - shard-bmg:          NOTRUN -> [SKIP][152] ([Intel XE#2459] / [Intel XE#2596] / [Intel XE#7321] / [Intel XE#7453])
   [152]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-7/igt@xe_media_fill@media-fill.html

  * igt@xe_mmap@pci-membarrier-bad-pagesize:
    - shard-lnl:          NOTRUN -> [SKIP][153] ([Intel XE#5100] / [Intel XE#7322] / [Intel XE#7408]) +1 other test skip
   [153]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-2/igt@xe_mmap@pci-membarrier-bad-pagesize.html

  * igt@xe_multigpu_svm@mgpu-coherency-fail-basic:
    - shard-lnl:          NOTRUN -> [SKIP][154] ([Intel XE#6964]) +2 other tests skip
   [154]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-8/igt@xe_multigpu_svm@mgpu-coherency-fail-basic.html

  * igt@xe_multigpu_svm@mgpu-concurrent-access-prefetch:
    - shard-bmg:          NOTRUN -> [SKIP][155] ([Intel XE#6964]) +4 other tests skip
   [155]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-10/igt@xe_multigpu_svm@mgpu-concurrent-access-prefetch.html

  * igt@xe_oa@non-zero-reason-all:
    - shard-lnl:          [PASS][156] -> [FAIL][157] ([Intel XE#7334]) +1 other test fail
   [156]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-lnl-2/igt@xe_oa@non-zero-reason-all.html
   [157]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-4/igt@xe_oa@non-zero-reason-all.html

  * igt@xe_page_reclaim@binds-large-split:
    - shard-lnl:          NOTRUN -> [SKIP][158] ([Intel XE#7793]) +1 other test skip
   [158]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-4/igt@xe_page_reclaim@binds-large-split.html

  * igt@xe_page_reclaim@binds-null-vma:
    - shard-bmg:          NOTRUN -> [SKIP][159] ([Intel XE#7793]) +3 other tests skip
   [159]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-9/igt@xe_page_reclaim@binds-null-vma.html

  * igt@xe_pat@pat-index-xehpc:
    - shard-bmg:          NOTRUN -> [SKIP][160] ([Intel XE#1420] / [Intel XE#7590])
   [160]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-9/igt@xe_pat@pat-index-xehpc.html

  * igt@xe_pat@pat-index-xelp:
    - shard-lnl:          NOTRUN -> [SKIP][161] ([Intel XE#7590] / [Intel XE#977])
   [161]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-8/igt@xe_pat@pat-index-xelp.html

  * igt@xe_pat@pat-sw-hw-suspend:
    - shard-bmg:          NOTRUN -> [FAIL][162] ([Intel XE#7695])
   [162]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-9/igt@xe_pat@pat-sw-hw-suspend.html

  * igt@xe_peer2peer@read:
    - shard-bmg:          NOTRUN -> [SKIP][163] ([Intel XE#2427] / [Intel XE#6953] / [Intel XE#7326] / [Intel XE#7353])
   [163]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-7/igt@xe_peer2peer@read.html

  * igt@xe_pm@d3cold-basic:
    - shard-lnl:          NOTRUN -> [SKIP][164] ([Intel XE#2284] / [Intel XE#366] / [Intel XE#7370]) +1 other test skip
   [164]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-3/igt@xe_pm@d3cold-basic.html

  * igt@xe_pm@d3hot-mmap-vram:
    - shard-lnl:          NOTRUN -> [SKIP][165] ([Intel XE#1948])
   [165]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-8/igt@xe_pm@d3hot-mmap-vram.html

  * igt@xe_pm@s2idle-d3cold-basic-exec:
    - shard-bmg:          NOTRUN -> [SKIP][166] ([Intel XE#2284] / [Intel XE#7370]) +1 other test skip
   [166]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-8/igt@xe_pm@s2idle-d3cold-basic-exec.html

  * igt@xe_prefetch_fault@l2-prefetch-fault-svm:
    - shard-bmg:          NOTRUN -> [SKIP][167] ([Intel XE#8815])
   [167]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-5/igt@xe_prefetch_fault@l2-prefetch-fault-svm.html

  * igt@xe_prefetch_fault@prefetch-fault:
    - shard-bmg:          NOTRUN -> [SKIP][168] ([Intel XE#7599])
   [168]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-9/igt@xe_prefetch_fault@prefetch-fault.html

  * igt@xe_prefetch_fault@prefetch-fault-svm:
    - shard-lnl:          NOTRUN -> [SKIP][169] ([Intel XE#7599])
   [169]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-1/igt@xe_prefetch_fault@prefetch-fault-svm.html

  * igt@xe_pxp@pxp-termination-key-update-post-suspend:
    - shard-bmg:          NOTRUN -> [SKIP][170] ([Intel XE#4733] / [Intel XE#7417]) +4 other tests skip
   [170]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-3/igt@xe_pxp@pxp-termination-key-update-post-suspend.html

  * igt@xe_query@multigpu-query-invalid-cs-cycles:
    - shard-bmg:          NOTRUN -> [SKIP][171] ([Intel XE#944]) +2 other tests skip
   [171]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-8/igt@xe_query@multigpu-query-invalid-cs-cycles.html

  * igt@xe_query@multigpu-query-uc-fw-version-guc:
    - shard-lnl:          NOTRUN -> [SKIP][172] ([Intel XE#944])
   [172]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-8/igt@xe_query@multigpu-query-uc-fw-version-guc.html

  * igt@xe_sriov_admin@sched-priority-write-readback-vfs-disabled:
    - shard-lnl:          NOTRUN -> [SKIP][173] ([Intel XE#7174]) +1 other test skip
   [173]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-5/igt@xe_sriov_admin@sched-priority-write-readback-vfs-disabled.html

  * igt@xe_sriov_flr@flr-vf1-clear:
    - shard-lnl:          NOTRUN -> [SKIP][174] ([Intel XE#3342])
   [174]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-2/igt@xe_sriov_flr@flr-vf1-clear.html

  * igt@xe_sriov_vfio@region-info:
    - shard-lnl:          NOTRUN -> [SKIP][175] ([Intel XE#7724])
   [175]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-4/igt@xe_sriov_vfio@region-info.html

  * igt@xe_sriov_vram@vf-access-after-resize-up:
    - shard-lnl:          NOTRUN -> [SKIP][176] ([Intel XE#6376] / [Intel XE#7330] / [Intel XE#7422])
   [176]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-4/igt@xe_sriov_vram@vf-access-after-resize-up.html

  
#### Possible fixes ####

  * igt@kms_flip@flip-vs-expired-vblank@a-edp1:
    - shard-lnl:          [FAIL][177] ([Intel XE#301]) -> [PASS][178] +1 other test pass
   [177]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-lnl-2/igt@kms_flip@flip-vs-expired-vblank@a-edp1.html
   [178]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank@a-edp1.html

  * igt@kms_pm_dc@dc5-psr-suspend-resume:
    - shard-lnl:          [FAIL][179] ([Intel XE#8399]) -> [PASS][180]
   [179]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-lnl-2/igt@kms_pm_dc@dc5-psr-suspend-resume.html
   [180]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-3/igt@kms_pm_dc@dc5-psr-suspend-resume.html

  * igt@kms_pm_rpm@system-suspend-idle:
    - shard-bmg:          [ABORT][181] ([Intel XE#9093]) -> [PASS][182]
   [181]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-bmg-2/igt@kms_pm_rpm@system-suspend-idle.html
   [182]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-10/igt@kms_pm_rpm@system-suspend-idle.html

  * igt@kms_vblank@ts-continuation-dpms-suspend:
    - shard-bmg:          [INCOMPLETE][183] ([Intel XE#9272]) -> [PASS][184] +1 other test pass
   [183]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-bmg-6/igt@kms_vblank@ts-continuation-dpms-suspend.html
   [184]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-8/igt@kms_vblank@ts-continuation-dpms-suspend.html

  * igt@xe_fault_injection@exec-queue-create-fail-xe_exec_queue_create:
    - shard-bmg:          [ABORT][185] ([Intel XE#8007]) -> [PASS][186]
   [185]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-bmg-2/igt@xe_fault_injection@exec-queue-create-fail-xe_exec_queue_create.html
   [186]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-3/igt@xe_fault_injection@exec-queue-create-fail-xe_exec_queue_create.html

  * igt@xe_pm@s3-vm-bind-unbind-all:
    - shard-bmg:          [INCOMPLETE][187] ([Intel XE#8175]) -> [PASS][188]
   [187]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-bmg-6/igt@xe_pm@s3-vm-bind-unbind-all.html
   [188]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-3/igt@xe_pm@s3-vm-bind-unbind-all.html

  
#### Warnings ####

  * igt@kms_flip@flip-vs-expired-vblank:
    - shard-lnl:          [FAIL][189] ([Intel XE#301]) -> [FAIL][190] ([Intel XE#301] / [Intel XE#3149])
   [189]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-lnl-2/igt@kms_flip@flip-vs-expired-vblank.html
   [190]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank.html

  * igt@kms_hdr@brightness-with-hdr:
    - shard-bmg:          [SKIP][191] ([Intel XE#3374] / [Intel XE#3544]) -> [SKIP][192] ([Intel XE#3544])
   [191]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-bmg-2/igt@kms_hdr@brightness-with-hdr.html
   [192]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-4/igt@kms_hdr@brightness-with-hdr.html

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-bmg:          [FAIL][193] ([Intel XE#1729] / [Intel XE#7424]) -> [SKIP][194] ([Intel XE#2426] / [Intel XE#5848])
   [193]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-bmg-3/igt@kms_tiled_display@basic-test-pattern.html
   [194]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-7/igt@kms_tiled_display@basic-test-pattern.html

  * igt@kms_tiled_display@basic-test-pattern-with-chamelium:
    - shard-bmg:          [SKIP][195] ([Intel XE#2426] / [Intel XE#5848]) -> [SKIP][196] ([Intel XE#2509] / [Intel XE#7437])
   [195]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-bmg-8/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
   [196]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-4/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html

  * igt@kms_vrr@flip-suspend:
    - shard-bmg:          [SKIP][197] ([Intel XE#1499]) -> [SKIP][198] ([Intel XE#1499] / [Intel XE#9271]) +7 other tests skip
   [197]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-bmg-10/igt@kms_vrr@flip-suspend.html
   [198]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-bmg-10/igt@kms_vrr@flip-suspend.html

  * igt@kms_vrr@lobf@pipe-a-edp-1:
    - shard-lnl:          [SKIP][199] ([Intel XE#7638]) -> [SKIP][200] ([Intel XE#7638] / [Intel XE#9271])
   [199]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-lnl-1/igt@kms_vrr@lobf@pipe-a-edp-1.html
   [200]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-8/igt@kms_vrr@lobf@pipe-a-edp-1.html

  * igt@kms_vrr@negative-basic:
    - shard-lnl:          [SKIP][201] ([Intel XE#1499]) -> [SKIP][202] ([Intel XE#1499] / [Intel XE#9271]) +3 other tests skip
   [201]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9098/shard-lnl-8/igt@kms_vrr@negative-basic.html
   [202]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15849/shard-lnl-7/igt@kms_vrr@negative-basic.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [Intel XE#1062]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1062
  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [Intel XE#1127]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1127
  [Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
  [Intel XE#1340]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1340
  [Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
  [Intel XE#1397]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1397
  [Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
  [Intel XE#1407]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1407
  [Intel XE#1420]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1420
  [Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
  [Intel XE#1424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1424
  [Intel XE#1435]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1435
  [Intel XE#1439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1439
  [Intel XE#1466]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1466
  [Intel XE#1469]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1469
  [Intel XE#1477]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1477
  [Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
  [Intel XE#1499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1499
  [Intel XE#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
  [Intel XE#1745]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1745
  [Intel XE#1948]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1948
  [Intel XE#2233]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2233
  [Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
  [Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
  [Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
  [Intel XE#2286]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2286
  [Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
  [Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
  [Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
  [Intel XE#2321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2321
  [Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
  [Intel XE#2325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2325
  [Intel XE#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
  [Intel XE#2330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2330
  [Intel XE#2352]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2352
  [Intel XE#2370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2370
  [Intel XE#2375]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2375
  [Intel XE#2387]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2387
  [Intel XE#2390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2390
  [Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
  [Intel XE#2427]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2427
  [Intel XE#2459]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2459
  [Intel XE#2486]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2486
  [Intel XE#2504]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2504
  [Intel XE#2509]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2509
  [Intel XE#2596]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2596
  [Intel XE#2652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2652
  [Intel XE#2763]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2763
  [Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
  [Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
  [Intel XE#2893]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2893
  [Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
  [Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306
  [Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
  [Intel XE#3141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3141
  [Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
  [Intel XE#3157]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3157
  [Intel XE#323]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/323
  [Intel XE#3279]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3279
  [Intel XE#330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/330
  [Intel XE#3304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3304
  [Intel XE#3309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3309
  [Intel XE#3342]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3342
  [Intel XE#3374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3374
  [Intel XE#3414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3414
  [Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
  [Intel XE#3544]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3544
  [Intel XE#366]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/366
  [Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
  [Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
  [Intel XE#3904]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3904
  [Intel XE#4090]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4090
  [Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
  [Intel XE#4298]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4298
  [Intel XE#4329]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4329
  [Intel XE#4354]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4354
  [Intel XE#4596]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4596
  [Intel XE#4608]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4608
  [Intel XE#4609]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4609
  [Intel XE#4733]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4733
  [Intel XE#5020]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5020
  [Intel XE#5021]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5021
  [Intel XE#5100]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5100
  [Intel XE#5813]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5813
  [Intel XE#584]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/584
  [Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
  [Intel XE#5854]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5854
  [Intel XE#5857]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5857
  [Intel XE#5870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5870
  [Intel XE#5873]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5873
  [Intel XE#5882]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5882
  [Intel XE#599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/599
  [Intel XE#6035]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6035
  [Intel XE#6196]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6196
  [Intel XE#6312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6312
  [Intel XE#6376]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6376
  [Intel XE#6503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6503
  [Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
  [Intel XE#6540]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6540
  [Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
  [Intel XE#6592]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6592
  [Intel XE#6645]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6645
  [Intel XE#6707]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6707
  [Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
  [Intel XE#6886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6886
  [Intel XE#6900]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6900
  [Intel XE#6911]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6911
  [Intel XE#6912]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6912
  [Intel XE#6927]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6927
  [Intel XE#6953]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6953
  [Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
  [Intel XE#6969]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6969
  [Intel XE#6974]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6974
  [Intel XE#701]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/701
  [Intel XE#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
  [Intel XE#7098]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7098
  [Intel XE#7173]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7173
  [Intel XE#7174]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7174
  [Intel XE#7178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7178
  [Intel XE#7283]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7283
  [Intel XE#7294]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7294
  [Intel XE#7304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7304
  [Intel XE#7308]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7308
  [Intel XE#7318]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7318
  [Intel XE#7319]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7319
  [Intel XE#7321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7321
  [Intel XE#7322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7322
  [Intel XE#7326]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7326
  [Intel XE#7330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7330
  [Intel XE#7334]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7334
  [Intel XE#7342]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7342
  [Intel XE#7343]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7343
  [Intel XE#7345]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7345
  [Intel XE#7348]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7348
  [Intel XE#7350]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7350
  [Intel XE#7351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7351
  [Intel XE#7353]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7353
  [Intel XE#7355]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7355
  [Intel XE#7356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7356
  [Intel XE#7358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7358
  [Intel XE#7359]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7359
  [Intel XE#7361]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7361
  [Intel XE#7362]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7362
  [Intel XE#7368]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7368
  [Intel XE#7369]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7369
  [Intel XE#7370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7370
  [Intel XE#7372]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7372
  [Intel XE#7374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7374
  [Intel XE#7375]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7375
  [Intel XE#7376]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7376
  [Intel XE#7377]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7377
  [Intel XE#7382]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7382
  [Intel XE#7383]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7383
  [Intel XE#7385]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7385
  [Intel XE#7386]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7386
  [Intel XE#7391]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7391
  [Intel XE#7399]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7399
  [Intel XE#7408]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7408
  [Intel XE#7417]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7417
  [Intel XE#7422]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7422
  [Intel XE#7424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7424
  [Intel XE#7429]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7429
  [Intel XE#7435]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7435
  [Intel XE#7437]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7437
  [Intel XE#7439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7439
  [Intel XE#7443]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7443
  [Intel XE#7450]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7450
  [Intel XE#7453]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7453
  [Intel XE#7457]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7457
  [Intel XE#7466]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7466
  [Intel XE#7482]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7482
  [Intel XE#7590]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7590
  [Intel XE#7591]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7591
  [Intel XE#7599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7599
  [Intel XE#7638]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7638
  [Intel XE#7642]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7642
  [Intel XE#7679]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7679
  [Intel XE#7695]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7695
  [Intel XE#7724]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7724
  [Intel XE#7760]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7760
  [Intel XE#7793]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7793
  [Intel XE#7795]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7795
  [Intel XE#7865]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7865
  [Intel XE#7905]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7905
  [Intel XE#8007]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8007
  [Intel XE#8159]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8159
  [Intel XE#8175]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8175
  [Intel XE#8265]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8265
  [Intel XE#8303]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8303
  [Intel XE#836]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/836
  [Intel XE#8364]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8364
  [Intel XE#8369]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8369
  [Intel XE#8370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8370
  [Intel XE#8374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8374
  [Intel XE#8378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8378
  [Intel XE#8395]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8395
  [Intel XE#8396]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8396
  [Intel XE#8397]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8397
  [Intel XE#8399]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8399
  [Intel XE#8586]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8586
  [Intel XE#8608]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8608
  [Intel XE#8618]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8618
  [Intel XE#8695]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8695
  [Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
  [Intel XE#8815]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8815
  [Intel XE#8854]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8854
  [Intel XE#8866]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8866
  [Intel XE#8868]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8868
  [Intel XE#9093]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9093
  [Intel XE#9096]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9096
  [Intel XE#9144]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9144
  [Intel XE#9271]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9271
  [Intel XE#9272]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9272
  [Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
  [Intel XE#977]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/977


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

  * IGT: IGT_9098 -> IGTPW_15849
  * Linux: xe-5752-2bd2887dd30703cc280a0ca64919784240f66e2d -> xe-5755-0fb8d1900f1a6b9d21aadbfa5f784979b950bcf8

  IGTPW_15849: 15849
  IGT_9098: 9098
  xe-5752-2bd2887dd30703cc280a0ca64919784240f66e2d: 2bd2887dd30703cc280a0ca64919784240f66e2d
  xe-5755-0fb8d1900f1a6b9d21aadbfa5f784979b950bcf8: 0fb8d1900f1a6b9d21aadbfa5f784979b950bcf8

== Logs ==

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

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

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

* ✗ i915.CI.Full: failure for Expand kms_dp_link_training coverage
  2026-09-16  4:47 [PATCH i-g-t 00/13] Expand kms_dp_link_training coverage Kunal Joshi
                   ` (15 preceding siblings ...)
  2026-09-16  6:15 ` ✗ Xe.CI.FULL: failure " Patchwork
@ 2026-09-16 11:59 ` Patchwork
  16 siblings, 0 replies; 31+ messages in thread
From: Patchwork @ 2026-09-16 11:59 UTC (permalink / raw)
  To: Kunal Joshi; +Cc: igt-dev

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

== Series Details ==

Series: Expand kms_dp_link_training coverage
URL   : https://patchwork.freedesktop.org/series/174224/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_19152_full -> IGTPW_15849_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with IGTPW_15849_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_15849_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.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/index.html

Participating hosts (10 -> 10)
------------------------------

  No changes in participating hosts

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in IGTPW_15849_full:

### IGT changes ###

#### Possible regressions ####

  * {igt@kms_dp_link_training@non-uhbr-mst-tbtalt-train} (NEW):
    - shard-tglu-1:       NOTRUN -> [SKIP][1] +1 other test skip
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_dp_link_training@non-uhbr-mst-tbtalt-train.html
    - shard-dg1:          NOTRUN -> [SKIP][2] +5 other tests skip
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-12/igt@kms_dp_link_training@non-uhbr-mst-tbtalt-train.html

  * {igt@kms_dp_link_training@non-uhbr-sst-tbtalt-train} (NEW):
    - shard-tglu:         NOTRUN -> [SKIP][3] +6 other tests skip
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-10/igt@kms_dp_link_training@non-uhbr-sst-tbtalt-train.html

  * {igt@kms_dp_link_training@uhbr-mst-tbtalt-train} (NEW):
    - shard-dg2:          NOTRUN -> [SKIP][4] +7 other tests skip
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-6/igt@kms_dp_link_training@uhbr-mst-tbtalt-train.html
    - shard-rkl:          NOTRUN -> [SKIP][5] +6 other tests skip
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-1/igt@kms_dp_link_training@uhbr-mst-tbtalt-train.html

  * {igt@kms_dp_link_training@uhbr-sst-direct-train} (NEW):
    - shard-mtlp:         NOTRUN -> [SKIP][6] +6 other tests skip
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-6/igt@kms_dp_link_training@uhbr-sst-direct-train.html

  
#### Warnings ####

  * igt@kms_dp_link_training@non-uhbr-mst:
    - shard-dg2:          [SKIP][7] ([i915#13749]) -> [SKIP][8] +1 other test skip
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-dg2-7/igt@kms_dp_link_training@non-uhbr-mst.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-1/igt@kms_dp_link_training@non-uhbr-mst.html
    - shard-rkl:          [SKIP][9] ([i915#13749]) -> [SKIP][10] +1 other test skip
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-2/igt@kms_dp_link_training@non-uhbr-mst.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@kms_dp_link_training@non-uhbr-mst.html
    - shard-dg1:          [SKIP][11] ([i915#13749]) -> [SKIP][12]
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-dg1-12/igt@kms_dp_link_training@non-uhbr-mst.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-16/igt@kms_dp_link_training@non-uhbr-mst.html
    - shard-tglu:         [SKIP][13] ([i915#13749]) -> [SKIP][14]
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-tglu-7/igt@kms_dp_link_training@non-uhbr-mst.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-3/igt@kms_dp_link_training@non-uhbr-mst.html

  * igt@kms_dp_link_training@uhbr-mst:
    - shard-mtlp:         [SKIP][15] ([i915#13749]) -> [SKIP][16] +1 other test skip
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-5/igt@kms_dp_link_training@uhbr-mst.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-3/igt@kms_dp_link_training@uhbr-mst.html

  * igt@kms_dp_link_training@uhbr-sst:
    - shard-mtlp:         [SKIP][17] ([i915#17031]) -> [SKIP][18]
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_dp_link_training@uhbr-sst.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-6/igt@kms_dp_link_training@uhbr-sst.html

  * igt@kms_rotation_crc@multiplane-rotation:
    - shard-glk:          [INCOMPLETE][19] ([i915#15492] / [i915#16184]) -> [DMESG-FAIL][20]
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-glk6/igt@kms_rotation_crc@multiplane-rotation.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk3/igt@kms_rotation_crc@multiplane-rotation.html

  
New tests
---------

  New tests have been introduced between CI_DRM_19152_full and IGTPW_15849_full:

### New IGT tests (8) ###

  * igt@kms_dp_link_training@non-uhbr-mst-direct-train:
    - Statuses : 5 skip(s)
    - Exec time: [0.01, 0.03] s

  * igt@kms_dp_link_training@non-uhbr-mst-tbtalt-train:
    - Statuses : 6 skip(s)
    - Exec time: [0.01, 0.05] s

  * igt@kms_dp_link_training@non-uhbr-sst-direct-train:
    - Statuses : 6 skip(s)
    - Exec time: [0.01, 0.03] s

  * igt@kms_dp_link_training@non-uhbr-sst-tbtalt-train:
    - Statuses : 7 skip(s)
    - Exec time: [0.0, 0.04] s

  * igt@kms_dp_link_training@uhbr-mst-direct-train:
    - Statuses : 7 skip(s)
    - Exec time: [0.01, 0.05] s

  * igt@kms_dp_link_training@uhbr-mst-tbtalt-train:
    - Statuses : 6 skip(s)
    - Exec time: [0.01, 0.05] s

  * igt@kms_dp_link_training@uhbr-sst-direct-train:
    - Statuses : 5 skip(s)
    - Exec time: [0.01, 0.04] s

  * igt@kms_dp_link_training@uhbr-sst-tbtalt-train:
    - Statuses : 7 skip(s)
    - Exec time: [0.01, 0.04] s

  

Known issues
------------

  Here are the changes found in IGTPW_15849_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@api_intel_bb@blit-reloc-purge-cache:
    - shard-dg1:          NOTRUN -> [SKIP][21] ([i915#8411])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-14/igt@api_intel_bb@blit-reloc-purge-cache.html

  * igt@api_intel_bb@object-reloc-purge-cache:
    - shard-rkl:          NOTRUN -> [SKIP][22] ([i915#8411])
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-8/igt@api_intel_bb@object-reloc-purge-cache.html

  * igt@device_reset@cold-reset-bound:
    - shard-tglu-1:       NOTRUN -> [SKIP][23] ([i915#11078])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@device_reset@cold-reset-bound.html
    - shard-dg1:          NOTRUN -> [SKIP][24] ([i915#11078])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-17/igt@device_reset@cold-reset-bound.html

  * igt@gem_bad_reloc@negative-reloc-bltcopy:
    - shard-mtlp:         NOTRUN -> [SKIP][25] ([i915#3281]) +2 other tests skip
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-5/igt@gem_bad_reloc@negative-reloc-bltcopy.html

  * igt@gem_ccs@block-multicopy-compressed:
    - shard-mtlp:         NOTRUN -> [SKIP][26] ([i915#9323])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-6/igt@gem_ccs@block-multicopy-compressed.html

  * igt@gem_ccs@ctrl-surf-copy-new-ctx:
    - shard-dg1:          NOTRUN -> [SKIP][27] ([i915#9323])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-18/igt@gem_ccs@ctrl-surf-copy-new-ctx.html

  * igt@gem_ccs@large-ctrl-surf-copy:
    - shard-tglu-1:       NOTRUN -> [SKIP][28] ([i915#13008])
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@gem_ccs@large-ctrl-surf-copy.html

  * igt@gem_ccs@suspend-resume:
    - shard-tglu:         NOTRUN -> [SKIP][29] ([i915#9323])
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-3/igt@gem_ccs@suspend-resume.html

  * igt@gem_close_race@multigpu-basic-process:
    - shard-tglu:         NOTRUN -> [SKIP][30] ([i915#7697])
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-9/igt@gem_close_race@multigpu-basic-process.html
    - shard-dg1:          NOTRUN -> [SKIP][31] ([i915#7697])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-18/igt@gem_close_race@multigpu-basic-process.html

  * igt@gem_close_race@multigpu-basic-threads:
    - shard-tglu-1:       NOTRUN -> [SKIP][32] ([i915#7697])
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@gem_close_race@multigpu-basic-threads.html

  * igt@gem_ctx_persistence@heartbeat-close:
    - shard-dg1:          NOTRUN -> [SKIP][33] ([i915#8555])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-14/igt@gem_ctx_persistence@heartbeat-close.html

  * igt@gem_ctx_persistence@legacy-engines-mixed-process:
    - shard-snb:          NOTRUN -> [SKIP][34] ([i915#1099]) +4 other tests skip
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-snb1/igt@gem_ctx_persistence@legacy-engines-mixed-process.html

  * igt@gem_ctx_sseu@mmap-args:
    - shard-tglu-1:       NOTRUN -> [SKIP][35] ([i915#280])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@gem_ctx_sseu@mmap-args.html

  * igt@gem_eio@unwedge-stress:
    - shard-snb:          NOTRUN -> [FAIL][36] ([i915#8898]) +1 other test fail
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-snb1/igt@gem_eio@unwedge-stress.html

  * igt@gem_eio@unwedge-stress@blt:
    - shard-mtlp:         NOTRUN -> [SKIP][37] ([i915#15314])
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-4/igt@gem_eio@unwedge-stress@blt.html

  * igt@gem_exec_balancer@invalid-bonds:
    - shard-dg1:          NOTRUN -> [SKIP][38] ([i915#4036])
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-19/igt@gem_exec_balancer@invalid-bonds.html

  * igt@gem_exec_balancer@parallel:
    - shard-tglu-1:       NOTRUN -> [SKIP][39] ([i915#4525]) +1 other test skip
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@gem_exec_balancer@parallel.html

  * igt@gem_exec_balancer@parallel-balancer:
    - shard-tglu:         NOTRUN -> [SKIP][40] ([i915#4525]) +2 other tests skip
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-4/igt@gem_exec_balancer@parallel-balancer.html

  * igt@gem_exec_balancer@parallel-out-fence:
    - shard-rkl:          NOTRUN -> [SKIP][41] ([i915#14544] / [i915#4525])
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@gem_exec_balancer@parallel-out-fence.html

  * igt@gem_exec_capture@capture-invisible@lmem0:
    - shard-dg1:          NOTRUN -> [SKIP][42] ([i915#6334]) +2 other tests skip
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-12/igt@gem_exec_capture@capture-invisible@lmem0.html

  * igt@gem_exec_capture@capture-recoverable:
    - shard-tglu:         NOTRUN -> [SKIP][43] ([i915#6344])
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-5/igt@gem_exec_capture@capture-recoverable.html

  * igt@gem_exec_capture@capture@vecs0-lmem0:
    - shard-dg1:          NOTRUN -> [FAIL][44] ([i915#16904]) +2 other tests fail
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-12/igt@gem_exec_capture@capture@vecs0-lmem0.html

  * igt@gem_exec_flush@basic-uc-set-default:
    - shard-dg1:          NOTRUN -> [SKIP][45] ([i915#3539])
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-14/igt@gem_exec_flush@basic-uc-set-default.html

  * igt@gem_exec_flush@basic-wb-pro-default:
    - shard-dg1:          NOTRUN -> [SKIP][46] ([i915#3539] / [i915#4852]) +2 other tests skip
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-17/igt@gem_exec_flush@basic-wb-pro-default.html

  * igt@gem_exec_reloc@basic-gtt-wc-active:
    - shard-dg2:          NOTRUN -> [SKIP][47] ([i915#3281])
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-5/igt@gem_exec_reloc@basic-gtt-wc-active.html
    - shard-dg1:          NOTRUN -> [SKIP][48] ([i915#3281]) +4 other tests skip
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-12/igt@gem_exec_reloc@basic-gtt-wc-active.html

  * igt@gem_exec_reloc@basic-gtt-wc-noreloc:
    - shard-rkl:          NOTRUN -> [SKIP][49] ([i915#3281]) +12 other tests skip
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-1/igt@gem_exec_reloc@basic-gtt-wc-noreloc.html

  * igt@gem_exec_schedule@semaphore-power:
    - shard-dg1:          NOTRUN -> [SKIP][50] ([i915#4812]) +1 other test skip
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-12/igt@gem_exec_schedule@semaphore-power.html

  * igt@gem_fence_thrash@bo-write-verify-none:
    - shard-dg1:          NOTRUN -> [SKIP][51] ([i915#4860]) +1 other test skip
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-16/igt@gem_fence_thrash@bo-write-verify-none.html

  * igt@gem_fenced_exec_thrash@no-spare-fences-interruptible:
    - shard-mtlp:         NOTRUN -> [SKIP][52] ([i915#4860])
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-5/igt@gem_fenced_exec_thrash@no-spare-fences-interruptible.html

  * igt@gem_lmem_evict@dontneed-evict-race:
    - shard-rkl:          NOTRUN -> [SKIP][53] ([i915#4613] / [i915#7582])
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-5/igt@gem_lmem_evict@dontneed-evict-race.html
    - shard-tglu-1:       NOTRUN -> [SKIP][54] ([i915#4613] / [i915#7582])
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@gem_lmem_evict@dontneed-evict-race.html

  * igt@gem_lmem_swapping@basic:
    - shard-rkl:          NOTRUN -> [SKIP][55] ([i915#14544] / [i915#4613])
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@gem_lmem_swapping@basic.html

  * igt@gem_lmem_swapping@heavy-multi:
    - shard-tglu-1:       NOTRUN -> [SKIP][56] ([i915#4613])
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@gem_lmem_swapping@heavy-multi.html
    - shard-mtlp:         NOTRUN -> [SKIP][57] ([i915#4613])
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-3/igt@gem_lmem_swapping@heavy-multi.html

  * igt@gem_lmem_swapping@parallel-random-verify-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][58] ([i915#4613]) +3 other tests skip
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@gem_lmem_swapping@parallel-random-verify-ccs.html

  * igt@gem_lmem_swapping@verify-ccs:
    - shard-glk:          NOTRUN -> [SKIP][59] ([i915#4613]) +4 other tests skip
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk5/igt@gem_lmem_swapping@verify-ccs.html

  * igt@gem_lmem_swapping@verify-random-ccs:
    - shard-tglu:         NOTRUN -> [SKIP][60] ([i915#4613]) +2 other tests skip
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-8/igt@gem_lmem_swapping@verify-random-ccs.html

  * igt@gem_mmap_gtt@fault-concurrent:
    - shard-dg1:          NOTRUN -> [SKIP][61] ([i915#4077]) +13 other tests skip
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-18/igt@gem_mmap_gtt@fault-concurrent.html

  * igt@gem_mmap_wc@coherency:
    - shard-dg1:          NOTRUN -> [SKIP][62] ([i915#4083])
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-18/igt@gem_mmap_wc@coherency.html

  * igt@gem_mmap_wc@write-read:
    - shard-mtlp:         NOTRUN -> [SKIP][63] ([i915#4083])
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-8/igt@gem_mmap_wc@write-read.html

  * igt@gem_partial_pwrite_pread@writes-after-reads:
    - shard-rkl:          NOTRUN -> [SKIP][64] ([i915#3282]) +5 other tests skip
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-1/igt@gem_partial_pwrite_pread@writes-after-reads.html
    - shard-mtlp:         NOTRUN -> [SKIP][65] ([i915#3282]) +1 other test skip
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-3/igt@gem_partial_pwrite_pread@writes-after-reads.html

  * igt@gem_partial_pwrite_pread@writes-after-reads-snoop:
    - shard-dg2:          NOTRUN -> [SKIP][66] ([i915#3282]) +1 other test skip
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-6/igt@gem_partial_pwrite_pread@writes-after-reads-snoop.html

  * igt@gem_partial_pwrite_pread@writes-after-reads-uncached:
    - shard-dg1:          NOTRUN -> [SKIP][67] ([i915#3282]) +5 other tests skip
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-12/igt@gem_partial_pwrite_pread@writes-after-reads-uncached.html

  * igt@gem_pread@exhaustion:
    - shard-tglu:         NOTRUN -> [WARN][68] ([i915#2658]) +1 other test warn
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-4/igt@gem_pread@exhaustion.html

  * igt@gem_pwrite@basic-exhaustion:
    - shard-glk:          NOTRUN -> [WARN][69] ([i915#14702] / [i915#2658])
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk3/igt@gem_pwrite@basic-exhaustion.html

  * igt@gem_pxp@create-regular-context-1:
    - shard-dg2:          NOTRUN -> [SKIP][70] ([i915#4270])
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-8/igt@gem_pxp@create-regular-context-1.html

  * igt@gem_pxp@create-regular-context-2:
    - shard-dg1:          NOTRUN -> [SKIP][71] ([i915#4270]) +4 other tests skip
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-19/igt@gem_pxp@create-regular-context-2.html

  * igt@gem_pxp@hw-rejects-pxp-context:
    - shard-tglu:         NOTRUN -> [SKIP][72] ([i915#13398])
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-4/igt@gem_pxp@hw-rejects-pxp-context.html

  * igt@gem_render_copy@y-tiled-ccs-to-y-tiled:
    - shard-dg2:          NOTRUN -> [SKIP][73] ([i915#5190] / [i915#8428]) +1 other test skip
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-3/igt@gem_render_copy@y-tiled-ccs-to-y-tiled.html

  * igt@gem_render_copy@yf-tiled-ccs-to-linear:
    - shard-mtlp:         NOTRUN -> [SKIP][74] ([i915#8428]) +1 other test skip
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-3/igt@gem_render_copy@yf-tiled-ccs-to-linear.html

  * igt@gem_set_tiling_vs_blt@tiled-to-tiled:
    - shard-dg1:          NOTRUN -> [SKIP][75] ([i915#4079])
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-18/igt@gem_set_tiling_vs_blt@tiled-to-tiled.html

  * igt@gem_softpin@noreloc-s3:
    - shard-rkl:          NOTRUN -> [INCOMPLETE][76] ([i915#13809] / [i915#16226])
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-7/igt@gem_softpin@noreloc-s3.html

  * igt@gem_tiled_blits@basic:
    - shard-dg2:          NOTRUN -> [SKIP][77] ([i915#4077]) +3 other tests skip
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-7/igt@gem_tiled_blits@basic.html

  * igt@gem_userptr_blits@coherency-unsync:
    - shard-rkl:          NOTRUN -> [SKIP][78] ([i915#3297]) +2 other tests skip
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-1/igt@gem_userptr_blits@coherency-unsync.html

  * igt@gem_userptr_blits@create-destroy-unsync:
    - shard-tglu:         NOTRUN -> [SKIP][79] ([i915#3297]) +2 other tests skip
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-3/igt@gem_userptr_blits@create-destroy-unsync.html

  * igt@gem_userptr_blits@map-fixed-invalidate:
    - shard-dg1:          NOTRUN -> [SKIP][80] ([i915#3297] / [i915#4880])
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-19/igt@gem_userptr_blits@map-fixed-invalidate.html

  * igt@gem_userptr_blits@unsync-unmap-after-close:
    - shard-tglu-1:       NOTRUN -> [SKIP][81] ([i915#3297]) +1 other test skip
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@gem_userptr_blits@unsync-unmap-after-close.html
    - shard-dg1:          NOTRUN -> [SKIP][82] ([i915#3297]) +1 other test skip
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-12/igt@gem_userptr_blits@unsync-unmap-after-close.html

  * igt@gem_workarounds@suspend-resume:
    - shard-glk11:        NOTRUN -> [INCOMPLETE][83] ([i915#13356] / [i915#14586])
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk11/igt@gem_workarounds@suspend-resume.html

  * igt@gen9_exec_parse@allowed-all:
    - shard-tglu-1:       NOTRUN -> [SKIP][84] ([i915#2527] / [i915#2856]) +2 other tests skip
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@gen9_exec_parse@allowed-all.html

  * igt@gen9_exec_parse@bb-chained:
    - shard-mtlp:         NOTRUN -> [SKIP][85] ([i915#2856])
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-3/igt@gen9_exec_parse@bb-chained.html

  * igt@gen9_exec_parse@bb-large:
    - shard-dg1:          NOTRUN -> [SKIP][86] ([i915#2527]) +2 other tests skip
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-15/igt@gen9_exec_parse@bb-large.html
    - shard-rkl:          NOTRUN -> [SKIP][87] ([i915#14544] / [i915#2527])
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@gen9_exec_parse@bb-large.html

  * igt@gen9_exec_parse@bb-start-far:
    - shard-rkl:          NOTRUN -> [SKIP][88] ([i915#2527]) +3 other tests skip
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-2/igt@gen9_exec_parse@bb-start-far.html

  * igt@gen9_exec_parse@valid-registers:
    - shard-tglu:         NOTRUN -> [SKIP][89] ([i915#2527] / [i915#2856]) +2 other tests skip
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-8/igt@gen9_exec_parse@valid-registers.html

  * igt@gpu_buddy@gpu_buddy:
    - shard-dg1:          NOTRUN -> [SKIP][90] ([i915#15678])
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-17/igt@gpu_buddy@gpu_buddy.html

  * igt@i915_drm_fdinfo@all-busy-idle-check-all:
    - shard-dg1:          NOTRUN -> [SKIP][91] ([i915#14123])
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-16/igt@i915_drm_fdinfo@all-busy-idle-check-all.html

  * igt@i915_drm_fdinfo@virtual-busy-hang-all:
    - shard-dg1:          NOTRUN -> [SKIP][92] ([i915#14118])
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-19/igt@i915_drm_fdinfo@virtual-busy-hang-all.html

  * igt@i915_module_load@fault-injection@intel_connector_register:
    - shard-snb:          NOTRUN -> [ABORT][93] ([i915#15342]) +1 other test abort
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-snb1/igt@i915_module_load@fault-injection@intel_connector_register.html
    - shard-glk:          NOTRUN -> [ABORT][94] ([i915#15342]) +1 other test abort
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk2/igt@i915_module_load@fault-injection@intel_connector_register.html

  * igt@i915_module_load@fault-injection@intel_guc_ct_init:
    - shard-snb:          NOTRUN -> [SKIP][95] +473 other tests skip
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-snb1/igt@i915_module_load@fault-injection@intel_guc_ct_init.html

  * igt@i915_module_load@resize-bar:
    - shard-rkl:          NOTRUN -> [SKIP][96] ([i915#6412])
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-7/igt@i915_module_load@resize-bar.html
    - shard-dg1:          NOTRUN -> [SKIP][97] ([i915#7178])
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-16/igt@i915_module_load@resize-bar.html

  * igt@i915_pm_freq_api@freq-basic-api:
    - shard-tglu-1:       NOTRUN -> [SKIP][98] ([i915#8399])
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@i915_pm_freq_api@freq-basic-api.html

  * igt@i915_pm_freq_mult@media-freq@gt0:
    - shard-tglu:         NOTRUN -> [SKIP][99] ([i915#6590]) +1 other test skip
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-5/igt@i915_pm_freq_mult@media-freq@gt0.html

  * igt@i915_pm_rc6_residency@rc6-idle:
    - shard-tglu:         NOTRUN -> [SKIP][100] ([i915#14498])
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-8/igt@i915_pm_rc6_residency@rc6-idle.html

  * igt@i915_pm_rpm@system-suspend:
    - shard-glk:          NOTRUN -> [INCOMPLETE][101] ([i915#13356])
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk2/igt@i915_pm_rpm@system-suspend.html
    - shard-rkl:          NOTRUN -> [INCOMPLETE][102] ([i915#13356])
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@i915_pm_rpm@system-suspend.html

  * igt@i915_pm_rps@thresholds:
    - shard-dg2:          NOTRUN -> [SKIP][103] ([i915#11681])
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-8/igt@i915_pm_rps@thresholds.html
    - shard-dg1:          NOTRUN -> [SKIP][104] ([i915#11681]) +1 other test skip
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-12/igt@i915_pm_rps@thresholds.html
    - shard-mtlp:         NOTRUN -> [SKIP][105] ([i915#11681])
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-6/igt@i915_pm_rps@thresholds.html

  * igt@i915_pm_rps@waitboost:
    - shard-mtlp:         [PASS][106] -> [FAIL][107] ([i915#15365])
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-4/igt@i915_pm_rps@waitboost.html
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-1/igt@i915_pm_rps@waitboost.html

  * igt@i915_pm_sseu@full-enable:
    - shard-mtlp:         NOTRUN -> [SKIP][108] ([i915#8437])
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-5/igt@i915_pm_sseu@full-enable.html

  * igt@i915_power@sanity:
    - shard-rkl:          NOTRUN -> [SKIP][109] ([i915#7984])
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-1/igt@i915_power@sanity.html

  * igt@i915_query@query-topology-known-pci-ids:
    - shard-dg1:          NOTRUN -> [SKIP][110] ([i915#16109])
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-14/igt@i915_query@query-topology-known-pci-ids.html
    - shard-tglu:         NOTRUN -> [SKIP][111] ([i915#16109])
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-8/igt@i915_query@query-topology-known-pci-ids.html

  * igt@i915_query@query-topology-unsupported:
    - shard-rkl:          NOTRUN -> [SKIP][112] ([i915#16079])
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-8/igt@i915_query@query-topology-unsupported.html
    - shard-tglu-1:       NOTRUN -> [SKIP][113] ([i915#16079])
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@i915_query@query-topology-unsupported.html

  * igt@i915_query@test-query-geometry-subslices:
    - shard-dg1:          NOTRUN -> [SKIP][114] ([i915#5723])
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-19/igt@i915_query@test-query-geometry-subslices.html

  * igt@i915_suspend@fence-restore-tiled2untiled:
    - shard-glk:          NOTRUN -> [INCOMPLETE][115] ([i915#16182] / [i915#4817])
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk5/igt@i915_suspend@fence-restore-tiled2untiled.html
    - shard-rkl:          [PASS][116] -> [INCOMPLETE][117] ([i915#4817])
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-8/igt@i915_suspend@fence-restore-tiled2untiled.html
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@i915_suspend@fence-restore-tiled2untiled.html

  * igt@kms_addfb_basic@invalid-smem-bo-on-discrete:
    - shard-tglu:         NOTRUN -> [SKIP][118] ([i915#12454] / [i915#12712])
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-4/igt@kms_addfb_basic@invalid-smem-bo-on-discrete.html

  * igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-a-hdmi-a-1:
    - shard-glk:          [PASS][119] -> [FAIL][120] ([i915#14888]) +4 other tests fail
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-glk6/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-a-hdmi-a-1.html
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk3/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-a-hdmi-a-1.html

  * igt@kms_async_flips@async-flip-with-page-flip-events-linear-atomic:
    - shard-dg1:          [PASS][121] -> [DMESG-WARN][122] ([i915#4423])
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-dg1-17/igt@kms_async_flips@async-flip-with-page-flip-events-linear-atomic.html
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-12/igt@kms_async_flips@async-flip-with-page-flip-events-linear-atomic.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels:
    - shard-tglu:         NOTRUN -> [SKIP][123] ([i915#1769] / [i915#3555])
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-3/igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels.html

  * igt@kms_big_fb@4-tiled-64bpp-rotate-0:
    - shard-tglu:         NOTRUN -> [SKIP][124] ([i915#5286]) +6 other tests skip
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-4/igt@kms_big_fb@4-tiled-64bpp-rotate-0.html

  * igt@kms_big_fb@4-tiled-64bpp-rotate-180:
    - shard-mtlp:         [PASS][125] -> [FAIL][126] ([i915#15733] / [i915#5138])
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-4/igt@kms_big_fb@4-tiled-64bpp-rotate-180.html
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-6/igt@kms_big_fb@4-tiled-64bpp-rotate-180.html

  * igt@kms_big_fb@4-tiled-8bpp-rotate-180:
    - shard-tglu-1:       NOTRUN -> [SKIP][127] ([i915#5286]) +2 other tests skip
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/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-hflip:
    - shard-rkl:          NOTRUN -> [SKIP][128] ([i915#5286]) +4 other tests skip
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip.html
    - shard-dg1:          NOTRUN -> [SKIP][129] ([i915#4538] / [i915#5286]) +5 other tests skip
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-16/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip.html

  * igt@kms_big_fb@linear-32bpp-rotate-90:
    - shard-dg1:          NOTRUN -> [SKIP][130] ([i915#3638]) +3 other tests skip
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-16/igt@kms_big_fb@linear-32bpp-rotate-90.html

  * igt@kms_big_fb@linear-64bpp-rotate-90:
    - shard-rkl:          NOTRUN -> [SKIP][131] ([i915#3638]) +4 other tests skip
   [131]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-2/igt@kms_big_fb@linear-64bpp-rotate-90.html

  * igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-180-hflip:
    - shard-dg1:          NOTRUN -> [SKIP][132] ([i915#3828])
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-19/igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-180-hflip.html

  * igt@kms_big_fb@x-tiled-64bpp-rotate-90:
    - shard-mtlp:         NOTRUN -> [SKIP][133] +2 other tests skip
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-4/igt@kms_big_fb@x-tiled-64bpp-rotate-90.html
    - shard-dg2:          NOTRUN -> [SKIP][134] +1 other test skip
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-1/igt@kms_big_fb@x-tiled-64bpp-rotate-90.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180:
    - shard-dg1:          NOTRUN -> [SKIP][135] ([i915#4538]) +6 other tests skip
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-16/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-lnl-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][136] ([i915#12313])
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-2/igt@kms_ccs@bad-rotation-90-4-tiled-lnl-ccs.html
    - shard-dg1:          NOTRUN -> [SKIP][137] ([i915#12313])
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-18/igt@kms_ccs@bad-rotation-90-4-tiled-lnl-ccs.html

  * igt@kms_ccs@bad-rotation-90-y-tiled-gen12-mc-ccs@pipe-c-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][138] ([i915#10307] / [i915#6095]) +73 other tests skip
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-4/igt@kms_ccs@bad-rotation-90-y-tiled-gen12-mc-ccs@pipe-c-hdmi-a-1.html

  * igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-mc-ccs@pipe-c-hdmi-a-2:
    - shard-glk:          NOTRUN -> [SKIP][139] +642 other tests skip
   [139]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk4/igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-mc-ccs@pipe-c-hdmi-a-2.html

  * igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][140] ([i915#14544] / [i915#6095]) +3 other tests skip
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2.html

  * igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-rc-ccs@pipe-c-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][141] ([i915#14098] / [i915#14544] / [i915#6095]) +2 other tests skip
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-rc-ccs@pipe-c-hdmi-a-2.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-dg2-rc-ccs@pipe-b-hdmi-a-1:
    - shard-tglu:         NOTRUN -> [SKIP][142] ([i915#6095]) +84 other tests skip
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-9/igt@kms_ccs@crc-primary-basic-4-tiled-dg2-rc-ccs@pipe-b-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-1:
    - shard-tglu-1:       NOTRUN -> [SKIP][143] ([i915#6095]) +54 other tests skip
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs:
    - shard-dg1:          NOTRUN -> [SKIP][144] ([i915#12805])
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-15/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs-cc@pipe-c-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][145] ([i915#14098] / [i915#6095]) +41 other tests skip
   [145]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs-cc@pipe-c-hdmi-a-2.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][146] ([i915#12805])
   [146]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-5/igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs@pipe-a-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][147] ([i915#6095]) +11 other tests skip
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-6/igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs@pipe-a-hdmi-a-3.html

  * igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs@pipe-a-hdmi-a-1:
    - shard-dg1:          NOTRUN -> [SKIP][148] ([i915#6095]) +185 other tests skip
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-14/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs@pipe-a-hdmi-a-1.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-lnl-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][149] ([i915#12313] / [i915#14544])
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/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-rc-ccs-cc@pipe-d-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][150] ([i915#10307] / [i915#10434] / [i915#6095]) +2 other tests skip
   [150]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-4/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs-cc@pipe-d-hdmi-a-1.html

  * igt@kms_ccs@crc-sprite-planes-basic-y-tiled-gen12-rc-ccs@pipe-c-hdmi-a-2:
    - shard-glk10:        NOTRUN -> [SKIP][151] +22 other tests skip
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk10/igt@kms_ccs@crc-sprite-planes-basic-y-tiled-gen12-rc-ccs@pipe-c-hdmi-a-2.html

  * igt@kms_ccs@missing-ccs-buffer-y-tiled-ccs@pipe-c-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][152] ([i915#6095]) +34 other tests skip
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-4/igt@kms_ccs@missing-ccs-buffer-y-tiled-ccs@pipe-c-edp-1.html

  * igt@kms_ccs@random-ccs-data-y-tiled-ccs@pipe-b-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][153] ([i915#6095]) +61 other tests skip
   [153]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-8/igt@kms_ccs@random-ccs-data-y-tiled-ccs@pipe-b-hdmi-a-1.html

  * igt@kms_cdclk@mode-transition:
    - shard-dg1:          NOTRUN -> [SKIP][154] ([i915#3742]) +1 other test skip
   [154]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-17/igt@kms_cdclk@mode-transition.html

  * igt@kms_chamelium_audio@hdmi-audio-after-suspend:
    - shard-mtlp:         NOTRUN -> [SKIP][155] ([i915#11151])
   [155]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-1/igt@kms_chamelium_audio@hdmi-audio-after-suspend.html

  * igt@kms_chamelium_audio@hdmi-audio-edid:
    - shard-tglu-1:       NOTRUN -> [SKIP][156] ([i915#11151] / [i915#7828]) +5 other tests skip
   [156]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_chamelium_audio@hdmi-audio-edid.html

  * igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4-lut1d:
    - shard-dg2:          NOTRUN -> [SKIP][157] ([i915#16471])
   [157]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-1/igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4-lut1d.html
    - shard-rkl:          NOTRUN -> [SKIP][158] ([i915#16471]) +1 other test skip
   [158]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4-lut1d.html
    - shard-dg1:          NOTRUN -> [SKIP][159] ([i915#16471]) +3 other tests skip
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-16/igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4-lut1d.html
    - shard-tglu:         NOTRUN -> [SKIP][160] ([i915#16471]) +2 other tests skip
   [160]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-3/igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4-lut1d.html
    - shard-mtlp:         NOTRUN -> [SKIP][161] ([i915#16464] / [i915#16471])
   [161]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-4/igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4-lut1d.html

  * igt@kms_chamelium_color_pipeline@plane-lut1d-post-ctm3x4:
    - shard-rkl:          NOTRUN -> [SKIP][162] ([i915#14544] / [i915#16471]) +1 other test skip
   [162]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_chamelium_color_pipeline@plane-lut1d-post-ctm3x4.html

  * igt@kms_chamelium_frames@dp-crc-single:
    - shard-dg1:          NOTRUN -> [SKIP][163] ([i915#11151] / [i915#7828]) +9 other tests skip
   [163]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-14/igt@kms_chamelium_frames@dp-crc-single.html

  * igt@kms_chamelium_hpd@vga-hpd-enable-disable-mode:
    - shard-mtlp:         NOTRUN -> [SKIP][164] ([i915#11151] / [i915#7828]) +2 other tests skip
   [164]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-6/igt@kms_chamelium_hpd@vga-hpd-enable-disable-mode.html
    - shard-dg2:          NOTRUN -> [SKIP][165] ([i915#11151] / [i915#7828]) +1 other test skip
   [165]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-8/igt@kms_chamelium_hpd@vga-hpd-enable-disable-mode.html

  * igt@kms_chamelium_hpd@vga-hpd-for-each-pipe:
    - shard-rkl:          NOTRUN -> [SKIP][166] ([i915#11151] / [i915#7828]) +9 other tests skip
   [166]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@kms_chamelium_hpd@vga-hpd-for-each-pipe.html

  * igt@kms_chamelium_hpd@vga-hpd-without-ddc:
    - shard-tglu:         NOTRUN -> [SKIP][167] ([i915#11151] / [i915#7828]) +10 other tests skip
   [167]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-3/igt@kms_chamelium_hpd@vga-hpd-without-ddc.html

  * igt@kms_color@deep-color:
    - shard-rkl:          [PASS][168] -> [SKIP][169] ([i915#12655] / [i915#3555])
   [168]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_color@deep-color.html
   [169]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@kms_color@deep-color.html

  * igt@kms_color_pipeline@plane-ctm3x4-lut1d@pipe-b-plane-4:
    - shard-mtlp:         NOTRUN -> [SKIP][170] ([i915#16990]) +7 other tests skip
   [170]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-5/igt@kms_color_pipeline@plane-ctm3x4-lut1d@pipe-b-plane-4.html

  * igt@kms_color_pipeline@plane-lut1d-lut1d@pipe-b-plane-4:
    - shard-dg1:          NOTRUN -> [SKIP][171] ([i915#16990]) +31 other tests skip
   [171]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-18/igt@kms_color_pipeline@plane-lut1d-lut1d@pipe-b-plane-4.html

  * igt@kms_color_pipeline@plane-lut1d-post-ctm3x4@pipe-c-plane-4:
    - shard-rkl:          NOTRUN -> [SKIP][172] ([i915#16990]) +11 other tests skip
   [172]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-7/igt@kms_color_pipeline@plane-lut1d-post-ctm3x4@pipe-c-plane-4.html

  * igt@kms_content_protection@dp-mst-lic-type-0-hdcp14:
    - shard-rkl:          NOTRUN -> [SKIP][173] ([i915#15330]) +1 other test skip
   [173]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-2/igt@kms_content_protection@dp-mst-lic-type-0-hdcp14.html

  * igt@kms_content_protection@dp-mst-type-0-suspend-resume:
    - shard-dg1:          NOTRUN -> [SKIP][174] ([i915#15330])
   [174]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-19/igt@kms_content_protection@dp-mst-type-0-suspend-resume.html

  * igt@kms_content_protection@mei-interface:
    - shard-rkl:          NOTRUN -> [SKIP][175] ([i915#15865]) +3 other tests skip
   [175]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-8/igt@kms_content_protection@mei-interface.html
    - shard-tglu:         NOTRUN -> [SKIP][176] ([i915#15865]) +1 other test skip
   [176]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-8/igt@kms_content_protection@mei-interface.html

  * igt@kms_content_protection@type1:
    - shard-tglu-1:       NOTRUN -> [SKIP][177] ([i915#15865]) +1 other test skip
   [177]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_content_protection@type1.html
    - shard-dg1:          NOTRUN -> [SKIP][178] ([i915#15865]) +2 other tests skip
   [178]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-17/igt@kms_content_protection@type1.html

  * igt@kms_cursor_crc@cursor-onscreen-128x42:
    - shard-rkl:          [PASS][179] -> [FAIL][180] ([i915#13566]) +1 other test fail
   [179]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-4/igt@kms_cursor_crc@cursor-onscreen-128x42.html
   [180]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-7/igt@kms_cursor_crc@cursor-onscreen-128x42.html
    - shard-tglu:         NOTRUN -> [FAIL][181] ([i915#13566]) +1 other test fail
   [181]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-3/igt@kms_cursor_crc@cursor-onscreen-128x42.html

  * igt@kms_cursor_crc@cursor-onscreen-32x32:
    - shard-rkl:          NOTRUN -> [SKIP][182] ([i915#3555]) +1 other test skip
   [182]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-7/igt@kms_cursor_crc@cursor-onscreen-32x32.html

  * igt@kms_cursor_crc@cursor-random-512x170:
    - shard-tglu-1:       NOTRUN -> [SKIP][183] ([i915#13049]) +1 other test skip
   [183]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_cursor_crc@cursor-random-512x170.html

  * igt@kms_cursor_crc@cursor-random-512x512:
    - shard-mtlp:         NOTRUN -> [SKIP][184] ([i915#13049])
   [184]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-3/igt@kms_cursor_crc@cursor-random-512x512.html

  * igt@kms_cursor_crc@cursor-sliding-512x170:
    - shard-tglu:         NOTRUN -> [SKIP][185] ([i915#13049])
   [185]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-2/igt@kms_cursor_crc@cursor-sliding-512x170.html

  * igt@kms_cursor_crc@cursor-sliding-512x512:
    - shard-dg1:          NOTRUN -> [SKIP][186] ([i915#13049]) +1 other test skip
   [186]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-18/igt@kms_cursor_crc@cursor-sliding-512x512.html

  * igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy:
    - shard-rkl:          NOTRUN -> [SKIP][187] +90 other tests skip
   [187]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-2/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html

  * igt@kms_cursor_legacy@cursorb-vs-flipa-atomic:
    - shard-dg2:          NOTRUN -> [SKIP][188] ([i915#13046] / [i915#5354])
   [188]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-5/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic.html
    - shard-dg1:          NOTRUN -> [SKIP][189] ([i915#4423])
   [189]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-12/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic.html
    - shard-mtlp:         NOTRUN -> [SKIP][190] ([i915#9809])
   [190]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-5/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size:
    - shard-glk:          NOTRUN -> [FAIL][191] ([i915#15804])
   [191]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk8/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html

  * igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot:
    - shard-rkl:          NOTRUN -> [SKIP][192] ([i915#9067])
   [192]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-5/igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions:
    - shard-dg2:          NOTRUN -> [SKIP][193] ([i915#4103])
   [193]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-7/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html
    - shard-rkl:          NOTRUN -> [SKIP][194] ([i915#4103])
   [194]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-2/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html
    - shard-dg1:          NOTRUN -> [SKIP][195] ([i915#4103])
   [195]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-18/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html
    - shard-tglu:         NOTRUN -> [SKIP][196] ([i915#4103])
   [196]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-5/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html
    - shard-mtlp:         NOTRUN -> [SKIP][197] ([i915#16119] / [i915#4213])
   [197]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-1/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle:
    - shard-tglu-1:       NOTRUN -> [SKIP][198] ([i915#4103])
   [198]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html

  * igt@kms_display_modes@extended-mode-basic:
    - shard-dg1:          NOTRUN -> [SKIP][199] ([i915#13691])
   [199]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-19/igt@kms_display_modes@extended-mode-basic.html

  * igt@kms_dp_aux_dev@basic:
    - shard-dg1:          NOTRUN -> [SKIP][200] ([i915#1257])
   [200]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-15/igt@kms_dp_aux_dev@basic.html
    - shard-tglu:         NOTRUN -> [SKIP][201] ([i915#1257])
   [201]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-8/igt@kms_dp_aux_dev@basic.html

  * {igt@kms_dp_link_training@non-uhbr-sst-tbtalt-train} (NEW):
    - shard-mtlp:         NOTRUN -> [SKIP][202] ([i915#17031]) +3 other tests skip
   [202]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_dp_link_training@non-uhbr-sst-tbtalt-train.html

  * igt@kms_dp_link_training@uhbr-mst:
    - shard-rkl:          NOTRUN -> [SKIP][203] ([i915#13748])
   [203]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-3/igt@kms_dp_link_training@uhbr-mst.html
    - shard-tglu-1:       NOTRUN -> [SKIP][204] ([i915#13748])
   [204]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_dp_link_training@uhbr-mst.html

  * igt@kms_dp_linktrain_fallback@dp-fallback:
    - shard-mtlp:         NOTRUN -> [SKIP][205] ([i915#16867])
   [205]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-2/igt@kms_dp_linktrain_fallback@dp-fallback.html

  * igt@kms_dsc@dsc-fractional-bpp:
    - shard-dg1:          NOTRUN -> [SKIP][206] ([i915#16361]) +3 other tests skip
   [206]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-19/igt@kms_dsc@dsc-fractional-bpp.html
    - shard-tglu:         NOTRUN -> [SKIP][207] ([i915#16361]) +4 other tests skip
   [207]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-4/igt@kms_dsc@dsc-fractional-bpp.html

  * igt@kms_dsc@dsc-fractional-bpp-bigjoiner:
    - shard-mtlp:         NOTRUN -> [SKIP][208] ([i915#16361]) +1 other test skip
   [208]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-8/igt@kms_dsc@dsc-fractional-bpp-bigjoiner.html

  * igt@kms_dsc@dsc-fractional-bpp-with-bpc-bigjoiner:
    - shard-dg2:          NOTRUN -> [SKIP][209] ([i915#16361])
   [209]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-3/igt@kms_dsc@dsc-fractional-bpp-with-bpc-bigjoiner.html
    - shard-rkl:          NOTRUN -> [SKIP][210] ([i915#14544] / [i915#16361])
   [210]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_dsc@dsc-fractional-bpp-with-bpc-bigjoiner.html

  * igt@kms_dsc@dsc-with-bpc-formats-ultrajoiner:
    - shard-tglu-1:       NOTRUN -> [SKIP][211] ([i915#16361])
   [211]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_dsc@dsc-with-bpc-formats-ultrajoiner.html

  * igt@kms_dsc@dsc-with-formats-ultrajoiner:
    - shard-rkl:          NOTRUN -> [SKIP][212] ([i915#16361]) +2 other tests skip
   [212]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-8/igt@kms_dsc@dsc-with-formats-ultrajoiner.html

  * igt@kms_fbcon_fbt@fbc-suspend:
    - shard-rkl:          [PASS][213] -> [INCOMPLETE][214] ([i915#9878])
   [213]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-8/igt@kms_fbcon_fbt@fbc-suspend.html
   [214]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-3/igt@kms_fbcon_fbt@fbc-suspend.html

  * igt@kms_feature_discovery@display-2x:
    - shard-tglu-1:       NOTRUN -> [SKIP][215] ([i915#16081]) +1 other test skip
   [215]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_feature_discovery@display-2x.html

  * igt@kms_feature_discovery@display-3x:
    - shard-dg1:          NOTRUN -> [SKIP][216] ([i915#16081])
   [216]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-14/igt@kms_feature_discovery@display-3x.html

  * igt@kms_feature_discovery@dsc:
    - shard-dg2:          NOTRUN -> [SKIP][217] ([i915#16600])
   [217]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-6/igt@kms_feature_discovery@dsc.html
    - shard-rkl:          NOTRUN -> [SKIP][218] ([i915#16600])
   [218]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-7/igt@kms_feature_discovery@dsc.html

  * igt@kms_feature_discovery@hdr:
    - shard-mtlp:         NOTRUN -> [SKIP][219] ([i915#16600]) +1 other test skip
   [219]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-4/igt@kms_feature_discovery@hdr.html

  * igt@kms_feature_discovery@psr1:
    - shard-rkl:          NOTRUN -> [SKIP][220] ([i915#14544] / [i915#658])
   [220]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_feature_discovery@psr1.html
    - shard-dg1:          NOTRUN -> [SKIP][221] ([i915#658])
   [221]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-15/igt@kms_feature_discovery@psr1.html

  * igt@kms_feature_discovery@vrr:
    - shard-dg1:          NOTRUN -> [SKIP][222] ([i915#16600]) +1 other test skip
   [222]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-16/igt@kms_feature_discovery@vrr.html
    - shard-tglu:         NOTRUN -> [SKIP][223] ([i915#16600])
   [223]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-3/igt@kms_feature_discovery@vrr.html

  * igt@kms_flip@2x-flip-vs-dpms:
    - shard-mtlp:         NOTRUN -> [SKIP][224] ([i915#3637] / [i915#9934]) +1 other test skip
   [224]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-1/igt@kms_flip@2x-flip-vs-dpms.html

  * igt@kms_flip@2x-flip-vs-dpms-on-nop:
    - shard-tglu:         NOTRUN -> [SKIP][225] ([i915#9934])
   [225]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-7/igt@kms_flip@2x-flip-vs-dpms-on-nop.html

  * igt@kms_flip@2x-flip-vs-panning-vs-hang:
    - shard-dg1:          NOTRUN -> [SKIP][226] ([i915#9934]) +4 other tests skip
   [226]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-17/igt@kms_flip@2x-flip-vs-panning-vs-hang.html

  * igt@kms_flip@2x-flip-vs-suspend:
    - shard-glk:          NOTRUN -> [INCOMPLETE][227] ([i915#12745] / [i915#4839] / [i915#6113])
   [227]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk2/igt@kms_flip@2x-flip-vs-suspend.html

  * igt@kms_flip@2x-flip-vs-suspend@ac-hdmi-a1-hdmi-a2:
    - shard-glk:          NOTRUN -> [INCOMPLETE][228] ([i915#12745])
   [228]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk2/igt@kms_flip@2x-flip-vs-suspend@ac-hdmi-a1-hdmi-a2.html

  * igt@kms_flip@2x-nonexisting-fb-interruptible:
    - shard-rkl:          NOTRUN -> [SKIP][229] ([i915#9934]) +2 other tests skip
   [229]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-8/igt@kms_flip@2x-nonexisting-fb-interruptible.html

  * igt@kms_flip@2x-plain-flip:
    - shard-tglu:         NOTRUN -> [SKIP][230] ([i915#3637] / [i915#9934]) +4 other tests skip
   [230]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-4/igt@kms_flip@2x-plain-flip.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@a-hdmi-a1:
    - shard-glk:          [PASS][231] -> [INCOMPLETE][232] ([i915#12314]) +1 other test incomplete
   [231]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-glk5/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-hdmi-a1.html
   [232]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk5/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-hdmi-a1.html

  * igt@kms_flip@flip-vs-expired-vblank@b-hdmi-a1:
    - shard-glk:          [PASS][233] -> [FAIL][234] ([i915#13027]) +3 other tests fail
   [233]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-glk1/igt@kms_flip@flip-vs-expired-vblank@b-hdmi-a1.html
   [234]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk4/igt@kms_flip@flip-vs-expired-vblank@b-hdmi-a1.html

  * igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-downscaling@pipe-a-default-mode:
    - shard-mtlp:         NOTRUN -> [SKIP][235] ([i915#3555] / [i915#8810] / [i915#8813]) +1 other test skip
   [235]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-2/igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-downscaling@pipe-a-default-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-downscaling:
    - shard-tglu:         NOTRUN -> [SKIP][236] ([i915#15643]) +4 other tests skip
   [236]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-9/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-downscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling:
    - shard-dg1:          NOTRUN -> [SKIP][237] ([i915#15643]) +4 other tests skip
   [237]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-19/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-upscaling:
    - shard-rkl:          NOTRUN -> [SKIP][238] ([i915#15643]) +4 other tests skip
   [238]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-2/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling:
    - shard-tglu-1:       NOTRUN -> [SKIP][239] ([i915#15643]) +4 other tests skip
   [239]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling.html

  * igt@kms_force_connector_basic@force-load-detect:
    - shard-glk11:        NOTRUN -> [SKIP][240] +65 other tests skip
   [240]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk11/igt@kms_force_connector_basic@force-load-detect.html

  * igt@kms_frontbuffer_tracking@fbc-1p-offscreen-pri-shrfb-draw-mmap-gtt:
    - shard-dg1:          NOTRUN -> [SKIP][241] ([i915#15104] / [i915#15990])
   [241]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-19/igt@kms_frontbuffer_tracking@fbc-1p-offscreen-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-pwrite:
    - shard-mtlp:         NOTRUN -> [SKIP][242] ([i915#15991] / [i915#1825]) +8 other tests skip
   [242]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-1/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbc-suspend:
    - shard-rkl:          [PASS][243] -> [INCOMPLETE][244] ([i915#10056])
   [243]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-2/igt@kms_frontbuffer_tracking@fbc-suspend.html
   [244]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@kms_frontbuffer_tracking@fbc-suspend.html

  * igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-cur-indfb-onoff:
    - shard-rkl:          [PASS][245] -> [SKIP][246] ([i915#15989]) +10 other tests skip
   [245]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-cur-indfb-onoff.html
   [246]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-8/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-cur-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-pri-indfb-draw-mmap-cpu:
    - shard-tglu:         NOTRUN -> [SKIP][247] ([i915#15989]) +21 other tests skip
   [247]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-3/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-pri-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbchdr-2p-scndscrn-pri-indfb-draw-mmap-gtt:
    - shard-mtlp:         NOTRUN -> [SKIP][248] ([i915#15990]) +4 other tests skip
   [248]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-3/igt@kms_frontbuffer_tracking@fbchdr-2p-scndscrn-pri-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbchdr-2p-scndscrn-spr-indfb-draw-mmap-gtt:
    - shard-tglu:         NOTRUN -> [SKIP][249] +103 other tests skip
   [249]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-5/igt@kms_frontbuffer_tracking@fbchdr-2p-scndscrn-spr-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-pri-indfb-multidraw:
    - shard-dg1:          NOTRUN -> [SKIP][250] +76 other tests skip
   [250]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-19/igt@kms_frontbuffer_tracking@fbcpsr-2p-pri-indfb-multidraw.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-cpu:
    - shard-rkl:          NOTRUN -> [SKIP][251] ([i915#14544]) +4 other tests skip
   [251]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-wc:
    - shard-dg2:          NOTRUN -> [SKIP][252] ([i915#15990] / [i915#8708]) +1 other test skip
   [252]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-1/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-shrfb-pgflip-blt:
    - shard-dg2:          NOTRUN -> [SKIP][253] ([i915#15991] / [i915#5354]) +4 other tests skip
   [253]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-7/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-shrfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-tiling-linear:
    - shard-mtlp:         [PASS][254] -> [SKIP][255] ([i915#17031]) +49 other tests skip
   [254]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-3/igt@kms_frontbuffer_tracking@fbcpsr-tiling-linear.html
   [255]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_frontbuffer_tracking@fbcpsr-tiling-linear.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-primscrn-shrfb-plflip-blt:
    - shard-tglu-1:       NOTRUN -> [SKIP][256] +69 other tests skip
   [256]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-primscrn-shrfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-indfb-plflip-blt:
    - shard-mtlp:         NOTRUN -> [SKIP][257] ([i915#15991]) +13 other tests skip
   [257]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-2/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-indfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-pri-indfb-draw-mmap-cpu:
    - shard-dg2:          NOTRUN -> [SKIP][258] ([i915#15991]) +7 other tests skip
   [258]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-8/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-pri-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-shrfb-scaledprimary:
    - shard-tglu:         NOTRUN -> [SKIP][259] ([i915#15102]) +37 other tests skip
   [259]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-9/igt@kms_frontbuffer_tracking@fbcpsrhdr-shrfb-scaledprimary.html

  * igt@kms_frontbuffer_tracking@hdr-1p-primscrn-cur-indfb-draw-blt:
    - shard-tglu-1:       NOTRUN -> [SKIP][260] ([i915#15989]) +11 other tests skip
   [260]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-cur-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@hdr-1p-primscrn-pri-shrfb-draw-mmap-cpu:
    - shard-rkl:          NOTRUN -> [SKIP][261] ([i915#15989]) +12 other tests skip
   [261]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-7/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-pri-shrfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@hdr-1p-primscrn-shrfb-plflip-blt:
    - shard-dg1:          NOTRUN -> [SKIP][262] ([i915#15989]) +16 other tests skip
   [262]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-18/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-shrfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@hdr-1p-primscrn-spr-indfb-fullscreen:
    - shard-glk:          [PASS][263] -> [SKIP][264] +11 other tests skip
   [263]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-glk8/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-spr-indfb-fullscreen.html
   [264]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk2/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-spr-indfb-fullscreen.html

  * igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-indfb-draw-mmap-cpu:
    - shard-dg1:          NOTRUN -> [SKIP][265] ([i915#15102]) +41 other tests skip
   [265]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-18/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-wc:
    - shard-dg1:          NOTRUN -> [SKIP][266] ([i915#15990] / [i915#8708]) +20 other tests skip
   [266]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-14/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-shrfb-msflip-blt:
    - shard-rkl:          NOTRUN -> [SKIP][267] ([i915#15102]) +34 other tests skip
   [267]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-3/igt@kms_frontbuffer_tracking@psr-1p-primscrn-shrfb-msflip-blt.html
    - shard-tglu-1:       NOTRUN -> [SKIP][268] ([i915#15102]) +34 other tests skip
   [268]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_frontbuffer_tracking@psr-1p-primscrn-shrfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-draw-mmap-wc:
    - shard-rkl:          NOTRUN -> [SKIP][269] ([i915#1825]) +6 other tests skip
   [269]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-2/igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-gtt:
    - shard-mtlp:         NOTRUN -> [SKIP][270] ([i915#15990] / [i915#8708]) +1 other test skip
   [270]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-5/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@psrhdr-1p-offscreen-pri-indfb-draw-mmap-cpu:
    - shard-rkl:          NOTRUN -> [SKIP][271] ([i915#14544] / [i915#15102]) +1 other test skip
   [271]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_frontbuffer_tracking@psrhdr-1p-offscreen-pri-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@psrhdr-1p-offscreen-pri-shrfb-draw-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][272] ([i915#15990]) +2 other tests skip
   [272]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-4/igt@kms_frontbuffer_tracking@psrhdr-1p-offscreen-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-cur-indfb-draw-mmap-wc:
    - shard-dg1:          NOTRUN -> [SKIP][273] ([i915#15990]) +18 other tests skip
   [273]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-18/igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-indfb-pgflip-blt:
    - shard-mtlp:         NOTRUN -> [SKIP][274] ([i915#15989]) +5 other tests skip
   [274]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-2/igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-indfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@psrhdr-suspend:
    - shard-dg2:          NOTRUN -> [SKIP][275] ([i915#15102]) +3 other tests skip
   [275]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-5/igt@kms_frontbuffer_tracking@psrhdr-suspend.html

  * igt@kms_hdmi_inject@inject-audio:
    - shard-mtlp:         [PASS][276] -> [SKIP][277] ([i915#15725])
   [276]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-4/igt@kms_hdmi_inject@inject-audio.html
   [277]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-1/igt@kms_hdmi_inject@inject-audio.html

  * igt@kms_hdr@invalid-metadata-sizes:
    - shard-rkl:          NOTRUN -> [SKIP][278] ([i915#16644] / [i915#3555] / [i915#8228]) +1 other test skip
   [278]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-8/igt@kms_hdr@invalid-metadata-sizes.html
    - shard-tglu-1:       NOTRUN -> [SKIP][279] ([i915#3555] / [i915#8228])
   [279]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_hdr@invalid-metadata-sizes.html

  * igt@kms_hdr@static-toggle:
    - shard-rkl:          [PASS][280] -> [SKIP][281] ([i915#16644] / [i915#3555] / [i915#8228])
   [280]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_hdr@static-toggle.html
   [281]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@kms_hdr@static-toggle.html
    - shard-tglu:         NOTRUN -> [SKIP][282] ([i915#3555] / [i915#8228]) +2 other tests skip
   [282]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-5/igt@kms_hdr@static-toggle.html

  * igt@kms_hdr@static-toggle-suspend:
    - shard-dg1:          NOTRUN -> [SKIP][283] ([i915#3555] / [i915#8228]) +1 other test skip
   [283]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-17/igt@kms_hdr@static-toggle-suspend.html

  * igt@kms_hdr@static-toggle-suspend@pipe-a-hdmi-a-2-xrgb16161616f:
    - shard-rkl:          NOTRUN -> [ABORT][284] ([i915#15132])
   [284]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-1/igt@kms_hdr@static-toggle-suspend@pipe-a-hdmi-a-2-xrgb16161616f.html

  * igt@kms_joiner@basic-big-joiner:
    - shard-rkl:          NOTRUN -> [SKIP][285] ([i915#15460]) +1 other test skip
   [285]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@kms_joiner@basic-big-joiner.html

  * igt@kms_joiner@basic-force-big-joiner:
    - shard-tglu:         NOTRUN -> [SKIP][286] ([i915#15459])
   [286]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-9/igt@kms_joiner@basic-force-big-joiner.html

  * igt@kms_joiner@basic-force-ultra-joiner:
    - shard-rkl:          NOTRUN -> [SKIP][287] ([i915#15458])
   [287]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@kms_joiner@basic-force-ultra-joiner.html

  * igt@kms_joiner@basic-max-non-joiner:
    - shard-mtlp:         NOTRUN -> [SKIP][288] ([i915#13688])
   [288]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-2/igt@kms_joiner@basic-max-non-joiner.html

  * igt@kms_joiner@invalid-modeset-big-joiner:
    - shard-tglu-1:       NOTRUN -> [SKIP][289] ([i915#15460])
   [289]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_joiner@invalid-modeset-big-joiner.html

  * igt@kms_mst@mst-suspend-read-crc:
    - shard-tglu:         NOTRUN -> [SKIP][290] ([i915#16451])
   [290]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-5/igt@kms_mst@mst-suspend-read-crc.html

  * igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
    - shard-mtlp:         NOTRUN -> [SKIP][291] ([i915#15815])
   [291]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-8/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html

  * igt@kms_panel_fitting@legacy:
    - shard-tglu-1:       NOTRUN -> [SKIP][292] ([i915#6301])
   [292]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_panel_fitting@legacy.html

  * igt@kms_plane@pixel-format-4-tiled-mtl-mc-ccs-modifier:
    - shard-dg1:          NOTRUN -> [SKIP][293] ([i915#15709]) +4 other tests skip
   [293]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-12/igt@kms_plane@pixel-format-4-tiled-mtl-mc-ccs-modifier.html

  * igt@kms_plane@pixel-format-x-tiled-modifier@pipe-b-plane-5:
    - shard-rkl:          NOTRUN -> [SKIP][294] ([i915#16386]) +3 other tests skip
   [294]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-2/igt@kms_plane@pixel-format-x-tiled-modifier@pipe-b-plane-5.html

  * igt@kms_plane@pixel-format-y-tiled-ccs-modifier:
    - shard-tglu:         NOTRUN -> [SKIP][295] ([i915#15709]) +2 other tests skip
   [295]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-3/igt@kms_plane@pixel-format-y-tiled-ccs-modifier.html

  * igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-modifier:
    - shard-mtlp:         NOTRUN -> [SKIP][296] ([i915#15709]) +1 other test skip
   [296]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-8/igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-modifier.html

  * igt@kms_plane@pixel-format-yf-tiled-ccs-modifier:
    - shard-rkl:          NOTRUN -> [SKIP][297] ([i915#15709]) +1 other test skip
   [297]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@kms_plane@pixel-format-yf-tiled-ccs-modifier.html

  * igt@kms_plane@pixel-format-yf-tiled-modifier-source-clamping:
    - shard-tglu-1:       NOTRUN -> [SKIP][298] ([i915#15709]) +4 other tests skip
   [298]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_plane@pixel-format-yf-tiled-modifier-source-clamping.html

  * igt@kms_plane@planar-pixel-format-settings@nv12-tile4-src-y:
    - shard-mtlp:         NOTRUN -> [SKIP][299] ([i915#16112])
   [299]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-5/igt@kms_plane@planar-pixel-format-settings@nv12-tile4-src-y.html

  * igt@kms_plane_alpha_blend@alpha-basic:
    - shard-glk:          NOTRUN -> [FAIL][300] ([i915#12178])
   [300]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk2/igt@kms_plane_alpha_blend@alpha-basic.html

  * igt@kms_plane_alpha_blend@alpha-basic@pipe-a-hdmi-a-1:
    - shard-glk:          NOTRUN -> [FAIL][301] ([i915#7862]) +1 other test fail
   [301]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk2/igt@kms_plane_alpha_blend@alpha-basic@pipe-a-hdmi-a-1.html

  * igt@kms_plane_lowres@tiling-yf:
    - shard-dg1:          NOTRUN -> [SKIP][302] ([i915#3555]) +6 other tests skip
   [302]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-19/igt@kms_plane_lowres@tiling-yf.html

  * igt@kms_plane_multiple@2x-tiling-4:
    - shard-rkl:          NOTRUN -> [SKIP][303] ([i915#13958])
   [303]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-2/igt@kms_plane_multiple@2x-tiling-4.html
    - shard-tglu:         NOTRUN -> [SKIP][304] ([i915#13958])
   [304]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-9/igt@kms_plane_multiple@2x-tiling-4.html

  * igt@kms_plane_multiple@2x-tiling-y:
    - shard-tglu-1:       NOTRUN -> [SKIP][305] ([i915#13958]) +1 other test skip
   [305]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_plane_multiple@2x-tiling-y.html
    - shard-mtlp:         NOTRUN -> [SKIP][306] ([i915#13958])
   [306]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-5/igt@kms_plane_multiple@2x-tiling-y.html

  * igt@kms_plane_multiple@tiling-yf:
    - shard-rkl:          NOTRUN -> [SKIP][307] ([i915#14259])
   [307]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-7/igt@kms_plane_multiple@tiling-yf.html

  * igt@kms_plane_scaling@intel-max-src-size:
    - shard-tglu-1:       NOTRUN -> [SKIP][308] ([i915#6953])
   [308]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_plane_scaling@intel-max-src-size.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-75-with-rotation@pipe-a:
    - shard-tglu:         NOTRUN -> [SKIP][309] ([i915#15329]) +4 other tests skip
   [309]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-2/igt@kms_plane_scaling@plane-downscale-factor-0-75-with-rotation@pipe-a.html

  * igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b:
    - shard-tglu-1:       NOTRUN -> [SKIP][310] ([i915#15329]) +4 other tests skip
   [310]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b.html

  * igt@kms_plane_scaling@plane-upscale-factor-0-25-with-rotation@pipe-d:
    - shard-dg1:          NOTRUN -> [SKIP][311] ([i915#15329]) +14 other tests skip
   [311]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-14/igt@kms_plane_scaling@plane-upscale-factor-0-25-with-rotation@pipe-d.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-75@pipe-a:
    - shard-mtlp:         NOTRUN -> [SKIP][312] ([i915#15329]) +3 other tests skip
   [312]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-4/igt@kms_plane_scaling@planes-downscale-factor-0-75@pipe-a.html

  * igt@kms_pm_backlight@bad-brightness:
    - shard-mtlp:         [PASS][313] -> [INCOMPLETE][314] ([i915#17032])
   [313]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-8/igt@kms_pm_backlight@bad-brightness.html
   [314]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_pm_backlight@bad-brightness.html

  * igt@kms_pm_backlight@basic-brightness:
    - shard-tglu:         NOTRUN -> [SKIP][315] ([i915#12343] / [i915#9812])
   [315]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-3/igt@kms_pm_backlight@basic-brightness.html

  * igt@kms_pm_backlight@brightness-with-dpms:
    - shard-tglu-1:       NOTRUN -> [SKIP][316] ([i915#12343])
   [316]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_pm_backlight@brightness-with-dpms.html

  * igt@kms_pm_backlight@fade-with-dpms:
    - shard-rkl:          NOTRUN -> [SKIP][317] ([i915#12343] / [i915#5354])
   [317]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@kms_pm_backlight@fade-with-dpms.html
    - shard-dg1:          NOTRUN -> [SKIP][318] ([i915#12343] / [i915#5354])
   [318]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-16/igt@kms_pm_backlight@fade-with-dpms.html

  * igt@kms_pm_dc@dc5-psr-suspend-resume:
    - shard-rkl:          NOTRUN -> [SKIP][319] ([i915#16914])
   [319]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-1/igt@kms_pm_dc@dc5-psr-suspend-resume.html

  * igt@kms_pm_dc@dc5-retention-flops:
    - shard-rkl:          NOTRUN -> [SKIP][320] ([i915#3828])
   [320]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-7/igt@kms_pm_dc@dc5-retention-flops.html

  * igt@kms_pm_dc@dc6-psr:
    - shard-tglu-1:       NOTRUN -> [SKIP][321] ([i915#15948])
   [321]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_pm_dc@dc6-psr.html

  * igt@kms_pm_dc@dc9-dpms:
    - shard-tglu-1:       NOTRUN -> [SKIP][322] ([i915#15739])
   [322]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_pm_dc@dc9-dpms.html

  * igt@kms_pm_lpsp@screens-disabled:
    - shard-rkl:          NOTRUN -> [SKIP][323] ([i915#8430])
   [323]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@kms_pm_lpsp@screens-disabled.html

  * igt@kms_pm_rpm@cursor-dpms:
    - shard-mtlp:         NOTRUN -> [SKIP][324] ([i915#4077]) +6 other tests skip
   [324]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-1/igt@kms_pm_rpm@cursor-dpms.html

  * igt@kms_pm_rpm@dpms-non-lpsp:
    - shard-tglu:         NOTRUN -> [SKIP][325] ([i915#15073])
   [325]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-5/igt@kms_pm_rpm@dpms-non-lpsp.html

  * igt@kms_pm_rpm@modeset-lpsp:
    - shard-dg1:          [PASS][326] -> [SKIP][327] ([i915#15073])
   [326]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-dg1-15/igt@kms_pm_rpm@modeset-lpsp.html
   [327]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-16/igt@kms_pm_rpm@modeset-lpsp.html

  * igt@kms_pm_rpm@modeset-lpsp-stress:
    - shard-dg2:          [PASS][328] -> [SKIP][329] ([i915#15073]) +1 other test skip
   [328]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-dg2-4/igt@kms_pm_rpm@modeset-lpsp-stress.html
   [329]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-3/igt@kms_pm_rpm@modeset-lpsp-stress.html

  * igt@kms_pm_rpm@modeset-lpsp-stress-no-wait:
    - shard-dg1:          NOTRUN -> [SKIP][330] ([i915#15073])
   [330]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-12/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html

  * igt@kms_pm_rpm@modeset-non-lpsp:
    - shard-rkl:          [PASS][331] -> [SKIP][332] ([i915#15073]) +1 other test skip
   [331]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-7/igt@kms_pm_rpm@modeset-non-lpsp.html
   [332]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-2/igt@kms_pm_rpm@modeset-non-lpsp.html

  * igt@kms_pm_rpm@package-g7:
    - shard-dg1:          NOTRUN -> [SKIP][333] ([i915#15403])
   [333]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-16/igt@kms_pm_rpm@package-g7.html

  * igt@kms_pm_rpm@system-suspend-idle:
    - shard-rkl:          [PASS][334] -> [INCOMPLETE][335] ([i915#14419])
   [334]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-4/igt@kms_pm_rpm@system-suspend-idle.html
   [335]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_pm_rpm@system-suspend-idle.html

  * igt@kms_pm_rpm@system-suspend-modeset:
    - shard-glk:          [PASS][336] -> [INCOMPLETE][337] ([i915#10553])
   [336]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-glk1/igt@kms_pm_rpm@system-suspend-modeset.html
   [337]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk8/igt@kms_pm_rpm@system-suspend-modeset.html

  * igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-fully-sf:
    - shard-rkl:          NOTRUN -> [SKIP][338] ([i915#11520] / [i915#14544])
   [338]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-fully-sf:
    - shard-tglu:         NOTRUN -> [SKIP][339] ([i915#11520]) +9 other tests skip
   [339]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-3/igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-fully-sf.html
    - shard-glk11:        NOTRUN -> [SKIP][340] ([i915#11520]) +1 other test skip
   [340]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk11/igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf:
    - shard-snb:          NOTRUN -> [SKIP][341] ([i915#11520]) +8 other tests skip
   [341]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-snb1/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf.html

  * igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf@pipe-b-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][342] ([i915#9808]) +2 other tests skip
   [342]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-3/igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf@pipe-b-edp-1.html

  * igt@kms_psr2_sf@pr-cursor-plane-move-continuous-exceed-sf:
    - shard-mtlp:         NOTRUN -> [SKIP][343] ([i915#12316]) +1 other test skip
   [343]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-1/igt@kms_psr2_sf@pr-cursor-plane-move-continuous-exceed-sf.html
    - shard-dg2:          NOTRUN -> [SKIP][344] ([i915#11520])
   [344]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-7/igt@kms_psr2_sf@pr-cursor-plane-move-continuous-exceed-sf.html

  * igt@kms_psr2_sf@pr-overlay-plane-update-continuous-sf:
    - shard-glk10:        NOTRUN -> [SKIP][345] ([i915#11520])
   [345]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk10/igt@kms_psr2_sf@pr-overlay-plane-update-continuous-sf.html

  * igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-sf:
    - shard-dg1:          NOTRUN -> [SKIP][346] ([i915#11520]) +9 other tests skip
   [346]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-17/igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-sf.html

  * igt@kms_psr2_sf@psr2-overlay-plane-update-sf-dmg-area:
    - shard-rkl:          NOTRUN -> [SKIP][347] ([i915#11520]) +7 other tests skip
   [347]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-5/igt@kms_psr2_sf@psr2-overlay-plane-update-sf-dmg-area.html
    - shard-tglu-1:       NOTRUN -> [SKIP][348] ([i915#11520]) +5 other tests skip
   [348]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_psr2_sf@psr2-overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr2_sf@psr2-overlay-primary-update-sf-dmg-area:
    - shard-glk:          NOTRUN -> [SKIP][349] ([i915#11520]) +14 other tests skip
   [349]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk3/igt@kms_psr2_sf@psr2-overlay-primary-update-sf-dmg-area.html

  * igt@kms_psr2_su@page_flip-p010:
    - shard-tglu:         NOTRUN -> [SKIP][350] ([i915#9683])
   [350]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-9/igt@kms_psr2_su@page_flip-p010.html

  * igt@kms_psr@fbc-pr-dpms:
    - shard-dg2:          NOTRUN -> [SKIP][351] ([i915#1072] / [i915#9732]) +1 other test skip
   [351]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-5/igt@kms_psr@fbc-pr-dpms.html

  * igt@kms_psr@fbc-pr-sprite-plane-onoff:
    - shard-rkl:          NOTRUN -> [SKIP][352] ([i915#1072] / [i915#9732]) +13 other tests skip
   [352]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-8/igt@kms_psr@fbc-pr-sprite-plane-onoff.html

  * igt@kms_psr@fbc-pr-sprite-render:
    - shard-dg1:          NOTRUN -> [SKIP][353] ([i915#1072] / [i915#9732]) +19 other tests skip
   [353]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-19/igt@kms_psr@fbc-pr-sprite-render.html

  * igt@kms_psr@fbc-psr2-dpms:
    - shard-mtlp:         NOTRUN -> [SKIP][354] ([i915#9688]) +10 other tests skip
   [354]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-1/igt@kms_psr@fbc-psr2-dpms.html

  * igt@kms_psr@fbc-psr2-primary-page-flip:
    - shard-rkl:          NOTRUN -> [SKIP][355] ([i915#1072] / [i915#14544] / [i915#9732])
   [355]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_psr@fbc-psr2-primary-page-flip.html

  * igt@kms_psr@psr-basic:
    - shard-tglu:         NOTRUN -> [SKIP][356] ([i915#9732]) +20 other tests skip
   [356]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-9/igt@kms_psr@psr-basic.html

  * igt@kms_psr@psr-cursor-mmap-cpu:
    - shard-tglu-1:       NOTRUN -> [SKIP][357] ([i915#9732]) +15 other tests skip
   [357]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_psr@psr-cursor-mmap-cpu.html

  * igt@kms_psr_stress_test@flip-primary-invalidate-overlay:
    - shard-rkl:          NOTRUN -> [SKIP][358] ([i915#15949])
   [358]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html

  * igt@kms_psr_stress_test@invalidate-primary-flip-overlay:
    - shard-dg1:          NOTRUN -> [SKIP][359] ([i915#15949])
   [359]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-18/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html
    - shard-tglu:         NOTRUN -> [SKIP][360] ([i915#15949])
   [360]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-9/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html

  * igt@kms_rotation_crc@primary-4-tiled-reflect-x-0:
    - shard-rkl:          NOTRUN -> [SKIP][361] ([i915#5289])
   [361]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-1/igt@kms_rotation_crc@primary-4-tiled-reflect-x-0.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180:
    - shard-dg1:          NOTRUN -> [SKIP][362] ([i915#5289])
   [362]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-17/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html
    - shard-tglu:         NOTRUN -> [SKIP][363] ([i915#5289])
   [363]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-3/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90:
    - shard-mtlp:         NOTRUN -> [SKIP][364] ([i915#12755] / [i915#15867])
   [364]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-3/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90.html

  * igt@kms_rotation_crc@sprite-rotation-270:
    - shard-dg1:          NOTRUN -> [DMESG-WARN][365] ([i915#4423])
   [365]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-12/igt@kms_rotation_crc@sprite-rotation-270.html

  * igt@kms_scaling_modes@scaling-mode-none:
    - shard-dg2:          NOTRUN -> [SKIP][366] ([i915#3555])
   [366]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-8/igt@kms_scaling_modes@scaling-mode-none.html
    - shard-tglu:         NOTRUN -> [SKIP][367] ([i915#3555]) +3 other tests skip
   [367]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-8/igt@kms_scaling_modes@scaling-mode-none.html

  * igt@kms_setmode@basic:
    - shard-snb:          NOTRUN -> [FAIL][368] ([i915#15106]) +6 other tests fail
   [368]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-snb1/igt@kms_setmode@basic.html

  * igt@kms_setmode@clone-exclusive-crtc:
    - shard-tglu-1:       NOTRUN -> [SKIP][369] ([i915#3555])
   [369]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_setmode@clone-exclusive-crtc.html
    - shard-mtlp:         NOTRUN -> [SKIP][370] ([i915#3555] / [i915#8809])
   [370]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-3/igt@kms_setmode@clone-exclusive-crtc.html

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-tglu-1:       NOTRUN -> [SKIP][371] ([i915#8623])
   [371]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_tiled_display@basic-test-pattern.html

  * igt@kms_vblank@ts-continuation-dpms-suspend:
    - shard-rkl:          [PASS][372] -> [INCOMPLETE][373] ([i915#12276])
   [372]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-8/igt@kms_vblank@ts-continuation-dpms-suspend.html
   [373]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-3/igt@kms_vblank@ts-continuation-dpms-suspend.html
    - shard-glk10:        NOTRUN -> [INCOMPLETE][374] ([i915#12276]) +1 other test incomplete
   [374]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk10/igt@kms_vblank@ts-continuation-dpms-suspend.html

  * igt@kms_vblank@ts-continuation-dpms-suspend@pipe-c-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [INCOMPLETE][375] ([i915#12276])
   [375]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-3/igt@kms_vblank@ts-continuation-dpms-suspend@pipe-c-hdmi-a-2.html

  * igt@kms_vrr@lobf:
    - shard-tglu-1:       NOTRUN -> [SKIP][376] ([i915#11920])
   [376]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-1/igt@kms_vrr@lobf.html

  * igt@kms_vrr@seamless-rr-switch-drrs:
    - shard-rkl:          NOTRUN -> [SKIP][377] ([i915#9906])
   [377]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@kms_vrr@seamless-rr-switch-drrs.html
    - shard-tglu:         NOTRUN -> [SKIP][378] ([i915#9906])
   [378]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-7/igt@kms_vrr@seamless-rr-switch-drrs.html

  * igt@kms_vrr@seamless-rr-switch-vrr:
    - shard-dg1:          NOTRUN -> [SKIP][379] ([i915#9906])
   [379]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-12/igt@kms_vrr@seamless-rr-switch-vrr.html

  * igt@perf@mi-rpc:
    - shard-rkl:          NOTRUN -> [SKIP][380] ([i915#2434])
   [380]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-7/igt@perf@mi-rpc.html

  * igt@perf@per-context-mode-unprivileged:
    - shard-dg1:          NOTRUN -> [SKIP][381] ([i915#2433])
   [381]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-18/igt@perf@per-context-mode-unprivileged.html

  * igt@perf@polling@0-rcs0:
    - shard-mtlp:         [PASS][382] -> [FAIL][383] ([i915#10538]) +1 other test fail
   [382]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-2/igt@perf@polling@0-rcs0.html
   [383]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-1/igt@perf@polling@0-rcs0.html

  * igt@perf@unprivileged-single-ctx-counters:
    - shard-rkl:          NOTRUN -> [SKIP][384] ([i915#2433])
   [384]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-2/igt@perf@unprivileged-single-ctx-counters.html

  * igt@perf_pmu@busy-start@vcs1:
    - shard-mtlp:         [PASS][385] -> [FAIL][386] ([i915#4349]) +2 other tests fail
   [385]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-1/igt@perf_pmu@busy-start@vcs1.html
   [386]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-8/igt@perf_pmu@busy-start@vcs1.html

  * igt@perf_pmu@module-unload:
    - shard-dg2:          NOTRUN -> [ABORT][387] ([i915#13029] / [i915#15778])
   [387]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-1/igt@perf_pmu@module-unload.html
    - shard-dg1:          NOTRUN -> [ABORT][388] ([i915#13029] / [i915#15778])
   [388]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-17/igt@perf_pmu@module-unload.html
    - shard-tglu:         NOTRUN -> [ABORT][389] ([i915#15778])
   [389]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-2/igt@perf_pmu@module-unload.html

  * igt@perf_pmu@rc6-all-gts:
    - shard-dg1:          NOTRUN -> [SKIP][390] ([i915#8516]) +1 other test skip
   [390]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-12/igt@perf_pmu@rc6-all-gts.html

  * igt@perf_pmu@rc6@other-idle-gt0:
    - shard-dg2:          NOTRUN -> [SKIP][391] ([i915#8516])
   [391]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-5/igt@perf_pmu@rc6@other-idle-gt0.html
    - shard-rkl:          NOTRUN -> [SKIP][392] ([i915#8516])
   [392]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-5/igt@perf_pmu@rc6@other-idle-gt0.html
    - shard-tglu:         NOTRUN -> [SKIP][393] ([i915#8516])
   [393]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-4/igt@perf_pmu@rc6@other-idle-gt0.html

  * igt@prime_udl@share-import-addfb:
    - shard-dg1:          NOTRUN -> [SKIP][394] ([i915#16420])
   [394]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-15/igt@prime_udl@share-import-addfb.html

  * igt@prime_vgem@basic-write:
    - shard-dg1:          NOTRUN -> [SKIP][395] ([i915#3708])
   [395]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-14/igt@prime_vgem@basic-write.html

  * igt@prime_vgem@coherency-gtt:
    - shard-dg1:          NOTRUN -> [SKIP][396] ([i915#3708] / [i915#4077])
   [396]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-19/igt@prime_vgem@coherency-gtt.html

  * igt@tools_test@sysfs_l3_parity:
    - shard-dg1:          NOTRUN -> [SKIP][397] ([i915#4818])
   [397]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-17/igt@tools_test@sysfs_l3_parity.html

  
#### Possible fixes ####

  * igt@gem_ccs@suspend-resume:
    - shard-dg2:          [INCOMPLETE][398] ([i915#13356] / [i915#16348]) -> [PASS][399] +1 other test pass
   [398]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-dg2-3/igt@gem_ccs@suspend-resume.html
   [399]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-4/igt@gem_ccs@suspend-resume.html

  * igt@gem_ctx_isolation@preservation-s3:
    - shard-rkl:          [INCOMPLETE][400] ([i915#13356]) -> [PASS][401] +3 other tests pass
   [400]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-4/igt@gem_ctx_isolation@preservation-s3.html
   [401]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@gem_ctx_isolation@preservation-s3.html

  * igt@gem_eio@kms:
    - shard-rkl:          [DMESG-WARN][402] ([i915#13363]) -> [PASS][403]
   [402]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-2/igt@gem_eio@kms.html
   [403]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-2/igt@gem_eio@kms.html
    - shard-tglu:         [DMESG-WARN][404] ([i915#13363]) -> [PASS][405]
   [404]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-tglu-7/igt@gem_eio@kms.html
   [405]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-9/igt@gem_eio@kms.html

  * igt@gem_exec_big@single:
    - shard-mtlp:         [FAIL][406] ([i915#15871]) -> [PASS][407]
   [406]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-4/igt@gem_exec_big@single.html
   [407]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@gem_exec_big@single.html

  * igt@gem_workarounds@suspend-resume-fd:
    - shard-glk:          [INCOMPLETE][408] ([i915#13356] / [i915#14586]) -> [PASS][409]
   [408]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-glk2/igt@gem_workarounds@suspend-resume-fd.html
   [409]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk4/igt@gem_workarounds@suspend-resume-fd.html

  * igt@gen9_exec_parse@allowed-single:
    - shard-glk:          [ABORT][410] ([i915#5566]) -> [PASS][411]
   [410]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-glk5/igt@gen9_exec_parse@allowed-single.html
   [411]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk4/igt@gen9_exec_parse@allowed-single.html

  * igt@i915_pm_rps@engine-order:
    - shard-glk:          [FAIL][412] ([i915#14896]) -> [PASS][413]
   [412]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-glk5/igt@i915_pm_rps@engine-order.html
   [413]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk9/igt@i915_pm_rps@engine-order.html

  * igt@i915_suspend@sysfs-reader:
    - shard-rkl:          [INCOMPLETE][414] ([i915#4817]) -> [PASS][415]
   [414]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@i915_suspend@sysfs-reader.html
   [415]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@i915_suspend@sysfs-reader.html

  * igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-hdmi-a-1:
    - shard-glk:          [FAIL][416] ([i915#14888]) -> [PASS][417]
   [416]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-glk6/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-hdmi-a-1.html
   [417]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk3/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-hdmi-a-1.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip:
    - shard-mtlp:         [FAIL][418] ([i915#15733] / [i915#5138]) -> [PASS][419] +1 other test pass
   [418]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-4/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html
   [419]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-3/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html

  * igt@kms_cursor_crc@cursor-sliding-256x85:
    - shard-tglu:         [FAIL][420] ([i915#13566]) -> [PASS][421] +1 other test pass
   [420]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-tglu-2/igt@kms_cursor_crc@cursor-sliding-256x85.html
   [421]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-3/igt@kms_cursor_crc@cursor-sliding-256x85.html

  * igt@kms_cursor_crc@cursor-sliding-64x21:
    - shard-rkl:          [FAIL][422] ([i915#13566]) -> [PASS][423]
   [422]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-4/igt@kms_cursor_crc@cursor-sliding-64x21.html
   [423]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-8/igt@kms_cursor_crc@cursor-sliding-64x21.html

  * igt@kms_flip_scaled_crc@flip-32bpp-xtile-to-64bpp-xtile-upscaling:
    - shard-mtlp:         [SKIP][424] ([i915#17031]) -> [PASS][425] +136 other tests pass
   [424]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_flip_scaled_crc@flip-32bpp-xtile-to-64bpp-xtile-upscaling.html
   [425]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-2/igt@kms_flip_scaled_crc@flip-32bpp-xtile-to-64bpp-xtile-upscaling.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-pwrite:
    - shard-dg1:          [DMESG-WARN][426] ([i915#4423]) -> [PASS][427] +1 other test pass
   [426]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-dg1-16/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-pwrite.html
   [427]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-14/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbchdr-tiling-linear:
    - shard-rkl:          [SKIP][428] ([i915#15989]) -> [PASS][429] +8 other tests pass
   [428]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-8/igt@kms_frontbuffer_tracking@fbchdr-tiling-linear.html
   [429]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-1/igt@kms_frontbuffer_tracking@fbchdr-tiling-linear.html

  * igt@kms_frontbuffer_tracking@hdr-1p-offscreen-pri-shrfb-draw-mmap-cpu:
    - shard-glk:          [SKIP][430] -> [PASS][431] +8 other tests pass
   [430]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-glk9/igt@kms_frontbuffer_tracking@hdr-1p-offscreen-pri-shrfb-draw-mmap-cpu.html
   [431]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-glk8/igt@kms_frontbuffer_tracking@hdr-1p-offscreen-pri-shrfb-draw-mmap-cpu.html

  * igt@kms_pm_rpm@dpms-mode-unset-non-lpsp:
    - shard-rkl:          [SKIP][432] ([i915#15073]) -> [PASS][433] +1 other test pass
   [432]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-2/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
   [433]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-3/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html

  * igt@perf_pmu@busy-double-start@vecs1:
    - shard-dg2:          [FAIL][434] ([i915#4349]) -> [PASS][435] +4 other tests pass
   [434]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-dg2-8/igt@perf_pmu@busy-double-start@vecs1.html
   [435]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg2-6/igt@perf_pmu@busy-double-start@vecs1.html

  * igt@perf_pmu@gt-awake:
    - shard-mtlp:         [FAIL][436] -> [PASS][437] +1 other test pass
   [436]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-5/igt@perf_pmu@gt-awake.html
   [437]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@perf_pmu@gt-awake.html

  
#### Warnings ####

  * igt@gem_bad_reloc@negative-reloc-lut:
    - shard-rkl:          [SKIP][438] ([i915#3281]) -> [SKIP][439] ([i915#14544] / [i915#3281])
   [438]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-1/igt@gem_bad_reloc@negative-reloc-lut.html
   [439]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@gem_bad_reloc@negative-reloc-lut.html

  * igt@gem_ccs@block-multicopy-compressed:
    - shard-rkl:          [SKIP][440] ([i915#14544] / [i915#9323]) -> [SKIP][441] ([i915#9323])
   [440]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@gem_ccs@block-multicopy-compressed.html
   [441]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-7/igt@gem_ccs@block-multicopy-compressed.html

  * igt@gem_create@create-ext-set-pat:
    - shard-rkl:          [SKIP][442] ([i915#14544] / [i915#8562]) -> [SKIP][443] ([i915#8562])
   [442]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@gem_create@create-ext-set-pat.html
   [443]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-5/igt@gem_create@create-ext-set-pat.html

  * igt@gem_exec_balancer@parallel-bb-first:
    - shard-rkl:          [SKIP][444] ([i915#14544] / [i915#4525]) -> [SKIP][445] ([i915#4525])
   [444]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@gem_exec_balancer@parallel-bb-first.html
   [445]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-5/igt@gem_exec_balancer@parallel-bb-first.html

  * igt@gem_exec_big@single:
    - shard-tglu:         [FAIL][446] ([i915#15944]) -> [FAIL][447] ([i915#15816])
   [446]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-tglu-10/igt@gem_exec_big@single.html
   [447]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-tglu-5/igt@gem_exec_big@single.html

  * igt@gem_exec_reloc@basic-cpu-wc-active:
    - shard-mtlp:         [SKIP][448] ([i915#17031]) -> [SKIP][449] ([i915#3281]) +10 other tests skip
   [448]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@gem_exec_reloc@basic-cpu-wc-active.html
   [449]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-1/igt@gem_exec_reloc@basic-cpu-wc-active.html

  * igt@gem_exec_reloc@basic-gtt-noreloc:
    - shard-mtlp:         [SKIP][450] ([i915#3281]) -> [SKIP][451] ([i915#17031]) +1 other test skip
   [450]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-2/igt@gem_exec_reloc@basic-gtt-noreloc.html
   [451]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@gem_exec_reloc@basic-gtt-noreloc.html

  * igt@gem_exec_reloc@basic-wc-read:
    - shard-rkl:          [SKIP][452] ([i915#14544] / [i915#3281]) -> [SKIP][453] ([i915#3281])
   [452]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@gem_exec_reloc@basic-wc-read.html
   [453]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-5/igt@gem_exec_reloc@basic-wc-read.html

  * igt@gem_exec_schedule@semaphore-power:
    - shard-rkl:          [SKIP][454] ([i915#14544] / [i915#7276]) -> [SKIP][455] ([i915#7276])
   [454]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@gem_exec_schedule@semaphore-power.html
   [455]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-2/igt@gem_exec_schedule@semaphore-power.html

  * igt@gem_lmem_swapping@random:
    - shard-rkl:          [SKIP][456] ([i915#14544] / [i915#4613]) -> [SKIP][457] ([i915#4613]) +3 other tests skip
   [456]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@gem_lmem_swapping@random.html
   [457]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-5/igt@gem_lmem_swapping@random.html

  * igt@gem_madvise@dontneed-before-pwrite:
    - shard-rkl:          [SKIP][458] ([i915#14544] / [i915#3282]) -> [SKIP][459] ([i915#3282])
   [458]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@gem_madvise@dontneed-before-pwrite.html
   [459]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-1/igt@gem_madvise@dontneed-before-pwrite.html

  * igt@gem_media_vme:
    - shard-rkl:          [SKIP][460] ([i915#284]) -> [SKIP][461] ([i915#14544] / [i915#284])
   [460]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-2/igt@gem_media_vme.html
   [461]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@gem_media_vme.html

  * igt@gem_softpin@evict-snoop:
    - shard-mtlp:         [SKIP][462] ([i915#17031]) -> [SKIP][463] ([i915#4885])
   [462]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@gem_softpin@evict-snoop.html
   [463]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-4/igt@gem_softpin@evict-snoop.html

  * igt@gem_userptr_blits@unsync-unmap:
    - shard-rkl:          [SKIP][464] ([i915#3297]) -> [SKIP][465] ([i915#14544] / [i915#3297])
   [464]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-3/igt@gem_userptr_blits@unsync-unmap.html
   [465]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@gem_userptr_blits@unsync-unmap.html

  * igt@gen9_exec_parse@bb-chained:
    - shard-rkl:          [SKIP][466] ([i915#14544] / [i915#2527]) -> [SKIP][467] ([i915#2527])
   [466]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@gen9_exec_parse@bb-chained.html
   [467]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-3/igt@gen9_exec_parse@bb-chained.html

  * igt@i915_module_load@fault-injection@__uc_init:
    - shard-rkl:          [SKIP][468] ([i915#15479]) -> [SKIP][469] ([i915#14544] / [i915#15479]) +4 other tests skip
   [468]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-2/igt@i915_module_load@fault-injection@__uc_init.html
   [469]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@i915_module_load@fault-injection@__uc_init.html

  * igt@i915_pm_rc6_residency@rc6-idle:
    - shard-rkl:          [SKIP][470] ([i915#14498]) -> [SKIP][471] ([i915#14498] / [i915#14544])
   [470]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-5/igt@i915_pm_rc6_residency@rc6-idle.html
   [471]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@i915_pm_rc6_residency@rc6-idle.html

  * igt@i915_query@query-topology-known-pci-ids:
    - shard-rkl:          [SKIP][472] ([i915#14544] / [i915#16109]) -> [SKIP][473] ([i915#16109])
   [472]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@i915_query@query-topology-known-pci-ids.html
   [473]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-8/igt@i915_query@query-topology-known-pci-ids.html

  * igt@intel_hwmon@hwmon-read:
    - shard-rkl:          [SKIP][474] ([i915#7707]) -> [SKIP][475] ([i915#14544] / [i915#7707])
   [474]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-7/igt@intel_hwmon@hwmon-read.html
   [475]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@intel_hwmon@hwmon-read.html
    - shard-mtlp:         [SKIP][476] ([i915#17031]) -> [SKIP][477] ([i915#7707])
   [476]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@intel_hwmon@hwmon-read.html
   [477]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-4/igt@intel_hwmon@hwmon-read.html

  * igt@kms_atomic@plane-primary-overlay-mutable-zpos:
    - shard-mtlp:         [SKIP][478] ([i915#17031]) -> [SKIP][479] ([i915#3555])
   [478]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_atomic@plane-primary-overlay-mutable-zpos.html
   [479]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-8/igt@kms_atomic@plane-primary-overlay-mutable-zpos.html

  * igt@kms_big_fb@4-tiled-16bpp-rotate-270:
    - shard-mtlp:         [SKIP][480] ([i915#17031]) -> [SKIP][481] +18 other tests skip
   [480]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_big_fb@4-tiled-16bpp-rotate-270.html
   [481]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-1/igt@kms_big_fb@4-tiled-16bpp-rotate-270.html

  * igt@kms_big_fb@4-tiled-addfb-size-overflow:
    - shard-rkl:          [SKIP][482] ([i915#14544] / [i915#5286]) -> [SKIP][483] ([i915#5286]) +2 other tests skip
   [482]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_big_fb@4-tiled-addfb-size-overflow.html
   [483]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-5/igt@kms_big_fb@4-tiled-addfb-size-overflow.html

  * igt@kms_big_fb@linear-16bpp-rotate-270:
    - shard-rkl:          [SKIP][484] ([i915#3638]) -> [SKIP][485] ([i915#14544] / [i915#3638])
   [484]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-3/igt@kms_big_fb@linear-16bpp-rotate-270.html
   [485]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_big_fb@linear-16bpp-rotate-270.html

  * igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-0-hflip:
    - shard-mtlp:         [SKIP][486] ([i915#17031]) -> [SKIP][487] ([i915#3828])
   [486]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-0-hflip.html
   [487]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-1/igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-0-hflip.html

  * igt@kms_big_fb@y-tiled-addfb-size-offset-overflow:
    - shard-mtlp:         [SKIP][488] ([i915#17031]) -> [SKIP][489] ([i915#6187]) +1 other test skip
   [488]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_big_fb@y-tiled-addfb-size-offset-overflow.html
   [489]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-1/igt@kms_big_fb@y-tiled-addfb-size-offset-overflow.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180-hflip:
    - shard-mtlp:         [SKIP][490] -> [SKIP][491] ([i915#17031])
   [490]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-2/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
   [491]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180-hflip.html

  * igt@kms_ccs@bad-aux-stride-4-tiled-mtl-rc-ccs@pipe-c-hdmi-a-2:
    - shard-rkl:          [SKIP][492] ([i915#14098] / [i915#14544] / [i915#6095]) -> [SKIP][493] ([i915#14098] / [i915#6095]) +7 other tests skip
   [492]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_ccs@bad-aux-stride-4-tiled-mtl-rc-ccs@pipe-c-hdmi-a-2.html
   [493]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@kms_ccs@bad-aux-stride-4-tiled-mtl-rc-ccs@pipe-c-hdmi-a-2.html

  * igt@kms_ccs@bad-pixel-format-4-tiled-mtl-rc-ccs:
    - shard-rkl:          [SKIP][494] ([i915#14098] / [i915#6095]) -> [SKIP][495] ([i915#14098] / [i915#14544] / [i915#6095]) +2 other tests skip
   [494]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-1/igt@kms_ccs@bad-pixel-format-4-tiled-mtl-rc-ccs.html
   [495]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_ccs@bad-pixel-format-4-tiled-mtl-rc-ccs.html

  * igt@kms_ccs@bad-pixel-format-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2:
    - shard-rkl:          [SKIP][496] ([i915#6095]) -> [SKIP][497] ([i915#14544] / [i915#6095]) +1 other test skip
   [496]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-1/igt@kms_ccs@bad-pixel-format-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2.html
   [497]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_ccs@bad-pixel-format-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs:
    - shard-rkl:          [SKIP][498] ([i915#12313] / [i915#14544]) -> [SKIP][499] ([i915#12313])
   [498]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs.html
   [499]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-3/igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs:
    - shard-rkl:          [SKIP][500] ([i915#12805]) -> [SKIP][501] ([i915#12805] / [i915#14544])
   [500]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-3/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html
   [501]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html
    - shard-mtlp:         [SKIP][502] ([i915#17031]) -> [SKIP][503] ([i915#12805])
   [502]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html
   [503]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-3/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-sprite-planes-basic-y-tiled-gen12-rc-ccs-cc:
    - shard-mtlp:         [SKIP][504] ([i915#17031]) -> [SKIP][505] ([i915#6095]) +4 other tests skip
   [504]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_ccs@crc-sprite-planes-basic-y-tiled-gen12-rc-ccs-cc.html
   [505]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-6/igt@kms_ccs@crc-sprite-planes-basic-y-tiled-gen12-rc-ccs-cc.html

  * igt@kms_ccs@missing-ccs-buffer-y-tiled-gen12-rc-ccs-cc:
    - shard-mtlp:         [SKIP][506] ([i915#6095]) -> [SKIP][507] ([i915#17031]) +2 other tests skip
   [506]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-5/igt@kms_ccs@missing-ccs-buffer-y-tiled-gen12-rc-ccs-cc.html
   [507]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_ccs@missing-ccs-buffer-y-tiled-gen12-rc-ccs-cc.html

  * igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs:
    - shard-mtlp:         [SKIP][508] ([i915#17031]) -> [SKIP][509] ([i915#12313]) +4 other tests skip
   [508]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs.html
   [509]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-4/igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs.html
    - shard-rkl:          [SKIP][510] ([i915#12313]) -> [SKIP][511] ([i915#12313] / [i915#14544])
   [510]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-2/igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs.html
   [511]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs.html

  * igt@kms_ccs@random-ccs-data-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-2:
    - shard-rkl:          [SKIP][512] ([i915#14544] / [i915#6095]) -> [SKIP][513] ([i915#6095]) +3 other tests skip
   [512]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_ccs@random-ccs-data-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-2.html
   [513]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-3/igt@kms_ccs@random-ccs-data-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-2.html

  * igt@kms_chamelium_audio@hdmi-audio-after-suspend:
    - shard-rkl:          [SKIP][514] ([i915#11151] / [i915#14544]) -> [SKIP][515] ([i915#11151])
   [514]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_chamelium_audio@hdmi-audio-after-suspend.html
   [515]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-5/igt@kms_chamelium_audio@hdmi-audio-after-suspend.html

  * igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4:
    - shard-mtlp:         [SKIP][516] ([i915#17031]) -> [SKIP][517] ([i915#16464] / [i915#16471]) +1 other test skip
   [516]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4.html
   [517]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-1/igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4.html

  * igt@kms_chamelium_edid@dp-edid-stress-resolution-non-4k:
    - shard-dg1:          [SKIP][518] ([i915#11151] / [i915#7828]) -> [SKIP][519] ([i915#11151] / [i915#4423] / [i915#7828])
   [518]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-dg1-16/igt@kms_chamelium_edid@dp-edid-stress-resolution-non-4k.html
   [519]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-12/igt@kms_chamelium_edid@dp-edid-stress-resolution-non-4k.html

  * igt@kms_chamelium_frames@hdmi-aspect-ratio:
    - shard-mtlp:         [SKIP][520] ([i915#11151] / [i915#7828]) -> [SKIP][521] ([i915#17031]) +2 other tests skip
   [520]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-3/igt@kms_chamelium_frames@hdmi-aspect-ratio.html
   [521]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_chamelium_frames@hdmi-aspect-ratio.html

  * igt@kms_chamelium_hpd@dp-hpd-fast:
    - shard-rkl:          [SKIP][522] ([i915#11151] / [i915#14544] / [i915#7828]) -> [SKIP][523] ([i915#11151] / [i915#7828])
   [522]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_chamelium_hpd@dp-hpd-fast.html
   [523]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@kms_chamelium_hpd@dp-hpd-fast.html

  * igt@kms_chamelium_hpd@dp-hpd-for-each-pipe:
    - shard-mtlp:         [SKIP][524] ([i915#17031]) -> [SKIP][525] ([i915#11151] / [i915#7828]) +4 other tests skip
   [524]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_chamelium_hpd@dp-hpd-for-each-pipe.html
   [525]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-3/igt@kms_chamelium_hpd@dp-hpd-for-each-pipe.html

  * igt@kms_chamelium_hpd@hdmi-hpd:
    - shard-rkl:          [SKIP][526] ([i915#11151] / [i915#7828]) -> [SKIP][527] ([i915#11151] / [i915#14544] / [i915#7828])
   [526]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-3/igt@kms_chamelium_hpd@hdmi-hpd.html
   [527]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_chamelium_hpd@hdmi-hpd.html

  * igt@kms_content_protection@dp-mst-type-0-hdcp14:
    - shard-mtlp:         [SKIP][528] ([i915#15330]) -> [SKIP][529] ([i915#17031])
   [528]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-4/igt@kms_content_protection@dp-mst-type-0-hdcp14.html
   [529]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_content_protection@dp-mst-type-0-hdcp14.html

  * igt@kms_content_protection@dp-mst-type-0-suspend-resume:
    - shard-mtlp:         [SKIP][530] ([i915#17031]) -> [SKIP][531] ([i915#15330])
   [530]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_content_protection@dp-mst-type-0-suspend-resume.html
   [531]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-5/igt@kms_content_protection@dp-mst-type-0-suspend-resume.html

  * igt@kms_content_protection@lic-type-0:
    - shard-mtlp:         [SKIP][532] ([i915#17031]) -> [SKIP][533] ([i915#15865]) +2 other tests skip
   [532]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_content_protection@lic-type-0.html
   [533]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-8/igt@kms_content_protection@lic-type-0.html

  * igt@kms_content_protection@srm:
    - shard-rkl:          [SKIP][534] ([i915#14544] / [i915#15865]) -> [SKIP][535] ([i915#15865]) +2 other tests skip
   [534]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_content_protection@srm.html
   [535]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-7/igt@kms_content_protection@srm.html

  * igt@kms_cursor_crc@cursor-offscreen-512x170:
    - shard-mtlp:         [SKIP][536] ([i915#13049]) -> [SKIP][537] ([i915#17031])
   [536]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-3/igt@kms_cursor_crc@cursor-offscreen-512x170.html
   [537]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_cursor_crc@cursor-offscreen-512x170.html

  * igt@kms_cursor_crc@cursor-onscreen-32x10:
    - shard-mtlp:         [SKIP][538] ([i915#3555] / [i915#8814]) -> [SKIP][539] ([i915#17031])
   [538]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-1/igt@kms_cursor_crc@cursor-onscreen-32x10.html
   [539]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_cursor_crc@cursor-onscreen-32x10.html

  * igt@kms_cursor_crc@cursor-random-512x512:
    - shard-rkl:          [SKIP][540] ([i915#13049] / [i915#14544]) -> [SKIP][541] ([i915#13049])
   [540]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_cursor_crc@cursor-random-512x512.html
   [541]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-2/igt@kms_cursor_crc@cursor-random-512x512.html

  * igt@kms_cursor_crc@cursor-random-64x21:
    - shard-mtlp:         [SKIP][542] ([i915#17031]) -> [SKIP][543] ([i915#8814])
   [542]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_cursor_crc@cursor-random-64x21.html
   [543]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-1/igt@kms_cursor_crc@cursor-random-64x21.html

  * igt@kms_cursor_crc@cursor-rapid-movement-128x42:
    - shard-mtlp:         [SKIP][544] ([i915#8814]) -> [SKIP][545] ([i915#17031])
   [544]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-1/igt@kms_cursor_crc@cursor-rapid-movement-128x42.html
   [545]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_cursor_crc@cursor-rapid-movement-128x42.html

  * igt@kms_cursor_crc@cursor-rapid-movement-32x32:
    - shard-rkl:          [SKIP][546] ([i915#14544] / [i915#3555]) -> [SKIP][547] ([i915#3555]) +2 other tests skip
   [546]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_cursor_crc@cursor-rapid-movement-32x32.html
   [547]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-5/igt@kms_cursor_crc@cursor-rapid-movement-32x32.html

  * igt@kms_cursor_crc@cursor-rapid-movement-512x170:
    - shard-mtlp:         [SKIP][548] ([i915#17031]) -> [SKIP][549] ([i915#13049])
   [548]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html
   [549]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-8/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html

  * igt@kms_cursor_crc@cursor-sliding-max-size:
    - shard-mtlp:         [SKIP][550] ([i915#17031]) -> [SKIP][551] ([i915#3555] / [i915#8814])
   [550]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_cursor_crc@cursor-sliding-max-size.html
   [551]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-4/igt@kms_cursor_crc@cursor-sliding-max-size.html

  * igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic:
    - shard-mtlp:         [SKIP][552] ([i915#17031]) -> [SKIP][553] ([i915#9809])
   [552]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic.html
   [553]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-3/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size:
    - shard-mtlp:         [SKIP][554] ([i915#16119] / [i915#4213]) -> [SKIP][555] ([i915#17031])
   [554]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-3/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html
   [555]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html

  * igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size:
    - shard-mtlp:         [SKIP][556] ([i915#9809]) -> [SKIP][557] ([i915#17031])
   [556]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-1/igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size.html
   [557]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle:
    - shard-mtlp:         [SKIP][558] ([i915#17031]) -> [SKIP][559] ([i915#16119] / [i915#4213])
   [558]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html
   [559]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-5/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html

  * igt@kms_dp_link_training@non-uhbr-sst:
    - shard-mtlp:         [SKIP][560] ([i915#13749]) -> [SKIP][561] ([i915#17031])
   [560]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-3/igt@kms_dp_link_training@non-uhbr-sst.html
   [561]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_dp_link_training@non-uhbr-sst.html

  * igt@kms_dp_linktrain_fallback@dp-fallback:
    - shard-rkl:          [SKIP][562] ([i915#14544] / [i915#16867]) -> [SKIP][563] ([i915#16867])
   [562]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_dp_linktrain_fallback@dp-fallback.html
   [563]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-7/igt@kms_dp_linktrain_fallback@dp-fallback.html

  * igt@kms_draw_crc@draw-method-mmap-gtt:
    - shard-mtlp:         [SKIP][564] ([i915#17031]) -> [SKIP][565] ([i915#3555] / [i915#8812])
   [564]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_draw_crc@draw-method-mmap-gtt.html
   [565]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-8/igt@kms_draw_crc@draw-method-mmap-gtt.html

  * igt@kms_dsc@dsc-basic-ultrajoiner:
    - shard-mtlp:         [SKIP][566] ([i915#17031]) -> [SKIP][567] ([i915#16361]) +3 other tests skip
   [566]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_dsc@dsc-basic-ultrajoiner.html
   [567]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-2/igt@kms_dsc@dsc-basic-ultrajoiner.html

  * igt@kms_dsc@dsc-fractional-bpp-ultrajoiner:
    - shard-mtlp:         [SKIP][568] ([i915#16361]) -> [SKIP][569] ([i915#17031]) +1 other test skip
   [568]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-4/igt@kms_dsc@dsc-fractional-bpp-ultrajoiner.html
   [569]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_dsc@dsc-fractional-bpp-ultrajoiner.html

  * igt@kms_dsc@dsc-with-output-formats-bigjoiner:
    - shard-rkl:          [SKIP][570] ([i915#16361]) -> [SKIP][571] ([i915#14544] / [i915#16361])
   [570]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-2/igt@kms_dsc@dsc-with-output-formats-bigjoiner.html
   [571]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_dsc@dsc-with-output-formats-bigjoiner.html

  * igt@kms_feature_discovery@chamelium:
    - shard-mtlp:         [SKIP][572] ([i915#16084]) -> [SKIP][573] ([i915#17031])
   [572]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-8/igt@kms_feature_discovery@chamelium.html
   [573]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_feature_discovery@chamelium.html

  * igt@kms_feature_discovery@display-3x:
    - shard-rkl:          [SKIP][574] ([i915#14544] / [i915#16081]) -> [SKIP][575] ([i915#16081])
   [574]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_feature_discovery@display-3x.html
   [575]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-8/igt@kms_feature_discovery@display-3x.html

  * igt@kms_flip@2x-flip-vs-dpms:
    - shard-rkl:          [SKIP][576] ([i915#14544] / [i915#9934]) -> [SKIP][577] ([i915#9934])
   [576]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_flip@2x-flip-vs-dpms.html
   [577]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-5/igt@kms_flip@2x-flip-vs-dpms.html

  * igt@kms_flip@2x-flip-vs-dpms-off-vs-modeset-interruptible:
    - shard-rkl:          [SKIP][578] ([i915#9934]) -> [SKIP][579] ([i915#14544] / [i915#9934]) +1 other test skip
   [578]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-4/igt@kms_flip@2x-flip-vs-dpms-off-vs-modeset-interruptible.html
   [579]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_flip@2x-flip-vs-dpms-off-vs-modeset-interruptible.html

  * igt@kms_flip@2x-flip-vs-expired-vblank:
    - shard-mtlp:         [SKIP][580] ([i915#3637] / [i915#9934]) -> [SKIP][581] ([i915#17031]) +1 other test skip
   [580]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-8/igt@kms_flip@2x-flip-vs-expired-vblank.html
   [581]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_flip@2x-flip-vs-expired-vblank.html

  * igt@kms_flip@2x-flip-vs-fences-interruptible:
    - shard-mtlp:         [SKIP][582] ([i915#17031]) -> [SKIP][583] ([i915#8381]) +1 other test skip
   [582]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_flip@2x-flip-vs-fences-interruptible.html
   [583]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-8/igt@kms_flip@2x-flip-vs-fences-interruptible.html

  * igt@kms_flip@2x-flip-vs-rmfb:
    - shard-mtlp:         [SKIP][584] ([i915#17031]) -> [SKIP][585] ([i915#3637] / [i915#9934]) +3 other tests skip
   [584]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_flip@2x-flip-vs-rmfb.html
   [585]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-1/igt@kms_flip@2x-flip-vs-rmfb.html

  * igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-downscaling:
    - shard-mtlp:         [SKIP][586] ([i915#17031]) -> [SKIP][587] ([i915#3555] / [i915#8810] / [i915#8813]) +1 other test skip
   [586]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-downscaling.html
   [587]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-2/igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-downscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling:
    - shard-rkl:          [SKIP][588] ([i915#14544] / [i915#15643]) -> [SKIP][589] ([i915#15643])
   [588]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling.html
   [589]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-7/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling:
    - shard-mtlp:         [SKIP][590] ([i915#17031]) -> [SKIP][591] ([i915#15643]) +2 other tests skip
   [590]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling.html
   [591]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-2/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-linear-to-32bpp-linear-downscaling:
    - shard-mtlp:         [SKIP][592] ([i915#3555] / [i915#8810] / [i915#8813]) -> [SKIP][593] ([i915#17031])
   [592]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-4/igt@kms_flip_scaled_crc@flip-64bpp-linear-to-32bpp-linear-downscaling.html
   [593]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_flip_scaled_crc@flip-64bpp-linear-to-32bpp-linear-downscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling:
    - shard-mtlp:         [SKIP][594] ([i915#15643]) -> [SKIP][595] ([i915#17031])
   [594]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-1/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling.html
   [595]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilercccs-downscaling.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-mmap-gtt:
    - shard-mtlp:         [SKIP][596] ([i915#17031]) -> [SKIP][597] ([i915#15990] / [i915#8708]) +11 other tests skip
   [596]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-mmap-gtt.html
   [597]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-mmap-gtt:
    - shard-dg1:          [SKIP][598] ([i915#15990] / [i915#8708]) -> [SKIP][599] ([i915#15990] / [i915#4423] / [i915#8708])
   [598]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-dg1-12/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-mmap-gtt.html
   [599]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-12/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-blt:
    - shard-mtlp:         [SKIP][600] ([i915#15991] / [i915#1825]) -> [SKIP][601] ([i915#17031]) +6 other tests skip
   [600]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-2/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-blt.html
   [601]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-mmap-cpu:
    - shard-mtlp:         [SKIP][602] ([i915#17031]) -> [SKIP][603] ([i915#15991] / [i915#1825]) +29 other tests skip
   [602]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-mmap-cpu.html
   [603]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-8/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-pri-shrfb-draw-pwrite:
    - shard-mtlp:         [SKIP][604] ([i915#17031]) -> [SKIP][605] ([i915#15989]) +32 other tests skip
   [604]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-pri-shrfb-draw-pwrite.html
   [605]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-1/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-pri-shrfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbchdr-2p-pri-indfb-multidraw:
    - shard-mtlp:         [SKIP][606] ([i915#15991]) -> [SKIP][607] ([i915#17031]) +9 other tests skip
   [606]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-2/igt@kms_frontbuffer_tracking@fbchdr-2p-pri-indfb-multidraw.html
   [607]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_frontbuffer_tracking@fbchdr-2p-pri-indfb-multidraw.html

  * igt@kms_frontbuffer_tracking@fbchdr-2p-primscrn-shrfb-pgflip-blt:
    - shard-rkl:          [SKIP][608] ([i915#14544]) -> [SKIP][609] +32 other tests skip
   [608]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_frontbuffer_tracking@fbchdr-2p-primscrn-shrfb-pgflip-blt.html
   [609]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-5/igt@kms_frontbuffer_tracking@fbchdr-2p-primscrn-shrfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-pri-indfb-multidraw:
    - shard-rkl:          [SKIP][610] ([i915#15102]) -> [SKIP][611] ([i915#14544] / [i915#15102]) +4 other tests skip
   [610]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-3/igt@kms_frontbuffer_tracking@fbcpsr-1p-pri-indfb-multidraw.html
   [611]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-pri-indfb-multidraw.html

  * igt@kms_frontbuffer_tracking@fbcpsr-tiling-4:
    - shard-rkl:          [SKIP][612] ([i915#14544] / [i915#5439]) -> [SKIP][613] ([i915#5439])
   [612]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html
   [613]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-7/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-indfb-msflip-blt:
    - shard-mtlp:         [SKIP][614] ([i915#15989]) -> [SKIP][615] ([i915#17031]) +9 other tests skip
   [614]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-1/igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-indfb-msflip-blt.html
   [615]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-indfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-primscrn-cur-indfb-draw-mmap-gtt:
    - shard-mtlp:         [SKIP][616] ([i915#15990]) -> [SKIP][617] ([i915#17031]) +1 other test skip
   [616]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-8/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-primscrn-cur-indfb-draw-mmap-gtt.html
   [617]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-primscrn-cur-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-primscrn-pri-indfb-draw-mmap-gtt:
    - shard-mtlp:         [SKIP][618] ([i915#17031]) -> [SKIP][619] ([i915#15990]) +10 other tests skip
   [618]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-primscrn-pri-indfb-draw-mmap-gtt.html
   [619]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-3/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-primscrn-pri-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-primscrn-pri-shrfb-draw-blt:
    - shard-mtlp:         [SKIP][620] ([i915#17031]) -> [SKIP][621] ([i915#15991]) +37 other tests skip
   [620]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-primscrn-pri-shrfb-draw-blt.html
   [621]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-6/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-primscrn-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-cur-indfb-draw-mmap-wc:
    - shard-rkl:          [SKIP][622] -> [SKIP][623] ([i915#14544]) +13 other tests skip
   [622]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-3/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-cur-indfb-draw-mmap-wc.html
   [623]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-tiling-y:
    - shard-mtlp:         [SKIP][624] ([i915#17031]) -> [SKIP][625] ([i915#10055])
   [624]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_frontbuffer_tracking@fbcpsrhdr-tiling-y.html
   [625]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-3/igt@kms_frontbuffer_tracking@fbcpsrhdr-tiling-y.html

  * igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-mmap-gtt:
    - shard-mtlp:         [SKIP][626] ([i915#17031]) -> [SKIP][627] ([i915#15104] / [i915#15990])
   [626]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-mmap-gtt.html
   [627]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-3/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@psr-indfb-scaledprimary:
    - shard-rkl:          [SKIP][628] ([i915#14544] / [i915#15102]) -> [SKIP][629] ([i915#15102]) +17 other tests skip
   [628]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-indfb-scaledprimary.html
   [629]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-5/igt@kms_frontbuffer_tracking@psr-indfb-scaledprimary.html

  * igt@kms_hdr@static-toggle:
    - shard-mtlp:         [SKIP][630] ([i915#12713] / [i915#16490] / [i915#3555] / [i915#8228]) -> [SKIP][631] ([i915#17031])
   [630]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-6/igt@kms_hdr@static-toggle.html
   [631]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_hdr@static-toggle.html

  * igt@kms_hdr@static-toggle-suspend:
    - shard-rkl:          [SKIP][632] ([i915#16644] / [i915#3555] / [i915#8228]) -> [ABORT][633] ([i915#15132])
   [632]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-4/igt@kms_hdr@static-toggle-suspend.html
   [633]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-1/igt@kms_hdr@static-toggle-suspend.html

  * igt@kms_joiner@basic-force-ultra-joiner:
    - shard-mtlp:         [SKIP][634] ([i915#15458]) -> [SKIP][635] ([i915#17031])
   [634]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-2/igt@kms_joiner@basic-force-ultra-joiner.html
   [635]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_joiner@basic-force-ultra-joiner.html

  * igt@kms_joiner@basic-max-non-joiner:
    - shard-rkl:          [SKIP][636] ([i915#13688] / [i915#14544]) -> [SKIP][637] ([i915#13688])
   [636]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_joiner@basic-max-non-joiner.html
   [637]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@kms_joiner@basic-max-non-joiner.html

  * igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
    - shard-rkl:          [SKIP][638] ([i915#14544] / [i915#15815]) -> [SKIP][639] ([i915#15815])
   [638]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html
   [639]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-8/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html

  * igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier:
    - shard-mtlp:         [SKIP][640] ([i915#15709]) -> [SKIP][641] ([i915#17031]) +1 other test skip
   [640]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-1/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier.html
   [641]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier.html

  * igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier-source-clamping:
    - shard-dg1:          [SKIP][642] ([i915#15709] / [i915#4423]) -> [SKIP][643] ([i915#15709])
   [642]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-dg1-18/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier-source-clamping.html
   [643]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-dg1-18/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier-source-clamping.html

  * igt@kms_plane@pixel-format-4-tiled-mtl-mc-ccs-modifier-source-clamping:
    - shard-rkl:          [SKIP][644] ([i915#15709]) -> [SKIP][645] ([i915#14544] / [i915#15709])
   [644]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-1/igt@kms_plane@pixel-format-4-tiled-mtl-mc-ccs-modifier-source-clamping.html
   [645]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_plane@pixel-format-4-tiled-mtl-mc-ccs-modifier-source-clamping.html

  * igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-cc-modifier:
    - shard-rkl:          [SKIP][646] ([i915#14544] / [i915#15709]) -> [SKIP][647] ([i915#15709]) +1 other test skip
   [646]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-cc-modifier.html
   [647]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-1/igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-cc-modifier.html

  * igt@kms_plane@pixel-format-y-tiled-gen12-mc-ccs-modifier:
    - shard-mtlp:         [SKIP][648] ([i915#17031]) -> [SKIP][649] ([i915#15709]) +2 other tests skip
   [648]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_plane@pixel-format-y-tiled-gen12-mc-ccs-modifier.html
   [649]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-2/igt@kms_plane@pixel-format-y-tiled-gen12-mc-ccs-modifier.html

  * igt@kms_plane_lowres@tiling-none:
    - shard-mtlp:         [SKIP][650] ([i915#11614] / [i915#3582]) -> [SKIP][651] ([i915#17031])
   [650]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-8/igt@kms_plane_lowres@tiling-none.html
   [651]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_plane_lowres@tiling-none.html

  * igt@kms_plane_multiple@2x-tiling-none:
    - shard-mtlp:         [SKIP][652] ([i915#17031]) -> [SKIP][653] ([i915#13958]) +1 other test skip
   [652]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_plane_multiple@2x-tiling-none.html
   [653]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-5/igt@kms_plane_multiple@2x-tiling-none.html

  * igt@kms_plane_multiple@2x-tiling-y:
    - shard-rkl:          [SKIP][654] ([i915#13958] / [i915#14544]) -> [SKIP][655] ([i915#13958])
   [654]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_plane_multiple@2x-tiling-y.html
   [655]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-5/igt@kms_plane_multiple@2x-tiling-y.html

  * igt@kms_plane_multiple@tiling-y:
    - shard-mtlp:         [SKIP][656] ([i915#17031]) -> [SKIP][657] ([i915#14259])
   [656]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_plane_multiple@tiling-y.html
   [657]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-6/igt@kms_plane_multiple@tiling-y.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-75:
    - shard-mtlp:         [SKIP][658] ([i915#17031]) -> [SKIP][659] ([i915#15329] / [i915#3555] / [i915#6953])
   [658]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_plane_scaling@planes-downscale-factor-0-75.html
   [659]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-4/igt@kms_plane_scaling@planes-downscale-factor-0-75.html

  * igt@kms_pm_rpm@dpms-non-lpsp:
    - shard-mtlp:         [SKIP][660] ([i915#15073]) -> [SKIP][661] ([i915#17031])
   [660]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-3/igt@kms_pm_rpm@dpms-non-lpsp.html
   [661]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_pm_rpm@dpms-non-lpsp.html

  * igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
    - shard-mtlp:         [SKIP][662] ([i915#17031]) -> [SKIP][663] ([i915#15073])
   [662]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html
   [663]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-6/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html

  * igt@kms_psr2_sf@fbc-pr-cursor-plane-update-sf:
    - shard-mtlp:         [SKIP][664] ([i915#17031]) -> [SKIP][665] ([i915#12316]) +6 other tests skip
   [664]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_psr2_sf@fbc-pr-cursor-plane-update-sf.html
   [665]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-5/igt@kms_psr2_sf@fbc-pr-cursor-plane-update-sf.html

  * igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf:
    - shard-mtlp:         [SKIP][666] ([i915#17031]) -> [SKIP][667] ([i915#9808])
   [666]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf.html
   [667]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-3/igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf.html

  * igt@kms_psr2_sf@pr-cursor-plane-move-continuous-exceed-fully-sf:
    - shard-rkl:          [SKIP][668] ([i915#11520] / [i915#14544]) -> [SKIP][669] ([i915#11520]) +3 other tests skip
   [668]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_psr2_sf@pr-cursor-plane-move-continuous-exceed-fully-sf.html
   [669]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-4/igt@kms_psr2_sf@pr-cursor-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr2_sf@pr-overlay-plane-update-continuous-sf:
    - shard-mtlp:         [SKIP][670] ([i915#12316]) -> [SKIP][671] ([i915#17031]) +1 other test skip
   [670]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-1/igt@kms_psr2_sf@pr-overlay-plane-update-continuous-sf.html
   [671]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_psr2_sf@pr-overlay-plane-update-continuous-sf.html

  * igt@kms_psr2_sf@pr-overlay-plane-update-sf-dmg-area:
    - shard-rkl:          [SKIP][672] ([i915#11520]) -> [SKIP][673] ([i915#11520] / [i915#14544]) +2 other tests skip
   [672]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-7/igt@kms_psr2_sf@pr-overlay-plane-update-sf-dmg-area.html
   [673]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_psr2_sf@pr-overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr@fbc-psr2-primary-mmap-cpu:
    - shard-mtlp:         [SKIP][674] ([i915#17031]) -> [SKIP][675] ([i915#9688]) +12 other tests skip
   [674]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_psr@fbc-psr2-primary-mmap-cpu.html
   [675]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-5/igt@kms_psr@fbc-psr2-primary-mmap-cpu.html

  * igt@kms_psr@pr-primary-blt:
    - shard-mtlp:         [SKIP][676] ([i915#9688]) -> [SKIP][677] ([i915#17031]) +3 other tests skip
   [676]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-3/igt@kms_psr@pr-primary-blt.html
   [677]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_psr@pr-primary-blt.html

  * igt@kms_psr@psr-sprite-render:
    - shard-rkl:          [SKIP][678] ([i915#1072] / [i915#9732]) -> [SKIP][679] ([i915#1072] / [i915#14544] / [i915#9732]) +1 other test skip
   [678]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-2/igt@kms_psr@psr-sprite-render.html
   [679]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_psr@psr-sprite-render.html

  * igt@kms_psr@psr2-cursor-mmap-gtt:
    - shard-rkl:          [SKIP][680] ([i915#1072] / [i915#14544] / [i915#9732]) -> [SKIP][681] ([i915#1072] / [i915#9732]) +6 other tests skip
   [680]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_psr@psr2-cursor-mmap-gtt.html
   [681]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-2/igt@kms_psr@psr2-cursor-mmap-gtt.html

  * igt@kms_psr_stress_test@invalidate-primary-flip-overlay:
    - shard-rkl:          [SKIP][682] ([i915#14544] / [i915#15949]) -> [SKIP][683] ([i915#15949])
   [682]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html
   [683]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-2/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html

  * igt@kms_rotation_crc@exhaust-fences:
    - shard-mtlp:         [SKIP][684] ([i915#4235]) -> [SKIP][685] ([i915#17031])
   [684]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-6/igt@kms_rotation_crc@exhaust-fences.html
   [685]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_rotation_crc@exhaust-fences.html

  * igt@kms_rotation_crc@primary-rotation-270:
    - shard-mtlp:         [SKIP][686] ([i915#17031]) -> [SKIP][687] ([i915#12755] / [i915#15867])
   [686]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_rotation_crc@primary-rotation-270.html
   [687]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-1/igt@kms_rotation_crc@primary-rotation-270.html

  * igt@kms_rotation_crc@primary-y-tiled-reflect-x-180:
    - shard-mtlp:         [SKIP][688] ([i915#17031]) -> [SKIP][689] ([i915#5289])
   [688]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_rotation_crc@primary-y-tiled-reflect-x-180.html
   [689]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-1/igt@kms_rotation_crc@primary-y-tiled-reflect-x-180.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90:
    - shard-rkl:          [SKIP][690] ([i915#14544] / [i915#5289]) -> [SKIP][691] ([i915#5289]) +2 other tests skip
   [690]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-6/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90.html
   [691]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-1/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90.html

  * igt@kms_scaling_modes@scaling-mode-center:
    - shard-rkl:          [SKIP][692] ([i915#3555]) -> [SKIP][693] ([i915#14544] / [i915#3555])
   [692]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-3/igt@kms_scaling_modes@scaling-mode-center.html
   [693]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_scaling_modes@scaling-mode-center.html

  * igt@kms_setmode@basic-clone-single-crtc:
    - shard-mtlp:         [SKIP][694] ([i915#17031]) -> [SKIP][695] ([i915#3555] / [i915#8809]) +1 other test skip
   [694]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_setmode@basic-clone-single-crtc.html
   [695]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-2/igt@kms_setmode@basic-clone-single-crtc.html

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-mtlp:         [SKIP][696] ([i915#17031]) -> [SKIP][697] ([i915#8623])
   [696]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-7/igt@kms_tiled_display@basic-test-pattern.html
   [697]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-3/igt@kms_tiled_display@basic-test-pattern.html

  * igt@kms_vrr@flip-dpms:
    - shard-rkl:          [SKIP][698] ([i915#15243] / [i915#3555]) -> [SKIP][699] ([i915#14544] / [i915#15243] / [i915#3555])
   [698]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-1/igt@kms_vrr@flip-dpms.html
   [699]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@kms_vrr@flip-dpms.html

  * igt@kms_vrr@flipline:
    - shard-mtlp:         [SKIP][700] ([i915#3555] / [i915#8808]) -> [SKIP][701] ([i915#17031])
   [700]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-3/igt@kms_vrr@flipline.html
   [701]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@kms_vrr@flipline.html

  * igt@prime_udl@share-import-addfb:
    - shard-rkl:          [SKIP][702] ([i915#16420]) -> [SKIP][703] ([i915#14544] / [i915#16420])
   [702]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-rkl-5/igt@prime_udl@share-import-addfb.html
   [703]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-rkl-6/igt@prime_udl@share-import-addfb.html

  * igt@prime_vgem@fence-write-hang:
    - shard-mtlp:         [SKIP][704] ([i915#3708]) -> [SKIP][705] ([i915#17031])
   [704]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_19152/shard-mtlp-8/igt@prime_vgem@fence-write-hang.html
   [705]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/shard-mtlp-7/igt@prime_vgem@fence-write-hang.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [i915#10055]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10055
  [i915#10056]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10056
  [i915#10307]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10307
  [i915#10434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10434
  [i915#10538]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10538
  [i915#10553]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10553
  [i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
  [i915#1099]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1099
  [i915#11078]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11078
  [i915#11151]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11151
  [i915#11520]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11520
  [i915#11614]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11614
  [i915#11681]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11681
  [i915#11920]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11920
  [i915#12178]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12178
  [i915#12276]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12276
  [i915#12313]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12313
  [i915#12314]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12314
  [i915#12316]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12316
  [i915#12343]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12343
  [i915#12454]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12454
  [i915#1257]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1257
  [i915#12655]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12655
  [i915#12712]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12712
  [i915#12713]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12713
  [i915#12745]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12745
  [i915#12755]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12755
  [i915#12805]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12805
  [i915#13008]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13008
  [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#13363]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13363
  [i915#13398]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13398
  [i915#13566]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13566
  [i915#13688]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13688
  [i915#13691]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13691
  [i915#13748]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13748
  [i915#13749]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13749
  [i915#13809]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13809
  [i915#13958]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13958
  [i915#14098]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14098
  [i915#14118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14118
  [i915#14123]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14123
  [i915#14259]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14259
  [i915#14419]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14419
  [i915#14498]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14498
  [i915#14544]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14544
  [i915#14586]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14586
  [i915#14702]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14702
  [i915#14888]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14888
  [i915#14896]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14896
  [i915#15073]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15073
  [i915#15102]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15102
  [i915#15104]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15104
  [i915#15106]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15106
  [i915#15132]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15132
  [i915#15243]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15243
  [i915#15314]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15314
  [i915#15329]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15329
  [i915#15330]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15330
  [i915#15342]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15342
  [i915#15365]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15365
  [i915#15403]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15403
  [i915#15458]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15458
  [i915#15459]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15459
  [i915#15460]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15460
  [i915#15479]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15479
  [i915#15492]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15492
  [i915#15643]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15643
  [i915#15678]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15678
  [i915#15709]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15709
  [i915#15725]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15725
  [i915#15733]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15733
  [i915#15739]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15739
  [i915#15778]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15778
  [i915#15804]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15804
  [i915#15815]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15815
  [i915#15816]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15816
  [i915#15865]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15865
  [i915#15867]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15867
  [i915#15871]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15871
  [i915#15944]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15944
  [i915#15948]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15948
  [i915#15949]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15949
  [i915#15989]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15989
  [i915#15990]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15990
  [i915#15991]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15991
  [i915#16079]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16079
  [i915#16081]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16081
  [i915#16084]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16084
  [i915#16109]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16109
  [i915#16112]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16112
  [i915#16119]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16119
  [i915#16182]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16182
  [i915#16184]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16184
  [i915#16226]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16226
  [i915#16348]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16348
  [i915#16361]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16361
  [i915#16386]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16386
  [i915#16420]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16420
  [i915#16451]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16451
  [i915#16464]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16464
  [i915#16471]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16471
  [i915#16490]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16490
  [i915#16600]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16600
  [i915#16644]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16644
  [i915#16867]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16867
  [i915#16904]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16904
  [i915#16914]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16914
  [i915#16990]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16990
  [i915#17031]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/17031
  [i915#17032]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/17032
  [i915#1769]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1769
  [i915#1825]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1825
  [i915#2433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2433
  [i915#2434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2434
  [i915#2527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2527
  [i915#2658]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2658
  [i915#280]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/280
  [i915#284]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/284
  [i915#2856]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2856
  [i915#3281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3281
  [i915#3282]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3282
  [i915#3297]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3297
  [i915#3539]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3539
  [i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555
  [i915#3582]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3582
  [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#4036]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4036
  [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#4213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4213
  [i915#4235]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4235
  [i915#4270]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4270
  [i915#4349]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4349
  [i915#4423]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4423
  [i915#4525]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4525
  [i915#4538]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4538
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
  [i915#4812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4812
  [i915#4817]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4817
  [i915#4818]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4818
  [i915#4839]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4839
  [i915#4852]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4852
  [i915#4860]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4860
  [i915#4880]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4880
  [i915#4885]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4885
  [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#5439]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5439
  [i915#5566]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5566
  [i915#5723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5723
  [i915#6095]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6095
  [i915#6113]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6113
  [i915#6187]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6187
  [i915#6301]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6301
  [i915#6334]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6334
  [i915#6344]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6344
  [i915#6412]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6412
  [i915#658]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/658
  [i915#6590]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6590
  [i915#6953]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6953
  [i915#7178]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7178
  [i915#7276]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7276
  [i915#7582]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7582
  [i915#7697]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7697
  [i915#7707]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7707
  [i915#7828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7828
  [i915#7862]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7862
  [i915#7984]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7984
  [i915#8228]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8228
  [i915#8381]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8381
  [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#8430]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8430
  [i915#8437]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8437
  [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#8808]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8808
  [i915#8809]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8809
  [i915#8810]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8810
  [i915#8812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8812
  [i915#8813]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8813
  [i915#8814]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8814
  [i915#8898]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8898
  [i915#9067]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9067
  [i915#9323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9323
  [i915#9683]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9683
  [i915#9688]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9688
  [i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732
  [i915#9808]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9808
  [i915#9809]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9809
  [i915#9812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9812
  [i915#9878]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9878
  [i915#9906]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9906
  [i915#9934]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9934


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

  * CI: CI-20190529 -> None
  * IGT: IGT_9098 -> IGTPW_15849
  * Piglit: piglit_4509 -> None

  CI-20190529: 20190529
  CI_DRM_19152: 0fb8d1900f1a6b9d21aadbfa5f784979b950bcf8 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_15849: 15849
  IGT_9098: 9098
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15849/index.html

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

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

* RE: [PATCH i-g-t 01/13] lib/i915/i915_dp: Add helpers for the allowed link configs debugfs
  2026-09-16  4:47 ` [PATCH i-g-t 01/13] lib/i915/i915_dp: Add helpers for the allowed link configs debugfs Kunal Joshi
@ 2026-09-21  8:37   ` S, Sowmiya
  0 siblings, 0 replies; 31+ messages in thread
From: S, Sowmiya @ 2026-09-21  8:37 UTC (permalink / raw)
  To: Joshi, Kunal1, igt-dev@lists.freedesktop.org, Joshi, Kunal1

Hi @Joshi, Kunal1,

> -----Original Message-----
> From: igt-dev <igt-dev-bounces@lists.freedesktop.org> On Behalf Of Kunal
> Joshi
> Sent: 16 September 2026 10:18
> To: igt-dev@lists.freedesktop.org
> Cc: Joshi, Kunal1 <kunal1.joshi@intel.com>
> Subject: [PATCH i-g-t 01/13] lib/i915/i915_dp: Add helpers for the allowed link
> configs debugfs
> 
> i915_dp_get_max_supported_rate() parses i915_dp_force_link_rate, which
> lists the source rates only. Writing back a rate from that list which the sink
> never advertised still succeeds, and the kernel silently clamps the effective rate,
> so a test built on it reports a rate the link was never trained at.
> 
> The kernel already exports the set the driver actually picks from, the
> intersection of the source rates, the rates the sink advertises and the current
> link limits, as space separated "<lanes>x<rate>" entries in the per-connector
> intel_dp_allowed_link_configs debugfs file.
> 
> Add i915_dp_get_allowed_link_configs() to read that set into an array of struct
> i915_dp_link_config, and
> i915_dp_has_allowed_link_configs_debugfs() so a test can skip on a kernel
> without the file.
> 
> i915_dp_get_next_lower_rate() already reads this file, but only for the rate;
> the lane count of each entry is discarded. Keep both, so callers that want a
> single rate do not have to handle the whole set.
> 
> The driver lists the configurations in its own preference order, which differs
> between SST and MST, so callers must treat the result as an unordered set.
> 
> Assisted-by: GitHub_Copilot:claude-opus-5
> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
LGTM,
Reviewed-by: Sowmiya S <sowmiya.s@intel.com>
> ---
>  lib/i915/i915_dp.c | 81
> ++++++++++++++++++++++++++++++++++++++++++++++
>  lib/i915/i915_dp.h | 17 ++++++++++
>  2 files changed, 98 insertions(+)
> 
> diff --git a/lib/i915/i915_dp.c b/lib/i915/i915_dp.c index 3d570f7cc..aba6aa8d5
> 100644
> --- a/lib/i915/i915_dp.c
> +++ b/lib/i915/i915_dp.c
> @@ -37,6 +37,12 @@
>  #include "igt_core.h"
>  #include "igt_kms.h"
> 
> +/*
> + * The driver allows at most 10 link rates over 3 lane counts, i.e. 30
> +entries
> + * of at most "4x2000000 ", so 1024 has plenty of room to spare.
> + */
> +#define LINK_CONFIGS_BUF_SIZE	1024
> +
>  /**
>   * i915_dp_parse_marked_value:
>   * @buf: Buffer containing the content to parse @@ -391,6 +397,81 @@ int
> i915_dp_get_max_supported_rate(int drm_fd, const igt_output_t *output)
>  	return max_rate;
>  }
> 
> +/**
> + * i915_dp_has_allowed_link_configs_debugfs:
> + * @drm_fd: A drm file descriptor
> + * @output: Target output
> + *
> + * Checks if the allowed link configs debugfs is available for a
> +specific
> + * output.
> + *
> + * Returns: True if the debugfs is available, false otherwise  */ bool
> +i915_dp_has_allowed_link_configs_debugfs(int drm_fd, igt_output_t
> +*output) {
> +	char buf[LINK_CONFIGS_BUF_SIZE];
> +
> +	return igt_debugfs_read_connector_file(drm_fd,
> igt_output_name(output),
> +					       "intel_dp_allowed_link_configs",
> +					       buf, sizeof(buf)) == 0;
> +}
> +
> +/**
> + * i915_dp_get_allowed_link_configs:
> + * @drm_fd: A drm file descriptor
> + * @output: Target output
> + * @configs: Array to store the allowed link configurations in
> + * @max_configs: Number of entries in @configs
> + *
> + * Read the link configurations the driver currently allows on @output, i.e.
> + * the intersection of the source rates, the rates the sink advertises
> +and the
> + * current link limits.
> + *
> + * The driver lists them in the order it would pick them, which differs
> +between
> + * SST and MST and depends on earlier link training results, so callers
> +have to
> + * treat the result as an unordered set.
> + *
> + * Returns: The number of configurations stored in @configs  */ int
> +i915_dp_get_allowed_link_configs(int drm_fd, igt_output_t *output,
> +				     struct i915_dp_link_config *configs,
> +				     int max_configs)
> +{
> +	char buf[LINK_CONFIGS_BUF_SIZE];
> +	char *token, *saveptr = NULL;
> +	int count = 0;
> +	int res;
> +
> +	res = igt_debugfs_read_connector_file(drm_fd,
> igt_output_name(output),
> +					      "intel_dp_allowed_link_configs",
> +					      buf, sizeof(buf));
> +	igt_assert_f(res == 0, "Unable to read
> %s/intel_dp_allowed_link_configs\n",
> +		     igt_output_name(output));
> +
> +	/* An empty set of allowed configurations reads back as a bare newline.
> */
> +	buf[strcspn(buf, "\n")] = '\0';
> +
> +	for (token = strtok_r(buf, " ", &saveptr); token;
> +	     token = strtok_r(NULL, " ", &saveptr)) {
> +		int lane_count, link_rate;
> +		char extra;
> +
> +		igt_assert_f(count < max_configs,
> +			     "More than %d link configs on %s\n",
> +			     max_configs, igt_output_name(output));
> +		igt_assert_f(sscanf(token, "%dx%d%c", &lane_count,
> &link_rate,
> +				    &extra) == 2 && lane_count > 0 &&
> +			     link_rate > 0,
> +			     "Failed to parse link config '%s'\n", token);
> +
> +		configs[count].lane_count = lane_count;
> +		configs[count].link_rate = link_rate;
> +		count++;
> +	}
> +
> +	return count;
> +}
> +
>  /**
>   * i915_dp_get_next_lower_rate:
>   * @drm_fd: A drm file descriptor
> diff --git a/lib/i915/i915_dp.h b/lib/i915/i915_dp.h index
> 5d17713e2..c818b3937 100644
> --- a/lib/i915/i915_dp.h
> +++ b/lib/i915/i915_dp.h
> @@ -10,6 +10,19 @@
>  /* DP link rates are in 10 kbit/s units; UHBR10 is 10 Gbps. */
>  #define I915_DP_UHBR10_LINK_RATE	1000000
> 
> +/**
> + * struct i915_dp_link_config:
> + * @lane_count: Number of lanes
> + * @link_rate: Link rate in 10 kbit/s units
> + *
> + * A single link configuration, as listed by the
> +intel_dp_allowed_link_configs
> + * connector debugfs file.
> + */
> +struct i915_dp_link_config {
> +	int lane_count;
> +	int link_rate;
> +};
> +
>  /**
>   * i915_dp_is_uhbr_rate:
>   * @link_rate: DP link rate in 10 kbit/s units, as reported by the @@ -40,6
> +53,10 @@ void i915_dp_reset_link_params(int drm_fd, igt_output_t
> *output);  void i915_dp_set_link_params(int drm_fd, igt_output_t *output,
>  			     const char *link_rate, const char *lane_count);  int
> i915_dp_get_max_supported_rate(int drm_fd, const igt_output_t *output);
> +bool i915_dp_has_allowed_link_configs_debugfs(int drm_fd, igt_output_t
> +*output); int i915_dp_get_allowed_link_configs(int drm_fd, igt_output_t
> *output,
> +				     struct i915_dp_link_config *configs,
> +				     int max_configs);
>  int i915_dp_get_next_lower_rate(int drm_fd, igt_output_t *output, int rate);
> 
>  #endif
> --
> 2.25.1


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

* RE: [PATCH i-g-t 02/13] tests/intel/kms_dp_link_training: Use the UHBR helpers from lib
  2026-09-16  4:47 ` [PATCH i-g-t 02/13] tests/intel/kms_dp_link_training: Use the UHBR helpers from lib Kunal Joshi
@ 2026-09-21  8:38   ` S, Sowmiya
  0 siblings, 0 replies; 31+ messages in thread
From: S, Sowmiya @ 2026-09-21  8:38 UTC (permalink / raw)
  To: Joshi, Kunal1, igt-dev@lists.freedesktop.org, Joshi, Kunal1

Hi @Joshi, Kunal1,

> -----Original Message-----
> From: igt-dev <igt-dev-bounces@lists.freedesktop.org> On Behalf Of Kunal
> Joshi
> Sent: 16 September 2026 10:18
> To: igt-dev@lists.freedesktop.org
> Cc: Joshi, Kunal1 <kunal1.joshi@intel.com>
> Subject: [PATCH i-g-t 02/13] tests/intel/kms_dp_link_training: Use the UHBR
> helpers from lib
> 
> The test defines its own UHBR_LINK_RATE and open codes the UHBR
> comparison, while lib/i915/i915_dp.h already has
> I915_DP_UHBR10_LINK_RATE and i915_dp_is_uhbr_rate() for exactly that.
> 
> Drop the local define and use the lib helpers.
> 
> There should be no functional changes here.
> 
> Assisted-by: GitHub_Copilot:claude-opus-5
> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
This is a refactoring patch .LGTM,
Reviewed-by: Sowmiya S <sowmiya.s@intel.com>
> ---
>  tests/intel/kms_dp_link_training.c | 11 ++---------
>  1 file changed, 2 insertions(+), 9 deletions(-)
> 
> diff --git a/tests/intel/kms_dp_link_training.c
> b/tests/intel/kms_dp_link_training.c
> index f67fdf59d..2d5241246 100644
> --- a/tests/intel/kms_dp_link_training.c
> +++ b/tests/intel/kms_dp_link_training.c
> @@ -27,11 +27,6 @@
>  #include "intel/kms_joiner_helper.h"
>  #include "intel/kms_mst_helper.h"
> 
> -/*
> - * DP Spec defines 10, 13.5, and 20 Gbps as UHBR.
> - * Anything below that is considered NON-UHBR.
> - */
> -#define UHBR_LINK_RATE	1000000
>  #define RETRAIN_COUNT	1
> 
>  typedef struct {
> @@ -217,7 +212,7 @@ static bool run_link_rate_test(data_t *data, bool mst,
> bool uhbr)
>  	max_lane_count = i915_dp_get_max_lane_count(data->drm_fd, data-
> >output);
> 
>  	/* Check sink supports uhbr or not */
> -	is_uhbr_output = (max_link_rate >= UHBR_LINK_RATE);
> +	is_uhbr_output = i915_dp_is_uhbr_rate(max_link_rate);
>  	if ((uhbr && !is_uhbr_output) || (!uhbr && is_uhbr_output)) {
>  		igt_info("Test expects %s, but output %s is %s.\n",
>  			 uhbr ? "UHBR" : "NON-UHBR",
> @@ -244,9 +239,7 @@ static bool run_link_rate_test(data_t *data, bool mst,
> bool uhbr)
>  	igt_info("Current link rate is %d\n", current_link_rate);
>  	igt_assert_f(current_link_rate == max_link_rate,
>  		     "Link training did not succeed at max link rate.\n");
> -	igt_assert_f(is_uhbr_output ?
> -		     current_link_rate >= UHBR_LINK_RATE :
> -		     current_link_rate < UHBR_LINK_RATE,
> +	igt_assert_f(i915_dp_is_uhbr_rate(current_link_rate) ==
> +is_uhbr_output,
>  		     is_uhbr_output ? "Link training didn't happen at uhbr rates"
> :
>  		     "Link training didn't happen at non-uhbr rates");
>  	igt_info("----------------------------------------------------\n");
> --
> 2.25.1


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

* RE: [PATCH i-g-t 04/13] tests/intel/kms_dp_link_training: Check the config survived training
  2026-09-16  4:47 ` [PATCH i-g-t 04/13] tests/intel/kms_dp_link_training: Check the config survived training Kunal Joshi
@ 2026-09-22  5:25   ` S, Sowmiya
  0 siblings, 0 replies; 31+ messages in thread
From: S, Sowmiya @ 2026-09-22  5:25 UTC (permalink / raw)
  To: Joshi, Kunal1, igt-dev@lists.freedesktop.org, Joshi, Kunal1

Hi @Joshi, Kunal1,

> -----Original Message-----
> From: igt-dev <igt-dev-bounces@lists.freedesktop.org> On Behalf Of Kunal
> Joshi
> Sent: 16 September 2026 10:18
> To: igt-dev@lists.freedesktop.org
> Cc: Joshi, Kunal1 <kunal1.joshi@intel.com>
> Subject: [PATCH i-g-t 04/13] tests/intel/kms_dp_link_training: Check the config
> survived training
> 
> The test asserts that the current link rate equals the rate it forced.
> Both values come from the same debugfs file, which the kernel prints from
> intel_dp->link_rate, the rate the driver asked the sink for, not the rate the link
> ended up running at. A link that failed training and fell back still reads back the
> forced value, so the assertion passes on a link that never trained. The FIXME in
> the test says as much.
> 
> link-status does not close the gap either. With both the rate and the lane count
> forced there is nothing to fall back to, so the driver never reaches
> intel_dp_queue_modeset_retry_for_link() and link-status stays GOOD on a link
> that failed for good. What it does instead is mark retraining disabled, which
> i915_dp_link_retrain_disabled exposes. Assert on that.
> 
> Wait for the verdict rather than reading it once. The driver clears the forced
> retrain flag when the retrain modeset starts and only then queues its automatic
> retrain, so when the test's poll for the flag completes the first failure is still in
> flight. Recovery ends either with a trained link or with retraining disabled, so
> poll for the whole recovery timeout before calling the link trained.
> 
> Read the state before the next force: forcing a rate or a lane count runs
> intel_dp_reset_link_params(), which resets the recovery state and would mask
> the failure.
> 
> Drop the FIXME.
> 
> Note this can newly fail a link whose advertised maximum never trained.
> That is the bug the FIXME was placed for.
> 
> Assisted-by: GitHub_Copilot:claude-opus-5
> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
> ---
>  tests/intel/kms_dp_link_training.c | 57 ++++++++++++++++++++++++++++--
>  1 file changed, 55 insertions(+), 2 deletions(-)
> 
> diff --git a/tests/intel/kms_dp_link_training.c
> b/tests/intel/kms_dp_link_training.c
> index 595d78d98..b2d686f28 100644
> --- a/tests/intel/kms_dp_link_training.c
> +++ b/tests/intel/kms_dp_link_training.c
> @@ -29,6 +29,13 @@
> 
>  #define RETRAIN_COUNT	1
> 
> +/*
> + * How long the driver's link recovery is given to reach a verdict, in seconds.
> + * The automatic retrain is queued without a delay, so this only has to
> +cover
> + * one retrain and the fallback selection that follows it.
> + */
> +#define LINK_RECOVERY_TIMEOUT	5.0
> +
>  typedef struct {
>  	int drm_fd;
>  	uint32_t devid;
> @@ -99,9 +106,46 @@ static void assert_link_status_good(data_t *data, bool
> mst)
>  	}
>  }
> 
> +/*
> + * assert_link_recovery_idle - Let the driver's link recovery reach a
> +verdict
> + * and check it had nothing to recover.
> + *
> + * A failed training is not visible the moment the forced retrain flag clears:
> + * the driver clears that flag when the retrain modeset starts and only
> +then
> + * queues its automatic retrain, so the first failure is still in
> +flight. Once
> + * the automatic retrain is used up the driver looks for a
> +configuration to
> + * fall back to, and with both the rate and the lane count forced there
> +is
> + * none. It then marks retraining disabled, which is the one place a
> +link that
> + * failed for good becomes visible.
> + *
> + * Poll for that verdict rather than reading it once, and give recovery
> +the
> + * full timeout to reach it before calling the link trained.
> + */
> +static void assert_link_recovery_idle(data_t *data,
> +				      const struct i915_dp_link_config *config) {
> +	struct timespec start, now;
> +	double elapsed;
> +
> +	clock_gettime(CLOCK_MONOTONIC, &start);
> +
> +	do {
> +		igt_assert_f(!i915_dp_get_link_retrain_disabled(data-
> >drm_fd,
> +								data-
> >output),
> +			     "Link training at %d lanes, rate %d was given up
> on.\n",
> +			     config->lane_count, config->link_rate);
> +
> +		usleep(200 * 1000);
> +
> +		clock_gettime(CLOCK_MONOTONIC, &now);
> +		elapsed = (now.tv_sec - start.tv_sec) +
> +			(now.tv_nsec - start.tv_nsec) / 1e9;
> +	} while (elapsed < LINK_RECOVERY_TIMEOUT); }
The final sleep's outcome is never read: the last assert happens at ~4.8 s and the last 200 ms is dead time. Either sleep first, or add one final check after the loop. As written the effective observation window is LINK_RECOVERY_TIMEOUT - interval, which contradicts "give recovery the full timeout".
> +
>  /*
>   * train_link_config - Force one link configuration, re-establish the link and
> - * check that the configuration took effect.
> + * check that the configuration took effect and survived training.
>   */
>  static void train_link_config(data_t *data, bool mst,
>  			      const struct i915_dp_link_config *config) @@ -
> 127,6 +171,16 @@ static void train_link_config(data_t *data, bool mst,
>  	igt_info("Current link rate is %d\n", current_link_rate);
>  	igt_assert_f(current_link_rate == config->link_rate,
>  		     "Link training did not succeed at the forced link rate.\n");
> +
> +	/*
> +	 * The link parameters read back above are the ones the driver asked
> +	 * the sink for, not the ones the link ended up running at, so ask the
> +	 * driver whether it had to recover the link after training it.
> +	 *
> +	 * This has to happen before the next force: forcing a rate or a lane
> +	 * count resets the recovery state, which would mask the failure.
> +	 */
> +	assert_link_recovery_idle(data, config);
assert_link_recovery_idle() does not assert idleness - it asserts that retraining was not given up on. assert_link_not_given_up() or assert_link_retrain_not_disabled() reads truer.
Thanks,
Sowmiya
>  }
> 
>  /*
> @@ -222,7 +276,6 @@ static bool run_link_rate_test(data_t *data, bool mst,
> bool uhbr)
>  						   1.0, 20.0), 0);
>  	assert_link_status_good(data, mst);
> 
> -	/* FIXME : Driver may lie max link rate or max lane count */
>  	/* Read max_link_rate and max_lane_count */
>  	config.link_rate = i915_dp_get_max_link_rate(data->drm_fd, data-
> >output);
>  	config.lane_count = i915_dp_get_max_lane_count(data->drm_fd,
> data->output);
> --
> 2.25.1


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

* RE: [PATCH i-g-t 03/13] tests/intel/kms_dp_link_training: Extract train_link_config()
  2026-09-16  4:47 ` [PATCH i-g-t 03/13] tests/intel/kms_dp_link_training: Extract train_link_config() Kunal Joshi
@ 2026-09-22 11:51   ` S, Sowmiya
  0 siblings, 0 replies; 31+ messages in thread
From: S, Sowmiya @ 2026-09-22 11:51 UTC (permalink / raw)
  To: Joshi, Kunal1, igt-dev@lists.freedesktop.org, Joshi, Kunal1

Hi @Joshi, Kunal1,

> -----Original Message-----
> From: igt-dev <igt-dev-bounces@lists.freedesktop.org> On Behalf Of Kunal
> Joshi
> Sent: 16 September 2026 10:18
> To: igt-dev@lists.freedesktop.org
> Cc: Joshi, Kunal1 <kunal1.joshi@intel.com>
> Subject: [PATCH i-g-t 03/13] tests/intel/kms_dp_link_training: Extract
> train_link_config()
> 
> The force and retrain sequence is written inline in run_link_rate_test(), which
> makes it impossible to run for more than one configuration.
> 
> Extract it into train_link_config(), taking the configuration to train as a struct
> i915_dp_link_config. Prep for training more than the maximum.
> 
> While here, stop passing a drmModePropertyPtr to kmstest_get_property() in
> assert_link_status_good(). That function returns whether it found the property
> and allocates the out parameter on success; the existing call ignores the return
> value, asserts on a possibly uninitialised value and leaks the property on every
> call. Pass NULL and check the return. That also lets the SST and MST branches
> share one loop.
> 
> The trailing UHBR assertion goes away with the move. It could not fire:
> the rate is asserted to equal the forced rate, and the forced rate was already
> classified as UHBR or not a few lines above.
> 
> There should be no functional changes here.
> 
> Assisted-by: GitHub_Copilot:claude-opus-5
> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
LGTM,
Reviewed-by: Sowmiya S <sowmiya.s@intel.com>
> ---
>  tests/intel/kms_dp_link_training.c | 97 +++++++++++++++---------------
>  1 file changed, 48 insertions(+), 49 deletions(-)
> 
> diff --git a/tests/intel/kms_dp_link_training.c
> b/tests/intel/kms_dp_link_training.c
> index 2d5241246..595d78d98 100644
> --- a/tests/intel/kms_dp_link_training.c
> +++ b/tests/intel/kms_dp_link_training.c
> @@ -72,9 +72,7 @@ static int check_condition_with_timeout(int drm_fd,
> igt_output_t *output,  static void assert_link_status_good(data_t *data, bool
> mst)  {
>  	igt_output_t *outputs[IGT_MAX_PIPES];
> -	uint32_t link_status_prop_id;
>  	uint64_t link_status_value;
> -	drmModePropertyPtr link_status_prop;
>  	int count = 0;
>  	int i;
> 
> @@ -83,32 +81,54 @@ static void assert_link_status_good(data_t *data, bool
> mst)
>  								 &data-
> >display, data->output,
>  								 outputs,
> &count) == 0,
>  								 "Unable to
> find MST outputs\n");
> -
> -		for (i = 0; i < count; i++) {
> -			kmstest_get_property(data->drm_fd,
> -					     outputs[i]->config.connector-
> >connector_id,
> -					     DRM_MODE_OBJECT_CONNECTOR,
> -					     "link-status",
> -					     &link_status_prop_id,
> -					     &link_status_value,
> -					     &link_status_prop);
> -
> -			igt_assert_eq(link_status_value,
> -				      DRM_MODE_LINK_STATUS_GOOD);
> -		}
>  	} else {
> -		kmstest_get_property(data->drm_fd,
> -				     data->output->config.connector-
> >connector_id,
> -				     DRM_MODE_OBJECT_CONNECTOR,
> -				     "link-status",
> -				     &link_status_prop_id,
> -				     &link_status_value,
> -				     &link_status_prop);
> +		outputs[0] = data->output;
> +		count = 1;
> +	}
> +
> +	for (i = 0; i < count; i++) {
> +		igt_assert_f(kmstest_get_property(data->drm_fd,
> +						  outputs[i]->config.connector-
> >connector_id,
> +
> DRM_MODE_OBJECT_CONNECTOR,
> +						  "link-status", NULL,
> +						  &link_status_value, NULL),
> +			     "No link-status property on %s\n",
> +			     igt_output_name(outputs[i]));
> 
>  		igt_assert_eq(link_status_value,
> DRM_MODE_LINK_STATUS_GOOD);
>  	}
>  }
> 
> +/*
> + * train_link_config - Force one link configuration, re-establish the
> +link and
> + * check that the configuration took effect.
> + */
> +static void train_link_config(data_t *data, bool mst,
> +			      const struct i915_dp_link_config *config) {
> +	int current_link_rate;
> +	char rate_str[32];
> +	char lane_str[32];
> +
> +	snprintf(rate_str, sizeof(rate_str), "%d", config->link_rate);
> +	snprintf(lane_str, sizeof(lane_str), "%d", config->lane_count);
> +	igt_info("Training %s at %d lanes, rate %d\n",
> +		 igt_output_name(data->output), config->lane_count,
> +		 config->link_rate);
> +
> +	i915_dp_set_link_params(data->drm_fd, data->output, rate_str,
> lane_str);
> +	i915_dp_force_link_retrain(data->drm_fd, data->output,
> RETRAIN_COUNT);
> +	igt_assert_eq(check_condition_with_timeout(data->drm_fd, data-
> >output,
> +
> i915_dp_get_pending_retrain,
> +						   1.0, 20.0), 0);
> +	assert_link_status_good(data, mst);
> +
> +	current_link_rate = i915_dp_get_current_link_rate(data->drm_fd,
> data->output);
> +	igt_info("Current link rate is %d\n", current_link_rate);
> +	igt_assert_f(current_link_rate == config->link_rate,
> +		     "Link training did not succeed at the forced link rate.\n"); }
> +
>  /*
>   * setup_planes_fbs - Create solid-color FBs and attach them to the primary
> plane.
>   */
> @@ -188,12 +208,8 @@ static void do_modeset(data_t *data, bool mst)
>   */
>  static bool run_link_rate_test(data_t *data, bool mst, bool uhbr)  {
> -	int max_link_rate;
> -	int max_lane_count;
> -	int current_link_rate;
> +	struct i915_dp_link_config config;
>  	bool is_uhbr_output;
> -	char rate_str[32];
> -	char lane_str[32];
> 
>  	igt_display_reset(&data->display);
>  	i915_dp_reset_link_params(data->drm_fd, data->output); @@ -208,12
> +224,12 @@ static bool run_link_rate_test(data_t *data, bool mst, bool uhbr)
> 
>  	/* FIXME : Driver may lie max link rate or max lane count */
>  	/* Read max_link_rate and max_lane_count */
> -	max_link_rate = i915_dp_get_max_link_rate(data->drm_fd, data-
> >output);
> -	max_lane_count = i915_dp_get_max_lane_count(data->drm_fd, data-
> >output);
> +	config.link_rate = i915_dp_get_max_link_rate(data->drm_fd, data-
> >output);
> +	config.lane_count = i915_dp_get_max_lane_count(data->drm_fd,
> +data->output);
> 
>  	/* Check sink supports uhbr or not */
> -	is_uhbr_output = i915_dp_is_uhbr_rate(max_link_rate);
> -	if ((uhbr && !is_uhbr_output) || (!uhbr && is_uhbr_output)) {
> +	is_uhbr_output = i915_dp_is_uhbr_rate(config.link_rate);
> +	if (uhbr != is_uhbr_output) {
>  		igt_info("Test expects %s, but output %s is %s.\n",
>  			 uhbr ? "UHBR" : "NON-UHBR",
>  			 data->output->name,
> @@ -222,26 +238,9 @@ static bool run_link_rate_test(data_t *data, bool mst,
> bool uhbr)
>  		return false;
>  	}
> 
> -	snprintf(rate_str, sizeof(rate_str), "%d", max_link_rate);
> -	snprintf(lane_str, sizeof(lane_str), "%d", max_lane_count);
> -	igt_info("Max link rate for %s is %s, lane count = %d\n",
> -		 data->output->name, rate_str, max_lane_count);
> -
>  	/* Force retrain at max link params */
> -	i915_dp_set_link_params(data->drm_fd, data->output, rate_str,
> lane_str);
> -	i915_dp_force_link_retrain(data->drm_fd, data->output,
> RETRAIN_COUNT);
> -	igt_assert_eq(check_condition_with_timeout(data->drm_fd, data-
> >output,
> -
> i915_dp_get_pending_retrain,
> -						   1.0, 20.0), 0);
> -	assert_link_status_good(data, mst);
> +	train_link_config(data, mst, &config);
> 
> -	current_link_rate = i915_dp_get_current_link_rate(data->drm_fd,
> data->output);
> -	igt_info("Current link rate is %d\n", current_link_rate);
> -	igt_assert_f(current_link_rate == max_link_rate,
> -		     "Link training did not succeed at max link rate.\n");
> -	igt_assert_f(i915_dp_is_uhbr_rate(current_link_rate) ==
> is_uhbr_output,
> -		     is_uhbr_output ? "Link training didn't happen at uhbr rates"
> :
> -		     "Link training didn't happen at non-uhbr rates");
>  	igt_info("----------------------------------------------------\n");
>  	return true;
>  }
> --
> 2.25.1


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

* RE: [PATCH i-g-t 05/13] tests/intel/kms_dp_link_training: Drive the smallest mode the sink offers
  2026-09-16  4:47 ` [PATCH i-g-t 05/13] tests/intel/kms_dp_link_training: Drive the smallest mode the sink offers Kunal Joshi
@ 2026-09-22 11:59   ` S, Sowmiya
  0 siblings, 0 replies; 31+ messages in thread
From: S, Sowmiya @ 2026-09-22 11:59 UTC (permalink / raw)
  To: Joshi, Kunal1, igt-dev@lists.freedesktop.org, Joshi, Kunal1

Hi @Joshi, Kunal1,

> -----Original Message-----
> From: igt-dev <igt-dev-bounces@lists.freedesktop.org> On Behalf Of Kunal
> Joshi
> Sent: 16 September 2026 10:18
> To: igt-dev@lists.freedesktop.org
> Cc: Joshi, Kunal1 <kunal1.joshi@intel.com>
> Subject: [PATCH i-g-t 05/13] tests/intel/kms_dp_link_training: Drive the
> smallest mode the sink offers
> 
> The test modesets the output's preferred mode, which on a modern monitor
> needs most of the link. The driver picks the lowest configuration that carries
> the mode, so a large mode leaves most of the link configurations below the
> threshold where they can be used at all.
> 
> Override the smallest mode the sink offers instead. That keeps the largest
> number of configurations usable, and it stays out of the compressed regime,
> where the bpp the driver picks rather than the link configuration absorbs the
> difference.
> 
> The override is cleared by the igt_display_reset() each run starts with, so it
> needs no explicit teardown.
> 
> Prep for training every allowed configuration.
> 
> Assisted-by: GitHub_Copilot:claude-opus-5
> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
LGTM,
Reviewed-by: Sowmiya S <sowmiya.s@intel.com>  
> ---
>  tests/intel/kms_dp_link_training.c | 23 +++++++++++++++++++++++
>  1 file changed, 23 insertions(+)
> 
> diff --git a/tests/intel/kms_dp_link_training.c
> b/tests/intel/kms_dp_link_training.c
> index b2d686f28..6a174da88 100644
> --- a/tests/intel/kms_dp_link_training.c
> +++ b/tests/intel/kms_dp_link_training.c
> @@ -183,6 +183,25 @@ static void train_link_config(data_t *data, bool mst,
>  	assert_link_recovery_idle(data, config);  }
> 
> +/*
> + * override_lowest_mode - Drive the mode with the lowest pixel clock,
> +so that
> + * the largest number of link configurations can carry it.
> + */
> +static void override_lowest_mode(data_t *data, igt_output_t *output) {
> +	drmModeConnector *connector = output->config.connector;
> +	drmModeModeInfo *mode = NULL;
> +	int i;
> +
> +	for (i = 0; i < connector->count_modes; i++)
> +		if (!mode || connector->modes[i].clock < mode->clock)
> +			mode = &connector->modes[i];
> +
> +	igt_assert_f(mode, "No mode on output %s\n",
> igt_output_name(output));
> +
> +	igt_output_override_mode(output, mode); }
> +
>  /*
>   * setup_planes_fbs - Create solid-color FBs and attach them to the primary
> plane.
>   */
> @@ -222,6 +241,7 @@ static void do_modeset(data_t *data, bool mst)
>  	int n_pipes = 0;
>  	int out_count = 0;
>  	igt_crtc_t *crtc;
> +	int i;
> 
>  	for_each_crtc(&data->display, crtc) {
>  		valid_pipes_mask |= BIT(crtc->hardware_pipe); @@ -241,6
> +261,9 @@ static void do_modeset(data_t *data, bool mst)
> 
>  	igt_assert_f(out_count > 0, "Require at least one output\n");
> 
> +	for (i = 0; i < out_count; i++)
> +		override_lowest_mode(data, outs[i]);
> +
>  	igt_set_all_master_pipes_for_platform(&data->display,
> &master_pipes_mask);
> 
>  	igt_assert_f(igt_assign_pipes_for_outputs(data->drm_fd,
> --
> 2.25.1


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

* RE: [PATCH i-g-t 06/13] tests/intel/kms_dp_link_training: Train every allowed link config
  2026-09-16  4:47 ` [PATCH i-g-t 06/13] tests/intel/kms_dp_link_training: Train every allowed link config Kunal Joshi
@ 2026-09-22 13:51   ` S, Sowmiya
  0 siblings, 0 replies; 31+ messages in thread
From: S, Sowmiya @ 2026-09-22 13:51 UTC (permalink / raw)
  To: Joshi, Kunal1, igt-dev@lists.freedesktop.org, Joshi, Kunal1

Hi @Joshi, Kunal1,

> -----Original Message-----
> From: igt-dev <igt-dev-bounces@lists.freedesktop.org> On Behalf Of Kunal
> Joshi
> Sent: 16 September 2026 10:18
> To: igt-dev@lists.freedesktop.org
> Cc: Joshi, Kunal1 <kunal1.joshi@intel.com>
> Subject: [PATCH i-g-t 06/13] tests/intel/kms_dp_link_training: Train every
> allowed link config
> 
> Currently test trains one configuration per output, the maximum. Everything
> below it which is what a bandwidth constrained modeset and every fallback
> actually use and currently is never trained.
> 
> Train every configuration in intel_dp_allowed_link_configs that belongs to the
> subtest's encoding class, as one dynamic subtest each, named <connector>-
> <lanes>x<rate>. Enumerate with the forced parameters reset, or the set being
> read is the forced one rather than the one the driver would pick from.
> 
> Bring the link up inside the dynamic subtest rather than once per output. The
> reset, the modeset, the retrain poll and the link-status check can all fail, and
> igt_subtest_with_dynamic() does not allow explicit failure in the container:
> igt_fail() asserts on it and aborts the whole test instead of yielding a dynamic
> subtest result.
> 
> A configuration too narrow to carry the modes is skipped, not failed. A forced
> retrain goes through a modeset commit, so such a configuration makes the
> retrain fail and the driver queue a modeset retry, which shows up as a BAD link-
> status, a correct driver rejection that must not be reported as a link training
> failure. Derive the floor from the modes' own bandwidth requirement rather
> than from the configuration the driver picks when nothing is forced: for MST,
> and for eDP after a fallback, the driver configures the maximum link bandwidth
> regardless of the mode i.e "For MST we always configure max link bw" in
> intel_dp_compute_config_link_bpp_limits(), so using its unforced choice as
> the floor would mark every other configuration unreachable and quietly
> reduce MST back to training one configuration.
> 
> Sum the floor over every stream driven over the link. The modeset drives all of
> an MST topology's streams, so the link carries all of them; a single stream's
> requirement would let a configuration that cannot carry the aggregate payload
> through and turn a correct driver rejection into a link training failure.
> 
> The floor assumes uncompressed 8 bpc and so overestimates what the modes
> need, which biases a borderline configuration towards skipping rather than
> failing. Note also that 8b/10b MST runs at 78.75% efficiency rather than 80%,
> because of the 1-in-64 MTPH overhead that
> drm_dp_bw_channel_coding_efficiency() deliberately does not account for;
> using 80% there overestimates the available bandwidth and turns a correct
> rejection into a failure.
> 
> Clear link-status before every attempt. It latches BAD when the driver falls back
> and only userspace can clear it, so without this a single fallback anywhere in
> the run poisons every later assertion. Assert the forced lane count took effect
> too, which only becomes meaningful now that the configurations differ in lane
> count. Reset the forced parameters after every configuration, since they
> otherwise survive a sink disconnect.
> 
> Require the allowed link configs debugfs, so that a kernel too old to have it
> skips rather than training nothing.
> 
> The subtest names and their scope are unchanged.
> 
> Assisted-by: GitHub_Copilot:claude-opus-5
> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
> ---
>  tests/intel/kms_dp_link_training.c | 193 +++++++++++++++++++++++++----
>  1 file changed, 167 insertions(+), 26 deletions(-)
> 
> diff --git a/tests/intel/kms_dp_link_training.c
> b/tests/intel/kms_dp_link_training.c
> index 6a174da88..71531e8dc 100644
> --- a/tests/intel/kms_dp_link_training.c
> +++ b/tests/intel/kms_dp_link_training.c
> @@ -29,6 +29,9 @@
> 
>  #define RETRAIN_COUNT	1
> 
> +/* The driver allows at most 10 link rates over 3 lane counts. */
> +#define MAX_LINK_CONFIGS	32
> +
>  /*
>   * How long the driver's link recovery is given to reach a verdict, in seconds.
>   * The automatic retrain is queued without a delay, so this only has to cover
> @@ -106,6 +109,103 @@ static void assert_link_status_good(data_t *data,
> bool mst)
>  	}
>  }
> 
> +/*
> + * set_link_status_good - Clear a latched BAD link-status.
> + *
> + * The property latches BAD when the driver falls back and only
> +userspace can
> + * clear it, so without clearing it before every attempt a single
> +fallback
> + * anywhere in the run poisons every later assertion.
> + */
> +static void set_link_status_good(data_t *data, bool mst) {
> +	igt_output_t *outputs[IGT_MAX_PIPES];
> +	int count = 0;
> +	int i;
> +
> +	if (mst) {
> +		igt_assert_f(igt_find_all_mst_output_in_topology(data-
> >drm_fd,
> +								 &data-
> >display, data->output,
> +								 outputs,
> &count) == 0,
> +								 "Unable to
> find MST outputs\n");
> +	} else {
> +		outputs[0] = data->output;
> +		count = 1;
> +	}
> +
> +	for (i = 0; i < count; i++)
> +		igt_output_set_prop_value(outputs[i],
> IGT_CONNECTOR_LINK_STATUS,
> +					  DRM_MODE_LINK_STATUS_GOOD);
> +
> +	igt_display_commit2(&data->display, COMMIT_ATOMIC); }
> +
> +/*
> + * link_config_data_rate - Data rate a link configuration carries, in
> + * 10 kbit/s units.
> + *
> + * Channel coding efficiency is in 1ppm units, matching the kernel's
> + * drm_dp_bw_channel_coding_efficiency(): 96.71% for 128b/132b and 80%
> +for
> + * 8b/10b. 8b/10b MST is 78.75% instead, because of the 1-in-64 MTPH
> +overhead
> + * that helper deliberately does not account for. Using 80% there
> +overestimates
> + * the available bandwidth and turns a correct driver rejection into a failure.
> + */
> +static int link_config_data_rate(const struct i915_dp_link_config *config,
> +				 bool mst)
> +{
> +	uint64_t symbol_rate = (uint64_t)config->link_rate * config-
> >lane_count;
> +	int efficiency;
> +
> +	if (i915_dp_is_uhbr_rate(config->link_rate))
> +		efficiency = 967100;
> +	else
> +		efficiency = mst ? 787500 : 800000;
> +
> +	return symbol_rate * efficiency / 1000000; }
> +
> +/*
> + * mode_data_rate - Data rate a mode needs, in 10 kbit/s units.
> + *
> + * Uncompressed 8 bpc, which is what the smallest mode of a DP sink is
> +driven
> + * at. Deliberately pessimistic: overestimating what the mode needs
> +makes a
> + * borderline configuration skip rather than fail.
> + */
> +static int mode_data_rate(const drmModeModeInfo *mode) {
> +	return DIV_ROUND_UP(mode->clock * 24, 10); }
> +
> +/*
> + * link_min_data_rate - Data rate the link has to carry, in 10 kbit/s units.
> + *
> + * do_modeset() drives every stream of an MST topology, so the link
> +carries all
> + * of them at once. Summing them is what tells a configuration that
> +cannot
> + * carry the whole payload apart from one that can, which a single
> +stream's
> + * requirement would let through and turn into a false link training failure.
> + */
> +static int link_min_data_rate(data_t *data, bool mst) {
> +	igt_output_t *outputs[IGT_MAX_PIPES];
> +	int count = 0;
> +	int rate = 0;
> +	int i;
> +
> +	if (mst) {
> +		igt_assert_f(igt_find_all_mst_output_in_topology(data-
> >drm_fd,
> +								 &data-
> >display, data->output,
> +								 outputs,
> &count) == 0,
> +								 "Unable to
> find MST outputs\n");
> +	} else {
> +		outputs[0] = data->output;
> +		count = 1;
> +	}
> +
> +	for (i = 0; i < count; i++)
> +		rate += mode_data_rate(igt_output_get_mode(outputs[i]));
> +
> +	return rate;
> +}
> +
>  /*
>   * assert_link_recovery_idle - Let the driver's link recovery reach a verdict
>   * and check it had nothing to recover.
> @@ -160,6 +260,8 @@ static void train_link_config(data_t *data, bool mst,
>  		 igt_output_name(data->output), config->lane_count,
>  		 config->link_rate);
> 
> +	set_link_status_good(data, mst);
> +
>  	i915_dp_set_link_params(data->drm_fd, data->output, rate_str,
> lane_str);
>  	i915_dp_force_link_retrain(data->drm_fd, data->output,
> RETRAIN_COUNT);
>  	igt_assert_eq(check_condition_with_timeout(data->drm_fd, data-
> >output, @@ -171,6 +273,9 @@ static void train_link_config(data_t *data,
> bool mst,
>  	igt_info("Current link rate is %d\n", current_link_rate);
>  	igt_assert_f(current_link_rate == config->link_rate,
>  		     "Link training did not succeed at the forced link rate.\n");
> +	igt_assert_f(i915_dp_get_current_lane_count(data->drm_fd, data-
> >output) ==
> +		     config->lane_count,
> +		     "Link training did not succeed at the forced lane count.\n");
> 
>  	/*
>  	 * The link parameters read back above are the ones the driver asked
> @@ -280,14 +385,14 @@ static void do_modeset(data_t *data, bool mst)  }
> 
>  /*
> - * run_link_rate_test - Main link training routine. Expects the MST vs. SST
> check
> - * to be done beforehand. Returns true if tested at the correct rate.
> + * setup_link - Bring the link up at the parameters the driver picks itself.
> + *
> + * Runs per dynamic subtest rather than once per link: everything it
> + does can
> + * fail, and a failure in a igt_subtest_with_dynamic() container aborts
> + the
> + * whole test instead of yielding a dynamic subtest result.
>   */
> -static bool run_link_rate_test(data_t *data, bool mst, bool uhbr)
> +static void setup_link(data_t *data, bool mst)
>  {
> -	struct i915_dp_link_config config;
> -	bool is_uhbr_output;
> -
>  	igt_display_reset(&data->display);
>  	i915_dp_reset_link_params(data->drm_fd, data->output);
>  	do_modeset(data, mst);
> @@ -298,27 +403,63 @@ static bool run_link_rate_test(data_t *data, bool
> mst, bool uhbr)
> 
> i915_dp_get_pending_retrain,
>  						   1.0, 20.0), 0);
>  	assert_link_status_good(data, mst);
> +}
> +
> +/*
> + * run_link_rate_test - Main link training routine. Expects the MST vs.
> +SST check
> + * to be done beforehand. Returns true if tested at the correct rate.
> + */
> +static bool run_link_rate_test(data_t *data, bool mst, bool uhbr) {
> +	struct i915_dp_link_config configs[MAX_LINK_CONFIGS];
> +	int num_configs, num_dynamics = 0;
> +	int i;
> +
> +	igt_require_f(i915_dp_has_allowed_link_configs_debugfs(data-
> >drm_fd,
> +							       data->output),
> +		      "Kernel has no intel_dp_allowed_link_configs debugfs\n");
> +
> +	/*
> +	 * Enumerate with the forced parameters reset, or the set being read is
> +	 * the forced one rather than the one the driver would pick from.
> +	 */
> +	i915_dp_reset_link_params(data->drm_fd, data->output);
> +	num_configs = i915_dp_get_allowed_link_configs(data->drm_fd, data-
> >output,
> +						       configs,
> ARRAY_SIZE(configs));
> +
> +	for (i = 0; i < num_configs; i++) {
> +		char name[64];
> +
> +		if (i915_dp_is_uhbr_rate(configs[i].link_rate) != uhbr)
> +			continue;
> +
> +		snprintf(name, sizeof(name), "%s-%dx%d",
> +			 igt_output_name(data->output),
> +			 configs[i].lane_count, configs[i].link_rate);
> +
> +		num_dynamics++;
> +
> +		igt_dynamic(name) {
> +			setup_link(data, mst);
> +
> +			igt_require_f(link_config_data_rate(&configs[i], mst)
> >=
> +				      link_min_data_rate(data, mst),
> +				      "%d lanes, rate %d is too narrow for the
> mode\n",
> +				      configs[i].lane_count,
> +				      configs[i].link_rate);
> +
> +			train_link_config(data, mst, &configs[i]);
> +		}
> 
> -	/* Read max_link_rate and max_lane_count */
> -	config.link_rate = i915_dp_get_max_link_rate(data->drm_fd, data-
> >output);
> -	config.lane_count = i915_dp_get_max_lane_count(data->drm_fd,
> data->output);
> -
> -	/* Check sink supports uhbr or not */
> -	is_uhbr_output = i915_dp_is_uhbr_rate(config.link_rate);
> -	if (uhbr != is_uhbr_output) {
> -		igt_info("Test expects %s, but output %s is %s.\n",
> -			 uhbr ? "UHBR" : "NON-UHBR",
> -			 data->output->name,
> -			 is_uhbr_output ? "UHBR" : "NON-UHBR");
> -		igt_info("----------------------------------------------------\n");
> -		return false;
> +		i915_dp_reset_link_params(data->drm_fd, data->output);
setup_link()'s own i915_dp_reset_link_params() already resets before the next config forces its value, correctly scoped inside igt_dynamic(). This call sits outside that boundary, so if i915_dp_reset_link_params() ever asserts here (e.g. sink disconnect), it aborts the whole igt_subtest_with_dynamic() container instead of just this dynamic subsubtest. Suggest dropping it - the exit handler already covers resetting the last config's forced state.
Thanks,
Sowmiya S.
>  	}
> 
> -	/* Force retrain at max link params */
> -	train_link_config(data, mst, &config);
> +	if (!num_dynamics)
> +		igt_info("Output %s allows no %sUHBR link config\n",
> +			 igt_output_name(data->output), uhbr ? "" : "non-");
> 
>  	igt_info("----------------------------------------------------\n");
> -	return true;
> +	return num_dynamics > 0;
>  }
> 
>  /*
> @@ -386,7 +527,7 @@ int igt_main()
>  	}
> 
>  	igt_describe("Test we can drive UHBR rates over SST");
> -	igt_subtest("uhbr-sst") {
> +	igt_subtest_with_dynamic("uhbr-sst") {
>  		igt_require_f(intel_display_ver(data.devid) > 13,
>  			      "UHBR not supported on platform\n");
>  		igt_require_f(test_link_rate(&data, false, true), @@ -394,7
> +535,7 @@ int igt_main()
>  	}
> 
>  	igt_describe("Test we can drive UHBR rates over MST");
> -	igt_subtest("uhbr-mst") {
> +	igt_subtest_with_dynamic("uhbr-mst") {
>                  igt_require_f(intel_display_ver(data.devid) > 13,
>                                "UHBR not supported on platform\n");
>  		igt_require_f(test_link_rate(&data, true, true), @@ -402,13
> +543,13 @@ int igt_main()
>  	}
> 
>  	igt_describe("Test we can drive NON-UHBR rates over SST");
> -	igt_subtest("non-uhbr-sst") {
> +	igt_subtest_with_dynamic("non-uhbr-sst") {
>  		igt_require_f(test_link_rate(&data, false, false),
>  			      "Didn't find any SST output with NON-UHBR
> rates.\n");
>  	}
> 
>  	igt_describe("Test we can drive NON-UHBR rates over MST");
> -	igt_subtest("non-uhbr-mst") {
> +	igt_subtest_with_dynamic("non-uhbr-mst") {
>  		igt_require_f(test_link_rate(&data, true, false),
>  			      "Didn't find any MST output with NON-UHBR
> rates.\n");
>  	}
> --
> 2.25.1


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

* RE: [PATCH i-g-t 07/13] lib/i915/i915_dp: Add a Type-C port mode query
  2026-09-16  4:47 ` [PATCH i-g-t 07/13] lib/i915/i915_dp: Add a Type-C port mode query Kunal Joshi
@ 2026-09-22 14:55   ` S, Sowmiya
  0 siblings, 0 replies; 31+ messages in thread
From: S, Sowmiya @ 2026-09-22 14:55 UTC (permalink / raw)
  To: Joshi, Kunal1, igt-dev@lists.freedesktop.org, Joshi, Kunal1

Hi @Joshi, Kunal1,

> -----Original Message-----
> From: igt-dev <igt-dev-bounces@lists.freedesktop.org> On Behalf Of Kunal
> Joshi
> Sent: 16 September 2026 10:18
> To: igt-dev@lists.freedesktop.org
> Cc: Joshi, Kunal1 <kunal1.joshi@intel.com>
> Subject: [PATCH i-g-t 07/13] lib/i915/i915_dp: Add a Type-C port mode query
> 
> Whether a DP link is tunneled over USB4/Thunderbolt decides where its link
> clock comes from: a tbt-alt link is clocked by the Thunderbolt PLL, every other
> mode by the PHY PLL. A test that wants to cover the tunneled path has to be
> able to tell them apart, and nothing in IGT can today.
> 
> The driver already reports it. For every connected Type-C connector
> intel_connector_info() prints
> 
> 	TC Port TC1: mode: tbt-alt, pin assignment: D, max lanes: 4
> 
> in the i915_display_info debugfs file, with the mode being one of
> disconnected, tbt-alt, dp-alt or legacy. A connector with no TC Port line is on a
> combo or native PHY.
> 
> Add i915_dp_get_tc_mode() returning that mode as an enum, optionally along
> with the pin assignment and the Type-C max lane count, which are worth
> having in a log line, and i915_dp_tc_mode_name() to get the driver's spelling
> back for the same purpose.
> 
> i915_display_info is a per-device file listing the CRTCs first and the connectors
> after them, so find the [CONNECTOR:<id>: block belonging to the output and
> terminate it at the next [CONNECTOR: marker. Without that second step a
> connector on a combo PHY picks up the TC Port line of whichever connector
> comes after it.
> 
> Start the search at the "Connector info" heading. The CRTC section names the
> connectors of every active output, so for an active output the first
> [CONNECTOR:<id>: match is intel_encoder_info()'s reference to it, not its own
> block. Parsing would then stop before ever reaching the TC Port line and report
> a tbt-alt connector as having no Type-C port at all.
> 
> Read the file with igt_sysfs_get(), which sizes the buffer from the file, rather
> than the fixed 16 KiB and 8 KiB stack buffers the existing readers in lib/igt_kms.c
> use without checking for truncation.
> 
> Note that MST stream connectors do report the TC line, since both branches of
> intel_connector_info() resolve the digital port with intel_attached_dp(), so an
> MST topology can be classified from any of its streams without finding the root.
> Disconnected connectors return early and print no TC line at all, which is why
> the root connector of an active MST topology has none.
> 
> Assisted-by: GitHub_Copilot:claude-opus-5
> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
LGTM,
Reviewed-by: Sowmiya S <sowmiya.s@intel.com>  
> ---
>  lib/i915/i915_dp.c | 111
> +++++++++++++++++++++++++++++++++++++++++++++
>  lib/i915/i915_dp.h |  24 ++++++++++
>  2 files changed, 135 insertions(+)
> 
> diff --git a/lib/i915/i915_dp.c b/lib/i915/i915_dp.c index
> aba6aa8d5..89d1dbd4d 100644
> --- a/lib/i915/i915_dp.c
> +++ b/lib/i915/i915_dp.c
> @@ -35,7 +35,9 @@
> 
>  #include "i915_dp.h"
>  #include "igt_core.h"
> +#include "igt_debugfs.h"
>  #include "igt_kms.h"
> +#include "igt_sysfs.h"
> 
>  /*
>   * The driver allows at most 10 link rates over 3 lane counts, i.e. 30 entries @@
> -527,3 +529,112 @@ int i915_dp_get_next_lower_rate(int drm_fd,
> igt_output_t *output, int rate)
> 
>  	return next;
>  }
> +
> +/**
> + * i915_dp_tc_mode_name:
> + * @mode: Connector mode
> + *
> + * Returns: The driver's name for @mode, for use in a log line  */
> +const char *i915_dp_tc_mode_name(enum i915_dp_tc_mode mode) {
> +	switch (mode) {
> +	case I915_DP_TC_DISCONNECTED:
> +		return "disconnected";
> +	case I915_DP_TC_LEGACY:
> +		return "legacy";
> +	case I915_DP_TC_DP_ALT:
> +		return "dp-alt";
> +	case I915_DP_TC_TBT_ALT:
> +		return "tbt-alt";
> +	default:
> +		return "native";
> +	}
> +}
> +
> +/**
> + * i915_dp_get_tc_mode:
> + * @drm_fd: A drm file descriptor
> + * @output: Target output
> + * @pin_assignment: Where to store the Type-C pin assignment, or NULL
> + * @max_lanes: Where to store the Type-C max lane count, or NULL
> + *
> + * Read the connector mode of @output out of the TC Port line the
> +driver
> + * prints for every connected Type-C connector in the i915_display_info
> + * debugfs file:
> + *
> + *	TC Port TC1: mode: tbt-alt, pin assignment: D, max lanes: 4
> + *
> + * @pin_assignment and @max_lanes are only written when the line is
> present.
> + *
> + * Returns: The connector mode, or I915_DP_TC_NONE when @output has no
> +TC Port
> + * line, i.e. it is on a combo or native PHY  */ enum i915_dp_tc_mode
> +i915_dp_get_tc_mode(int drm_fd, igt_output_t *output,
> +					 char *pin_assignment, int
> *max_lanes) {
> +	enum i915_dp_tc_mode mode = I915_DP_TC_NONE;
> +	char marker[32];
> +	char mode_str[32];
> +	char *info, *block, *next_block, *line;
> +	char pin;
> +	int lanes;
> +	int dir;
> +
> +	dir = igt_debugfs_dir(drm_fd);
> +	igt_assert_fd(dir);
> +	info = igt_sysfs_get(dir, "i915_display_info");
> +	close(dir);
> +	igt_assert_f(info, "Unable to read i915_display_info\n");
> +
> +	/*
> +	 * i915_display_info is a per-device file that lists the CRTCs first
> +	 * and the connectors after them. The CRTC section names the
> connectors
> +	 * of every active output, so the search has to start at the connector
> +	 * section, or an active output's first match is that reference rather
> +	 * than the connector's own block and the TC Port line is never
> +	 * reached. The block ends where the next connector's begins.
> +	 */
> +	snprintf(marker, sizeof(marker), "[CONNECTOR:%d:",
> +		 output->config.connector->connector_id);
> +
> +	block = strstr(info, "Connector info");
> +	if (!block)
> +		goto out;
> +
> +	block = strstr(block, marker);
> +	if (!block)
> +		goto out;
> +
> +	next_block = strstr(block + strlen(marker), "[CONNECTOR:");
> +	if (next_block)
> +		*next_block = '\0';
> +
> +	line = strstr(block, "TC Port ");
> +	if (!line)
> +		goto out;
> +
> +	if (sscanf(line,
> +		   "TC Port %*[^:]: mode: %31[^,], pin assignment: %c, max
> lanes: %d",
> +		   mode_str, &pin, &lanes) != 3)
> +		goto out;
> +
> +	if (!strcmp(mode_str, "tbt-alt"))
> +		mode = I915_DP_TC_TBT_ALT;
> +	else if (!strcmp(mode_str, "dp-alt"))
> +		mode = I915_DP_TC_DP_ALT;
> +	else if (!strcmp(mode_str, "legacy"))
> +		mode = I915_DP_TC_LEGACY;
> +	else
> +		mode = I915_DP_TC_DISCONNECTED;
> +
> +	if (pin_assignment)
> +		*pin_assignment = pin;
> +	if (max_lanes)
> +		*max_lanes = lanes;
> +
> +out:
> +	free(info);
> +
> +	return mode;
> +}
> diff --git a/lib/i915/i915_dp.h b/lib/i915/i915_dp.h index
> c818b3937..883ac346d 100644
> --- a/lib/i915/i915_dp.h
> +++ b/lib/i915/i915_dp.h
> @@ -23,6 +23,27 @@ struct i915_dp_link_config {
>  	int link_rate;
>  };
> 
> +/**
> + * enum i915_dp_tc_mode:
> + * @I915_DP_TC_NONE: not a Type-C port, i.e. a combo or native PHY
> + * @I915_DP_TC_DISCONNECTED: Type-C port with nothing connected
> + * @I915_DP_TC_LEGACY: fixed DP connection on a Type-C port
> + * @I915_DP_TC_DP_ALT: USB-C DP alt mode, driven by the PHY PLL
> + * @I915_DP_TC_TBT_ALT: DP tunneled over USB4/Thunderbolt, driven by
> the
> + *			Thunderbolt PLL
> + *
> + * The connector mode of a DP output, as reported by the
> +i915_display_info
> + * debugfs file. Only I915_DP_TC_TBT_ALT takes its link clock from the
> + * Thunderbolt PLL; every other value uses the PHY PLL.
> + */
> +enum i915_dp_tc_mode {
> +	I915_DP_TC_NONE,
> +	I915_DP_TC_DISCONNECTED,
> +	I915_DP_TC_LEGACY,
> +	I915_DP_TC_DP_ALT,
> +	I915_DP_TC_TBT_ALT,
> +};
> +
>  /**
>   * i915_dp_is_uhbr_rate:
>   * @link_rate: DP link rate in 10 kbit/s units, as reported by the @@ -58,5
> +79,8 @@ int i915_dp_get_allowed_link_configs(int drm_fd, igt_output_t
> *output,
>  				     struct i915_dp_link_config *configs,
>  				     int max_configs);
>  int i915_dp_get_next_lower_rate(int drm_fd, igt_output_t *output, int rate);
> +enum i915_dp_tc_mode i915_dp_get_tc_mode(int drm_fd, igt_output_t
> *output,
> +					 char *pin_assignment, int
> *max_lanes); const char
> +*i915_dp_tc_mode_name(enum i915_dp_tc_mode mode);
> 
>  #endif
> --
> 2.25.1


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

* RE: [PATCH i-g-t 08/13] tests/intel/kms_dp_link_training: Log the DP link inventory in the fixture
  2026-09-16  4:47 ` [PATCH i-g-t 08/13] tests/intel/kms_dp_link_training: Log the DP link inventory in the fixture Kunal Joshi
@ 2026-09-23 12:46   ` S, Sowmiya
  0 siblings, 0 replies; 31+ messages in thread
From: S, Sowmiya @ 2026-09-23 12:46 UTC (permalink / raw)
  To: Joshi, Kunal1, igt-dev@lists.freedesktop.org, Joshi, Kunal1

Hi @Joshi, Kunal1,

> -----Original Message-----
> From: igt-dev <igt-dev-bounces@lists.freedesktop.org> On Behalf Of Kunal
> Joshi
> Sent: 16 September 2026 10:18
> To: igt-dev@lists.freedesktop.org
> Cc: Joshi, Kunal1 <kunal1.joshi@intel.com>
> Subject: [PATCH i-g-t 08/13] tests/intel/kms_dp_link_training: Log the DP link
> inventory in the fixture
> 
> The test logs which rate it trained at, but nothing about the link it trained on:
> whether the connector is SST or MST, whether it is tunneled over
> USB4/Thunderbolt, and which configurations the driver would pick from.
> When a subtest skips there is no way to tell a missing monitor from a missing
> dock without re-running by hand.
> 
> Print one line per connected DP output in the fixture, giving the protocol, the
> connector mode, pin assignment and max lanes, followed by the allowed
> configuration set:
> 
> 	DP-2: MST, tbt-alt, pin assignment D, TC max lanes 4
> 	DP-2: allowed configs: 4x2000000 4x1000000 4x810000 2x810000
> 
> Read the allowed set with the forced parameters reset, or the set being
> enumerated is the forced one rather than the real one.
> 
> No subtest behaviour changes; this is log output only.
> 
> Assisted-by: GitHub_Copilot:claude-opus-5
> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
LGTM,
Reviewed-by: Sowmiya S <sowmiya.s@intel.com>
> ---
>  tests/intel/kms_dp_link_training.c | 68 ++++++++++++++++++++++++++++++
>  1 file changed, 68 insertions(+)
> 
> diff --git a/tests/intel/kms_dp_link_training.c
> b/tests/intel/kms_dp_link_training.c
> index 71531e8dc..812c4b6bc 100644
> --- a/tests/intel/kms_dp_link_training.c
> +++ b/tests/intel/kms_dp_link_training.c
> @@ -288,6 +288,71 @@ static void train_link_config(data_t *data, bool mst,
>  	assert_link_recovery_idle(data, config);  }
> 
> +/*
> + * log_link_inventory - Describe every connected DP link once.
> + *
> + * With the configuration in the subtest name, most subtests skip on
> +any one
> + * machine. This is what tells a missing monitor apart from a monitor
> +behind a
> + * dock that offers no UHBR configuration, without having to re-run by hand.
> + */
> +static void log_link_inventory(data_t *data) {
> +	igt_output_t *output;
> +
> +	for_each_connected_output(&data->display, output) {
> +		struct i915_dp_link_config configs[MAX_LINK_CONFIGS];
> +		enum i915_dp_tc_mode tc_mode;
> +		char configs_str[512];
> +		char pin_assignment;
> +		int tc_max_lanes;
> +		int num_configs;
> +		int len = 0;
> +		int i;
> +
> +		if (output->config.connector->connector_type !=
> +		    DRM_MODE_CONNECTOR_DisplayPort)
> +			continue;
> +
> +		tc_mode = i915_dp_get_tc_mode(data->drm_fd, output,
> +					      &pin_assignment, &tc_max_lanes);
> +
> +		if (tc_mode == I915_DP_TC_NONE)
> +			igt_info("%s: %s, %s\n", igt_output_name(output),
> +				 igt_check_output_is_dp_mst(output) ? "MST"
> : "SST",
> +				 i915_dp_tc_mode_name(tc_mode));
> +		else
> +			igt_info("%s: %s, %s, pin assignment %c, TC max lanes
> %d\n",
> +				 igt_output_name(output),
> +				 igt_check_output_is_dp_mst(output) ? "MST"
> : "SST",
> +				 i915_dp_tc_mode_name(tc_mode),
> +				 pin_assignment, tc_max_lanes);
> +
> +		if (!i915_dp_has_allowed_link_configs_debugfs(data->drm_fd,
> output)) {
> +			igt_info("%s: no allowed link configs debugfs\n",
> +				 igt_output_name(output));
> +			continue;
> +		}
> +
> +		/*
> +		 * Enumerate with the forced parameters reset, or the set read
> +		 * back is the forced one rather than the real one.
> +		 */
> +		i915_dp_reset_link_params(data->drm_fd, output);
> +
> +		num_configs = i915_dp_get_allowed_link_configs(data-
> >drm_fd, output,
> +							       configs,
> +
> ARRAY_SIZE(configs));
> +
> +		for (i = 0; i < num_configs && len < (int)sizeof(configs_str); i++)
> +			len += snprintf(configs_str + len, sizeof(configs_str) -
> len,
> +					" %dx%d", configs[i].lane_count,
> +					configs[i].link_rate);
> +
> +		igt_info("%s: allowed configs:%s\n", igt_output_name(output),
> +			 num_configs ? configs_str : " none");
> +	}
> +}
> +
>  /*
>   * override_lowest_mode - Drive the mode with the lowest pixel clock, so that
>   * the largest number of link configurations can carry it.
> @@ -524,6 +589,9 @@ int igt_main()
>  		 */
>  		igt_assert_f(igt_ignore_long_hpd(data.drm_fd, false),
>  			     "Unable to disable ignore long hpd\n");
> +
> +		if (is_intel_device(data.drm_fd))
> +			log_link_inventory(&data);
>  	}
> 
>  	igt_describe("Test we can drive UHBR rates over SST");
> --
> 2.25.1


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

* RE: [PATCH i-g-t 09/13] tests/intel/kms_dp_link_training: Group the outputs into links
  2026-09-16  4:47 ` [PATCH i-g-t 09/13] tests/intel/kms_dp_link_training: Group the outputs into links Kunal Joshi
@ 2026-09-23 13:10   ` S, Sowmiya
  0 siblings, 0 replies; 31+ messages in thread
From: S, Sowmiya @ 2026-09-23 13:10 UTC (permalink / raw)
  To: Joshi, Kunal1, igt-dev@lists.freedesktop.org, Joshi, Kunal1

Hi @Joshi, Kunal1,

> -----Original Message-----
> From: igt-dev <igt-dev-bounces@lists.freedesktop.org> On Behalf Of Kunal
> Joshi
> Sent: 16 September 2026 10:18
> To: igt-dev@lists.freedesktop.org
> Cc: Joshi, Kunal1 <kunal1.joshi@intel.com>
> Subject: [PATCH i-g-t 09/13] tests/intel/kms_dp_link_training: Group the
> outputs into links
> 
> The output loop walks connectors and decides SST or MST for each one, so an
> MST topology is visited once per stream: the classification is redone every time
> and the same link is trained once per stream, since forcing link parameters on
> one stream affects the whole topology.
> 
> Collect the connected DP outputs into a list of links, where one link is one
> trainable DP link and a whole MST topology is a single entry represented by the
> first of its streams, and record the protocol and the connector mode once per
> link.
> 
> Stop collecting rather than fail when more links are connected than the list
> holds. Discovery runs in a igt_subtest_with_dynamic() container, where explicit
> failure is not allowed.
> 
> An MST topology is now trained once instead of once per stream, so the
> dynamic subtests named after the other streams go away. They were training
> the same link at the same configurations.
> 
> Prep for subtests that select links by connector mode.
> 
> Assisted-by: GitHub_Copilot:claude-opus-5
> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
LGTM,
Reviewed-by: Sowmiya S <sowmiya.s@intel.com>
> ---
>  tests/intel/kms_dp_link_training.c | 111 +++++++++++++++++++++++------
>  1 file changed, 89 insertions(+), 22 deletions(-)
> 
> diff --git a/tests/intel/kms_dp_link_training.c
> b/tests/intel/kms_dp_link_training.c
> index 812c4b6bc..e6160cee5 100644
> --- a/tests/intel/kms_dp_link_training.c
> +++ b/tests/intel/kms_dp_link_training.c
> @@ -39,6 +39,8 @@
>   */
>  #define LINK_RECOVERY_TIMEOUT	5.0
> 
> +#define MAX_LINKS		16
> +
>  typedef struct {
>  	int drm_fd;
>  	uint32_t devid;
> @@ -46,6 +48,18 @@ typedef struct {
>  	igt_output_t *output;
>  } data_t;
> 
> +/*
> + * struct dp_link - One trainable DP link.
> + *
> + * @output is the output the link is driven through, which for MST is
> +the first
> + * of the topology's streams. The classification is discovered, never chosen.
> + */
> +struct dp_link {
> +	igt_output_t *output;
> +	bool mst;
> +	enum i915_dp_tc_mode tc_mode;
> +};
> +
>  /*
>   * check_condition_with_timeout - Polls check_fn until it returns 0
>   * or until 'timeout' seconds elapse.
> @@ -532,42 +546,95 @@ static bool run_link_rate_test(data_t *data, bool
> mst, bool uhbr)
>   * early, then calls run_link_rate_test(). Returns true if it ran on at
>   * least one matching output.
>   */
> -static bool test_link_rate(data_t *data, bool mst, bool uhbr)
> +/*
> + * discover_links - Collapse the connected DP outputs into links.
> + *
> + * One link is one trainable DP link, so a whole MST topology becomes a
> +single
> + * entry, represented by the first of its streams. Forcing link
> +parameters on
> + * one stream affects every stream in the topology, so training a
> +topology once
> + * per stream would train the same link repeatedly.
> + */
> +static int discover_links(data_t *data, struct dp_link *links, int
> +max_links)
>  {
> -	bool ran_any_output = false, is_mst = false;
> -	igt_output_t *tmp_output;
> +	igt_output_t *output;
> +	int num_links = 0;
> +	int i;
> 
> -	igt_skip_on_f(!is_intel_device(data->drm_fd),
> -		      "Test supported only on Intel platforms.\n");
> +	for_each_connected_output(&data->display, output) {
> +		bool mst, seen = false;
> 
> -	for_each_connected_output(&data->display, tmp_output) {
> -		if (tmp_output->config.connector->connector_type !=
> +		if (output->config.connector->connector_type !=
>  		    DRM_MODE_CONNECTOR_DisplayPort) {
>  			igt_info("Skipping non-DisplayPort output %s\n",
> -					tmp_output->name);
> -			igt_info("----------------------------------------------------\n");
> +				 igt_output_name(output));
>  			continue;
>  		}
> 
> -		/* Early skip if MST vs. SST does not match. */
> -		is_mst = igt_check_output_is_dp_mst(tmp_output);
> -		if (mst && !is_mst) {
> -			igt_info("Skipping %s: MST requested but it's SST.\n",
> -					tmp_output->name);
> -			igt_info("----------------------------------------------------\n");
> +		mst = igt_check_output_is_dp_mst(output);
> +
> +		if (mst) {
> +			int root = igt_get_dp_mst_connector_id(output);
> +
> +			for (i = 0; i < num_links; i++)
> +				if (links[i].mst &&
> +
> igt_get_dp_mst_connector_id(links[i].output) == root) {
> +					seen = true;
> +					break;
> +				}
> +		}
> +
> +		if (seen) {
> +			igt_info("Skipping %s: same MST topology as %s\n",
> +				 igt_output_name(output),
> +				 igt_output_name(links[i].output));
> +			continue;
> +		}
> +
> +		if (num_links == max_links) {
> +			igt_info("Skipping %s: more than %d DP links
> connected\n",
> +				 igt_output_name(output), max_links);
>  			continue;
> -		} else if (!mst && is_mst) {
> -			igt_info("Skipping %s: SST requested but it's MST.\n",
> -					tmp_output->name);
> +		}
> +
> +		links[num_links].output = output;
> +		links[num_links].mst = mst;
> +		links[num_links].tc_mode = i915_dp_get_tc_mode(data-
> >drm_fd,
> +							       output, NULL,
> NULL);
> +		num_links++;
> +	}
> +
> +	return num_links;
> +}
> +
> +static bool test_link_rate(data_t *data, bool mst, bool uhbr) {
> +	struct dp_link links[MAX_LINKS];
> +	bool ran_any_link = false;
> +	int num_links;
> +	int i;
> +
> +	igt_skip_on_f(!is_intel_device(data->drm_fd),
> +		      "Test supported only on Intel platforms.\n");
> +
> +	num_links = discover_links(data, links, ARRAY_SIZE(links));
> +
> +	for (i = 0; i < num_links; i++) {
> +		if (links[i].mst != mst) {
> +			igt_info("Skipping %s: %s requested but it's %s.\n",
> +				 igt_output_name(links[i].output),
> +				 mst ? "MST" : "SST",
> +				 links[i].mst ? "MST" : "SST");
>  			igt_info("----------------------------------------------------\n");
>  			continue;
>  		}
> -		data->output = tmp_output;
> +
> +		data->output = links[i].output;
>  		igt_info("Running link training test for %s\n",
> -			 data->output->name);
> -		ran_any_output = ran_any_output | run_link_rate_test(data,
> mst, uhbr);
> +			 igt_output_name(data->output));
> +		ran_any_link |= run_link_rate_test(data, mst, uhbr);
>  	}
> -	return ran_any_output;
> +
> +	return ran_any_link;
>  }
> 
>  IGT_TEST_DESCRIPTION("Test to validate link training on SST/MST with "
> --
> 2.25.1


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

* RE: [PATCH i-g-t 10/13] tests/intel/kms_dp_link_training: Add per connector mode subtests
  2026-09-16  4:47 ` [PATCH i-g-t 10/13] tests/intel/kms_dp_link_training: Add per connector mode subtests Kunal Joshi
@ 2026-09-23 13:29   ` S, Sowmiya
  0 siblings, 0 replies; 31+ messages in thread
From: S, Sowmiya @ 2026-09-23 13:29 UTC (permalink / raw)
  To: Joshi, Kunal1, igt-dev@lists.freedesktop.org, Joshi, Kunal1

Hi @Joshi, Kunal1,

> -----Original Message-----
> From: igt-dev <igt-dev-bounces@lists.freedesktop.org> On Behalf Of Kunal
> Joshi
> Sent: 16 September 2026 10:18
> To: igt-dev@lists.freedesktop.org
> Cc: Joshi, Kunal1 <kunal1.joshi@intel.com>
> Subject: [PATCH i-g-t 10/13] tests/intel/kms_dp_link_training: Add per
> connector mode subtests
> 
> The four existing subtests cover whichever connector mode the machine
> presents. On a machine with a Thunderbolt dock they train a tunneled link, on
> one without they train a direct link, and the result is identical either way, so a
> lab that never had a dock looks the same as one where the tunnel works.
> 
> Add eight subtests selecting links by connector mode:
> 
> 	uhbr-sst-tbtalt-train        non-uhbr-sst-tbtalt-train
> 	uhbr-mst-tbtalt-train        non-uhbr-mst-tbtalt-train
> 	uhbr-sst-direct-train        non-uhbr-sst-direct-train
> 	uhbr-mst-direct-train        non-uhbr-mst-direct-train
> 
> with the same per configuration dynamic subtests as the existing ones.
> "direct" is native, DP alt mode and legacy together: they all take the link clock
> from the PHY PLL, and only tbt-alt takes it from the Thunderbolt PLL, so that is
> the only split that changes which driver code runs. The raw mode stays in the
> inventory line, so dp-alt against legacy is still diagnosable from a failing run.
> 
> The connector mode has to be in the static subtest name rather than a dynamic
> one, because a dynamic subtest that skips is not counted as
> executed: a container with one pass and twenty skips reports PASS, so a lab
> with no dock would look green.
> 
> Keep the four existing names and their PHY agnostic scope. They are not
> redundant: they are what to run on a machine nobody provisioned for this
> matrix.
> 
> Expect most of the eight to skip on any one machine, since dp-alt and tbt-alt
> are mutually exclusive on a port at a given moment. The skip reasons name the
> connector mode so the two causes - no such link, and a link that allows no
> configuration in the encoding class - stay greppable apart.
> 
> Assisted-by: GitHub_Copilot:claude-opus-5
> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
LGTM,
Reviewed-by: Sowmiya S <sowmiya.s@intel.com>
> ---
>  tests/intel/kms_dp_link_training.c | 142 ++++++++++++++++++++++++++++-
>  1 file changed, 137 insertions(+), 5 deletions(-)
> 
> diff --git a/tests/intel/kms_dp_link_training.c
> b/tests/intel/kms_dp_link_training.c
> index e6160cee5..229eb3d69 100644
> --- a/tests/intel/kms_dp_link_training.c
> +++ b/tests/intel/kms_dp_link_training.c
> @@ -21,6 +21,40 @@
>   * Description: Test we can drive non-UHBR rates over MST.
>   */
> 
> +/**
> + * SUBTEST: uhbr-sst-tbtalt-train
> + * Description: Test we can drive UHBR rates over an SST link tunneled over
> + *              USB4/Thunderbolt.
> + *
> + * SUBTEST: uhbr-mst-tbtalt-train
> + * Description: Test we can drive UHBR rates over an MST link tunneled over
> + *              USB4/Thunderbolt.
> + *
> + * SUBTEST: uhbr-sst-direct-train
> + * Description: Test we can drive UHBR rates over a directly connected SST
> + *              link.
> + *
> + * SUBTEST: uhbr-mst-direct-train
> + * Description: Test we can drive UHBR rates over a directly connected MST
> + *              link.
> + *
> + * SUBTEST: non-uhbr-sst-tbtalt-train
> + * Description: Test we can drive non-UHBR rates over an SST link tunneled
> over
> + *              USB4/Thunderbolt.
> + *
> + * SUBTEST: non-uhbr-mst-tbtalt-train
> + * Description: Test we can drive non-UHBR rates over an MST link tunneled
> over
> + *              USB4/Thunderbolt.
> + *
> + * SUBTEST: non-uhbr-sst-direct-train
> + * Description: Test we can drive non-UHBR rates over a directly connected
> SST
> + *              link.
> + *
> + * SUBTEST: non-uhbr-mst-direct-train
> + * Description: Test we can drive non-UHBR rates over a directly connected
> MST
> + *              link.
> + */
> +
>  #include "i915/i915_dp.h"
>  #include "igt.h"
>  #include "igt_kms.h"
> @@ -60,6 +94,38 @@ struct dp_link {
>  	enum i915_dp_tc_mode tc_mode;
>  };
> 
> +/*
> + * enum phy_filter - Which links a subtest selects.
> + *
> + * PHY_ANY is the PHY agnostic scope of the original subtests. The
> +split
> + * between PHY_TBTALT and PHY_DIRECT is where the link clock comes
> +from: only a
> + * tbt-alt link is clocked by the Thunderbolt PLL, native, DP alt mode
> +and
> + * legacy all use the PHY PLL, so folding the latter three together
> +does not
> + * change which driver code runs.
> + */
> +enum phy_filter {
> +	PHY_ANY,
> +	PHY_TBTALT,
> +	PHY_DIRECT,
> +};
> +
> +static const char *phy_filter_name(enum phy_filter phy) {
> +	return phy == PHY_TBTALT ? "tbt-alt" : "direct"; }
> +
> +static bool link_matches_phy(const struct dp_link *link, enum
> +phy_filter phy) {
> +	switch (phy) {
> +	case PHY_TBTALT:
> +		return link->tc_mode == I915_DP_TC_TBT_ALT;
> +	case PHY_DIRECT:
> +		return link->tc_mode != I915_DP_TC_TBT_ALT;
> +	default:
> +		return true;
> +	}
> +}
> +
>  /*
>   * check_condition_with_timeout - Polls check_fn until it returns 0
>   * or until 'timeout' seconds elapse.
> @@ -606,7 +672,8 @@ static int discover_links(data_t *data, struct dp_link
> *links, int max_links)
>  	return num_links;
>  }
> 
> -static bool test_link_rate(data_t *data, bool mst, bool uhbr)
> +static bool test_link_rate(data_t *data, bool mst, bool uhbr,
> +			   enum phy_filter phy)
>  {
>  	struct dp_link links[MAX_LINKS];
>  	bool ran_any_link = false;
> @@ -628,6 +695,15 @@ static bool test_link_rate(data_t *data, bool mst, bool
> uhbr)
>  			continue;
>  		}
> 
> +		if (!link_matches_phy(&links[i], phy)) {
> +			igt_info("Skipping %s: %s requested but it's %s.\n",
> +				 igt_output_name(links[i].output),
> +				 phy_filter_name(phy),
> +				 i915_dp_tc_mode_name(links[i].tc_mode));
> +			igt_info("----------------------------------------------------\n");
> +			continue;
> +		}
> +
>  		data->output = links[i].output;
>  		igt_info("Running link training test for %s\n",
>  			 igt_output_name(data->output));
> @@ -665,7 +741,7 @@ int igt_main()
>  	igt_subtest_with_dynamic("uhbr-sst") {
>  		igt_require_f(intel_display_ver(data.devid) > 13,
>  			      "UHBR not supported on platform\n");
> -		igt_require_f(test_link_rate(&data, false, true),
> +		igt_require_f(test_link_rate(&data, false, true, PHY_ANY),
>  			      "Didn't find any SST output with UHBR rates.\n");
>  	}
> 
> @@ -673,22 +749,78 @@ int igt_main()
>  	igt_subtest_with_dynamic("uhbr-mst") {
>                  igt_require_f(intel_display_ver(data.devid) > 13,
>                                "UHBR not supported on platform\n");
> -		igt_require_f(test_link_rate(&data, true, true),
> +		igt_require_f(test_link_rate(&data, true, true, PHY_ANY),
>  			      "Didn't find any MST output with UHBR rates.\n");
>  	}
> 
>  	igt_describe("Test we can drive NON-UHBR rates over SST");
>  	igt_subtest_with_dynamic("non-uhbr-sst") {
> -		igt_require_f(test_link_rate(&data, false, false),
> +		igt_require_f(test_link_rate(&data, false, false, PHY_ANY),
>  			      "Didn't find any SST output with NON-UHBR
> rates.\n");
>  	}
> 
>  	igt_describe("Test we can drive NON-UHBR rates over MST");
>  	igt_subtest_with_dynamic("non-uhbr-mst") {
> -		igt_require_f(test_link_rate(&data, true, false),
> +		igt_require_f(test_link_rate(&data, true, false, PHY_ANY),
>  			      "Didn't find any MST output with NON-UHBR
> rates.\n");
>  	}
> 
> +	igt_describe("Test we can drive UHBR rates over a tunneled SST link");
> +	igt_subtest_with_dynamic("uhbr-sst-tbtalt-train") {
> +		igt_require_f(intel_display_ver(data.devid) > 13,
> +			      "UHBR not supported on platform\n");
> +		igt_require_f(test_link_rate(&data, false, true, PHY_TBTALT),
> +			      "No tbt-alt DP SST link allows a UHBR config\n");
> +	}
> +
> +	igt_describe("Test we can drive UHBR rates over a tunneled MST link");
> +	igt_subtest_with_dynamic("uhbr-mst-tbtalt-train") {
> +		igt_require_f(intel_display_ver(data.devid) > 13,
> +			      "UHBR not supported on platform\n");
> +		igt_require_f(test_link_rate(&data, true, true, PHY_TBTALT),
> +			      "No tbt-alt DP MST link allows a UHBR config\n");
> +	}
> +
> +	igt_describe("Test we can drive UHBR rates over a direct SST link");
> +	igt_subtest_with_dynamic("uhbr-sst-direct-train") {
> +		igt_require_f(intel_display_ver(data.devid) > 13,
> +			      "UHBR not supported on platform\n");
> +		igt_require_f(test_link_rate(&data, false, true, PHY_DIRECT),
> +			      "No direct DP SST link allows a UHBR config\n");
> +	}
> +
> +	igt_describe("Test we can drive UHBR rates over a direct MST link");
> +	igt_subtest_with_dynamic("uhbr-mst-direct-train") {
> +		igt_require_f(intel_display_ver(data.devid) > 13,
> +			      "UHBR not supported on platform\n");
> +		igt_require_f(test_link_rate(&data, true, true, PHY_DIRECT),
> +			      "No direct DP MST link allows a UHBR config\n");
> +	}
> +
> +	igt_describe("Test we can drive non-UHBR rates over a tunneled SST
> link");
> +	igt_subtest_with_dynamic("non-uhbr-sst-tbtalt-train") {
> +		igt_require_f(test_link_rate(&data, false, false, PHY_TBTALT),
> +			      "No tbt-alt DP SST link allows a non-UHBR
> config\n");
> +	}
> +
> +	igt_describe("Test we can drive non-UHBR rates over a tunneled MST
> link");
> +	igt_subtest_with_dynamic("non-uhbr-mst-tbtalt-train") {
> +		igt_require_f(test_link_rate(&data, true, false, PHY_TBTALT),
> +			      "No tbt-alt DP MST link allows a non-UHBR
> config\n");
> +	}
> +
> +	igt_describe("Test we can drive non-UHBR rates over a direct SST link");
> +	igt_subtest_with_dynamic("non-uhbr-sst-direct-train") {
> +		igt_require_f(test_link_rate(&data, false, false, PHY_DIRECT),
> +			      "No direct DP SST link allows a non-UHBR
> config\n");
> +	}
> +
> +	igt_describe("Test we can drive non-UHBR rates over a direct MST
> link");
> +	igt_subtest_with_dynamic("non-uhbr-mst-direct-train") {
> +		igt_require_f(test_link_rate(&data, true, false, PHY_DIRECT),
> +			      "No direct DP MST link allows a non-UHBR
> config\n");
> +	}
> +
>  	igt_fixture() {
>  		igt_reset_connectors();
>  		igt_display_fini(&data.display);
> --
> 2.25.1


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

* RE: [PATCH i-g-t 11/13] lib/igt_dp: Add DPCD read helpers
  2026-09-16  4:47 ` [PATCH i-g-t 11/13] lib/igt_dp: Add DPCD read helpers Kunal Joshi
@ 2026-09-23 13:34   ` S, Sowmiya
  0 siblings, 0 replies; 31+ messages in thread
From: S, Sowmiya @ 2026-09-23 13:34 UTC (permalink / raw)
  To: Joshi, Kunal1, igt-dev@lists.freedesktop.org, Joshi, Kunal1

Hi @Joshi, Kunal1,

> -----Original Message-----
> From: igt-dev <igt-dev-bounces@lists.freedesktop.org> On Behalf Of Kunal
> Joshi
> Sent: 16 September 2026 10:18
> To: igt-dev@lists.freedesktop.org
> Cc: Joshi, Kunal1 <kunal1.joshi@intel.com>
> Subject: [PATCH i-g-t 11/13] lib/igt_dp: Add DPCD read helpers
> 
> Reading the DPCD of a connector means finding the drm_dp_aux child of its
> sysfs directory and reading from the matching character device.
> Four tests already carry their own copy of that: kms_dp_aux_dev, amd_assr,
> amd_replay and amd_multidisplay_modeset.
> 
> Add the AUX channel lookup and the DPCD read to the library so that new tests
> do not have to add a fifth. The helpers are read only, since writing DPCD from
> userspace races with the driver doing the same.
> 
> Use pread() rather than lseek() plus read(), which is both shorter and free of the
> failure the amd_assr copy has, where the lseek() return value is asserted to be
> non-zero and a read at DPCD offset 0 would therefore fail.
> 
> Assisted-by: GitHub_Copilot:claude-opus-5
> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
LGTM,
Reviewed-by: Sowmiya S <sowmiya.s@intel.com>
> ---
>  lib/igt_dp.c | 108
> +++++++++++++++++++++++++++++++++++++++++++++++++++
>  lib/igt_dp.h |   9 +++++
>  2 files changed, 117 insertions(+)
> 
> diff --git a/lib/igt_dp.c b/lib/igt_dp.c index 9f71c9e72..0b1fe73de 100644
> --- a/lib/igt_dp.c
> +++ b/lib/igt_dp.c
> @@ -6,7 +6,13 @@
>   *   Louis Chauvet <louis.chauvet@bootlin.com>
>   */
> 
> +#include <dirent.h>
> +#include <errno.h>
> +#include <fcntl.h>
> +#include <limits.h>
>  #include <stdint.h>
> +#include <string.h>
> +#include <unistd.h>
> 
>  #include "drmtest.h"
>  #include "i915/i915_dp.h"
> @@ -173,3 +179,105 @@ void igt_dp_wait_pending_retrain(int drm_fd,
> igt_output_t *output)
>  	}
>  	igt_assert_f(false, "Timeout waiting for pending retrain to
> complete\n");  }
> +
> +/**
> + * igt_dp_aux_open: Open the AUX channel device of a display port
> + * @drm_fd: DRM file descriptor
> + * @output: igt_output_t object representing the display port
> + *
> + * The AUX channel of a connector is exposed as a character device when
> +the
> + * kernel is built with CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV. The device
> +is
> + * parented to the connector, so it is the connector's own sysfs
> +directory
> + * which is scanned here and not /dev, and there is at most one entry
> +in it to
> + * match. /dev is only where the matched entry is then opened from.
> + *
> + * Returns:
> + * A file descriptor for the AUX channel device, or a negative error
> +code on
> + * failure.
> + */
> +int igt_dp_aux_open(int drm_fd, igt_output_t *output) {
> +	struct dirent *entry;
> +	int aux_fd = -ENOENT;
> +	int dir_fd;
> +	DIR *dir;
> +
> +	dir_fd = igt_connector_sysfs_open(drm_fd, output->config.connector);
> +	if (dir_fd < 0)
> +		return -ENOENT;
> +
> +	dir = fdopendir(dir_fd);
> +	if (!dir) {
> +		/* Save the error before close() gets a chance to overwrite it. */
> +		int err = -errno;
> +
> +		close(dir_fd);
> +		return err;
> +	}
> +
> +	errno = 0;
> +
> +	while ((entry = readdir(dir))) {
> +		char path[NAME_MAX + sizeof("/dev/")];
> +
> +		if (strncmp(entry->d_name, "drm_dp_aux",
> strlen("drm_dp_aux")))
> +			continue;
> +
> +		snprintf(path, sizeof(path), "/dev/%s", entry->d_name);
> +
> +		aux_fd = open(path, O_RDONLY);
> +		if (aux_fd < 0)
> +			aux_fd = -errno;
> +
> +		break;
> +	}
> +
> +	/* readdir() reports both the end of the directory and an error as NULL.
> */
> +	if (!entry && errno)
> +		aux_fd = -errno;
> +
> +	closedir(dir);
> +
> +	return aux_fd;
> +}
> +
> +/**
> + * igt_dp_dpcd_read: Read from the DPCD of a display port
> + * @aux_fd:	AUX channel device file descriptor from igt_dp_aux_open()
> + * @offset:	DPCD offset to read from
> + * @buf:	Buffer to read into
> + * @size:	Number of bytes to read
> + *
> + * Returns:
> + * The number of bytes read, or a negative error code on failure.
> + */
> +int igt_dp_dpcd_read(int aux_fd, unsigned int offset, void *buf, size_t
> +size) {
> +	ssize_t ret;
> +
> +	ret = pread(aux_fd, buf, size, offset);
> +	if (ret < 0)
> +		return -errno;
> +
> +	return ret;
> +}
> +
> +/**
> + * igt_dp_dpcd_read_byte: Read a single byte from the DPCD of a display port
> + * @aux_fd:	AUX channel device file descriptor from igt_dp_aux_open()
> + * @offset:	DPCD offset to read from
> + * @val:	Location to store the value read
> + *
> + * Returns:
> + * 0 on success, or a negative error code on failure.
> + */
> +int igt_dp_dpcd_read_byte(int aux_fd, unsigned int offset, uint8_t
> +*val) {
> +	int ret;
> +
> +	ret = igt_dp_dpcd_read(aux_fd, offset, val, sizeof(*val));
> +	if (ret < 0)
> +		return ret;
> +
> +	return ret == 1 ? 0 : -EIO;
> +}
> diff --git a/lib/igt_dp.h b/lib/igt_dp.h index 0c56ad2ec..44f3b11a1 100644
> --- a/lib/igt_dp.h
> +++ b/lib/igt_dp.h
> @@ -9,6 +9,9 @@
>  #ifndef _IGT_DP_H_
>  #define _IGT_DP_H_
> 
> +#include <stddef.h>
> +#include <stdint.h>
> +
>  #include "igt_kms.h"
> 
>  int igt_dp_get_current_link_rate(int drm_fd, igt_output_t *output); @@ -27,4
> +30,10 @@ int igt_dp_get_pending_retrain(int drm_fd, igt_output_t *output);
> 
>  void igt_dp_wait_pending_retrain(int drm_fd, igt_output_t *output);
> 
> +int igt_dp_aux_open(int drm_fd, igt_output_t *output);
> +
> +int igt_dp_dpcd_read(int aux_fd, unsigned int offset, void *buf, size_t
> +size);
> +
> +int igt_dp_dpcd_read_byte(int aux_fd, unsigned int offset, uint8_t
> +*val);
> +
>  #endif
> --
> 2.25.1


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

* RE: [PATCH i-g-t 12/13] lib/igt_dp: Add link status predicates for both channel codings
  2026-09-16  4:48 ` [PATCH i-g-t 12/13] lib/igt_dp: Add link status predicates for both channel codings Kunal Joshi
@ 2026-09-23 13:55   ` S, Sowmiya
  0 siblings, 0 replies; 31+ messages in thread
From: S, Sowmiya @ 2026-09-23 13:55 UTC (permalink / raw)
  To: Joshi, Kunal1, igt-dev@lists.freedesktop.org, Joshi, Kunal1

Hi @Joshi, Kunal1,

> -----Original Message-----
> From: igt-dev <igt-dev-bounces@lists.freedesktop.org> On Behalf Of Kunal
> Joshi
> Sent: 16 September 2026 10:18
> To: igt-dev@lists.freedesktop.org
> Cc: Joshi, Kunal1 <kunal1.joshi@intel.com>
> Subject: [PATCH i-g-t 12/13] lib/igt_dp: Add link status predicates for both
> channel codings
> 
> A link that is up has, for every lane in use, clock recovery done, channel
> equalisation done and symbols locked, plus interlane alignment done for the
> link as a whole. 128b/132b reports that differently from
> 8b/10b: there is no clock recovery phase and so no CR_DONE bit, and a training
> failure has its own bit in DP_LANE_ALIGN_STATUS_UPDATED.
> 
> Add igt_dp_link_status_ok() covering both, mirroring
> drm_dp_channel_eq_ok() and the drm_dp_128b132b_* predicates in
> drm_dp_helper.c, so a caller does not have to know which set of bits applies to
> the rate it forced.
> 
> Add igt_dp_channel_coding_ok() next to it, reading
> MAIN_LINK_CHANNEL_CODING_SET, so that the DPCD offsets stay inside the
> library and a test can ask the two questions it cares about without handling raw
> registers.
> 
> Both return 1, 0 or a negative error code, so that a caller can tell a sink which
> disagrees apart from a DPCD it could not read at all. That matters because the
> AUX character device is not always there.
> 
> Assisted-by: GitHub_Copilot:claude-opus-5
> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
LGTM,
Reviewed-by: Sowmiya S <sowmiya.s@intel.com>
> ---
>  lib/igt_dp.c | 103
> +++++++++++++++++++++++++++++++++++++++++++++++++++
>  lib/igt_dp.h |   4 ++
>  2 files changed, 107 insertions(+)
> 
> diff --git a/lib/igt_dp.c b/lib/igt_dp.c index 0b1fe73de..a7d9f1e77 100644
> --- a/lib/igt_dp.c
> +++ b/lib/igt_dp.c
> @@ -281,3 +281,106 @@ int igt_dp_dpcd_read_byte(int aux_fd, unsigned int
> offset, uint8_t *val)
> 
>  	return ret == 1 ? 0 : -EIO;
>  }
> +
> +/*
> + * DPCD registers and bits used by the sink side link checks, mirroring
> +the
> + * kernel's include/drm/display/drm_dp.h.
> + */
> +#define DPCD_MAIN_LINK_CHANNEL_CODING_SET	0x108
> +#define  DPCD_SET_ANSI_8B10B			(1 << 0)
> +#define  DPCD_SET_ANSI_128B132B			(1 << 1)
> +
> +#define DPCD_LANE0_1_STATUS			0x202
> +#define DPCD_LINK_STATUS_SIZE			6
> +#define  DPCD_LANE_CR_DONE			(1 << 0)
> +#define  DPCD_LANE_CHANNEL_EQ_DONE		(1 << 1)
> +#define  DPCD_LANE_SYMBOL_LOCKED		(1 << 2)
> +
> +/* DP_LANE_ALIGN_STATUS_UPDATED, the third byte of the status block. */
> +#define  DPCD_INTERLANE_ALIGN_DONE		(1 << 0)
> +#define  DPCD_128B132B_LT_FAILED		(1 << 4)
> +
> +static uint8_t dpcd_lane_status(const uint8_t
> link_status[DPCD_LINK_STATUS_SIZE],
> +				int lane)
> +{
> +	return (link_status[lane / 2] >> (4 * (lane % 2))) & 0xf; }
> +
> +/**
> + * igt_dp_channel_coding_ok: Check the channel coding the sink was told to
> use
> + * @aux_fd:	AUX channel device file descriptor from igt_dp_aux_open()
> + * @uhbr:	Whether 128b/132b is expected
> + *
> + * Read MAIN_LINK_CHANNEL_CODING_SET and check that it selects the
> +encoding the
> + * link rate implies. This is the only direct evidence that the coding
> +a UHBR
> + * rate implies is the coding that reached the wire.
> + *
> + * Returns:
> + * 1 when the expected coding is selected, 0 when it is not, or a
> +negative
> + * error code when the DPCD could not be read.
> + */
> +int igt_dp_channel_coding_ok(int aux_fd, bool uhbr) {
> +	uint8_t coding;
> +	int ret;
> +
> +	ret = igt_dp_dpcd_read_byte(aux_fd,
> DPCD_MAIN_LINK_CHANNEL_CODING_SET,
> +				    &coding);
> +	if (ret < 0)
> +		return ret;
> +
> +	return !!(coding & (uhbr ? DPCD_SET_ANSI_128B132B :
> +DPCD_SET_ANSI_8B10B)); }
> +
> +/**
> + * igt_dp_link_status_ok: Check the sink considers the link trained
> + * @aux_fd:	AUX channel device file descriptor from igt_dp_aux_open()
> + * @lane_count:	Number of lanes in use
> + * @uhbr:	Whether the link runs at a UHBR rate, i.e. uses 128b/132b
> + *
> + * Read the link status block at DP_LANE0_1_STATUS and check that every
> +lane in
> + * use is locked and the lanes are aligned.
> + *
> + * 128b/132b reports this differently from 8b/10b: there is no clock
> +recovery
> + * bit, and a training failure has its own bit in
> + * DP_LANE_ALIGN_STATUS_UPDATED. Mirrors drm_dp_channel_eq_ok() and
> the
> + * drm_dp_128b132b_* predicates.
> + *
> + * Returns:
> + * 1 when the sink considers the link trained, 0 when it does not, or a
> + * negative error code when the DPCD could not be read.
> + */
> +int igt_dp_link_status_ok(int aux_fd, int lane_count, bool uhbr) {
> +	uint8_t link_status[DPCD_LINK_STATUS_SIZE];
> +	uint8_t lane_mask;
> +	uint8_t align;
> +	int ret;
> +	int lane;
> +
> +	ret = igt_dp_dpcd_read(aux_fd, DPCD_LANE0_1_STATUS, link_status,
> +			       sizeof(link_status));
> +	if (ret < 0)
> +		return ret;
> +	if (ret != sizeof(link_status))
> +		return -EIO;
> +
> +	align = link_status[2];
> +
> +	if (uhbr && (align & DPCD_128B132B_LT_FAILED))
> +		return 0;
> +
> +	if (!(align & DPCD_INTERLANE_ALIGN_DONE))
> +		return 0;
> +
> +	/* 128b/132b has no clock recovery phase, so no CR_DONE bit. */
> +	lane_mask = DPCD_LANE_CHANNEL_EQ_DONE |
> DPCD_LANE_SYMBOL_LOCKED;
> +	if (!uhbr)
> +		lane_mask |= DPCD_LANE_CR_DONE;
> +
> +	for (lane = 0; lane < lane_count; lane++)
> +		if ((dpcd_lane_status(link_status, lane) & lane_mask) !=
> lane_mask)
> +			return 0;
> +
> +	return 1;
> +}
> diff --git a/lib/igt_dp.h b/lib/igt_dp.h index 44f3b11a1..332656aae 100644
> --- a/lib/igt_dp.h
> +++ b/lib/igt_dp.h
> @@ -36,4 +36,8 @@ int igt_dp_dpcd_read(int aux_fd, unsigned int offset, void
> *buf, size_t size);
> 
>  int igt_dp_dpcd_read_byte(int aux_fd, unsigned int offset, uint8_t *val);
> 
> +int igt_dp_channel_coding_ok(int aux_fd, bool uhbr);
> +
> +int igt_dp_link_status_ok(int aux_fd, int lane_count, bool uhbr);
> +
>  #endif
> --
> 2.25.1


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

* RE: [PATCH i-g-t 13/13] tests/intel/kms_dp_link_training: Verify the trained link from the sink side
  2026-09-16  4:48 ` [PATCH i-g-t 13/13] tests/intel/kms_dp_link_training: Verify the trained link from the sink side Kunal Joshi
@ 2026-09-23 14:00   ` S, Sowmiya
  0 siblings, 0 replies; 31+ messages in thread
From: S, Sowmiya @ 2026-09-23 14:00 UTC (permalink / raw)
  To: Joshi, Kunal1, igt-dev@lists.freedesktop.org, Joshi, Kunal1

Hi @Joshi, Kunal1,

> -----Original Message-----
> From: igt-dev <igt-dev-bounces@lists.freedesktop.org> On Behalf Of Kunal
> Joshi
> Sent: 16 September 2026 10:18
> To: igt-dev@lists.freedesktop.org
> Cc: Joshi, Kunal1 <kunal1.joshi@intel.com>
> Subject: [PATCH i-g-t 13/13] tests/intel/kms_dp_link_training: Verify the trained
> link from the sink side
> 
> The test reads everything back from the driver. A driver that believes a link is
> up when the sink does not would pass, and the UHBR subtests infer 128b/132b
> from the rate rather than checking it.
> 
> After training, ask the sink. MAIN_LINK_CHANNEL_CODING_SET must select
> 128b/132b for a UHBR configuration and 8b/10b otherwise, and the link status
> must show every lane in use locked. That is the only direct evidence that the
> coding the rate implies is the coding that reached the wire.
> 
> Skip when the DPCD can be opened but not read, rather than reporting the
> configuration as trained on evidence the test failed to collect. A missing AUX
> character device is treated differently and only logged:
> CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not enabled by default, so there
> is often none at all, and that says nothing about the link, whereas AUX is out of
> band and answers whether or not the link trained, so a read that fails once the
> device is open is a result in itself.
> 
> An MST stream connector's AUX reaches the far sink over sideband rather than
> the link partner, which is the end of the link being trained, so use the
> topology's root connector for MST. The root reads disconnected while MST is
> active, so find it by id instead of walking the connected outputs.
> 
> Assisted-by: GitHub_Copilot:claude-opus-5
> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
LGTM,
Reviewed-by: Sowmiya S <sowmiya.s@intel.com>
> ---
>  tests/intel/kms_dp_link_training.c | 91 +++++++++++++++++++++++++++++-
>  1 file changed, 90 insertions(+), 1 deletion(-)
> 
> diff --git a/tests/intel/kms_dp_link_training.c
> b/tests/intel/kms_dp_link_training.c
> index 229eb3d69..a228b5493 100644
> --- a/tests/intel/kms_dp_link_training.c
> +++ b/tests/intel/kms_dp_link_training.c
> @@ -55,8 +55,11 @@
>   *              link.
>   */
> 
> +#include <string.h>
> +
>  #include "i915/i915_dp.h"
>  #include "igt.h"
> +#include "igt_dp.h"
>  #include "igt_kms.h"
>  #include "intel/kms_joiner_helper.h"
>  #include "intel/kms_mst_helper.h"
> @@ -80,6 +83,7 @@ typedef struct {
>  	uint32_t devid;
>  	igt_display_t display;
>  	igt_output_t *output;
> +	int aux_fd;
>  } data_t;
> 
>  /*
> @@ -323,6 +327,79 @@ static void assert_link_recovery_idle(data_t *data,
>  	} while (elapsed < LINK_RECOVERY_TIMEOUT);  }
> 
> +/*
> + * open_link_aux - Open the AUX device at the near end of the link.
> + *
> + * An MST stream connector's AUX reaches the far sink over sideband
> +rather than
> + * the link partner, which is the end of the link being trained, so for
> +MST it
> + * is the topology's root connector that has to be asked. The root
> +reads
> + * disconnected while MST is active, so it is found by id rather than
> +by
> + * walking the connected outputs.
> + */
> +static int open_link_aux(data_t *data, bool mst) {
> +	igt_output_t *output = data->output;
> +
> +	if (mst) {
> +		int root_id = igt_get_dp_mst_connector_id(data->output);
> +		int i;
> +
> +		output = NULL;
> +
> +		for (i = 0; i < data->display.n_outputs; i++) {
> +			igt_output_t *root = &data->display.outputs[i];
> +
> +			if (root->config.connector &&
> +			    root->config.connector->connector_id == root_id) {
> +				output = root;
> +				break;
> +			}
> +		}
> +
> +		if (!output)
> +			return -ENOENT;
> +	}
> +
> +	return igt_dp_aux_open(data->drm_fd, output); }
> +
> +/*
> + * assert_sink_agrees - Ask the sink whether the link is really up.
> + *
> + * Everything else the test checks is read back from the driver. This
> +is the
> + * only check that the sink agrees, and the only direct evidence of
> +which
> + * channel coding reached the wire.
> + *
> + * A DPCD the test could open but cannot read leaves the case
> +unverified, so
> + * skip rather than report it as trained. A missing AUX device does
> +not: AUX is
> + * out of band and answers whether or not the link trained, so a read
> +that
> + * fails once the device is open is a result in itself, while
> + * CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV not being enabled - it is not by
> +default -
> + * says nothing about the link and would take every driver side check
> +down with
> + * it.
> + */
> +static void assert_sink_agrees(data_t *data,
> +			       const struct i915_dp_link_config *config) {
> +	bool uhbr = i915_dp_is_uhbr_rate(config->link_rate);
> +	int ret;
> +
> +	if (data->aux_fd < 0)
> +		return;
> +
> +	ret = igt_dp_channel_coding_ok(data->aux_fd, uhbr);
> +	igt_skip_on_f(ret < 0, "Unable to read the sink's channel coding: %s\n",
> +		      strerror(-ret));
> +	igt_assert_f(ret, "Sink is not set to %s at rate %d\n",
> +		     uhbr ? "128b/132b" : "8b/10b", config->link_rate);
> +
> +	ret = igt_dp_link_status_ok(data->aux_fd, config->lane_count, uhbr);
> +	igt_skip_on_f(ret < 0, "Unable to read the sink's link status: %s\n",
> +		      strerror(-ret));
> +	igt_assert_f(ret, "Sink does not report %d lanes locked at rate %d\n",
> +		     config->lane_count, config->link_rate); }
> +
>  /*
>   * train_link_config - Force one link configuration, re-establish the link and
>   * check that the configuration took effect and survived training.
> @@ -366,6 +443,8 @@ static void train_link_config(data_t *data, bool mst,
>  	 * count resets the recovery state, which would mask the failure.
>  	 */
>  	assert_link_recovery_idle(data, config);
> +
> +	assert_sink_agrees(data, config);
>  }
> 
>  /*
> @@ -564,6 +643,11 @@ static bool run_link_rate_test(data_t *data, bool mst,
> bool uhbr)
>  							       data->output),
>  		      "Kernel has no intel_dp_allowed_link_configs debugfs\n");
> 
> +	data->aux_fd = open_link_aux(data, mst);
> +	if (data->aux_fd < 0)
> +		igt_info("%s: no AUX device (%s), sink side checks are
> skipped\n",
> +			 igt_output_name(data->output), strerror(-data-
> >aux_fd));
> +
>  	/*
>  	 * Enumerate with the forced parameters reset, or the set being read is
>  	 * the forced one rather than the one the driver would pick from.
> @@ -603,6 +687,11 @@ static bool run_link_rate_test(data_t *data, bool mst,
> bool uhbr)
>  		igt_info("Output %s allows no %sUHBR link config\n",
>  			 igt_output_name(data->output), uhbr ? "" : "non-");
> 
> +	if (data->aux_fd >= 0) {
> +		close(data->aux_fd);
> +		data->aux_fd = -1;
> +	}
> +
>  	igt_info("----------------------------------------------------\n");
>  	return num_dynamics > 0;
>  }
> @@ -718,7 +807,7 @@ IGT_TEST_DESCRIPTION("Test to validate link training
> on SST/MST with "
> 
>  int igt_main()
>  {
> -	data_t data = {};
> +	data_t data = { .aux_fd = -1 };
> 
>  	igt_fixture() {
>  		data.drm_fd = drm_open_driver_master(DRIVER_INTEL |
> DRIVER_XE);
> --
> 2.25.1


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

end of thread, other threads:[~2026-09-23 14:01 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-16  4:47 [PATCH i-g-t 00/13] Expand kms_dp_link_training coverage Kunal Joshi
2026-09-16  4:47 ` [PATCH i-g-t 01/13] lib/i915/i915_dp: Add helpers for the allowed link configs debugfs Kunal Joshi
2026-09-21  8:37   ` S, Sowmiya
2026-09-16  4:47 ` [PATCH i-g-t 02/13] tests/intel/kms_dp_link_training: Use the UHBR helpers from lib Kunal Joshi
2026-09-21  8:38   ` S, Sowmiya
2026-09-16  4:47 ` [PATCH i-g-t 03/13] tests/intel/kms_dp_link_training: Extract train_link_config() Kunal Joshi
2026-09-22 11:51   ` S, Sowmiya
2026-09-16  4:47 ` [PATCH i-g-t 04/13] tests/intel/kms_dp_link_training: Check the config survived training Kunal Joshi
2026-09-22  5:25   ` S, Sowmiya
2026-09-16  4:47 ` [PATCH i-g-t 05/13] tests/intel/kms_dp_link_training: Drive the smallest mode the sink offers Kunal Joshi
2026-09-22 11:59   ` S, Sowmiya
2026-09-16  4:47 ` [PATCH i-g-t 06/13] tests/intel/kms_dp_link_training: Train every allowed link config Kunal Joshi
2026-09-22 13:51   ` S, Sowmiya
2026-09-16  4:47 ` [PATCH i-g-t 07/13] lib/i915/i915_dp: Add a Type-C port mode query Kunal Joshi
2026-09-22 14:55   ` S, Sowmiya
2026-09-16  4:47 ` [PATCH i-g-t 08/13] tests/intel/kms_dp_link_training: Log the DP link inventory in the fixture Kunal Joshi
2026-09-23 12:46   ` S, Sowmiya
2026-09-16  4:47 ` [PATCH i-g-t 09/13] tests/intel/kms_dp_link_training: Group the outputs into links Kunal Joshi
2026-09-23 13:10   ` S, Sowmiya
2026-09-16  4:47 ` [PATCH i-g-t 10/13] tests/intel/kms_dp_link_training: Add per connector mode subtests Kunal Joshi
2026-09-23 13:29   ` S, Sowmiya
2026-09-16  4:47 ` [PATCH i-g-t 11/13] lib/igt_dp: Add DPCD read helpers Kunal Joshi
2026-09-23 13:34   ` S, Sowmiya
2026-09-16  4:48 ` [PATCH i-g-t 12/13] lib/igt_dp: Add link status predicates for both channel codings Kunal Joshi
2026-09-23 13:55   ` S, Sowmiya
2026-09-16  4:48 ` [PATCH i-g-t 13/13] tests/intel/kms_dp_link_training: Verify the trained link from the sink side Kunal Joshi
2026-09-23 14:00   ` S, Sowmiya
2026-09-16  5:08 ` ✓ Xe.CI.BAT: success for Expand kms_dp_link_training coverage Patchwork
2026-09-16  5:25 ` ✓ i915.CI.BAT: " Patchwork
2026-09-16  6:15 ` ✗ Xe.CI.FULL: failure " Patchwork
2026-09-16 11:59 ` ✗ i915.CI.Full: " Patchwork

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