Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH i-g-t 0/2] tests/intel/kms_tbt: Add DP tunneling validation tests
@ 2026-05-11  5:43 Kunal Joshi
  2026-05-11  5:43 ` [PATCH i-g-t 1/2] lib/igt_connector_helper: Add DRM connector helpers using libdisplay-info Kunal Joshi
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Kunal Joshi @ 2026-05-11  5:43 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi

Add an IGT test binary (kms_tbt) that validates the DP tunneling
debugfs ABI exposed by drm/display/dp_tunnel and consumed by
i915 / xe. Pairs with the kernel DP-tunnel debugfs RFC series.

Patch 1 adds a connector-enumeration helper backed by
libdisplay-info for look-up by EDID serial / MST PATH across
re-probes, plus clock-based mode-selection utilities.

Patch 2 is the kms_tbt test: 18 single-display subtests and 9
multi-display / MST subtests covering BWA toggle, bw_limit cap
injection, suspend/resume, and mode filtering.

Below link points to corresponding KMD patch series
https://patchwork.freedesktop.org/series/166289/

Kunal Joshi (2):
  lib/igt_connector_helper: Add DRM connector helpers using
    libdisplay-info
  tests/intel/kms_tbt: Add DP tunneling validation tests

 lib/igt_connector_helper.c |  525 ++++++++
 lib/igt_connector_helper.h |   45 +
 lib/meson.build            |    5 +
 meson.build                |    3 +
 tests/intel/kms_tbt.c      | 2583 ++++++++++++++++++++++++++++++++++++
 tests/meson.build          |    5 +
 6 files changed, 3166 insertions(+)
 create mode 100644 lib/igt_connector_helper.c
 create mode 100644 lib/igt_connector_helper.h
 create mode 100644 tests/intel/kms_tbt.c

-- 
2.25.1


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

* [PATCH i-g-t 1/2] lib/igt_connector_helper: Add DRM connector helpers using libdisplay-info
  2026-05-11  5:43 [PATCH i-g-t 0/2] tests/intel/kms_tbt: Add DP tunneling validation tests Kunal Joshi
@ 2026-05-11  5:43 ` Kunal Joshi
  2026-05-11  5:43 ` [PATCH i-g-t 2/2] tests/intel/kms_tbt: Add DP tunneling validation tests Kunal Joshi
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Kunal Joshi @ 2026-05-11  5:43 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi, Simon Ser, Jani Nikula, Karthik B S

The upcoming DP tunneling tests need to look up connectors by EDID
serial or MST PATH across re-probes such as suspend/resume, and
select modes by pixel clock rather than resolution. Neither
capability exists in the current IGT helper set.

Add a small connector-enumeration layer backed by libdisplay-info
with look-up-by-name, by-PATH, and by-serial helpers, plus five
mode/output-selection utilities (lowest/highest clock, preferred,
mode-in-list, output-by-id). The dependency is optional; when
missing the helper is simply not built.

Cc: Simon Ser <contact@emersion.fr>
Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Karthik B S <karthik.b.s@intel.com>
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
 lib/igt_connector_helper.c | 525 +++++++++++++++++++++++++++++++++++++
 lib/igt_connector_helper.h |  45 ++++
 lib/meson.build            |   5 +
 meson.build                |   3 +
 4 files changed, 578 insertions(+)
 create mode 100644 lib/igt_connector_helper.c
 create mode 100644 lib/igt_connector_helper.h

diff --git a/lib/igt_connector_helper.c b/lib/igt_connector_helper.c
new file mode 100644
index 000000000..cd10b2e91
--- /dev/null
+++ b/lib/igt_connector_helper.c
@@ -0,0 +1,525 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+/**
+ * SECTION:igt_connector_helper
+ * @short_description: Generic DRM connector helpers
+ * @title: Connector Helper
+ * @include: igt_connector_helper.h
+ *
+ * Helpers for DRM connector enumeration, lookup by name / MST PATH /
+ * EDID serial, and post-hotplug reprobing. EDID parsing is delegated to
+ * libdisplay-info (https://gitlab.freedesktop.org/emersion/libdisplay-info).
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <libdisplay-info/info.h>
+#include <xf86drm.h>
+#include <xf86drmMode.h>
+
+#include "igt_core.h"
+#include "igt_kms.h"
+#include "igt_connector_helper.h"
+
+#define IGT_CONNECTOR_MAX_PROBE		64
+
+/*
+ * Best-effort serial extraction via libdisplay-info.
+ *
+ * di_info_get_serial() returns a malloc'd string built from the EDID
+ * 0xFF descriptor when present, falling back to the 32-bit header
+ * serial number rendered as decimal. NULL means the EDID is unparsable
+ * or contains no serial information at all.
+ */
+static void connector_serial_from_edid(const void *edid_data, size_t edid_size,
+				       char *serial, size_t serial_size)
+{
+	struct di_info *info;
+	char *got;
+
+	serial[0] = '\0';
+
+	info = di_info_parse_edid(edid_data, edid_size);
+	if (!info)
+		return;
+
+	got = di_info_get_serial(info);
+	if (got) {
+		snprintf(serial, serial_size, "%s", got);
+		free(got);
+	}
+
+	di_info_destroy(info);
+}
+
+/**
+ * igt_connector_get_connected:
+ * @drm_fd: DRM file descriptor
+ * @connectors: array to store connector IDs; must be valid if @max_connectors > 0
+ * @max_connectors: maximum number of connectors to store
+ *
+ * Walks all DRM connectors and stores the IDs of those currently connected.
+ * Scanning stops once @max_connectors IDs have been collected; later
+ * connectors are not examined.
+ *
+ * Returns: number of connector IDs written to @connectors, capped by
+ * @max_connectors.
+ */
+int igt_connector_get_connected(int drm_fd, uint32_t *connectors,
+				int max_connectors)
+{
+	drmModeRes *res;
+	drmModeConnector *conn;
+	int count = 0;
+	int i;
+
+	igt_assert(max_connectors >= 0);
+	if (max_connectors > 0)
+		igt_assert(connectors);
+
+	res = drmModeGetResources(drm_fd);
+	if (!res)
+		return 0;
+
+	for (i = 0; i < res->count_connectors && count < max_connectors; i++) {
+		conn = drmModeGetConnector(drm_fd, res->connectors[i]);
+		if (!conn)
+			continue;
+
+		if (conn->connection == DRM_MODE_CONNECTED)
+			connectors[count++] = conn->connector_id;
+
+		drmModeFreeConnector(conn);
+	}
+
+	drmModeFreeResources(res);
+	return count;
+}
+
+/**
+ * igt_connector_get_info:
+ * @drm_fd: DRM file descriptor
+ * @connector_id: connector ID
+ * @name: buffer for connector name (mandatory)
+ * @name_size: size of @name; must be > 0
+ * @serial: buffer for EDID-derived serial (mandatory)
+ * @serial_size: size of @serial; must be > 1
+ * @path: buffer for MST PATH property (optional, may be %NULL)
+ * @path_size: size of @path buffer
+ *
+ * Fills connector name, MST PATH and EDID-derived serial for a connector.
+ * @name is always filled when the connector is found and connected.
+ * @serial is filled by libdisplay-info from the EDID blob; left empty if no
+ * EDID is attached or the EDID has no serial information. @path is filled
+ * only if requested and the PATH property exists.
+ *
+ * Success means the connector object exists and is currently connected.
+ * @serial and @path are best-effort and may still be empty on success.
+ *
+ * Returns: %true if the connector was found and is connected, %false
+ * otherwise.
+ */
+bool igt_connector_get_info(int drm_fd, uint32_t connector_id,
+			    char *name, size_t name_size,
+			    char *serial, size_t serial_size,
+			    char *path, size_t path_size)
+{
+	drmModeConnector *conn;
+	drmModePropertyBlobPtr edid_blob = NULL;
+	drmModePropertyPtr prop;
+	uint64_t blob_id = 0;
+	int i;
+
+	igt_assert(name && name_size > 0);
+	igt_assert(serial && serial_size > 1);
+	igt_assert(!path || path_size > 0);
+
+	name[0] = '\0';
+	serial[0] = '\0';
+	if (path)
+		path[0] = '\0';
+
+	conn = drmModeGetConnector(drm_fd, connector_id);
+	if (!conn)
+		return false;
+
+	if (conn->connection != DRM_MODE_CONNECTED) {
+		drmModeFreeConnector(conn);
+		return false;
+	}
+
+	snprintf(name, name_size, "%s-%d",
+		 kmstest_connector_type_str(conn->connector_type),
+		 conn->connector_type_id);
+
+	for (i = 0; i < conn->count_props; i++) {
+		prop = drmModeGetProperty(drm_fd, conn->props[i]);
+		if (!prop)
+			continue;
+
+		if (strcmp(prop->name, "EDID") == 0)
+			blob_id = conn->prop_values[i];
+
+		drmModeFreeProperty(prop);
+		if (blob_id)
+			break;
+	}
+
+	if (path) {
+		drmModePropertyBlobPtr path_blob;
+
+		path_blob = kmstest_get_path_blob(drm_fd, connector_id);
+		if (path_blob) {
+			snprintf(path, path_size, "%s",
+				 (const char *)path_blob->data);
+			drmModeFreePropertyBlob(path_blob);
+		}
+	}
+
+	drmModeFreeConnector(conn);
+
+	if (blob_id) {
+		edid_blob = drmModeGetPropertyBlob(drm_fd, blob_id);
+		if (edid_blob) {
+			connector_serial_from_edid(edid_blob->data,
+						   edid_blob->length,
+						   serial, serial_size);
+			drmModeFreePropertyBlob(edid_blob);
+		}
+	}
+
+	return true;
+}
+
+/**
+ * igt_connector_find_by_path:
+ * @drm_fd: DRM file descriptor
+ * @path: MST PATH property value to match
+ * @connector_id: output for connector ID (filled on success)
+ *
+ * Finds the currently connected connector whose PATH property matches @path
+ * (exact string comparison). PATH is the preferred stable identity for MST
+ * connectors; connector IDs may change across hotplug events.
+ *
+ * Returns: %true if a matching connected connector was found.
+ */
+bool igt_connector_find_by_path(int drm_fd, const char *path,
+				uint32_t *connector_id)
+{
+	drmModeRes *res;
+	drmModeConnector *conn;
+	drmModePropertyBlobPtr path_blob;
+	bool found = false;
+	int i;
+
+	if (!path || !connector_id)
+		return false;
+
+	res = drmModeGetResources(drm_fd);
+	if (!res)
+		return false;
+
+	for (i = 0; i < res->count_connectors && !found; i++) {
+		conn = drmModeGetConnector(drm_fd, res->connectors[i]);
+		if (!conn)
+			continue;
+
+		if (conn->connection == DRM_MODE_CONNECTED) {
+			path_blob = kmstest_get_path_blob(drm_fd,
+							  conn->connector_id);
+			if (path_blob) {
+				const char *blob_str = path_blob->data;
+
+				/*
+				 * The kernel NUL-terminates the PATH blob,
+				 * but be defensive and bound the compare by
+				 * the blob length so a future kernel change
+				 * cannot drive us off the end of the buffer.
+				 */
+				if (path_blob->length > 0 &&
+				    strnlen(blob_str, path_blob->length) <
+				    path_blob->length &&
+				    strcmp(blob_str, path) == 0) {
+					*connector_id = conn->connector_id;
+					found = true;
+				}
+				drmModeFreePropertyBlob(path_blob);
+			}
+		}
+
+		drmModeFreeConnector(conn);
+	}
+
+	drmModeFreeResources(res);
+
+	if (found)
+		igt_debug("igt_connector: Found connector %u for path '%s'\n",
+			  *connector_id, path);
+
+	return found;
+}
+
+/**
+ * igt_connector_find_by_name:
+ * @drm_fd: DRM file descriptor
+ * @name: connector name to match (e.g. "DP-6")
+ * @connector_id: output for connector ID (filled on success)
+ *
+ * Name-based lookup helper. Prefer igt_connector_find_by_path() or
+ * igt_connector_find_by_serial() for MST connectors, since connector
+ * names and IDs may change across hotplug events.
+ *
+ * Returns: %true if a matching connected connector was found.
+ */
+bool igt_connector_find_by_name(int drm_fd, const char *name,
+				uint32_t *connector_id)
+{
+	drmModeRes *res;
+	drmModeConnector *conn;
+	char conn_name[IGT_CONNECTOR_NAME_MAX];
+	bool found = false;
+	int i;
+
+	if (!name || !connector_id)
+		return false;
+
+	res = drmModeGetResources(drm_fd);
+	if (!res)
+		return false;
+
+	for (i = 0; i < res->count_connectors && !found; i++) {
+		conn = drmModeGetConnector(drm_fd, res->connectors[i]);
+		if (!conn)
+			continue;
+
+		snprintf(conn_name, sizeof(conn_name), "%s-%d",
+			 kmstest_connector_type_str(conn->connector_type),
+			 conn->connector_type_id);
+
+		if (strcmp(conn_name, name) == 0 &&
+		    conn->connection == DRM_MODE_CONNECTED) {
+			*connector_id = conn->connector_id;
+			found = true;
+		}
+
+		drmModeFreeConnector(conn);
+	}
+
+	drmModeFreeResources(res);
+
+	if (found)
+		igt_debug("igt_connector: Found connector %u for name '%s'\n",
+			  *connector_id, name);
+
+	return found;
+}
+
+/**
+ * igt_connector_find_by_serial:
+ * @drm_fd: DRM file descriptor
+ * @serial: EDID-derived serial string to match
+ * @connector_id: output for connector ID (filled on success)
+ *
+ * Finds a currently connected connector whose EDID serial matches @serial.
+ * EDID serial is the most stable identifier for a physical display and
+ * survives hotplug / suspend-resume connector re-enumeration.
+ *
+ * Returns: %true if a matching connected connector was found.
+ */
+bool igt_connector_find_by_serial(int drm_fd, const char *serial,
+				  uint32_t *connector_id)
+{
+	uint32_t connectors[IGT_CONNECTOR_MAX_PROBE];
+	char name[IGT_CONNECTOR_NAME_MAX];
+	char found_serial[IGT_CONNECTOR_SERIAL_MAX];
+	int n, i;
+
+	if (!serial || !serial[0] || !connector_id)
+		return false;
+
+	n = igt_connector_get_connected(drm_fd, connectors,
+					IGT_CONNECTOR_MAX_PROBE);
+	for (i = 0; i < n; i++) {
+		if (!igt_connector_get_info(drm_fd, connectors[i],
+					    name, sizeof(name),
+					    found_serial, sizeof(found_serial),
+					    NULL, 0))
+			continue;
+
+		if (found_serial[0] && strcmp(found_serial, serial) == 0) {
+			*connector_id = connectors[i];
+			igt_debug("igt_connector: Found connector %u (%s) for serial '%s'\n",
+				  *connector_id, name, serial);
+			return true;
+		}
+	}
+	return false;
+}
+
+/**
+ * igt_connector_reprobe_all:
+ * @drm_fd: DRM file descriptor
+ *
+ * Issues a GETCONNECTOR ioctl for every connector, asking the kernel for
+ * fresh state. This refreshes the cached connection status and MST topology
+ * visibility from the kernel's perspective, but does not synthesise a
+ * hot-plug event nor guarantee a full hardware reprobe across all driver
+ * paths.
+ */
+void igt_connector_reprobe_all(int drm_fd)
+{
+	drmModeRes *res;
+	drmModeConnector *conn;
+	int i;
+
+	res = drmModeGetResources(drm_fd);
+	if (!res)
+		return;
+
+	for (i = 0; i < res->count_connectors; i++) {
+		conn = drmModeGetConnector(drm_fd, res->connectors[i]);
+		if (conn)
+			drmModeFreeConnector(conn);
+	}
+
+	drmModeFreeResources(res);
+}
+
+/**
+ * igt_connector_find_lowest_clock_mode:
+ * @output: Connected output to inspect.
+ * @out: Filled with the chosen mode on success.
+ *
+ * Picks the mode with the smallest pixel clock from @output's current
+ * connector mode list. Useful for testing fallback paths that need a
+ * mode that consumes minimal bandwidth.
+ *
+ * Returns: true on success, false if the connector has no modes.
+ */
+bool igt_connector_find_lowest_clock_mode(igt_output_t *output,
+					  drmModeModeInfo *out)
+{
+	drmModeConnector *c = output->config.connector;
+	int i, best = -1;
+
+	for (i = 0; i < c->count_modes; i++) {
+		if (best < 0 || c->modes[i].clock < c->modes[best].clock)
+			best = i;
+	}
+	if (best < 0)
+		return false;
+
+	*out = c->modes[best];
+	return true;
+}
+
+/**
+ * igt_connector_find_highest_clock_mode_in:
+ * @conn: Freshly probed connector to inspect.
+ * @out: Filled with the chosen mode on success.
+ *
+ * Picks the mode with the largest pixel clock from @conn's mode list.
+ * Operates on a freshly fetched #drmModeConnector rather than an
+ * #igt_output_t so callers can use it after #drmModeGetConnector to
+ * inspect a kernel-filtered list (e.g. after writing a bandwidth cap).
+ *
+ * Returns: true on success, false if @conn has no modes.
+ */
+bool igt_connector_find_highest_clock_mode_in(const drmModeConnector *conn,
+					      drmModeModeInfo *out)
+{
+	int i, best = -1;
+
+	for (i = 0; i < conn->count_modes; i++) {
+		if (best < 0 || conn->modes[i].clock > conn->modes[best].clock)
+			best = i;
+	}
+	if (best < 0)
+		return false;
+
+	*out = conn->modes[best];
+	return true;
+}
+
+/**
+ * igt_connector_find_preferred_mode:
+ * @output: Connected output to inspect.
+ * @out: Filled with the chosen mode on success.
+ *
+ * Picks the first mode flagged %DRM_MODE_TYPE_PREFERRED on @output. Falls
+ * back to the first mode in the list when no preferred mode is present.
+ * Unlike #kmstest_get_connector_default_mode this performs no environment
+ * variable overrides, giving deterministic behaviour for tests that need
+ * to reason about which mode they will pick.
+ *
+ * Returns: true on success, false if the connector has no modes.
+ */
+bool igt_connector_find_preferred_mode(igt_output_t *output,
+				       drmModeModeInfo *out)
+{
+	drmModeConnector *c = output->config.connector;
+	int i;
+
+	for (i = 0; i < c->count_modes; i++) {
+		if (c->modes[i].type & DRM_MODE_TYPE_PREFERRED) {
+			*out = c->modes[i];
+			return true;
+		}
+	}
+	if (c->count_modes > 0) {
+		*out = c->modes[0];
+		return true;
+	}
+	return false;
+}
+
+/**
+ * igt_connector_mode_in_list:
+ * @conn: Connector whose mode list to search.
+ * @mode: Mode to look up.
+ *
+ * Returns true if a mode matching @mode in pixel clock and active region
+ * (hdisplay, vdisplay) is present in @conn's current mode list. Useful
+ * for verifying whether a previously cached mode survives a kernel-side
+ * mode filter (e.g. after writing a bandwidth cap).
+ */
+bool igt_connector_mode_in_list(const drmModeConnector *conn,
+				const drmModeModeInfo *mode)
+{
+	int i;
+
+	for (i = 0; i < conn->count_modes; i++) {
+		if (conn->modes[i].clock == mode->clock &&
+		    conn->modes[i].hdisplay == mode->hdisplay &&
+		    conn->modes[i].vdisplay == mode->vdisplay)
+			return true;
+	}
+	return false;
+}
+
+/**
+ * igt_connector_find_output_by_id:
+ * @display: Initialised display containing the outputs to search.
+ * @connector_id: DRM connector ID to look for.
+ *
+ * Walks the connected outputs of @display and returns the one whose DRM
+ * connector ID matches @connector_id, or %NULL if no such output exists.
+ *
+ * Returns: matching #igt_output_t pointer or %NULL.
+ */
+igt_output_t *igt_connector_find_output_by_id(igt_display_t *display,
+					      uint32_t connector_id)
+{
+	igt_output_t *output;
+
+	for_each_connected_output(display, output) {
+		if (output->config.connector->connector_id == connector_id)
+			return output;
+	}
+
+	return NULL;
+}
diff --git a/lib/igt_connector_helper.h b/lib/igt_connector_helper.h
new file mode 100644
index 000000000..3e2ef7e35
--- /dev/null
+++ b/lib/igt_connector_helper.h
@@ -0,0 +1,45 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#ifndef IGT_CONNECTOR_HELPER_H
+#define IGT_CONNECTOR_HELPER_H
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+
+#include <xf86drmMode.h>
+
+#include "igt_kms.h"
+
+#define IGT_CONNECTOR_NAME_MAX		64
+#define IGT_CONNECTOR_SERIAL_MAX	64
+
+int igt_connector_get_connected(int drm_fd, uint32_t *connectors,
+				int max_connectors);
+bool igt_connector_get_info(int drm_fd, uint32_t connector_id,
+			    char *name, size_t name_size,
+			    char *serial, size_t serial_size,
+			    char *path, size_t path_size);
+bool igt_connector_find_by_path(int drm_fd, const char *path,
+				uint32_t *connector_id);
+bool igt_connector_find_by_name(int drm_fd, const char *name,
+				uint32_t *connector_id);
+bool igt_connector_find_by_serial(int drm_fd, const char *serial,
+				  uint32_t *connector_id);
+void igt_connector_reprobe_all(int drm_fd);
+
+bool igt_connector_find_lowest_clock_mode(igt_output_t *output,
+					  drmModeModeInfo *out);
+bool igt_connector_find_highest_clock_mode_in(const drmModeConnector *conn,
+					      drmModeModeInfo *out);
+bool igt_connector_find_preferred_mode(igt_output_t *output,
+				       drmModeModeInfo *out);
+bool igt_connector_mode_in_list(const drmModeConnector *conn,
+				const drmModeModeInfo *mode);
+igt_output_t *igt_connector_find_output_by_id(igt_display_t *display,
+					      uint32_t connector_id);
+
+#endif /* IGT_CONNECTOR_HELPER_H */
diff --git a/lib/meson.build b/lib/meson.build
index a82aa27dc..46d007eef 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -156,6 +156,11 @@ lib_deps = [
 
 inc = [ inc, include_directories('vendor') ]
 
+if libdisplay_info.found()
+	lib_deps += libdisplay_info
+	lib_sources += 'igt_connector_helper.c'
+endif
+
 if libdrm_nouveau.found()
 	lib_deps += libdrm_nouveau
 	lib_sources += [
diff --git a/meson.build b/meson.build
index 79051be21..0e06139b2 100644
--- a/meson.build
+++ b/meson.build
@@ -166,6 +166,9 @@ libpci = dependency('libpci', required : true)
 libudev = dependency('libudev', required : true)
 glib = dependency('glib-2.0', required : true)
 
+libdisplay_info = dependency('libdisplay-info', required : false)
+build_info += 'libdisplay-info: @0@'.format(libdisplay_info.found())
+
 xmlrpc = dependency('xmlrpc', required : false)
 xmlrpc_util = dependency('xmlrpc_util', required : false)
 xmlrpc_client = dependency('xmlrpc_client', required : false)
-- 
2.25.1


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

* [PATCH i-g-t 2/2] tests/intel/kms_tbt: Add DP tunneling validation tests
  2026-05-11  5:43 [PATCH i-g-t 0/2] tests/intel/kms_tbt: Add DP tunneling validation tests Kunal Joshi
  2026-05-11  5:43 ` [PATCH i-g-t 1/2] lib/igt_connector_helper: Add DRM connector helpers using libdisplay-info Kunal Joshi
@ 2026-05-11  5:43 ` Kunal Joshi
  2026-05-12  0:14 ` ✓ i915.CI.BAT: success for " Patchwork
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Kunal Joshi @ 2026-05-11  5:43 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi, Imre Deak, Karthik B S

Add a kms_tbt test binary that exercises the DP tunneling debugfs
ABI exposed by drm/display/dp_tunnel and the i915/xe usage of it.

Cc: Imre Deak <imre.deak@intel.com>
Cc: Karthik B S <karthik.b.s@intel.com>
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
 tests/intel/kms_tbt.c | 2583 +++++++++++++++++++++++++++++++++++++++++
 tests/meson.build     |    5 +
 2 files changed, 2588 insertions(+)
 create mode 100644 tests/intel/kms_tbt.c

diff --git a/tests/intel/kms_tbt.c b/tests/intel/kms_tbt.c
new file mode 100644
index 000000000..c879bbf53
--- /dev/null
+++ b/tests/intel/kms_tbt.c
@@ -0,0 +1,2583 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+/**
+ * TEST: kms tbt
+ * Category: Display
+ * Description: Functional tests for i915 DP tunneling over USB4/Thunderbolt.
+ *              Validates kernel behavior (BW allocation, mode fallback,
+ *              suspend/resume, multi-stream accounting) using debugfs hooks.
+ * Driver requirement: i915, xe
+ * Mega feature: DP Tunneling
+ *
+ * SUBTEST: basic
+ * Description: A tunneled output exists, BWA is enabled and a modeset on its
+ *              preferred mode allocates positive BW. Also asserts the tunnel
+ *              DPRX max rate is at least the link's current max rate.
+ *
+ * SUBTEST: modeset-bw
+ * Description: Switching between modes correctly updates allocated BW both
+ *              upward (low->high) and back to exactly the same value on a
+ *              round-trip to the original mode.
+ *
+ * SUBTEST: disable-bw
+ * Description: Disabling a tunneled output releases its allocated BW to zero.
+ *
+ * SUBTEST: suspend
+ * Description: Tunnel state including BWA, allocated BW, DPRX rate and group
+ *              ID is fully restored after a mem suspend/resume cycle.
+ *
+ * SUBTEST: limit-fallback
+ * Description: Setting bw_limit below the preferred mode's BW requirement
+ *              filters the preferred mode from the connector list and
+ *              allows a lower-clock fallback mode to modeset.
+ *
+ * SUBTEST: limit-boundary
+ * Description: BW limit at the mode's BW threshold keeps the mode in the
+ *              connector list; one kB/s below removes it; clearing the cap
+ *              restores the full mode list.
+ *
+ * SUBTEST: limit-suspend
+ * Description: bw_limit is reset to 0 across suspend/resume because the
+ *              tunnel object is destroyed on suspend and re-created on resume.
+ *
+ * SUBTEST: bwa-re-enable
+ * Description: Disabling BWA reports allocated BW = -1 with the tunnel still
+ *              alive and link parameters falling back to standard DPCD;
+ *              re-enabling BWA + a fresh modeset restores both BW allocation
+ *              and the original max link rate.
+ *
+ * SUBTEST: bwa-cycle
+ * Description: Ten rapid BWA disable/enable cycles do not corrupt the display
+ *              or leak BW resources.
+ *
+ * SUBTEST: dual-bw-sum
+ * Description: Two SST tunnels in the same USB4 group report the same
+ *              group_free BW (estimated - allocated) and group_free is
+ *              non-negative.
+ *
+ * SUBTEST: dual-limit-isolation
+ * Description: bw_limit is per-tunnel-object, not per-group. With two SST
+ *              tunnels sharing one USB4 group, a cap on tunnel A clips A's
+ *              connector mode list and forces A to a lower-clock mode, while
+ *              tunnel B's mode list and active mode are unchanged; B's
+ *              allocation drift stays within one granularity step.
+ *
+ * SUBTEST: dual-bwa-disable
+ * Description: Disabling BWA on one SST tunnel in a shared USB4 group does
+ *              not destroy the other tunnel's allocation; re-enable + fresh
+ *              modeset restores the disabled tunnel's allocation.
+ *
+ * SUBTEST: mst-basic
+ * Description: Two MST connectors sharing one tunnel object report the same
+ *              per-tunnel allocated BW, and that value is positive.
+ *
+ * SUBTEST: mst-modeset-bw
+ * Description: Aggregate allocation does not decrease when one MST stream's
+ *              mode is raised from the lowest- to the preferred-clock mode.
+ *
+ * SUBTEST: mst-partial-disable
+ * Description: Disabling one MST stream leaves the tunnel alive; the residual
+ *              allocation is positive and not larger than the two-stream
+ *              allocation.
+ *
+ * SUBTEST: mst-suspend
+ * Description: MST tunnel survives suspend/resume; per the
+ *              intel_dp_tunnel_resume() "TODO: Add support for MST"
+ *              limitation the test accepts BW re-allocation on at least
+ *              one of the two streams.
+ *
+ * SUBTEST: mst-limit-fallback
+ * Description: bw_limit on the shared MST tunnel forces both streams to fall
+ *              back to lower-clock modes; aggregate BW remains positive and
+ *              not greater than the pre-limit value.
+ *
+ * SUBTEST: mst-bwa-re-enable
+ * Description: Re-enabling BWA on an MST tunnel + fresh modeset restores
+ *              allocation for all active streams to the pre-disable value.
+ */
+
+#include <fcntl.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "igt.h"
+#include "igt_connector_helper.h"
+#include "igt_debugfs.h"
+#include "igt_kms.h"
+#include "igt_sysfs.h"
+#include "intel/kms_mst_helper.h"
+
+#define TUNNEL_INFO_BUF_SIZE	2048
+/*
+ * Number of disable/enable cycles for the bwa-cycle subtest. Empirically
+ * tuned to be high enough to surface refcount/state-machine drift between
+ * driver and TBT host without pushing per-subtest runtime past CI budgets.
+ */
+#define BWA_CYCLE_COUNT		10
+#define MAX_CLEANUP_OUTPUTS	16
+#define BW_RETRY_TIMEOUT_MS	1000
+#define BW_RETRY_STEP_MS	50
+
+/*
+ * Tunnel debugfs file names, attached per connector under
+ *	/sys/kernel/debug/dri/<N>/<connector>/dp_tunnel/{info,bw_alloc_enable,bw_limit}
+ */
+#define TUNNEL_DBG_DIR			"dp_tunnel"
+#define TUNNEL_DBG_INFO			"info"
+#define TUNNEL_DBG_BW_ALLOC		"bw_alloc_enable"
+#define TUNNEL_DBG_BW_LIMIT		"bw_limit"
+
+typedef struct {
+	int drm_fd;
+	uint32_t devid;
+	igt_display_t display;
+	igt_output_t *output;		/* primary tunneled output */
+	igt_output_t *output2;		/* second tunneled output (dual-SST) */
+	igt_output_t *mst_outputs[IGT_MAX_PIPES]; /* MST stream outputs */
+	int n_mst_outputs;
+	/*
+	 * Connector names whose dp_tunnel/ debugfs state must be reset
+	 * (bw_limit=0, bw_alloc_enable=1) at process exit. Stored as
+	 * names rather than igt_output_t * so the exit handler is safe
+	 * after any igt_display_fini() / re-bind sequence (e.g. across
+	 * suspend/resume re-enumeration).
+	 */
+	char cleanup_names[MAX_CLEANUP_OUTPUTS][IGT_CONNECTOR_NAME_MAX];
+	int n_cleanup;
+} data_t;
+
+/*
+ * Single live test instance per process; stashed in a global so the IGT
+ * exit handler (called with a signal-only argument) can find it. Set in
+ * the bootstrap fixture, never re-assigned after.
+ */
+static data_t *g_data;
+
+/*
+ * Open the per-connector dp_tunnel/ debugfs directory for @output.
+ * Returns an open fd, or -1 if the directory does not exist (no tunnel).
+ * Caller must close() the returned fd.
+ */
+static int tunnel_dbg_open_dir(int drm_fd, igt_output_t *output)
+{
+	int conn_dir, sub;
+
+	conn_dir = igt_debugfs_connector_dir(drm_fd, output->name, O_RDONLY);
+	if (conn_dir < 0)
+		return -1;
+
+	sub = openat(conn_dir, TUNNEL_DBG_DIR, O_RDONLY | O_DIRECTORY);
+	close(conn_dir);
+	return sub;
+}
+
+/* forward declaration: defined further down once helpers are in place */
+static int read_tunnel_info(int drm_fd, igt_output_t *output,
+			    char *buf, int size);
+
+static bool has_tunnel(int drm_fd, igt_output_t *output)
+{
+	char buf[TUNNEL_INFO_BUF_SIZE];
+	int ret;
+
+	ret = read_tunnel_info(drm_fd, output, buf, sizeof(buf));
+	/* File must exist, be non-empty, and show an actual tunnel */
+	return ret > 0 && strncmp(buf, "Tunnel:", 7) == 0;
+}
+
+/*
+ * Parse an integer-valued line of the form "  <field> <number>...\n" out of
+ * the multi-line tunnel info blob. The match is anchored to the start of a
+ * line so that a future field whose name is a substring of @field (e.g. an
+ * "Allocated BW limit:" line added next to "Allocated BW:") cannot
+ * mis-match. Returns -1 if the field is absent or malformed.
+ */
+static int parse_tunnel_field_int(const char *buf, const char *field)
+{
+	const char *loc = buf;
+	int val = -1;
+	size_t flen = strlen(field);
+
+	while ((loc = strstr(loc, field)) != NULL) {
+		const char *line_start = loc;
+
+		while (line_start > buf && line_start[-1] != '\n')
+			line_start--;
+		/*
+		 * Accept the match only if @field appears at line start
+		 * (after optional leading whitespace).
+		 */
+		while (line_start < loc && (*line_start == ' ' ||
+					    *line_start == '\t'))
+			line_start++;
+		if (line_start == loc) {
+			if (sscanf(loc + flen, "%d", &val) != 1)
+				return -1;
+			return val;
+		}
+		loc += flen;
+	}
+	return val;
+}
+
+static void set_bw_limit(int drm_fd, igt_output_t *output, int limit_kbps)
+{
+	char buf[64];
+	int dir, ret;
+
+	dir = tunnel_dbg_open_dir(drm_fd, output);
+	igt_assert_fd(dir);
+	snprintf(buf, sizeof(buf), "%d", limit_kbps);
+	ret = igt_sysfs_write(dir, TUNNEL_DBG_BW_LIMIT, buf, strlen(buf));
+	igt_assert_f(ret == strlen(buf),
+		     "Failed to write bw_limit=%d (ret=%d): %m\n",
+		     limit_kbps, ret);
+	close(dir);
+}
+
+static int get_bw_limit(int drm_fd, igt_output_t *output)
+{
+	char buf[64] = {};
+	int dir;
+
+	dir = tunnel_dbg_open_dir(drm_fd, output);
+	igt_assert_fd(dir);
+	igt_debugfs_simple_read(dir, TUNNEL_DBG_BW_LIMIT, buf, sizeof(buf));
+	close(dir);
+	return atoi(buf);
+}
+
+static void set_bwa_enabled(int drm_fd, igt_output_t *output, bool enable)
+{
+	int dir, ret;
+
+	dir = tunnel_dbg_open_dir(drm_fd, output);
+	igt_assert_fd(dir);
+	ret = igt_sysfs_write(dir, TUNNEL_DBG_BW_ALLOC,
+			      enable ? "1" : "0", 1);
+	igt_assert_f(ret == 1,
+		     "Failed to write bw_alloc_enable=%d (ret=%d): %m\n",
+		     enable, ret);
+	close(dir);
+}
+
+static bool get_bwa_enabled(int drm_fd, igt_output_t *output)
+{
+	char buf[64] = {};
+	int dir;
+
+	dir = tunnel_dbg_open_dir(drm_fd, output);
+	igt_assert_fd(dir);
+	igt_debugfs_simple_read(dir, TUNNEL_DBG_BW_ALLOC, buf, sizeof(buf));
+	close(dir);
+	/*
+	 * The kernel writer is round-trippable and prints "0\n" or "1\n";
+	 * older out-of-tree kernels printed "enabled\n" / "disabled\n".
+	 * Accept both formats by anchoring on the leading character.
+	 */
+	if (buf[0] == '0' || buf[0] == '1')
+		return buf[0] == '1';
+	return strncmp(buf, "enabled", 7) == 0;
+}
+
+/*
+ * Non-asserting reset of bw_limit=0 and bwa_enable=1 for the connector
+ * @name. Safe to call from exit handlers and cleanup paths where
+ * igt_assert would abort the process. Silently skips if the connector's
+ * dp_tunnel/ debugfs directory does not exist (e.g. the connector was
+ * re-enumerated or the tunnel is gone).
+ */
+static void try_reset_by_name(int drm_fd, const char *name)
+{
+	int conn_dir, dir;
+
+	if (!name || !name[0])
+		return;
+
+	conn_dir = igt_debugfs_connector_dir(drm_fd, (char *)name, O_RDONLY);
+	if (conn_dir < 0)
+		return;
+	dir = openat(conn_dir, TUNNEL_DBG_DIR, O_RDONLY | O_DIRECTORY);
+	close(conn_dir);
+	if (dir < 0) {
+		igt_debug("kms_tbt: cleanup: no dp_tunnel/ for %s\n", name);
+		return;
+	}
+
+	/* Best effort: ignore errors, we are in a cleanup/exit path */
+	igt_sysfs_write(dir, TUNNEL_DBG_BW_LIMIT, "0", 1);
+	igt_sysfs_write(dir, TUNNEL_DBG_BW_ALLOC, "1", 1);
+	close(dir);
+}
+
+/*
+ * Append @output's connector name to data->cleanup_names[] so the exit
+ * handler can later reset its debugfs state by name (without
+ * dereferencing igt_output_t * which may have been invalidated by an
+ * intervening igt_display_fini()). Duplicates and overflow are
+ * silently ignored.
+ */
+static void register_for_cleanup(data_t *data, igt_output_t *output)
+{
+	int i;
+
+	if (!data || !output || !output->name)
+		return;
+	for (i = 0; i < data->n_cleanup; i++) {
+		if (strcmp(data->cleanup_names[i], output->name) == 0)
+			return;
+	}
+	if (data->n_cleanup >= MAX_CLEANUP_OUTPUTS)
+		return;
+	snprintf(data->cleanup_names[data->n_cleanup],
+		 IGT_CONNECTOR_NAME_MAX, "%s", output->name);
+	data->n_cleanup++;
+}
+
+/*
+ * Clear bw_limit and re-enable BWA on every connector that was ever
+ * registered as a tunneled output during the test. Called from both
+ * the closing fixture and the process exit handler so debugfs state
+ * is always reset regardless of how a subtest exits.
+ */
+static void restore_all_debugfs(data_t *data)
+{
+	int i;
+
+	if (!data || data->drm_fd < 0)
+		return;
+
+	for (i = 0; i < data->n_cleanup; i++)
+		try_reset_by_name(data->drm_fd, data->cleanup_names[i]);
+}
+
+static void exit_handler(int sig)
+{
+	(void)sig;
+	if (g_data)
+		restore_all_debugfs(g_data);
+}
+
+/*
+ * read_tunnel_info - Read the dp_tunnel/info debugfs file for @output into
+ * @buf. The buffer is zeroed up front and the read is bounded to size-1 so
+ * the result is always a properly NUL-terminated C string, safe to feed
+ * straight into strstr/strncmp/sscanf without an explicit length check.
+ *
+ * Returns the byte count from igt_debugfs_simple_read(), or -1 if the
+ * dp_tunnel/ debugfs directory does not exist (no tunnel).
+ */
+static int read_tunnel_info(int drm_fd, igt_output_t *output,
+			    char *buf, int size)
+{
+	int dir, ret;
+
+	igt_assert(size > 0);
+	memset(buf, 0, size);
+
+	dir = tunnel_dbg_open_dir(drm_fd, output);
+	if (dir < 0)
+		return -1;
+
+	ret = igt_debugfs_simple_read(dir, TUNNEL_DBG_INFO, buf, size - 1);
+	close(dir);
+
+	if (ret <= 0) {
+		igt_debug("kms_tbt: empty/error read of dp_tunnel/info on %s "
+			  "(ret=%d)\n", output->name, ret);
+		buf[0] = '\0';
+		return ret;
+	}
+
+	buf[min(ret, size - 1)] = '\0';
+	return ret;
+}
+
+static int get_allocated_bw(int drm_fd, igt_output_t *output)
+{
+	char buf[TUNNEL_INFO_BUF_SIZE];
+
+	read_tunnel_info(drm_fd, output, buf, sizeof(buf));
+	return parse_tunnel_field_int(buf, "Allocated BW:");
+}
+
+static int get_estimated_bw(int drm_fd, igt_output_t *output)
+{
+	char buf[TUNNEL_INFO_BUF_SIZE];
+
+	read_tunnel_info(drm_fd, output, buf, sizeof(buf));
+	return parse_tunnel_field_int(buf, "Estimated BW:");
+}
+
+static int get_granularity(int drm_fd, igt_output_t *output)
+{
+	char buf[TUNNEL_INFO_BUF_SIZE];
+
+	read_tunnel_info(drm_fd, output, buf, sizeof(buf));
+	return parse_tunnel_field_int(buf, "BW granularity:");
+}
+
+static int get_dprx_rate(int drm_fd, igt_output_t *output)
+{
+	char buf[TUNNEL_INFO_BUF_SIZE];
+
+	read_tunnel_info(drm_fd, output, buf, sizeof(buf));
+	return parse_tunnel_field_int(buf, "DPRX max rate:");
+}
+
+/*
+ * get_tunnel_group_id - Returns a combined host:link key from the DPTUN name
+ * "Tunnel: DPTUN <host>:<link>:<ep>". Two tunnels share a BW group only when
+ * they have the same host AND link number (same physical USB4 connection).
+ * Encoding: host*1000 + link, so TC1 (1:1:x) -> 1001 and TC2 (1:2:x) -> 1002.
+ */
+static int get_tunnel_group_id(int drm_fd, igt_output_t *output)
+{
+	char buf[TUNNEL_INFO_BUF_SIZE];
+	int host = -1, link = -1;
+
+	read_tunnel_info(drm_fd, output, buf, sizeof(buf));
+	if (sscanf(buf, "Tunnel: DPTUN %d:%d:", &host, &link) == 2)
+		return host * 1000 + link;
+	return -1;
+}
+
+/*
+ * find_mode_bw_threshold - Binary-search for the minimum bw_limit (kB/s) at
+ * which @mode appears in the connector's reprobed mode list.
+ *
+ * The kernel's mode_valid BW check uses minimum-bpp accounting and may allow
+ * DSC-capable modes to survive limits that would reject uncompressed modes.
+ * Rather than hard-coding any formula, probe the actual kernel threshold.
+ *
+ * Search range is [1, estimated_bw]. A cap of 0 means "no cap", so the
+ * lowest meaningful filtering cap is 1. If the mode is still present at
+ * limit=1, no positive cap exists that rejects it, and the caller must skip.
+ *
+ * Returns:
+ *   threshold > 0 - minimum bw_limit that keeps mode present
+ *   0             - mode cannot be filtered (survives at limit=1)
+ *  -1             - mode not in unfiltered connector list
+ *
+ * On return, bw_limit is left at 0.
+ */
+static int find_mode_bw_threshold(int drm_fd, igt_output_t *output,
+				  uint32_t connector_id,
+				  const drmModeModeInfo *mode,
+				  int estimated_bw)
+{
+	drmModeConnector *conn;
+	char numbuf[32];
+	int lo, hi, mid;
+	int dir;
+	bool present;
+
+	/*
+	 * The binary search issues ~log2(estimated_bw) writes to
+	 * bw_limit (typically 30+). Open the per-connector dp_tunnel/
+	 * directory once and reuse the fd to avoid re-walking debugfs
+	 * for every step.
+	 */
+	dir = tunnel_dbg_open_dir(drm_fd, output);
+	if (dir < 0)
+		return -1;
+
+	#define WRITE_LIMIT(_v) do {					\
+		int _n = snprintf(numbuf, sizeof(numbuf), "%d", (_v));	\
+		int _ret = igt_sysfs_write(dir, TUNNEL_DBG_BW_LIMIT,	\
+					   numbuf, _n);			\
+		igt_assert_f(_ret == _n,				\
+			     "Failed to write bw_limit=%d (ret=%d): %m\n", \
+			     (_v), _ret);				\
+	} while (0)
+
+	/* Verify mode is present with no limit */
+	WRITE_LIMIT(0);
+	conn = drmModeGetConnector(drm_fd, connector_id);
+	if (!conn) {
+		close(dir);
+		return -1;
+	}
+	present = igt_connector_mode_in_list(conn, mode);
+	drmModeFreeConnector(conn);
+	if (!present) {
+		close(dir);
+		return -1;
+	}
+
+	/* Quick check: is mode still present at the minimum (1 kB/s) cap? */
+	WRITE_LIMIT(1);
+	conn = drmModeGetConnector(drm_fd, connector_id);
+	present = conn && igt_connector_mode_in_list(conn, mode);
+	drmModeFreeConnector(conn);
+	if (present) {
+		WRITE_LIMIT(0);
+		close(dir);
+		return 0;  /* mode survives min cap - cannot filter */
+	}
+
+	/*
+	 * Binary search.
+	 * lo = highest limit where mode is absent (starts at 1).
+	 * hi = lowest limit where mode is present.
+	 */
+	lo = 1;
+	hi = estimated_bw;
+	while (hi - lo > 1) {
+		mid = lo + (hi - lo) / 2;
+		WRITE_LIMIT(mid);
+		conn = drmModeGetConnector(drm_fd, connector_id);
+		if (conn && igt_connector_mode_in_list(conn, mode))
+			hi = mid;
+		else
+			lo = mid;
+		drmModeFreeConnector(conn);
+	}
+
+	WRITE_LIMIT(0);
+	close(dir);
+	#undef WRITE_LIMIT
+	return hi;  /* minimum limit at which mode is present */
+}
+
+/*
+ * assign_outputs_to_crtcs - Assigns each output in @outputs to the next
+ * available CRTC, iterating over all display CRTCs.
+ */
+static void assign_outputs_to_crtcs(igt_display_t *display,
+				    igt_output_t **outputs, int n_outputs)
+{
+	int i, n_crtcs;
+
+	igt_require_f(n_outputs > 0, "No outputs to assign\n");
+
+	n_crtcs = igt_display_n_crtcs(display);
+	igt_require_f(n_crtcs >= n_outputs,
+		      "Not enough CRTCs (%d) for %d outputs\n",
+		      n_crtcs, n_outputs);
+
+	for (i = 0; i < n_outputs; i++)
+		igt_output_set_crtc(outputs[i],
+				    igt_crtc_for_pipe(display, (enum pipe)i));
+}
+
+/*
+ * do_modeset - Sets up and commits a modeset for @outputs with @modes.
+ * If @modes[i] is NULL, the default preferred mode is used. Creates solid
+ * blue FBs stored in @fbs which the caller must free with cleanup_outputs().
+ */
+static void do_modeset(data_t *data, igt_output_t **outputs, int n_outputs,
+		       drmModeModeInfo **modes, struct igt_fb *fbs)
+{
+	igt_plane_t *plane;
+	int i;
+
+	igt_display_reset(&data->display);
+	assign_outputs_to_crtcs(&data->display, outputs, n_outputs);
+
+	for (i = 0; i < n_outputs; i++) {
+		drmModeModeInfo *mode;
+
+		if (modes && modes[i])
+			igt_output_override_mode(outputs[i], modes[i]);
+		mode = igt_output_get_mode(outputs[i]);
+		igt_assert_f(mode, "No mode available for output %s\n",
+			     igt_output_name(outputs[i]));
+
+		igt_info("Modeset %s at %dx%d@%d\n",
+			 igt_output_name(outputs[i]),
+			 mode->hdisplay, mode->vdisplay, mode->vrefresh);
+
+		igt_create_color_fb(data->drm_fd,
+				    mode->hdisplay, mode->vdisplay,
+				    DRM_FORMAT_XRGB8888,
+				    DRM_FORMAT_MOD_LINEAR,
+				    0.0, 0.0, 1.0, &fbs[i]);
+		plane = igt_output_get_plane_type(outputs[i],
+						  DRM_PLANE_TYPE_PRIMARY);
+		igt_plane_set_fb(plane, &fbs[i]);
+	}
+
+	igt_display_commit2(&data->display, COMMIT_ATOMIC);
+}
+
+/*
+ * cleanup_outputs - Disables all outputs, commits blank state, removes FBs,
+ * and clears any mode overrides. Must be called after do_modeset().
+ */
+static void cleanup_outputs(data_t *data, igt_output_t **outputs,
+			    int n_outputs, struct igt_fb *fbs)
+{
+	int i;
+
+	igt_display_reset(&data->display);
+	igt_display_commit2(&data->display, COMMIT_ATOMIC);
+
+	for (i = 0; i < n_outputs; i++) {
+		igt_remove_fb(data->drm_fd, &fbs[i]);
+		igt_output_override_mode(outputs[i], NULL);
+	}
+}
+
+/*
+ * retrigger_modeset - Disables the output, then re-enables it at the same
+ * mode. Used after setting bw_limit to force a fresh modeset that re-evaluates
+ * BW constraints.
+ */
+static void retrigger_modeset(data_t *data, igt_output_t **outputs,
+			      int n_outputs, drmModeModeInfo **modes,
+			      struct igt_fb *old_fbs, struct igt_fb *new_fbs)
+{
+	cleanup_outputs(data, outputs, n_outputs, old_fbs);
+	do_modeset(data, outputs, n_outputs, modes, new_fbs);
+}
+
+/*
+ * find_tunneled_output - Finds the first connected DP output that has an
+ * active DP tunnel (has_tunnel() returns true). Returns NULL if none found.
+ */
+static igt_output_t *find_tunneled_output(data_t *data)
+{
+	igt_output_t *output;
+
+	for_each_connected_output(&data->display, output) {
+		if (output->config.connector->connector_type !=
+		    DRM_MODE_CONNECTOR_DisplayPort)
+			continue;
+		if (has_tunnel(data->drm_fd, output))
+			return output;
+	}
+	return NULL;
+}
+
+/*
+ * sst_tunnel_group - Helper: returns the USB4 group id for @output if it is
+ * a connected non-MST DP output with an active tunnel, or -1 otherwise.
+ * Centralises the eligibility filter for the dual-SST selectors below.
+ */
+static int sst_tunnel_group(data_t *data, igt_output_t *output)
+{
+	if (output->config.connector->connector_type !=
+	    DRM_MODE_CONNECTOR_DisplayPort)
+		return -1;
+	if (igt_check_output_is_dp_mst(output))
+		return -1;
+	if (!has_tunnel(data->drm_fd, output))
+		return -1;
+	return get_tunnel_group_id(data->drm_fd, output);
+}
+
+/*
+ * find_two_tunneled_sst_outputs - Finds two connected SST DP outputs whose
+ * tunnels share the same physical USB4 link (same host:link group), so the
+ * pair is suitable for shared-group accounting tests (dual-bw-sum,
+ * dual-bwa-disable).
+ *
+ * Two MST sinks behind the same hub also share host:link so they would
+ * pass the group check; sst_tunnel_group() filters them out via
+ * igt_check_output_is_dp_mst() since their BW is aggregated on a single
+ * tunnel slot, not summed from two.
+ *
+ * Implementation: O(n^2) pair search rather than first-found-then-match,
+ * so a topology like A(group X), B(group Y), C(group Y) still produces
+ * the valid B+C pair instead of dead-locking on A having no peer.
+ *
+ * Stores the two outputs in data->output and data->output2. Returns true
+ * on success.
+ */
+static bool find_two_tunneled_sst_outputs(data_t *data)
+{
+	int i, j;
+
+	for (i = 0; i < data->display.n_outputs; i++) {
+		igt_output_t *out_a = &data->display.outputs[i];
+		int group_a;
+
+		if (!igt_output_is_connected(out_a))
+			continue;
+		group_a = sst_tunnel_group(data, out_a);
+		if (group_a < 0)
+			continue;
+
+		for (j = 0; j < data->display.n_outputs; j++) {
+			igt_output_t *out_b = &data->display.outputs[j];
+
+			if (j == i)
+				continue;
+			if (!igt_output_is_connected(out_b))
+				continue;
+			if (sst_tunnel_group(data, out_b) != group_a)
+				continue;
+
+			data->output = out_a;
+			data->output2 = out_b;
+			register_for_cleanup(data, out_a);
+			register_for_cleanup(data, out_b);
+			return true;
+		}
+	}
+	return false;
+}
+
+/*
+ * find_mst_outputs - Finds at least 2 connected MST outputs that share the
+ * same tunnel. Populates data->mst_outputs[] and data->n_mst_outputs.
+ * Returns true if at least 2 MST outputs with a common tunnel are found.
+ *
+ * Some TBT docks present their SST SINK ports as MST virtual connectors
+ * (igt_check_output_is_dp_mst() returns true for them).  For mst-* tests
+ * we need a TRUE MST hub where both outputs share one aggregate BW slot.
+ * Strategy: prefer an MST tree on a DIFFERENT tunnel group than the primary
+ * output (data->output) - that USB4 path is more likely to have a real MST
+ * hub rather than the dock's internal pseudo-MST routing.  Fall back to any
+ * MST tree with 2+ connected outputs if no better option exists.
+ */
+static bool find_mst_outputs(data_t *data)
+{
+	igt_output_t *output;
+	igt_output_t *best_root = NULL;
+	int primary_group = -1;
+
+	if (data->output)
+		primary_group = get_tunnel_group_id(data->drm_fd, data->output);
+
+	for_each_connected_output(&data->display, output) {
+		igt_output_t *candidates[IGT_MAX_PIPES];
+		int count = 0, n_connected = 0, i, root_group;
+
+		if (output->config.connector->connector_type !=
+		    DRM_MODE_CONNECTOR_DisplayPort)
+			continue;
+		if (!igt_check_output_is_dp_mst(output))
+			continue;
+		if (!has_tunnel(data->drm_fd, output))
+			continue;
+
+		root_group = get_tunnel_group_id(data->drm_fd, output);
+
+		if (igt_find_all_mst_output_in_topology(data->drm_fd,
+							&data->display,
+							output, candidates,
+							&count) != 0)
+			continue;
+
+		for (i = 0; i < count; i++) {
+			if (candidates[i]->config.connector->connection ==
+			    DRM_MODE_CONNECTED)
+				n_connected++;
+		}
+		if (n_connected < 2)
+			continue;
+
+		/* Prefer a tree on a different tunnel group from data->output */
+		if (root_group != primary_group) {
+			best_root = output;
+			break;
+		}
+		if (!best_root)
+			best_root = output; /* fallback: same group */
+	}
+
+	if (!best_root)
+		return false;
+
+	{
+		igt_output_t *candidates[IGT_MAX_PIPES];
+		int count = 0, i;
+
+		if (igt_find_all_mst_output_in_topology(data->drm_fd,
+							&data->display,
+							best_root, candidates,
+							&count) != 0)
+			return false;
+
+		data->n_mst_outputs = 0;
+		for (i = 0; i < count; i++) {
+			if (candidates[i]->config.connector->connection ==
+			    DRM_MODE_CONNECTED) {
+				data->mst_outputs[data->n_mst_outputs++] =
+					candidates[i];
+				register_for_cleanup(data, candidates[i]);
+			}
+		}
+	}
+
+	return data->n_mst_outputs >= 2;
+}
+
+/* ------------------------------------------------------------------ */
+/* Per-subtest setup helpers: encapsulate the early-skip boilerplate. */
+/* ------------------------------------------------------------------ */
+
+/*
+ * require_sst - Skip the calling subtest if the primary tunneled output
+ * is gone (e.g. the user yanked the dock between subtests). Returns the
+ * primary tunneled output, ready for use.
+ */
+static igt_output_t *require_sst(data_t *d)
+{
+	igt_output_t *out = d->output;
+
+	igt_require_f(out, "No primary tunneled output\n");
+	igt_require_f(has_tunnel(d->drm_fd, out),
+		      "No DP tunnel on %s, skipping\n", out->name);
+	return out;
+}
+
+/*
+ * require_bwa - Skip the calling subtest unless BWA is currently enabled
+ * on @out's tunnel. Subtests that depend on toggling BWA (bwa-*, bwa-cycle,
+ * dual-bwa-*, mst-bwa-*) call this so they don't hard-assert on a sink that
+ * doesn't advertise the BWA capability.
+ */
+static void require_bwa(data_t *d, igt_output_t *out)
+{
+	igt_require_f(get_bwa_enabled(d->drm_fd, out),
+		      "BWA not enabled on %s; sink may not support it\n",
+		      out->name);
+}
+
+/*
+ * require_dual_sst_same_group - Skip if two tunneled SST outputs sharing
+ * one USB4 link cannot be found. On success d->output and d->output2 are
+ * populated.
+ */
+static void require_dual_sst_same_group(data_t *d)
+{
+	igt_require_f(find_two_tunneled_sst_outputs(d),
+		      "Need 2 tunneled non-MST DP outputs on same dock\n");
+	igt_require_f(has_tunnel(d->drm_fd, d->output) &&
+		      has_tunnel(d->drm_fd, d->output2),
+		      "Both outputs need tunnels\n");
+}
+
+/*
+ * require_mst_pair - Skip unless 2+ connected MST outputs sharing a
+ * single tunnel are available. On success d->mst_outputs[] is populated.
+ */
+static void require_mst_pair(data_t *d)
+{
+	igt_require_f(find_mst_outputs(d),
+		      "Need 2 connected MST outputs on same tunnel\n");
+	igt_require_f(has_tunnel(d->drm_fd, d->mst_outputs[0]) &&
+		      has_tunnel(d->drm_fd, d->mst_outputs[1]),
+		      "Both MST outputs (%s, %s) need tunnel debugfs\n",
+		      d->mst_outputs[0]->name, d->mst_outputs[1]->name);
+}
+
+/*
+ * Output of prepare_limit_setup() consumed by the limit-* subtests.
+ */
+struct limit_setup {
+	uint32_t connector_id;
+	drmModeModeInfo preferred;
+	int estimated_bw;
+	int full_mode_count;
+	int threshold;	/* min bw_limit at which preferred is present */
+};
+
+/*
+ * limit_setup_status - prepare_limit_setup() result.
+ *
+ * Helpers don't call igt_skip() / igt_require_f() so that the per-subtest
+ * caller controls the skip reason and the IGT framework attributes the
+ * skip to the right subtest in CI logs.
+ */
+enum limit_setup_status {
+	LIMIT_SETUP_OK,
+	LIMIT_SETUP_NO_ESTIMATED_BW,
+	LIMIT_SETUP_NO_MODES,
+	LIMIT_SETUP_NO_THRESHOLD,
+};
+
+/*
+ * prepare_limit_setup - Common preamble for limit-fallback / limit-boundary
+ * / limit-suspend:
+ *   - Clear stale bw_limit.
+ *   - Probe the unfiltered connector for the preferred mode and full count.
+ *   - Binary-search for the kernel's actual rejection threshold for the
+ *     preferred mode.
+ *
+ * Returns one of #limit_setup_status; @s is populated only on
+ * %LIMIT_SETUP_OK. Caller decides how (or whether) to skip on the other
+ * statuses.
+ */
+static enum limit_setup_status prepare_limit_setup(data_t *d,
+						   igt_output_t *out,
+						   struct limit_setup *s)
+{
+	drmModeConnector *conn;
+	int i;
+
+	set_bw_limit(d->drm_fd, out, 0);
+
+	s->connector_id = out->config.connector->connector_id;
+	s->estimated_bw = get_estimated_bw(d->drm_fd, out);
+	if (s->estimated_bw <= 0)
+		return LIMIT_SETUP_NO_ESTIMATED_BW;
+
+	conn = drmModeGetConnector(d->drm_fd, s->connector_id);
+	igt_assert_f(conn, "Failed to probe connector\n");
+	if (conn->count_modes <= 0) {
+		drmModeFreeConnector(conn);
+		return LIMIT_SETUP_NO_MODES;
+	}
+	s->full_mode_count = conn->count_modes;
+	s->preferred = conn->modes[0];
+	for (i = 0; i < conn->count_modes; i++) {
+		if (conn->modes[i].type & DRM_MODE_TYPE_PREFERRED) {
+			s->preferred = conn->modes[i];
+			break;
+		}
+	}
+	drmModeFreeConnector(conn);
+
+	s->threshold = find_mode_bw_threshold(d->drm_fd, out, s->connector_id,
+					      &s->preferred, s->estimated_bw);
+	if (s->threshold <= 0)
+		return LIMIT_SETUP_NO_THRESHOLD;
+
+	return LIMIT_SETUP_OK;
+}
+
+/*
+ * require_limit_setup - prepare_limit_setup() wrapper that turns each non-OK
+ * status into an igt_require_f skip with a specific message. Use this from
+ * limit-* subtests for uniform skip behaviour.
+ */
+static void require_limit_setup(data_t *d, igt_output_t *out,
+				struct limit_setup *s)
+{
+	enum limit_setup_status st = prepare_limit_setup(d, out, s);
+
+	switch (st) {
+	case LIMIT_SETUP_OK:
+		return;
+	case LIMIT_SETUP_NO_ESTIMATED_BW:
+		igt_skip("No estimated BW on %s\n", out->name);
+		break;
+	case LIMIT_SETUP_NO_MODES:
+		igt_skip("No modes on %s\n", out->name);
+		break;
+	case LIMIT_SETUP_NO_THRESHOLD:
+		igt_skip("Cannot filter preferred mode (clock=%d): "
+			 "always present or not in list\n",
+			 s->preferred.clock);
+		break;
+	}
+}
+
+/*
+ * preferred_mode_present_at_limit - Apply @limit, reprobe @connector_id and
+ * return whether @preferred survives in the filtered mode list. Optionally
+ * stores the post-filter mode count in @mode_count_out. Centralises the
+ * write-bw_limit / drmModeGetConnector / membership-check pattern shared by
+ * the limit-* subtests.
+ */
+static bool preferred_mode_present_at_limit(data_t *d, igt_output_t *out,
+					    uint32_t connector_id,
+					    const drmModeModeInfo *preferred,
+					    int limit, int *mode_count_out)
+{
+	drmModeConnector *conn;
+	bool present;
+
+	set_bw_limit(d->drm_fd, out, limit);
+	conn = drmModeGetConnector(d->drm_fd, connector_id);
+	igt_assert_f(conn, "Failed to reprobe connector\n");
+
+	present = igt_connector_mode_in_list(conn, preferred);
+	if (mode_count_out)
+		*mode_count_out = conn->count_modes;
+
+	drmModeFreeConnector(conn);
+	return present;
+}
+
+/* ------------------------------------------------------------------ */
+/* Subtest implementations.                                           */
+/*                                                                    */
+/* Each test_* assumes its caller has already established the         */
+/* connectors it needs (via the require_* helpers above).             */
+/* ------------------------------------------------------------------ */
+
+/*
+ * test_basic - Functional baseline:
+ *   1. Modeset the preferred mode on a tunneled output.
+ *   2. Tunnel info begins with "Tunnel: DPTUN" (debugfs format sanity).
+ *   3. Allocated BW becomes positive within BW_RETRY_TIMEOUT_MS (BWA
+ *      negotiation runs on a worker after commit returns).
+ *   4. Tunnel DPRX max rate is at least the link's current max rate
+ *      (i.e. the tunnel can carry whatever the link is using).
+ *
+ * TODO: split into basic-sst-{uhbr,non-uhbr} / basic-mst-{uhbr,non-uhbr}
+ * once test-rig coverage exists.
+ */
+static void test_basic(data_t *d, igt_output_t *out)
+{
+	char buf[TUNNEL_INFO_BUF_SIZE];
+	struct igt_fb fb;
+	int allocated, dprx_rate, current_max_rate;
+	int t;
+
+	igt_require_f(out->config.connector->count_modes > 0,
+		      "No modes available on %s\n", out->name);
+
+	/*
+	 * Reset bw_limit=0 in case a previously crashed limit-* subtest
+	 * left a stale cap on the tunnel that would now make BW
+	 * allocation fail for unrelated reasons.
+	 */
+	set_bw_limit(d->drm_fd, out, 0);
+	do_modeset(d, &out, 1, NULL, &fb);
+
+	read_tunnel_info(d->drm_fd, out, buf, sizeof(buf));
+	igt_info("tunnel_info:\n%s\n", buf);
+
+	igt_assert_f(strncmp(buf, "Tunnel: DPTUN", 13) == 0,
+		     "Unexpected tunnel name format: %s\n", buf);
+
+	/*
+	 * BWA negotiation with the USB4 host runs on a worker after the
+	 * modeset commit returns. Poll for up to BW_RETRY_TIMEOUT_MS for a
+	 * positive allocation rather than racing it with a single sample.
+	 */
+	allocated = get_allocated_bw(d->drm_fd, out);
+	for (t = 0; t < BW_RETRY_TIMEOUT_MS / BW_RETRY_STEP_MS &&
+	     allocated <= 0; t++) {
+		usleep(BW_RETRY_STEP_MS * 1000);
+		allocated = get_allocated_bw(d->drm_fd, out);
+	}
+	igt_info("[basic] allocated_bw=%d kB/s\n", allocated);
+	igt_assert_f(allocated > 0,
+		     "Allocated BW is %d, expected > 0\n", allocated);
+
+	dprx_rate = get_dprx_rate(d->drm_fd, out);
+	current_max_rate = igt_get_max_link_rate(d->drm_fd, out);
+	igt_info("[basic] dprx_rate=%d kbps  link_max_rate=%d kbps\n",
+		 dprx_rate, current_max_rate);
+	igt_assert_f(dprx_rate > 0,
+		     "DPRX max rate %d invalid\n", dprx_rate);
+	igt_assert_f(current_max_rate > 0,
+		     "Current max link rate %d invalid\n", current_max_rate);
+	igt_assert_f(dprx_rate >= current_max_rate,
+		     "DPRX rate %d < current max link rate %d\n",
+		     dprx_rate, current_max_rate);
+
+	cleanup_outputs(d, &out, 1, &fb);
+}
+
+static void test_modeset_bw(data_t *d, igt_output_t *out)
+{
+	drmModeConnector *c = out->config.connector;
+	struct igt_fb fb_low = {}, fb_high = {}, fb_back = {};
+	drmModeModeInfo low_mode_copy, high_mode_copy;
+	drmModeModeInfo *modes[1];
+	int bw_low, bw_high, bw_back;
+
+	igt_require_f(c->count_modes >= 2,
+		      "Need at least 2 modes on %s\n", out->name);
+	igt_require_f(igt_connector_find_lowest_clock_mode(out, &low_mode_copy) &&
+		      igt_connector_find_preferred_mode(out, &high_mode_copy) &&
+		      low_mode_copy.clock != high_mode_copy.clock,
+		      "Need distinct low and high modes on %s\n", out->name);
+
+	/* Step 1: lowest mode */
+	modes[0] = &low_mode_copy;
+	do_modeset(d, &out, 1, modes, &fb_low);
+	bw_low = get_allocated_bw(d->drm_fd, out);
+	igt_info("[modeset-bw] Step1 low_mode=%dx%d@%d  bw_low=%d kB/s\n",
+		 low_mode_copy.hdisplay, low_mode_copy.vdisplay,
+		 low_mode_copy.vrefresh, bw_low);
+	igt_assert_f(bw_low > 0, "Low mode allocated BW %d <= 0\n", bw_low);
+
+	/* Step 2: highest mode */
+	cleanup_outputs(d, &out, 1, &fb_low);
+	modes[0] = &high_mode_copy;
+	do_modeset(d, &out, 1, modes, &fb_high);
+	bw_high = get_allocated_bw(d->drm_fd, out);
+	igt_info("[modeset-bw] Step2 high_mode=%dx%d@%d  bw_high=%d kB/s"
+		 "  pass=(bw_high > bw_low): %d > %d\n",
+		 high_mode_copy.hdisplay, high_mode_copy.vdisplay,
+		 high_mode_copy.vrefresh, bw_high, bw_high, bw_low);
+	igt_assert_f(bw_high > bw_low,
+		     "High mode BW %d not > low mode BW %d\n",
+		     bw_high, bw_low);
+
+	/*
+	 * Step 3: back to lowest mode. With the same input mode and the
+	 * same group state (single tunnel, no other allocations changed),
+	 * the kernel's BWA path is deterministic, so allocation must round
+	 * to exactly the same value as Step 1.
+	 */
+	cleanup_outputs(d, &out, 1, &fb_high);
+	modes[0] = &low_mode_copy;
+	do_modeset(d, &out, 1, modes, &fb_back);
+	bw_back = get_allocated_bw(d->drm_fd, out);
+	igt_info("[modeset-bw] Step3 round-trip bw_back=%d kB/s"
+		 "  pass=(bw_back == bw_low): %d == %d\n",
+		 bw_back, bw_back, bw_low);
+	igt_assert_f(bw_back == bw_low,
+		     "BW after round-trip %d != bw_low %d\n",
+		     bw_back, bw_low);
+
+	cleanup_outputs(d, &out, 1, &fb_back);
+}
+
+static void test_disable_bw(data_t *d, igt_output_t *out)
+{
+	struct igt_fb fb;
+	int allocated;
+
+	do_modeset(d, &out, 1, NULL, &fb);
+	allocated = get_allocated_bw(d->drm_fd, out);
+	igt_info("[disable-bw] Before disable: allocated_bw=%d kB/s\n",
+		 allocated);
+	igt_assert_f(allocated > 0,
+		     "Expected allocated BW > 0 before disable\n");
+
+	igt_output_set_crtc(out, NULL);
+	igt_display_commit2(&d->display, COMMIT_ATOMIC);
+	igt_remove_fb(d->drm_fd, &fb);
+
+	allocated = get_allocated_bw(d->drm_fd, out);
+	igt_info("[disable-bw] After disable: allocated_bw=%d kB/s  "
+		 "pass=(==0): %d == 0\n", allocated, allocated);
+	igt_assert_f(allocated == 0,
+		     "Allocated BW %d != 0 after output disabled\n", allocated);
+
+	do_modeset(d, &out, 1, NULL, &fb);
+	allocated = get_allocated_bw(d->drm_fd, out);
+	igt_info("[disable-bw] After re-enable: allocated_bw=%d kB/s  "
+		 "pass=(>0): %d > 0\n", allocated, allocated);
+	igt_assert_f(allocated > 0,
+		     "Expected allocated BW > 0 after re-enable\n");
+
+	cleanup_outputs(d, &out, 1, &fb);
+}
+
+/*
+ * await_tunnel_after_resume_identity - Wait up to 3s for the cached @out
+ * pointer to regain a working tunnel; if the kernel re-enumerated the
+ * connector, rebuild IGT's display state and look up the new connector
+ * for *the same physical sink* by matching @pre_path (preferred, more
+ * reliable for MST topologies) or @pre_serial (EDID fallback). Returns
+ * the (possibly updated) output, or NULL if the original sink does not
+ * re-establish a tunnel within 30s.
+ *
+ * @pre_path / @pre_serial: pre-suspend identity captured via
+ *			    igt_connector_get_info(); either may be empty.
+ * @tag:		    log prefix for diagnostics.
+ */
+static igt_output_t *await_tunnel_after_resume_identity(data_t *d,
+							igt_output_t *out,
+							const char *pre_path,
+							const char *pre_serial,
+							const char *tag)
+{
+	igt_until_timeout(3) {
+		if (has_tunnel(d->drm_fd, out))
+			return out;
+		usleep(100 * 1000);
+	}
+
+	igt_display_fini(&d->display);
+	igt_display_require(&d->display, d->drm_fd);
+
+	igt_until_timeout(30) {
+		uint32_t new_id = 0;
+		igt_output_t *new_out;
+
+		igt_connector_reprobe_all(d->drm_fd);
+
+		if (pre_path[0] &&
+		    !igt_connector_find_by_path(d->drm_fd, pre_path, &new_id)) {
+			new_id = 0;
+		}
+		if (!new_id && pre_serial[0]) {
+			if (!igt_connector_find_by_serial(d->drm_fd, pre_serial,
+							  &new_id))
+				new_id = 0;
+		}
+		if (new_id) {
+			new_out = igt_connector_find_output_by_id(&d->display,
+								  new_id);
+			if (new_out && has_tunnel(d->drm_fd, new_out)) {
+				igt_info("[%s] Tunnel re-established on %s "
+					 "(re-enumerated id=%u)\n",
+					 tag, new_out->name, new_id);
+				register_for_cleanup(d, new_out);
+				return new_out;
+			}
+		}
+		usleep(500 * 1000);
+	}
+	return NULL;
+}
+
+static void test_suspend(data_t *d, igt_output_t *out)
+{
+	struct igt_fb fb;
+	int pre_allocated, pre_dprx_rate, pre_group;
+	int post_allocated, granularity;
+	bool pre_bwa;
+	char pre_path[128] = {};
+	char pre_serial[64] = {};
+	char tmp[32];
+
+	igt_connector_get_info(d->drm_fd,
+			       out->config.connector->connector_id,
+			       tmp, sizeof(tmp),
+			       pre_serial, sizeof(pre_serial),
+			       pre_path, sizeof(pre_path));
+
+	do_modeset(d, &out, 1, NULL, &fb);
+
+	pre_allocated = get_allocated_bw(d->drm_fd, out);
+	pre_dprx_rate = get_dprx_rate(d->drm_fd, out);
+	pre_group = get_tunnel_group_id(d->drm_fd, out);
+	granularity = get_granularity(d->drm_fd, out);
+	pre_bwa = get_bwa_enabled(d->drm_fd, out);
+	igt_info("[suspend] Pre-suspend: %s allocated_bw=%d kB/s  dprx_rate=%d kbps"
+		 "  group_id=%d  granularity=%d kB/s  bwa=%d  path='%s' serial='%s'\n",
+		 out->name, pre_allocated, pre_dprx_rate, pre_group, granularity,
+		 pre_bwa, pre_path, pre_serial);
+
+	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
+
+	out = await_tunnel_after_resume_identity(d, out, pre_path, pre_serial,
+						 "suspend");
+	if (!out) {
+		igt_remove_fb(d->drm_fd, &fb);
+		igt_skip("Tunnel not re-established 30s after resume\n");
+	}
+
+	if (pre_bwa)
+		igt_assert_f(get_bwa_enabled(d->drm_fd, out),
+			     "BWA was enabled pre-suspend but not restored after resume\n");
+
+	post_allocated = get_allocated_bw(d->drm_fd, out);
+	igt_info("[suspend] Post-resume: allocated_bw=%d kB/s  bwa_enabled=%d"
+		 "  dprx_rate=%d kbps  group_id=%d\n",
+		 post_allocated, get_bwa_enabled(d->drm_fd, out),
+		 get_dprx_rate(d->drm_fd, out),
+		 get_tunnel_group_id(d->drm_fd, out));
+	igt_info("[suspend] pass=(|post-pre| <= gran): |%d - %d| = %d <= %d\n",
+		 post_allocated, pre_allocated,
+		 abs(post_allocated - pre_allocated), granularity);
+	igt_assert_f(abs(post_allocated - pre_allocated) <= granularity,
+		     "Allocated BW changed more than one granularity step "
+		     "after resume: pre=%d post=%d gran=%d\n",
+		     pre_allocated, post_allocated, granularity);
+	igt_assert_f(get_dprx_rate(d->drm_fd, out) == pre_dprx_rate,
+		     "DPRX rate changed after resume\n");
+	igt_assert_f(get_tunnel_group_id(d->drm_fd, out) == pre_group,
+		     "Tunnel group ID changed after resume\n");
+
+	/*
+	 * After suspend/resume, TBT re-enumerates connectors which can
+	 * cause a stale DRM state in IGT. Use targeted per-output disable
+	 * to avoid touching connectors that may have changed.
+	 */
+	igt_output_set_crtc(out, NULL);
+	igt_output_override_mode(out, NULL);
+	igt_display_commit2(&d->display, COMMIT_ATOMIC);
+	igt_remove_fb(d->drm_fd, &fb);
+}
+
+static void test_limit_fallback(data_t *d, igt_output_t *out)
+{
+	struct igt_fb fb;
+	struct limit_setup s;
+	drmModeConnector *conn;
+	drmModeModeInfo fallback_copy;
+	drmModeModeInfo *modes[1];
+	int reject_limit, pref_alloc, fallback_alloc, count;
+	bool present;
+
+	require_limit_setup(d, out, &s);
+
+	/* Record the BW actually allocated for the preferred mode */
+	modes[0] = &s.preferred;
+	do_modeset(d, &out, 1, modes, &fb);
+	pref_alloc = get_allocated_bw(d->drm_fd, out);
+	igt_info("[limit-fallback] preferred_mode=%dx%d@%d clock=%d kHz"
+		 "  pref_alloc=%d kB/s  estimated_bw=%d kB/s\n",
+		 s.preferred.hdisplay, s.preferred.vdisplay,
+		 s.preferred.vrefresh, s.preferred.clock,
+		 pref_alloc, s.estimated_bw);
+	cleanup_outputs(d, &out, 1, &fb);
+
+	reject_limit = s.threshold - 1;
+	igt_info("[limit-fallback] threshold=%d  reject_limit=%d\n",
+		 s.threshold, reject_limit);
+
+	/* Apply the reject limit and verify preferred is gone */
+	present = preferred_mode_present_at_limit(d, out, s.connector_id,
+						  &s.preferred, reject_limit,
+						  &count);
+	igt_info("[limit-fallback] At T-1=%d: preferred_present=%d  modes_remaining=%d\n",
+		 reject_limit, present, count);
+	igt_assert_f(!present,
+		     "Preferred mode (clock=%d) still present at "
+		     "limit=%d (threshold=%d)\n",
+		     s.preferred.clock, reject_limit, s.threshold);
+
+	conn = drmModeGetConnector(d->drm_fd, s.connector_id);
+	igt_assert_f(conn, "Failed to reprobe connector\n");
+	if (!igt_connector_find_highest_clock_mode_in(conn, &fallback_copy)) {
+		drmModeFreeConnector(conn);
+		set_bw_limit(d->drm_fd, out, 0);
+		igt_skip("No modes available at limit=%d\n", reject_limit);
+	}
+	drmModeFreeConnector(conn);
+
+	modes[0] = &fallback_copy;
+	do_modeset(d, &out, 1, modes, &fb);
+	fallback_alloc = get_allocated_bw(d->drm_fd, out);
+	/*
+	 * The kernel filters modes using 18bpp minimum
+	 * (intel_dp_mode_valid_format) but allocates BWA at the actual
+	 * pixel rate.  On low-res displays the granularity rounding can
+	 * make fallback_alloc == pref_alloc.  Assert on clock difference
+	 * instead (proves mode-list filtering worked).
+	 */
+	igt_info("[limit-fallback] fallback_mode=%dx%d@%d  fallback_alloc=%d kB/s"
+		 "  pref_alloc=%d kB/s  pass=(fallback_clock < pref_clock): %d < %d\n",
+		 fallback_copy.hdisplay, fallback_copy.vdisplay,
+		 fallback_copy.vrefresh, fallback_alloc, pref_alloc,
+		 fallback_copy.clock, s.preferred.clock);
+	igt_assert_f(fallback_copy.clock < s.preferred.clock,
+		     "Expected fallback mode (clock %d < preferred %d) "
+		     "but mode-list filtering did not work\n",
+		     fallback_copy.clock, s.preferred.clock);
+	igt_assert_f(fallback_alloc > 0,
+		     "Fallback allocated BW %d <= 0\n", fallback_alloc);
+
+	set_bw_limit(d->drm_fd, out, 0);
+	cleanup_outputs(d, &out, 1, &fb);
+}
+
+/*
+ * test_limit_boundary - Three-stage off-by-one + clear check on the same
+ * tunnel:
+ *   1. limit = threshold T:    preferred must be present.
+ *   2. limit = T - 1:          preferred must be absent.
+ *   3. limit = 0:              preferred and full mode count restored.
+ *
+ * Stage 3 absorbs what test_limit_clear used to cover separately - the
+ * unique "full mode count restored after clearing" check now lives here.
+ */
+static void test_limit_boundary(data_t *d, igt_output_t *out)
+{
+	struct limit_setup s;
+	int count;
+	bool present;
+
+	require_limit_setup(d, out, &s);
+
+	igt_info("[limit-boundary] preferred_mode=%dx%d@%d clock=%d kHz"
+		 "  estimated_bw=%d kB/s  threshold(T)=%d kB/s"
+		 "  full_mode_count=%d\n",
+		 s.preferred.hdisplay, s.preferred.vdisplay,
+		 s.preferred.vrefresh, s.preferred.clock,
+		 s.estimated_bw, s.threshold, s.full_mode_count);
+
+	/* At threshold: preferred must be present */
+	present = preferred_mode_present_at_limit(d, out, s.connector_id,
+						  &s.preferred, s.threshold,
+						  &count);
+	igt_info("[limit-boundary] At T=%d: preferred_present=%d (expect 1)"
+		 "  modes_count=%d\n", s.threshold, present, count);
+	igt_assert_f(present,
+		     "Preferred mode (clock=%d) absent at boundary limit=%d\n",
+		     s.preferred.clock, s.threshold);
+
+	/* One below threshold: preferred must be absent */
+	present = preferred_mode_present_at_limit(d, out, s.connector_id,
+						  &s.preferred,
+						  s.threshold - 1, &count);
+	igt_info("[limit-boundary] At T-1=%d: preferred_present=%d (expect 0)"
+		 "  modes_count=%d\n", s.threshold - 1, present, count);
+	igt_assert_f(!present,
+		     "Preferred mode (clock=%d) still present at "
+		     "limit=%d (one below threshold=%d)\n",
+		     s.preferred.clock, s.threshold - 1, s.threshold);
+
+	/* Clear: full mode list and preferred must be restored */
+	present = preferred_mode_present_at_limit(d, out, s.connector_id,
+						  &s.preferred, 0, &count);
+	igt_info("[limit-boundary] After clear (limit=0): modes_count=%d"
+		 "  preferred_present=%d  pass=(count == full): %d == %d\n",
+		 count, present, count, s.full_mode_count);
+	igt_assert_f(get_bw_limit(d->drm_fd, out) == 0,
+		     "bw_limit not 0 after clearing\n");
+	igt_assert_f(count == s.full_mode_count,
+		     "Mode count %d != original %d after clearing\n",
+		     count, s.full_mode_count);
+	igt_assert_f(present,
+		     "Preferred mode not restored after clearing limit\n");
+}
+
+static void test_limit_suspend(data_t *d, igt_output_t *out)
+{
+	struct igt_fb fb;
+	struct limit_setup s;
+	drmModeConnector *conn;
+	drmModeModeInfo fallback_copy;
+	drmModeModeInfo *modes[1];
+	int allocated_before, limit, allocated_pre, allocated_after;
+	char pre_path[128] = {};
+	char pre_serial[64] = {};
+	char tmp[32];
+
+	igt_connector_get_info(d->drm_fd,
+			       out->config.connector->connector_id,
+			       tmp, sizeof(tmp),
+			       pre_serial, sizeof(pre_serial),
+			       pre_path, sizeof(pre_path));
+
+	require_limit_setup(d, out, &s);
+
+	/* Modeset at preferred mode, then record allocated BW */
+	modes[0] = &s.preferred;
+	do_modeset(d, &out, 1, modes, &fb);
+	allocated_before = get_allocated_bw(d->drm_fd, out);
+	igt_info("[limit-suspend] preferred_mode=%dx%d@%d  allocated_before=%d kB/s\n",
+		 s.preferred.hdisplay, s.preferred.vdisplay,
+		 s.preferred.vrefresh, allocated_before);
+	cleanup_outputs(d, &out, 1, &fb);
+
+	limit = s.threshold - 1;
+	set_bw_limit(d->drm_fd, out, limit);
+
+	conn = drmModeGetConnector(d->drm_fd, s.connector_id);
+	if (!conn || conn->count_modes == 0) {
+		if (conn)
+			drmModeFreeConnector(conn);
+		set_bw_limit(d->drm_fd, out, 0);
+		igt_skip("No modes available within limit=%d\n", limit);
+	}
+
+	igt_assert_f(igt_connector_find_highest_clock_mode_in(conn, &fallback_copy),
+		     "No modes in filtered connector list at limit=%d\n", limit);
+	drmModeFreeConnector(conn);
+
+	modes[0] = &fallback_copy;
+	do_modeset(d, &out, 1, modes, &fb);
+
+	/*
+	 * Note: bw_limit filters using 18bpp; actual BWA is at display
+	 * pixel rate, so allocated_pre may exceed limit. Log the value
+	 * as evidence but don't assert allocated <= limit. The meaningful
+	 * check is that bw_limit is reset across suspend.
+	 */
+	allocated_pre = get_allocated_bw(d->drm_fd, out);
+	igt_info("[limit-suspend] fallback_mode=%dx%d@%d  limit=%d kB/s"
+		 "  allocated_pre=%d kB/s"
+		 "  (note: alloc may exceed limit due to 18bpp filter)\n",
+		 fallback_copy.hdisplay, fallback_copy.vdisplay,
+		 fallback_copy.vrefresh, limit, allocated_pre);
+	igt_assert_f(allocated_pre > 0,
+		     "Allocated BW %d <= 0 for fallback mode\n", allocated_pre);
+
+	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
+
+	out = await_tunnel_after_resume_identity(d, out, pre_path, pre_serial,
+						 "limit-suspend");
+	if (!out) {
+		igt_remove_fb(d->drm_fd, &fb);
+		igt_skip("Tunnel not re-established 30s after resume\n");
+	}
+
+	/*
+	 * bw_limit lives on the tunnel object; the tunnel is destroyed on
+	 * suspend and re-created on resume, so the cap is reset to 0.
+	 */
+	igt_assert_f(get_bw_limit(d->drm_fd, out) == 0,
+		     "bw_limit not reset after resume: expected 0, got %d\n",
+		     get_bw_limit(d->drm_fd, out));
+
+	allocated_after = get_allocated_bw(d->drm_fd, out);
+	igt_info("[limit-suspend] Post-resume: bw_limit=%d kB/s  allocated_after=%d kB/s"
+		 "  allocated_pre=%d kB/s  delta=%d kB/s\n",
+		 get_bw_limit(d->drm_fd, out), allocated_after,
+		 allocated_pre, allocated_after - allocated_pre);
+	igt_assert_f(allocated_after > 0,
+		     "Allocated BW %d <= 0 after resume\n", allocated_after);
+
+	if (has_tunnel(d->drm_fd, out))
+		set_bw_limit(d->drm_fd, out, 0);
+	igt_output_set_crtc(out, NULL);
+	igt_output_override_mode(out, NULL);
+	igt_display_commit2(&d->display, COMMIT_ATOMIC);
+	igt_remove_fb(d->drm_fd, &fb);
+}
+
+/*
+ * test_bwa_re_enable - End-to-end BWA toggle lifecycle. Replaces three
+ * earlier subtests (bwa-disable / bwa-link-params / bwa-modeset):
+ *
+ *   1. Modeset preferred mode; record alloc_initial, rate_on. BWA must be
+ *      enabled and allocation positive.
+ *   2. Disable BWA via debugfs (no commit).  Snapshot tunnel info once
+ *      and assert: bwa is off, Allocated BW == -1, "Tunnel:" header still
+ *      present, rate_off > 0 (DPCD fallback path).
+ *   3. Disable display, re-enable BWA, fresh modeset on the same preferred
+ *      mode.  alloc_post must equal alloc_initial (same input, same group
+ *      state -> deterministic), and rate_restored must equal rate_on.
+ */
+static void test_bwa_re_enable(data_t *d, igt_output_t *out)
+{
+	struct igt_fb fb;
+	char buf[TUNNEL_INFO_BUF_SIZE];
+	int alloc_initial, rate_on, rate_off, rate_restored, alloc_post;
+	int disabled_alloc;
+	bool tunnel_alive, bwa_off;
+
+	do_modeset(d, &out, 1, NULL, &fb);
+	require_bwa(d, out);
+
+	alloc_initial = get_allocated_bw(d->drm_fd, out);
+	rate_on = igt_get_max_link_rate(d->drm_fd, out);
+	igt_info("[bwa-re-enable] Stage1 alloc_initial=%d kB/s  rate_on=%d kbps\n",
+		 alloc_initial, rate_on);
+	igt_assert_f(alloc_initial > 0,
+		     "Expected positive allocated BW, got %d\n", alloc_initial);
+	igt_assert_f(rate_on > 0, "Max link rate %d invalid\n", rate_on);
+
+	/*
+	 * Stage 2: disable BWA and snapshot the resulting state once. Reading
+	 * tunnel info / link rate / bwa_enabled all in one go avoids racing
+	 * the debugfs against any background activity that might mutate state
+	 * between separate reads.
+	 */
+	set_bwa_enabled(d->drm_fd, out, false);
+	read_tunnel_info(d->drm_fd, out, buf, sizeof(buf));
+	bwa_off = !get_bwa_enabled(d->drm_fd, out);
+	disabled_alloc = parse_tunnel_field_int(buf, "Allocated BW:");
+	tunnel_alive = strncmp(buf, "Tunnel:", 7) == 0;
+	rate_off = igt_get_max_link_rate(d->drm_fd, out);
+	igt_info("[bwa-re-enable] Stage2 (BWA off): bwa_off=%d  alloc=%d (expect -1)"
+		 "  tunnel_alive=%d  rate_off=%d kbps\n",
+		 bwa_off, disabled_alloc, tunnel_alive, rate_off);
+	igt_assert_f(bwa_off, "BWA still enabled after disabling\n");
+	igt_assert_f(disabled_alloc == -1,
+		     "Allocated BW should be -1 when BWA disabled, got %d\n",
+		     disabled_alloc);
+	igt_assert_f(tunnel_alive, "Tunnel disappeared after BWA disable\n");
+	igt_assert_f(rate_off > 0,
+		     "Max link rate %d invalid after BWA off\n", rate_off);
+
+	/*
+	 * Stage 3: bring the display down, re-enable BWA on the quiesced
+	 * tunnel, then bring it back up. BWA negotiation with the USB4 host
+	 * runs as part of the display-enable transition, so a fresh modeset
+	 * is what verifies the knob took effect.
+	 */
+	cleanup_outputs(d, &out, 1, &fb);
+	set_bwa_enabled(d->drm_fd, out, true);
+	igt_assert_f(get_bwa_enabled(d->drm_fd, out), "BWA not re-enabled\n");
+	do_modeset(d, &out, 1, NULL, &fb);
+
+	alloc_post = get_allocated_bw(d->drm_fd, out);
+	rate_restored = igt_get_max_link_rate(d->drm_fd, out);
+	igt_info("[bwa-re-enable] Stage3 (re-enable+fresh modeset):"
+		 " alloc_post=%d kB/s  estimated=%d kB/s  rate_restored=%d kbps"
+		 "  pass=(alloc_post == alloc_initial && rate_restored == rate_on):"
+		 "  %d == %d && %d == %d\n",
+		 alloc_post, get_estimated_bw(d->drm_fd, out), rate_restored,
+		 alloc_post, alloc_initial, rate_restored, rate_on);
+	igt_assert_f(alloc_post > 0,
+		     "Allocated BW %d <= 0 after re-enable\n", alloc_post);
+	igt_assert_f(get_estimated_bw(d->drm_fd, out) > 0,
+		     "Estimated BW <= 0 after re-enable\n");
+	igt_assert_f(alloc_post == alloc_initial,
+		     "Post-re-enable alloc %d != initial %d\n",
+		     alloc_post, alloc_initial);
+	igt_assert_f(rate_restored == rate_on,
+		     "Max link rate after re-enable (%d) != original (%d)\n",
+		     rate_restored, rate_on);
+
+	cleanup_outputs(d, &out, 1, &fb);
+}
+
+/*
+ * test_bwa_cycle - Stress repeated debugfs-only BWA toggle (no modeset
+ * inside the loop) and verify that BW allocation is unchanged once a
+ * fresh modeset re-establishes the link. This exercises rapid
+ * debugfs-knob handling, not BWA renegotiation.
+ */
+static void test_bwa_cycle(data_t *d, igt_output_t *out)
+{
+	struct igt_fb fb;
+	int original, post, i;
+
+	do_modeset(d, &out, 1, NULL, &fb);
+	require_bwa(d, out);
+
+	original = get_allocated_bw(d->drm_fd, out);
+	igt_info("[bwa-cycle] Initial: original_bw=%d kB/s  n_cycles=%d\n",
+		 original, BWA_CYCLE_COUNT);
+	igt_assert_f(original > 0,
+		     "Expected positive allocated BW, got %d\n", original);
+
+	for (i = 0; i < BWA_CYCLE_COUNT; i++) {
+		set_bwa_enabled(d->drm_fd, out, false);
+		igt_assert_f(!get_bwa_enabled(d->drm_fd, out),
+			     "BWA still enabled in cycle %d\n", i);
+		/*
+		 * Sanity-check that the knob has the expected debugfs side
+		 * effect (Allocated BW becomes -1) once per run, not every
+		 * iteration - one reading per cycle is enough overhead.
+		 */
+		if (i == 0)
+			igt_assert_f(get_allocated_bw(d->drm_fd, out) == -1,
+				     "Allocated BW != -1 after first disable\n");
+		set_bwa_enabled(d->drm_fd, out, true);
+		igt_assert_f(get_bwa_enabled(d->drm_fd, out),
+			     "BWA not re-enabled in cycle %d\n", i);
+	}
+
+	cleanup_outputs(d, &out, 1, &fb);
+	do_modeset(d, &out, 1, NULL, &fb);
+
+	post = get_allocated_bw(d->drm_fd, out);
+	igt_info("[bwa-cycle] After %d cycles + fresh modeset: post_bw=%d kB/s"
+		 "  pass=(post == original): %d == %d\n",
+		 BWA_CYCLE_COUNT, post, post, original);
+	igt_assert_f(post > 0,
+		     "Allocated BW %d <= 0 after cycles\n", post);
+	igt_assert_f(post == original,
+		     "BW drifted after %d BWA cycles: orig=%d post=%d\n",
+		     BWA_CYCLE_COUNT, original, post);
+
+	cleanup_outputs(d, &out, 1, &fb);
+}
+
+static void test_dual_bw_sum(data_t *d)
+{
+	igt_output_t *outs[2] = { d->output, d->output2 };
+	struct igt_fb fbs[2] = {};
+	int alloc_a, alloc_b, estimated_a, estimated_b;
+	int group_a, group_b, group_free_a, group_free_b;
+
+	do_modeset(d, outs, 2, NULL, fbs);
+
+	group_a = get_tunnel_group_id(d->drm_fd, outs[0]);
+	group_b = get_tunnel_group_id(d->drm_fd, outs[1]);
+	igt_assert_f(group_a >= 0 && group_b >= 0,
+		     "Invalid tunnel group IDs: %d vs %d\n", group_a, group_b);
+	igt_assert_f(group_a == group_b,
+		     "Tunnels have different group IDs: %d vs %d\n",
+		     group_a, group_b);
+
+	alloc_a = get_allocated_bw(d->drm_fd, outs[0]);
+	alloc_b = get_allocated_bw(d->drm_fd, outs[1]);
+	estimated_a = get_estimated_bw(d->drm_fd, outs[0]);
+	estimated_b = get_estimated_bw(d->drm_fd, outs[1]);
+
+	/*
+	 * Per-tunnel "Estimated BW" reported by the TBT Connection Manager
+	 * is (this tunnel's allocated BW) + (group free BW). Two tunnels in
+	 * the same group therefore see the same group_free, even though
+	 * their per-tunnel estimated values legitimately differ when their
+	 * allocations differ. The shared-group invariant is:
+	 *
+	 *   estimated_a - alloc_a == estimated_b - alloc_b == group_free
+	 *
+	 * and that group_free must be non-negative.
+	 */
+	group_free_a = estimated_a - alloc_a;
+	group_free_b = estimated_b - alloc_b;
+	igt_info("[dual-bw-sum] group=%d  alloc_a=%d estimated_a=%d  "
+		 "alloc_b=%d estimated_b=%d  group_free_a=%d group_free_b=%d\n",
+		 group_a, alloc_a, estimated_a, alloc_b, estimated_b,
+		 group_free_a, group_free_b);
+	igt_assert_f(alloc_a > 0 && alloc_b > 0,
+		     "Both outputs must have positive allocated BW (got %d, %d)\n",
+		     alloc_a, alloc_b);
+	igt_assert_f(group_free_a == group_free_b,
+		     "Grouped tunnels report different free BW (%d vs %d). "
+		     "estimated_a=%d alloc_a=%d  estimated_b=%d alloc_b=%d\n",
+		     group_free_a, group_free_b,
+		     estimated_a, alloc_a, estimated_b, alloc_b);
+	igt_assert_f(group_free_a >= 0,
+		     "Negative group free BW (%d): allocations overran the pool\n",
+		     group_free_a);
+
+	cleanup_outputs(d, outs, 2, fbs);
+}
+
+/*
+ * test_dual_limit_isolation - Per-tunnel bw_limit isolation within a shared
+ * group.
+ *
+ * The strong contract being tested: bw_limit is per-tunnel state
+ * (tunnel->bw_limit), not group state, even when two tunnels share one USB4
+ * group's BW pool. Writing to A's bw_limit debugfs file must:
+ *
+ *   (a) clip A's connector mode list (modes whose 18bpp BW exceed the cap
+ *       are filtered from drmModeGetConnector() on A).
+ *   (b) NOT clip B's connector mode list (B's mode count + preferred mode
+ *       are unchanged at the moment A's cap is set).
+ *   (c) After a retrigger that pins B to its prior mode, B's mode is
+ *       preserved and B's allocation drifts by at most one granularity
+ *       step (group BW accounting can redistribute the freed BW within
+ *       the group, which can shift B's bucket; that is allowed).
+ *
+ * This complements dual-bw-sum (which tests the group BW invariant) and
+ * mst-limit-fallback (which tests bw_limit on a single tunnel with two
+ * streams). Neither covers the per-tunnel-vs-group scope of bw_limit.
+ */
+static void test_dual_limit_isolation(data_t *d)
+{
+	igt_output_t *outs[2] = { d->output, d->output2 };
+	struct igt_fb fbs[2] = {}, fbs2[2] = {};
+	drmModeModeInfo *modes[2] = {};
+	drmModeModeInfo limited_mode, mode_a_before, mode_b_before;
+	drmModeConnector *conn;
+	uint32_t connector_id_a, connector_id_b;
+	int alloc_a_before, alloc_b_before, alloc_a_after, alloc_b_after, limit_a;
+	int gran_b, delta_b;
+	int b_modes_unfiltered, b_modes_under_a_limit;
+	int group_a, group_b;
+	bool b_preferred_under_a_limit;
+	const drmModeModeInfo *mode_b_after;
+
+	do_modeset(d, outs, 2, NULL, fbs);
+
+	/*
+	 * Sanity: the require_dual_sst_same_group() helper at the call site
+	 * already filters by group, but assert it inside the test too so the
+	 * trace is unambiguous when looking at logs.
+	 */
+	group_a = get_tunnel_group_id(d->drm_fd, outs[0]);
+	group_b = get_tunnel_group_id(d->drm_fd, outs[1]);
+	igt_assert_f(group_a >= 0 && group_b >= 0 && group_a == group_b,
+		     "Pair not in same group: group_a=%d group_b=%d\n",
+		     group_a, group_b);
+
+	mode_a_before = *igt_output_get_mode(outs[0]);
+	mode_b_before = *igt_output_get_mode(outs[1]);
+	alloc_a_before = get_allocated_bw(d->drm_fd, outs[0]);
+	alloc_b_before = get_allocated_bw(d->drm_fd, outs[1]);
+	gran_b = get_granularity(d->drm_fd, outs[1]);
+	limit_a = alloc_a_before / 2;
+	igt_require_f(limit_a > 0, "Allocated BW too small for test\n");
+
+	/*
+	 * Probe B's connector once with no cap on A so we can compare the
+	 * mode-list count + preferred-mode presence after applying A's cap.
+	 */
+	connector_id_a = outs[0]->config.connector->connector_id;
+	connector_id_b = outs[1]->config.connector->connector_id;
+
+	conn = drmModeGetConnector(d->drm_fd, connector_id_b);
+	igt_assert_f(conn, "Failed to probe B unfiltered\n");
+	b_modes_unfiltered = conn->count_modes;
+	drmModeFreeConnector(conn);
+
+	/*
+	 * Apply limit to tunnel A only, then probe both connectors:
+	 *   - A's filtered list: pick the highest-clock surviving mode.
+	 *   - B's filtered list: must be unchanged (count + preferred mode
+	 *     present), which is the per-tunnel-scope assertion.
+	 */
+	set_bw_limit(d->drm_fd, outs[0], limit_a);
+
+	conn = drmModeGetConnector(d->drm_fd, connector_id_a);
+	if (!conn || conn->count_modes == 0) {
+		if (conn)
+			drmModeFreeConnector(conn);
+		set_bw_limit(d->drm_fd, outs[0], 0);
+		igt_skip("No modes on A after applying bw_limit\n");
+	}
+	if (!igt_connector_find_highest_clock_mode_in(conn, &limited_mode)) {
+		drmModeFreeConnector(conn);
+		set_bw_limit(d->drm_fd, outs[0], 0);
+		igt_skip("No modes available within limit=%d\n", limit_a);
+	}
+	drmModeFreeConnector(conn);
+
+	conn = drmModeGetConnector(d->drm_fd, connector_id_b);
+	igt_assert_f(conn, "Failed to reprobe B under A's cap\n");
+	b_modes_under_a_limit = conn->count_modes;
+	b_preferred_under_a_limit =
+		igt_connector_mode_in_list(conn, &mode_b_before);
+	drmModeFreeConnector(conn);
+
+	igt_info("[dual-limit-isolation] group=%d  "
+		 "B_modes: unfiltered=%d under_A_limit=%d  "
+		 "B_preferred_under_A_limit=%d  "
+		 "A_clk_before=%d A_clk_under_limit=%d  limit_a=%d\n",
+		 group_a, b_modes_unfiltered, b_modes_under_a_limit,
+		 b_preferred_under_a_limit,
+		 mode_a_before.clock, limited_mode.clock, limit_a);
+
+	/* Per-tunnel scope: A's cap must NOT shrink B's mode list. */
+	igt_assert_f(b_modes_under_a_limit == b_modes_unfiltered,
+		     "B's mode count changed when A was capped: "
+		     "unfiltered=%d under_A_limit=%d (bw_limit leaked from A to B)\n",
+		     b_modes_unfiltered, b_modes_under_a_limit);
+	igt_assert_f(b_preferred_under_a_limit,
+		     "B's previously-active mode (clk=%d) was filtered out "
+		     "when A was capped (bw_limit leaked from A to B)\n",
+		     mode_b_before.clock);
+
+	/* A's cap took effect on A's own list. */
+	igt_assert_f(limited_mode.clock < mode_a_before.clock,
+		     "A's mode list was not constrained by its bw_limit: "
+		     "limited_clock=%d, original_clock=%d\n",
+		     limited_mode.clock, mode_a_before.clock);
+
+	/*
+	 * Pin tunnel B to its prior mode and bring A up at the limited
+	 * mode. After commit, B's mode must be preserved and B's
+	 * allocation must stay within one granularity step (the freed
+	 * BW from A may shift B's BWA bucket via group accounting).
+	 */
+	modes[0] = &limited_mode;
+	modes[1] = &mode_b_before;
+	retrigger_modeset(d, outs, 2, modes, fbs, fbs2);
+
+	alloc_a_after = get_allocated_bw(d->drm_fd, outs[0]);
+	alloc_b_after = get_allocated_bw(d->drm_fd, outs[1]);
+	mode_b_after = igt_output_get_mode(outs[1]);
+	delta_b = abs(alloc_b_after - alloc_b_before);
+
+	igt_info("[dual-limit-isolation] post-retrigger: "
+		 "alloc_a: %d->%d  alloc_b: %d->%d (gran=%d delta=%d)  "
+		 "B_clk: %d->%d\n",
+		 alloc_a_before, alloc_a_after,
+		 alloc_b_before, alloc_b_after, gran_b, delta_b,
+		 mode_b_before.clock, mode_b_after->clock);
+	igt_assert_f(alloc_a_after > 0,
+		     "A allocated BW %d <= 0 after limited modeset\n",
+		     alloc_a_after);
+	igt_assert_f(mode_b_after->clock == mode_b_before.clock,
+		     "B mode changed across A's cap retrigger: "
+		     "before clk=%d after clk=%d\n",
+		     mode_b_before.clock, mode_b_after->clock);
+	igt_assert_f(alloc_b_after > 0,
+		     "B alloc invalid after retrigger: %d\n", alloc_b_after);
+	igt_assert_f(delta_b <= gran_b,
+		     "B alloc drifted beyond one granularity step: "
+		     "before=%d after=%d gran=%d delta=%d\n",
+		     alloc_b_before, alloc_b_after, gran_b, delta_b);
+
+	set_bw_limit(d->drm_fd, outs[0], 0);
+	cleanup_outputs(d, outs, 2, fbs2);
+}
+
+static void test_dual_bwa_disable(data_t *d)
+{
+	igt_output_t *outs[2] = { d->output, d->output2 };
+	struct igt_fb fbs[2] = {};
+	int alloc_b_before, alloc_b_after, gran_b, delta_b;
+	int group_a, group_b;
+
+	do_modeset(d, outs, 2, NULL, fbs);
+	require_bwa(d, outs[0]);
+	require_bwa(d, outs[1]);
+
+	group_a = get_tunnel_group_id(d->drm_fd, outs[0]);
+	group_b = get_tunnel_group_id(d->drm_fd, outs[1]);
+	igt_require_f(group_a >= 0 && group_b >= 0,
+		      "Invalid tunnel group IDs: %d vs %d\n",
+		      group_a, group_b);
+	igt_require_f(group_a == group_b,
+		      "Need two tunnels in same group, got %d vs %d\n",
+		      group_a, group_b);
+
+	alloc_b_before = get_allocated_bw(d->drm_fd, outs[1]);
+	gran_b = get_granularity(d->drm_fd, outs[1]);
+
+	set_bwa_enabled(d->drm_fd, outs[0], false);
+
+	igt_assert_f(!get_bwa_enabled(d->drm_fd, outs[0]),
+		     "Tunnel A BWA still enabled\n");
+	igt_assert_f(get_bwa_enabled(d->drm_fd, outs[1]),
+		     "Tunnel B BWA was also disabled\n");
+	igt_assert_f(get_allocated_bw(d->drm_fd, outs[0]) == -1,
+		     "Tunnel A Allocated BW != -1 after BWA disable\n");
+
+	alloc_b_after = get_allocated_bw(d->drm_fd, outs[1]);
+	delta_b = abs(alloc_b_after - alloc_b_before);
+	igt_info("[dual-bwa-disable] alloc_b: before=%d after=%d  gran_b=%d  "
+		 "delta=%d\n",
+		 alloc_b_before, alloc_b_after, gran_b, delta_b);
+	igt_assert_f(alloc_b_after > 0,
+		     "Tunnel B alloc invalid after disabling A's BWA: %d\n",
+		     alloc_b_after);
+	igt_assert_f(delta_b <= gran_b,
+		     "Tunnel B alloc drifted beyond granularity: "
+		     "before=%d after=%d gran=%d\n",
+		     alloc_b_before, alloc_b_after, gran_b);
+
+	/*
+	 * Re-enable tunnel A BWA on a quiesced display. BWA negotiation with
+	 * the USB4 host runs as part of the display-enable transition, so we
+	 * first bring the displays down, flip the bw_alloc_enable knob, and
+	 * bring them back up. The fresh modeset is what verifies that
+	 * allocation can be restored after re-enabling the knob.
+	 */
+	cleanup_outputs(d, outs, 2, fbs);
+	set_bwa_enabled(d->drm_fd, outs[0], true);
+	igt_assert_f(get_bwa_enabled(d->drm_fd, outs[0]),
+		     "Tunnel A BWA not re-enabled\n");
+	do_modeset(d, outs, 2, NULL, fbs);
+	igt_assert_f(get_allocated_bw(d->drm_fd, outs[0]) > 0,
+		     "Tunnel A alloc not restored after BWA re-enable\n");
+
+	cleanup_outputs(d, outs, 2, fbs);
+}
+
+/*
+ * test_mst_basic - Two MST streams share one tunnel object so both MST
+ * connectors expose the same per-tunnel debugfs allocation. Verify that
+ * (a) the two connectors report the same allocated BW, (b) the value is
+ * positive. We deliberately do not compare the allocation to a 18bpp
+ * pixel-rate estimate of either stream because the kernel may use DSC
+ * to compress streams below 18bpp aggregate, making such estimates
+ * fragile.
+ */
+static void test_mst_basic(data_t *d)
+{
+	struct igt_fb fbs[2] = {};
+	int alloc0, alloc1;
+
+	do_modeset(d, d->mst_outputs, 2, NULL, fbs);
+
+	alloc0 = get_allocated_bw(d->drm_fd, d->mst_outputs[0]);
+	alloc1 = get_allocated_bw(d->drm_fd, d->mst_outputs[1]);
+	igt_info("[mst-basic] alloc0=%d kB/s  alloc1=%d kB/s\n", alloc0, alloc1);
+	igt_assert_f(alloc0 > 0,
+		     "Allocated BW %d <= 0 with 2 MST streams\n", alloc0);
+	igt_assert_f(alloc0 == alloc1,
+		     "MST connectors under same tunnel report different "
+		     "allocations: %d vs %d\n", alloc0, alloc1);
+
+	cleanup_outputs(d, d->mst_outputs, 2, fbs);
+}
+
+/*
+ * test_mst_modeset_bw - Raise stream 0's mode from lowest- to preferred-
+ * clock while stream 1 keeps whatever do_modeset() picks by default.
+ * Aggregate allocation should not decrease. Strict-greater is avoided
+ * because BWA granularity rounding can make distinct modes share an
+ * allocation bucket.
+ */
+static void test_mst_modeset_bw(data_t *d)
+{
+	struct igt_fb fbs_low0[2] = {}, fbs_high0[2] = {};
+	drmModeModeInfo low0_copy, high0_copy;
+	drmModeModeInfo *modes[2];
+	int bw_low0_default1, bw_high0_default1;
+
+	igt_require_f(d->mst_outputs[0]->config.connector->count_modes >= 2,
+		      "MST output 0 needs at least 2 modes\n");
+	igt_require_f(igt_connector_find_lowest_clock_mode(d->mst_outputs[0], &low0_copy) &&
+		      igt_connector_find_preferred_mode(d->mst_outputs[0], &high0_copy),
+		      "Could not locate low / preferred modes on MST output 0\n");
+	igt_require_f(high0_copy.clock > low0_copy.clock,
+		      "Preferred mode clock %d not greater than lowest clock %d "
+		      "on MST output 0\n", high0_copy.clock, low0_copy.clock);
+
+	modes[0] = &low0_copy;
+	modes[1] = NULL;
+	do_modeset(d, d->mst_outputs, 2, modes, fbs_low0);
+	bw_low0_default1 = get_allocated_bw(d->drm_fd, d->mst_outputs[0]);
+
+	cleanup_outputs(d, d->mst_outputs, 2, fbs_low0);
+	modes[0] = &high0_copy;
+	modes[1] = NULL;
+	do_modeset(d, d->mst_outputs, 2, modes, fbs_high0);
+	bw_high0_default1 = get_allocated_bw(d->drm_fd, d->mst_outputs[0]);
+
+	igt_info("[mst-modeset-bw] bw_low0_default1=%d  bw_high0_default1=%d  "
+		 "low0_clk=%d  high0_clk=%d\n",
+		 bw_low0_default1, bw_high0_default1,
+		 low0_copy.clock, high0_copy.clock);
+	igt_assert_f(bw_high0_default1 >= bw_low0_default1,
+		     "BW decreased when raising stream 0's mode: low=%d high=%d\n",
+		     bw_low0_default1, bw_high0_default1);
+
+	cleanup_outputs(d, d->mst_outputs, 2, fbs_high0);
+}
+
+/*
+ * test_mst_partial_disable - Disabling one MST stream leaves the tunnel
+ * alive on the remaining stream. Allocation must stay positive and not
+ * grow. Strict-less-than is avoided because granularity rounding can
+ * make the residual allocation share a bucket with the two-stream value.
+ */
+static void test_mst_partial_disable(data_t *d)
+{
+	struct igt_fb fbs[2] = {};
+	int bw_both, bw_one;
+
+	do_modeset(d, d->mst_outputs, 2, NULL, fbs);
+	bw_both = get_allocated_bw(d->drm_fd, d->mst_outputs[0]);
+	igt_assert_f(bw_both > 0, "Expected positive BW with 2 streams\n");
+
+	igt_output_set_crtc(d->mst_outputs[1], NULL);
+	igt_display_commit2(&d->display, COMMIT_ATOMIC);
+	igt_remove_fb(d->drm_fd, &fbs[1]);
+
+	igt_assert_f(has_tunnel(d->drm_fd, d->mst_outputs[0]),
+		     "Tunnel disappeared after partial MST disable\n");
+
+	bw_one = get_allocated_bw(d->drm_fd, d->mst_outputs[0]);
+	igt_info("[mst-partial-disable] bw_both=%d  bw_one=%d\n",
+		 bw_both, bw_one);
+	igt_assert_f(bw_one > 0,
+		     "Allocated BW %d <= 0 after partial MST disable\n", bw_one);
+	igt_assert_f(bw_one <= bw_both,
+		     "BW after partial disable increased: one=%d both=%d\n",
+		     bw_one, bw_both);
+
+	cleanup_outputs(d, d->mst_outputs, 1, fbs);
+}
+
+/*
+ * mst_outputs_remapped_with_bw - True iff both cached MST output pointers
+ * are non-NULL, both expose a tunnel via debugfs, and at least one of them
+ * has a positive Allocated BW. The "at least one" rule reflects the known
+ * resume limitation: intel_dp_tunnel_resume() only re-allocates BW for the
+ * single crtc_state it's passed (see "TODO: Add support for MST" in
+ * drivers/gpu/drm/i915/display/intel_dp_tunnel.c::intel_dp_tunnel_resume()).
+ */
+static bool mst_outputs_remapped_with_bw(data_t *d)
+{
+	if (!d->mst_outputs[0] || !d->mst_outputs[1])
+		return false;
+
+	if (!has_tunnel(d->drm_fd, d->mst_outputs[0]) ||
+	    !has_tunnel(d->drm_fd, d->mst_outputs[1]))
+		return false;
+
+	return get_allocated_bw(d->drm_fd, d->mst_outputs[0]) > 0 ||
+	       get_allocated_bw(d->drm_fd, d->mst_outputs[1]) > 0;
+}
+
+static void test_mst_suspend(data_t *d)
+{
+	struct igt_fb fbs[2] = {};
+	int bw_before, bw_after, bw_after1;
+	/*
+	 * Stable pre-suspend identity (PATH + EDID serial) for both streams.
+	 * After resume the kernel re-enumerates connectors with new DRM IDs;
+	 * PATH and EDID serial persist and let us map old IGT pointers to
+	 * new connectors without a fresh modeset (kernel retains the BW
+	 * allocation). PATH is preferred (captures MST topology); EDID
+	 * serial is a fallback.
+	 */
+	char pre_path[2][128] = {};
+	char pre_serial[2][64] = {};
+	char pre_name[2][32] = {};
+	int i;
+
+	for (i = 0; i < 2; i++) {
+		uint32_t cid = d->mst_outputs[i]->config.connector->connector_id;
+		char tmp[32];
+
+		igt_connector_get_info(d->drm_fd, cid,
+				       tmp, sizeof(tmp),
+				       pre_serial[i], sizeof(pre_serial[i]),
+				       pre_path[i], sizeof(pre_path[i]));
+		snprintf(pre_name[i], sizeof(pre_name[i]), "%s",
+			 d->mst_outputs[i]->name);
+		igt_info("[mst-suspend] pre[%d]: %s id=%u path='%s' serial='%s'\n",
+			 i, pre_name[i], cid, pre_path[i], pre_serial[i]);
+	}
+
+	do_modeset(d, d->mst_outputs, 2, NULL, fbs);
+	bw_before = get_allocated_bw(d->drm_fd, d->mst_outputs[0]);
+	igt_assert_f(bw_before > 0, "Expected positive BW before suspend\n");
+
+	igt_system_suspend_autoresume(SUSPEND_STATE_MEM, SUSPEND_TEST_NONE);
+
+	/*
+	 * Fast path: poll up to 3s for cached MST pointers to regain a
+	 * working tunnel - that means the kernel preserved their DRM IDs.
+	 */
+	igt_until_timeout(3) {
+		if (mst_outputs_remapped_with_bw(d))
+			break;
+		usleep(100 * 1000);
+	}
+
+	if (mst_outputs_remapped_with_bw(d)) {
+		igt_info("[mst-suspend] cached pointers survived resume\n");
+	} else {
+		bool mst_found = false;
+
+		/*
+		 * Refresh IGT's connector/output cache. The kernel may have
+		 * re-created MST connectors with new DRM IDs while the
+		 * restored display state is still active; we keep the FB
+		 * handles and only rebuild the IGT display object before
+		 * remapping outputs. Drop the stale igt_output_t * pointers
+		 * first so the cleanup-by-name exit handler doesn't race
+		 * post-fini access.
+		 */
+		d->mst_outputs[0] = NULL;
+		d->mst_outputs[1] = NULL;
+		igt_display_fini(&d->display);
+		igt_display_require(&d->display, d->drm_fd);
+
+		igt_until_timeout(60) {
+			uint32_t new_ids[2] = {0, 0};
+			bool mapped[2] = {false, false};
+
+			igt_connector_reprobe_all(d->drm_fd);
+
+			for (i = 0; i < 2; i++) {
+				if (pre_path[i][0] &&
+				    igt_connector_find_by_path(d->drm_fd,
+							       pre_path[i],
+							       &new_ids[i])) {
+					mapped[i] = true;
+					continue;
+				}
+				if (pre_serial[i][0] &&
+				    igt_connector_find_by_serial(d->drm_fd,
+								 pre_serial[i],
+								 &new_ids[i])) {
+					mapped[i] = true;
+				}
+			}
+
+			if (!mapped[0] || !mapped[1]) {
+				usleep(500 * 1000);
+				continue;
+			}
+
+			/*
+			 * Reject mapping both pre-suspend identities to the
+			 * same connector_id - happens if a sink reports an
+			 * empty / duplicated EDID serial and PATH lookup
+			 * fell back to that.
+			 */
+			if (new_ids[0] == new_ids[1]) {
+				igt_info("[mst-suspend] both streams mapped to "
+					 "same connector id=%u, retrying\n",
+					 new_ids[0]);
+				usleep(500 * 1000);
+				continue;
+			}
+
+			for (i = 0; i < 2; i++)
+				d->mst_outputs[i] =
+					igt_connector_find_output_by_id(&d->display,
+									new_ids[i]);
+
+			if (mst_outputs_remapped_with_bw(d)) {
+				igt_info("[mst-suspend] remapped: "
+					 "pre=%s->%s id=%u  pre=%s->%s id=%u\n",
+					 pre_name[0],
+					 d->mst_outputs[0]->name, new_ids[0],
+					 pre_name[1],
+					 d->mst_outputs[1]->name, new_ids[1]);
+				mst_found = true;
+				break;
+			}
+			usleep(500 * 1000);
+		}
+		if (!mst_found) {
+			igt_remove_fb(d->drm_fd, &fbs[0]);
+			igt_remove_fb(d->drm_fd, &fbs[1]);
+			igt_skip("MST outputs not re-mapped 60s after resume "
+				 "(pre=%s,%s)\n", pre_name[0], pre_name[1]);
+		}
+	}
+
+	/*
+	 * Known limitation: intel_dp_tunnel_resume() takes a single
+	 * crtc_state and re-allocates BW only for that pipe (see
+	 * drivers/gpu/drm/i915/display/intel_dp_tunnel.c, the
+	 * "TODO: Add support for MST" hunk in intel_dp_tunnel_resume()).
+	 * MST sinks therefore see only one stream's BW re-allocated post-
+	 * resume; pick whichever connector has the positive value.
+	 */
+	bw_after = get_allocated_bw(d->drm_fd, d->mst_outputs[0]);
+	bw_after1 = get_allocated_bw(d->drm_fd, d->mst_outputs[1]);
+	if (bw_after <= 0)
+		bw_after = bw_after1;
+	igt_info("[mst-suspend] BW before=%d  after[0]=%d after[1]=%d "
+		 "(partial resume expected)\n",
+		 bw_before, get_allocated_bw(d->drm_fd, d->mst_outputs[0]),
+		 bw_after1);
+	igt_assert_f(bw_after > 0,
+		     "MST allocated BW <= 0 on both connectors after resume\n");
+
+	cleanup_outputs(d, d->mst_outputs, 2, fbs);
+}
+
+/*
+ * mst_clear_limits - Clear bw_limit on all MST children up to and
+ * including index @upto. Safe to call from skip paths.
+ */
+static void mst_clear_limits(data_t *d, int upto)
+{
+	int k;
+
+	for (k = 0; k <= upto; k++)
+		set_bw_limit(d->drm_fd, d->mst_outputs[k], 0);
+}
+
+static void test_mst_limit_fallback(data_t *d)
+{
+	struct igt_fb fbs[2] = {}, fbs2[2] = {};
+	drmModeModeInfo best_modes[2], pref_modes[2];
+	drmModeModeInfo *modes[2];
+	int bw_both, limit, bw_after;
+	igt_output_t *parent = d->mst_outputs[0];
+	int i, min_pref_18bpp;
+	bool active_modeset = false;
+	const char *skip_reason = NULL;
+	char skip_msg[160] = {};
+
+	do_modeset(d, d->mst_outputs, 2, NULL, fbs);
+	active_modeset = true;
+	bw_both = get_allocated_bw(d->drm_fd, parent);
+	igt_assert_f(bw_both > 0, "Expected positive BW with 2 MST streams\n");
+
+	/*
+	 * bw_limit filters modes using 18bpp minimum per
+	 * intel_dp_mode_valid_format(). Compute the 18bpp BW needed for
+	 * each stream's preferred mode, then set a limit one kB/s below
+	 * the smaller of the two so BOTH preferred modes are filtered
+	 * out on each connector but as many fallback modes as possible
+	 * remain available.
+	 */
+	min_pref_18bpp = INT_MAX;
+	for (i = 0; i < 2; i++) {
+		if (!igt_connector_find_preferred_mode(d->mst_outputs[i],
+						       &pref_modes[i])) {
+			snprintf(skip_msg, sizeof(skip_msg),
+				 "No preferred mode on MST output %d\n", i);
+			skip_reason = skip_msg;
+			goto out;
+		}
+		min_pref_18bpp = min(min_pref_18bpp,
+				     (int)(pref_modes[i].clock * 18 / 8));
+	}
+	limit = min_pref_18bpp - 1;
+	if (limit <= 0) {
+		skip_reason = "Cannot derive meaningful limit\n";
+		goto out;
+	}
+
+	/*
+	 * The MST connectors share a single tunnel object, so bw_limit is
+	 * one knob: setting it via the parent connector is sufficient for
+	 * every child's mode list to be re-filtered. We still probe each
+	 * child connector independently because each has its own native
+	 * mode set.
+	 */
+	set_bw_limit(d->drm_fd, parent, limit);
+	for (i = 0; i < 2; i++) {
+		uint32_t cid;
+		drmModeConnector *conn;
+
+		cid = d->mst_outputs[i]->config.connector->connector_id;
+		conn = drmModeGetConnector(d->drm_fd, cid);
+		if (!conn || conn->count_modes == 0) {
+			if (conn)
+				drmModeFreeConnector(conn);
+			snprintf(skip_msg, sizeof(skip_msg),
+				 "No modes left on MST output %d at limit=%d\n",
+				 i, limit);
+			skip_reason = skip_msg;
+			goto out;
+		}
+		if (!igt_connector_find_highest_clock_mode_in(conn,
+							      &best_modes[i])) {
+			drmModeFreeConnector(conn);
+			snprintf(skip_msg, sizeof(skip_msg),
+				 "No usable fallback on MST output %d at limit=%d\n",
+				 i, limit);
+			skip_reason = skip_msg;
+			goto out;
+		}
+		igt_info("[mst-limit-fallback] out%d: pref=%dx%d@%d"
+			 "  best_within_limit=%dx%d@%d  limit=%d kB/s\n",
+			 i, pref_modes[i].hdisplay, pref_modes[i].vdisplay,
+			 pref_modes[i].vrefresh,
+			 best_modes[i].hdisplay, best_modes[i].vdisplay,
+			 best_modes[i].vrefresh, limit);
+		if (best_modes[i].clock >= pref_modes[i].clock) {
+			drmModeFreeConnector(conn);
+			snprintf(skip_msg, sizeof(skip_msg),
+				 "Preferred mode not filtered on out%d "
+				 "(limit %d too generous)\n", i, limit);
+			skip_reason = skip_msg;
+			goto out;
+		}
+		modes[i] = &best_modes[i];
+		drmModeFreeConnector(conn);
+	}
+
+	cleanup_outputs(d, d->mst_outputs, 2, fbs);
+	active_modeset = false;
+	do_modeset(d, d->mst_outputs, 2, modes, fbs2);
+	active_modeset = true;
+	bw_after = get_allocated_bw(d->drm_fd, parent);
+
+	/*
+	 * Primary signal that the cap took effect: each stream picked a
+	 * strictly lower-clock mode (already asserted above). bw_after
+	 * is logged as supporting evidence; granularity rounding can
+	 * legitimately leave the aggregate in the same bucket, so a
+	 * strict-decrease assert here would be flaky.
+	 */
+	igt_info("[mst-limit-fallback] bw_both=%d kB/s  limit=%d kB/s"
+		 "  bw_after=%d kB/s  pass=(bw_after > 0 && <= bw_both): %d, %d\n",
+		 bw_both, limit, bw_after, bw_after, bw_both);
+	igt_assert_f(bw_after > 0,
+		     "MST allocated BW %d <= 0 after limited modeset\n",
+		     bw_after);
+	igt_assert_f(bw_after <= bw_both,
+		     "MST BW after limit (%d) > pre-limit (%d)\n",
+		     bw_after, bw_both);
+
+	mst_clear_limits(d, 1);
+	cleanup_outputs(d, d->mst_outputs, 2, fbs2);
+	return;
+
+out:
+	mst_clear_limits(d, 1);
+	if (active_modeset)
+		cleanup_outputs(d, d->mst_outputs, 2, fbs);
+	igt_skip("%s", skip_reason);
+}
+
+static void test_mst_bwa_re_enable(data_t *d)
+{
+	struct igt_fb fbs[2] = {};
+	igt_output_t *parent = d->mst_outputs[0];
+	int bw_both, granularity, post, disabled_bw;
+
+	do_modeset(d, d->mst_outputs, 2, NULL, fbs);
+	require_bwa(d, parent);
+
+	bw_both = get_allocated_bw(d->drm_fd, parent);
+	granularity = get_granularity(d->drm_fd, parent);
+	igt_assert_f(bw_both > 0, "Expected positive BW with 2 MST streams\n");
+	igt_assert_f(granularity > 0,
+		     "Invalid BW granularity: %d\n", granularity);
+
+	set_bwa_enabled(d->drm_fd, parent, false);
+	disabled_bw = get_allocated_bw(d->drm_fd, parent);
+	igt_assert_f(!get_bwa_enabled(d->drm_fd, parent),
+		     "BWA still enabled after disabling\n");
+	igt_assert_f(disabled_bw == -1,
+		     "Allocated BW should be -1 after BWA disable, got %d\n",
+		     disabled_bw);
+
+	/*
+	 * Re-enable BWA and trigger a fresh modeset for all MST streams.
+	 * BWA is re-allocated on the display-enable (off->on) path; toggling
+	 * bw_alloc_enable with the display active does not re-negotiate BWA.
+	 */
+	set_bwa_enabled(d->drm_fd, parent, true);
+	igt_assert_f(get_bwa_enabled(d->drm_fd, parent),
+		     "BWA not re-enabled\n");
+	cleanup_outputs(d, d->mst_outputs, 2, fbs);
+	do_modeset(d, d->mst_outputs, 2, NULL, fbs);
+
+	post = get_allocated_bw(d->drm_fd, parent);
+	igt_info("[mst-bwa-re-enable] bw_both=%d kB/s  post=%d kB/s"
+		 "  pass=(post == bw_both): %d == %d\n",
+		 bw_both, post, post, bw_both);
+	igt_assert_f(post > 0,
+		     "Allocated BW %d <= 0 after MST BWA re-enable\n", post);
+	igt_assert_f(post == bw_both,
+		     "Post-re-enable BW %d != bw_both %d\n", post, bw_both);
+
+	cleanup_outputs(d, d->mst_outputs, 2, fbs);
+}
+
+IGT_TEST_DESCRIPTION("Functional tests for i915 DP tunneling over "
+		     "USB4/Thunderbolt using debugfs hooks");
+
+int igt_main()
+{
+	data_t data = {};
+
+	igt_fixture() {
+		data.drm_fd = drm_open_driver_master(DRIVER_INTEL | DRIVER_XE);
+		data.devid = intel_get_drm_devid(data.drm_fd);
+		kmstest_set_vt_graphics_mode();
+		igt_display_require(&data.display, data.drm_fd);
+		igt_display_require_output(&data.display);
+
+		data.output = find_tunneled_output(&data);
+		if (!data.output) {
+			/*
+			 * The TBT tunnel debugfs may be transiently
+			 * unavailable right after a previous test's crash or
+			 * a suspend/resume cycle. Poll for up to 5s instead
+			 * of an unconditional fixed sleep so the common case
+			 * (tunnel already present) costs ~0.
+			 */
+			igt_until_timeout(5) {
+				data.output = find_tunneled_output(&data);
+				if (data.output)
+					break;
+				usleep(200 * 1000);
+			}
+		}
+		igt_require_f(data.output,
+			      "No connected DP output with tunnel found\n");
+		igt_info("Using %s as primary tunneled output\n",
+			 data.output->name);
+		register_for_cleanup(&data, data.output);
+
+		/*
+		 * Register a process-exit handler so that bw_limit and
+		 * bwa_enable are always restored even if the test exits via
+		 * SIGABRT, SIGTERM, or any other unhandled signal.
+		 */
+		g_data = &data;
+		igt_install_exit_handler(exit_handler);
+	}
+
+	igt_describe("Verify a tunneled output exists, modesets the preferred mode, "
+		     "allocates positive BW and reports a DPRX max rate >= link max rate");
+	igt_subtest("basic") {
+		test_basic(&data, require_sst(&data));
+	}
+
+	igt_describe("Verify allocated BW updates correctly when switching modes "
+		     "and returns to the same value on a low->high->low round-trip");
+	igt_subtest("modeset-bw") {
+		test_modeset_bw(&data, require_sst(&data));
+	}
+
+	igt_describe("Verify disabling a tunneled output releases its allocated BW");
+	igt_subtest("disable-bw") {
+		test_disable_bw(&data, require_sst(&data));
+	}
+
+	igt_describe("Verify tunnel state is fully restored after mem suspend/resume");
+	igt_subtest("suspend") {
+		test_suspend(&data, require_sst(&data));
+	}
+
+	igt_describe("Verify bw_limit below preferred mode's BW removes it from connector mode list "
+		     "and a lower-BW fallback can be modeseted");
+	igt_subtest("limit-fallback") {
+		test_limit_fallback(&data, require_sst(&data));
+	}
+
+	igt_describe("Verify preferred mode accepted at its exact BW threshold, "
+		     "rejected one kB/s below it, and restored after clearing the limit");
+	igt_subtest("limit-boundary") {
+		test_limit_boundary(&data, require_sst(&data));
+	}
+
+	igt_describe("Verify bw_limit is reset to 0 across suspend/resume because "
+		     "the tunnel object is destroyed and re-created");
+	igt_subtest("limit-suspend") {
+		test_limit_suspend(&data, require_sst(&data));
+	}
+
+	igt_describe("Disable BWA: tunnel stays alive with allocated BW = -1 and "
+		     "DPCD-derived link rate; re-enable BWA + fresh modeset restores "
+		     "the original allocation and link rate");
+	igt_subtest("bwa-re-enable") {
+		test_bwa_re_enable(&data, require_sst(&data));
+	}
+
+	igt_describe("Verify 10 rapid BWA disable/enable cycles do not corrupt the display");
+	igt_subtest("bwa-cycle") {
+		test_bwa_cycle(&data, require_sst(&data));
+	}
+
+	igt_describe("Verify two SST tunnels in the same USB4 group report the "
+		     "same group_free BW (estimated - allocated)");
+	igt_subtest("dual-bw-sum") {
+		require_dual_sst_same_group(&data);
+		test_dual_bw_sum(&data);
+	}
+
+	igt_describe("Verify bw_limit is per-tunnel-object, not per-group: "
+		     "with two SST tunnels in one USB4 group, a cap on tunnel A "
+		     "clips A's mode list and not B's, and B's previously-active "
+		     "mode remains in B's filtered list");
+	igt_subtest("dual-limit-isolation") {
+		require_dual_sst_same_group(&data);
+		test_dual_limit_isolation(&data);
+	}
+
+	igt_describe("Verify BWA disable on one tunnel does not affect the other "
+		     "tunnel sharing the same USB4 group BW pool");
+	igt_subtest("dual-bwa-disable") {
+		require_dual_sst_same_group(&data);
+		test_dual_bwa_disable(&data);
+	}
+
+	igt_describe("Verify two MST connectors sharing one tunnel object "
+		     "report the same per-tunnel allocated BW");
+	igt_subtest("mst-basic") {
+		require_mst_pair(&data);
+		test_mst_basic(&data);
+	}
+
+	igt_describe("Verify aggregate allocated BW does not decrease when one "
+		     "MST stream's mode is raised");
+	igt_subtest("mst-modeset-bw") {
+		require_mst_pair(&data);
+		test_mst_modeset_bw(&data);
+	}
+
+	igt_describe("Verify disabling one MST stream leaves the tunnel alive "
+		     "with positive residual BW not larger than the two-stream "
+		     "allocation");
+	igt_subtest("mst-partial-disable") {
+		require_mst_pair(&data);
+		test_mst_partial_disable(&data);
+	}
+
+	igt_describe("Verify MST tunnel survives suspend/resume; partial "
+		     "per-pipe BW re-allocation is accepted (kernel TODO)");
+	igt_subtest("mst-suspend") {
+		require_mst_pair(&data);
+		test_mst_suspend(&data);
+	}
+
+	igt_describe("Verify bw_limit on the shared MST tunnel forces both "
+		     "streams to fall back to lower-clock modes");
+	igt_subtest("mst-limit-fallback") {
+		require_mst_pair(&data);
+		test_mst_limit_fallback(&data);
+	}
+
+	igt_describe("Verify BWA re-enable + fresh modeset on an MST tunnel "
+		     "restores allocation for all active streams to the "
+		     "pre-disable value");
+	igt_subtest("mst-bwa-re-enable") {
+		require_mst_pair(&data);
+		test_mst_bwa_re_enable(&data);
+	}
+
+	igt_fixture() {
+		/*
+		 * Reset bw_limit=0 and bwa_enable=1 on all tracked tunneled
+		 * outputs before tearing down the display.  try_reset_output()
+		 * is non-asserting and guards with has_tunnel(), so it is safe
+		 * even if a connector was re-enumerated after suspend/resume.
+		 * This covers primary, dual-SST (output2), and all MST outputs.
+		 */
+		restore_all_debugfs(&data);
+		igt_display_fini(&data.display);
+		drm_close_driver(data.drm_fd);
+		data.drm_fd = -1;
+	}
+}
diff --git a/tests/meson.build b/tests/meson.build
index 60cea3aa8..1f7a1b42b 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -279,6 +279,10 @@ intel_kms_progs = [
 	'kms_sharpness_filter',
 ]
 
+if libdisplay_info.found()
+	intel_kms_progs += 'kms_tbt'
+endif
+
 intel_xe_progs = [
 	'xe_wedged',
 	'xe_ccs',
@@ -407,6 +411,7 @@ extra_sources = {
 	'kms_dsc': [ join_paths ('intel', 'kms_dsc_helper.c') ],
 	'kms_joiner': [ join_paths ('intel', 'kms_joiner_helper.c') ],
 	'kms_psr2_sf':  [ join_paths ('intel', 'kms_dsc_helper.c') ],
+	'kms_tbt': [ join_paths ('intel', 'kms_mst_helper.c') ],
 }
 
 # Extra dependencies used on core and Intel drivers
-- 
2.25.1


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

* ✓ i915.CI.BAT: success for tests/intel/kms_tbt: Add DP tunneling validation tests
  2026-05-11  5:43 [PATCH i-g-t 0/2] tests/intel/kms_tbt: Add DP tunneling validation tests Kunal Joshi
  2026-05-11  5:43 ` [PATCH i-g-t 1/2] lib/igt_connector_helper: Add DRM connector helpers using libdisplay-info Kunal Joshi
  2026-05-11  5:43 ` [PATCH i-g-t 2/2] tests/intel/kms_tbt: Add DP tunneling validation tests Kunal Joshi
@ 2026-05-12  0:14 ` Patchwork
  2026-05-12  0:50 ` ✓ Xe.CI.BAT: " Patchwork
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Patchwork @ 2026-05-12  0:14 UTC (permalink / raw)
  To: Kunal Joshi; +Cc: igt-dev

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

== Series Details ==

Series: tests/intel/kms_tbt: Add DP tunneling validation tests
URL   : https://patchwork.freedesktop.org/series/166290/
State : success

== Summary ==

CI Bug Log - changes from IGT_8903 -> IGTPW_15146
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (42 -> 40)
------------------------------

  Missing    (2): bat-dg2-13 fi-snb-2520m 

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

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

### IGT changes ###

#### Issues hit ####

  * igt@core_hotunplug@unbind-rebind:
    - bat-rpls-4:         [PASS][1] -> [DMESG-WARN][2] ([i915#13400])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8903/bat-rpls-4/igt@core_hotunplug@unbind-rebind.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/bat-rpls-4/igt@core_hotunplug@unbind-rebind.html

  
#### Possible fixes ####

  * igt@i915_selftest@live@workarounds:
    - bat-dg2-14:         [DMESG-FAIL][3] ([i915#12061]) -> [PASS][4] +1 other test pass
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8903/bat-dg2-14/igt@i915_selftest@live@workarounds.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/bat-dg2-14/igt@i915_selftest@live@workarounds.html

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


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

  * CI: CI-20190529 -> None
  * IGT: IGT_8903 -> IGTPW_15146
  * Linux: CI_DRM_18467 -> CI_DRM_18469

  CI-20190529: 20190529
  CI_DRM_18467: f8ee23694aa6be213355905a78f79bb1b0861565 @ git://anongit.freedesktop.org/gfx-ci/linux
  CI_DRM_18469: 0ce1c813197dfbe15ff14143da97ec11161e1795 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_15146: 236252b6b6e0a9533bafd592dd033d4132aa888f @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  IGT_8903: 6f88532e2fe22529195cc2f8cabff93d994688f8 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git

== Logs ==

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

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

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

* ✓ Xe.CI.BAT: success for tests/intel/kms_tbt: Add DP tunneling validation tests
  2026-05-11  5:43 [PATCH i-g-t 0/2] tests/intel/kms_tbt: Add DP tunneling validation tests Kunal Joshi
                   ` (2 preceding siblings ...)
  2026-05-12  0:14 ` ✓ i915.CI.BAT: success for " Patchwork
@ 2026-05-12  0:50 ` Patchwork
  2026-05-12  3:20 ` ✗ Xe.CI.FULL: failure " Patchwork
  2026-05-12 10:22 ` ✓ i915.CI.Full: success " Patchwork
  5 siblings, 0 replies; 7+ messages in thread
From: Patchwork @ 2026-05-12  0:50 UTC (permalink / raw)
  To: Kunal Joshi; +Cc: igt-dev

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

== Series Details ==

Series: tests/intel/kms_tbt: Add DP tunneling validation tests
URL   : https://patchwork.freedesktop.org/series/166290/
State : success

== Summary ==

CI Bug Log - changes from XEIGT_8903_BAT -> XEIGTPW_15146_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (13 -> 13)
------------------------------

  No changes in participating hosts


Changes
-------

  No changes found


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

  * IGT: IGT_8903 -> IGTPW_15146
  * Linux: xe-5041-f8ee23694aa6be213355905a78f79bb1b0861565 -> xe-5043-0ce1c813197dfbe15ff14143da97ec11161e1795

  IGTPW_15146: 236252b6b6e0a9533bafd592dd033d4132aa888f @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  IGT_8903: 6f88532e2fe22529195cc2f8cabff93d994688f8 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-5041-f8ee23694aa6be213355905a78f79bb1b0861565: f8ee23694aa6be213355905a78f79bb1b0861565
  xe-5043-0ce1c813197dfbe15ff14143da97ec11161e1795: 0ce1c813197dfbe15ff14143da97ec11161e1795

== Logs ==

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

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

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

* ✗ Xe.CI.FULL: failure for tests/intel/kms_tbt: Add DP tunneling validation tests
  2026-05-11  5:43 [PATCH i-g-t 0/2] tests/intel/kms_tbt: Add DP tunneling validation tests Kunal Joshi
                   ` (3 preceding siblings ...)
  2026-05-12  0:50 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-05-12  3:20 ` Patchwork
  2026-05-12 10:22 ` ✓ i915.CI.Full: success " Patchwork
  5 siblings, 0 replies; 7+ messages in thread
From: Patchwork @ 2026-05-12  3:20 UTC (permalink / raw)
  To: Kunal Joshi; +Cc: igt-dev

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

== Series Details ==

Series: tests/intel/kms_tbt: Add DP tunneling validation tests
URL   : https://patchwork.freedesktop.org/series/166290/
State : failure

== Summary ==

CI Bug Log - changes from XEIGT_8903_FULL -> XEIGTPW_15146_FULL
====================================================

Summary
-------

  **FAILURE**

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

### IGT changes ###

#### Possible regressions ####

  * igt@xe_exec_threads@threads-hang-rebind-err:
    - shard-bmg:          [PASS][1] -> [INCOMPLETE][2]
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-10/igt@xe_exec_threads@threads-hang-rebind-err.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-10/igt@xe_exec_threads@threads-hang-rebind-err.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@kms_big_fb@yf-tiled-64bpp-rotate-0:
    - shard-bmg:          NOTRUN -> [SKIP][3] ([Intel XE#1124]) +2 other tests skip
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-7/igt@kms_big_fb@yf-tiled-64bpp-rotate-0.html

  * igt@kms_bw@linear-tiling-1-displays-target-1920x1080p:
    - shard-bmg:          NOTRUN -> [SKIP][4] ([Intel XE#367])
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-4/igt@kms_bw@linear-tiling-1-displays-target-1920x1080p.html

  * igt@kms_ccs@bad-aux-stride-y-tiled-gen12-mc-ccs:
    - shard-bmg:          NOTRUN -> [SKIP][5] ([Intel XE#2887]) +3 other tests skip
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-9/igt@kms_ccs@bad-aux-stride-y-tiled-gen12-mc-ccs.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs:
    - shard-bmg:          [PASS][6] -> [INCOMPLETE][7] ([Intel XE#7084]) +1 other test incomplete
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-3/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-4/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-mc-ccs:
    - shard-bmg:          NOTRUN -> [SKIP][8] ([Intel XE#3432])
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-2/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-mc-ccs.html

  * igt@kms_ccs@random-ccs-data-yf-tiled-ccs:
    - shard-lnl:          NOTRUN -> [SKIP][9] ([Intel XE#2887])
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-lnl-8/igt@kms_ccs@random-ccs-data-yf-tiled-ccs.html

  * igt@kms_chamelium_hpd@dp-hpd-after-suspend:
    - shard-bmg:          NOTRUN -> [SKIP][10] ([Intel XE#2252]) +2 other tests skip
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-5/igt@kms_chamelium_hpd@dp-hpd-after-suspend.html

  * igt@kms_content_protection@legacy-hdcp14@pipe-a-dp-2:
    - shard-bmg:          NOTRUN -> [FAIL][11] ([Intel XE#1178] / [Intel XE#3304] / [Intel XE#7374])
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-4/igt@kms_content_protection@legacy-hdcp14@pipe-a-dp-2.html

  * igt@kms_content_protection@lic-type-1:
    - shard-bmg:          NOTRUN -> [SKIP][12] ([Intel XE#7642])
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-8/igt@kms_content_protection@lic-type-1.html

  * igt@kms_cursor_crc@cursor-onscreen-32x32:
    - shard-bmg:          NOTRUN -> [SKIP][13] ([Intel XE#2320]) +1 other test skip
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-10/igt@kms_cursor_crc@cursor-onscreen-32x32.html

  * igt@kms_dp_link_training@non-uhbr-mst:
    - shard-bmg:          NOTRUN -> [SKIP][14] ([Intel XE#4354] / [Intel XE#5882])
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-1/igt@kms_dp_link_training@non-uhbr-mst.html

  * igt@kms_dsc@dsc-fractional-bpp:
    - shard-bmg:          NOTRUN -> [SKIP][15] ([Intel XE#2244])
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-10/igt@kms_dsc@dsc-fractional-bpp.html

  * igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-dirtyfb-tests:
    - shard-bmg:          NOTRUN -> [SKIP][16] ([Intel XE#4422] / [Intel XE#7442])
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-5/igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-dirtyfb-tests.html

  * igt@kms_fbcon_fbt@psr-suspend:
    - shard-bmg:          NOTRUN -> [SKIP][17] ([Intel XE#6126] / [Intel XE#776])
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-9/igt@kms_fbcon_fbt@psr-suspend.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ab-dp2-hdmi-a3:
    - shard-bmg:          [PASS][18] -> [FAIL][19] ([Intel XE#3321])
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ab-dp2-hdmi-a3.html
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-1/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ab-dp2-hdmi-a3.html

  * igt@kms_flip@flip-vs-expired-vblank@a-edp1:
    - shard-lnl:          NOTRUN -> [FAIL][20] ([Intel XE#301]) +1 other test fail
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-lnl-5/igt@kms_flip@flip-vs-expired-vblank@a-edp1.html

  * igt@kms_flip@flip-vs-expired-vblank@c-dp2:
    - shard-bmg:          NOTRUN -> [FAIL][21] ([Intel XE#3321]) +1 other test fail
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-4/igt@kms_flip@flip-vs-expired-vblank@c-dp2.html

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-downscaling:
    - shard-bmg:          NOTRUN -> [SKIP][22] ([Intel XE#7178] / [Intel XE#7351])
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-4/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-downscaling.html

  * igt@kms_frontbuffer_tracking@drrs-1p-offscreen-pri-shrfb-draw-blt:
    - shard-lnl:          NOTRUN -> [SKIP][23] ([Intel XE#6312]) +1 other test skip
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-lnl-7/igt@kms_frontbuffer_tracking@drrs-1p-offscreen-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-fullscreen:
    - shard-bmg:          NOTRUN -> [SKIP][24] ([Intel XE#2311]) +17 other tests skip
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-4/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-fullscreen.html

  * igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-mmap-wc:
    - shard-lnl:          NOTRUN -> [SKIP][25] ([Intel XE#656] / [Intel XE#7905])
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-lnl-4/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-shrfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-pgflip-blt:
    - shard-bmg:          NOTRUN -> [SKIP][26] ([Intel XE#4141]) +5 other tests skip
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-4/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcdrrshdr-abgr161616f-draw-mmap-wc:
    - shard-bmg:          NOTRUN -> [SKIP][27] ([Intel XE#7061])
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-8/igt@kms_frontbuffer_tracking@fbcdrrshdr-abgr161616f-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbchdr-2p-scndscrn-shrfb-msflip-blt:
    - shard-lnl:          NOTRUN -> [SKIP][28] ([Intel XE#7905]) +1 other test skip
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-lnl-7/igt@kms_frontbuffer_tracking@fbchdr-2p-scndscrn-shrfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-indfb-plflip-blt:
    - shard-bmg:          NOTRUN -> [SKIP][29] ([Intel XE#2313]) +14 other tests skip
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-1/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-indfb-plflip-blt.html

  * igt@kms_joiner@invalid-modeset-big-joiner:
    - shard-bmg:          NOTRUN -> [SKIP][30] ([Intel XE#6901])
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-9/igt@kms_joiner@invalid-modeset-big-joiner.html

  * igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-cc-modifier:
    - shard-bmg:          NOTRUN -> [SKIP][31] ([Intel XE#7283])
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-1/igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-cc-modifier.html
    - shard-lnl:          NOTRUN -> [SKIP][32] ([Intel XE#7283])
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-lnl-7/igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-cc-modifier.html

  * igt@kms_plane_cursor@overlay@pipe-c-dp-2-size-128:
    - shard-bmg:          [PASS][33] -> [ABORT][34] ([Intel XE#7814]) +1 other test abort
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-3/igt@kms_plane_cursor@overlay@pipe-c-dp-2-size-128.html
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-4/igt@kms_plane_cursor@overlay@pipe-c-dp-2-size-128.html

  * igt@kms_plane_cursor@overlay@pipe-c-dp-2-size-256:
    - shard-bmg:          [PASS][35] -> [DMESG-WARN][36] ([Intel XE#7814]) +3 other tests dmesg-warn
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-3/igt@kms_plane_cursor@overlay@pipe-c-dp-2-size-256.html
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-4/igt@kms_plane_cursor@overlay@pipe-c-dp-2-size-256.html

  * igt@kms_plane_multiple@2x-tiling-y:
    - shard-bmg:          NOTRUN -> [SKIP][37] ([Intel XE#5021] / [Intel XE#7377])
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-9/igt@kms_plane_multiple@2x-tiling-y.html

  * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-5@pipe-b:
    - shard-bmg:          NOTRUN -> [SKIP][38] ([Intel XE#2763] / [Intel XE#6886]) +4 other tests skip
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-8/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-5@pipe-b.html

  * igt@kms_pm_dc@dc5-psr:
    - shard-lnl:          [PASS][39] -> [FAIL][40] ([Intel XE#7340])
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-lnl-1/igt@kms_pm_dc@dc5-psr.html
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-lnl-3/igt@kms_pm_dc@dc5-psr.html

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

  * igt@kms_pm_dc@deep-pkgc:
    - shard-lnl:          [PASS][42] -> [FAIL][43] ([Intel XE#2029] / [Intel XE#7395])
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-lnl-3/igt@kms_pm_dc@deep-pkgc.html
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-lnl-7/igt@kms_pm_dc@deep-pkgc.html

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

  * igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-fully-sf:
    - shard-bmg:          NOTRUN -> [SKIP][45] ([Intel XE#1489]) +1 other test skip
   [45]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-10/igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr@fbc-psr-primary-page-flip:
    - shard-bmg:          NOTRUN -> [SKIP][46] ([Intel XE#2234] / [Intel XE#2850]) +2 other tests skip
   [46]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-9/igt@kms_psr@fbc-psr-primary-page-flip.html

  * igt@kms_psr@psr2-primary-render:
    - shard-bmg:          NOTRUN -> [SKIP][47] ([Intel XE#2234])
   [47]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-1/igt@kms_psr@psr2-primary-render.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
    - shard-bmg:          NOTRUN -> [SKIP][48] ([Intel XE#2330] / [Intel XE#5813])
   [48]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-1/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html

  * igt@kms_sharpness_filter@filter-suspend:
    - shard-bmg:          NOTRUN -> [SKIP][49] ([Intel XE#6503])
   [49]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-10/igt@kms_sharpness_filter@filter-suspend.html

  * igt@kms_vrr@max-min:
    - shard-bmg:          NOTRUN -> [SKIP][50] ([Intel XE#1499]) +1 other test skip
   [50]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-2/igt@kms_vrr@max-min.html

  * igt@xe_eudebug_online@resume-one:
    - shard-bmg:          NOTRUN -> [SKIP][51] ([Intel XE#7636]) +2 other tests skip
   [51]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-3/igt@xe_eudebug_online@resume-one.html

  * igt@xe_evict@evict-mixed-many-threads-small:
    - shard-bmg:          [PASS][52] -> [INCOMPLETE][53] ([Intel XE#6321]) +1 other test incomplete
   [52]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-3/igt@xe_evict@evict-mixed-many-threads-small.html
   [53]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-7/igt@xe_evict@evict-mixed-many-threads-small.html

  * igt@xe_evict@evict-mixed-threads-small-multi-vm:
    - shard-lnl:          NOTRUN -> [SKIP][54] ([Intel XE#6540] / [Intel XE#688])
   [54]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-lnl-3/igt@xe_evict@evict-mixed-threads-small-multi-vm.html

  * igt@xe_exec_basic@multigpu-no-exec-bindexecqueue-userptr:
    - shard-bmg:          NOTRUN -> [SKIP][55] ([Intel XE#2322] / [Intel XE#7372]) +2 other tests skip
   [55]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-7/igt@xe_exec_basic@multigpu-no-exec-bindexecqueue-userptr.html

  * igt@xe_exec_fault_mode@twice-multi-queue-rebind-prefetch:
    - shard-bmg:          NOTRUN -> [SKIP][56] ([Intel XE#7136]) +2 other tests skip
   [56]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-6/igt@xe_exec_fault_mode@twice-multi-queue-rebind-prefetch.html

  * igt@xe_exec_multi_queue@few-execs-preempt-mode-fault-basic:
    - shard-bmg:          NOTRUN -> [SKIP][57] ([Intel XE#6874]) +7 other tests skip
   [57]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-6/igt@xe_exec_multi_queue@few-execs-preempt-mode-fault-basic.html

  * igt@xe_exec_threads@threads-multi-queue-mixed-userptr-rebind:
    - shard-bmg:          NOTRUN -> [SKIP][58] ([Intel XE#7138])
   [58]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-6/igt@xe_exec_threads@threads-multi-queue-mixed-userptr-rebind.html

  * igt@xe_multigpu_svm@mgpu-coherency-basic:
    - shard-bmg:          NOTRUN -> [SKIP][59] ([Intel XE#6964])
   [59]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-9/igt@xe_multigpu_svm@mgpu-coherency-basic.html

  * igt@xe_pat@pat-index-xelp:
    - shard-bmg:          NOTRUN -> [SKIP][60] ([Intel XE#2245] / [Intel XE#7590])
   [60]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-2/igt@xe_pat@pat-index-xelp.html

  * igt@xe_pm@d3cold-i2c:
    - shard-bmg:          NOTRUN -> [SKIP][61] ([Intel XE#5694] / [Intel XE#7370])
   [61]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-6/igt@xe_pm@d3cold-i2c.html

  * igt@xe_pm@d3cold-mmap-system:
    - shard-bmg:          NOTRUN -> [SKIP][62] ([Intel XE#2284] / [Intel XE#7370])
   [62]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-5/igt@xe_pm@d3cold-mmap-system.html

  * igt@xe_pxp@regular-src-to-pxp-dest-rendercopy:
    - shard-bmg:          NOTRUN -> [SKIP][63] ([Intel XE#4733] / [Intel XE#7417])
   [63]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-9/igt@xe_pxp@regular-src-to-pxp-dest-rendercopy.html

  * igt@xe_sriov_flr@flr-twice:
    - shard-bmg:          [PASS][64] -> [FAIL][65] ([Intel XE#6569])
   [64]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-4/igt@xe_sriov_flr@flr-twice.html
   [65]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-7/igt@xe_sriov_flr@flr-twice.html

  * igt@xe_survivability@runtime-survivability:
    - shard-bmg:          [PASS][66] -> [DMESG-WARN][67] ([Intel XE#6627] / [Intel XE#7419])
   [66]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@xe_survivability@runtime-survivability.html
   [67]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-1/igt@xe_survivability@runtime-survivability.html

  
#### Possible fixes ####

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bc-dp2-hdmi-a3:
    - shard-bmg:          [DMESG-FAIL][68] ([Intel XE#5545]) -> [PASS][69]
   [68]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bc-dp2-hdmi-a3.html
   [69]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-1/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bc-dp2-hdmi-a3.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1:
    - shard-lnl:          [FAIL][70] ([Intel XE#301]) -> [PASS][71] +1 other test pass
   [70]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-lnl-2/igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1.html
   [71]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-lnl-1/igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1.html

  * igt@kms_hdmi_inject@inject-audio:
    - shard-bmg:          [SKIP][72] ([Intel XE#7308]) -> [PASS][73]
   [72]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-9/igt@kms_hdmi_inject@inject-audio.html
   [73]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-7/igt@kms_hdmi_inject@inject-audio.html

  * igt@kms_hdr@invalid-hdr:
    - shard-bmg:          [SKIP][74] ([Intel XE#1503]) -> [PASS][75]
   [74]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-10/igt@kms_hdr@invalid-hdr.html
   [75]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-7/igt@kms_hdr@invalid-hdr.html

  * igt@kms_hdr@invalid-hdr@pipe-a-hdmi-a-3-xrgb2101010:
    - shard-bmg:          [SKIP][76] ([Intel XE#7922]) -> [PASS][77] +1 other test pass
   [76]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-10/igt@kms_hdr@invalid-hdr@pipe-a-hdmi-a-3-xrgb2101010.html
   [77]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-7/igt@kms_hdr@invalid-hdr@pipe-a-hdmi-a-3-xrgb2101010.html

  * igt@kms_pm_dc@dc6-psr:
    - shard-lnl:          [FAIL][78] ([Intel XE#7340]) -> [PASS][79]
   [78]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-lnl-2/igt@kms_pm_dc@dc6-psr.html
   [79]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-lnl-7/igt@kms_pm_dc@dc6-psr.html

  * igt@kms_psr_stress_test@invalidate-primary-flip-overlay:
    - shard-lnl:          [SKIP][80] ([Intel XE#4692] / [Intel XE#7508]) -> [PASS][81]
   [80]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-lnl-7/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html
   [81]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-lnl-4/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html

  * igt@kms_vrr@seamless-rr-switch-virtual@pipe-a-edp-1:
    - shard-lnl:          [FAIL][82] ([Intel XE#2142]) -> [PASS][83] +1 other test pass
   [82]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-lnl-7/igt@kms_vrr@seamless-rr-switch-virtual@pipe-a-edp-1.html
   [83]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-lnl-7/igt@kms_vrr@seamless-rr-switch-virtual@pipe-a-edp-1.html

  * igt@xe_copy_basic@mem-page-copy-17:
    - shard-lnl:          [ABORT][84] -> [PASS][85]
   [84]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-lnl-2/igt@xe_copy_basic@mem-page-copy-17.html
   [85]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-lnl-8/igt@xe_copy_basic@mem-page-copy-17.html

  * igt@xe_sriov_admin@sched-priority-vf-write-denied:
    - shard-bmg:          [SKIP][86] ([Intel XE#6703]) -> [PASS][87] +120 other tests pass
   [86]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@xe_sriov_admin@sched-priority-vf-write-denied.html
   [87]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-6/igt@xe_sriov_admin@sched-priority-vf-write-denied.html

  * igt@xe_sriov_auto_provisioning@selfconfig-reprovision-increase-numvfs@vf-random:
    - shard-bmg:          [FAIL][88] ([Intel XE#5937]) -> [PASS][89] +1 other test pass
   [88]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-10/igt@xe_sriov_auto_provisioning@selfconfig-reprovision-increase-numvfs@vf-random.html
   [89]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-7/igt@xe_sriov_auto_provisioning@selfconfig-reprovision-increase-numvfs@vf-random.html

  
#### Warnings ####

  * igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-0-hflip:
    - shard-bmg:          [SKIP][90] ([Intel XE#6703]) -> [SKIP][91] ([Intel XE#7059] / [Intel XE#7085])
   [90]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-0-hflip.html
   [91]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-1/igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-0-hflip.html

  * igt@kms_big_fb@y-tiled-8bpp-rotate-270:
    - shard-bmg:          [SKIP][92] ([Intel XE#6703]) -> [SKIP][93] ([Intel XE#1124]) +2 other tests skip
   [92]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@kms_big_fb@y-tiled-8bpp-rotate-270.html
   [93]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-3/igt@kms_big_fb@y-tiled-8bpp-rotate-270.html

  * igt@kms_bw@linear-tiling-3-displays-target-1920x1080p:
    - shard-bmg:          [SKIP][94] ([Intel XE#6703]) -> [SKIP][95] ([Intel XE#367])
   [94]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@kms_bw@linear-tiling-3-displays-target-1920x1080p.html
   [95]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-1/igt@kms_bw@linear-tiling-3-displays-target-1920x1080p.html

  * igt@kms_ccs@bad-pixel-format-4-tiled-mtl-rc-ccs-cc:
    - shard-bmg:          [SKIP][96] ([Intel XE#6703]) -> [SKIP][97] ([Intel XE#2887]) +1 other test skip
   [96]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@kms_ccs@bad-pixel-format-4-tiled-mtl-rc-ccs-cc.html
   [97]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-8/igt@kms_ccs@bad-pixel-format-4-tiled-mtl-rc-ccs-cc.html

  * igt@kms_chamelium_color@ctm-0-25:
    - shard-bmg:          [SKIP][98] ([Intel XE#6703]) -> [SKIP][99] ([Intel XE#2325] / [Intel XE#7358]) +1 other test skip
   [98]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@kms_chamelium_color@ctm-0-25.html
   [99]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-5/igt@kms_chamelium_color@ctm-0-25.html

  * igt@kms_chamelium_frames@hdmi-crc-single:
    - shard-bmg:          [SKIP][100] ([Intel XE#6703]) -> [SKIP][101] ([Intel XE#2252])
   [100]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@kms_chamelium_frames@hdmi-crc-single.html
   [101]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-4/igt@kms_chamelium_frames@hdmi-crc-single.html

  * igt@kms_content_protection@legacy-hdcp14:
    - shard-bmg:          [SKIP][102] ([Intel XE#6703]) -> [FAIL][103] ([Intel XE#1178] / [Intel XE#3304] / [Intel XE#7374])
   [102]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@kms_content_protection@legacy-hdcp14.html
   [103]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-4/igt@kms_content_protection@legacy-hdcp14.html

  * igt@kms_cursor_crc@cursor-onscreen-32x10:
    - shard-bmg:          [SKIP][104] ([Intel XE#6703]) -> [SKIP][105] ([Intel XE#2320])
   [104]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@kms_cursor_crc@cursor-onscreen-32x10.html
   [105]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-7/igt@kms_cursor_crc@cursor-onscreen-32x10.html

  * igt@kms_dirtyfb@fbc-dirtyfb-ioctl:
    - shard-bmg:          [SKIP][106] ([Intel XE#6703]) -> [SKIP][107] ([Intel XE#4210] / [Intel XE#7467])
   [106]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@kms_dirtyfb@fbc-dirtyfb-ioctl.html
   [107]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-8/igt@kms_dirtyfb@fbc-dirtyfb-ioctl.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible:
    - shard-bmg:          [DMESG-FAIL][108] ([Intel XE#5545]) -> [FAIL][109] ([Intel XE#3321])
   [108]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html
   [109]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-1/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-render:
    - shard-bmg:          [SKIP][110] ([Intel XE#6703]) -> [SKIP][111] ([Intel XE#4141]) +1 other test skip
   [110]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-render.html
   [111]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-10/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbc-abgr161616f-draw-render:
    - shard-bmg:          [SKIP][112] ([Intel XE#6703]) -> [SKIP][113] ([Intel XE#7061] / [Intel XE#7356])
   [112]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@kms_frontbuffer_tracking@fbc-abgr161616f-draw-render.html
   [113]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-8/igt@kms_frontbuffer_tracking@fbc-abgr161616f-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-move:
    - shard-bmg:          [SKIP][114] ([Intel XE#6703]) -> [SKIP][115] ([Intel XE#2311]) +11 other tests skip
   [114]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-move.html
   [115]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-3/igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-move.html

  * igt@kms_frontbuffer_tracking@hdr-argb161616f-draw-blt:
    - shard-bmg:          [SKIP][116] ([Intel XE#6703]) -> [SKIP][117] ([Intel XE#7061]) +2 other tests skip
   [116]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@kms_frontbuffer_tracking@hdr-argb161616f-draw-blt.html
   [117]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-2/igt@kms_frontbuffer_tracking@hdr-argb161616f-draw-blt.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-blt:
    - shard-bmg:          [SKIP][118] ([Intel XE#6703]) -> [SKIP][119] ([Intel XE#2313]) +9 other tests skip
   [118]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-blt.html
   [119]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-3/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-blt.html

  * igt@kms_hdr@brightness-with-hdr:
    - shard-bmg:          [SKIP][120] ([Intel XE#3544] / [Intel XE#7916]) -> [SKIP][121] ([Intel XE#3544] / [Intel XE#7915] / [Intel XE#7916])
   [120]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-9/igt@kms_hdr@brightness-with-hdr.html
   [121]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-1/igt@kms_hdr@brightness-with-hdr.html

  * igt@kms_hdr@brightness-with-hdr@pipe-a-hdmi-a-3-xrgb16161616f:
    - shard-bmg:          [SKIP][122] ([Intel XE#7916]) -> [SKIP][123] ([Intel XE#7915]) +1 other test skip
   [122]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-9/igt@kms_hdr@brightness-with-hdr@pipe-a-hdmi-a-3-xrgb16161616f.html
   [123]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-1/igt@kms_hdr@brightness-with-hdr@pipe-a-hdmi-a-3-xrgb16161616f.html

  * igt@kms_plane@pixel-format-y-tiled-ccs-modifier-source-clamping:
    - shard-bmg:          [SKIP][124] ([Intel XE#6703]) -> [SKIP][125] ([Intel XE#7283])
   [124]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@kms_plane@pixel-format-y-tiled-ccs-modifier-source-clamping.html
   [125]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-9/igt@kms_plane@pixel-format-y-tiled-ccs-modifier-source-clamping.html

  * igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area:
    - shard-bmg:          [SKIP][126] ([Intel XE#6703]) -> [SKIP][127] ([Intel XE#1489]) +1 other test skip
   [126]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area.html
   [127]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-9/igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area.html

  * igt@kms_psr@psr-basic:
    - shard-bmg:          [SKIP][128] ([Intel XE#6703]) -> [SKIP][129] ([Intel XE#2234] / [Intel XE#2850]) +2 other tests skip
   [128]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@kms_psr@psr-basic.html
   [129]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-5/igt@kms_psr@psr-basic.html

  * igt@kms_sharpness_filter@filter-scaler-upscale:
    - shard-bmg:          [SKIP][130] ([Intel XE#6703]) -> [SKIP][131] ([Intel XE#6503])
   [130]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@kms_sharpness_filter@filter-scaler-upscale.html
   [131]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-5/igt@kms_sharpness_filter@filter-scaler-upscale.html

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-bmg:          [SKIP][132] ([Intel XE#2426] / [Intel XE#5848]) -> [FAIL][133] ([Intel XE#1729] / [Intel XE#7424])
   [132]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-1/igt@kms_tiled_display@basic-test-pattern.html
   [133]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-2/igt@kms_tiled_display@basic-test-pattern.html

  * igt@xe_eudebug_online@writes-caching-vram-bb-vram-target-vram:
    - shard-bmg:          [SKIP][134] ([Intel XE#6703]) -> [SKIP][135] ([Intel XE#7636]) +3 other tests skip
   [134]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@xe_eudebug_online@writes-caching-vram-bb-vram-target-vram.html
   [135]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-8/igt@xe_eudebug_online@writes-caching-vram-bb-vram-target-vram.html

  * igt@xe_exec_basic@multigpu-no-exec-basic-defer-bind:
    - shard-bmg:          [SKIP][136] ([Intel XE#6703]) -> [SKIP][137] ([Intel XE#2322] / [Intel XE#7372]) +2 other tests skip
   [136]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@xe_exec_basic@multigpu-no-exec-basic-defer-bind.html
   [137]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-4/igt@xe_exec_basic@multigpu-no-exec-basic-defer-bind.html

  * igt@xe_exec_fault_mode@once-multi-queue-userptr-rebind:
    - shard-bmg:          [SKIP][138] ([Intel XE#6703]) -> [SKIP][139] ([Intel XE#7136])
   [138]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@xe_exec_fault_mode@once-multi-queue-userptr-rebind.html
   [139]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-6/igt@xe_exec_fault_mode@once-multi-queue-userptr-rebind.html

  * igt@xe_exec_multi_queue@few-execs-preempt-mode-dyn-priority:
    - shard-bmg:          [SKIP][140] ([Intel XE#6703]) -> [SKIP][141] ([Intel XE#6874]) +7 other tests skip
   [140]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@xe_exec_multi_queue@few-execs-preempt-mode-dyn-priority.html
   [141]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-8/igt@xe_exec_multi_queue@few-execs-preempt-mode-dyn-priority.html

  * igt@xe_exec_threads@threads-multi-queue-cm-fd-userptr:
    - shard-bmg:          [SKIP][142] ([Intel XE#6703]) -> [SKIP][143] ([Intel XE#7138]) +2 other tests skip
   [142]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@xe_exec_threads@threads-multi-queue-cm-fd-userptr.html
   [143]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-6/igt@xe_exec_threads@threads-multi-queue-cm-fd-userptr.html

  * igt@xe_page_reclaim@binds-1g-partial:
    - shard-bmg:          [SKIP][144] ([Intel XE#6703]) -> [SKIP][145] ([Intel XE#7793])
   [144]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@xe_page_reclaim@binds-1g-partial.html
   [145]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-9/igt@xe_page_reclaim@binds-1g-partial.html

  * igt@xe_pm@d3cold-mmap-vram:
    - shard-bmg:          [SKIP][146] ([Intel XE#6703]) -> [SKIP][147] ([Intel XE#2284] / [Intel XE#7370])
   [146]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@xe_pm@d3cold-mmap-vram.html
   [147]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-4/igt@xe_pm@d3cold-mmap-vram.html

  * igt@xe_query@multigpu-query-topology:
    - shard-bmg:          [SKIP][148] ([Intel XE#6703]) -> [SKIP][149] ([Intel XE#944])
   [148]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8903/shard-bmg-2/igt@xe_query@multigpu-query-topology.html
   [149]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_15146/shard-bmg-1/igt@xe_query@multigpu-query-topology.html

  
  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
  [Intel XE#1439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1439
  [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#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
  [Intel XE#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
  [Intel XE#2029]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2029
  [Intel XE#2142]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2142
  [Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
  [Intel XE#2244]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2244
  [Intel XE#2245]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2245
  [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#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#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
  [Intel XE#2325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2325
  [Intel XE#2330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2330
  [Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
  [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#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
  [Intel XE#3141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3141
  [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#3321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3321
  [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#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
  [Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
  [Intel XE#4210]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4210
  [Intel XE#4354]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4354
  [Intel XE#4422]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4422
  [Intel XE#4692]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4692
  [Intel XE#4733]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4733
  [Intel XE#5021]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5021
  [Intel XE#5545]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5545
  [Intel XE#5694]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5694
  [Intel XE#5813]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5813
  [Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
  [Intel XE#5882]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5882
  [Intel XE#5937]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5937
  [Intel XE#6126]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6126
  [Intel XE#6312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6312
  [Intel XE#6321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6321
  [Intel XE#6503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6503
  [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#6569]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6569
  [Intel XE#6627]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6627
  [Intel XE#6703]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6703
  [Intel XE#6874]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6874
  [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#6901]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6901
  [Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
  [Intel XE#7059]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7059
  [Intel XE#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
  [Intel XE#7084]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7084
  [Intel XE#7085]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7085
  [Intel XE#7136]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7136
  [Intel XE#7138]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7138
  [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#7308]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7308
  [Intel XE#7340]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7340
  [Intel XE#7351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7351
  [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#7368]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7368
  [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#7377]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7377
  [Intel XE#7383]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7383
  [Intel XE#7395]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7395
  [Intel XE#7417]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7417
  [Intel XE#7419]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7419
  [Intel XE#7424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7424
  [Intel XE#7442]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7442
  [Intel XE#7467]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7467
  [Intel XE#7508]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7508
  [Intel XE#7590]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7590
  [Intel XE#7636]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7636
  [Intel XE#7642]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7642
  [Intel XE#776]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/776
  [Intel XE#7793]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7793
  [Intel XE#7814]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7814
  [Intel XE#7905]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7905
  [Intel XE#7915]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7915
  [Intel XE#7916]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7916
  [Intel XE#7922]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7922
  [Intel XE#836]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/836
  [Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944


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

  * IGT: IGT_8903 -> IGTPW_15146
  * Linux: xe-5041-f8ee23694aa6be213355905a78f79bb1b0861565 -> xe-5043-0ce1c813197dfbe15ff14143da97ec11161e1795

  IGTPW_15146: 236252b6b6e0a9533bafd592dd033d4132aa888f @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  IGT_8903: 6f88532e2fe22529195cc2f8cabff93d994688f8 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-5041-f8ee23694aa6be213355905a78f79bb1b0861565: f8ee23694aa6be213355905a78f79bb1b0861565
  xe-5043-0ce1c813197dfbe15ff14143da97ec11161e1795: 0ce1c813197dfbe15ff14143da97ec11161e1795

== Logs ==

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

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

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

* ✓ i915.CI.Full: success for tests/intel/kms_tbt: Add DP tunneling validation tests
  2026-05-11  5:43 [PATCH i-g-t 0/2] tests/intel/kms_tbt: Add DP tunneling validation tests Kunal Joshi
                   ` (4 preceding siblings ...)
  2026-05-12  3:20 ` ✗ Xe.CI.FULL: failure " Patchwork
@ 2026-05-12 10:22 ` Patchwork
  5 siblings, 0 replies; 7+ messages in thread
From: Patchwork @ 2026-05-12 10:22 UTC (permalink / raw)
  To: Kunal Joshi; +Cc: igt-dev

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

== Series Details ==

Series: tests/intel/kms_tbt: Add DP tunneling validation tests
URL   : https://patchwork.freedesktop.org/series/166290/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_18469_full -> IGTPW_15146_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

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

  No changes in participating hosts

New tests
---------

  New tests have been introduced between CI_DRM_18469_full and IGTPW_15146_full:

### New IGT tests (4) ###

  * igt@kms_async_flips@async-flip-with-page-flip-events-linear@pipe-a-dp-3:
    - Statuses : 1 pass(s)
    - Exec time: [2.30] s

  * igt@kms_async_flips@async-flip-with-page-flip-events-linear@pipe-b-dp-3:
    - Statuses : 1 pass(s)
    - Exec time: [2.12] s

  * igt@kms_async_flips@async-flip-with-page-flip-events-linear@pipe-c-dp-3:
    - Statuses : 1 pass(s)
    - Exec time: [2.12] s

  * igt@kms_async_flips@async-flip-with-page-flip-events-linear@pipe-d-dp-3:
    - Statuses : 1 pass(s)
    - Exec time: [2.12] s

  

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

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

### IGT changes ###

#### Issues hit ####

  * igt@api_intel_bb@blit-reloc-purge-cache:
    - shard-rkl:          NOTRUN -> [SKIP][1] ([i915#14544] / [i915#8411])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@api_intel_bb@blit-reloc-purge-cache.html

  * igt@gem_busy@semaphore:
    - shard-dg2:          NOTRUN -> [SKIP][2] ([i915#3936])
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-1/igt@gem_busy@semaphore.html

  * igt@gem_ccs@block-multicopy-inplace:
    - shard-tglu-1:       NOTRUN -> [SKIP][3] ([i915#3555] / [i915#9323])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@gem_ccs@block-multicopy-inplace.html

  * igt@gem_ccs@ctrl-surf-copy:
    - shard-rkl:          NOTRUN -> [SKIP][4] ([i915#3555] / [i915#9323])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-8/igt@gem_ccs@ctrl-surf-copy.html

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

  * igt@gem_ccs@suspend-resume:
    - shard-tglu-1:       NOTRUN -> [SKIP][6] ([i915#9323]) +1 other test skip
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@gem_ccs@suspend-resume.html

  * igt@gem_close_race@multigpu-basic-process:
    - shard-rkl:          NOTRUN -> [SKIP][7] ([i915#7697])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-8/igt@gem_close_race@multigpu-basic-process.html

  * igt@gem_ctx_isolation@preservation-s3@rcs0:
    - shard-glk:          NOTRUN -> [INCOMPLETE][8] ([i915#13356]) +1 other test incomplete
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk1/igt@gem_ctx_isolation@preservation-s3@rcs0.html

  * igt@gem_ctx_persistence@processes:
    - shard-snb:          NOTRUN -> [SKIP][9] ([i915#1099])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-snb6/igt@gem_ctx_persistence@processes.html

  * igt@gem_ctx_persistence@saturated-hostile-nopreempt:
    - shard-dg2:          NOTRUN -> [SKIP][10] ([i915#5882]) +7 other tests skip
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-3/igt@gem_ctx_persistence@saturated-hostile-nopreempt.html

  * igt@gem_ctx_persistence@saturated-hostile-nopreempt@vcs1:
    - shard-mtlp:         NOTRUN -> [SKIP][11] ([i915#5882]) +6 other tests skip
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-2/igt@gem_ctx_persistence@saturated-hostile-nopreempt@vcs1.html

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

  * igt@gem_exec_balancer@bonded-true-hang:
    - shard-dg2:          NOTRUN -> [SKIP][13] ([i915#4812]) +1 other test skip
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-8/igt@gem_exec_balancer@bonded-true-hang.html
    - shard-dg1:          NOTRUN -> [SKIP][14] ([i915#4812]) +1 other test skip
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-17/igt@gem_exec_balancer@bonded-true-hang.html
    - shard-mtlp:         NOTRUN -> [SKIP][15] ([i915#4812])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-7/igt@gem_exec_balancer@bonded-true-hang.html

  * igt@gem_exec_balancer@invalid-bonds:
    - shard-dg2:          NOTRUN -> [SKIP][16] ([i915#4036])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-8/igt@gem_exec_balancer@invalid-bonds.html
    - shard-dg1:          NOTRUN -> [SKIP][17] ([i915#4036])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-17/igt@gem_exec_balancer@invalid-bonds.html
    - shard-mtlp:         NOTRUN -> [SKIP][18] ([i915#4036])
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-2/igt@gem_exec_balancer@invalid-bonds.html

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

  * igt@gem_exec_balancer@parallel-ordering:
    - shard-rkl:          NOTRUN -> [SKIP][20] ([i915#4525])
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-8/igt@gem_exec_balancer@parallel-ordering.html
    - shard-tglu:         NOTRUN -> [SKIP][21] ([i915#4525])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-10/igt@gem_exec_balancer@parallel-ordering.html

  * igt@gem_exec_big@single:
    - shard-tglu-1:       NOTRUN -> [FAIL][22] ([i915#15816])
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@gem_exec_big@single.html
    - shard-mtlp:         [PASS][23] -> [FAIL][24] ([i915#15871])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-mtlp-2/igt@gem_exec_big@single.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-3/igt@gem_exec_big@single.html

  * igt@gem_exec_flush@basic-wb-pro-default:
    - shard-dg2:          NOTRUN -> [SKIP][25] ([i915#3539] / [i915#4852])
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-1/igt@gem_exec_flush@basic-wb-pro-default.html

  * igt@gem_exec_reloc@basic-gtt-wc-active:
    - shard-rkl:          NOTRUN -> [SKIP][26] ([i915#14544] / [i915#3281])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@gem_exec_reloc@basic-gtt-wc-active.html

  * igt@gem_exec_reloc@basic-range:
    - shard-mtlp:         NOTRUN -> [SKIP][27] ([i915#3281]) +3 other tests skip
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-4/igt@gem_exec_reloc@basic-range.html

  * igt@gem_exec_reloc@basic-wc:
    - shard-dg2:          NOTRUN -> [SKIP][28] ([i915#3281]) +7 other tests skip
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-6/igt@gem_exec_reloc@basic-wc.html

  * igt@gem_exec_reloc@basic-write-cpu-active:
    - shard-dg1:          NOTRUN -> [SKIP][29] ([i915#3281]) +5 other tests skip
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-14/igt@gem_exec_reloc@basic-write-cpu-active.html

  * igt@gem_exec_reloc@basic-write-read-noreloc:
    - shard-rkl:          NOTRUN -> [SKIP][30] ([i915#3281]) +8 other tests skip
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-7/igt@gem_exec_reloc@basic-write-read-noreloc.html

  * igt@gem_exec_schedule@preempt-queue-contexts-chain:
    - shard-dg2:          NOTRUN -> [SKIP][31] ([i915#4537] / [i915#4812]) +1 other test skip
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-4/igt@gem_exec_schedule@preempt-queue-contexts-chain.html
    - shard-mtlp:         NOTRUN -> [SKIP][32] ([i915#4537] / [i915#4812])
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-4/igt@gem_exec_schedule@preempt-queue-contexts-chain.html

  * igt@gem_exec_suspend@basic-s0:
    - shard-dg2:          [PASS][33] -> [INCOMPLETE][34] ([i915#13356]) +2 other tests incomplete
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg2-1/igt@gem_exec_suspend@basic-s0.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-5/igt@gem_exec_suspend@basic-s0.html

  * igt@gem_fence_thrash@bo-write-verify-threaded-none:
    - shard-dg2:          NOTRUN -> [SKIP][35] ([i915#4860])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-1/igt@gem_fence_thrash@bo-write-verify-threaded-none.html

  * igt@gem_huc_copy@huc-copy:
    - shard-glk:          NOTRUN -> [SKIP][36] ([i915#2190])
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk2/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@heavy-verify-random:
    - shard-rkl:          NOTRUN -> [SKIP][37] ([i915#4613]) +1 other test skip
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-2/igt@gem_lmem_swapping@heavy-verify-random.html
    - shard-tglu:         NOTRUN -> [SKIP][38] ([i915#4613])
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-5/igt@gem_lmem_swapping@heavy-verify-random.html
    - shard-mtlp:         NOTRUN -> [SKIP][39] ([i915#4613])
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-4/igt@gem_lmem_swapping@heavy-verify-random.html

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

  * igt@gem_lmem_swapping@random-engines:
    - shard-glk:          NOTRUN -> [SKIP][41] ([i915#4613]) +4 other tests skip
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk8/igt@gem_lmem_swapping@random-engines.html

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

  * igt@gem_madvise@dontneed-before-pwrite:
    - shard-dg2:          NOTRUN -> [SKIP][43] ([i915#3282]) +2 other tests skip
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-8/igt@gem_madvise@dontneed-before-pwrite.html
    - shard-rkl:          NOTRUN -> [SKIP][44] ([i915#3282]) +2 other tests skip
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-5/igt@gem_madvise@dontneed-before-pwrite.html
    - shard-dg1:          NOTRUN -> [SKIP][45] ([i915#3282]) +3 other tests skip
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-17/igt@gem_madvise@dontneed-before-pwrite.html

  * igt@gem_media_fill@media-fill:
    - shard-dg2:          NOTRUN -> [SKIP][46] ([i915#8289])
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-6/igt@gem_media_fill@media-fill.html

  * igt@gem_mmap_gtt@coherency:
    - shard-mtlp:         NOTRUN -> [SKIP][47] ([i915#4077]) +1 other test skip
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-8/igt@gem_mmap_gtt@coherency.html

  * igt@gem_mmap_gtt@cpuset-medium-copy-xy:
    - shard-dg2:          NOTRUN -> [SKIP][48] ([i915#4077]) +5 other tests skip
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-8/igt@gem_mmap_gtt@cpuset-medium-copy-xy.html

  * igt@gem_mmap_wc@copy:
    - shard-dg2:          NOTRUN -> [SKIP][49] ([i915#4083]) +2 other tests skip
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-10/igt@gem_mmap_wc@copy.html
    - shard-dg1:          NOTRUN -> [SKIP][50] ([i915#4083]) +1 other test skip
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-18/igt@gem_mmap_wc@copy.html
    - shard-mtlp:         NOTRUN -> [SKIP][51] ([i915#4083])
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-8/igt@gem_mmap_wc@copy.html

  * igt@gem_partial_pwrite_pread@reads-display:
    - shard-mtlp:         NOTRUN -> [SKIP][52] ([i915#3282]) +3 other tests skip
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-6/igt@gem_partial_pwrite_pread@reads-display.html
    - shard-rkl:          NOTRUN -> [SKIP][53] ([i915#14544] / [i915#3282])
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@gem_partial_pwrite_pread@reads-display.html

  * igt@gem_pxp@protected-encrypted-src-copy-not-readible:
    - shard-dg2:          NOTRUN -> [SKIP][54] ([i915#4270]) +1 other test skip
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-7/igt@gem_pxp@protected-encrypted-src-copy-not-readible.html
    - shard-dg1:          NOTRUN -> [SKIP][55] ([i915#4270]) +1 other test skip
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-16/igt@gem_pxp@protected-encrypted-src-copy-not-readible.html

  * igt@gem_render_copy@y-tiled-ccs-to-y-tiled-mc-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][56] ([i915#5190] / [i915#8428]) +5 other tests skip
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-10/igt@gem_render_copy@y-tiled-ccs-to-y-tiled-mc-ccs.html

  * igt@gem_render_copy@yf-tiled-ccs-to-yf-tiled:
    - shard-mtlp:         NOTRUN -> [SKIP][57] ([i915#8428]) +4 other tests skip
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-7/igt@gem_render_copy@yf-tiled-ccs-to-yf-tiled.html

  * igt@gem_set_tiling_vs_blt@untiled-to-tiled:
    - shard-rkl:          NOTRUN -> [SKIP][58] ([i915#8411])
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-5/igt@gem_set_tiling_vs_blt@untiled-to-tiled.html

  * igt@gem_set_tiling_vs_gtt:
    - shard-dg1:          NOTRUN -> [SKIP][59] ([i915#4079])
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-15/igt@gem_set_tiling_vs_gtt.html
    - shard-mtlp:         NOTRUN -> [SKIP][60] ([i915#4079])
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-4/igt@gem_set_tiling_vs_gtt.html
    - shard-dg2:          NOTRUN -> [SKIP][61] ([i915#4079])
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-1/igt@gem_set_tiling_vs_gtt.html

  * igt@gem_tiled_partial_pwrite_pread@reads:
    - shard-dg1:          NOTRUN -> [SKIP][62] ([i915#4077]) +2 other tests skip
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-17/igt@gem_tiled_partial_pwrite_pread@reads.html

  * igt@gem_userptr_blits@coherency-unsync:
    - shard-dg2:          NOTRUN -> [SKIP][63] ([i915#3297]) +1 other test skip
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-6/igt@gem_userptr_blits@coherency-unsync.html

  * igt@gem_userptr_blits@dmabuf-sync:
    - shard-tglu-1:       NOTRUN -> [SKIP][64] ([i915#3297] / [i915#3323])
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@gem_userptr_blits@dmabuf-sync.html

  * igt@gem_userptr_blits@forbidden-operations:
    - shard-rkl:          NOTRUN -> [SKIP][65] ([i915#3282] / [i915#3297])
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-8/igt@gem_userptr_blits@forbidden-operations.html

  * igt@gem_userptr_blits@invalid-mmap-offset-unsync:
    - shard-dg1:          NOTRUN -> [SKIP][66] ([i915#3297])
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-19/igt@gem_userptr_blits@invalid-mmap-offset-unsync.html

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

  * igt@gem_userptr_blits@unsync-unmap:
    - shard-rkl:          NOTRUN -> [SKIP][68] ([i915#3297])
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-2/igt@gem_userptr_blits@unsync-unmap.html

  * igt@gem_userptr_blits@unsync-unmap-cycles:
    - shard-tglu-1:       NOTRUN -> [SKIP][69] ([i915#3297]) +1 other test skip
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@gem_userptr_blits@unsync-unmap-cycles.html

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

  * igt@gen9_exec_parse@basic-rejected:
    - shard-rkl:          NOTRUN -> [SKIP][71] ([i915#14544] / [i915#2527])
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@gen9_exec_parse@basic-rejected.html

  * igt@gen9_exec_parse@basic-rejected-ctx-param:
    - shard-snb:          NOTRUN -> [SKIP][72] +149 other tests skip
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-snb7/igt@gen9_exec_parse@basic-rejected-ctx-param.html

  * igt@gen9_exec_parse@batch-invalid-length:
    - shard-dg2:          NOTRUN -> [SKIP][73] ([i915#2856]) +4 other tests skip
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-3/igt@gen9_exec_parse@batch-invalid-length.html

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

  * igt@gen9_exec_parse@shadow-peek:
    - shard-dg1:          NOTRUN -> [SKIP][75] ([i915#2527]) +5 other tests skip
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-18/igt@gen9_exec_parse@shadow-peek.html

  * igt@gen9_exec_parse@unaligned-jump:
    - shard-tglu:         NOTRUN -> [SKIP][76] ([i915#2527] / [i915#2856]) +6 other tests skip
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-5/igt@gen9_exec_parse@unaligned-jump.html
    - shard-mtlp:         NOTRUN -> [SKIP][77] ([i915#2856]) +4 other tests skip
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-3/igt@gen9_exec_parse@unaligned-jump.html

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

  * igt@i915_drm_fdinfo@busy-check-all@vecs0:
    - shard-dg2:          NOTRUN -> [SKIP][79] ([i915#11527]) +7 other tests skip
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-10/igt@i915_drm_fdinfo@busy-check-all@vecs0.html

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

  * igt@i915_module_load@reload-no-display:
    - shard-tglu-1:       NOTRUN -> [DMESG-WARN][81] ([i915#13029] / [i915#14545])
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@i915_module_load@reload-no-display.html

  * igt@i915_pm_freq_api@freq-reset-multiple:
    - shard-rkl:          NOTRUN -> [SKIP][82] ([i915#8399]) +1 other test skip
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-3/igt@i915_pm_freq_api@freq-reset-multiple.html

  * igt@i915_pm_rc6_residency@rc6-accuracy:
    - shard-dg2:          NOTRUN -> [FAIL][83] ([i915#12964]) +1 other test fail
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-7/igt@i915_pm_rc6_residency@rc6-accuracy.html

  * igt@i915_pm_rpm@system-suspend-execbuf:
    - shard-glk11:        NOTRUN -> [INCOMPLETE][84] ([i915#13356] / [i915#15172])
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk11/igt@i915_pm_rpm@system-suspend-execbuf.html

  * igt@i915_query@hwconfig_table:
    - shard-dg1:          NOTRUN -> [SKIP][85] ([i915#6245])
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-13/igt@i915_query@hwconfig_table.html

  * igt@i915_query@query-topology-coherent-slice-mask:
    - shard-dg2:          NOTRUN -> [SKIP][86] ([i915#6188])
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-4/igt@i915_query@query-topology-coherent-slice-mask.html

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

  * igt@kms_addfb_basic@clobberred-modifier:
    - shard-dg2:          NOTRUN -> [SKIP][88] ([i915#4212]) +1 other test skip
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-6/igt@kms_addfb_basic@clobberred-modifier.html

  * igt@kms_async_flips@async-flip-suspend-resume:
    - shard-rkl:          [PASS][89] -> [INCOMPLETE][90] ([i915#12761])
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-5/igt@kms_async_flips@async-flip-suspend-resume.html
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_async_flips@async-flip-suspend-resume.html
    - shard-glk:          NOTRUN -> [INCOMPLETE][91] ([i915#12761]) +1 other test incomplete
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk5/igt@kms_async_flips@async-flip-suspend-resume.html

  * igt@kms_async_flips@async-flip-suspend-resume@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [INCOMPLETE][92] ([i915#12761])
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_async_flips@async-flip-suspend-resume@pipe-a-hdmi-a-2.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels:
    - shard-glk:          NOTRUN -> [SKIP][93] ([i915#1769])
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk9/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html
    - shard-rkl:          NOTRUN -> [SKIP][94] ([i915#1769] / [i915#3555])
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-5/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html
    - shard-tglu:         NOTRUN -> [SKIP][95] ([i915#1769] / [i915#3555])
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-9/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html

  * igt@kms_atomic_transition@plane-all-modeset-transition@pipe-a-hdmi-a-1:
    - shard-tglu:         NOTRUN -> [FAIL][96] ([i915#15662]) +1 other test fail
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-10/igt@kms_atomic_transition@plane-all-modeset-transition@pipe-a-hdmi-a-1.html

  * igt@kms_big_fb@4-tiled-32bpp-rotate-270:
    - shard-rkl:          NOTRUN -> [SKIP][97] ([i915#5286]) +1 other test skip
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-5/igt@kms_big_fb@4-tiled-32bpp-rotate-270.html
    - shard-dg1:          NOTRUN -> [SKIP][98] ([i915#4538] / [i915#5286]) +1 other test skip
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-16/igt@kms_big_fb@4-tiled-32bpp-rotate-270.html

  * igt@kms_big_fb@4-tiled-32bpp-rotate-90:
    - shard-tglu-1:       NOTRUN -> [SKIP][99] ([i915#5286]) +2 other tests skip
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_big_fb@4-tiled-32bpp-rotate-90.html

  * igt@kms_big_fb@4-tiled-addfb:
    - shard-tglu:         NOTRUN -> [SKIP][100] ([i915#5286]) +2 other tests skip
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-8/igt@kms_big_fb@4-tiled-addfb.html

  * igt@kms_big_fb@linear-8bpp-rotate-270:
    - shard-rkl:          NOTRUN -> [SKIP][101] ([i915#3638]) +1 other test skip
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-4/igt@kms_big_fb@linear-8bpp-rotate-270.html

  * igt@kms_big_fb@x-tiled-16bpp-rotate-90:
    - shard-dg2:          NOTRUN -> [SKIP][102] +9 other tests skip
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-10/igt@kms_big_fb@x-tiled-16bpp-rotate-90.html
    - shard-dg1:          NOTRUN -> [SKIP][103] ([i915#3638])
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-12/igt@kms_big_fb@x-tiled-16bpp-rotate-90.html

  * igt@kms_big_fb@x-tiled-64bpp-rotate-270:
    - shard-rkl:          NOTRUN -> [SKIP][104] ([i915#14544] / [i915#3638])
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_big_fb@x-tiled-64bpp-rotate-270.html

  * igt@kms_big_fb@y-tiled-16bpp-rotate-180:
    - shard-mtlp:         NOTRUN -> [SKIP][105] +9 other tests skip
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-5/igt@kms_big_fb@y-tiled-16bpp-rotate-180.html

  * igt@kms_big_fb@y-tiled-64bpp-rotate-0:
    - shard-dg2:          NOTRUN -> [SKIP][106] ([i915#4538] / [i915#5190]) +9 other tests skip
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-8/igt@kms_big_fb@y-tiled-64bpp-rotate-0.html

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

  * igt@kms_ccs@bad-aux-stride-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [SKIP][108] ([i915#6095]) +190 other tests skip
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-16/igt@kms_ccs@bad-aux-stride-4-tiled-mtl-mc-ccs@pipe-a-hdmi-a-4.html

  * igt@kms_ccs@bad-pixel-format-4-tiled-mtl-mc-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][109] ([i915#10307] / [i915#6095]) +96 other tests skip
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-8/igt@kms_ccs@bad-pixel-format-4-tiled-mtl-mc-ccs.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-mtl-mc-ccs@pipe-b-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][110] ([i915#14544] / [i915#6095]) +8 other tests skip
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-mc-ccs@pipe-b-hdmi-a-2.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][111] ([i915#6095]) +74 other tests skip
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-7/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-2.html

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

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-bmg-ccs:
    - shard-dg1:          NOTRUN -> [SKIP][113] ([i915#12313]) +1 other test skip
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-18/igt@kms_ccs@crc-primary-rotation-180-4-tiled-bmg-ccs.html
    - shard-tglu:         NOTRUN -> [SKIP][114] ([i915#12313])
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-2/igt@kms_ccs@crc-primary-rotation-180-4-tiled-bmg-ccs.html
    - shard-dg2:          NOTRUN -> [SKIP][115] ([i915#12313])
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-6/igt@kms_ccs@crc-primary-rotation-180-4-tiled-bmg-ccs.html
    - shard-rkl:          NOTRUN -> [SKIP][116] ([i915#12313])
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-4/igt@kms_ccs@crc-primary-rotation-180-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-rc-ccs:
    - shard-glk10:        NOTRUN -> [SKIP][117] +98 other tests skip
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk10/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-rc-ccs.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-rc-ccs-cc@pipe-a-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][118] ([i915#6095]) +24 other tests skip
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-3/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-rc-ccs-cc@pipe-a-edp-1.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs:
    - shard-tglu-1:       NOTRUN -> [SKIP][119] ([i915#12313])
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs.html

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

  * igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-a-hdmi-a-1:
    - shard-glk:          NOTRUN -> [INCOMPLETE][121] ([i915#15582]) +1 other test incomplete
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk5/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-a-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-d-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][122] ([i915#6095]) +9 other tests skip
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-7/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-d-hdmi-a-3.html

  * igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs:
    - shard-glk10:        NOTRUN -> [INCOMPLETE][123] ([i915#15582]) +1 other test incomplete
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk10/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs.html

  * igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs@pipe-c-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][124] ([i915#14098] / [i915#14544] / [i915#6095]) +5 other tests skip
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs@pipe-c-hdmi-a-2.html

  * igt@kms_ccs@crc-sprite-planes-basic-yf-tiled-ccs@pipe-d-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][125] ([i915#10307] / [i915#10434] / [i915#6095]) +2 other tests skip
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-4/igt@kms_ccs@crc-sprite-planes-basic-yf-tiled-ccs@pipe-d-hdmi-a-1.html

  * igt@kms_ccs@missing-ccs-buffer-y-tiled-gen12-mc-ccs@pipe-b-hdmi-a-1:
    - shard-tglu-1:       NOTRUN -> [SKIP][126] ([i915#6095]) +29 other tests skip
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_ccs@missing-ccs-buffer-y-tiled-gen12-mc-ccs@pipe-b-hdmi-a-1.html

  * igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-c-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][127] ([i915#14098] / [i915#6095]) +48 other tests skip
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-3/igt@kms_ccs@random-ccs-data-4-tiled-dg2-mc-ccs@pipe-c-hdmi-a-2.html

  * igt@kms_ccs@random-ccs-data-4-tiled-mtl-rc-ccs-cc:
    - shard-tglu:         NOTRUN -> [SKIP][128] ([i915#6095]) +84 other tests skip
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-4/igt@kms_ccs@random-ccs-data-4-tiled-mtl-rc-ccs-cc.html

  * igt@kms_cdclk@mode-transition:
    - shard-tglu-1:       NOTRUN -> [SKIP][129] ([i915#3742])
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_cdclk@mode-transition.html

  * igt@kms_cdclk@plane-scaling:
    - shard-rkl:          NOTRUN -> [SKIP][130] ([i915#3742])
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-8/igt@kms_cdclk@plane-scaling.html

  * igt@kms_cdclk@plane-scaling@pipe-d-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][131] ([i915#13783]) +3 other tests skip
   [131]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-4/igt@kms_cdclk@plane-scaling@pipe-d-hdmi-a-1.html

  * igt@kms_chamelium_edid@hdmi-edid-stress-resolution-non-4k:
    - shard-dg2:          NOTRUN -> [SKIP][132] ([i915#11151] / [i915#7828]) +5 other tests skip
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-7/igt@kms_chamelium_edid@hdmi-edid-stress-resolution-non-4k.html

  * igt@kms_chamelium_frames@dp-crc-single:
    - shard-tglu:         NOTRUN -> [SKIP][133] ([i915#11151] / [i915#7828]) +6 other tests skip
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-8/igt@kms_chamelium_frames@dp-crc-single.html

  * igt@kms_chamelium_frames@hdmi-crc-fast:
    - shard-tglu-1:       NOTRUN -> [SKIP][134] ([i915#11151] / [i915#7828]) +5 other tests skip
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_chamelium_frames@hdmi-crc-fast.html

  * igt@kms_chamelium_hpd@vga-hpd-fast:
    - shard-rkl:          NOTRUN -> [SKIP][135] ([i915#11151] / [i915#7828]) +5 other tests skip
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-4/igt@kms_chamelium_hpd@vga-hpd-fast.html
    - shard-dg1:          NOTRUN -> [SKIP][136] ([i915#11151] / [i915#7828]) +4 other tests skip
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-18/igt@kms_chamelium_hpd@vga-hpd-fast.html
    - shard-mtlp:         NOTRUN -> [SKIP][137] ([i915#11151] / [i915#7828]) +2 other tests skip
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-8/igt@kms_chamelium_hpd@vga-hpd-fast.html

  * igt@kms_chamelium_hpd@vga-hpd-without-ddc:
    - shard-rkl:          NOTRUN -> [SKIP][138] ([i915#11151] / [i915#14544] / [i915#7828])
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_chamelium_hpd@vga-hpd-without-ddc.html

  * igt@kms_color@deep-color:
    - shard-dg2:          [PASS][139] -> [SKIP][140] ([i915#12655] / [i915#3555])
   [139]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg2-10/igt@kms_color@deep-color.html
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-3/igt@kms_color@deep-color.html

  * igt@kms_content_protection@atomic-dpms-hdcp14:
    - shard-dg2:          NOTRUN -> [SKIP][141] ([i915#15865])
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-6/igt@kms_content_protection@atomic-dpms-hdcp14.html

  * igt@kms_content_protection@content-type-change:
    - shard-rkl:          NOTRUN -> [SKIP][142] ([i915#15865]) +1 other test skip
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-3/igt@kms_content_protection@content-type-change.html
    - shard-tglu:         NOTRUN -> [SKIP][143] ([i915#15865]) +1 other test skip
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-5/igt@kms_content_protection@content-type-change.html

  * igt@kms_content_protection@dp-mst-lic-type-1:
    - shard-tglu-1:       NOTRUN -> [SKIP][144] ([i915#15330] / [i915#3116] / [i915#3299])
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_content_protection@dp-mst-lic-type-1.html

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

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

  * igt@kms_content_protection@suspend-resume@pipe-a-dp-3:
    - shard-dg2:          NOTRUN -> [FAIL][147] ([i915#7173])
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-10/igt@kms_content_protection@suspend-resume@pipe-a-dp-3.html

  * igt@kms_cursor_crc@cursor-offscreen-512x512:
    - shard-rkl:          NOTRUN -> [SKIP][148] ([i915#13049])
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-7/igt@kms_cursor_crc@cursor-offscreen-512x512.html

  * igt@kms_cursor_crc@cursor-onscreen-256x85:
    - shard-tglu:         [PASS][149] -> [FAIL][150] ([i915#13566]) +1 other test fail
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-tglu-6/igt@kms_cursor_crc@cursor-onscreen-256x85.html
   [150]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-9/igt@kms_cursor_crc@cursor-onscreen-256x85.html

  * igt@kms_cursor_crc@cursor-onscreen-32x32:
    - shard-tglu-1:       NOTRUN -> [SKIP][151] ([i915#3555]) +3 other tests skip
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_cursor_crc@cursor-onscreen-32x32.html

  * igt@kms_cursor_crc@cursor-onscreen-512x512:
    - shard-tglu:         NOTRUN -> [SKIP][152] ([i915#13049]) +1 other test skip
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-3/igt@kms_cursor_crc@cursor-onscreen-512x512.html
    - shard-mtlp:         NOTRUN -> [SKIP][153] ([i915#13049])
   [153]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-2/igt@kms_cursor_crc@cursor-onscreen-512x512.html
    - shard-dg2:          NOTRUN -> [SKIP][154] ([i915#13049])
   [154]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-5/igt@kms_cursor_crc@cursor-onscreen-512x512.html
    - shard-dg1:          NOTRUN -> [SKIP][155] ([i915#13049])
   [155]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-17/igt@kms_cursor_crc@cursor-onscreen-512x512.html

  * igt@kms_cursor_crc@cursor-onscreen-max-size:
    - shard-rkl:          NOTRUN -> [SKIP][156] ([i915#3555]) +4 other tests skip
   [156]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-3/igt@kms_cursor_crc@cursor-onscreen-max-size.html
    - shard-dg1:          NOTRUN -> [SKIP][157] ([i915#3555])
   [157]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-13/igt@kms_cursor_crc@cursor-onscreen-max-size.html
    - shard-mtlp:         NOTRUN -> [SKIP][158] ([i915#3555] / [i915#8814])
   [158]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-3/igt@kms_cursor_crc@cursor-onscreen-max-size.html

  * igt@kms_cursor_crc@cursor-random-32x32:
    - shard-rkl:          NOTRUN -> [SKIP][159] ([i915#14544] / [i915#3555])
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_cursor_crc@cursor-random-32x32.html

  * igt@kms_cursor_crc@cursor-rapid-movement-32x32:
    - shard-dg2:          NOTRUN -> [SKIP][160] ([i915#3555]) +3 other tests skip
   [160]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-6/igt@kms_cursor_crc@cursor-rapid-movement-32x32.html
    - shard-tglu:         NOTRUN -> [SKIP][161] ([i915#3555]) +3 other tests skip
   [161]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-2/igt@kms_cursor_crc@cursor-rapid-movement-32x32.html

  * igt@kms_cursor_crc@cursor-sliding-128x42:
    - shard-dg1:          NOTRUN -> [DMESG-WARN][162] ([i915#4423])
   [162]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-12/igt@kms_cursor_crc@cursor-sliding-128x42.html
    - shard-mtlp:         NOTRUN -> [SKIP][163] ([i915#8814])
   [163]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-5/igt@kms_cursor_crc@cursor-sliding-128x42.html

  * igt@kms_cursor_crc@cursor-suspend:
    - shard-glk:          NOTRUN -> [INCOMPLETE][164] ([i915#12358] / [i915#14152] / [i915#7882])
   [164]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk2/igt@kms_cursor_crc@cursor-suspend.html

  * igt@kms_cursor_crc@cursor-suspend@pipe-a-hdmi-a-1:
    - shard-glk:          NOTRUN -> [INCOMPLETE][165] ([i915#12358] / [i915#14152])
   [165]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk2/igt@kms_cursor_crc@cursor-suspend@pipe-a-hdmi-a-1.html

  * igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy:
    - shard-dg2:          NOTRUN -> [SKIP][166] ([i915#13046] / [i915#5354]) +2 other tests skip
   [166]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-6/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic:
    - shard-dg2:          NOTRUN -> [SKIP][167] ([i915#4103] / [i915#4213])
   [167]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-1/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html
    - shard-dg1:          NOTRUN -> [SKIP][168] ([i915#4103] / [i915#4213])
   [168]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-13/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html
    - shard-mtlp:         NOTRUN -> [SKIP][169] ([i915#4213])
   [169]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-3/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
    - shard-rkl:          NOTRUN -> [SKIP][170] ([i915#4103]) +1 other test skip
   [170]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-7/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
    - shard-tglu:         NOTRUN -> [SKIP][171] ([i915#4103]) +2 other tests skip
   [171]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-4/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html

  * igt@kms_cursor_legacy@cursora-vs-flipb-varying-size:
    - shard-mtlp:         NOTRUN -> [SKIP][172] ([i915#9809]) +2 other tests skip
   [172]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-4/igt@kms_cursor_legacy@cursora-vs-flipb-varying-size.html

  * igt@kms_cursor_legacy@flip-vs-cursor-toggle:
    - shard-mtlp:         [PASS][173] -> [FAIL][174] ([i915#15768])
   [173]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-mtlp-1/igt@kms_cursor_legacy@flip-vs-cursor-toggle.html
   [174]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-2/igt@kms_cursor_legacy@flip-vs-cursor-toggle.html

  * igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot:
    - shard-dg2:          NOTRUN -> [SKIP][175] ([i915#9067])
   [175]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-7/igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot.html
    - shard-rkl:          NOTRUN -> [SKIP][176] ([i915#9067])
   [176]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-5/igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot.html
    - shard-tglu:         NOTRUN -> [SKIP][177] ([i915#9067])
   [177]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-8/igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot.html
    - shard-mtlp:         NOTRUN -> [SKIP][178] ([i915#9067])
   [178]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-6/igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot.html

  * igt@kms_dirtyfb@psr-dirtyfb-ioctl:
    - shard-tglu-1:       NOTRUN -> [SKIP][179] ([i915#9723])
   [179]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_dirtyfb@psr-dirtyfb-ioctl.html

  * igt@kms_dp_link_training@non-uhbr-sst:
    - shard-mtlp:         NOTRUN -> [SKIP][180] ([i915#13749])
   [180]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-6/igt@kms_dp_link_training@non-uhbr-sst.html
    - shard-dg2:          NOTRUN -> [SKIP][181] ([i915#13749])
   [181]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-6/igt@kms_dp_link_training@non-uhbr-sst.html
    - shard-rkl:          NOTRUN -> [SKIP][182] ([i915#13749] / [i915#14544])
   [182]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_dp_link_training@non-uhbr-sst.html
    - shard-dg1:          NOTRUN -> [SKIP][183] ([i915#13749])
   [183]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-13/igt@kms_dp_link_training@non-uhbr-sst.html
    - shard-tglu:         NOTRUN -> [SKIP][184] ([i915#13749])
   [184]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-8/igt@kms_dp_link_training@non-uhbr-sst.html

  * igt@kms_dp_linktrain_fallback@dp-fallback:
    - shard-dg2:          NOTRUN -> [SKIP][185] ([i915#13707])
   [185]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-8/igt@kms_dp_linktrain_fallback@dp-fallback.html

  * igt@kms_dp_linktrain_fallback@dsc-fallback:
    - shard-rkl:          NOTRUN -> [SKIP][186] ([i915#13707])
   [186]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-8/igt@kms_dp_linktrain_fallback@dsc-fallback.html
    - shard-tglu:         NOTRUN -> [SKIP][187] ([i915#13707])
   [187]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-10/igt@kms_dp_linktrain_fallback@dsc-fallback.html

  * igt@kms_dsc@dsc-with-bpc-formats:
    - shard-rkl:          NOTRUN -> [SKIP][188] ([i915#3555] / [i915#3840]) +1 other test skip
   [188]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-5/igt@kms_dsc@dsc-with-bpc-formats.html
    - shard-tglu:         NOTRUN -> [SKIP][189] ([i915#3555] / [i915#3840])
   [189]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-8/igt@kms_dsc@dsc-with-bpc-formats.html

  * igt@kms_dsc@dsc-with-formats:
    - shard-mtlp:         NOTRUN -> [SKIP][190] ([i915#3555] / [i915#3840])
   [190]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-3/igt@kms_dsc@dsc-with-formats.html
    - shard-dg2:          NOTRUN -> [SKIP][191] ([i915#3555] / [i915#3840])
   [191]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-10/igt@kms_dsc@dsc-with-formats.html
    - shard-tglu-1:       NOTRUN -> [SKIP][192] ([i915#3555] / [i915#3840])
   [192]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_dsc@dsc-with-formats.html
    - shard-dg1:          NOTRUN -> [SKIP][193] ([i915#3555] / [i915#3840])
   [193]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-13/igt@kms_dsc@dsc-with-formats.html

  * igt@kms_fbcon_fbt@psr:
    - shard-tglu-1:       NOTRUN -> [SKIP][194] ([i915#3469])
   [194]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_fbcon_fbt@psr.html

  * igt@kms_feature_discovery@psr2:
    - shard-tglu-1:       NOTRUN -> [SKIP][195] ([i915#658])
   [195]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_feature_discovery@psr2.html
    - shard-rkl:          NOTRUN -> [SKIP][196] ([i915#658])
   [196]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-2/igt@kms_feature_discovery@psr2.html

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

  * igt@kms_flip@2x-plain-flip-fb-recreate-interruptible:
    - shard-tglu-1:       NOTRUN -> [SKIP][198] ([i915#3637] / [i915#9934]) +6 other tests skip
   [198]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible.html

  * igt@kms_flip@2x-wf_vblank-ts-check:
    - shard-dg2:          NOTRUN -> [SKIP][199] ([i915#9934]) +3 other tests skip
   [199]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-10/igt@kms_flip@2x-wf_vblank-ts-check.html
    - shard-dg1:          NOTRUN -> [SKIP][200] ([i915#9934]) +1 other test skip
   [200]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-12/igt@kms_flip@2x-wf_vblank-ts-check.html
    - shard-tglu:         NOTRUN -> [SKIP][201] ([i915#3637] / [i915#9934]) +5 other tests skip
   [201]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-3/igt@kms_flip@2x-wf_vblank-ts-check.html
    - shard-mtlp:         NOTRUN -> [SKIP][202] ([i915#3637] / [i915#9934]) +1 other test skip
   [202]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-5/igt@kms_flip@2x-wf_vblank-ts-check.html

  * igt@kms_flip@flip-vs-suspend-interruptible:
    - shard-glk:          NOTRUN -> [INCOMPLETE][203] ([i915#12745] / [i915#4839])
   [203]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk9/igt@kms_flip@flip-vs-suspend-interruptible.html

  * igt@kms_flip@flip-vs-suspend-interruptible@a-hdmi-a1:
    - shard-glk:          NOTRUN -> [INCOMPLETE][204] ([i915#12745])
   [204]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk9/igt@kms_flip@flip-vs-suspend-interruptible@a-hdmi-a1.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-64bpp-ytile-downscaling:
    - shard-mtlp:         NOTRUN -> [SKIP][205] ([i915#15643]) +3 other tests skip
   [205]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-7/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-64bpp-ytile-downscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling:
    - shard-dg2:          NOTRUN -> [SKIP][206] ([i915#15643] / [i915#5190]) +2 other tests skip
   [206]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-6/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling.html

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

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

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling:
    - shard-dg2:          NOTRUN -> [SKIP][210] ([i915#15643])
   [210]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-1/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-cpu:
    - shard-tglu-1:       NOTRUN -> [SKIP][211] +74 other tests skip
   [211]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-mmap-wc:
    - shard-mtlp:         NOTRUN -> [SKIP][212] ([i915#15991] / [i915#1825]) +9 other tests skip
   [212]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-4/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-cur-indfb-move:
    - shard-dg2:          [PASS][213] -> [SKIP][214] ([i915#15989]) +2 other tests skip
   [213]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg2-10/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-cur-indfb-move.html
   [214]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-7/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-cur-indfb-move.html

  * igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-cur-indfb-onoff:
    - shard-rkl:          NOTRUN -> [SKIP][215] ([i915#15989]) +19 other tests skip
   [215]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-2/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-cur-indfb-onoff.html
    - shard-tglu-1:       NOTRUN -> [SKIP][216] ([i915#15989]) +14 other tests skip
   [216]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-cur-indfb-onoff.html
    - shard-dg1:          NOTRUN -> [SKIP][217] ([i915#15989]) +5 other tests skip
   [217]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-14/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-cur-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-pri-indfb-draw-mmap-gtt:
    - shard-dg1:          NOTRUN -> [SKIP][218] ([i915#15990]) +17 other tests skip
   [218]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-15/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-pri-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbchdr-1p-rte:
    - shard-dg2:          NOTRUN -> [SKIP][219] ([i915#15989]) +7 other tests skip
   [219]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-1/igt@kms_frontbuffer_tracking@fbchdr-1p-rte.html

  * igt@kms_frontbuffer_tracking@fbchdr-2p-primscrn-pri-indfb-draw-mmap-gtt:
    - shard-glk:          [PASS][220] -> [SKIP][221] +2 other tests skip
   [220]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-glk8/igt@kms_frontbuffer_tracking@fbchdr-2p-primscrn-pri-indfb-draw-mmap-gtt.html
   [221]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk9/igt@kms_frontbuffer_tracking@fbchdr-2p-primscrn-pri-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbchdr-2p-primscrn-spr-indfb-draw-mmap-wc:
    - shard-dg2:          NOTRUN -> [SKIP][222] ([i915#15990]) +26 other tests skip
   [222]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-8/igt@kms_frontbuffer_tracking@fbchdr-2p-primscrn-spr-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbchdr-2p-scndscrn-cur-indfb-draw-pwrite:
    - shard-dg2:          NOTRUN -> [SKIP][223] ([i915#15991]) +26 other tests skip
   [223]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-10/igt@kms_frontbuffer_tracking@fbchdr-2p-scndscrn-cur-indfb-draw-pwrite.html

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

  * igt@kms_frontbuffer_tracking@fbchdr-suspend:
    - shard-tglu:         NOTRUN -> [SKIP][225] ([i915#15989]) +16 other tests skip
   [225]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-3/igt@kms_frontbuffer_tracking@fbchdr-suspend.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-indfb-draw-mmap-wc:
    - shard-dg1:          NOTRUN -> [SKIP][226] ([i915#15104] / [i915#15990])
   [226]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-15/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-shrfb-draw-mmap-cpu:
    - shard-dg2:          NOTRUN -> [SKIP][227] ([i915#15102]) +10 other tests skip
   [227]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-3/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-shrfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-shrfb-draw-render:
    - shard-rkl:          NOTRUN -> [SKIP][228] ([i915#14544] / [i915#15102]) +3 other tests skip
   [228]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscreen-pri-shrfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-pwrite:
    - shard-dg2:          NOTRUN -> [SKIP][229] ([i915#15102] / [i915#3458]) +12 other tests skip
   [229]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-render:
    - shard-rkl:          NOTRUN -> [SKIP][230] ([i915#14544] / [i915#15102] / [i915#3023])
   [230]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-rte:
    - shard-rkl:          NOTRUN -> [SKIP][231] ([i915#15102] / [i915#3023]) +13 other tests skip
   [231]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-3/igt@kms_frontbuffer_tracking@fbcpsr-1p-rte.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-mmap-gtt:
    - shard-rkl:          NOTRUN -> [SKIP][232] ([i915#1825]) +19 other tests skip
   [232]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-7/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-mmap-gtt.html
    - shard-mtlp:         NOTRUN -> [SKIP][233] ([i915#15990] / [i915#8708]) +2 other tests skip
   [233]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-7/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-fullscreen:
    - shard-tglu:         NOTRUN -> [SKIP][234] +98 other tests skip
   [234]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-8/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-fullscreen.html

  * igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-mmap-wc:
    - shard-tglu-1:       NOTRUN -> [SKIP][235] ([i915#15102]) +29 other tests skip
   [235]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-mmap-wc.html
    - shard-dg1:          NOTRUN -> [SKIP][236] ([i915#15990] / [i915#8708]) +8 other tests skip
   [236]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-14/igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-tiling-y:
    - shard-dg1:          NOTRUN -> [SKIP][237] ([i915#15102] / [i915#3458]) +8 other tests skip
   [237]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-18/igt@kms_frontbuffer_tracking@fbcpsr-tiling-y.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-pri-indfb-draw-render:
    - shard-glk11:        NOTRUN -> [SKIP][238] +214 other tests skip
   [238]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk11/igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-pri-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-shrfb-plflip-blt:
    - shard-dg1:          NOTRUN -> [SKIP][239] ([i915#15102]) +9 other tests skip
   [239]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-19/igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-shrfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-spr-indfb-draw-mmap-cpu:
    - shard-rkl:          NOTRUN -> [SKIP][240] ([i915#15102]) +17 other tests skip
   [240]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-3/igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-spr-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-spr-indfb-fullscreen:
    - shard-mtlp:         NOTRUN -> [SKIP][241] ([i915#15989]) +12 other tests skip
   [241]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-4/igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-spr-indfb-fullscreen.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-tiling-4:
    - shard-dg1:          NOTRUN -> [SKIP][242] ([i915#5439])
   [242]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-19/igt@kms_frontbuffer_tracking@fbcpsrhdr-tiling-4.html

  * igt@kms_frontbuffer_tracking@hdr-2p-scndscrn-cur-indfb-onoff:
    - shard-rkl:          NOTRUN -> [SKIP][243] ([i915#14544]) +2 other tests skip
   [243]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_frontbuffer_tracking@hdr-2p-scndscrn-cur-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@hdr-2p-scndscrn-spr-indfb-draw-blt:
    - shard-mtlp:         NOTRUN -> [SKIP][244] ([i915#15991]) +14 other tests skip
   [244]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-2/igt@kms_frontbuffer_tracking@hdr-2p-scndscrn-spr-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@hdr-rgb101010-draw-pwrite:
    - shard-rkl:          [PASS][245] -> [SKIP][246] ([i915#15989]) +13 other tests skip
   [245]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_frontbuffer_tracking@hdr-rgb101010-draw-pwrite.html
   [246]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-5/igt@kms_frontbuffer_tracking@hdr-rgb101010-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-mmap-wc:
    - shard-dg2:          NOTRUN -> [SKIP][247] ([i915#15104] / [i915#15990]) +1 other test skip
   [247]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-6/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-blt:
    - shard-dg2:          NOTRUN -> [SKIP][248] ([i915#10433] / [i915#15102] / [i915#3458])
   [248]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-4/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-pri-indfb-draw-mmap-wc:
    - shard-dg2:          NOTRUN -> [SKIP][249] ([i915#15990] / [i915#8708]) +15 other tests skip
   [249]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-7/igt@kms_frontbuffer_tracking@psr-2p-primscrn-pri-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-shrfb-pgflip-blt:
    - shard-rkl:          NOTRUN -> [SKIP][250] ([i915#14544] / [i915#1825]) +2 other tests skip
   [250]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-2p-primscrn-shrfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-shrfb-pgflip-blt:
    - shard-dg2:          NOTRUN -> [SKIP][251] ([i915#15991] / [i915#5354]) +19 other tests skip
   [251]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-1/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-shrfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-pri-indfb-draw-blt:
    - shard-tglu:         NOTRUN -> [SKIP][252] ([i915#15102]) +39 other tests skip
   [252]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-5/igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-pri-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@psrhdr-2p-scndscrn-cur-indfb-move:
    - shard-rkl:          NOTRUN -> [SKIP][253] +49 other tests skip
   [253]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-2/igt@kms_frontbuffer_tracking@psrhdr-2p-scndscrn-cur-indfb-move.html
    - shard-dg1:          NOTRUN -> [SKIP][254] +36 other tests skip
   [254]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-15/igt@kms_frontbuffer_tracking@psrhdr-2p-scndscrn-cur-indfb-move.html

  * igt@kms_hdr@bpc-switch-dpms:
    - shard-tglu-1:       NOTRUN -> [SKIP][255] ([i915#16012] / [i915#3555] / [i915#8228])
   [255]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_hdr@bpc-switch-dpms.html

  * igt@kms_hdr@bpc-switch-dpms@pipe-a-hdmi-a-1-xrgb2101010:
    - shard-tglu-1:       NOTRUN -> [SKIP][256] ([i915#16012]) +1 other test skip
   [256]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_hdr@bpc-switch-dpms@pipe-a-hdmi-a-1-xrgb2101010.html

  * igt@kms_hdr@bpc-switch@pipe-a-hdmi-a-1-xrgb2101010:
    - shard-rkl:          NOTRUN -> [SKIP][257] ([i915#16012]) +1 other test skip
   [257]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-5/igt@kms_hdr@bpc-switch@pipe-a-hdmi-a-1-xrgb2101010.html

  * igt@kms_hdr@bpc-switch@pipe-a-hdmi-a-3-xrgb16161616f:
    - shard-dg2:          NOTRUN -> [SKIP][258] ([i915#16012]) +1 other test skip
   [258]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-1/igt@kms_hdr@bpc-switch@pipe-a-hdmi-a-3-xrgb16161616f.html

  * igt@kms_hdr@brightness-with-hdr@pipe-a-hdmi-a-1-xrgb2101010:
    - shard-dg2:          NOTRUN -> [SKIP][259] ([i915#16011]) +1 other test skip
   [259]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-4/igt@kms_hdr@brightness-with-hdr@pipe-a-hdmi-a-1-xrgb2101010.html
    - shard-rkl:          NOTRUN -> [SKIP][260] ([i915#16011]) +5 other tests skip
   [260]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-8/igt@kms_hdr@brightness-with-hdr@pipe-a-hdmi-a-1-xrgb2101010.html

  * igt@kms_hdr@invalid-metadata-sizes:
    - shard-rkl:          NOTRUN -> [SKIP][261] ([i915#16011] / [i915#3555] / [i915#8228])
   [261]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-5/igt@kms_hdr@invalid-metadata-sizes.html

  * igt@kms_hdr@static-swap:
    - shard-rkl:          [PASS][262] -> [SKIP][263] ([i915#16011] / [i915#3555] / [i915#8228])
   [262]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_hdr@static-swap.html
   [263]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-3/igt@kms_hdr@static-swap.html

  * igt@kms_hdr@static-swap@pipe-a-hdmi-a-2-xrgb2101010:
    - shard-rkl:          [PASS][264] -> [SKIP][265] ([i915#16011]) +1 other test skip
   [264]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_hdr@static-swap@pipe-a-hdmi-a-2-xrgb2101010.html
   [265]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-3/igt@kms_hdr@static-swap@pipe-a-hdmi-a-2-xrgb2101010.html

  * igt@kms_hdr@static-toggle:
    - shard-dg1:          NOTRUN -> [SKIP][266] ([i915#16011] / [i915#3555] / [i915#8228])
   [266]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-12/igt@kms_hdr@static-toggle.html

  * igt@kms_hdr@static-toggle@pipe-a-hdmi-a-3-xrgb2101010:
    - shard-dg1:          NOTRUN -> [SKIP][267] ([i915#16011]) +5 other tests skip
   [267]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-12/igt@kms_hdr@static-toggle@pipe-a-hdmi-a-3-xrgb2101010.html

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

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

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

  * igt@kms_plane@pixel-format-x-tiled-modifier@pipe-a-plane-7:
    - shard-tglu:         NOTRUN -> [SKIP][272] ([i915#15608]) +1 other test skip
   [272]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-8/igt@kms_plane@pixel-format-x-tiled-modifier@pipe-a-plane-7.html

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

  * igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-modifier@pipe-b-plane-5:
    - shard-rkl:          NOTRUN -> [SKIP][274] ([i915#15608]) +1 other test skip
   [274]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-2/igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-modifier@pipe-b-plane-5.html

  * igt@kms_plane@pixel-format-y-tiled-modifier@pipe-b-plane-7:
    - shard-tglu-1:       NOTRUN -> [SKIP][275] ([i915#15608]) +1 other test skip
   [275]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_plane@pixel-format-y-tiled-modifier@pipe-b-plane-7.html

  * igt@kms_plane@plane-panning-bottom-right-suspend:
    - shard-glk:          NOTRUN -> [INCOMPLETE][276] ([i915#13026]) +1 other test incomplete
   [276]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk6/igt@kms_plane@plane-panning-bottom-right-suspend.html

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

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

  * igt@kms_plane_alpha_blend@alpha-opaque-fb:
    - shard-glk:          NOTRUN -> [FAIL][279] ([i915#10647] / [i915#12169])
   [279]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk2/igt@kms_plane_alpha_blend@alpha-opaque-fb.html

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

  * igt@kms_plane_alpha_blend@constant-alpha-max:
    - shard-glk11:        NOTRUN -> [FAIL][281] ([i915#10647] / [i915#12169])
   [281]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk11/igt@kms_plane_alpha_blend@constant-alpha-max.html

  * igt@kms_plane_alpha_blend@constant-alpha-max@pipe-a-hdmi-a-1:
    - shard-glk11:        NOTRUN -> [FAIL][282] ([i915#10647]) +1 other test fail
   [282]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk11/igt@kms_plane_alpha_blend@constant-alpha-max@pipe-a-hdmi-a-1.html

  * igt@kms_plane_lowres@tiling-yf:
    - shard-dg2:          NOTRUN -> [SKIP][283] ([i915#3555] / [i915#8821])
   [283]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-10/igt@kms_plane_lowres@tiling-yf.html

  * igt@kms_plane_multiple@2x-tiling-none:
    - shard-dg2:          NOTRUN -> [SKIP][284] ([i915#13958])
   [284]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-10/igt@kms_plane_multiple@2x-tiling-none.html
    - shard-rkl:          NOTRUN -> [SKIP][285] ([i915#13958])
   [285]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-4/igt@kms_plane_multiple@2x-tiling-none.html
    - shard-dg1:          NOTRUN -> [SKIP][286] ([i915#13958])
   [286]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-18/igt@kms_plane_multiple@2x-tiling-none.html
    - shard-tglu:         NOTRUN -> [SKIP][287] ([i915#13958])
   [287]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-2/igt@kms_plane_multiple@2x-tiling-none.html
    - shard-mtlp:         NOTRUN -> [SKIP][288] ([i915#13958])
   [288]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-8/igt@kms_plane_multiple@2x-tiling-none.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-5-with-pixel-format@pipe-a:
    - shard-mtlp:         NOTRUN -> [SKIP][289] ([i915#15329]) +9 other tests skip
   [289]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-3/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-pixel-format@pipe-a.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-b:
    - shard-rkl:          NOTRUN -> [SKIP][290] ([i915#14544] / [i915#15329]) +3 other tests skip
   [290]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-b.html

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

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

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

  * igt@kms_pm_backlight@fade-with-dpms:
    - shard-tglu:         NOTRUN -> [SKIP][294] ([i915#9812]) +1 other test skip
   [294]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-9/igt@kms_pm_backlight@fade-with-dpms.html
    - shard-dg2:          NOTRUN -> [SKIP][295] ([i915#5354])
   [295]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-1/igt@kms_pm_backlight@fade-with-dpms.html

  * igt@kms_pm_dc@dc3co-vpb-simulation:
    - shard-tglu-1:       NOTRUN -> [SKIP][296] ([i915#15948])
   [296]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_pm_dc@dc3co-vpb-simulation.html

  * igt@kms_pm_dc@dc5-psr:
    - shard-tglu:         NOTRUN -> [SKIP][297] ([i915#15948])
   [297]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-6/igt@kms_pm_dc@dc5-psr.html

  * igt@kms_pm_dc@dc6-dpms:
    - shard-dg2:          NOTRUN -> [SKIP][298] ([i915#15751])
   [298]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-6/igt@kms_pm_dc@dc6-dpms.html
    - shard-rkl:          NOTRUN -> [FAIL][299] ([i915#15752])
   [299]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_pm_dc@dc6-dpms.html
    - shard-dg1:          NOTRUN -> [SKIP][300] ([i915#3361])
   [300]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-13/igt@kms_pm_dc@dc6-dpms.html
    - shard-tglu:         NOTRUN -> [FAIL][301] ([i915#15752])
   [301]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-8/igt@kms_pm_dc@dc6-dpms.html

  * igt@kms_pm_lpsp@screens-disabled:
    - shard-dg2:          NOTRUN -> [SKIP][302] ([i915#8430])
   [302]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-3/igt@kms_pm_lpsp@screens-disabled.html
    - shard-rkl:          NOTRUN -> [SKIP][303] ([i915#8430])
   [303]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-3/igt@kms_pm_lpsp@screens-disabled.html
    - shard-dg1:          NOTRUN -> [SKIP][304] ([i915#8430])
   [304]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-14/igt@kms_pm_lpsp@screens-disabled.html
    - shard-tglu:         NOTRUN -> [SKIP][305] ([i915#8430])
   [305]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-7/igt@kms_pm_lpsp@screens-disabled.html
    - shard-mtlp:         NOTRUN -> [SKIP][306] ([i915#8430])
   [306]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-2/igt@kms_pm_lpsp@screens-disabled.html

  * igt@kms_pm_rpm@modeset-lpsp-stress-no-wait:
    - shard-dg2:          NOTRUN -> [SKIP][307] ([i915#15073])
   [307]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-6/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html
    - shard-dg1:          [PASS][308] -> [SKIP][309] ([i915#15073])
   [308]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg1-14/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html
   [309]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-19/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html

  * igt@kms_pm_rpm@modeset-non-lpsp-stress:
    - shard-tglu-1:       NOTRUN -> [SKIP][310] ([i915#15073])
   [310]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_pm_rpm@modeset-non-lpsp-stress.html

  * igt@kms_pm_rpm@system-suspend-modeset:
    - shard-glk:          NOTRUN -> [INCOMPLETE][311] ([i915#10553])
   [311]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk9/igt@kms_pm_rpm@system-suspend-modeset.html

  * igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-fully-sf:
    - shard-dg2:          NOTRUN -> [SKIP][312] ([i915#11520]) +7 other tests skip
   [312]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-6/igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-fully-sf.html
    - shard-rkl:          NOTRUN -> [SKIP][313] ([i915#11520]) +5 other tests skip
   [313]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-4/igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr2_sf@fbc-pr-cursor-plane-update-sf:
    - shard-tglu:         NOTRUN -> [SKIP][314] ([i915#11520]) +9 other tests skip
   [314]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-7/igt@kms_psr2_sf@fbc-pr-cursor-plane-update-sf.html

  * igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf:
    - shard-rkl:          NOTRUN -> [SKIP][315] ([i915#11520] / [i915#14544]) +1 other test skip
   [315]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf.html

  * igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-exceed-sf:
    - shard-tglu-1:       NOTRUN -> [SKIP][316] ([i915#11520]) +6 other tests skip
   [316]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-exceed-sf.html

  * igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area@pipe-a-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][317] ([i915#9808])
   [317]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-3/igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area@pipe-a-edp-1.html

  * igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area@pipe-b-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][318] ([i915#12316]) +3 other tests skip
   [318]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-3/igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area@pipe-b-edp-1.html

  * igt@kms_psr2_sf@fbc-psr2-primary-plane-update-sf-dmg-area:
    - shard-glk:          NOTRUN -> [SKIP][319] ([i915#11520]) +5 other tests skip
   [319]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk1/igt@kms_psr2_sf@fbc-psr2-primary-plane-update-sf-dmg-area.html

  * igt@kms_psr2_sf@pr-cursor-plane-move-continuous-sf:
    - shard-glk10:        NOTRUN -> [SKIP][320] ([i915#11520]) +1 other test skip
   [320]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk10/igt@kms_psr2_sf@pr-cursor-plane-move-continuous-sf.html

  * igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-fully-sf:
    - shard-snb:          NOTRUN -> [SKIP][321] ([i915#11520]) +4 other tests skip
   [321]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-snb4/igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-fully-sf.html
    - shard-dg1:          NOTRUN -> [SKIP][322] ([i915#11520]) +5 other tests skip
   [322]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-19/igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr2_sf@psr2-cursor-plane-update-sf:
    - shard-glk11:        NOTRUN -> [SKIP][323] ([i915#11520]) +4 other tests skip
   [323]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk11/igt@kms_psr2_sf@psr2-cursor-plane-update-sf.html

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

  * igt@kms_psr@fbc-pr-cursor-blt:
    - shard-mtlp:         NOTRUN -> [SKIP][325] ([i915#9688]) +11 other tests skip
   [325]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-5/igt@kms_psr@fbc-pr-cursor-blt.html

  * igt@kms_psr@fbc-pr-sprite-render:
    - shard-tglu-1:       NOTRUN -> [SKIP][326] ([i915#9732]) +14 other tests skip
   [326]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@kms_psr@fbc-pr-sprite-render.html

  * igt@kms_psr@fbc-psr-no-drrs:
    - shard-tglu:         NOTRUN -> [SKIP][327] ([i915#9732]) +20 other tests skip
   [327]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-5/igt@kms_psr@fbc-psr-no-drrs.html

  * igt@kms_psr@psr-basic:
    - shard-rkl:          NOTRUN -> [SKIP][328] ([i915#1072] / [i915#14544] / [i915#9732])
   [328]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_psr@psr-basic.html

  * igt@kms_psr@psr-cursor-mmap-cpu:
    - shard-dg1:          NOTRUN -> [SKIP][329] ([i915#1072] / [i915#9732]) +12 other tests skip
   [329]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-14/igt@kms_psr@psr-cursor-mmap-cpu.html

  * igt@kms_psr@psr-sprite-plane-move:
    - shard-rkl:          NOTRUN -> [SKIP][330] ([i915#1072] / [i915#9732]) +17 other tests skip
   [330]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-2/igt@kms_psr@psr-sprite-plane-move.html

  * igt@kms_psr@psr2-primary-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][331] ([i915#1072] / [i915#9732]) +17 other tests skip
   [331]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-10/igt@kms_psr@psr2-primary-mmap-gtt.html

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

  * igt@kms_rotation_crc@primary-y-tiled-reflect-x-270:
    - shard-dg2:          NOTRUN -> [SKIP][333] ([i915#12755] / [i915#15867] / [i915#5190])
   [333]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-1/igt@kms_rotation_crc@primary-y-tiled-reflect-x-270.html

  * igt@kms_rotation_crc@sprite-rotation-270:
    - shard-dg2:          NOTRUN -> [SKIP][334] ([i915#12755] / [i915#15867])
   [334]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-7/igt@kms_rotation_crc@sprite-rotation-270.html
    - shard-mtlp:         NOTRUN -> [SKIP][335] ([i915#12755] / [i915#15867]) +1 other test skip
   [335]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-6/igt@kms_rotation_crc@sprite-rotation-270.html

  * igt@kms_tiled_display@basic-test-pattern-with-chamelium:
    - shard-dg1:          NOTRUN -> [SKIP][336] ([i915#4423] / [i915#8623])
   [336]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-19/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
    - shard-mtlp:         NOTRUN -> [SKIP][337] ([i915#8623])
   [337]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-5/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
    - shard-dg2:          NOTRUN -> [SKIP][338] ([i915#8623])
   [338]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-6/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html

  * igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-hdmi-a-2:
    - shard-glk:          NOTRUN -> [INCOMPLETE][339] ([i915#12276]) +3 other tests incomplete
   [339]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk2/igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-hdmi-a-2.html

  * igt@kms_vblank@ts-continuation-suspend@pipe-d-dp-3:
    - shard-dg2:          NOTRUN -> [ABORT][340] ([i915#15132]) +1 other test abort
   [340]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-10/igt@kms_vblank@ts-continuation-suspend@pipe-d-dp-3.html

  * igt@kms_vrr@flipline:
    - shard-rkl:          NOTRUN -> [SKIP][341] ([i915#15243] / [i915#3555])
   [341]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-7/igt@kms_vrr@flipline.html

  * igt@kms_vrr@negative-basic:
    - shard-dg2:          NOTRUN -> [SKIP][342] ([i915#3555] / [i915#9906])
   [342]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-4/igt@kms_vrr@negative-basic.html
    - shard-tglu:         NOTRUN -> [SKIP][343] ([i915#3555] / [i915#9906])
   [343]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-2/igt@kms_vrr@negative-basic.html

  * igt@kms_vrr@seamless-rr-switch-drrs:
    - shard-dg2:          NOTRUN -> [SKIP][344] ([i915#9906])
   [344]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-6/igt@kms_vrr@seamless-rr-switch-drrs.html
    - shard-rkl:          NOTRUN -> [SKIP][345] ([i915#14544] / [i915#9906])
   [345]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_vrr@seamless-rr-switch-drrs.html
    - shard-dg1:          NOTRUN -> [SKIP][346] ([i915#9906])
   [346]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-19/igt@kms_vrr@seamless-rr-switch-drrs.html
    - shard-tglu:         NOTRUN -> [SKIP][347] ([i915#9906])
   [347]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-9/igt@kms_vrr@seamless-rr-switch-drrs.html
    - shard-mtlp:         NOTRUN -> [SKIP][348] ([i915#8808] / [i915#9906])
   [348]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-5/igt@kms_vrr@seamless-rr-switch-drrs.html

  * igt@perf@unprivileged-single-ctx-counters:
    - shard-rkl:          NOTRUN -> [SKIP][349] ([i915#14544] / [i915#2433])
   [349]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@perf@unprivileged-single-ctx-counters.html
    - shard-dg1:          NOTRUN -> [SKIP][350] ([i915#2433])
   [350]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-13/igt@perf@unprivileged-single-ctx-counters.html

  * igt@perf_pmu@most-busy-idle-check-all:
    - shard-dg2:          [PASS][351] -> [FAIL][352] ([i915#15997]) +1 other test fail
   [351]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg2-1/igt@perf_pmu@most-busy-idle-check-all.html
   [352]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-6/igt@perf_pmu@most-busy-idle-check-all.html
    - shard-dg1:          [PASS][353] -> [FAIL][354] ([i915#15997]) +1 other test fail
   [353]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg1-17/igt@perf_pmu@most-busy-idle-check-all.html
   [354]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-18/igt@perf_pmu@most-busy-idle-check-all.html

  * igt@perf_pmu@rc6-all-gts:
    - shard-rkl:          NOTRUN -> [SKIP][355] ([i915#8516])
   [355]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-2/igt@perf_pmu@rc6-all-gts.html
    - shard-tglu-1:       NOTRUN -> [SKIP][356] ([i915#8516])
   [356]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-1/igt@perf_pmu@rc6-all-gts.html

  * igt@perf_pmu@rc6@other-idle-gt0:
    - shard-tglu:         NOTRUN -> [SKIP][357] ([i915#8516])
   [357]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-3/igt@perf_pmu@rc6@other-idle-gt0.html

  * igt@prime_vgem@basic-fence-mmap:
    - shard-dg2:          NOTRUN -> [SKIP][358] ([i915#3708] / [i915#4077])
   [358]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-8/igt@prime_vgem@basic-fence-mmap.html

  * igt@sriov_basic@enable-vfs-autoprobe-off:
    - shard-dg2:          NOTRUN -> [SKIP][359] ([i915#9917])
   [359]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-1/igt@sriov_basic@enable-vfs-autoprobe-off.html
    - shard-rkl:          NOTRUN -> [SKIP][360] ([i915#9917]) +1 other test skip
   [360]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-8/igt@sriov_basic@enable-vfs-autoprobe-off.html
    - shard-dg1:          NOTRUN -> [SKIP][361] ([i915#9917])
   [361]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-14/igt@sriov_basic@enable-vfs-autoprobe-off.html

  * igt@sriov_basic@enable-vfs-autoprobe-off@numvfs-6:
    - shard-mtlp:         NOTRUN -> [FAIL][362] ([i915#12910]) +9 other tests fail
   [362]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-1/igt@sriov_basic@enable-vfs-autoprobe-off@numvfs-6.html

  * igt@sriov_basic@enable-vfs-bind-unbind-each@numvfs-random:
    - shard-tglu:         NOTRUN -> [FAIL][363] ([i915#12910]) +18 other tests fail
   [363]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-tglu-3/igt@sriov_basic@enable-vfs-bind-unbind-each@numvfs-random.html

  
#### Possible fixes ####

  * igt@gem_exec_suspend@basic-s3:
    - shard-glk:          [INCOMPLETE][364] ([i915#13196] / [i915#13356]) -> [PASS][365] +1 other test pass
   [364]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-glk2/igt@gem_exec_suspend@basic-s3.html
   [365]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk1/igt@gem_exec_suspend@basic-s3.html

  * igt@i915_suspend@basic-s2idle-without-i915:
    - shard-rkl:          [ABORT][366] ([i915#15131]) -> [PASS][367]
   [366]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-1/igt@i915_suspend@basic-s2idle-without-i915.html
   [367]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-8/igt@i915_suspend@basic-s2idle-without-i915.html

  * igt@i915_suspend@debugfs-reader:
    - shard-dg2:          [ABORT][368] ([i915#15131] / [i915#15140]) -> [PASS][369]
   [368]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg2-10/igt@i915_suspend@debugfs-reader.html
   [369]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-8/igt@i915_suspend@debugfs-reader.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip:
    - shard-mtlp:         [FAIL][370] ([i915#15733] / [i915#5138]) -> [PASS][371]
   [370]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-mtlp-2/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html
   [371]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-5/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html

  * igt@kms_cursor_crc@cursor-onscreen-64x21:
    - shard-rkl:          [FAIL][372] ([i915#13566]) -> [PASS][373]
   [372]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_cursor_crc@cursor-onscreen-64x21.html
   [373]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-8/igt@kms_cursor_crc@cursor-onscreen-64x21.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible:
    - shard-rkl:          [FAIL][374] ([i915#13027]) -> [PASS][375] +1 other test pass
   [374]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
   [375]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_flip@flip-vs-expired-vblank-interruptible.html

  * igt@kms_flip@flip-vs-suspend:
    - shard-dg2:          [ABORT][376] ([i915#15132]) -> [PASS][377] +1 other test pass
   [376]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg2-10/igt@kms_flip@flip-vs-suspend.html
   [377]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-10/igt@kms_flip@flip-vs-suspend.html

  * igt@kms_force_connector_basic@force-connector-state:
    - shard-mtlp:         [SKIP][378] ([i915#15672]) -> [PASS][379]
   [378]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-mtlp-1/igt@kms_force_connector_basic@force-connector-state.html
   [379]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-3/igt@kms_force_connector_basic@force-connector-state.html

  * igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-pri-shrfb-draw-mmap-wc:
    - shard-rkl:          [SKIP][380] ([i915#15989]) -> [PASS][381] +6 other tests pass
   [380]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-3/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-pri-shrfb-draw-mmap-wc.html
   [381]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-pri-shrfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbchdr-rgb101010-draw-pwrite:
    - shard-glk:          [SKIP][382] -> [PASS][383]
   [382]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-glk9/igt@kms_frontbuffer_tracking@fbchdr-rgb101010-draw-pwrite.html
   [383]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk8/igt@kms_frontbuffer_tracking@fbchdr-rgb101010-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@hdr-1p-primscrn-indfb-msflip-blt:
    - shard-dg2:          [SKIP][384] ([i915#15989]) -> [PASS][385] +5 other tests pass
   [384]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg2-3/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-indfb-msflip-blt.html
   [385]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-10/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-indfb-msflip-blt.html

  * igt@kms_hdr@bpc-switch-dpms:
    - shard-dg2:          [SKIP][386] ([i915#16012] / [i915#3555] / [i915#8228]) -> [PASS][387]
   [386]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg2-5/igt@kms_hdr@bpc-switch-dpms.html
   [387]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-10/igt@kms_hdr@bpc-switch-dpms.html

  * igt@kms_pm_rpm@dpms-lpsp:
    - shard-dg1:          [SKIP][388] ([i915#15073]) -> [PASS][389] +2 other tests pass
   [388]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg1-19/igt@kms_pm_rpm@dpms-lpsp.html
   [389]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-14/igt@kms_pm_rpm@dpms-lpsp.html

  * igt@kms_pm_rpm@modeset-non-lpsp:
    - shard-dg2:          [SKIP][390] ([i915#15073]) -> [PASS][391]
   [390]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg2-4/igt@kms_pm_rpm@modeset-non-lpsp.html
   [391]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-6/igt@kms_pm_rpm@modeset-non-lpsp.html

  * igt@kms_setmode@basic:
    - shard-dg1:          [FAIL][392] ([i915#15106]) -> [PASS][393]
   [392]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg1-17/igt@kms_setmode@basic.html
   [393]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-12/igt@kms_setmode@basic.html
    - shard-dg2:          [FAIL][394] ([i915#15106]) -> [PASS][395]
   [394]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg2-3/igt@kms_setmode@basic.html
   [395]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-10/igt@kms_setmode@basic.html

  
#### Warnings ####

  * igt@api_intel_bb@object-reloc-purge-cache:
    - shard-rkl:          [SKIP][396] ([i915#14544] / [i915#8411]) -> [SKIP][397] ([i915#8411])
   [396]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@api_intel_bb@object-reloc-purge-cache.html
   [397]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-5/igt@api_intel_bb@object-reloc-purge-cache.html

  * igt@gem_close_race@multigpu-basic-threads:
    - shard-rkl:          [SKIP][398] ([i915#14544] / [i915#7697]) -> [SKIP][399] ([i915#7697])
   [398]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@gem_close_race@multigpu-basic-threads.html
   [399]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-8/igt@gem_close_race@multigpu-basic-threads.html

  * igt@gem_create@create-ext-cpu-access-sanity-check:
    - shard-rkl:          [SKIP][400] ([i915#14544] / [i915#6335]) -> [SKIP][401] ([i915#6335])
   [400]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@gem_create@create-ext-cpu-access-sanity-check.html
   [401]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-7/igt@gem_create@create-ext-cpu-access-sanity-check.html

  * igt@gem_ctx_sseu@invalid-sseu:
    - shard-rkl:          [SKIP][402] ([i915#14544] / [i915#280]) -> [SKIP][403] ([i915#280])
   [402]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@gem_ctx_sseu@invalid-sseu.html
   [403]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-5/igt@gem_ctx_sseu@invalid-sseu.html

  * igt@gem_exec_capture@capture-invisible@smem0:
    - shard-rkl:          [SKIP][404] ([i915#14544] / [i915#6334]) -> [SKIP][405] ([i915#6334]) +1 other test skip
   [404]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@gem_exec_capture@capture-invisible@smem0.html
   [405]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-5/igt@gem_exec_capture@capture-invisible@smem0.html

  * igt@gem_exec_reloc@basic-write-wc-noreloc:
    - shard-rkl:          [SKIP][406] ([i915#3281]) -> [SKIP][407] ([i915#14544] / [i915#3281]) +1 other test skip
   [406]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-5/igt@gem_exec_reloc@basic-write-wc-noreloc.html
   [407]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@gem_exec_reloc@basic-write-wc-noreloc.html

  * igt@gem_lmem_swapping@verify-random:
    - shard-rkl:          [SKIP][408] ([i915#14544] / [i915#4613]) -> [SKIP][409] ([i915#4613])
   [408]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@gem_lmem_swapping@verify-random.html
   [409]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-8/igt@gem_lmem_swapping@verify-random.html

  * igt@gem_partial_pwrite_pread@writes-after-reads-display:
    - shard-rkl:          [SKIP][410] ([i915#3282]) -> [SKIP][411] ([i915#14544] / [i915#3282])
   [410]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-8/igt@gem_partial_pwrite_pread@writes-after-reads-display.html
   [411]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@gem_partial_pwrite_pread@writes-after-reads-display.html

  * igt@gem_pread@display:
    - shard-rkl:          [SKIP][412] ([i915#14544] / [i915#3282]) -> [SKIP][413] ([i915#3282]) +1 other test skip
   [412]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@gem_pread@display.html
   [413]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-8/igt@gem_pread@display.html

  * igt@gem_userptr_blits@coherency-unsync:
    - shard-rkl:          [SKIP][414] ([i915#3297]) -> [SKIP][415] ([i915#14544] / [i915#3297])
   [414]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-4/igt@gem_userptr_blits@coherency-unsync.html
   [415]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@gem_userptr_blits@coherency-unsync.html

  * igt@gem_userptr_blits@unsync-overlap:
    - shard-rkl:          [SKIP][416] ([i915#14544] / [i915#3297]) -> [SKIP][417] ([i915#3297])
   [416]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@gem_userptr_blits@unsync-overlap.html
   [417]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-8/igt@gem_userptr_blits@unsync-overlap.html

  * igt@gem_workarounds@suspend-resume-context:
    - shard-rkl:          [ABORT][418] ([i915#15131]) -> [INCOMPLETE][419] ([i915#13356])
   [418]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-1/igt@gem_workarounds@suspend-resume-context.html
   [419]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-3/igt@gem_workarounds@suspend-resume-context.html

  * igt@i915_module_load@fault-injection:
    - shard-dg1:          [ABORT][420] ([i915#11814] / [i915#15481]) -> [ABORT][421] ([i915#11814]) +1 other test abort
   [420]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg1-16/igt@i915_module_load@fault-injection.html
   [421]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-18/igt@i915_module_load@fault-injection.html

  * igt@i915_module_load@resize-bar:
    - shard-rkl:          [SKIP][422] ([i915#14544] / [i915#6412]) -> [SKIP][423] ([i915#6412])
   [422]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@i915_module_load@resize-bar.html
   [423]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-8/igt@i915_module_load@resize-bar.html

  * igt@i915_pm_sseu@full-enable:
    - shard-rkl:          [SKIP][424] ([i915#14544] / [i915#4387]) -> [SKIP][425] ([i915#4387])
   [424]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@i915_pm_sseu@full-enable.html
   [425]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-8/igt@i915_pm_sseu@full-enable.html

  * igt@kms_big_fb@4-tiled-16bpp-rotate-0:
    - shard-rkl:          [SKIP][426] ([i915#14544] / [i915#5286]) -> [SKIP][427] ([i915#5286]) +2 other tests skip
   [426]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_big_fb@4-tiled-16bpp-rotate-0.html
   [427]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-5/igt@kms_big_fb@4-tiled-16bpp-rotate-0.html

  * igt@kms_big_fb@4-tiled-8bpp-rotate-270:
    - shard-rkl:          [SKIP][428] ([i915#5286]) -> [SKIP][429] ([i915#14544] / [i915#5286])
   [428]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-3/igt@kms_big_fb@4-tiled-8bpp-rotate-270.html
   [429]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_big_fb@4-tiled-8bpp-rotate-270.html

  * igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-180-hflip:
    - shard-rkl:          [SKIP][430] ([i915#14544] / [i915#3828]) -> [SKIP][431] ([i915#3828])
   [430]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-180-hflip.html
   [431]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-3/igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-180-hflip.html

  * igt@kms_big_fb@x-tiled-16bpp-rotate-270:
    - shard-rkl:          [SKIP][432] ([i915#14544] / [i915#3638]) -> [SKIP][433] ([i915#3638])
   [432]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_big_fb@x-tiled-16bpp-rotate-270.html
   [433]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-2/igt@kms_big_fb@x-tiled-16bpp-rotate-270.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
    - shard-rkl:          [SKIP][434] -> [SKIP][435] ([i915#14544]) +25 other tests skip
   [434]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-4/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
   [435]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html

  * igt@kms_ccs@bad-aux-stride-yf-tiled-ccs@pipe-b-hdmi-a-2:
    - shard-rkl:          [SKIP][436] ([i915#6095]) -> [SKIP][437] ([i915#14544] / [i915#6095]) +3 other tests skip
   [436]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-3/igt@kms_ccs@bad-aux-stride-yf-tiled-ccs@pipe-b-hdmi-a-2.html
   [437]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_ccs@bad-aux-stride-yf-tiled-ccs@pipe-b-hdmi-a-2.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-dg2-rc-ccs@pipe-a-hdmi-a-2:
    - shard-rkl:          [SKIP][438] ([i915#14544] / [i915#6095]) -> [SKIP][439] ([i915#6095]) +4 other tests skip
   [438]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_ccs@crc-primary-basic-4-tiled-dg2-rc-ccs@pipe-a-hdmi-a-2.html
   [439]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-3/igt@kms_ccs@crc-primary-basic-4-tiled-dg2-rc-ccs@pipe-a-hdmi-a-2.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs@pipe-c-hdmi-a-2:
    - shard-rkl:          [SKIP][440] ([i915#14098] / [i915#14544] / [i915#6095]) -> [SKIP][441] ([i915#14098] / [i915#6095]) +7 other tests skip
   [440]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs@pipe-c-hdmi-a-2.html
   [441]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-7/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-rc-ccs@pipe-c-hdmi-a-2.html

  * igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs:
    - shard-rkl:          [SKIP][442] ([i915#14098] / [i915#6095]) -> [SKIP][443] ([i915#14098] / [i915#14544] / [i915#6095]) +7 other tests skip
   [442]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-5/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs.html
   [443]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs.html

  * igt@kms_chamelium_frames@dp-crc-fast:
    - shard-rkl:          [SKIP][444] ([i915#11151] / [i915#7828]) -> [SKIP][445] ([i915#11151] / [i915#14544] / [i915#7828]) +3 other tests skip
   [444]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-7/igt@kms_chamelium_frames@dp-crc-fast.html
   [445]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_chamelium_frames@dp-crc-fast.html

  * igt@kms_chamelium_hpd@hdmi-hpd-storm-disable:
    - shard-rkl:          [SKIP][446] ([i915#11151] / [i915#14544] / [i915#7828]) -> [SKIP][447] ([i915#11151] / [i915#7828]) +1 other test skip
   [446]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_chamelium_hpd@hdmi-hpd-storm-disable.html
   [447]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-3/igt@kms_chamelium_hpd@hdmi-hpd-storm-disable.html

  * igt@kms_content_protection@atomic:
    - shard-rkl:          [SKIP][448] ([i915#14544] / [i915#15865]) -> [SKIP][449] ([i915#15865]) +1 other test skip
   [448]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_content_protection@atomic.html
   [449]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-5/igt@kms_content_protection@atomic.html

  * igt@kms_content_protection@atomic-dpms:
    - shard-dg2:          [FAIL][450] ([i915#7173]) -> [SKIP][451] ([i915#15865])
   [450]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg2-10/igt@kms_content_protection@atomic-dpms.html
   [451]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-4/igt@kms_content_protection@atomic-dpms.html

  * igt@kms_content_protection@atomic-hdcp14:
    - shard-rkl:          [SKIP][452] ([i915#15865]) -> [SKIP][453] ([i915#14544] / [i915#15865])
   [452]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-1/igt@kms_content_protection@atomic-hdcp14.html
   [453]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_content_protection@atomic-hdcp14.html

  * igt@kms_content_protection@suspend-resume:
    - shard-dg2:          [SKIP][454] ([i915#15865]) -> [FAIL][455] ([i915#7173])
   [454]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg2-3/igt@kms_content_protection@suspend-resume.html
   [455]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-10/igt@kms_content_protection@suspend-resume.html

  * igt@kms_cursor_crc@cursor-onscreen-512x170:
    - shard-dg2:          [SKIP][456] ([i915#13049]) -> [SKIP][457] ([i915#13049] / [i915#3359])
   [456]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg2-4/igt@kms_cursor_crc@cursor-onscreen-512x170.html
   [457]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-10/igt@kms_cursor_crc@cursor-onscreen-512x170.html

  * igt@kms_cursor_crc@cursor-sliding-32x32:
    - shard-rkl:          [SKIP][458] ([i915#3555]) -> [SKIP][459] ([i915#14544] / [i915#3555])
   [458]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-7/igt@kms_cursor_crc@cursor-sliding-32x32.html
   [459]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_cursor_crc@cursor-sliding-32x32.html

  * igt@kms_cursor_crc@cursor-sliding-512x170:
    - shard-rkl:          [SKIP][460] ([i915#13049] / [i915#14544]) -> [SKIP][461] ([i915#13049]) +1 other test skip
   [460]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_cursor_crc@cursor-sliding-512x170.html
   [461]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-5/igt@kms_cursor_crc@cursor-sliding-512x170.html

  * igt@kms_cursor_crc@cursor-sliding-512x512:
    - shard-rkl:          [SKIP][462] ([i915#13049]) -> [SKIP][463] ([i915#13049] / [i915#14544])
   [462]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-2/igt@kms_cursor_crc@cursor-sliding-512x512.html
   [463]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_cursor_crc@cursor-sliding-512x512.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions:
    - shard-rkl:          [SKIP][464] ([i915#4103]) -> [SKIP][465] ([i915#14544] / [i915#4103])
   [464]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-3/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html
   [465]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html

  * igt@kms_dsc@dsc-with-bpc:
    - shard-rkl:          [SKIP][466] ([i915#14544] / [i915#3555] / [i915#3840]) -> [SKIP][467] ([i915#3555] / [i915#3840])
   [466]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_dsc@dsc-with-bpc.html
   [467]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-4/igt@kms_dsc@dsc-with-bpc.html

  * igt@kms_feature_discovery@display-3x:
    - shard-rkl:          [SKIP][468] ([i915#1839]) -> [SKIP][469] ([i915#14544] / [i915#1839])
   [468]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-2/igt@kms_feature_discovery@display-3x.html
   [469]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_feature_discovery@display-3x.html

  * igt@kms_feature_discovery@psr1:
    - shard-rkl:          [SKIP][470] ([i915#658]) -> [SKIP][471] ([i915#14544] / [i915#658])
   [470]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-4/igt@kms_feature_discovery@psr1.html
   [471]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_feature_discovery@psr1.html

  * igt@kms_flip@2x-flip-vs-dpms:
    - shard-rkl:          [SKIP][472] ([i915#14544] / [i915#9934]) -> [SKIP][473] ([i915#9934]) +2 other tests skip
   [472]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_flip@2x-flip-vs-dpms.html
   [473]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-2/igt@kms_flip@2x-flip-vs-dpms.html

  * igt@kms_flip@2x-single-buffer-flip-vs-dpms-off-vs-modeset-interruptible:
    - shard-rkl:          [SKIP][474] ([i915#9934]) -> [SKIP][475] ([i915#14544] / [i915#9934]) +2 other tests skip
   [474]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-2/igt@kms_flip@2x-single-buffer-flip-vs-dpms-off-vs-modeset-interruptible.html
   [475]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_flip@2x-single-buffer-flip-vs-dpms-off-vs-modeset-interruptible.html

  * igt@kms_flip@flip-vs-suspend:
    - shard-glk:          [INCOMPLETE][476] ([i915#12745] / [i915#4839] / [i915#6113]) -> [INCOMPLETE][477] ([i915#12745] / [i915#4839])
   [476]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-glk1/igt@kms_flip@flip-vs-suspend.html
   [477]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk6/igt@kms_flip@flip-vs-suspend.html

  * igt@kms_flip@flip-vs-suspend@a-hdmi-a1:
    - shard-glk:          [INCOMPLETE][478] ([i915#12745] / [i915#6113]) -> [INCOMPLETE][479] ([i915#12745])
   [478]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-glk1/igt@kms_flip@flip-vs-suspend@a-hdmi-a1.html
   [479]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-glk6/igt@kms_flip@flip-vs-suspend@a-hdmi-a1.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-upscaling:
    - shard-rkl:          [SKIP][480] ([i915#15643]) -> [SKIP][481] ([i915#14544] / [i915#15643]) +1 other test skip
   [480]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-5/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-upscaling.html
   [481]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-upscaling.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-blt:
    - shard-rkl:          [SKIP][482] ([i915#14544] / [i915#1825]) -> [SKIP][483] ([i915#1825]) +16 other tests skip
   [482]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-blt.html
   [483]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-3/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-draw-pwrite:
    - shard-rkl:          [SKIP][484] ([i915#15102] / [i915#3023]) -> [SKIP][485] ([i915#14544] / [i915#15102] / [i915#3023]) +7 other tests skip
   [484]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-7/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-draw-pwrite.html
   [485]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-cur-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-cur-indfb-draw-blt:
    - shard-dg1:          [SKIP][486] -> [SKIP][487] ([i915#4423]) +1 other test skip
   [486]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg1-12/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-cur-indfb-draw-blt.html
   [487]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg1-19/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-cur-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-suspend:
    - shard-dg2:          [SKIP][488] ([i915#10433] / [i915#15102] / [i915#3458]) -> [SKIP][489] ([i915#15102] / [i915#3458]) +2 other tests skip
   [488]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-suspend.html
   [489]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-7/igt@kms_frontbuffer_tracking@fbcpsr-suspend.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-rte:
    - shard-rkl:          [SKIP][490] ([i915#14544] / [i915#15102]) -> [SKIP][491] ([i915#15102]) +5 other tests skip
   [490]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-rte.html
   [491]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-5/igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-rte.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-pwrite:
    - shard-dg2:          [SKIP][492] ([i915#15102] / [i915#3458]) -> [SKIP][493] ([i915#10433] / [i915#15102] / [i915#3458])
   [492]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg2-3/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-pwrite.html
   [493]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-4/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-pri-indfb-draw-mmap-wc:
    - shard-rkl:          [SKIP][494] ([i915#1825]) -> [SKIP][495] ([i915#14544] / [i915#1825]) +10 other tests skip
   [494]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-4/igt@kms_frontbuffer_tracking@psr-2p-primscrn-pri-indfb-draw-mmap-wc.html
   [495]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-2p-primscrn-pri-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psr-rgb101010-draw-render:
    - shard-rkl:          [SKIP][496] ([i915#14544] / [i915#15102] / [i915#3023]) -> [SKIP][497] ([i915#15102] / [i915#3023]) +6 other tests skip
   [496]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-render.html
   [497]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-5/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-render.html

  * igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-cur-indfb-draw-mmap-gtt:
    - shard-rkl:          [SKIP][498] ([i915#15102]) -> [SKIP][499] ([i915#14544] / [i915#15102]) +7 other tests skip
   [498]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-2/igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-cur-indfb-draw-mmap-gtt.html
   [499]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-cur-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@psrhdr-2p-primscrn-shrfb-plflip-blt:
    - shard-rkl:          [SKIP][500] ([i915#14544]) -> [SKIP][501] +23 other tests skip
   [500]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_frontbuffer_tracking@psrhdr-2p-primscrn-shrfb-plflip-blt.html
   [501]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-7/igt@kms_frontbuffer_tracking@psrhdr-2p-primscrn-shrfb-plflip-blt.html

  * igt@kms_hdr@brightness-with-hdr:
    - shard-rkl:          [SKIP][502] ([i915#14544]) -> [SKIP][503] ([i915#16011])
   [502]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_hdr@brightness-with-hdr.html
   [503]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-8/igt@kms_hdr@brightness-with-hdr.html

  * igt@kms_hdr@invalid-hdr:
    - shard-dg2:          [SKIP][504] ([i915#16012] / [i915#3555] / [i915#8228]) -> [SKIP][505] ([i915#3555] / [i915#8228])
   [504]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg2-4/igt@kms_hdr@invalid-hdr.html
   [505]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-10/igt@kms_hdr@invalid-hdr.html

  * igt@kms_joiner@basic-force-ultra-joiner:
    - shard-rkl:          [SKIP][506] ([i915#15458]) -> [SKIP][507] ([i915#14544] / [i915#15458])
   [506]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-3/igt@kms_joiner@basic-force-ultra-joiner.html
   [507]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_joiner@basic-force-ultra-joiner.html

  * igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner:
    - shard-rkl:          [SKIP][508] ([i915#14544] / [i915#15638] / [i915#15722]) -> [SKIP][509] ([i915#15638] / [i915#15722])
   [508]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner.html
   [509]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-5/igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner.html

  * igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier-source-clamping:
    - shard-rkl:          [SKIP][510] ([i915#15709]) -> [SKIP][511] ([i915#14544] / [i915#15709]) +1 other test skip
   [510]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-5/igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier-source-clamping.html
   [511]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier-source-clamping.html

  * igt@kms_plane_multiple@2x-tiling-4:
    - shard-rkl:          [SKIP][512] ([i915#13958] / [i915#14544]) -> [SKIP][513] ([i915#13958]) +1 other test skip
   [512]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_plane_multiple@2x-tiling-4.html
   [513]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-7/igt@kms_plane_multiple@2x-tiling-4.html

  * igt@kms_plane_multiple@2x-tiling-yf:
    - shard-rkl:          [SKIP][514] ([i915#13958]) -> [SKIP][515] ([i915#13958] / [i915#14544])
   [514]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-8/igt@kms_plane_multiple@2x-tiling-yf.html
   [515]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_plane_multiple@2x-tiling-yf.html

  * igt@kms_pm_dc@dc6-psr:
    - shard-rkl:          [SKIP][516] ([i915#14544] / [i915#15948]) -> [SKIP][517] ([i915#15948])
   [516]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_pm_dc@dc6-psr.html
   [517]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-4/igt@kms_pm_dc@dc6-psr.html

  * igt@kms_pm_lpsp@kms-lpsp:
    - shard-rkl:          [SKIP][518] ([i915#9340]) -> [SKIP][519] ([i915#3828])
   [518]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-7/igt@kms_pm_lpsp@kms-lpsp.html
   [519]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-8/igt@kms_pm_lpsp@kms-lpsp.html

  * igt@kms_prime@d3hot:
    - shard-rkl:          [SKIP][520] ([i915#14544] / [i915#6524]) -> [SKIP][521] ([i915#6524])
   [520]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_prime@d3hot.html
   [521]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-8/igt@kms_prime@d3hot.html

  * igt@kms_psr2_sf@fbc-pr-overlay-plane-update-continuous-sf:
    - shard-rkl:          [SKIP][522] ([i915#11520] / [i915#14544]) -> [SKIP][523] ([i915#11520]) +1 other test skip
   [522]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_psr2_sf@fbc-pr-overlay-plane-update-continuous-sf.html
   [523]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-5/igt@kms_psr2_sf@fbc-pr-overlay-plane-update-continuous-sf.html

  * igt@kms_psr2_sf@pr-overlay-plane-update-sf-dmg-area:
    - shard-rkl:          [SKIP][524] ([i915#11520]) -> [SKIP][525] ([i915#11520] / [i915#14544]) +2 other tests skip
   [524]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-2/igt@kms_psr2_sf@pr-overlay-plane-update-sf-dmg-area.html
   [525]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_psr2_sf@pr-overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr@fbc-psr-cursor-plane-move:
    - shard-rkl:          [SKIP][526] ([i915#1072] / [i915#14544] / [i915#9732]) -> [SKIP][527] ([i915#1072] / [i915#9732]) +9 other tests skip
   [526]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_psr@fbc-psr-cursor-plane-move.html
   [527]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-7/igt@kms_psr@fbc-psr-cursor-plane-move.html

  * igt@kms_psr@fbc-psr-primary-blt:
    - shard-rkl:          [SKIP][528] ([i915#1072] / [i915#9732]) -> [SKIP][529] ([i915#1072] / [i915#14544] / [i915#9732]) +12 other tests skip
   [528]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-1/igt@kms_psr@fbc-psr-primary-blt.html
   [529]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_psr@fbc-psr-primary-blt.html

  * igt@kms_rotation_crc@primary-y-tiled-reflect-x-90:
    - shard-dg2:          [SKIP][530] ([i915#12755] / [i915#15867] / [i915#5190]) -> [SKIP][531] ([i915#15867] / [i915#5190])
   [530]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg2-5/igt@kms_rotation_crc@primary-y-tiled-reflect-x-90.html
   [531]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-10/igt@kms_rotation_crc@primary-y-tiled-reflect-x-90.html

  * igt@kms_rotation_crc@sprite-rotation-90-pos-100-0:
    - shard-dg2:          [SKIP][532] ([i915#12755] / [i915#15867]) -> [SKIP][533] ([i915#15867])
   [532]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-dg2-1/igt@kms_rotation_crc@sprite-rotation-90-pos-100-0.html
   [533]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-dg2-10/igt@kms_rotation_crc@sprite-rotation-90-pos-100-0.html

  * igt@kms_vrr@flip-basic-fastset:
    - shard-rkl:          [SKIP][534] ([i915#9906]) -> [SKIP][535] ([i915#14544] / [i915#9906]) +1 other test skip
   [534]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-1/igt@kms_vrr@flip-basic-fastset.html
   [535]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@kms_vrr@flip-basic-fastset.html

  * igt@kms_vrr@lobf:
    - shard-rkl:          [SKIP][536] ([i915#11920] / [i915#14544]) -> [SKIP][537] ([i915#11920])
   [536]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@kms_vrr@lobf.html
   [537]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-4/igt@kms_vrr@lobf.html

  * igt@perf@mi-rpc:
    - shard-rkl:          [SKIP][538] ([i915#14544] / [i915#2434]) -> [SKIP][539] ([i915#2434])
   [538]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-6/igt@perf@mi-rpc.html
   [539]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-4/igt@perf@mi-rpc.html

  * igt@perf_pmu@module-unload:
    - shard-mtlp:         [ABORT][540] ([i915#15778]) -> [INCOMPLETE][541] ([i915#13520])
   [540]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-mtlp-8/igt@perf_pmu@module-unload.html
   [541]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-mtlp-8/igt@perf_pmu@module-unload.html

  * igt@prime_vgem@basic-write:
    - shard-rkl:          [SKIP][542] ([i915#3291] / [i915#3708]) -> [SKIP][543] ([i915#14544] / [i915#3291] / [i915#3708])
   [542]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_18469/shard-rkl-3/igt@prime_vgem@basic-write.html
   [543]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_15146/shard-rkl-6/igt@prime_vgem@basic-write.html

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

  [i915#10307]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10307
  [i915#10433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10433
  [i915#10434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10434
  [i915#10553]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10553
  [i915#10647]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10647
  [i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
  [i915#1099]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1099
  [i915#11151]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11151
  [i915#11520]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11520
  [i915#11527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11527
  [i915#11814]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11814
  [i915#11920]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11920
  [i915#12169]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12169
  [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#12316]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12316
  [i915#12343]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12343
  [i915#12358]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12358
  [i915#12655]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12655
  [i915#12745]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12745
  [i915#12755]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12755
  [i915#12761]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12761
  [i915#12805]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12805
  [i915#12910]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12910
  [i915#12964]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12964
  [i915#13026]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13026
  [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#13196]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13196
  [i915#13356]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13356
  [i915#13520]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13520
  [i915#13566]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13566
  [i915#13707]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13707
  [i915#13749]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13749
  [i915#13783]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13783
  [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#14152]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14152
  [i915#14544]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14544
  [i915#14545]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14545
  [i915#14586]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14586
  [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#15131]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15131
  [i915#15132]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15132
  [i915#15140]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15140
  [i915#15172]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15172
  [i915#15243]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15243
  [i915#15329]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15329
  [i915#15330]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15330
  [i915#15458]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15458
  [i915#15459]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15459
  [i915#15481]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15481
  [i915#15582]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15582
  [i915#15608]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15608
  [i915#15638]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15638
  [i915#15643]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15643
  [i915#15662]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15662
  [i915#15672]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15672
  [i915#15709]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15709
  [i915#15722]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15722
  [i915#15733]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15733
  [i915#15751]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15751
  [i915#15752]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15752
  [i915#15768]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15768
  [i915#15778]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15778
  [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#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#15997]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15997
  [i915#16011]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16011
  [i915#16012]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16012
  [i915#16025]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/16025
  [i915#1769]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1769
  [i915#1825]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1825
  [i915#1839]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1839
  [i915#2190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2190
  [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#280]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/280
  [i915#2856]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2856
  [i915#3023]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3023
  [i915#3116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3116
  [i915#3281]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3281
  [i915#3282]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3282
  [i915#3291]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3291
  [i915#3297]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3297
  [i915#3299]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3299
  [i915#3323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3323
  [i915#3359]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3359
  [i915#3361]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3361
  [i915#3458]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3458
  [i915#3469]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3469
  [i915#3539]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3539
  [i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555
  [i915#3637]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3637
  [i915#3638]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3638
  [i915#3708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3708
  [i915#3742]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3742
  [i915#3828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3828
  [i915#3840]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3840
  [i915#3936]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3936
  [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#4212]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4212
  [i915#4213]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4213
  [i915#4270]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4270
  [i915#4387]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4387
  [i915#4423]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4423
  [i915#4525]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4525
  [i915#4537]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4537
  [i915#4538]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4538
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
  [i915#4812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4812
  [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#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#5354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5354
  [i915#5439]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5439
  [i915#5723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5723
  [i915#5882]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5882
  [i915#6095]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6095
  [i915#6113]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6113
  [i915#6188]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6188
  [i915#6245]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6245
  [i915#6334]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6334
  [i915#6335]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6335
  [i915#6412]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6412
  [i915#6524]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6524
  [i915#658]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/658
  [i915#7173]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7173
  [i915#7697]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7697
  [i915#7828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7828
  [i915#7862]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7862
  [i915#7882]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7882
  [i915#8228]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8228
  [i915#8289]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8289
  [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#8516]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8516
  [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#8814]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8814
  [i915#8821]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8821
  [i915#9067]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9067
  [i915#9323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9323
  [i915#9340]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9340
  [i915#9683]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9683
  [i915#9688]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9688
  [i915#9723]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9723
  [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#9906]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9906
  [i915#9917]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9917
  [i915#9934]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9934


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

  * CI: CI-20190529 -> None
  * IGT: IGT_8903 -> IGTPW_15146
  * Piglit: piglit_4509 -> None

  CI-20190529: 20190529
  CI_DRM_18469: 0ce1c813197dfbe15ff14143da97ec11161e1795 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_15146: 236252b6b6e0a9533bafd592dd033d4132aa888f @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  IGT_8903: 6f88532e2fe22529195cc2f8cabff93d994688f8 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

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

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

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

end of thread, other threads:[~2026-05-12 10:22 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-11  5:43 [PATCH i-g-t 0/2] tests/intel/kms_tbt: Add DP tunneling validation tests Kunal Joshi
2026-05-11  5:43 ` [PATCH i-g-t 1/2] lib/igt_connector_helper: Add DRM connector helpers using libdisplay-info Kunal Joshi
2026-05-11  5:43 ` [PATCH i-g-t 2/2] tests/intel/kms_tbt: Add DP tunneling validation tests Kunal Joshi
2026-05-12  0:14 ` ✓ i915.CI.BAT: success for " Patchwork
2026-05-12  0:50 ` ✓ Xe.CI.BAT: " Patchwork
2026-05-12  3:20 ` ✗ Xe.CI.FULL: failure " Patchwork
2026-05-12 10:22 ` ✓ i915.CI.Full: success " Patchwork

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