Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH i-g-t 00/15] lib/kms: Start introducing for_each_crtc*()
@ 2026-01-30 10:52 Ville Syrjala
  2026-01-30 10:52 ` [PATCH i-g-t 01/15] lib/kms: Introduce for_each_crtc*() Ville Syrjala
                   ` (18 more replies)
  0 siblings, 19 replies; 42+ messages in thread
From: Ville Syrjala @ 2026-01-30 10:52 UTC (permalink / raw)
  To: igt-dev

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Start converting the for_each_pipe*() stuff to for_each_crtc*().

The series was getting a bit too big to handle so I cut it
after I got all the for_each_pipe_{single,valid}_output()
converted. There is still quite a bit of for_each_pipe() left
to do after this.

Haven't even smoke tested this. Fingers crossed...

Ville Syrjälä (15):
  lib/kms: Introduce for_each_crtc*()
  tests/drm_read: Use for_each_crtc*()
  tests/kms_plane_scaling: Use for_each_crtc*()
  tests/kms_color: Convert to for_each_crtc*()
  tests/intel/kms_pm_dc: Use for_each_crtc*()
  tests/kms_rotation_crc: Use for_each_crtc*()
  lib/kms: Use for_each_crtc_with_single_output() and for_each_crtc()
  lib/kms: Use for_each_crtc_with_single_output(), part 1
  lib/kms: Use for_each_crtc_with_single_output(), part 2
  lib/kms: Use for_each_crtc_with_single_output(), part 3
  lib/kms: Use for_each_crtc_with_valid_output(), part 1
  lib/kms: Use for_each_crtc_with_valid_output(), part 2
  lib/kms: Use for_each_crtc_with_valid_output(), part 3
  lib/kms: Use for_each_crtc_with_valid_output(), part 4
  lib/kms: Nuke for_each_pipe_with_*_output()

 lib/igt_kms.c                          |   4 +-
 lib/igt_kms.h                          |  70 ++++++++----
 tests/amdgpu/amd_cursor_overlay.c      |  16 ++-
 tests/drm_read.c                       |   8 +-
 tests/intel/kms_big_fb.c               |   6 +-
 tests/intel/kms_busy.c                 |  59 +++++-----
 tests/intel/kms_ccs.c                  |  19 +++-
 tests/intel/kms_cdclk.c                |  12 +-
 tests/intel/kms_draw_crc.c             |   8 +-
 tests/intel/kms_dsc.c                  |   6 +-
 tests/intel/kms_fb_coherency.c         |   6 +-
 tests/intel/kms_fence_pin_leak.c       |   8 +-
 tests/intel/kms_flip_tiling.c          |  15 ++-
 tests/intel/kms_frontbuffer_tracking.c |  14 +--
 tests/intel/kms_mmap_write_crc.c       |  10 +-
 tests/intel/kms_pipe_b_c_ivb.c         |   8 +-
 tests/intel/kms_pm_dc.c                |  36 +++---
 tests/intel/kms_pm_rpm.c               |   8 +-
 tests/intel/kms_psr2_sf.c              |   7 +-
 tests/intel/kms_psr2_su.c              |  15 +--
 tests/intel/kms_psr_stress_test.c      |   6 +-
 tests/intel/kms_pwrite_crc.c           |   6 +-
 tests/intel/perf_pmu.c                 |   8 +-
 tests/intel/prime_mmap_kms.c           |   6 +-
 tests/intel/xe_pat.c                   |   8 +-
 tests/kms_async_flips.c                |  23 ++--
 tests/kms_atomic.c                     | 147 ++++++++++++++-----------
 tests/kms_atomic_interruptible.c       |  79 ++++++++-----
 tests/kms_atomic_transition.c          |  25 +++--
 tests/kms_color.c                      |  28 ++---
 tests/kms_color_pipeline.c             |  12 +-
 tests/kms_cursor_crc.c                 |  86 ++++++++-------
 tests/kms_cursor_edge_walk.c           |  14 ++-
 tests/kms_flip_event_leak.c            |  11 +-
 tests/kms_invalid_mode.c               |  13 ++-
 tests/kms_lease.c                      |  15 ++-
 tests/kms_panel_fitting.c              |  12 +-
 tests/kms_pipe_crc_basic.c             |  74 ++++++++-----
 tests/kms_plane.c                      |   8 +-
 tests/kms_plane_alpha_blend.c          |  24 ++--
 tests/kms_plane_cursor.c               |  14 ++-
 tests/kms_plane_multiple.c             |  11 +-
 tests/kms_plane_scaling.c              | 119 ++++++++++----------
 tests/kms_prime.c                      |   6 +-
 tests/kms_properties.c                 |  22 ++--
 tests/kms_rmfb.c                       |  10 +-
 tests/kms_rotation_crc.c               |  25 ++---
 tests/kms_scaling_modes.c              |  12 +-
 tests/kms_sequence.c                   |  13 ++-
 tests/kms_universal_plane.c            |  49 +++++----
 tests/kms_vblank.c                     |  63 +++++++----
 tests/prime_vgem.c                     |   4 +-
 tests/vmwgfx/vmw_prime.c               |  16 +--
 53 files changed, 745 insertions(+), 559 deletions(-)

-- 
2.52.0


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

* [PATCH i-g-t 01/15] lib/kms: Introduce for_each_crtc*()
  2026-01-30 10:52 [PATCH i-g-t 00/15] lib/kms: Start introducing for_each_crtc*() Ville Syrjala
@ 2026-01-30 10:52 ` Ville Syrjala
  2026-01-30 13:38   ` Jani Nikula
  2026-01-30 10:52 ` [PATCH i-g-t 02/15] tests/drm_read: Use for_each_crtc*() Ville Syrjala
                   ` (17 subsequent siblings)
  18 siblings, 1 reply; 42+ messages in thread
From: Ville Syrjala @ 2026-01-30 10:52 UTC (permalink / raw)
  To: igt-dev

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Add for_each_crtc*() as the crtc based replacement for
the for_each_pipe*() iterators (which will eventually get
nuked).

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 lib/igt_kms.h | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 68 insertions(+)

diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 432c67d11780..a4857ea0e574 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -682,6 +682,19 @@ static inline bool igt_pipe_connector_valid(enum pipe pipe, igt_output_t *output
 		output->config.valid_crtc_idx_mask & (1 << (pipe));
 }
 
+/**
+ * igt_crtc_connector_valid:
+ * @crtc: CRTC to check.
+ * @output: #igt_output_t to check.
+ *
+ * Checks whether the given CRTC and output can be used together.
+ */
+static inline bool igt_crtc_connector_valid(igt_crtc_t *crtc, igt_output_t *output)
+{
+	return igt_output_is_connected(output) &&
+		output->config.valid_crtc_idx_mask & (1 << crtc->pipe);
+}
+
 #define for_each_if(condition) if (!(condition)) {} else
 
 /**
@@ -744,6 +757,23 @@ static inline bool igt_pipe_connector_valid(enum pipe pipe, igt_output_t *output
 	for_each_pipe_static(pipe) \
 		for_each_if(igt_crtc_for_pipe((display), (pipe))->valid)
 
+/**
+ * for_each_crtc:
+ * @display: a pointer to an #igt_display_t structure
+ * @crtc: The CRTC
+ *
+ * This for loop iterates over all CRTCs.
+ *
+ * Note that this cannot be used to enumerate per-CRTC subtest names since it
+ * depends upon runtime probing of the actual kms driver that is being tested.
+ * Use #for_each_pipe_static instead.
+ */
+#define for_each_crtc(display, crtc) \
+	for ((crtc) = &(display)->crtcs[0]; \
+	     (crtc) < &(display)->crtcs[(display)->n_crtcs]; \
+	     (crtc)++) \
+		for_each_if ((crtc)->valid)
+
 /**
  * for_each_pipe_with_valid_output:
  * @display: a pointer to an #igt_display_t structure
@@ -765,6 +795,27 @@ static inline bool igt_pipe_connector_valid(enum pipe pipe, igt_output_t *output
 			for_each_if ((((output) = &(display)->outputs[con__]), \
 						igt_pipe_connector_valid((pipe), (output))))
 
+/**
+ * for_each_crtc_with_valid_output:
+ * @display: a pointer to an #igt_display_t structure
+ * @crtc: CRTC for which this @crtc / @output combination is valid.
+ * @output: The output for which this @crtc / @output combination is valid.
+ *
+ * This for loop is called over all connected outputs. This function
+ * will try every combination of @crtc and @output.
+ *
+ * If you only need to test a single output for each pipe, use
+ * for_each_crtc_with_single_output(), if you only need an
+ * output for a single CRTC, use igt_get_single_output_for_pipe().
+ */
+#define for_each_crtc_with_valid_output(display, crtc, output) \
+	for ((output) = &(display)->outputs[0], (crtc) = &(display)->crtcs[0]; \
+	     assert(igt_can_fail()), (crtc) < &(display)->crtcs[(display)->n_crtcs] && \
+		     (output) < &(display)->outputs[(display)->n_outputs]; \
+	     (output) = (output) + 1 < &(display)->outputs[(display)->n_outputs] ? \
+		     (output) + 1 : ((crtc)++, &(display)->outputs[0])) \
+		for_each_if ((crtc)->valid && igt_crtc_connector_valid((crtc), (output)))
+
 igt_output_t **__igt_pipe_populate_outputs(igt_display_t *display,
 					   igt_output_t **chosen_outputs);
 
@@ -785,6 +836,23 @@ igt_output_t **__igt_pipe_populate_outputs(igt_display_t *display,
 		for_each_if (*__output && \
 			     ((pipe) = (__output - __outputs), (output) = *__output, 1))
 
+/**
+ * for_each_crtc_with_single_output:
+ * @display: a pointer to an #igt_display_t structure
+ * @crtc: The CRTC for which this @crtc / @output combination is valid.
+ * @output: The output for which this @crtc / @output combination is valid.
+ *
+ * This loop is called over all CRTCs, and will try to find a compatible output
+ * for each CRTC. Unlike for_each_pipe_with_valid_output(), this function will
+ * be called at most once for each pipe.
+ */
+#define for_each_crtc_with_single_output(display, crtc, output) \
+	for (igt_output_t *__outputs[igt_display_n_crtcs(display)], \
+	     **__output = __igt_pipe_populate_outputs((display), __outputs); \
+		 __output < &__outputs[igt_display_n_crtcs(display)]; __output++) \
+		for_each_if (*__output && \
+			     ((crtc) = igt_crtc_for_pipe((display), (__output - __outputs)), (output) = *__output, 1))
+
 /**
  * for_each_valid_output_on_pipe:
  * @display: a pointer to an #igt_display_t structure
-- 
2.52.0


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

* [PATCH i-g-t 02/15] tests/drm_read: Use for_each_crtc*()
  2026-01-30 10:52 [PATCH i-g-t 00/15] lib/kms: Start introducing for_each_crtc*() Ville Syrjala
  2026-01-30 10:52 ` [PATCH i-g-t 01/15] lib/kms: Introduce for_each_crtc*() Ville Syrjala
@ 2026-01-30 10:52 ` Ville Syrjala
  2026-01-30 13:39   ` Jani Nikula
  2026-01-30 10:52 ` [PATCH i-g-t 03/15] tests/kms_plane_scaling: " Ville Syrjala
                   ` (16 subsequent siblings)
  18 siblings, 1 reply; 42+ messages in thread
From: Ville Syrjala @ 2026-01-30 10:52 UTC (permalink / raw)
  To: igt-dev

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Convert tests/drm_read to use the crtc based iterators
(as opposed to the old pipe based ones).

This one was done manually due to coccinelle refusing
to cooperate with me.

I left the old 'pipe' variable around since its final value
gets used in a bunch of places after the loop. I'll probably
need further cleanup later, but this seems sufficient for now.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tests/drm_read.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/tests/drm_read.c b/tests/drm_read.c
index c44e207f7dd8..e745e98534bd 100644
--- a/tests/drm_read.c
+++ b/tests/drm_read.c
@@ -280,6 +280,7 @@ int igt_main()
 	igt_fixture() {
 		struct sigaction alarm_action = {};
 		igt_output_t *output;
+		igt_crtc_t *crtc;
 
 		igt_assert_neq(sigaction(SIGALRM, NULL, &alarm_action), -1);
 		alarm_action.sa_flags &= ~SA_RESTART;
@@ -292,16 +293,17 @@ int igt_main()
 		igt_display_require(&display, fd);
 		igt_display_require_output(&display);
 
-		for_each_pipe_with_valid_output(&display, pipe, output) {
+		for_each_crtc_with_valid_output(&display, crtc, output) {
 			drmModeModeInfo *mode = igt_output_get_mode(output);
 
 			igt_create_pattern_fb(fd, mode->hdisplay, mode->vdisplay,
 					      DRM_FORMAT_XRGB8888,
 					      DRM_FORMAT_MOD_LINEAR, &fb);
 
-			igt_output_set_crtc(output,
-				            igt_crtc_for_pipe(output->display, pipe));
+			igt_output_set_crtc(output, crtc);
 			igt_plane_set_fb(igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY), &fb);
+
+			pipe = crtc->pipe;
 			break;
 		}
 
-- 
2.52.0


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

* [PATCH i-g-t 03/15] tests/kms_plane_scaling: Use for_each_crtc*()
  2026-01-30 10:52 [PATCH i-g-t 00/15] lib/kms: Start introducing for_each_crtc*() Ville Syrjala
  2026-01-30 10:52 ` [PATCH i-g-t 01/15] lib/kms: Introduce for_each_crtc*() Ville Syrjala
  2026-01-30 10:52 ` [PATCH i-g-t 02/15] tests/drm_read: Use for_each_crtc*() Ville Syrjala
@ 2026-01-30 10:52 ` Ville Syrjala
  2026-01-30 12:03   ` Jani Nikula
  2026-01-30 14:07   ` Jani Nikula
  2026-01-30 10:52 ` [PATCH i-g-t 04/15] tests/kms_color: Convert to for_each_crtc*() Ville Syrjala
                   ` (15 subsequent siblings)
  18 siblings, 2 replies; 42+ messages in thread
From: Ville Syrjala @ 2026-01-30 10:52 UTC (permalink / raw)
  To: igt-dev

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Convert tests/kms_plane_scaling to use the new crtc based
iteratros (over the old pipe based ones).

Coccinelle has a lot of trouble with this one so in the end
I gave up and did the conversion manually.

find_connected_pipe() is the slightly dodgy thing here since
it uses the iterator after the loop. But I think the igt_require()
stuff should trip up before if we didn't manage to find a suitable
crtc at all. So should be safe.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tests/kms_plane_scaling.c | 119 +++++++++++++++++++-------------------
 1 file changed, 59 insertions(+), 60 deletions(-)

diff --git a/tests/kms_plane_scaling.c b/tests/kms_plane_scaling.c
index 70cf704c05fa..63fbc8c603bb 100644
--- a/tests/kms_plane_scaling.c
+++ b/tests/kms_plane_scaling.c
@@ -843,19 +843,18 @@ test_scaler_with_pixel_format_pipe(data_t *d, double sf_plane,
 static enum pipe
 find_connected_pipe(igt_display_t *display, bool second, igt_output_t **output)
 {
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	bool first_output = false;
 	bool found = false;
 
 	igt_display_reset(display);
 
-	for_each_pipe(display, pipe) {
-		for_each_valid_output_on_pipe(display, pipe, *output) {
+	for_each_crtc(display, crtc) {
+		for_each_valid_output_on_pipe(display, crtc->pipe, *output) {
 			if (igt_output_get_driving_crtc(*output) != NULL)
 				continue;
 
-			igt_output_set_crtc(*output,
-					    igt_crtc_for_pipe((*output)->display, pipe));
+			igt_output_set_crtc(*output, crtc);
 			if (intel_pipe_output_combo_valid(display)) {
 				found = true;
 
@@ -879,7 +878,7 @@ find_connected_pipe(igt_display_t *display, bool second, igt_output_t **output)
 	else
 		igt_require_f(found, "No valid outputs found\n");
 
-	return pipe;
+	return crtc->pipe;
 }
 
 static int
@@ -1363,7 +1362,7 @@ static data_t data;
 
 int igt_main_args("", long_opts, help_str, opt_handler, &data)
 {
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	uint32_t ret = -EINVAL;
 
 	igt_fixture() {
@@ -1380,20 +1379,20 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
 		for (int index = 0; index < ARRAY_SIZE(scaler_with_pixel_format_tests); index++) {
 			igt_describe(scaler_with_pixel_format_tests[index].describe);
 			igt_subtest_with_dynamic(scaler_with_pixel_format_tests[index].name) {
-				for_each_pipe(&data.display, pipe) {
-					igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
-						for_each_valid_output_on_pipe(&data.display, pipe, output) {
+				for_each_crtc(&data.display, crtc) {
+					igt_dynamic_f("pipe-%s", igt_crtc_name(crtc)) {
+						for_each_valid_output_on_pipe(&data.display, crtc->pipe, output) {
 							igt_info("Trying on %s\n", igt_output_name(output));
-							if (!pipe_output_combo_valid(&data.display, pipe, output))
+							if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 								continue;
-							if (get_num_scalers(&data.display, pipe) < 1)
+							if (get_num_scalers(&data.display, crtc->pipe) < 1)
 								continue;
 
 							ret = test_scaler_with_pixel_format_pipe(&data,
 									scaler_with_pixel_format_tests[index].sf,
 									false,
 									scaler_with_pixel_format_tests[index].is_upscale,
-									pipe, output);
+									crtc->pipe, output);
 							if (ret == 0)
 								break;
 							igt_info("Required scaling operation not supported on %s trying on next output\n",
@@ -1408,20 +1407,20 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
 		for (int index = 0; index < ARRAY_SIZE(scaler_with_rotation_tests); index++) {
 			igt_describe(scaler_with_rotation_tests[index].describe);
 			igt_subtest_with_dynamic(scaler_with_rotation_tests[index].name) {
-				for_each_pipe(&data.display, pipe) {
-					igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
-						for_each_valid_output_on_pipe(&data.display, pipe, output) {
+				for_each_crtc(&data.display, crtc) {
+					igt_dynamic_f("pipe-%s", igt_crtc_name(crtc)) {
+						for_each_valid_output_on_pipe(&data.display, crtc->pipe, output) {
 							igt_info("Trying on %s\n", igt_output_name(output));
-							if (!pipe_output_combo_valid(&data.display, pipe, output))
+							if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 								continue;
-							if (get_num_scalers(&data.display, pipe) < 1)
+							if (get_num_scalers(&data.display, crtc->pipe) < 1)
 								continue;
 
 							ret = test_scaler_with_rotation_pipe(&data,
 									scaler_with_rotation_tests[index].sf,
 									false,
 									scaler_with_rotation_tests[index].is_upscale,
-									pipe, output);
+									crtc->pipe, output);
 							if (ret == 0)
 								break;
 							igt_info("Required scaling operation not supported on %s trying on next output\n",
@@ -1436,20 +1435,20 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
 		for (int index = 0; index < ARRAY_SIZE(scaler_with_modifiers_tests); index++) {
 			igt_describe(scaler_with_modifiers_tests[index].describe);
 			igt_subtest_with_dynamic(scaler_with_modifiers_tests[index].name) {
-				for_each_pipe(&data.display, pipe) {
-					igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
-						for_each_valid_output_on_pipe(&data.display, pipe, output) {
+				for_each_crtc(&data.display, crtc) {
+					igt_dynamic_f("pipe-%s", igt_crtc_name(crtc)) {
+						for_each_valid_output_on_pipe(&data.display, crtc->pipe, output) {
 							igt_info("Trying on %s\n", igt_output_name(output));
-							if (!pipe_output_combo_valid(&data.display, pipe, output))
+							if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 								continue;
-							if (get_num_scalers(&data.display, pipe) < 1)
+							if (get_num_scalers(&data.display, crtc->pipe) < 1)
 								continue;
 
 							ret = test_scaler_with_modifier_pipe(&data,
 									scaler_with_modifiers_tests[index].sf,
 									false,
 									scaler_with_modifiers_tests[index].is_upscale,
-									pipe, output);
+									crtc->pipe, output);
 							if (ret == 0)
 								break;
 							igt_info("Required scaling operation not supported on %s trying on next output\n",
@@ -1463,17 +1462,17 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
 
 		igt_describe("Tests scaling with clipping and clamping, pixel formats.");
 		igt_subtest_with_dynamic("plane-scaler-with-clipping-clamping-pixel-formats") {
-			for_each_pipe(&data.display, pipe) {
-				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
-					for_each_valid_output_on_pipe(&data.display, pipe, output) {
+			for_each_crtc(&data.display, crtc) {
+				igt_dynamic_f("pipe-%s", igt_crtc_name(crtc)) {
+					for_each_valid_output_on_pipe(&data.display, crtc->pipe, output) {
 						igt_info("Trying on %s\n", igt_output_name(output));
-						if (!pipe_output_combo_valid(&data.display, pipe, output))
+						if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 							continue;
-						if (get_num_scalers(&data.display, pipe) < 1)
+						if (get_num_scalers(&data.display, crtc->pipe) < 1)
 							continue;
 
 						ret = test_scaler_with_pixel_format_pipe(&data, 0.0, true,
-											 false, pipe,
+											 false, crtc->pipe,
 											 output);
 						if (ret == 0)
 							break;
@@ -1488,17 +1487,17 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
 
 		igt_describe("Tests scaling with clipping and clamping, rotation.");
 		igt_subtest_with_dynamic("plane-scaler-with-clipping-clamping-rotation") {
-			for_each_pipe(&data.display, pipe) {
-				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
-					for_each_valid_output_on_pipe(&data.display, pipe, output) {
+			for_each_crtc(&data.display, crtc) {
+				igt_dynamic_f("pipe-%s", igt_crtc_name(crtc)) {
+					for_each_valid_output_on_pipe(&data.display, crtc->pipe, output) {
 						igt_info("Trying on %s\n", igt_output_name(output));
-						if (!pipe_output_combo_valid(&data.display, pipe, output))
+						if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 							continue;
-						if (get_num_scalers(&data.display, pipe) < 1)
+						if (get_num_scalers(&data.display, crtc->pipe) < 1)
 							continue;
 
 						ret = test_scaler_with_rotation_pipe(&data, 0.0, true,
-										     false, pipe,
+										     false, crtc->pipe,
 										     output);
 						if (ret == 0)
 							break;
@@ -1512,17 +1511,17 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
 
 		igt_describe("Tests scaling with clipping and clamping, modifiers.");
 		igt_subtest_with_dynamic("plane-scaler-with-clipping-clamping-modifiers") {
-			for_each_pipe(&data.display, pipe) {
-				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
-					for_each_valid_output_on_pipe(&data.display, pipe, output) {
+			for_each_crtc(&data.display, crtc) {
+				igt_dynamic_f("pipe-%s", igt_crtc_name(crtc)) {
+					for_each_valid_output_on_pipe(&data.display, crtc->pipe, output) {
 						igt_info("Trying on %s\n", igt_output_name(output));
-						if (!pipe_output_combo_valid(&data.display, pipe, output))
+						if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 							continue;
-						if (get_num_scalers(&data.display, pipe) < 1)
+						if (get_num_scalers(&data.display, crtc->pipe) < 1)
 							continue;
 
 						ret = test_scaler_with_modifier_pipe(&data, 0.0, true,
-										     false, pipe,
+										     false, crtc->pipe,
 										     output);
 						if (ret == 0)
 							break;
@@ -1537,19 +1536,19 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
 		for (int index = 0; index < ARRAY_SIZE(scaler_with_2_planes_tests); index++) {
 			igt_describe(scaler_with_2_planes_tests[index].describe);
 			igt_subtest_with_dynamic(scaler_with_2_planes_tests[index].name) {
-				for_each_pipe(&data.display, pipe) {
-					igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
-						for_each_valid_output_on_pipe(&data.display, pipe, output) {
+				for_each_crtc(&data.display, crtc) {
+					igt_dynamic_f("pipe-%s", igt_crtc_name(crtc)) {
+						for_each_valid_output_on_pipe(&data.display, crtc->pipe, output) {
 							igt_info("Trying on %s\n",
 								 igt_output_name(output));
-							if (!pipe_output_combo_valid(&data.display, pipe, output))
+							if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 								continue;
-							if (get_num_scalers(&data.display, pipe) < 2)
+							if (get_num_scalers(&data.display, crtc->pipe) < 2)
 								continue;
 							ret = test_planes_scaling_combo(&data,
 								scaler_with_2_planes_tests[index].sf_plane1,
 								scaler_with_2_planes_tests[index].sf_plane2,
-								pipe, output,
+								crtc->pipe, output,
 								scaler_with_2_planes_tests[index].test_type);
 							if (ret == 0)
 								break;
@@ -1566,9 +1565,9 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
 			igt_describe("Test for validating max source size.");
 			igt_subtest_with_dynamic(intel_paramtests[index].testname) {
 				igt_require_intel(data.drm_fd);
-				for_each_pipe(&data.display, pipe) {
-					for_each_valid_output_on_pipe(&data.display, pipe, output) {
-						if (get_num_scalers(&data.display, pipe) < 1)
+				for_each_crtc(&data.display, crtc) {
+					for_each_valid_output_on_pipe(&data.display, crtc->pipe, output) {
+						if (get_num_scalers(&data.display, crtc->pipe) < 1)
 							continue;
 						/*
 						 * Need to find mode with lowest vrefresh else
@@ -1576,15 +1575,15 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
 						 */
 						if (find_mode(&data, output, &intel_paramtests[index]))
 							igt_dynamic_f("pipe-%s-%s",
-								      kmstest_pipe_name(pipe), igt_output_name(output))
-								intel_max_source_size_test(&data, pipe, output,
+								      igt_crtc_name(crtc), igt_output_name(output))
+								intel_max_source_size_test(&data, crtc->pipe, output,
 											   &intel_paramtests[index]);
 						else
 							igt_info("Unable to find the lowest " \
 								 "refresh rate mode on output " \
 								 "%s pipe %s\n",
 								 igt_output_name(output),
-								 kmstest_pipe_name(pipe));
+								 igt_crtc_name(crtc));
 						continue;
 					}
 					break;
@@ -1594,15 +1593,15 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
 
 		igt_describe("Negative test for number of scalers per pipe.");
 		igt_subtest_with_dynamic("invalid-num-scalers") {
-			for_each_pipe_with_valid_output(&data.display, pipe, output) {
-				if (!pipe_output_combo_valid(&data.display, pipe, output))
+			for_each_crtc_with_valid_output(&data.display, crtc, output) {
+				if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 					continue;
-				if (get_num_scalers(&data.display, pipe) < 1)
+				if (get_num_scalers(&data.display, crtc->pipe) < 1)
 						continue;
 
 				igt_dynamic_f("pipe-%s-%s-invalid-num-scalers",
-					       kmstest_pipe_name(pipe), igt_output_name(output))
-					test_invalid_num_scalers(&data, pipe, output);
+					      igt_crtc_name(crtc), igt_output_name(output))
+					test_invalid_num_scalers(&data, crtc->pipe, output);
 			}
 		}
 	}
-- 
2.52.0


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

* [PATCH i-g-t 04/15] tests/kms_color: Convert to for_each_crtc*()
  2026-01-30 10:52 [PATCH i-g-t 00/15] lib/kms: Start introducing for_each_crtc*() Ville Syrjala
                   ` (2 preceding siblings ...)
  2026-01-30 10:52 ` [PATCH i-g-t 03/15] tests/kms_plane_scaling: " Ville Syrjala
@ 2026-01-30 10:52 ` Ville Syrjala
  2026-01-30 14:08   ` Jani Nikula
  2026-01-30 10:52 ` [PATCH i-g-t 05/15] tests/intel/kms_pm_dc: Use for_each_crtc*() Ville Syrjala
                   ` (14 subsequent siblings)
  18 siblings, 1 reply; 42+ messages in thread
From: Ville Syrjala @ 2026-01-30 10:52 UTC (permalink / raw)
  To: igt-dev

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Convert tests/kms_color to use the new crtc based iterators
(over the old pipe based ones).

This is another test cased that proved too much for coccinelle
for whatever reason, so the conversion was done manually.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tests/kms_color.c | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/tests/kms_color.c b/tests/kms_color.c
index b2ca6975d6a5..a50793651c11 100644
--- a/tests/kms_color.c
+++ b/tests/kms_color.c
@@ -955,7 +955,7 @@ run_deep_color_tests_for_pipe(data_t *data, enum pipe p)
 static void
 run_invalid_tests_for_pipe(data_t *data)
 {
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	struct {
 		const char *name;
 		void (*test_t) (data_t *data, enum pipe pipe);
@@ -975,10 +975,10 @@ run_invalid_tests_for_pipe(data_t *data)
 	for (i = 0; i < ARRAY_SIZE(tests); i++) {
 		igt_describe_f("%s", tests[i].desc);
 		igt_subtest_with_dynamic_f("%s", tests[i].name) {
-			for_each_pipe(&data->display, pipe) {
-				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
-					prep_pipe(data, pipe);
-					tests[i].test_t(data, pipe);
+			for_each_crtc(&data->display, crtc) {
+				igt_dynamic_f("pipe-%s", igt_crtc_name(crtc)) {
+					prep_pipe(data, crtc->pipe);
+					tests[i].test_t(data, crtc->pipe);
 				}
 			}
 		}
@@ -988,7 +988,7 @@ run_invalid_tests_for_pipe(data_t *data)
 static void
 run_tests_for_pipe(data_t *data)
 {
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	static const struct {
 		const char *name;
 		bool (*test_t)(data_t*, igt_plane_t*);
@@ -1118,10 +1118,10 @@ run_tests_for_pipe(data_t *data)
 	for (i = 0; i < ARRAY_SIZE(gamma_degamma_tests); i++) {
 		igt_describe_f("%s", gamma_degamma_tests[i].desc);
 		igt_subtest_with_dynamic_f("%s", gamma_degamma_tests[i].name) {
-			for_each_pipe_with_valid_output(&data->display, pipe, data->output) {
-				igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe),
+			for_each_crtc_with_valid_output(&data->display, crtc, data->output) {
+				igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
 					      igt_output_name(data->output))
-					run_gamma_degamma_tests_for_pipe(data, pipe,
+					run_gamma_degamma_tests_for_pipe(data, crtc->pipe,
 									 gamma_degamma_tests[i].test_t);
 			}
 		}
@@ -1130,10 +1130,10 @@ run_tests_for_pipe(data_t *data)
 	for (i = 0; i < ARRAY_SIZE(ctm_tests); i++) {
 		igt_describe_f("%s", ctm_tests[i].desc);
 		igt_subtest_with_dynamic_f("%s", ctm_tests[i].name) {
-			for_each_pipe_with_valid_output(&data->display, pipe, data->output) {
-				igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe),
+			for_each_crtc_with_valid_output(&data->display, crtc, data->output) {
+				igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
 					      igt_output_name(data->output))
-					run_ctm_tests_for_pipe(data, pipe,
+					run_ctm_tests_for_pipe(data, crtc->pipe,
 							       ctm_tests[i].fb_colors,
 							       ctm_tests[i].ctm,
 							       ctm_tests[i].iter);
@@ -1148,8 +1148,8 @@ run_tests_for_pipe(data_t *data)
 
 	igt_describe("Verify that deep color works correctly");
 	igt_subtest_with_dynamic("deep-color") {
-		for_each_pipe(&data->display, pipe) {
-			run_deep_color_tests_for_pipe(data, pipe);
+		for_each_crtc(&data->display, crtc) {
+			run_deep_color_tests_for_pipe(data, crtc->pipe);
 
 			if (igt_run_in_simulation())
 				break;
-- 
2.52.0


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

* [PATCH i-g-t 05/15] tests/intel/kms_pm_dc: Use for_each_crtc*()
  2026-01-30 10:52 [PATCH i-g-t 00/15] lib/kms: Start introducing for_each_crtc*() Ville Syrjala
                   ` (3 preceding siblings ...)
  2026-01-30 10:52 ` [PATCH i-g-t 04/15] tests/kms_color: Convert to for_each_crtc*() Ville Syrjala
@ 2026-01-30 10:52 ` Ville Syrjala
  2026-01-30 14:10   ` Jani Nikula
  2026-01-30 10:52 ` [PATCH i-g-t 06/15] tests/kms_rotation_crc: " Ville Syrjala
                   ` (13 subsequent siblings)
  18 siblings, 1 reply; 42+ messages in thread
From: Ville Syrjala @ 2026-01-30 10:52 UTC (permalink / raw)
  To: igt-dev

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Convert tests/intel/kms_pm_dc to use the new crtc based iterators
(over the old pipe based ones).

Another case that proved too complex for coccinelle, so the conversion
was done manually.

test_deep_pkgc_state() is sligtly tricky since it uses the last
iterator value after the loop. But the 'edp_found' check should
make sure the crtc is valid there as well.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tests/intel/kms_pm_dc.c | 36 ++++++++++++++++--------------------
 1 file changed, 16 insertions(+), 20 deletions(-)

diff --git a/tests/intel/kms_pm_dc.c b/tests/intel/kms_pm_dc.c
index 4babf1341e0b..83dbac296335 100644
--- a/tests/intel/kms_pm_dc.c
+++ b/tests/intel/kms_pm_dc.c
@@ -123,20 +123,19 @@ static void set_output_on_pipe_b(data_t *data)
 {
 	igt_display_t *display = &data->display;
 	igt_output_t *output;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 
-	for_each_pipe_with_valid_output(display, pipe, output) {
+	for_each_crtc_with_valid_output(display, crtc, output) {
 		drmModeConnectorPtr c = output->config.connector;
 
 		/* DC5 with PIPE_B transaction */
-		if (pipe != PIPE_B)
+		if (crtc->pipe != PIPE_B)
 			continue;
 
 		if (c->connector_type != DRM_MODE_CONNECTOR_eDP)
 			continue;
 
-		igt_output_set_crtc(output,
-				    igt_crtc_for_pipe(output->display, pipe));
+		igt_output_set_crtc(output, crtc);
 		if (!intel_pipe_output_combo_valid(display))
 			continue;
 
@@ -151,18 +150,18 @@ static void setup_output(data_t *data)
 	igt_display_t *display = &data->display;
 	igt_output_t *output;
 	bool is_low_power;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 
-	for_each_pipe_with_valid_output(display, pipe, output) {
+	for_each_crtc_with_valid_output(display, crtc, output) {
 		drmModeConnectorPtr c = output->config.connector;
 
 		if (disp_ver >= 13) {
 			if (disp_ver == 20 || IS_BATTLEMAGE(data->devid) || IS_DG2(data->devid))
-				is_low_power = (pipe == PIPE_A);
+				is_low_power = (crtc->pipe == PIPE_A);
 			else
-				is_low_power = (pipe == PIPE_A || pipe == PIPE_B);
+				is_low_power = (crtc->pipe == PIPE_A || crtc->pipe == PIPE_B);
 		} else {
-			is_low_power = (pipe == PIPE_A);
+			is_low_power = (crtc->pipe == PIPE_A);
 		}
 
 		igt_skip_on_f(!is_low_power, "Low power pipe was not selected for the DC5 transaction.\n");
@@ -170,8 +169,7 @@ static void setup_output(data_t *data)
 		if (c->connector_type != DRM_MODE_CONNECTOR_eDP)
 			continue;
 
-		igt_output_set_crtc(output,
-				    igt_crtc_for_pipe(output->display, pipe));
+		igt_output_set_crtc(output, crtc);
 		data->output = output;
 		data->mode = igt_output_get_mode(output);
 
@@ -644,7 +642,7 @@ static void test_deep_pkgc_state(data_t *data)
 	time_t start = time(NULL);
 	time_t duration = (4 * SEC);
 	time_t delay;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	bool pkgc_flag = false;
 	bool flip = true, edp_found = false;
 
@@ -652,7 +650,7 @@ static void test_deep_pkgc_state(data_t *data)
 	igt_plane_t *primary;
 	igt_output_t *output = NULL;
 
-	for_each_pipe_with_valid_output(display, pipe, output) {
+	for_each_crtc_with_valid_output(display, crtc, output) {
 		if (output->config.connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
 
 			edp_found = true;
@@ -663,14 +661,12 @@ static void test_deep_pkgc_state(data_t *data)
 				 * TODO: Add check for vmin = vmax = flipline if VRR enabled
 				 * when KMD allows for such capability.
 				 */
-				igt_crtc_set_prop_value(igt_crtc_for_pipe(display, pipe),
-							    IGT_CRTC_VRR_ENABLED,
-							    false);
+				igt_crtc_set_prop_value(crtc, IGT_CRTC_VRR_ENABLED, false);
 				igt_assert(igt_display_try_commit_atomic(display,
 									 DRM_MODE_ATOMIC_ALLOW_MODESET,
 									 NULL) == 0);
 			}
-		break;
+			break;
 		}
 	}
 
@@ -681,7 +677,7 @@ static void test_deep_pkgc_state(data_t *data)
 
 	igt_display_reset(display);
 
-	igt_output_set_crtc(output, igt_crtc_for_pipe(output->display, pipe));
+	igt_output_set_crtc(output, crtc);
 	for_each_connector_mode(output) {
 		data->mode = &output->config.connector->modes[j__];
 		delay = (MSEC / (data->mode->vrefresh));
@@ -700,7 +696,7 @@ static void test_deep_pkgc_state(data_t *data)
 	igt_plane_set_fb(primary, &data->fb_rgb);
 	igt_display_commit(&data->display);
 	/* Wait for the vblank to sync the frame time */
-	igt_wait_for_vblank_count(igt_crtc_for_pipe(&data->display, pipe), 1);
+	igt_wait_for_vblank_count(crtc, 1);
 	pre_val = read_pkgc_counter(data->debugfs_root_fd);
 	/* Add a half-frame delay to ensure the flip occurs when the frame is active. */
 	usleep(delay * 0.5);
-- 
2.52.0


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

* [PATCH i-g-t 06/15] tests/kms_rotation_crc: Use for_each_crtc*()
  2026-01-30 10:52 [PATCH i-g-t 00/15] lib/kms: Start introducing for_each_crtc*() Ville Syrjala
                   ` (4 preceding siblings ...)
  2026-01-30 10:52 ` [PATCH i-g-t 05/15] tests/intel/kms_pm_dc: Use for_each_crtc*() Ville Syrjala
@ 2026-01-30 10:52 ` Ville Syrjala
  2026-01-30 14:11   ` Jani Nikula
  2026-01-30 10:52 ` [PATCH i-g-t 07/15] lib/kms: Use for_each_crtc_with_single_output() and for_each_crtc() Ville Syrjala
                   ` (12 subsequent siblings)
  18 siblings, 1 reply; 42+ messages in thread
From: Ville Syrjala @ 2026-01-30 10:52 UTC (permalink / raw)
  To: igt-dev

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Convert tests/kms_rotation_crc to use the new crtc based
iteratros (over the old pipe based stuff).

The conversion was done manually due to coccinelle not
wanting to cooperate with me for whatever random reason.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tests/kms_rotation_crc.c | 25 +++++++++++--------------
 1 file changed, 11 insertions(+), 14 deletions(-)

diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
index abd87508045e..4ba6a19b5862 100644
--- a/tests/kms_rotation_crc.c
+++ b/tests/kms_rotation_crc.c
@@ -587,7 +587,7 @@ static void test_plane_rotation(data_t *data, int plane_type, bool test_bad_form
 	igt_display_t *display = &data->display;
 	drmModeModeInfo *mode;
 	igt_output_t *output;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	int pipe_count = 0, connected_outputs = 0;
 	bool found = false;
 
@@ -603,14 +603,13 @@ static void test_plane_rotation(data_t *data, int plane_type, bool test_bad_form
 	for_each_connected_output(&data->display, output)
 		connected_outputs++;
 
-	for_each_pipe_with_valid_output(display, pipe, output) {
+	for_each_crtc_with_valid_output(display, crtc, output) {
 		igt_plane_t *plane;
 		int i, j, c;
 
 		igt_display_reset(display);
 
-		igt_output_set_crtc(output,
-				    igt_crtc_for_pipe(output->display, pipe));
+		igt_output_set_crtc(output, crtc);
 		if (!intel_pipe_output_combo_valid(display))
 			continue;
 
@@ -648,13 +647,12 @@ static void test_plane_rotation(data_t *data, int plane_type, bool test_bad_form
 			break;
 		pipe_count++;
 
-		igt_output_set_crtc(output,
-				    igt_crtc_for_pipe(output->display, pipe));
+		igt_output_set_crtc(output, crtc);
 
 		plane = igt_output_get_plane_type(output, plane_type);
 		igt_require(plane_rotation_requirements(data, plane));
 
-		prepare_crtc(data, output, pipe, plane, true);
+		prepare_crtc(data, output, crtc->pipe, plane, true);
 
 		for (i = 0; i < num_rectangle_types; i++) {
 			/* Unsupported on intel */
@@ -686,13 +684,13 @@ static void test_plane_rotation(data_t *data, int plane_type, bool test_bad_form
 					if (!test_format(data, &tested_formats, format))
 						continue;
 
-					test_single_case(data, pipe, output, plane, i,
+					test_single_case(data, crtc->pipe, output, plane, i,
 							 format, test_bad_format);
 				}
 
 				igt_vec_fini(&tested_formats);
 			} else {
-				test_single_case(data, pipe, output, plane, i,
+				test_single_case(data, crtc->pipe, output, plane, i,
 						 data->override_fmt, test_bad_format);
 			}
 		}
@@ -1349,17 +1347,16 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
 	 */
 	igt_describe("This test intends to check for fence leaks exhaustively");
 	igt_subtest_f("exhaust-fences") {
-		enum pipe pipe;
+		igt_crtc_t *crtc;
 		igt_output_t *output;
 
 		igt_require_intel(data.gfx_fd);
 		igt_display_require_output(&data.display);
 
-		for_each_pipe_with_valid_output(&data.display, pipe, output) {
-			igt_plane_t *primary = &igt_crtc_for_pipe(&data.display,
-								  pipe)->planes[0];
+		for_each_crtc_with_valid_output(&data.display, crtc, output) {
+			igt_plane_t *primary = &crtc->planes[0];
 
-			test_plane_rotation_exhaust_fences(&data, pipe, output, primary);
+			test_plane_rotation_exhaust_fences(&data, crtc->pipe, output, primary);
 			break;
 		}
 	}
-- 
2.52.0


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

* [PATCH i-g-t 07/15] lib/kms: Use for_each_crtc_with_single_output() and for_each_crtc()
  2026-01-30 10:52 [PATCH i-g-t 00/15] lib/kms: Start introducing for_each_crtc*() Ville Syrjala
                   ` (5 preceding siblings ...)
  2026-01-30 10:52 ` [PATCH i-g-t 06/15] tests/kms_rotation_crc: " Ville Syrjala
@ 2026-01-30 10:52 ` Ville Syrjala
  2026-01-30 14:15   ` Jani Nikula
  2026-01-30 10:52 ` [PATCH i-g-t 08/15] lib/kms: Use for_each_crtc_with_single_output(), part 1 Ville Syrjala
                   ` (11 subsequent siblings)
  18 siblings, 1 reply; 42+ messages in thread
From: Ville Syrjala @ 2026-01-30 10:52 UTC (permalink / raw)
  To: igt-dev

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Convert some uses of for_each_pipe*() to for_each_crtc*().
Take care of the cases where the test using the same iterator
for both for_each_crtc_with_single_output() and for_each_crtc().

Mostly done with cocci, though in a rather ugly way. Either
it tried to convert too much unrelate junk or it flat our refused
to convert the stuff I wanted. In the end I had to leave out
the iterator variable declaration changes from the semantic patch
and instead I fixed those up manually:
 #include "scripts/iterators.cocci"

@find1@
typedef igt_crtc_t;
iterator name for_each_pipe_with_single_output;
iterator name for_each_crtc_with_single_output;
iterator name for_each_pipe;
iterator name for_each_crtc;
expression DISPLAY, OUTPUT;
identifier PIPE;
type T;
@@
T PIPE;
...
igt_fixture() {
...
for_each_pipe(DISPLAY, PIPE) { ... }
...
}
<+...
for_each_pipe_with_single_output(DISPLAY, PIPE, OUTPUT) { ... }
...+>

@depends on find1@
expression DISPLAY, OUTPUT;
identifier find1.PIPE;
@@
- for_each_pipe_with_single_output(DISPLAY, PIPE, OUTPUT)
+ for_each_crtc_with_single_output(DISPLAY, crtc, OUTPUT)
{
<...
(
- igt_crtc_for_pipe(..., PIPE)
+ crtc
|
- kmstest_pipe_name(PIPE)
+ igt_crtc_name(crtc)
|
- PIPE
+ crtc->pipe
)
...>
}

@depends on find1@
expression DISPLAY;
identifier find1.PIPE;
@@
igt_fixture() { ...
- for_each_pipe(DISPLAY, PIPE)
+ for_each_crtc(DISPLAY, crtc)
{
<...
(
- igt_crtc_for_pipe(..., PIPE)
+ crtc
|
- kmstest_pipe_name(PIPE)
+ igt_crtc_name(crtc)
|
- PIPE
+ crtc->pipe
)
...>
}
...}

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tests/intel/kms_busy.c     | 59 +++++++++++++++---------------
 tests/kms_pipe_crc_basic.c | 74 ++++++++++++++++++++++++--------------
 2 files changed, 78 insertions(+), 55 deletions(-)

diff --git a/tests/intel/kms_busy.c b/tests/intel/kms_busy.c
index f78a40891539..e3c2be0b4e41 100644
--- a/tests/intel/kms_busy.c
+++ b/tests/intel/kms_busy.c
@@ -413,10 +413,10 @@ const char *help_str =
 int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 {
 	igt_display_t display = { .drm_fd = -1, .n_crtcs = IGT_MAX_PIPES };
-
-	enum pipe pipe, active_pipes[IGT_MAX_PIPES];
+	enum pipe active_pipes[IGT_MAX_PIPES];
 	igt_output_t *output;
 	uint32_t last_pipe = 0;
+	igt_crtc_t *crtc;
 	int i;
 	struct {
 		const char *name;
@@ -445,8 +445,8 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 		igt_display_require_output(&display);
 
 		/* Get active pipes. */
-		for_each_pipe(&display, pipe)
-			active_pipes[last_pipe++] = pipe;
+		for_each_crtc(&display, crtc)
+			active_pipes[last_pipe++] = crtc->pipe;
 		last_pipe--;
 	}
 
@@ -454,14 +454,14 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 
 	igt_describe("Test for basic check of KMS ABI with busy framebuffers.");
 	igt_subtest_with_dynamic("basic") { /* just run on the first pipe */
-		for_each_pipe_with_single_output(&display, pipe, output) {
-			if (!pipe_output_combo_valid(&display, output, pipe))
+		for_each_crtc_with_single_output(&display, crtc, output) {
+			if (!pipe_output_combo_valid(&display, output, crtc->pipe))
 				continue;
 
 			igt_dynamic("flip")
-				test_flip(&display, pipe, output, false);
+				test_flip(&display, crtc->pipe, output, false);
 			igt_dynamic("modeset")
-				test_flip(&display, pipe, output, true);
+				test_flip(&display, crtc->pipe, output, true);
 			break;
 		}
 	}
@@ -470,18 +470,18 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 		igt_hang_t hang = igt_allow_hang(display.drm_fd, 0, 0);
 		errno = 0;
 
-		for_each_pipe_with_single_output(&display, pipe, output) {
-			if (!pipe_output_combo_valid(&display, output, pipe))
+		for_each_crtc_with_single_output(&display, crtc, output) {
+			if (!pipe_output_combo_valid(&display, output, crtc->pipe))
 				continue;
 
-			if (!all_pipes && pipe != active_pipes[0] &&
-					  pipe != active_pipes[last_pipe])
+			if (!all_pipes && crtc->pipe != active_pipes[0] &&
+					  crtc->pipe != active_pipes[last_pipe])
 				continue;
 
-			igt_dynamic_f("flip-pipe-%s", kmstest_pipe_name(pipe))
-				test_flip(&display, pipe, output, false);
-			igt_dynamic_f("modeset-pipe-%s", kmstest_pipe_name(pipe))
-				test_flip(&display, pipe, output, true);
+			igt_dynamic_f("flip-pipe-%s", igt_crtc_name(crtc))
+				test_flip(&display, crtc->pipe, output, false);
+			igt_dynamic_f("modeset-pipe-%s", igt_crtc_name(crtc))
+				test_flip(&display, crtc->pipe, output, true);
 		}
 
 		igt_disallow_hang(display.drm_fd, hang);
@@ -491,16 +491,17 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 		igt_hang_t hang = igt_allow_hang(display.drm_fd, 0, 0);
 		errno = 0;
 
-		for_each_pipe_with_single_output(&display, pipe, output) {
-			if (!pipe_output_combo_valid(&display, output, pipe))
+		for_each_crtc_with_single_output(&display, crtc, output) {
+			if (!pipe_output_combo_valid(&display, output, crtc->pipe))
 				continue;
 
-			if (!all_pipes && pipe != active_pipes[0] &&
-					  pipe != active_pipes[last_pipe])
+			if (!all_pipes && crtc->pipe != active_pipes[0] &&
+					  crtc->pipe != active_pipes[last_pipe])
 				continue;
 
-			igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe))
-				test_pageflip_modeset_hang(&display, output, pipe);
+			igt_dynamic_f("pipe-%s", igt_crtc_name(crtc))
+				test_pageflip_modeset_hang(&display, output,
+							   crtc->pipe);
 		}
 
 		igt_disallow_hang(display.drm_fd, hang);
@@ -524,19 +525,21 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 
 			hang = igt_allow_hang(display.drm_fd, 0, 0);
 
-			for_each_pipe_with_single_output(&display, pipe, output) {
-				if (!pipe_output_combo_valid(&display, output, pipe))
+			for_each_crtc_with_single_output(&display, crtc,
+							 output) {
+				if (!pipe_output_combo_valid(&display, output, crtc->pipe))
 					continue;
 
-				if (!all_pipes && pipe != active_pipes[0] &&
-						  pipe != active_pipes[last_pipe])
+				if (!all_pipes && crtc->pipe != active_pipes[0] &&
+						  crtc->pipe != active_pipes[last_pipe])
 					continue;
 
-				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
+				igt_dynamic_f("pipe-%s", igt_crtc_name(crtc)) {
 					if (tests[i].reset)
 						igt_set_module_param_int(display.drm_fd, "force_reset_modeset_test", 1);
 
-					test_hang(&display, pipe, output,
+					test_hang(&display, crtc->pipe,
+						  output,
 						  tests[i].modeset, tests[i].hang_newfb);
 
 					if (tests[i].reset)
diff --git a/tests/kms_pipe_crc_basic.c b/tests/kms_pipe_crc_basic.c
index fb2f5f8ebe96..8cca7e9e40a7 100644
--- a/tests/kms_pipe_crc_basic.c
+++ b/tests/kms_pipe_crc_basic.c
@@ -370,8 +370,8 @@ const char *help_str =
 
 int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 {
-	enum pipe pipe;
 	igt_output_t *output;
+	igt_crtc_t *crtc;
 	struct {
 		const char *name;
 		unsigned flags;
@@ -407,8 +407,8 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 		data.debugfs = igt_debugfs_dir(data.drm_fd);
 
 		/* Get active pipes. */
-		for_each_pipe(&data.display, pipe)
-			active_pipes[last_pipe++] = pipe;
+		for_each_crtc(&data.display, crtc)
+			active_pipes[last_pipe++] = crtc->pipe;
 		last_pipe--;
 	}
 
@@ -419,18 +419,23 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 	for (i = 0; i < ARRAY_SIZE(tests); i++) {
 		igt_describe(tests[i].desc);
 		igt_subtest_with_dynamic(tests[i].name) {
-			for_each_pipe_with_single_output(&data.display, pipe, output) {
-				if (simulation_constraint(pipe))
+			for_each_crtc_with_single_output(&data.display, crtc,
+							 output) {
+				if (simulation_constraint(crtc->pipe))
 					continue;
 
-				if(!pipe_output_combo_valid(&data.display, pipe, output))
+				if(!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 					continue;
 
-				igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), output->name) {
+				igt_dynamic_f("pipe-%s-%s",
+					      igt_crtc_name(crtc),
+					      output->name) {
 					if (tests[i].flags & TEST_SUSPEND) {
 						enum igt_suspend_test test = SUSPEND_TEST_NONE;
 
-						test_read_crc(&data, pipe, output, 0);
+						test_read_crc(&data,
+							      crtc->pipe,
+							      output, 0);
 
 						/* rtcwake cmd is not supported on MTK devices */
 						if (is_mtk_device(data.drm_fd))
@@ -439,17 +444,26 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 						igt_system_suspend_autoresume(SUSPEND_STATE_MEM,
 									      test);
 
-						test_read_crc(&data, pipe, output, 0);
+						test_read_crc(&data,
+							      crtc->pipe,
+							      output, 0);
 					} else if (tests[i].flags & TEST_HANG) {
 						igt_hang_t hang = igt_allow_hang(data.drm_fd, 0, 0);
 
-						test_read_crc(&data, pipe, output, 0);
+						test_read_crc(&data,
+							      crtc->pipe,
+							      output, 0);
 						igt_force_gpu_reset(data.drm_fd);
-						test_read_crc(&data, pipe, output, 0);
+						test_read_crc(&data,
+							      crtc->pipe,
+							      output, 0);
 
 						igt_disallow_hang(data.drm_fd, hang);
 					} else {
-						test_read_crc(&data, pipe, output, tests[i].flags);
+						test_read_crc(&data,
+							      crtc->pipe,
+							      output,
+							      tests[i].flags);
 					}
 				}
 			}
@@ -459,43 +473,49 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 	igt_describe("Check that disabling CRCs on a CRTC after having disabled the CRTC "
 		     "does not cause issues.");
 	igt_subtest_with_dynamic("disable-crc-after-crtc") {
-		for_each_pipe_with_single_output(&data.display, pipe, output) {
-			if (simulation_constraint(pipe))
+		for_each_crtc_with_single_output(&data.display, crtc, output) {
+			if (simulation_constraint(crtc->pipe))
 				continue;
 
-			if(!pipe_output_combo_valid(&data.display, pipe, output))
+			if(!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 				continue;
 
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), output->name)
-				test_disable_crc_after_crtc(&data, pipe, output);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      output->name)
+				test_disable_crc_after_crtc(&data, crtc->pipe,
+							    output);
 		}
 	}
 
 	igt_describe("Basic sanity check for CRC mismatches with XR24 format");
 	igt_subtest_with_dynamic("compare-crc-sanitycheck-xr24") {
-		for_each_pipe_with_single_output(&data.display, pipe, output) {
-			if (simulation_constraint(pipe))
+		for_each_crtc_with_single_output(&data.display, crtc, output) {
+			if (simulation_constraint(crtc->pipe))
 				continue;
 
-			if(!pipe_output_combo_valid(&data.display, pipe, output))
+			if(!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 				continue;
 
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), output->name)
-				test_compare_crc(&data, pipe, output, DRM_FORMAT_XRGB8888);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      output->name)
+				test_compare_crc(&data, crtc->pipe, output,
+						 DRM_FORMAT_XRGB8888);
 		}
 	}
 
 	igt_describe("Basic sanity check for CRC mismatches with NV12 format");
 	igt_subtest_with_dynamic("compare-crc-sanitycheck-nv12") {
-		for_each_pipe_with_single_output(&data.display, pipe, output) {
-			if (simulation_constraint(pipe))
+		for_each_crtc_with_single_output(&data.display, crtc, output) {
+			if (simulation_constraint(crtc->pipe))
 				continue;
 
-			if(!pipe_output_combo_valid(&data.display, pipe, output))
+			if(!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 				continue;
 
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), output->name)
-				test_compare_crc(&data, pipe, output, DRM_FORMAT_NV12);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      output->name)
+				test_compare_crc(&data, crtc->pipe, output,
+						 DRM_FORMAT_NV12);
 		}
 	}
 
-- 
2.52.0


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

* [PATCH i-g-t 08/15] lib/kms: Use for_each_crtc_with_single_output(), part 1
  2026-01-30 10:52 [PATCH i-g-t 00/15] lib/kms: Start introducing for_each_crtc*() Ville Syrjala
                   ` (6 preceding siblings ...)
  2026-01-30 10:52 ` [PATCH i-g-t 07/15] lib/kms: Use for_each_crtc_with_single_output() and for_each_crtc() Ville Syrjala
@ 2026-01-30 10:52 ` Ville Syrjala
  2026-01-30 14:16   ` Jani Nikula
  2026-01-30 10:52 ` [PATCH i-g-t 09/15] lib/kms: Use for_each_crtc_with_single_output(), part 2 Ville Syrjala
                   ` (10 subsequent siblings)
  18 siblings, 1 reply; 42+ messages in thread
From: Ville Syrjala @ 2026-01-30 10:52 UTC (permalink / raw)
  To: igt-dev

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Convert some uses of for_each_pipe_with_single_output()
to for_each_crtc_with_single_output(). Take care of the
cases where we (presumably) still have to keep some
kind of 'data.pipe' thingy still up to date.

Eventually we should probably replace 'data.pipe' with
'data.crtc' but I didn't want to go that far here.

Done with cocci:
 #include "scripts/iterators.cocci"

@change@
iterator name for_each_pipe_with_single_output;
iterator name for_each_crtc_with_single_output;
typedef igt_crtc_t;
identifier PIPE;
expression DISPLAY, OUTPUT, X;
@@
- for_each_pipe_with_single_output(DISPLAY, X.PIPE, OUTPUT)
+ for_each_crtc_with_single_output(DISPLAY, crtc, OUTPUT)
{
+ X.PIPE = crtc->pipe;
<...
(
- igt_crtc_for_pipe(..., X.PIPE)
+ crtc
|
- kmstest_pipe_name(X.PIPE)
+ igt_crtc_name(crtc)
|
- X.PIPE
+ crtc->pipe
)
...>
}

@depends on change@
identifier FUNC;
@@
FUNC(...)
{
+ igt_crtc_t *crtc;
<+...
for_each_crtc_with_single_output(...) { ... }
...+>
}

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tests/kms_cursor_edge_walk.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/tests/kms_cursor_edge_walk.c b/tests/kms_cursor_edge_walk.c
index eaf4c59b8a19..86577fbc53d8 100644
--- a/tests/kms_cursor_edge_walk.c
+++ b/tests/kms_cursor_edge_walk.c
@@ -344,6 +344,7 @@ static const char *help_str =
 
 int igt_main_args("", long_opts, help_str, opt_handler, &data)
 {
+	igt_crtc_t *crtc;
 	struct {
 		const char *name;
 		unsigned flags;
@@ -394,21 +395,24 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
 					data.curw, data.curh, tests[i].name);
 			igt_subtest_with_dynamic_f("%dx%d-%s", data.curw,
 						   data.curh, tests[i].name) {
-				for_each_pipe_with_single_output(&data.display, data.pipe, data.output) {
-					if (!extended && data.pipe != active_pipes[0] &&
-					    data.pipe != active_pipes[last_pipe])
+				for_each_crtc_with_single_output(&data.display,
+								 crtc,
+								 data.output) {
+					data.pipe = crtc->pipe;
+					if (!extended && crtc->pipe != active_pipes[0] &&
+					    crtc->pipe != active_pipes[last_pipe])
 						continue;
 
 					igt_display_reset(&data.display);
 					igt_output_set_crtc(data.output,
-							    igt_crtc_for_pipe(data.output->display, data.pipe));
+							    crtc);
 					if (!intel_pipe_output_combo_valid(&data.display))
 						continue;
 
 					igt_output_set_crtc(data.output, NULL);
 
 					igt_dynamic_f("pipe-%s-%s",
-						      kmstest_pipe_name(data.pipe),
+						      igt_crtc_name(crtc),
 						      data.output->name)
 						test_crtc(&data, tests[i].flags);
 				}
-- 
2.52.0


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

* [PATCH i-g-t 09/15] lib/kms: Use for_each_crtc_with_single_output(), part 2
  2026-01-30 10:52 [PATCH i-g-t 00/15] lib/kms: Start introducing for_each_crtc*() Ville Syrjala
                   ` (7 preceding siblings ...)
  2026-01-30 10:52 ` [PATCH i-g-t 08/15] lib/kms: Use for_each_crtc_with_single_output(), part 1 Ville Syrjala
@ 2026-01-30 10:52 ` Ville Syrjala
  2026-01-30 14:19   ` Jani Nikula
  2026-01-30 10:52 ` [PATCH i-g-t 10/15] lib/kms: Use for_each_crtc_with_single_output(), part 3 Ville Syrjala
                   ` (9 subsequent siblings)
  18 siblings, 1 reply; 42+ messages in thread
From: Ville Syrjala @ 2026-01-30 10:52 UTC (permalink / raw)
  To: igt-dev

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Convert more of the for_each_pipe_with_single_output() uses
over to for_each_crtc_with_single_output(). This covers the
simple use cases.

Done with cocci:
 #include "scripts/iterators.cocci"

@find@
typedef igt_crtc_t;
iterator name for_each_pipe_with_single_output;
iterator name for_each_crtc_with_single_output;
expression DISPLAY, OUTPUT;
identifier PIPE;
type T;
@@
(
- T PIPE;
+ igt_crtc_t *crtc;
|
- T PIPE = PIPE_NONE;
+ igt_crtc_t *crtc;
)
<+...
for_each_pipe_with_single_output(DISPLAY, PIPE, OUTPUT) { ... }
...+>

@change depends on find@
expression DISPLAY, OUTPUT;
identifier find.PIPE;
@@
- for_each_pipe_with_single_output(DISPLAY, PIPE, OUTPUT)
+ for_each_crtc_with_single_output(DISPLAY, crtc, OUTPUT)
{
<...
(
- igt_crtc_for_pipe(..., PIPE)
+ crtc
|
- kmstest_pipe_name(PIPE)
+ igt_crtc_name(crtc)
|
- PIPE
+ crtc->pipe
)
...>
}

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tests/amdgpu/amd_cursor_overlay.c | 16 ++++++----
 tests/kms_color_pipeline.c        | 12 ++++----
 tests/kms_plane.c                 |  8 ++---
 tests/kms_plane_alpha_blend.c     | 24 +++++++++------
 tests/kms_plane_cursor.c          | 14 +++++----
 tests/kms_properties.c            | 22 +++++++-------
 tests/kms_rmfb.c                  | 10 +++----
 tests/kms_universal_plane.c       | 49 ++++++++++++++++++-------------
 8 files changed, 89 insertions(+), 66 deletions(-)

diff --git a/tests/amdgpu/amd_cursor_overlay.c b/tests/amdgpu/amd_cursor_overlay.c
index 76c3003ca432..1d8ffcc86e1d 100644
--- a/tests/amdgpu/amd_cursor_overlay.c
+++ b/tests/amdgpu/amd_cursor_overlay.c
@@ -400,7 +400,7 @@ int igt_main()
 {
 	static const int cursor_sizes[] = { 64, 128, 256 };
 	data_t data = { .max_curw = 64, .max_curh = 64 };
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	igt_output_t *output;
 	igt_display_t *display;
 	int i, j, available_overlay_planes;
@@ -478,13 +478,15 @@ int igt_main()
 							DRM_FORMAT_NV12,
 							DRM_FORMAT_MOD_LINEAR));
 
-			for_each_pipe_with_single_output(&data.display, pipe, output) {
+			for_each_crtc_with_single_output(&data.display, crtc,
+							 output) {
 
 				igt_display_reset(display);
 				igt_output_set_crtc(output,
-					igt_crtc_for_pipe(output->display, pipe));
+					crtc);
 
-				available_overlay_planes = get_overlay_planes_count(display, pipe);
+				available_overlay_planes = get_overlay_planes_count(display,
+										    crtc->pipe);
 
 				/* Require at least one overlay plane. */
 				if (!available_overlay_planes)
@@ -500,13 +502,15 @@ int igt_main()
 					igt_skip("%s subtest requires 3 overlay planes with a supported DCN.\n",
 						 tests[i].name);
 
-				test_init(&data, pipe, output, tests[i].flags, available_overlay_planes);
+				test_init(&data, crtc->pipe, output,
+					  tests[i].flags,
+					  available_overlay_planes);
 
 				for (j = 0; j < ARRAY_SIZE(cursor_sizes); j++) {
 					int size = cursor_sizes[j];
 
 					igt_dynamic_f("pipe-%s-%s-size-%d",
-						      kmstest_pipe_name(pipe),
+						      igt_crtc_name(crtc),
 						      igt_output_name(output),
 						      size)
 						test_cursor(&data, size, tests[i].flags, tests[i].scale_factor);
diff --git a/tests/kms_color_pipeline.c b/tests/kms_color_pipeline.c
index bf8c4734b5fd..1e272671f63d 100644
--- a/tests/kms_color_pipeline.c
+++ b/tests/kms_color_pipeline.c
@@ -155,7 +155,7 @@ static bool test_plane_colorops(data_t *data,
 static void
 run_tests_for_plane(data_t *data)
 {
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	igt_output_t *output = NULL;
 	static const color_t colors_rgb[] = {
 	        { 1.0, 0.0, 0.0 },
@@ -276,20 +276,22 @@ run_tests_for_plane(data_t *data)
 	for (int i = 0; i < ARRAY_SIZE(plane_colorops_tests); i++) {
 		igt_describe_f("Test plane color pipeline with colorops: %s", plane_colorops_tests[i].name);
 		igt_subtest_with_dynamic_f("plane-%s", plane_colorops_tests[i].name) {
-			for_each_pipe_with_single_output(&data->display, pipe, output) {
+			for_each_crtc_with_single_output(&data->display, crtc,
+							 output) {
 				data->output = output;
 
-				if (!pipe_output_combo_valid(data, pipe))
+				if (!pipe_output_combo_valid(data, crtc->pipe))
 					continue;
 
-				test_setup(data, pipe);
+				test_setup(data, crtc->pipe);
 
 				if (!igt_plane_has_prop(data->primary, IGT_PLANE_COLOR_PIPELINE)) {
 					test_cleanup(data);
 					continue;
 				}
 
-				igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe),
+				igt_dynamic_f("pipe-%s-%s",
+					       igt_crtc_name(crtc),
 					       igt_output_name(data->output)) {
 					data->color_depth = 8;
 					data->drm_format = DRM_FORMAT_XRGB8888;
diff --git a/tests/kms_plane.c b/tests/kms_plane.c
index 21d80847cfd1..2be10f03280a 100644
--- a/tests/kms_plane.c
+++ b/tests/kms_plane.c
@@ -1467,19 +1467,19 @@ static bool is_pipe_limit_reached(int count)
 
 static void run_test(data_t *data, void (*test)(data_t *, enum pipe))
 {
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	int count = 0;
 
-	for_each_pipe_with_single_output(&data->display, pipe, data->output) {
+	for_each_crtc_with_single_output(&data->display, crtc, data->output) {
 		igt_display_reset(&data->display);
 
 		igt_output_set_crtc(data->output,
-				    igt_crtc_for_pipe(data->output->display, pipe));
+				    crtc);
 		if (!intel_pipe_output_combo_valid(&data->display))
 			continue;
 
 		igt_output_set_crtc(data->output, NULL);
-		test(data, pipe);
+		test(data, crtc->pipe);
 
 		if (is_pipe_limit_reached(++count))
 			break;
diff --git a/tests/kms_plane_alpha_blend.c b/tests/kms_plane_alpha_blend.c
index c3d53c66c02a..eaa4f8e2ef1b 100644
--- a/tests/kms_plane_alpha_blend.c
+++ b/tests/kms_plane_alpha_blend.c
@@ -691,31 +691,37 @@ static bool pipe_check(data_t *data, enum pipe pipe,
 static void run_subtests(data_t *data)
 {
 	igt_output_t *output;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 
 	for (int i = 0; i < ARRAY_SIZE(subtests); i++) {
 		igt_describe_f("%s\n", subtests[i].desc);
 
 		igt_subtest_with_dynamic(subtests[i].name) {
-			for_each_pipe_with_single_output(&data->display, pipe, output) {
+			for_each_crtc_with_single_output(&data->display, crtc,
+							 output) {
 				if (!extended &&
-				    pipe != active_pipes[0] &&
-				    pipe != active_pipes[last_pipe])
+				    crtc->pipe != active_pipes[0] &&
+				    crtc->pipe != active_pipes[last_pipe])
 					continue;
 
 				igt_display_reset(&data->display);
 
 				igt_output_set_crtc(output,
-						    igt_crtc_for_pipe(output->display, pipe));
+						    crtc);
 				if (!intel_pipe_output_combo_valid(&data->display))
 					continue;
 
-				prepare_crtc(data, output, pipe);
-				if (!pipe_check(data, pipe, subtests[i].blend, subtests[i].must_multiply))
+				prepare_crtc(data, output, crtc->pipe);
+				if (!pipe_check(data, crtc->pipe, subtests[i].blend, subtests[i].must_multiply))
 					continue;
 
-				igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), output->name)
-					run_test_on_pipe_planes(data, pipe, output, subtests[i].blend,
+				igt_dynamic_f("pipe-%s-%s",
+					      igt_crtc_name(crtc),
+					      output->name)
+					run_test_on_pipe_planes(data,
+								crtc->pipe,
+								output,
+								subtests[i].blend,
 								subtests[i].must_multiply, subtests[i].test);
 			}
 		}
diff --git a/tests/kms_plane_cursor.c b/tests/kms_plane_cursor.c
index 60e757fc701b..8095154718bc 100644
--- a/tests/kms_plane_cursor.c
+++ b/tests/kms_plane_cursor.c
@@ -290,7 +290,7 @@ int igt_main()
 {
 	static const int cursor_sizes[] = { 64, 128, 256 };
 	data_t data = { .max_curw = 64, .max_curh = 64 };
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	igt_output_t *output;
 	igt_display_t *display;
 	int i, j;
@@ -329,26 +329,28 @@ int igt_main()
 	for (i = 0; i < ARRAY_SIZE(tests); i++) {
 		igt_describe_f("%s", tests[i].desc);
 		igt_subtest_with_dynamic_f("%s", tests[i].name) {
-			for_each_pipe_with_single_output(&data.display, pipe, output) {
+			for_each_crtc_with_single_output(&data.display, crtc,
+							 output) {
 				if ((tests[i].flags & TEST_OVERLAY) &&
-				    !igt_crtc_get_plane_type(igt_crtc_for_pipe(&data.display, pipe),
+				    !igt_crtc_get_plane_type(crtc,
 							     DRM_PLANE_TYPE_OVERLAY))
 					continue;
 
 				igt_display_reset(display);
 
 				igt_output_set_crtc(output,
-						    igt_crtc_for_pipe(output->display, pipe));
+						    crtc);
 				if (!intel_pipe_output_combo_valid(display))
 					continue;
 
-				test_init(&data, pipe, output, tests[i].flags);
+				test_init(&data, crtc->pipe, output,
+					  tests[i].flags);
 
 				for (j = 0; j < ARRAY_SIZE(cursor_sizes); j++) {
 					int size = cursor_sizes[j];
 
 					igt_dynamic_f("pipe-%s-%s-size-%d",
-						      kmstest_pipe_name(pipe),
+						      igt_crtc_name(crtc),
 						      igt_output_name(output),
 						      size)
 						test_cursor(&data, size, tests[i].flags);
diff --git a/tests/kms_properties.c b/tests/kms_properties.c
index 62e936bc5e51..1d46bca52114 100644
--- a/tests/kms_properties.c
+++ b/tests/kms_properties.c
@@ -348,39 +348,41 @@ static void colorop_properties(igt_display_t *display, bool atomic)
 static void plane_properties(igt_display_t *display, bool atomic)
 {
 	igt_output_t *output;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 
-	for_each_pipe_with_single_output(display, pipe, output) {
+	for_each_crtc_with_single_output(display, crtc, output) {
 		igt_display_reset(display);
 
 		igt_output_set_crtc(output,
-				    igt_crtc_for_pipe(output->display, pipe));
+				    crtc);
 		if (!intel_pipe_output_combo_valid(display))
 			continue;
 
-		igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe),
+		igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
 			      igt_output_name(output)) {
-			run_plane_property_tests(display, pipe, output, atomic);
+			run_plane_property_tests(display, crtc->pipe, output,
+						 atomic);
 		}
 	}
 }
 
 static void crtc_properties(igt_display_t *display, bool atomic)
 {
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	igt_output_t *output;
 
-	for_each_pipe_with_single_output(display, pipe, output) {
+	for_each_crtc_with_single_output(display, crtc, output) {
 		igt_display_reset(display);
 
 		igt_output_set_crtc(output,
-				    igt_crtc_for_pipe(output->display, pipe));
+				    crtc);
 		if (!intel_pipe_output_combo_valid(display))
 			continue;
 
-		igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe),
+		igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
 			      igt_output_name(output)) {
-			run_crtc_property_tests(display, pipe, output, atomic);
+			run_crtc_property_tests(display, crtc->pipe, output,
+						atomic);
 		}
 	}
 }
diff --git a/tests/kms_rmfb.c b/tests/kms_rmfb.c
index d4e0b519bbc4..e71d1b9a6fc4 100644
--- a/tests/kms_rmfb.c
+++ b/tests/kms_rmfb.c
@@ -175,20 +175,20 @@ static void
 run_rmfb_test(struct rmfb_data *data, bool reopen)
 {
 	igt_output_t *output;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	igt_display_t *display = &data->display;
 
-	for_each_pipe_with_single_output(display, pipe, output) {
+	for_each_crtc_with_single_output(display, crtc, output) {
 		igt_display_reset(display);
 
 		igt_output_set_crtc(output,
-				    igt_crtc_for_pipe(output->display, pipe));
+				    crtc);
 		if (!intel_pipe_output_combo_valid(display))
 			continue;
 
-		igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe),
+		igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
 			      igt_output_name(output))
-			test_rmfb(data, output, pipe, reopen);
+			test_rmfb(data, output, crtc->pipe, reopen);
 	}
 }
 
diff --git a/tests/kms_universal_plane.c b/tests/kms_universal_plane.c
index 16409a4a55e0..33567597fa88 100644
--- a/tests/kms_universal_plane.c
+++ b/tests/kms_universal_plane.c
@@ -833,62 +833,69 @@ static void
 run_tests(data_t *data)
 {
 	igt_output_t *output;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 
 	igt_describe("Check the switching between different primary plane fbs with CRTC off");
 	igt_subtest_with_dynamic("universal-plane-functional") {
-		for_each_pipe_with_single_output(&data->display, pipe, output) {
-			if (!pipe_output_combo_valid(&data->display, pipe, output))
+		for_each_crtc_with_single_output(&data->display, crtc, output) {
+			if (!pipe_output_combo_valid(&data->display, crtc->pipe, output))
 				continue;
 
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
-				functional_test_pipe(data, pipe, output);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output))
+				functional_test_pipe(data, crtc->pipe, output);
 		}
 	}
 
 	igt_describe("Test for scale-up or scale-down using universal plane API without covering CRTC");
 	igt_subtest_with_dynamic("universal-plane-sanity") {
-		for_each_pipe_with_single_output(&data->display, pipe, output) {
-			if (!pipe_output_combo_valid(&data->display, pipe, output))
+		for_each_crtc_with_single_output(&data->display, crtc, output) {
+			if (!pipe_output_combo_valid(&data->display, crtc->pipe, output))
 				continue;
 
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
-				sanity_test_pipe(data, pipe, output);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output))
+				sanity_test_pipe(data, crtc->pipe, output);
 		}
 	}
 
 	igt_describe("Check pageflips while primary plane is disabled before IOCTL or between IOCTL"
 		     " and pageflip execution");
 	igt_subtest_with_dynamic("disable-primary-vs-flip") {
-		for_each_pipe_with_single_output(&data->display, pipe, output) {
-			if (!pipe_output_combo_valid(&data->display, pipe, output))
+		for_each_crtc_with_single_output(&data->display, crtc, output) {
+			if (!pipe_output_combo_valid(&data->display, crtc->pipe, output))
 				continue;
 
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
-				pageflip_test_pipe(data, pipe, output);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output))
+				pageflip_test_pipe(data, crtc->pipe, output);
 		}
 	}
 
 	igt_describe("Check for cursor leaks after performing cursor operations");
 	igt_subtest_with_dynamic("cursor-fb-leak") {
-		for_each_pipe_with_single_output(&data->display, pipe, output) {
-			if (!pipe_output_combo_valid(&data->display, pipe, output))
+		for_each_crtc_with_single_output(&data->display, crtc, output) {
+			if (!pipe_output_combo_valid(&data->display, crtc->pipe, output))
 				continue;
 
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
-				cursor_leak_test_pipe(data, pipe, output);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output))
+				cursor_leak_test_pipe(data, crtc->pipe,
+						      output);
 		}
 	}
 
 	igt_describe("Check if pageflip succeeds in windowed setting");
 	igt_subtest_with_dynamic("universal-plane-pageflip-windowed") {
 		igt_require(is_intel_device(data->drm_fd) && data->display_ver >= 9);
-		for_each_pipe_with_single_output(&data->display, pipe, output) {
-			if (!pipe_output_combo_valid(&data->display, pipe, output))
+		for_each_crtc_with_single_output(&data->display, crtc, output) {
+			if (!pipe_output_combo_valid(&data->display, crtc->pipe, output))
 				continue;
 
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
-				pageflip_win_test_pipe(data, pipe, output);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output))
+				pageflip_win_test_pipe(data, crtc->pipe,
+						       output);
 		}
 	}
 }
-- 
2.52.0


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

* [PATCH i-g-t 10/15] lib/kms: Use for_each_crtc_with_single_output(), part 3
  2026-01-30 10:52 [PATCH i-g-t 00/15] lib/kms: Start introducing for_each_crtc*() Ville Syrjala
                   ` (8 preceding siblings ...)
  2026-01-30 10:52 ` [PATCH i-g-t 09/15] lib/kms: Use for_each_crtc_with_single_output(), part 2 Ville Syrjala
@ 2026-01-30 10:52 ` Ville Syrjala
  2026-01-30 14:22   ` Jani Nikula
  2026-01-30 10:52 ` [PATCH i-g-t 11/15] lib/kms: Use for_each_crtc_with_valid_output(), part 1 Ville Syrjala
                   ` (8 subsequent siblings)
  18 siblings, 1 reply; 42+ messages in thread
From: Ville Syrjala @ 2026-01-30 10:52 UTC (permalink / raw)
  To: igt-dev

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Convert more of the for_each_pipe_with_single_output() uses
over to for_each_crtc_with_single_output(). This covers the
simple use cases that weren't converted by the previous
attempt (due to coccinelle performance falling off a cliff
with the more straightforward semantic patch).

Done with cocci:
 #include "scripts/iterators.cocci"

@change@
iterator name for_each_pipe_with_single_output;
iterator name for_each_crtc_with_single_output;
typedef igt_crtc_t;
enum pipe PIPE;
expression DISPLAY, OUTPUT;
@@
- for_each_pipe_with_single_output(DISPLAY, PIPE, OUTPUT)
+ for_each_crtc_with_single_output(DISPLAY, crtc, OUTPUT)
{
<+...
(
- igt_crtc_for_pipe(..., PIPE)
+ crtc
|
- kmstest_pipe_name(PIPE)
+ igt_crtc_name(crtc)
|
- PIPE
+ crtc->pipe
)
...+>
}

@depends on change@
identifier FUNC;
@@
FUNC(...)
{
+ igt_crtc_t *crtc;
<+...
for_each_crtc_with_single_output(...) { ... }
...+>
}

@depends on change@
identifier FUNC, PIPE;
expression E;
@@
FUNC(...)
{
...
(
- enum pipe PIPE;
|
- enum pipe PIPE = E;
)
... when != PIPE
}

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tests/kms_atomic.c     | 147 ++++++++++++++++++++++-------------------
 tests/kms_cursor_crc.c |  86 +++++++++++++-----------
 2 files changed, 128 insertions(+), 105 deletions(-)

diff --git a/tests/kms_atomic.c b/tests/kms_atomic.c
index c78b6b7d7e8b..fa321cc3c7a1 100644
--- a/tests/kms_atomic.c
+++ b/tests/kms_atomic.c
@@ -1455,7 +1455,7 @@ static const char *help_str =
 
 int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 {
-	enum pipe pipe = PIPE_NONE;
+	igt_crtc_t *crtc;
 	igt_output_t *output = NULL;
 	data_t data = { 0 };
 
@@ -1470,20 +1470,21 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 	igt_describe("Test for KMS atomic modesetting on overlay plane and ensure coherency between "
 		     "the legacy and atomic interfaces.");
 	igt_subtest_with_dynamic("plane-overlay-legacy") {
-		for_each_pipe_with_single_output(&data.display, pipe, output) {
+		for_each_crtc_with_single_output(&data.display, crtc, output) {
 			igt_plane_t *overlay =
-				igt_crtc_get_plane_type(igt_crtc_for_pipe(&data.display, pipe),
+				igt_crtc_get_plane_type(crtc,
 							DRM_PLANE_TYPE_OVERLAY);
 			uint32_t format = plane_get_igt_format(overlay);
 
-			if (!pipe_output_combo_valid(&data.display, pipe, output))
+			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 				continue;
 			if (!overlay || !format)
 				continue;
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
-				atomic_setup(&data, pipe, output);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output)) {
+				atomic_setup(&data, crtc->pipe, output);
 				plane_overlay(&data, output, overlay, format);
-				atomic_clear(&data, pipe, output);
+				atomic_clear(&data, crtc->pipe, output);
 			}
 			if (!all_pipes)
 				break;
@@ -1493,13 +1494,14 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 	igt_describe("Test for KMS atomic modesetting on primary plane and ensure coherency between "
 		     "the legacy and atomic interfaces.");
 	igt_subtest_with_dynamic("plane-primary-legacy") {
-		for_each_pipe_with_single_output(&data.display, pipe, output) {
-			if (!pipe_output_combo_valid(&data.display, pipe, output))
+		for_each_crtc_with_single_output(&data.display, crtc, output) {
+			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 				continue;
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
-				atomic_setup(&data, pipe, output);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output)) {
+				atomic_setup(&data, crtc->pipe, output);
 				plane_primary(&data);
-				atomic_clear(&data, pipe, output);
+				atomic_clear(&data, crtc->pipe, output);
 			}
 			if (!all_pipes)
 				break;
@@ -1509,15 +1511,15 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 	igt_describe("Verify that the overlay plane can cover the primary one (and "\
 		     "vice versa) by changing their zpos property.");
 	igt_subtest_with_dynamic("plane-primary-overlay-mutable-zpos") {
-		for_each_pipe_with_single_output(&data.display, pipe, output) {
+		for_each_crtc_with_single_output(&data.display, crtc, output) {
 			igt_plane_t *overlay =
-				igt_crtc_get_plane_type(igt_crtc_for_pipe(&data.display, pipe),
+				igt_crtc_get_plane_type(crtc,
 							DRM_PLANE_TYPE_OVERLAY);
 
-			if (!pipe_output_combo_valid(&data.display, pipe, output))
+			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 				continue;
 
-			atomic_setup(&data, pipe, output);
+			atomic_setup(&data, crtc->pipe, output);
 			if (!overlay)
 				continue;
 			if (!has_mutable_zpos(data.primary) || !has_mutable_zpos(overlay))
@@ -1525,10 +1527,11 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 			if (!igt_plane_has_format_mod(data.primary, DRM_FORMAT_ARGB8888, 0x0) ||
 			    !igt_plane_has_format_mod(overlay, DRM_FORMAT_ARGB1555, 0x0))
 				continue;
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output)) {
 				plane_primary_overlay_mutable_zpos(&data, output, overlay,
 								   DRM_FORMAT_ARGB8888, DRM_FORMAT_ARGB1555);
-				atomic_clear(&data, pipe, output);
+				atomic_clear(&data, crtc->pipe, output);
 			}
 			if (!all_pipes)
 				break;
@@ -1538,17 +1541,19 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 	igt_describe("Verify the reported zpos property of planes by making sure "\
 		     "only higher zpos planes cover the lower zpos ones.");
 	igt_subtest_with_dynamic("plane-immutable-zpos") {
-		for_each_pipe_with_single_output(&data.display, pipe, output) {
-			int n_planes = igt_crtc_for_pipe(&data.display, pipe)->n_planes;
+		for_each_crtc_with_single_output(&data.display, crtc, output) {
+			int n_planes = crtc->n_planes;
 
-			if (!pipe_output_combo_valid(&data.display, pipe, output))
+			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 				continue;
 			if (n_planes < 2)
 				continue;
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
-				atomic_setup(&data, pipe, output);
-				plane_immutable_zpos(&data, output, pipe, n_planes);
-				atomic_clear(&data, pipe, output);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output)) {
+				atomic_setup(&data, crtc->pipe, output);
+				plane_immutable_zpos(&data, output,
+						     crtc->pipe, n_planes);
+				atomic_clear(&data, crtc->pipe, output);
 			}
 			if (!all_pipes)
 				break;
@@ -1558,20 +1563,21 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 	igt_describe("Test to ensure that DRM_MODE_ATOMIC_TEST_ONLY really only touches "
 		     "the free-standing state objects and nothing else.");
 	igt_subtest_with_dynamic("test-only") {
-		for_each_pipe_with_single_output(&data.display, pipe, output) {
+		for_each_crtc_with_single_output(&data.display, crtc, output) {
 			uint32_t format;
 
-			if (!pipe_output_combo_valid(&data.display, pipe, output))
+			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 				continue;
 
-			atomic_setup(&data, pipe, output);
+			atomic_setup(&data, crtc->pipe, output);
 			format = plane_get_igt_format(data.primary);
 
 			if (!format)
 				continue;
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
-				atomic_clear(&data, pipe, output);
-				test_only(&data, output, pipe, format);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output)) {
+				atomic_clear(&data, crtc->pipe, output);
+				test_only(&data, output, crtc->pipe, format);
 			}
 			if (!all_pipes)
 				break;
@@ -1581,19 +1587,20 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 	igt_describe("Test for KMS atomic modesetting on cursor plane and ensure coherency between "
 		     "legacy and atomic interfaces.");
 	igt_subtest_with_dynamic("plane-cursor-legacy") {
-		for_each_pipe_with_single_output(&data.display, pipe, output) {
+		for_each_crtc_with_single_output(&data.display, crtc, output) {
 			igt_plane_t *cursor =
-				igt_crtc_get_plane_type(igt_crtc_for_pipe(&data.display, pipe),
+				igt_crtc_get_plane_type(crtc,
 							DRM_PLANE_TYPE_CURSOR);
 
-			if (!pipe_output_combo_valid(&data.display, pipe, output))
+			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 				continue;
 			if (!cursor)
 				continue;
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
-				atomic_setup(&data, pipe, output);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output)) {
+				atomic_setup(&data, crtc->pipe, output);
 				plane_cursor(&data, output, cursor);
-				atomic_clear(&data, pipe, output);
+				atomic_clear(&data, crtc->pipe, output);
 			}
 			if (!all_pipes)
 				break;
@@ -1602,13 +1609,14 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 
 	igt_describe("Test error handling when invalid plane parameters are passed");
 	igt_subtest_with_dynamic("plane-invalid-params") {
-		for_each_pipe_with_single_output(&data.display, pipe, output) {
-			if (!pipe_output_combo_valid(&data.display, pipe, output))
+		for_each_crtc_with_single_output(&data.display, crtc, output) {
+			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 				continue;
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
-				atomic_setup(&data, pipe, output);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output)) {
+				atomic_setup(&data, crtc->pipe, output);
 				plane_invalid_params(&data, output);
-				atomic_clear(&data, pipe, output);
+				atomic_clear(&data, crtc->pipe, output);
 			}
 			if (!all_pipes)
 				break;
@@ -1617,13 +1625,14 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 
 	igt_describe("Test error handling when invalid plane fence parameters are passed");
 	igt_subtest_with_dynamic("plane-invalid-params-fence") {
-		for_each_pipe_with_single_output(&data.display, pipe, output) {
-			if (!pipe_output_combo_valid(&data.display, pipe, output))
+		for_each_crtc_with_single_output(&data.display, crtc, output) {
+			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 				continue;
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
-				atomic_setup(&data, pipe, output);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output)) {
+				atomic_setup(&data, crtc->pipe, output);
 				plane_invalid_params_fence(&data, output);
-				atomic_clear(&data, pipe, output);
+				atomic_clear(&data, crtc->pipe, output);
 			}
 			if (!all_pipes)
 				break;
@@ -1632,13 +1641,14 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 
 	igt_describe("Test error handling when invalid crtc parameters are passed");
 	igt_subtest_with_dynamic("crtc-invalid-params") {
-		for_each_pipe_with_single_output(&data.display, pipe, output) {
-			if (!pipe_output_combo_valid(&data.display, pipe, output))
+		for_each_crtc_with_single_output(&data.display, crtc, output) {
+			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 				continue;
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
-				atomic_setup(&data, pipe, output);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output)) {
+				atomic_setup(&data, crtc->pipe, output);
 				crtc_invalid_params(&data, output);
-				atomic_clear(&data, pipe, output);
+				atomic_clear(&data, crtc->pipe, output);
 			}
 			if (!all_pipes)
 				break;
@@ -1647,13 +1657,14 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 
 	igt_describe("Test error handling when invalid crtc fence parameters are passed");
 	igt_subtest_with_dynamic("crtc-invalid-params-fence") {
-		for_each_pipe_with_single_output(&data.display, pipe, output) {
-			if (!pipe_output_combo_valid(&data.display, pipe, output))
+		for_each_crtc_with_single_output(&data.display, crtc, output) {
+			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 				continue;
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
-				atomic_setup(&data, pipe, output);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output)) {
+				atomic_setup(&data, crtc->pipe, output);
 				crtc_invalid_params_fence(&data, output);
-				atomic_clear(&data, pipe, output);
+				atomic_clear(&data, crtc->pipe, output);
 			}
 			if (!all_pipes)
 				break;
@@ -1664,13 +1675,14 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 		     "various invalid conditions which the libdrm wrapper won't "
 		     "allow us to create.");
 	igt_subtest_with_dynamic("atomic-invalid-params") {
-		for_each_pipe_with_single_output(&data.display, pipe, output) {
-			if (!pipe_output_combo_valid(&data.display, pipe, output))
+		for_each_crtc_with_single_output(&data.display, crtc, output) {
+			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 				continue;
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
-				atomic_setup(&data, pipe, output);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output)) {
+				atomic_setup(&data, crtc->pipe, output);
 				atomic_invalid_params(&data, output);
-				atomic_clear(&data, pipe, output);
+				atomic_clear(&data, crtc->pipe, output);
 			}
 			if (!all_pipes)
 				break;
@@ -1679,17 +1691,18 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 
 	igt_describe("Simple test cases to use FB_DAMAGE_CLIPS plane property");
 	igt_subtest_with_dynamic("atomic-plane-damage") {
-		for_each_pipe_with_single_output(&data.display, pipe, output) {
-			if (!pipe_output_combo_valid(&data.display, pipe, output))
+		for_each_crtc_with_single_output(&data.display, crtc, output) {
+			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 				continue;
 
-			atomic_setup(&data, pipe, output);
+			atomic_setup(&data, crtc->pipe, output);
 
 			if (!igt_plane_has_prop(data.primary, IGT_PLANE_FB_DAMAGE_CLIPS))
 				continue;
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output)) {
 				atomic_plane_damage(&data);
-				atomic_clear(&data, pipe, output);
+				atomic_clear(&data, crtc->pipe, output);
 			}
 			if (!all_pipes)
 				break;
diff --git a/tests/kms_cursor_crc.c b/tests/kms_cursor_crc.c
index 4dcf63025687..10e51b457a15 100644
--- a/tests/kms_cursor_crc.c
+++ b/tests/kms_cursor_crc.c
@@ -959,7 +959,7 @@ static void test_size_hints(data_t *data)
 
 static void run_size_tests(data_t *data, int w, int h)
 {
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	struct {
 		const char *name;
 		void (*testfunc)(data_t *);
@@ -1006,11 +1006,12 @@ static void run_size_tests(data_t *data, int w, int h)
 				}
 			}
 
-			for_each_pipe_with_single_output(&data->display, pipe, data->output) {
-				if (execution_constraint(pipe))
+			for_each_crtc_with_single_output(&data->display, crtc,
+							 data->output) {
+				if (execution_constraint(crtc->pipe))
 					continue;
 
-				data->pipe = pipe;
+				data->pipe = crtc->pipe;
 
 				if (!valid_pipe_output_combo(data))
 					continue;
@@ -1021,7 +1022,8 @@ static void run_size_tests(data_t *data, int w, int h)
 				}
 
 				igt_dynamic_f("pipe-%s-%s",
-					      kmstest_pipe_name(pipe), igt_output_name(data->output))
+					      igt_crtc_name(crtc),
+					      igt_output_name(data->output))
 					run_test(data, size_tests[i].testfunc, w, h);
 			}
 		}
@@ -1033,7 +1035,7 @@ static void run_size_tests(data_t *data, int w, int h)
 
 static void run_tests_on_pipe(data_t *data)
 {
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	int cursor_size;
 
 	igt_fixture() {
@@ -1045,17 +1047,18 @@ static void run_tests_on_pipe(data_t *data)
 		     "flight to smaller ones to see that the size is applied "
 		     "correctly.");
 	igt_subtest_with_dynamic("cursor-size-change") {
-		for_each_pipe_with_single_output(&data->display, pipe, data->output) {
-			if (execution_constraint(pipe))
+		for_each_crtc_with_single_output(&data->display, crtc,
+						 data->output) {
+			if (execution_constraint(crtc->pipe))
 				continue;
 
-			data->pipe = pipe;
+			data->pipe = crtc->pipe;
 
 			if (!valid_pipe_output_combo(data))
 				continue;
 
 			igt_dynamic_f("pipe-%s-%s",
-				      kmstest_pipe_name(pipe),
+				      igt_crtc_name(crtc),
 				      data->output->name)
 				run_test(data, test_cursor_size,
 					 data->cursor_max_w, data->cursor_max_h);
@@ -1065,17 +1068,18 @@ static void run_tests_on_pipe(data_t *data)
 	igt_describe("Validates the composition of a fully opaque cursor "
 		     "plane, i.e., alpha channel equal to 1.0.");
 	igt_subtest_with_dynamic("cursor-alpha-opaque") {
-		for_each_pipe_with_single_output(&data->display, pipe, data->output) {
-			if (execution_constraint(pipe))
+		for_each_crtc_with_single_output(&data->display, crtc,
+						 data->output) {
+			if (execution_constraint(crtc->pipe))
 				continue;
 
-			data->pipe = pipe;
+			data->pipe = crtc->pipe;
 
 			if (!valid_pipe_output_combo(data))
 				continue;
 
 			igt_dynamic_f("pipe-%s-%s",
-				      kmstest_pipe_name(pipe),
+				      igt_crtc_name(crtc),
 				      data->output->name)
 				run_test(data, test_cursor_opaque,
 					 data->cursor_max_w, data->cursor_max_h);
@@ -1085,17 +1089,18 @@ static void run_tests_on_pipe(data_t *data)
 	igt_describe("Validates the composition of a fully transparent cursor "
 		     "plane, i.e., alpha channel equal to 0.0.");
 	igt_subtest_with_dynamic("cursor-alpha-transparent") {
-		for_each_pipe_with_single_output(&data->display, pipe, data->output) {
-			if (execution_constraint(pipe))
+		for_each_crtc_with_single_output(&data->display, crtc,
+						 data->output) {
+			if (execution_constraint(crtc->pipe))
 				continue;
 
-			data->pipe = pipe;
+			data->pipe = crtc->pipe;
 
 			if (!valid_pipe_output_combo(data))
 				continue;
 
 			igt_dynamic_f("pipe-%s-%s",
-				      kmstest_pipe_name(pipe),
+				      igt_crtc_name(crtc),
 				      data->output->name)
 				run_test(data, test_cursor_transparent,
 					 data->cursor_max_w, data->cursor_max_h);
@@ -1114,17 +1119,18 @@ static void run_tests_on_pipe(data_t *data)
 
 	igt_describe("Validate cursor updates don't cause tearing with framebuffer changes");
 	igt_subtest_with_dynamic("cursor-tearing-framebuffer-change") {
-		for_each_pipe_with_single_output(&data->display, pipe, data->output) {
-			if (execution_constraint(pipe))
+		for_each_crtc_with_single_output(&data->display, crtc,
+						 data->output) {
+			if (execution_constraint(crtc->pipe))
 				continue;
 
-			data->pipe = pipe;
+			data->pipe = crtc->pipe;
 
 			if (!valid_pipe_output_combo(data))
 				continue;
 
 			igt_dynamic_f("pipe-%s-%s",
-					  kmstest_pipe_name(pipe),
+					  igt_crtc_name(crtc),
 					  data->output->name)
 				run_test(data, test_crc_cursors,
 					  data->cursor_max_w, data->cursor_max_h);
@@ -1133,17 +1139,18 @@ static void run_tests_on_pipe(data_t *data)
 
 	igt_describe("Validate cursor updates don't cause tearing with position changes");
 	igt_subtest_with_dynamic("cursor-tearing-position-change") {
-		for_each_pipe_with_single_output(&data->display, pipe, data->output) {
-			if (execution_constraint(pipe))
+		for_each_crtc_with_single_output(&data->display, crtc,
+						 data->output) {
+			if (execution_constraint(crtc->pipe))
 				continue;
 
-			data->pipe = pipe;
+			data->pipe = crtc->pipe;
 
 			if (!valid_pipe_output_combo(data))
 				continue;
 
 			igt_dynamic_f("pipe-%s-%s",
-					  kmstest_pipe_name(pipe),
+					  igt_crtc_name(crtc),
 					  data->output->name)
 				run_test(data, test_crc_pos_cursors,
 					  data->cursor_max_w, data->cursor_max_h);
@@ -1159,18 +1166,19 @@ static void run_tests_on_pipe(data_t *data)
 
 	igt_describe("Check random placement of a cursor with DPMS.");
 	igt_subtest_with_dynamic("cursor-dpms") {
-		for_each_pipe_with_single_output(&data->display, pipe, data->output) {
-			if (execution_constraint(pipe))
+		for_each_crtc_with_single_output(&data->display, crtc,
+						 data->output) {
+			if (execution_constraint(crtc->pipe))
 				continue;
 
-			data->pipe = pipe;
+			data->pipe = crtc->pipe;
 			data->flags = TEST_DPMS;
 
 			if (!valid_pipe_output_combo(data))
 				continue;
 
 			igt_dynamic_f("pipe-%s-%s",
-				      kmstest_pipe_name(pipe),
+				      igt_crtc_name(crtc),
 				      data->output->name)
 				run_test(data, test_crc_random,
 					 data->cursor_max_w, data->cursor_max_h);
@@ -1180,18 +1188,19 @@ static void run_tests_on_pipe(data_t *data)
 
 	igt_describe("Check random placement of a cursor with suspend.");
 	igt_subtest_with_dynamic("cursor-suspend") {
-		for_each_pipe_with_single_output(&data->display, pipe, data->output) {
-			if (execution_constraint(pipe))
+		for_each_crtc_with_single_output(&data->display, crtc,
+						 data->output) {
+			if (execution_constraint(crtc->pipe))
 				continue;
 
-			data->pipe = pipe;
+			data->pipe = crtc->pipe;
 			data->flags = TEST_SUSPEND;
 
 			if (!valid_pipe_output_combo(data))
 				continue;
 
 			igt_dynamic_f("pipe-%s-%s",
-				      kmstest_pipe_name(pipe),
+				      igt_crtc_name(crtc),
 				      data->output->name)
 				run_test(data, test_crc_random,
 					 data->cursor_max_w, data->cursor_max_h);
@@ -1204,17 +1213,18 @@ static void run_tests_on_pipe(data_t *data)
 
 	igt_describe("Check that sizes declared in SIZE_HINTS are accepted.");
 	igt_subtest_with_dynamic("cursor-size-hints") {
-		for_each_pipe_with_single_output(&data->display, pipe, data->output) {
-			if (execution_constraint(pipe))
+		for_each_crtc_with_single_output(&data->display, crtc,
+						 data->output) {
+			if (execution_constraint(crtc->pipe))
 				continue;
 
-			data->pipe = pipe;
+			data->pipe = crtc->pipe;
 
 			if (!valid_pipe_output_combo(data))
 				continue;
 
 			igt_dynamic_f("pipe-%s-%s",
-				      kmstest_pipe_name(pipe),
+				      igt_crtc_name(crtc),
 				      data->output->name)
 				run_test(data, test_size_hints,
 					 data->cursor_max_w, data->cursor_max_h);
-- 
2.52.0


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

* [PATCH i-g-t 11/15] lib/kms: Use for_each_crtc_with_valid_output(), part 1
  2026-01-30 10:52 [PATCH i-g-t 00/15] lib/kms: Start introducing for_each_crtc*() Ville Syrjala
                   ` (9 preceding siblings ...)
  2026-01-30 10:52 ` [PATCH i-g-t 10/15] lib/kms: Use for_each_crtc_with_single_output(), part 3 Ville Syrjala
@ 2026-01-30 10:52 ` Ville Syrjala
  2026-01-30 14:24   ` Jani Nikula
  2026-01-30 10:52 ` [PATCH i-g-t 12/15] lib/kms: Use for_each_crtc_with_valid_output(), part 2 Ville Syrjala
                   ` (7 subsequent siblings)
  18 siblings, 1 reply; 42+ messages in thread
From: Ville Syrjala @ 2026-01-30 10:52 UTC (permalink / raw)
  To: igt-dev

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Convert some uses of for_each_pipe_with_valid_output()
to for_each_crtc_with_valid_output(). Take care of the
cases where we (presumably) still have to keep some
kind of 'data.pipe' thingy still up to date.

Eventually we should probably replace 'data.pipe' with
'data.crtc' but I didn't want to go that far here.

Done with cocci:
 #include "scripts/iterators.cocci"

@change@
iterator name for_each_pipe_with_valid_output;
iterator name for_each_crtc_with_valid_output;
typedef igt_crtc_t;
identifier PIPE;
expression DISPLAY, OUTPUT, X;
@@
- for_each_pipe_with_valid_output(DISPLAY, X.PIPE, OUTPUT)
+ for_each_crtc_with_valid_output(DISPLAY, crtc, OUTPUT)
{
+ X.PIPE = crtc->pipe;
<...
(
- igt_crtc_for_pipe(..., X.PIPE)
+ crtc
|
- kmstest_pipe_name(X.PIPE)
+ igt_crtc_name(crtc)
|
- X.PIPE
+ crtc->pipe
)
...>
}

@depends on change@
identifier FUNC;
@@
FUNC(...)
{
+ igt_crtc_t *crtc;
<+...
for_each_crtc_with_valid_output(...) { ... }
...+>
}

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tests/intel/kms_psr2_sf.c |  7 +++++--
 tests/kms_lease.c         | 15 +++++++++------
 tests/kms_vblank.c        | 26 +++++++++++++++++---------
 3 files changed, 31 insertions(+), 17 deletions(-)

diff --git a/tests/intel/kms_psr2_sf.c b/tests/intel/kms_psr2_sf.c
index f42863874e5e..e23999544370 100644
--- a/tests/intel/kms_psr2_sf.c
+++ b/tests/intel/kms_psr2_sf.c
@@ -1175,6 +1175,7 @@ static void run_plane_update_continuous(data_t data, int i, int coexist_features
 
 int igt_main()
 {
+	igt_crtc_t *crtc;
 	bool output_supports_pr_psr2_sel_fetch = false;
 	bool pr_psr2_sel_fetch_supported = false;
 	data_t data = {};
@@ -1219,11 +1220,13 @@ int igt_main()
 		igt_info("Big framebuffer size %dx%d\n",
 			 data.big_fb_width, data.big_fb_height);
 
-		for_each_pipe_with_valid_output(&data.display, data.pipe, data.output) {
+		for_each_crtc_with_valid_output(&data.display, crtc,
+						data.output) {
+			data.pipe = crtc->pipe;
 			coexist_features[n_pipes] = 0;
 			output_supports_pr_psr2_sel_fetch = check_pr_psr2_sel_fetch_support(&data);
 			if (output_supports_pr_psr2_sel_fetch) {
-				pipes[n_pipes] = data.pipe;
+				pipes[n_pipes] = crtc->pipe;
 				outputs[n_pipes] = data.output;
 
 				if (is_dsc_supported_by_sink(data.drm_fd, data.output))
diff --git a/tests/kms_lease.c b/tests/kms_lease.c
index 6d45d041b5b4..951159e97779 100644
--- a/tests/kms_lease.c
+++ b/tests/kms_lease.c
@@ -1240,6 +1240,7 @@ static void lease_uevent(data_t *data)
 
 int igt_main()
 {
+	igt_crtc_t *crtc;
 	data_t data;
 	igt_output_t *output;
 	igt_display_t *display = &data.master.display;
@@ -1288,21 +1289,23 @@ int igt_main()
 
 			igt_describe(f->desc);
 			igt_subtest_with_dynamic_f("%s", f->name) {
-				for_each_pipe_with_valid_output(display, data.pipe, output) {
+				for_each_crtc_with_valid_output(display, crtc,
+								output) {
+					data.pipe = crtc->pipe;
 					igt_display_reset(display);
 
 					igt_output_set_crtc(output,
-							    igt_crtc_for_pipe(output->display, data.pipe));
+							    crtc);
 					if (!intel_pipe_output_combo_valid(display))
 						continue;
 
-					igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(data.pipe),
+					igt_dynamic_f("pipe-%s-%s",
+						      igt_crtc_name(crtc),
 						      igt_output_name(output)) {
-						data.crtc_id = igt_crtc_for_pipe(display,
-										 data.pipe)->crtc_id;
+						data.crtc_id = crtc->crtc_id;
 						data.connector_id = output->id;
 						data.plane_id =
-							igt_crtc_get_plane_type(igt_crtc_for_pipe(&data.master.display, data.pipe),
+							igt_crtc_get_plane_type(crtc,
 										DRM_PLANE_TYPE_PRIMARY)->drm_plane->plane_id;
 						f->func(&data);
 					}
diff --git a/tests/kms_vblank.c b/tests/kms_vblank.c
index ed72c3576784..1e4ccd83b554 100644
--- a/tests/kms_vblank.c
+++ b/tests/kms_vblank.c
@@ -625,6 +625,7 @@ const char *help_str =
 
 int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 {
+	igt_crtc_t *crtc;
 	int fd;
 	data_t data;
 
@@ -642,11 +643,14 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 
 	igt_describe("Negative test for vblank request.");
 	igt_subtest_with_dynamic("invalid") {
-		for_each_pipe_with_valid_output(&data.display, data.pipe, data.output) {
-			if (!pipe_output_combo_valid(&data.display, data.pipe, data.output))
+		for_each_crtc_with_valid_output(&data.display, crtc,
+						data.output) {
+			data.pipe = crtc->pipe;
+			if (!pipe_output_combo_valid(&data.display, crtc->pipe, data.output))
 				continue;
 
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(data.pipe), data.output->name)
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      data.output->name)
 				invalid_subtest(&data, fd);
 			/* one pipe/output combination is enough */
 				break;
@@ -655,17 +659,21 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
 
 	igt_describe("Check the vblank and flip events works with given crtc id.");
 	igt_subtest_with_dynamic("crtc-id") {
-		for_each_pipe_with_valid_output(&data.display, data.pipe, data.output) {
-			if (!pipe_output_combo_valid(&data.display, data.pipe, data.output))
+		for_each_crtc_with_valid_output(&data.display, crtc,
+						data.output) {
+			data.pipe = crtc->pipe;
+			if (!pipe_output_combo_valid(&data.display, crtc->pipe, data.output))
 				continue;
 
-			if (!all_pipes && data.pipe != active_pipes[0] &&
-					  data.pipe != active_pipes[last_pipe]) {
-				igt_info("Skipping pipe %s\n", kmstest_pipe_name(data.pipe));
+			if (!all_pipes && crtc->pipe != active_pipes[0] &&
+					  crtc->pipe != active_pipes[last_pipe]) {
+				igt_info("Skipping pipe %s\n",
+					 igt_crtc_name(crtc));
 				continue;
 			}
 
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(data.pipe), data.output->name)
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      data.output->name)
 				crtc_id_subtest(&data, fd);
 		}
 	}
-- 
2.52.0


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

* [PATCH i-g-t 12/15] lib/kms: Use for_each_crtc_with_valid_output(), part 2
  2026-01-30 10:52 [PATCH i-g-t 00/15] lib/kms: Start introducing for_each_crtc*() Ville Syrjala
                   ` (10 preceding siblings ...)
  2026-01-30 10:52 ` [PATCH i-g-t 11/15] lib/kms: Use for_each_crtc_with_valid_output(), part 1 Ville Syrjala
@ 2026-01-30 10:52 ` Ville Syrjala
  2026-01-30 14:26   ` Jani Nikula
  2026-01-30 10:52 ` [PATCH i-g-t 13/15] lib/kms: Use for_each_crtc_with_valid_output(), part 3 Ville Syrjala
                   ` (6 subsequent siblings)
  18 siblings, 1 reply; 42+ messages in thread
From: Ville Syrjala @ 2026-01-30 10:52 UTC (permalink / raw)
  To: igt-dev

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Convert some uses of for_each_pipe_with_valid_output()
to for_each_crtc_with_valid_output(). Take care of the
cases where we (presumably) still have to keep some
kind of 'data->pipe' thingy still up to date.

Eventually we should probably replace 'data->pipe' with
'data->crtc' but I didn't want to go that far here.

Done with cocci:
 #include "scripts/iterators.cocci"

@change@
iterator name for_each_pipe_with_valid_output;
iterator name for_each_crtc_with_valid_output;
typedef igt_crtc_t;
identifier PIPE;
expression DISPLAY, OUTPUT, X;
@@
- for_each_pipe_with_valid_output(DISPLAY, X->PIPE, OUTPUT)
+ for_each_crtc_with_valid_output(DISPLAY, crtc, OUTPUT)
{
+ X->PIPE = crtc->pipe;
<...
(
- igt_crtc_for_pipe(..., X->PIPE)
+ crtc
|
- kmstest_pipe_name(X->PIPE)
+ igt_crtc_name(crtc)
|
- X->PIPE
+ crtc->pipe
)
...>
}

@depends on change@
identifier FUNC;
@@
FUNC(...)
{
+ igt_crtc_t *crtc;
<+...
for_each_crtc_with_valid_output(...) { ... }
...+>
}

@@
identifier CRTC;
@@
igt_crtc_t *CRTC;
...
- igt_crtc_t *CRTC;

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tests/intel/kms_big_fb.c       |  6 ++++--
 tests/intel/kms_ccs.c          | 19 +++++++++++------
 tests/intel/kms_fb_coherency.c |  6 ++++--
 tests/intel/kms_pwrite_crc.c   |  6 ++++--
 tests/kms_async_flips.c        | 23 +++++++++++++--------
 tests/kms_vblank.c             | 37 +++++++++++++++++++++++-----------
 6 files changed, 65 insertions(+), 32 deletions(-)

diff --git a/tests/intel/kms_big_fb.c b/tests/intel/kms_big_fb.c
index 415508213e55..3946c7c00dfd 100644
--- a/tests/intel/kms_big_fb.c
+++ b/tests/intel/kms_big_fb.c
@@ -685,6 +685,7 @@ max_hw_stride_async_flip_test(data_t *data)
 
 static void test_scanout(data_t *data)
 {
+	igt_crtc_t *crtc;
 	igt_output_t *output;
 
 	igt_require(data->format == DRM_FORMAT_C8 ||
@@ -708,11 +709,12 @@ static void test_scanout(data_t *data)
 	max_fb_size(data, &data->big_fb_width, &data->big_fb_height,
 		    data->format, data->modifier);
 
-	for_each_pipe_with_valid_output(&data->display, data->pipe, data->output) {
+	for_each_crtc_with_valid_output(&data->display, crtc, data->output) {
+		data->pipe = crtc->pipe;
 		igt_display_reset(&data->display);
 
 		igt_output_set_crtc(data->output,
-				    igt_crtc_for_pipe(data->output->display, data->pipe));
+				    crtc);
 		if (!intel_pipe_output_combo_valid(&data->display))
 			continue;
 
diff --git a/tests/intel/kms_ccs.c b/tests/intel/kms_ccs.c
index ea23b6581b06..85d1e16cafe3 100644
--- a/tests/intel/kms_ccs.c
+++ b/tests/intel/kms_ccs.c
@@ -1125,6 +1125,7 @@ static bool valid_modifier_test(u64 modifier, const enum test_flags flags)
 
 static void test_output(data_t *data, const int testnum)
 {
+	igt_crtc_t *crtc;
 	uint16_t dev_id;
 
 	igt_fixture()
@@ -1150,15 +1151,18 @@ static void test_output(data_t *data, const int testnum)
 					      "Older than Xe2 platform needed.\n");
 			}
 
-			for_each_pipe_with_valid_output(&data->display, data->pipe, data->output) {
+			for_each_crtc_with_valid_output(&data->display, crtc,
+							data->output) {
+				data->pipe = crtc->pipe;
 				igt_display_reset(&data->display);
 
 				igt_output_set_crtc(data->output,
-						    igt_crtc_for_pipe(data->output->display, data->pipe));
+						    crtc);
 				if (!intel_pipe_output_combo_valid(&data->display))
 					continue;
 
-				igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(data->pipe),
+				igt_dynamic_f("pipe-%s-%s",
+							    igt_crtc_name(crtc),
 							    data->output->name) {
 					int valid_tests = 0;
 
@@ -1166,9 +1170,12 @@ static void test_output(data_t *data, const int testnum)
 						igt_info("Testing with seed %d\n", data->seed);
 
 					if (data->flags & TEST_ALL_PLANES) {
-						igt_display_require_output_on_pipe(&data->display, data->pipe);
+						igt_display_require_output_on_pipe(&data->display,
+										   crtc->pipe);
 
-						for_each_plane_on_pipe(&data->display, data->pipe, data->plane) {
+						for_each_plane_on_pipe(&data->display,
+								       crtc->pipe,
+								       data->plane) {
 							if (skip_plane(data, data->plane))
 								continue;
 
@@ -1186,7 +1193,7 @@ static void test_output(data_t *data, const int testnum)
 					igt_require_f(valid_tests > 0,
 						      "no valid tests for %s on pipe %s\n",
 						      ccs_modifiers[i].str,
-						      kmstest_pipe_name(data->pipe));
+						      igt_crtc_name(crtc));
 				}
 			}
 		}
diff --git a/tests/intel/kms_fb_coherency.c b/tests/intel/kms_fb_coherency.c
index e6d043c114d5..2f917e97b792 100644
--- a/tests/intel/kms_fb_coherency.c
+++ b/tests/intel/kms_fb_coherency.c
@@ -222,13 +222,15 @@ static void test_legacy_mmap_wc(data_t *data)
 
 static void select_valid_pipe_output_combo(data_t *data)
 {
+	igt_crtc_t *crtc;
 	igt_display_t *display = &data->display;
 
-	for_each_pipe_with_valid_output(display, data->pipe, data->output) {
+	for_each_crtc_with_valid_output(display, crtc, data->output) {
+		data->pipe = crtc->pipe;
 		igt_display_reset(display);
 
 		igt_output_set_crtc(data->output,
-				    igt_crtc_for_pipe(data->output->display, data->pipe));
+				    crtc);
 		if (intel_pipe_output_combo_valid(display))
 			return;
 	}
diff --git a/tests/intel/kms_pwrite_crc.c b/tests/intel/kms_pwrite_crc.c
index 64c167ad3f44..4a214d34e53b 100644
--- a/tests/intel/kms_pwrite_crc.c
+++ b/tests/intel/kms_pwrite_crc.c
@@ -169,13 +169,15 @@ static void cleanup_crtc(data_t *data)
 
 static void run_test(data_t *data)
 {
+	igt_crtc_t *crtc;
 	igt_display_t *display = &data->display;
 
-	for_each_pipe_with_valid_output(display, data->pipe, data->output) {
+	for_each_crtc_with_valid_output(display, crtc, data->output) {
+		data->pipe = crtc->pipe;
 		igt_display_reset(display);
 
 		igt_output_set_crtc(data->output,
-				    igt_crtc_for_pipe(data->output->display, data->pipe));
+				    crtc);
 		if (!intel_pipe_output_combo_valid(display))
 			continue;
 
diff --git a/tests/kms_async_flips.c b/tests/kms_async_flips.c
index 993ad37530b0..8539d31efded 100644
--- a/tests/kms_async_flips.c
+++ b/tests/kms_async_flips.c
@@ -903,16 +903,18 @@ static void require_linear_modifier(data_t *data)
 
 static void run_test(data_t *data, void (*test)(data_t *))
 {
+	igt_crtc_t *crtc;
 	igt_display_t *display = &data->display;
 
 	if (data->atomic_path)
 		require_atomic_async_cap(data);
 
-	for_each_pipe_with_valid_output(display, data->pipe, data->output) {
+	for_each_crtc_with_valid_output(display, crtc, data->output) {
+		data->pipe = crtc->pipe;
 		igt_display_reset(display);
 
 		igt_output_set_crtc(data->output,
-				    igt_crtc_for_pipe(data->output->display, data->pipe));
+				    crtc);
 		if (!intel_pipe_output_combo_valid(display))
 			continue;
 
@@ -923,7 +925,8 @@ static void run_test(data_t *data, void (*test)(data_t *))
 		else
 			data->modifier = default_modifier(data);
 
-		igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(data->pipe), data->output->name) {
+		igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+			      data->output->name) {
 			/*
 			 * FIXME: joiner+async flip is busted currently in KMD.
 			 * Remove this check once the issues are fixed in KMD.
@@ -969,11 +972,13 @@ static bool skip_async_format_mod(data_t *data,
 
 static void run_test_with_async_format_modifiers(data_t *data, void (*test)(data_t *))
 {
+	igt_crtc_t *crtc;
 	struct igt_vec tested_formats;
 
 	igt_vec_init(&tested_formats, sizeof(struct format_mod));
 
-	for_each_pipe_with_valid_output(&data->display, data->pipe, data->output) {
+	for_each_crtc_with_valid_output(&data->display, crtc, data->output) {
+		data->pipe = crtc->pipe;
 		test_init(data);
 
 		igt_assert_f(data->plane->async_format_mod_count > 0,
@@ -990,7 +995,7 @@ static void run_test_with_async_format_modifiers(data_t *data, void (*test)(data
 					   IGT_MODIFIER_FMT " on %s.%u\n",
 					   IGT_FORMAT_ARGS(f.format),
 					   IGT_MODIFIER_ARGS(f.modifier),
-					   kmstest_pipe_name(data->pipe),
+					   igt_crtc_name(crtc),
 					   data->plane->index);
 				continue;
 			}
@@ -999,7 +1004,7 @@ static void run_test_with_async_format_modifiers(data_t *data, void (*test)(data
 			data->plane_format = f.format;
 			data->async_mod_formats = true;
 
-			igt_dynamic_f("pipe-%s-%s-%s-%s", kmstest_pipe_name(data->pipe),
+			igt_dynamic_f("pipe-%s-%s-%s-%s", igt_crtc_name(crtc),
 				      data->output->name,
 				      igt_fb_modifier_name(data->modifier),
 				      igt_format_str(data->plane_format)) {
@@ -1022,10 +1027,12 @@ static void run_test_with_async_format_modifiers(data_t *data, void (*test)(data
 
 static void run_test_with_modifiers(data_t *data, void (*test)(data_t *))
 {
+	igt_crtc_t *crtc;
 	if (data->atomic_path)
 		require_atomic_async_cap(data);
 
-	for_each_pipe_with_valid_output(&data->display, data->pipe, data->output) {
+	for_each_crtc_with_valid_output(&data->display, crtc, data->output) {
+		data->pipe = crtc->pipe;
 		test_init(data);
 
 		igt_require_f(data->plane->async_format_mod_count > 0,
@@ -1042,7 +1049,7 @@ static void run_test_with_modifiers(data_t *data, void (*test)(data_t *))
 
 			data->modifier = modifier;
 
-			igt_dynamic_f("pipe-%s-%s-%s", kmstest_pipe_name(data->pipe),
+			igt_dynamic_f("pipe-%s-%s-%s", igt_crtc_name(crtc),
 				      data->output->name,
 				      igt_fb_modifier_name(modifier)) {
 				      /*
diff --git a/tests/kms_vblank.c b/tests/kms_vblank.c
index 1e4ccd83b554..ecbd85d031a6 100644
--- a/tests/kms_vblank.c
+++ b/tests/kms_vblank.c
@@ -476,6 +476,7 @@ static void vblank_ts_cont(data_t *data, int fd, int nchildren)
 
 static void run_subtests(data_t *data)
 {
+	igt_crtc_t *crtc;
 	const struct {
 		const char *name;
 		void (*func)(data_t *, int, int);
@@ -515,17 +516,23 @@ static void run_subtests(data_t *data)
 
 			igt_describe("Check if test run while hanging by introducing NOHANG flag.");
 			igt_subtest_with_dynamic_f("%s-%s", f->name, m->name) {
-				for_each_pipe_with_valid_output(&data->display, data->pipe, data->output) {
-					if (!pipe_output_combo_valid(&data->display, data->pipe, data->output))
+				for_each_crtc_with_valid_output(&data->display,
+								crtc,
+								data->output) {
+					data->pipe = crtc->pipe;
+					if (!pipe_output_combo_valid(&data->display, crtc->pipe, data->output))
 						continue;
 
-					if (!all_pipes && data->pipe != active_pipes[0] &&
-					    data->pipe != active_pipes[last_pipe]) {
-						igt_info("Skipping pipe %s\n", kmstest_pipe_name(data->pipe));
+					if (!all_pipes && crtc->pipe != active_pipes[0] &&
+					    crtc->pipe != active_pipes[last_pipe]) {
+						igt_info("Skipping pipe %s\n",
+							 igt_crtc_name(crtc));
 						continue;
 					}
 
-					igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(data->pipe), data->output->name) {
+					igt_dynamic_f("pipe-%s-%s",
+						      igt_crtc_name(crtc),
+						      data->output->name) {
 						data->flags = m->flags | NOHANG;
 						run_test(data, f->func);
 					}
@@ -541,17 +548,23 @@ static void run_subtests(data_t *data)
 				igt_hang_t hang;
 
 				hang = igt_allow_hang(data->display.drm_fd, 0, 0);
-				for_each_pipe_with_valid_output(&data->display, data->pipe, data->output) {
-					if (!pipe_output_combo_valid(&data->display, data->pipe, data->output))
+				for_each_crtc_with_valid_output(&data->display,
+								crtc,
+								data->output) {
+					data->pipe = crtc->pipe;
+					if (!pipe_output_combo_valid(&data->display, crtc->pipe, data->output))
 						continue;
 
-					if (!all_pipes && data->pipe != active_pipes[0] &&
-					    data->pipe != active_pipes[last_pipe]) {
-						igt_info("Skipping pipe %s\n", kmstest_pipe_name(data->pipe));
+					if (!all_pipes && crtc->pipe != active_pipes[0] &&
+					    crtc->pipe != active_pipes[last_pipe]) {
+						igt_info("Skipping pipe %s\n",
+							 igt_crtc_name(crtc));
 						continue;
 					}
 
-					igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(data->pipe), data->output->name) {
+					igt_dynamic_f("pipe-%s-%s",
+						      igt_crtc_name(crtc),
+						      data->output->name) {
 						data->flags = m->flags;
 						run_test(data, f->func);
 					}
-- 
2.52.0


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

* [PATCH i-g-t 13/15] lib/kms: Use for_each_crtc_with_valid_output(), part 3
  2026-01-30 10:52 [PATCH i-g-t 00/15] lib/kms: Start introducing for_each_crtc*() Ville Syrjala
                   ` (11 preceding siblings ...)
  2026-01-30 10:52 ` [PATCH i-g-t 12/15] lib/kms: Use for_each_crtc_with_valid_output(), part 2 Ville Syrjala
@ 2026-01-30 10:52 ` Ville Syrjala
  2026-01-30 14:27   ` Jani Nikula
  2026-01-30 10:52 ` [PATCH i-g-t 14/15] lib/kms: Use for_each_crtc_with_valid_output(), part 4 Ville Syrjala
                   ` (5 subsequent siblings)
  18 siblings, 1 reply; 42+ messages in thread
From: Ville Syrjala @ 2026-01-30 10:52 UTC (permalink / raw)
  To: igt-dev

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Convert some uses of for_each_pipe_with_valid_output()
to for_each_crtc_with_valid_output(). Take care of the
cases where we (presumably) still have to keep some
kind of 'pipe' pointer thingy still up to date.

Eventually we should probably replace the pipe pointer
with a crtc pointer but I didn't want to go that far here.

Done with cocci:
 #include "scripts/iterators.cocci"

@change@
iterator name for_each_pipe_with_valid_output;
iterator name for_each_crtc_with_valid_output;
typedef igt_crtc_t;
enum pipe *PIPE;
expression DISPLAY, OUTPUT;
@@
- for_each_pipe_with_valid_output(DISPLAY, *PIPE, OUTPUT)
+ for_each_crtc_with_valid_output(DISPLAY, crtc, OUTPUT)
{
+ *PIPE = crtc->pipe;
<...
(
- igt_crtc_for_pipe(..., *PIPE)
+ crtc
|
- kmstest_pipe_name(*PIPE)
+ igt_crtc_name(crtc)
|
- *PIPE
+ crtc->pipe
)
...>
}

@depends on change@
identifier FUNC;
@@
FUNC(...)
{
+ igt_crtc_t *crtc;
<+...
for_each_crtc_with_valid_output(...) { ... }
...+>
}

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tests/kms_prime.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/tests/kms_prime.c b/tests/kms_prime.c
index f51c463211f4..7b13e9f538e1 100644
--- a/tests/kms_prime.c
+++ b/tests/kms_prime.c
@@ -118,14 +118,16 @@ static bool has_prime_export(int fd)
 static igt_output_t *setup_display(int importer_fd, igt_display_t *display,
 				   enum pipe *pipe)
 {
+	igt_crtc_t *crtc;
 	igt_output_t *output;
 	bool found = false;
 
-	for_each_pipe_with_valid_output(display, *pipe, output) {
+	for_each_crtc_with_valid_output(display, crtc, output) {
+		*pipe = crtc->pipe;
 		igt_display_reset(display);
 
 		igt_output_set_crtc(output,
-				    igt_crtc_for_pipe(output->display, *pipe));
+				    crtc);
 		if (intel_pipe_output_combo_valid(display)) {
 			found = true;
 			break;
-- 
2.52.0


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

* [PATCH i-g-t 14/15] lib/kms: Use for_each_crtc_with_valid_output(), part 4
  2026-01-30 10:52 [PATCH i-g-t 00/15] lib/kms: Start introducing for_each_crtc*() Ville Syrjala
                   ` (12 preceding siblings ...)
  2026-01-30 10:52 ` [PATCH i-g-t 13/15] lib/kms: Use for_each_crtc_with_valid_output(), part 3 Ville Syrjala
@ 2026-01-30 10:52 ` Ville Syrjala
  2026-01-30 14:30   ` Jani Nikula
  2026-01-30 10:52 ` [PATCH i-g-t 15/15] lib/kms: Nuke for_each_pipe_with_*_output() Ville Syrjala
                   ` (4 subsequent siblings)
  18 siblings, 1 reply; 42+ messages in thread
From: Ville Syrjala @ 2026-01-30 10:52 UTC (permalink / raw)
  To: igt-dev

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Convert the remaining uses of for_each_pipe_with_valid_output()
to for_each_crtc_with_valid_output(). These should all be
straiggtforward cases.

Done with cocci:
 #include "scripts/iterators.cocci"

@find@
typedef igt_crtc_t;
iterator name for_each_pipe_with_valid_output;
iterator name for_each_crtc_with_valid_output;
expression DISPLAY, OUTPUT;
identifier PIPE;
type T;
@@
{
...
(
- T PIPE;
+ igt_crtc_t *crtc;
|
- T PIPE = PIPE_NONE;
+ igt_crtc_t *crtc;
)
<+...
for_each_pipe_with_valid_output(DISPLAY, PIPE, OUTPUT) { ... }
...+>
}

@change depends on find@
expression DISPLAY, OUTPUT;
identifier find.PIPE;
@@
- for_each_pipe_with_valid_output(DISPLAY, PIPE, OUTPUT)
+ for_each_crtc_with_valid_output(DISPLAY, crtc, OUTPUT)
{
<...
(
- igt_crtc_for_pipe(..., PIPE)
+ crtc
|
- kmstest_pipe_name(PIPE)
+ igt_crtc_name(crtc)
|
- PIPE
+ crtc->pipe
)
...>
}

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 lib/igt_kms.c                          |  4 +-
 tests/intel/kms_cdclk.c                | 12 ++--
 tests/intel/kms_draw_crc.c             |  8 +--
 tests/intel/kms_dsc.c                  |  6 +-
 tests/intel/kms_fence_pin_leak.c       |  8 +--
 tests/intel/kms_flip_tiling.c          | 15 +++--
 tests/intel/kms_frontbuffer_tracking.c | 14 ++---
 tests/intel/kms_mmap_write_crc.c       | 10 ++--
 tests/intel/kms_pipe_b_c_ivb.c         |  8 +--
 tests/intel/kms_pm_rpm.c               |  8 +--
 tests/intel/kms_psr2_su.c              | 15 ++---
 tests/intel/kms_psr_stress_test.c      |  6 +-
 tests/intel/perf_pmu.c                 |  8 +--
 tests/intel/prime_mmap_kms.c           |  6 +-
 tests/intel/xe_pat.c                   |  8 +--
 tests/kms_atomic_interruptible.c       | 79 ++++++++++++++++----------
 tests/kms_atomic_transition.c          | 25 ++++----
 tests/kms_flip_event_leak.c            | 11 ++--
 tests/kms_invalid_mode.c               | 13 +++--
 tests/kms_panel_fitting.c              | 12 ++--
 tests/kms_plane_multiple.c             | 11 ++--
 tests/kms_scaling_modes.c              | 12 ++--
 tests/kms_sequence.c                   | 13 +++--
 tests/prime_vgem.c                     |  4 +-
 tests/vmwgfx/vmw_prime.c               | 16 +++---
 25 files changed, 186 insertions(+), 146 deletions(-)

diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index a94c4820bd87..97b41778a52a 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -3274,10 +3274,10 @@ int igt_display_n_crtcs(igt_display_t *display)
  */
 void igt_display_require_output(igt_display_t *display)
 {
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	igt_output_t *output;
 
-	for_each_pipe_with_valid_output(display, pipe, output)
+	for_each_crtc_with_valid_output(display, crtc, output)
 		return;
 
 	igt_skip("No valid crtc/connector combinations found.\n");
diff --git a/tests/intel/kms_cdclk.c b/tests/intel/kms_cdclk.c
index 3ed6e88852e3..bb7c5922b643 100644
--- a/tests/intel/kms_cdclk.c
+++ b/tests/intel/kms_cdclk.c
@@ -324,21 +324,21 @@ static void run_cdclk_test(data_t *data, uint32_t flags)
 {
 	igt_display_t *display = &data->display;
 	igt_output_t *output;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 
-	for_each_pipe_with_valid_output(display, pipe, output) {
+	for_each_crtc_with_valid_output(display, crtc, output) {
 		igt_output_set_crtc(output,
-				    igt_crtc_for_pipe(output->display, pipe));
+				    crtc);
 		if (!intel_pipe_output_combo_valid(display)) {
 			igt_output_set_crtc(output, NULL);
 			continue;
 		}
 
-		igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), output->name) {
+		igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc), output->name) {
 			if (flags & TEST_PLANESCALING)
-				test_plane_scaling(data, pipe, output);
+				test_plane_scaling(data, crtc->pipe, output);
 			if (flags & TEST_MODETRANSITION)
-				test_mode_transition(data, pipe, output);
+				test_mode_transition(data, crtc->pipe, output);
 		}
 	}
 }
diff --git a/tests/intel/kms_draw_crc.c b/tests/intel/kms_draw_crc.c
index 26bd1fbb1961..9f7f213877b0 100644
--- a/tests/intel/kms_draw_crc.c
+++ b/tests/intel/kms_draw_crc.c
@@ -93,18 +93,18 @@ struct base_crc base_crcs[ARRAY_SIZE(formats)];
 
 static void find_modeset_params(void)
 {
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 
-	for_each_pipe_with_valid_output(&display, pipe, output) {
+	for_each_crtc_with_valid_output(&display, crtc, output) {
 		igt_display_reset(&display);
 
 		igt_output_set_crtc(output,
-				    igt_crtc_for_pipe(output->display, pipe));
+				    crtc);
 		if (!intel_pipe_output_combo_valid(&display))
 			continue;
 
 		mode = igt_output_get_mode(output);
-		pipe_crc = igt_crtc_crc_new(igt_crtc_for_pipe(&display, pipe),
+		pipe_crc = igt_crtc_crc_new(crtc,
 					    IGT_PIPE_CRC_SOURCE_AUTO);
 		/*Only one pipe/output is enough*/
 		break;
diff --git a/tests/intel/kms_dsc.c b/tests/intel/kms_dsc.c
index e70cae2524a8..e70e0d202628 100644
--- a/tests/intel/kms_dsc.c
+++ b/tests/intel/kms_dsc.c
@@ -251,7 +251,7 @@ static void test_dsc(data_t *data, uint32_t test_type, int bpc,
 {
 	igt_display_t *display = &data->display;
 	igt_output_t *output;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	char name[3][LEN] = {
 				{0},
 				{0},
@@ -260,12 +260,12 @@ static void test_dsc(data_t *data, uint32_t test_type, int bpc,
 
 	igt_require(check_gen11_bpc_constraint(data->drm_fd, data->input_bpc));
 
-	for_each_pipe_with_valid_output(display, pipe, output) {
+	for_each_crtc_with_valid_output(display, crtc, output) {
 		data->output_format = output_format;
 		data->plane_format = plane_format;
 		data->input_bpc = bpc;
 		data->output = output;
-		data->pipe = pipe;
+		data->pipe = crtc->pipe;
 
 		if (!is_dsc_supported_by_sink(data->drm_fd, data->output) ||
 		    !check_gen11_dp_constraint(data->drm_fd, data->output, data->pipe))
diff --git a/tests/intel/kms_fence_pin_leak.c b/tests/intel/kms_fence_pin_leak.c
index 15ae038d8b08..8dd39e157a95 100644
--- a/tests/intel/kms_fence_pin_leak.c
+++ b/tests/intel/kms_fence_pin_leak.c
@@ -210,17 +210,17 @@ static void run_test(data_t *data)
 {
 	igt_display_t *display = &data->display;
 	igt_output_t *output;
-	enum pipe p;
+	igt_crtc_t *crtc;
 
-	for_each_pipe_with_valid_output(display, p, output) {
+	for_each_crtc_with_valid_output(display, crtc, output) {
 		igt_display_reset(display);
 
 		igt_output_set_crtc(output,
-				    igt_crtc_for_pipe(output->display, p));
+				    crtc);
 		if (!intel_pipe_output_combo_valid(display))
 			continue;
 
-		run_single_test(data, p, output);
+		run_single_test(data, crtc->pipe, output);
 
 		return; /* one time ought to be enough */
 	}
diff --git a/tests/intel/kms_flip_tiling.c b/tests/intel/kms_flip_tiling.c
index 269bb0e24d0a..c063a60c8423 100644
--- a/tests/intel/kms_flip_tiling.c
+++ b/tests/intel/kms_flip_tiling.c
@@ -225,17 +225,17 @@ int igt_main()
 
 	igt_describe("Check pageflip between modifiers");
 	igt_subtest_with_dynamic("flip-change-tiling") {
-		enum pipe pipe;
+		igt_crtc_t *crtc;
 		bool run_in_simulation = igt_run_in_simulation();
 
-		for_each_pipe_with_valid_output(&data.display, pipe, output) {
+		for_each_crtc_with_valid_output(&data.display, crtc, output) {
 			igt_plane_t *plane;
 
 			igt_display_reset(&data.display);
 			pipe_crc_free(&data);
 
 			igt_output_set_crtc(output,
-					    igt_crtc_for_pipe(output->display, pipe));
+					    crtc);
 			if (!intel_pipe_output_combo_valid(&data.display))
 				continue;
 
@@ -260,17 +260,20 @@ int igt_main()
 						continue;
 
 					igt_dynamic_f("pipe-%s-%s-%s-to-%s",
-						      kmstest_pipe_name(pipe),
+						      igt_crtc_name(crtc),
 						      igt_output_name(output),
 						      igt_fb_modifier_name(modifier[0]),
 						      igt_fb_modifier_name(modifier[1]))
-						test_flip_tiling(&data, pipe, output, modifier);
+						test_flip_tiling(&data,
+								 crtc->pipe,
+								 output,
+								 modifier);
 
 					if (data.flipevent_in_queue)
 						handle_lost_event(&data);
 				}
 			}
-			test_cleanup(&data, pipe, output);
+			test_cleanup(&data, crtc->pipe, output);
 		}
 	}
 
diff --git a/tests/intel/kms_frontbuffer_tracking.c b/tests/intel/kms_frontbuffer_tracking.c
index cd80ba444cf5..b60874db000a 100644
--- a/tests/intel/kms_frontbuffer_tracking.c
+++ b/tests/intel/kms_frontbuffer_tracking.c
@@ -1163,20 +1163,20 @@ static bool find_connector(bool edp_only, bool pipe_a,
 			   enum pipe *ret_pipe)
 {
 	igt_output_t *output;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 
-	for_each_pipe_with_valid_output(&drm.display, pipe, output) {
+	for_each_crtc_with_valid_output(&drm.display, crtc, output) {
 		drmModeConnectorPtr c = output->config.connector;
 
 		if (edp_only && c->connector_type != DRM_MODE_CONNECTOR_eDP)
 			continue;
 
-		if (pipe_a && pipe != PIPE_A)
+		if (pipe_a && crtc->pipe != PIPE_A)
 			continue;
 
-		if (output == forbidden_output || pipe == forbidden_pipe) {
+		if (output == forbidden_output || crtc->pipe == forbidden_pipe) {
 			igt_output_set_crtc(output,
-					    igt_crtc_for_pipe(output->display, pipe));
+					    crtc);
 			igt_output_override_mode(output, connector_get_mode(output));
 
 			continue;
@@ -1186,11 +1186,11 @@ static bool find_connector(bool edp_only, bool pipe_a,
 			continue;
 
 		igt_output_set_crtc(output,
-				    igt_crtc_for_pipe(output->display, pipe));
+				    crtc);
 		igt_output_override_mode(output, connector_get_mode(output));
 		if (intel_pipe_output_combo_valid(&drm.display)) {
 			*ret_output = output;
-			*ret_pipe = pipe;
+			*ret_pipe = crtc->pipe;
 			return true;
 		}
 	}
diff --git a/tests/intel/kms_mmap_write_crc.c b/tests/intel/kms_mmap_write_crc.c
index 453bcd0198a7..c68fd69c402d 100644
--- a/tests/intel/kms_mmap_write_crc.c
+++ b/tests/intel/kms_mmap_write_crc.c
@@ -269,7 +269,7 @@ int igt_main_args("n", NULL, NULL, opt_handler, NULL)
 {
 	int i;
 	igt_output_t *output;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 
 	igt_fixture() {
 		data.drm_fd = drm_open_driver_master(DRIVER_INTEL | DRIVER_XE);
@@ -289,18 +289,18 @@ int igt_main_args("n", NULL, NULL, opt_handler, NULL)
 	igt_describe("Tests that caching mode has become UC/WT and flushed using mmap write");
 
 	igt_subtest_with_dynamic("main") {
-		for_each_pipe_with_valid_output(&data.display, pipe, output) {
+		for_each_crtc_with_valid_output(&data.display, crtc, output) {
 			igt_display_reset(&data.display);
 
 			igt_output_set_crtc(output,
-					    igt_crtc_for_pipe(output->display, pipe));
+					    crtc);
 			if (!intel_pipe_output_combo_valid(&data.display))
 				continue;
 
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe),
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
 				      igt_output_name(output)) {
 				data.output = output;
-				data.pipe = pipe;
+				data.pipe = crtc->pipe;
 
 				igt_info("Using %d rounds for each pipe in the test\n", ROUNDS);
 				prepare_crtc(&data);
diff --git a/tests/intel/kms_pipe_b_c_ivb.c b/tests/intel/kms_pipe_b_c_ivb.c
index 4559c8b9e951..f6261cb885b9 100644
--- a/tests/intel/kms_pipe_b_c_ivb.c
+++ b/tests/intel/kms_pipe_b_c_ivb.c
@@ -150,16 +150,16 @@ static void
 find_outputs(data_t *data, igt_output_t **output1, igt_output_t **output2)
 {
 	igt_output_t *output;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 
 	*output1 = NULL;
 	*output2 = NULL;
 
-	for_each_pipe_with_valid_output(&data->display, pipe, output) {
-		if (pipe == PIPE_B && !*output1 && output != *output2)
+	for_each_crtc_with_valid_output(&data->display, crtc, output) {
+		if (crtc->pipe == PIPE_B && !*output1 && output != *output2)
 			*output1 = output;
 
-		if (pipe == PIPE_C && output != *output1 && !*output2)
+		if (crtc->pipe == PIPE_C && output != *output1 && !*output2)
 			*output2 = output;
 
 		igt_output_set_crtc(output, NULL);
diff --git a/tests/intel/kms_pm_rpm.c b/tests/intel/kms_pm_rpm.c
index d7d0989b9a67..31f596413f9f 100644
--- a/tests/intel/kms_pm_rpm.c
+++ b/tests/intel/kms_pm_rpm.c
@@ -1620,22 +1620,22 @@ static bool is_preferred_mode_present(igt_output_t *output, enum pipe pipe,
 
 static void set_prefered_mode(void)
 {
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	igt_output_t *output;
 	bool mode_found = false;
 	igt_display_t *display = &ms_data.display;
 
 	igt_display_reset(display);
 
-	for_each_pipe_with_valid_output(display, pipe, output) {
+	for_each_crtc_with_valid_output(display, crtc, output) {
 
 		igt_output_set_crtc(output,
-				    igt_crtc_for_pipe(output->display, pipe));
+				    crtc);
 
 		if (!intel_pipe_output_combo_valid(display))
 			continue;
 
-		if (is_preferred_mode_present(output, pipe, display)) {
+		if (is_preferred_mode_present(output, crtc->pipe, display)) {
 			mode_found = true;
 			break;
 		}
diff --git a/tests/intel/kms_psr2_su.c b/tests/intel/kms_psr2_su.c
index 24318037ea44..39ee3ee17e54 100644
--- a/tests/intel/kms_psr2_su.c
+++ b/tests/intel/kms_psr2_su.c
@@ -118,9 +118,9 @@ static void setup_output(data_t *data)
 {
 	igt_display_t *display = &data->display;
 	igt_output_t *output;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 
-	for_each_pipe_with_valid_output(display, pipe, output) {
+	for_each_crtc_with_valid_output(display, crtc, output) {
 		drmModeConnectorPtr c = output->config.connector;
 
 		if (c->connector_type != DRM_MODE_CONNECTOR_eDP)
@@ -128,7 +128,7 @@ static void setup_output(data_t *data)
 
 		igt_display_reset(display);
 		igt_output_set_crtc(output,
-				    igt_crtc_for_pipe(output->display, pipe));
+				    crtc);
 		if (!intel_pipe_output_combo_valid(display))
 			continue;
 
@@ -313,7 +313,7 @@ static int check_psr2_support(data_t *data, enum pipe pipe)
 int igt_main()
 {
 	data_t data = {};
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	int r, i;
 	igt_output_t *outputs[IGT_MAX_PIPES * IGT_MAX_PIPES];
 	int pipes[IGT_MAX_PIPES * IGT_MAX_PIPES];
@@ -354,9 +354,10 @@ int igt_main()
 		r = timerfd_settime(data.change_screen_timerfd, 0, &interval, NULL);
 		igt_require_f(r != -1, "Error setting timerfd\n");
 
-		for_each_pipe_with_valid_output(&data.display, pipe, data.output) {
-			if (check_psr2_support(&data, pipe)) {
-				pipes[n_pipes] = pipe;
+		for_each_crtc_with_valid_output(&data.display, crtc,
+						data.output) {
+			if (check_psr2_support(&data, crtc->pipe)) {
+				pipes[n_pipes] = crtc->pipe;
 				outputs[n_pipes] = data.output;
 				n_pipes++;
 			}
diff --git a/tests/intel/kms_psr_stress_test.c b/tests/intel/kms_psr_stress_test.c
index 87016eb94f4f..09e73bd49bb3 100644
--- a/tests/intel/kms_psr_stress_test.c
+++ b/tests/intel/kms_psr_stress_test.c
@@ -83,11 +83,11 @@ static void setup_output(data_t *data)
 {
 	igt_display_t *display = &data->display;
 	igt_output_t *output;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 
 	igt_display_require(&data->display, data->drm_fd);
 
-	for_each_pipe_with_valid_output(display, pipe, output) {
+	for_each_crtc_with_valid_output(display, crtc, output) {
 		drmModeConnectorPtr c = output->config.connector;
 
 		if (c->connector_type != DRM_MODE_CONNECTOR_eDP)
@@ -95,7 +95,7 @@ static void setup_output(data_t *data)
 
 		igt_display_reset(display);
 		igt_output_set_crtc(output,
-				    igt_crtc_for_pipe(output->display, pipe));
+				    crtc);
 		if (!intel_pipe_output_combo_valid(display)) {
 			igt_output_set_crtc(output, NULL);
 			continue;
diff --git a/tests/intel/perf_pmu.c b/tests/intel/perf_pmu.c
index 57113981d70a..f87674f74e8f 100644
--- a/tests/intel/perf_pmu.c
+++ b/tests/intel/perf_pmu.c
@@ -1120,7 +1120,7 @@ event_wait(int gem_fd, const intel_ctx_t *ctx,
 	uint16_t devid;
 	igt_output_t *output;
 	data_t data;
-	enum pipe p;
+	igt_crtc_t *crtc;
 	int fd;
 
 	devid = intel_get_drm_devid(gem_fd);
@@ -1167,13 +1167,13 @@ event_wait(int gem_fd, const intel_ctx_t *ctx,
 	eb.flags = e->flags | I915_EXEC_SECURE;
 	eb.rsvd1 = ctx->id;
 
-	for_each_pipe_with_valid_output(&data.display, p, output) {
+	for_each_crtc_with_valid_output(&data.display, crtc, output) {
 		struct igt_helper_process waiter = { };
 		const unsigned int frames = 3;
 		uint64_t val[2];
 
 		batch[6] = MI_WAIT_FOR_EVENT;
-		switch (p) {
+		switch (crtc->pipe) {
 		case PIPE_A:
 			batch[6] |= MI_WAIT_FOR_PIPE_A_VBLANK;
 			batch[5] = ~(1 << 3);
@@ -1192,7 +1192,7 @@ event_wait(int gem_fd, const intel_ctx_t *ctx,
 
 		gem_write(gem_fd, obj.handle, 0, batch, sizeof(batch));
 
-		data.pipe = p;
+		data.pipe = crtc->pipe;
 		prepare_crtc(&data, gem_fd, output);
 
 		fd = open_pmu(gem_fd,
diff --git a/tests/intel/prime_mmap_kms.c b/tests/intel/prime_mmap_kms.c
index c19c3763fc04..b263a5822063 100644
--- a/tests/intel/prime_mmap_kms.c
+++ b/tests/intel/prime_mmap_kms.c
@@ -201,13 +201,13 @@ static void run_test(gpu_process_t *gpu)
 {
 	igt_display_t *display = &gpu->display;
 	igt_output_t *output;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 
-	for_each_pipe_with_valid_output(display, pipe, output) {
+	for_each_crtc_with_valid_output(display, crtc, output) {
 		int prime_fd;
 
 		gpu->output = output;
-		gpu->pipe = pipe;
+		gpu->pipe = crtc->pipe;
 
 		prepare_crtc(gpu);
 
diff --git a/tests/intel/xe_pat.c b/tests/intel/xe_pat.c
index 24339f688ce6..21547c84e7f9 100644
--- a/tests/intel/xe_pat.c
+++ b/tests/intel/xe_pat.c
@@ -910,7 +910,7 @@ static void display_vs_wb_transient(int fd)
 	struct buf_ops *bops;
 	struct igt_fb src_fb, dst_fb;
 	struct intel_buf src, dst;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	int bpp = 32;
 	int i;
 
@@ -927,16 +927,16 @@ static void display_vs_wb_transient(int fd)
 	bops = buf_ops_create(fd);
 	ibb = intel_bb_create(fd, SZ_4K);
 
-	for_each_pipe_with_valid_output(&display, pipe, output) {
+	for_each_crtc_with_valid_output(&display, crtc, output) {
 		igt_display_reset(&display);
 
 		igt_output_set_crtc(output,
-				    igt_crtc_for_pipe(output->display, pipe));
+				    crtc);
 		if (!intel_pipe_output_combo_valid(&display))
 			continue;
 
 		mode = igt_output_get_mode(output);
-		pipe_crc = igt_crtc_crc_new(igt_crtc_for_pipe(&display, pipe),
+		pipe_crc = igt_crtc_crc_new(crtc,
 					    IGT_PIPE_CRC_SOURCE_AUTO);
 		break;
 	}
diff --git a/tests/kms_atomic_interruptible.c b/tests/kms_atomic_interruptible.c
index 05cf3f956e1f..8565fc501dc7 100644
--- a/tests/kms_atomic_interruptible.c
+++ b/tests/kms_atomic_interruptible.c
@@ -325,7 +325,7 @@ int igt_main()
 {
 	igt_display_t display;
 	igt_output_t *output;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 
 	igt_fixture() {
 		display.drm_fd = drm_open_driver_master(DRIVER_ANY);
@@ -341,84 +341,105 @@ int igt_main()
 
 	igt_describe("Tests the interrupt properties of legacy modeset");
 	igt_subtest_with_dynamic("legacy-setmode") {
-		for_each_pipe_with_valid_output(&display, pipe, output) {
-			if (!pipe_output_combo_valid(&display, pipe, output))
+		for_each_crtc_with_valid_output(&display, crtc, output) {
+			if (!pipe_output_combo_valid(&display, crtc->pipe, output))
 				continue;
 
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
-				run_plane_test(&display, pipe, output, test_legacy_modeset, DRM_PLANE_TYPE_PRIMARY);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output))
+				run_plane_test(&display, crtc->pipe, output,
+					       test_legacy_modeset,
+					       DRM_PLANE_TYPE_PRIMARY);
 			break;
 		}
 	}
 
 	igt_describe("Tests the interrupt properties of atomic modeset");
 	igt_subtest_with_dynamic("atomic-setmode") {
-		for_each_pipe_with_valid_output(&display, pipe, output) {
-			if (!pipe_output_combo_valid(&display, pipe, output))
+		for_each_crtc_with_valid_output(&display, crtc, output) {
+			if (!pipe_output_combo_valid(&display, crtc->pipe, output))
 				continue;
 
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
-				run_plane_test(&display, pipe, output, test_atomic_modeset, DRM_PLANE_TYPE_PRIMARY);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output))
+				run_plane_test(&display, crtc->pipe, output,
+					       test_atomic_modeset,
+					       DRM_PLANE_TYPE_PRIMARY);
 			break;
 		}
 	}
 
 	igt_describe("Tests the interrupt properties for DPMS");
 	igt_subtest_with_dynamic("legacy-dpms") {
-		for_each_pipe_with_valid_output(&display, pipe, output) {
-			if (!pipe_output_combo_valid(&display, pipe, output))
+		for_each_crtc_with_valid_output(&display, crtc, output) {
+			if (!pipe_output_combo_valid(&display, crtc->pipe, output))
 				continue;
 
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
-				run_plane_test(&display, pipe, output, test_legacy_dpms, DRM_PLANE_TYPE_PRIMARY);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output))
+				run_plane_test(&display, crtc->pipe, output,
+					       test_legacy_dpms,
+					       DRM_PLANE_TYPE_PRIMARY);
 			break;
 		}
 	}
 
 	igt_describe("Tests the interrupt properties for pageflip");
 	igt_subtest_with_dynamic("legacy-pageflip") {
-		for_each_pipe_with_valid_output(&display, pipe, output) {
-			if (!pipe_output_combo_valid(&display, pipe, output))
+		for_each_crtc_with_valid_output(&display, crtc, output) {
+			if (!pipe_output_combo_valid(&display, crtc->pipe, output))
 				continue;
 
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
-				run_plane_test(&display, pipe, output, test_pageflip, DRM_PLANE_TYPE_PRIMARY);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output))
+				run_plane_test(&display, crtc->pipe, output,
+					       test_pageflip,
+					       DRM_PLANE_TYPE_PRIMARY);
 			break;
 		}
 	}
 
 	igt_describe("Tests the interrupt properties for cursor");
 	igt_subtest_with_dynamic("legacy-cursor") {
-		for_each_pipe_with_valid_output(&display, pipe, output) {
-			if (!pipe_output_combo_valid(&display, pipe, output))
+		for_each_crtc_with_valid_output(&display, crtc, output) {
+			if (!pipe_output_combo_valid(&display, crtc->pipe, output))
 				continue;
 
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
-				run_plane_test(&display, pipe, output, test_setcursor, DRM_PLANE_TYPE_CURSOR);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output))
+				run_plane_test(&display, crtc->pipe, output,
+					       test_setcursor,
+					       DRM_PLANE_TYPE_CURSOR);
 			break;
 		}
 	}
 
 	igt_describe("Tests the interrupt properties for primary plane");
 	igt_subtest_with_dynamic("universal-setplane-primary") {
-		for_each_pipe_with_valid_output(&display, pipe, output) {
-			if (!pipe_output_combo_valid(&display, pipe, output))
+		for_each_crtc_with_valid_output(&display, crtc, output) {
+			if (!pipe_output_combo_valid(&display, crtc->pipe, output))
 				continue;
 
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
-				run_plane_test(&display, pipe, output, test_setplane, DRM_PLANE_TYPE_PRIMARY);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output))
+				run_plane_test(&display, crtc->pipe, output,
+					       test_setplane,
+					       DRM_PLANE_TYPE_PRIMARY);
 			break;
 		}
 	}
 
 	igt_describe("Tests the interrupt properties for cursor plane");
 	igt_subtest_with_dynamic("universal-setplane-cursor") {
-		for_each_pipe_with_valid_output(&display, pipe, output) {
-			if (!pipe_output_combo_valid(&display, pipe, output))
+		for_each_crtc_with_valid_output(&display, crtc, output) {
+			if (!pipe_output_combo_valid(&display, crtc->pipe, output))
 				continue;
 
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
-				run_plane_test(&display, pipe, output, test_setplane, DRM_PLANE_TYPE_CURSOR);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output))
+				run_plane_test(&display, crtc->pipe, output,
+					       test_setplane,
+					       DRM_PLANE_TYPE_CURSOR);
 			break;
 		}
 	}
diff --git a/tests/kms_atomic_transition.c b/tests/kms_atomic_transition.c
index f0598e486111..ece95961cdf2 100644
--- a/tests/kms_atomic_transition.c
+++ b/tests/kms_atomic_transition.c
@@ -1128,7 +1128,7 @@ static data_t data;
 int igt_main_args("", long_opts, help_str, opt_handler, &data)
 {
 	igt_output_t *output;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	struct {
 		const char *name;
 		enum transition_type type;
@@ -1201,17 +1201,18 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
 	igt_subtest_with_dynamic("plane-primary-toggle-with-vblank-wait") {
 		pipe_count = 0;
 
-		for_each_pipe_with_valid_output(&data.display, pipe, output) {
+		for_each_crtc_with_valid_output(&data.display, crtc, output) {
 			if (pipe_count == 2 * count && !data.extended)
 				break;
 
-			if (!pipe_output_combo_valid(&data.display, pipe, output))
+			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 				continue;
 
 			pipe_count++;
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
-				run_primary_test(&data, pipe, output);
-			test_cleanup(&data, pipe, output, false);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output))
+				run_primary_test(&data, crtc->pipe, output);
+			test_cleanup(&data, crtc->pipe, output, false);
 		}
 	}
 
@@ -1223,7 +1224,8 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
 		igt_subtest_with_dynamic_f("%s", transition_tests[i].name) {
 			pipe_count = 0;
 
-			for_each_pipe_with_valid_output(&data.display, pipe, output) {
+			for_each_crtc_with_valid_output(&data.display, crtc,
+							output) {
 				/*
 				 * Test modeset cases on internal panels separately with a reduced
 				 * number of combinations, to avoid long runtimes due to modesets on
@@ -1240,19 +1242,20 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
 				if (pipe_count == 2 * count && !data.extended)
 					break;
 
-				if (!pipe_output_combo_valid(&data.display, pipe, output))
+				if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
 					continue;
 
 				pipe_count++;
 				igt_dynamic_f("pipe-%s-%s",
-					      kmstest_pipe_name(pipe),
+					      igt_crtc_name(crtc),
 					      igt_output_name(output))
-					run_transition_test(&data, pipe, output,
+					run_transition_test(&data, crtc->pipe,
+							    output,
 							    transition_tests[i].type,
 							    transition_tests[i].nonblocking,
 							    transition_tests[i].fencing);
 
-				test_cleanup(&data, pipe, output,
+				test_cleanup(&data, crtc->pipe, output,
 					     transition_tests[i].fencing);
 			}
 		}
diff --git a/tests/kms_flip_event_leak.c b/tests/kms_flip_event_leak.c
index ce8993ccb681..545719638898 100644
--- a/tests/kms_flip_event_leak.c
+++ b/tests/kms_flip_event_leak.c
@@ -107,7 +107,7 @@ int igt_main()
 {
 	data_t data = {};
 	igt_output_t *output;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 
 	igt_fixture() {
 		data.drm_fd = drm_open_driver_master(DRIVER_ANY);
@@ -118,16 +118,17 @@ int igt_main()
 	}
 
 	igt_subtest_with_dynamic("basic") {
-		for_each_pipe_with_valid_output(&data.display, pipe, output) {
+		for_each_crtc_with_valid_output(&data.display, crtc, output) {
 			igt_display_reset(&data.display);
 
 			igt_output_set_crtc(output,
-					    igt_crtc_for_pipe(output->display, pipe));
+					    crtc);
 			if (!intel_pipe_output_combo_valid(&data.display))
 				continue;
 
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
-				test(&data, pipe, output);
+			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+				      igt_output_name(output)) {
+				test(&data, crtc->pipe, output);
 			}
 		}
 	}
diff --git a/tests/kms_invalid_mode.c b/tests/kms_invalid_mode.c
index a3d52deafd7f..163bdb96bc3a 100644
--- a/tests/kms_invalid_mode.c
+++ b/tests/kms_invalid_mode.c
@@ -337,7 +337,7 @@ static data_t data;
 int igt_main()
 {
 
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	igt_output_t *output;
 
 	igt_fixture() {
@@ -356,17 +356,20 @@ int igt_main()
 	igt_describe("Make sure all modesets are rejected when the requested mode is invalid");
 	for (int i = 0; i < ARRAY_SIZE(subtests); i++) {
 		igt_subtest_with_dynamic(subtests[i].name) {
-			for_each_pipe_with_valid_output(&data.display, pipe, output) {
+			for_each_crtc_with_valid_output(&data.display, crtc,
+							output) {
 				igt_display_reset(&data.display);
 
 				igt_output_set_crtc(output,
-						    igt_crtc_for_pipe(output->display, pipe));
+						    crtc);
 				if (!intel_pipe_output_combo_valid(&data.display))
 					continue;
 
-				igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
+				igt_dynamic_f("pipe-%s-%s",
+					      igt_crtc_name(crtc),
+					      igt_output_name(output)) {
 					data.output = output;
-					data.pipe = pipe;
+					data.pipe = crtc->pipe;
 					data.adjust_mode = subtests[i].adjust_mode;
 					test_output(&data);
 				}
diff --git a/tests/kms_panel_fitting.c b/tests/kms_panel_fitting.c
index 9bfb7d3f1356..f4c2d0697539 100644
--- a/tests/kms_panel_fitting.c
+++ b/tests/kms_panel_fitting.c
@@ -246,7 +246,7 @@ static void test_panel_fitting(data_t *data, enum test_type type)
 {
 	igt_display_t *display = &data->display;
 	igt_output_t *output;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	struct stat sb;
 
 	if (type == TEST_ATOMIC) {
@@ -265,18 +265,20 @@ static void test_panel_fitting(data_t *data, enum test_type type)
 
 	}
 
-	for_each_pipe_with_valid_output(display, pipe, output) {
+	for_each_crtc_with_valid_output(display, crtc, output) {
 		/* Check that the "scaling mode" property has been set. */
 		if (!igt_output_has_prop(output, IGT_CONNECTOR_SCALING_MODE))
 			continue;
 
 		cleanup_crtc(data);
 
-		igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), output->name) {
+		igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc), output->name) {
 			if (type == TEST_ATOMIC)
-				test_panel_fitting_fastset(display, pipe, output);
+				test_panel_fitting_fastset(display,
+							   crtc->pipe, output);
 			if (type == TEST_LEGACY)
-				test_panel_fitting_legacy(data, display, pipe, output);
+				test_panel_fitting_legacy(data, display,
+							  crtc->pipe, output);
 		}
 	}
 }
diff --git a/tests/kms_plane_multiple.c b/tests/kms_plane_multiple.c
index fd2293a6c742..e399f3ee270d 100644
--- a/tests/kms_plane_multiple.c
+++ b/tests/kms_plane_multiple.c
@@ -556,23 +556,24 @@ static void run_2_display_test(data_t *data, uint64_t modifier, const char *name
 
 static void run_test(data_t *data, uint64_t modifier, const char *name)
 {
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	igt_output_t *output;
 	igt_display_t *display = &data->display;
 
 	igt_skip_on_f(!igt_display_has_format_mod(display, DRM_FORMAT_XRGB8888, modifier),
 		      "%s modifier is not supported\n", name);
 
-	for_each_pipe_with_valid_output(display, pipe, output) {
+	for_each_crtc_with_valid_output(display, crtc, output) {
 		igt_display_reset(display);
 
 		igt_output_set_crtc(output,
-				    igt_crtc_for_pipe(output->display, pipe));
+				    crtc);
 		if (!intel_pipe_output_combo_valid(display))
 			continue;
 
-		igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), output->name)
-			test_plane_position(data, pipe, output, modifier);
+		igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc), output->name)
+			test_plane_position(data, crtc->pipe, output,
+					    modifier);
 	}
 }
 
diff --git a/tests/kms_scaling_modes.c b/tests/kms_scaling_modes.c
index 588513750257..f74db2912561 100644
--- a/tests/kms_scaling_modes.c
+++ b/tests/kms_scaling_modes.c
@@ -110,9 +110,9 @@ static void test_scaling_mode(data_t *data, uint32_t flags)
 {
 	igt_display_t *display = &data->display;
 	igt_output_t *output;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 
-	for_each_pipe_with_valid_output(display, pipe, output) {
+	for_each_crtc_with_valid_output(display, crtc, output) {
 		igt_display_reset(display);
 
 		if (!has_scaling_mode(output)) {
@@ -122,12 +122,14 @@ static void test_scaling_mode(data_t *data, uint32_t flags)
 		}
 
 		igt_output_set_crtc(output,
-				    igt_crtc_for_pipe(output->display, pipe));
+				    crtc);
 		if (!intel_pipe_output_combo_valid(display))
 			continue;
 
-		igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
-			test_scaling_mode_on_output(display, pipe, output, flags);
+		igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+			      igt_output_name(output))
+			test_scaling_mode_on_output(display, crtc->pipe,
+						    output, flags);
 	}
 }
 
diff --git a/tests/kms_sequence.c b/tests/kms_sequence.c
index 9eea70cf7a88..7fe314afaf7f 100644
--- a/tests/kms_sequence.c
+++ b/tests/kms_sequence.c
@@ -272,7 +272,7 @@ int igt_main()
 {
 	int fd;
 	igt_output_t *output;
-	enum pipe p;
+	igt_crtc_t *crtc;
 	data_t data;
 	const struct {
 		const char *name;
@@ -309,16 +309,19 @@ int igt_main()
 			igt_describe("This is a test of drmCrtcGetSequence and "
 				     "drmCrtcQueueSequence");
 			igt_subtest_with_dynamic_f("%s-%s", f->name, m->name) {
-				for_each_pipe_with_valid_output(&data.display, p, output) {
+				for_each_crtc_with_valid_output(&data.display,
+								crtc, output) {
 					igt_display_reset(&data.display);
 
 					igt_output_set_crtc(output,
-							    igt_crtc_for_pipe(output->display, p));
+							    crtc);
 					if (!intel_pipe_output_combo_valid(&data.display))
 						continue;
 
-					igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(p), igt_output_name(output)) {
-						data.pipe = p;
+					igt_dynamic_f("pipe-%s-%s",
+						      igt_crtc_name(crtc),
+						      igt_output_name(output)) {
+						data.pipe = crtc->pipe;
 						data.output = output;
 						data.flags = m->flags;
 						run_test(&data, fd, f->func);
diff --git a/tests/prime_vgem.c b/tests/prime_vgem.c
index 79963648f132..bbf5ab97f459 100644
--- a/tests/prime_vgem.c
+++ b/tests/prime_vgem.c
@@ -1053,12 +1053,12 @@ static void test_flip(int i915, int vgem, unsigned hang)
 	igt_display_t display;
 	igt_output_t *output;
 	struct vgem_bo bo[2];
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 
 	igt_display_require(&display, i915);
 	igt_display_require_output(&display);
 
-	for_each_pipe_with_valid_output(&display, pipe, output) {
+	for_each_crtc_with_valid_output(&display, crtc, output) {
 		mode = igt_output_get_mode(output);
 		break;
 	}
diff --git a/tests/vmwgfx/vmw_prime.c b/tests/vmwgfx/vmw_prime.c
index 5f704089b146..e5aca6169e3b 100644
--- a/tests/vmwgfx/vmw_prime.c
+++ b/tests/vmwgfx/vmw_prime.c
@@ -287,20 +287,20 @@ static void draw_triangle_3d(struct gpu_process_t *gpu, uint32_t draw_flags)
 {
 	igt_display_t *display = &gpu->display;
 	igt_output_t *output;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	igt_pipe_crc_t *pipe_crc;
 	igt_crc_t blank_crc, tri_crc;
 	char *blank_crc_str, *tri_crc_str;
 	bool crc_equal;
 
-	for_each_pipe_with_valid_output(display, pipe, output) {
+	for_each_crtc_with_valid_output(display, crtc, output) {
 		int prime_fd;
 
 		gpu->output = output;
-		gpu->pipe = pipe;
+		gpu->pipe = crtc->pipe;
 
 		prepare_crtc(gpu);
-		pipe_crc = igt_pipe_crc_new(gpu->mdevice.drm_fd, pipe,
+		pipe_crc = igt_pipe_crc_new(gpu->mdevice.drm_fd, crtc->pipe,
 					    IGT_PIPE_CRC_SOURCE_AUTO);
 		igt_pipe_crc_collect_crc(pipe_crc, &blank_crc);
 
@@ -352,7 +352,7 @@ static void draw_dumb_buffer(struct gpu_process_t *gpu)
 {
 	igt_display_t *display = &gpu->display;
 	igt_output_t *output;
-	enum pipe pipe;
+	igt_crtc_t *crtc;
 	igt_pipe_crc_t *pipe_crc;
 	igt_crc_t blank_crc, red_crc, blue_crc, tri_crc, red2_crc;
 	char *blank_crc_str, *red_crc_str, *red2_crc_str, *blue_crc_str,
@@ -362,12 +362,12 @@ static void draw_dumb_buffer(struct gpu_process_t *gpu)
 	struct vmw_default_objects objects = { 0 };
 	int32_t cid = vmw_ioctl_context_create(gpu->mdevice.drm_fd);
 
-	for_each_pipe_with_valid_output(display, pipe, output) {
+	for_each_crtc_with_valid_output(display, crtc, output) {
 		gpu->output = output;
-		gpu->pipe = pipe;
+		gpu->pipe = crtc->pipe;
 
 		prepare_crtc_surface(gpu);
-		pipe_crc = igt_pipe_crc_new(gpu->mdevice.drm_fd, pipe,
+		pipe_crc = igt_pipe_crc_new(gpu->mdevice.drm_fd, crtc->pipe,
 					    IGT_PIPE_CRC_SOURCE_AUTO);
 		igt_pipe_crc_collect_crc(pipe_crc, &blank_crc);
 
-- 
2.52.0


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

* [PATCH i-g-t 15/15] lib/kms: Nuke for_each_pipe_with_*_output()
  2026-01-30 10:52 [PATCH i-g-t 00/15] lib/kms: Start introducing for_each_crtc*() Ville Syrjala
                   ` (13 preceding siblings ...)
  2026-01-30 10:52 ` [PATCH i-g-t 14/15] lib/kms: Use for_each_crtc_with_valid_output(), part 4 Ville Syrjala
@ 2026-01-30 10:52 ` Ville Syrjala
  2026-01-30 14:35   ` Jani Nikula
  2026-02-03  2:58 ` ✓ i915.CI.BAT: success for lib/kms: Start introducing for_each_crtc*() (rev2) Patchwork
                   ` (3 subsequent siblings)
  18 siblings, 1 reply; 42+ messages in thread
From: Ville Syrjala @ 2026-01-30 10:52 UTC (permalink / raw)
  To: igt-dev

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

The pipe based for_each_pipe_with_{single,valid}_output()
iterators are no longer used anywhere. Get rid of them
so that everyone is forced to use the new crtc based
counterparts instead.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 lib/igt_kms.h | 38 --------------------------------------
 1 file changed, 38 deletions(-)

diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index a4857ea0e574..057a0f5e90e0 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -774,27 +774,6 @@ static inline bool igt_crtc_connector_valid(igt_crtc_t *crtc, igt_output_t *outp
 	     (crtc)++) \
 		for_each_if ((crtc)->valid)
 
-/**
- * for_each_pipe_with_valid_output:
- * @display: a pointer to an #igt_display_t structure
- * @pipe: The pipe for which this @pipe / @output combination is valid.
- * @output: The output for which this @pipe / @output combination is valid.
- *
- * This for loop is called over all connected outputs. This function
- * will try every combination of @pipe and @output.
- *
- * If you only need to test a single output for each pipe, use
- * for_each_pipe_with_single_output(), if you only need an
- * output for a single pipe, use igt_get_single_output_for_pipe().
- */
-#define for_each_pipe_with_valid_output(display, pipe, output) \
-	for (int con__ = (pipe) = 0; \
-	     assert(igt_can_fail()), (pipe) < igt_display_n_crtcs(display) && con__ < (display)->n_outputs; \
-	     con__ = (con__ + 1 < (display)->n_outputs) ? con__ + 1 : (pipe = pipe + 1, 0)) \
-		for_each_if(igt_crtc_for_pipe((display), (pipe))->valid) \
-			for_each_if ((((output) = &(display)->outputs[con__]), \
-						igt_pipe_connector_valid((pipe), (output))))
-
 /**
  * for_each_crtc_with_valid_output:
  * @display: a pointer to an #igt_display_t structure
@@ -819,23 +798,6 @@ static inline bool igt_crtc_connector_valid(igt_crtc_t *crtc, igt_output_t *outp
 igt_output_t **__igt_pipe_populate_outputs(igt_display_t *display,
 					   igt_output_t **chosen_outputs);
 
-/**
- * for_each_pipe_with_single_output:
- * @display: a pointer to an #igt_display_t structure
- * @pipe: The pipe for which this @pipe / @output combination is valid.
- * @output: The output for which this @pipe / @output combination is valid.
- *
- * This loop is called over all pipes, and will try to find a compatible output
- * for each pipe. Unlike for_each_pipe_with_valid_output(), this function will
- * be called at most once for each pipe.
- */
-#define for_each_pipe_with_single_output(display, pipe, output) \
-	for (igt_output_t *__outputs[igt_display_n_crtcs(display)], \
-	     **__output = __igt_pipe_populate_outputs((display), __outputs); \
-		 __output < &__outputs[igt_display_n_crtcs(display)]; __output++) \
-		for_each_if (*__output && \
-			     ((pipe) = (__output - __outputs), (output) = *__output, 1))
-
 /**
  * for_each_crtc_with_single_output:
  * @display: a pointer to an #igt_display_t structure
-- 
2.52.0


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

* Re: [PATCH i-g-t 03/15] tests/kms_plane_scaling: Use for_each_crtc*()
  2026-01-30 10:52 ` [PATCH i-g-t 03/15] tests/kms_plane_scaling: " Ville Syrjala
@ 2026-01-30 12:03   ` Jani Nikula
  2026-01-30 15:41     ` Ville Syrjälä
  2026-01-30 14:07   ` Jani Nikula
  1 sibling, 1 reply; 42+ messages in thread
From: Jani Nikula @ 2026-01-30 12:03 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

On Fri, 30 Jan 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> -				for_each_pipe(&data.display, pipe) {
> -					igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
> -						for_each_valid_output_on_pipe(&data.display, pipe, output) {
> +				for_each_crtc(&data.display, crtc) {
> +					igt_dynamic_f("pipe-%s", igt_crtc_name(crtc)) {

First, a higher level meta comment here. I'm having mild second thoughts
about igt_crtc_name() returning kmstest_pipe_name().

What if, in the future, we want to use CRTC name? And make that
different from the pipe name? If we percolate igt_crtc_name() all over
the place, the switch is going to be difficult. (Mostly because it's
being used in test names.)

Should we have igt_crtc_name() return something based on the CRTC index
instead? And have, say, igt_crtc_pipe_name() return kmstest_pipe_name(),
and use that in these conversions?

Or, more generally, maybe igt_crtc_name() should be the vendor neutral
DRM KMS name, and, say, igt_crtc_vendor_name() should return something
that's specific to the vendor. For Intel, it would be pipe, since that's
mostly Intel specific thing. For others, it might be something else.

Or am I overcomplicating, and we should just cross that bridge when we
come to it?


BR,
Jani.


-- 
Jani Nikula, Intel

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

* Re: [PATCH i-g-t 01/15] lib/kms: Introduce for_each_crtc*()
  2026-01-30 10:52 ` [PATCH i-g-t 01/15] lib/kms: Introduce for_each_crtc*() Ville Syrjala
@ 2026-01-30 13:38   ` Jani Nikula
  2026-01-30 15:36     ` Ville Syrjälä
  0 siblings, 1 reply; 42+ messages in thread
From: Jani Nikula @ 2026-01-30 13:38 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

On Fri, 30 Jan 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Add for_each_crtc*() as the crtc based replacement for
> the for_each_pipe*() iterators (which will eventually get
> nuked).
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  lib/igt_kms.h | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 68 insertions(+)
>
> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
> index 432c67d11780..a4857ea0e574 100644
> --- a/lib/igt_kms.h
> +++ b/lib/igt_kms.h
> @@ -682,6 +682,19 @@ static inline bool igt_pipe_connector_valid(enum pipe pipe, igt_output_t *output
>  		output->config.valid_crtc_idx_mask & (1 << (pipe));
>  }
>  
> +/**
> + * igt_crtc_connector_valid:
> + * @crtc: CRTC to check.
> + * @output: #igt_output_t to check.
> + *
> + * Checks whether the given CRTC and output can be used together.
> + */
> +static inline bool igt_crtc_connector_valid(igt_crtc_t *crtc, igt_output_t *output)
> +{
> +	return igt_output_is_connected(output) &&
> +		output->config.valid_crtc_idx_mask & (1 << crtc->pipe);

So should this use crtc->crtc_offset instead of crtc->pipe? Or will that
bring complications during the conversions that try to remain
functionally unchanged?

(And should crtc->crtc_offset really be named crtc_index?)

> +}
> +
>  #define for_each_if(condition) if (!(condition)) {} else
>  
>  /**
> @@ -744,6 +757,23 @@ static inline bool igt_pipe_connector_valid(enum pipe pipe, igt_output_t *output
>  	for_each_pipe_static(pipe) \
>  		for_each_if(igt_crtc_for_pipe((display), (pipe))->valid)
>  
> +/**
> + * for_each_crtc:
> + * @display: a pointer to an #igt_display_t structure
> + * @crtc: The CRTC
> + *
> + * This for loop iterates over all CRTCs.
> + *
> + * Note that this cannot be used to enumerate per-CRTC subtest names since it
> + * depends upon runtime probing of the actual kms driver that is being tested.
> + * Use #for_each_pipe_static instead.
> + */
> +#define for_each_crtc(display, crtc) \
> +	for ((crtc) = &(display)->crtcs[0]; \
> +	     (crtc) < &(display)->crtcs[(display)->n_crtcs]; \
> +	     (crtc)++) \
> +		for_each_if ((crtc)->valid)

I feel like for_each_crtc() should iterate the CRTCs in CRTC order, not
pipe order. What's the plan? Are we eventually going to have ->crtcs[]
in CRTC order? And then do something special when some tests want to use
pipe order?

The other day I was looking at making ->n_crtcs and thus
igt_display_n_crtcs() reflect the actual CRTC count, not IGT_MAX_PIPES,
and it's also complicated because too many places depend on
igt_display_n_crtcs() indicating the size of ->crtcs[] and that being
indexed by pipe instead of CRTC index. So that's also dependent on
indexing ->crtcs[] with CRTC index.

Anyway, the loops here make my head spin, but it's all

Reviewed-by: Jani Nikula <jani.nikula@intel.com>

I'd just like to hear what the plan is wrt the above questions, perhaps
recorded in the commit message.

BR,
Jani.


> +
>  /**
>   * for_each_pipe_with_valid_output:
>   * @display: a pointer to an #igt_display_t structure
> @@ -765,6 +795,27 @@ static inline bool igt_pipe_connector_valid(enum pipe pipe, igt_output_t *output
>  			for_each_if ((((output) = &(display)->outputs[con__]), \
>  						igt_pipe_connector_valid((pipe), (output))))
>  
> +/**
> + * for_each_crtc_with_valid_output:
> + * @display: a pointer to an #igt_display_t structure
> + * @crtc: CRTC for which this @crtc / @output combination is valid.
> + * @output: The output for which this @crtc / @output combination is valid.
> + *
> + * This for loop is called over all connected outputs. This function
> + * will try every combination of @crtc and @output.
> + *
> + * If you only need to test a single output for each pipe, use
> + * for_each_crtc_with_single_output(), if you only need an
> + * output for a single CRTC, use igt_get_single_output_for_pipe().
> + */
> +#define for_each_crtc_with_valid_output(display, crtc, output) \
> +	for ((output) = &(display)->outputs[0], (crtc) = &(display)->crtcs[0]; \
> +	     assert(igt_can_fail()), (crtc) < &(display)->crtcs[(display)->n_crtcs] && \
> +		     (output) < &(display)->outputs[(display)->n_outputs]; \
> +	     (output) = (output) + 1 < &(display)->outputs[(display)->n_outputs] ? \
> +		     (output) + 1 : ((crtc)++, &(display)->outputs[0])) \
> +		for_each_if ((crtc)->valid && igt_crtc_connector_valid((crtc), (output)))
> +
>  igt_output_t **__igt_pipe_populate_outputs(igt_display_t *display,
>  					   igt_output_t **chosen_outputs);
>  
> @@ -785,6 +836,23 @@ igt_output_t **__igt_pipe_populate_outputs(igt_display_t *display,
>  		for_each_if (*__output && \
>  			     ((pipe) = (__output - __outputs), (output) = *__output, 1))
>  
> +/**
> + * for_each_crtc_with_single_output:
> + * @display: a pointer to an #igt_display_t structure
> + * @crtc: The CRTC for which this @crtc / @output combination is valid.
> + * @output: The output for which this @crtc / @output combination is valid.
> + *
> + * This loop is called over all CRTCs, and will try to find a compatible output
> + * for each CRTC. Unlike for_each_pipe_with_valid_output(), this function will
> + * be called at most once for each pipe.
> + */
> +#define for_each_crtc_with_single_output(display, crtc, output) \
> +	for (igt_output_t *__outputs[igt_display_n_crtcs(display)], \
> +	     **__output = __igt_pipe_populate_outputs((display), __outputs); \
> +		 __output < &__outputs[igt_display_n_crtcs(display)]; __output++) \
> +		for_each_if (*__output && \
> +			     ((crtc) = igt_crtc_for_pipe((display), (__output - __outputs)), (output) = *__output, 1))
> +
>  /**
>   * for_each_valid_output_on_pipe:
>   * @display: a pointer to an #igt_display_t structure

-- 
Jani Nikula, Intel

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

* Re: [PATCH i-g-t 02/15] tests/drm_read: Use for_each_crtc*()
  2026-01-30 10:52 ` [PATCH i-g-t 02/15] tests/drm_read: Use for_each_crtc*() Ville Syrjala
@ 2026-01-30 13:39   ` Jani Nikula
  0 siblings, 0 replies; 42+ messages in thread
From: Jani Nikula @ 2026-01-30 13:39 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

On Fri, 30 Jan 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Convert tests/drm_read to use the crtc based iterators
> (as opposed to the old pipe based ones).
>
> This one was done manually due to coccinelle refusing
> to cooperate with me.
>
> I left the old 'pipe' variable around since its final value
> gets used in a bunch of places after the loop. I'll probably
> need further cleanup later, but this seems sufficient for now.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Reviewed-by: Jani Nikula <jani.nikula@intel.com>

> ---
>  tests/drm_read.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/tests/drm_read.c b/tests/drm_read.c
> index c44e207f7dd8..e745e98534bd 100644
> --- a/tests/drm_read.c
> +++ b/tests/drm_read.c
> @@ -280,6 +280,7 @@ int igt_main()
>  	igt_fixture() {
>  		struct sigaction alarm_action = {};
>  		igt_output_t *output;
> +		igt_crtc_t *crtc;
>  
>  		igt_assert_neq(sigaction(SIGALRM, NULL, &alarm_action), -1);
>  		alarm_action.sa_flags &= ~SA_RESTART;
> @@ -292,16 +293,17 @@ int igt_main()
>  		igt_display_require(&display, fd);
>  		igt_display_require_output(&display);
>  
> -		for_each_pipe_with_valid_output(&display, pipe, output) {
> +		for_each_crtc_with_valid_output(&display, crtc, output) {
>  			drmModeModeInfo *mode = igt_output_get_mode(output);
>  
>  			igt_create_pattern_fb(fd, mode->hdisplay, mode->vdisplay,
>  					      DRM_FORMAT_XRGB8888,
>  					      DRM_FORMAT_MOD_LINEAR, &fb);
>  
> -			igt_output_set_crtc(output,
> -				            igt_crtc_for_pipe(output->display, pipe));
> +			igt_output_set_crtc(output, crtc);
>  			igt_plane_set_fb(igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY), &fb);
> +
> +			pipe = crtc->pipe;
>  			break;
>  		}

-- 
Jani Nikula, Intel

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

* Re: [PATCH i-g-t 03/15] tests/kms_plane_scaling: Use for_each_crtc*()
  2026-01-30 10:52 ` [PATCH i-g-t 03/15] tests/kms_plane_scaling: " Ville Syrjala
  2026-01-30 12:03   ` Jani Nikula
@ 2026-01-30 14:07   ` Jani Nikula
  1 sibling, 0 replies; 42+ messages in thread
From: Jani Nikula @ 2026-01-30 14:07 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

On Fri, 30 Jan 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Convert tests/kms_plane_scaling to use the new crtc based
> iteratros (over the old pipe based ones).

*iterators

Reviewed-by: Jani Nikula <jani.nikula@intel.com>

> Coccinelle has a lot of trouble with this one so in the end
> I gave up and did the conversion manually.
>
> find_connected_pipe() is the slightly dodgy thing here since
> it uses the iterator after the loop. But I think the igt_require()
> stuff should trip up before if we didn't manage to find a suitable
> crtc at all. So should be safe.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  tests/kms_plane_scaling.c | 119 +++++++++++++++++++-------------------
>  1 file changed, 59 insertions(+), 60 deletions(-)
>
> diff --git a/tests/kms_plane_scaling.c b/tests/kms_plane_scaling.c
> index 70cf704c05fa..63fbc8c603bb 100644
> --- a/tests/kms_plane_scaling.c
> +++ b/tests/kms_plane_scaling.c
> @@ -843,19 +843,18 @@ test_scaler_with_pixel_format_pipe(data_t *d, double sf_plane,
>  static enum pipe
>  find_connected_pipe(igt_display_t *display, bool second, igt_output_t **output)
>  {
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	bool first_output = false;
>  	bool found = false;
>  
>  	igt_display_reset(display);
>  
> -	for_each_pipe(display, pipe) {
> -		for_each_valid_output_on_pipe(display, pipe, *output) {
> +	for_each_crtc(display, crtc) {
> +		for_each_valid_output_on_pipe(display, crtc->pipe, *output) {
>  			if (igt_output_get_driving_crtc(*output) != NULL)
>  				continue;
>  
> -			igt_output_set_crtc(*output,
> -					    igt_crtc_for_pipe((*output)->display, pipe));
> +			igt_output_set_crtc(*output, crtc);
>  			if (intel_pipe_output_combo_valid(display)) {
>  				found = true;
>  
> @@ -879,7 +878,7 @@ find_connected_pipe(igt_display_t *display, bool second, igt_output_t **output)
>  	else
>  		igt_require_f(found, "No valid outputs found\n");
>  
> -	return pipe;
> +	return crtc->pipe;
>  }
>  
>  static int
> @@ -1363,7 +1362,7 @@ static data_t data;
>  
>  int igt_main_args("", long_opts, help_str, opt_handler, &data)
>  {
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	uint32_t ret = -EINVAL;
>  
>  	igt_fixture() {
> @@ -1380,20 +1379,20 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
>  		for (int index = 0; index < ARRAY_SIZE(scaler_with_pixel_format_tests); index++) {
>  			igt_describe(scaler_with_pixel_format_tests[index].describe);
>  			igt_subtest_with_dynamic(scaler_with_pixel_format_tests[index].name) {
> -				for_each_pipe(&data.display, pipe) {
> -					igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
> -						for_each_valid_output_on_pipe(&data.display, pipe, output) {
> +				for_each_crtc(&data.display, crtc) {
> +					igt_dynamic_f("pipe-%s", igt_crtc_name(crtc)) {
> +						for_each_valid_output_on_pipe(&data.display, crtc->pipe, output) {
>  							igt_info("Trying on %s\n", igt_output_name(output));
> -							if (!pipe_output_combo_valid(&data.display, pipe, output))
> +							if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  								continue;
> -							if (get_num_scalers(&data.display, pipe) < 1)
> +							if (get_num_scalers(&data.display, crtc->pipe) < 1)
>  								continue;
>  
>  							ret = test_scaler_with_pixel_format_pipe(&data,
>  									scaler_with_pixel_format_tests[index].sf,
>  									false,
>  									scaler_with_pixel_format_tests[index].is_upscale,
> -									pipe, output);
> +									crtc->pipe, output);
>  							if (ret == 0)
>  								break;
>  							igt_info("Required scaling operation not supported on %s trying on next output\n",
> @@ -1408,20 +1407,20 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
>  		for (int index = 0; index < ARRAY_SIZE(scaler_with_rotation_tests); index++) {
>  			igt_describe(scaler_with_rotation_tests[index].describe);
>  			igt_subtest_with_dynamic(scaler_with_rotation_tests[index].name) {
> -				for_each_pipe(&data.display, pipe) {
> -					igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
> -						for_each_valid_output_on_pipe(&data.display, pipe, output) {
> +				for_each_crtc(&data.display, crtc) {
> +					igt_dynamic_f("pipe-%s", igt_crtc_name(crtc)) {
> +						for_each_valid_output_on_pipe(&data.display, crtc->pipe, output) {
>  							igt_info("Trying on %s\n", igt_output_name(output));
> -							if (!pipe_output_combo_valid(&data.display, pipe, output))
> +							if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  								continue;
> -							if (get_num_scalers(&data.display, pipe) < 1)
> +							if (get_num_scalers(&data.display, crtc->pipe) < 1)
>  								continue;
>  
>  							ret = test_scaler_with_rotation_pipe(&data,
>  									scaler_with_rotation_tests[index].sf,
>  									false,
>  									scaler_with_rotation_tests[index].is_upscale,
> -									pipe, output);
> +									crtc->pipe, output);
>  							if (ret == 0)
>  								break;
>  							igt_info("Required scaling operation not supported on %s trying on next output\n",
> @@ -1436,20 +1435,20 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
>  		for (int index = 0; index < ARRAY_SIZE(scaler_with_modifiers_tests); index++) {
>  			igt_describe(scaler_with_modifiers_tests[index].describe);
>  			igt_subtest_with_dynamic(scaler_with_modifiers_tests[index].name) {
> -				for_each_pipe(&data.display, pipe) {
> -					igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
> -						for_each_valid_output_on_pipe(&data.display, pipe, output) {
> +				for_each_crtc(&data.display, crtc) {
> +					igt_dynamic_f("pipe-%s", igt_crtc_name(crtc)) {
> +						for_each_valid_output_on_pipe(&data.display, crtc->pipe, output) {
>  							igt_info("Trying on %s\n", igt_output_name(output));
> -							if (!pipe_output_combo_valid(&data.display, pipe, output))
> +							if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  								continue;
> -							if (get_num_scalers(&data.display, pipe) < 1)
> +							if (get_num_scalers(&data.display, crtc->pipe) < 1)
>  								continue;
>  
>  							ret = test_scaler_with_modifier_pipe(&data,
>  									scaler_with_modifiers_tests[index].sf,
>  									false,
>  									scaler_with_modifiers_tests[index].is_upscale,
> -									pipe, output);
> +									crtc->pipe, output);
>  							if (ret == 0)
>  								break;
>  							igt_info("Required scaling operation not supported on %s trying on next output\n",
> @@ -1463,17 +1462,17 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
>  
>  		igt_describe("Tests scaling with clipping and clamping, pixel formats.");
>  		igt_subtest_with_dynamic("plane-scaler-with-clipping-clamping-pixel-formats") {
> -			for_each_pipe(&data.display, pipe) {
> -				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
> -					for_each_valid_output_on_pipe(&data.display, pipe, output) {
> +			for_each_crtc(&data.display, crtc) {
> +				igt_dynamic_f("pipe-%s", igt_crtc_name(crtc)) {
> +					for_each_valid_output_on_pipe(&data.display, crtc->pipe, output) {
>  						igt_info("Trying on %s\n", igt_output_name(output));
> -						if (!pipe_output_combo_valid(&data.display, pipe, output))
> +						if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  							continue;
> -						if (get_num_scalers(&data.display, pipe) < 1)
> +						if (get_num_scalers(&data.display, crtc->pipe) < 1)
>  							continue;
>  
>  						ret = test_scaler_with_pixel_format_pipe(&data, 0.0, true,
> -											 false, pipe,
> +											 false, crtc->pipe,
>  											 output);
>  						if (ret == 0)
>  							break;
> @@ -1488,17 +1487,17 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
>  
>  		igt_describe("Tests scaling with clipping and clamping, rotation.");
>  		igt_subtest_with_dynamic("plane-scaler-with-clipping-clamping-rotation") {
> -			for_each_pipe(&data.display, pipe) {
> -				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
> -					for_each_valid_output_on_pipe(&data.display, pipe, output) {
> +			for_each_crtc(&data.display, crtc) {
> +				igt_dynamic_f("pipe-%s", igt_crtc_name(crtc)) {
> +					for_each_valid_output_on_pipe(&data.display, crtc->pipe, output) {
>  						igt_info("Trying on %s\n", igt_output_name(output));
> -						if (!pipe_output_combo_valid(&data.display, pipe, output))
> +						if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  							continue;
> -						if (get_num_scalers(&data.display, pipe) < 1)
> +						if (get_num_scalers(&data.display, crtc->pipe) < 1)
>  							continue;
>  
>  						ret = test_scaler_with_rotation_pipe(&data, 0.0, true,
> -										     false, pipe,
> +										     false, crtc->pipe,
>  										     output);
>  						if (ret == 0)
>  							break;
> @@ -1512,17 +1511,17 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
>  
>  		igt_describe("Tests scaling with clipping and clamping, modifiers.");
>  		igt_subtest_with_dynamic("plane-scaler-with-clipping-clamping-modifiers") {
> -			for_each_pipe(&data.display, pipe) {
> -				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
> -					for_each_valid_output_on_pipe(&data.display, pipe, output) {
> +			for_each_crtc(&data.display, crtc) {
> +				igt_dynamic_f("pipe-%s", igt_crtc_name(crtc)) {
> +					for_each_valid_output_on_pipe(&data.display, crtc->pipe, output) {
>  						igt_info("Trying on %s\n", igt_output_name(output));
> -						if (!pipe_output_combo_valid(&data.display, pipe, output))
> +						if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  							continue;
> -						if (get_num_scalers(&data.display, pipe) < 1)
> +						if (get_num_scalers(&data.display, crtc->pipe) < 1)
>  							continue;
>  
>  						ret = test_scaler_with_modifier_pipe(&data, 0.0, true,
> -										     false, pipe,
> +										     false, crtc->pipe,
>  										     output);
>  						if (ret == 0)
>  							break;
> @@ -1537,19 +1536,19 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
>  		for (int index = 0; index < ARRAY_SIZE(scaler_with_2_planes_tests); index++) {
>  			igt_describe(scaler_with_2_planes_tests[index].describe);
>  			igt_subtest_with_dynamic(scaler_with_2_planes_tests[index].name) {
> -				for_each_pipe(&data.display, pipe) {
> -					igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
> -						for_each_valid_output_on_pipe(&data.display, pipe, output) {
> +				for_each_crtc(&data.display, crtc) {
> +					igt_dynamic_f("pipe-%s", igt_crtc_name(crtc)) {
> +						for_each_valid_output_on_pipe(&data.display, crtc->pipe, output) {
>  							igt_info("Trying on %s\n",
>  								 igt_output_name(output));
> -							if (!pipe_output_combo_valid(&data.display, pipe, output))
> +							if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  								continue;
> -							if (get_num_scalers(&data.display, pipe) < 2)
> +							if (get_num_scalers(&data.display, crtc->pipe) < 2)
>  								continue;
>  							ret = test_planes_scaling_combo(&data,
>  								scaler_with_2_planes_tests[index].sf_plane1,
>  								scaler_with_2_planes_tests[index].sf_plane2,
> -								pipe, output,
> +								crtc->pipe, output,
>  								scaler_with_2_planes_tests[index].test_type);
>  							if (ret == 0)
>  								break;
> @@ -1566,9 +1565,9 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
>  			igt_describe("Test for validating max source size.");
>  			igt_subtest_with_dynamic(intel_paramtests[index].testname) {
>  				igt_require_intel(data.drm_fd);
> -				for_each_pipe(&data.display, pipe) {
> -					for_each_valid_output_on_pipe(&data.display, pipe, output) {
> -						if (get_num_scalers(&data.display, pipe) < 1)
> +				for_each_crtc(&data.display, crtc) {
> +					for_each_valid_output_on_pipe(&data.display, crtc->pipe, output) {
> +						if (get_num_scalers(&data.display, crtc->pipe) < 1)
>  							continue;
>  						/*
>  						 * Need to find mode with lowest vrefresh else
> @@ -1576,15 +1575,15 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
>  						 */
>  						if (find_mode(&data, output, &intel_paramtests[index]))
>  							igt_dynamic_f("pipe-%s-%s",
> -								      kmstest_pipe_name(pipe), igt_output_name(output))
> -								intel_max_source_size_test(&data, pipe, output,
> +								      igt_crtc_name(crtc), igt_output_name(output))
> +								intel_max_source_size_test(&data, crtc->pipe, output,
>  											   &intel_paramtests[index]);
>  						else
>  							igt_info("Unable to find the lowest " \
>  								 "refresh rate mode on output " \
>  								 "%s pipe %s\n",
>  								 igt_output_name(output),
> -								 kmstest_pipe_name(pipe));
> +								 igt_crtc_name(crtc));
>  						continue;
>  					}
>  					break;
> @@ -1594,15 +1593,15 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
>  
>  		igt_describe("Negative test for number of scalers per pipe.");
>  		igt_subtest_with_dynamic("invalid-num-scalers") {
> -			for_each_pipe_with_valid_output(&data.display, pipe, output) {
> -				if (!pipe_output_combo_valid(&data.display, pipe, output))
> +			for_each_crtc_with_valid_output(&data.display, crtc, output) {
> +				if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  					continue;
> -				if (get_num_scalers(&data.display, pipe) < 1)
> +				if (get_num_scalers(&data.display, crtc->pipe) < 1)
>  						continue;
>  
>  				igt_dynamic_f("pipe-%s-%s-invalid-num-scalers",
> -					       kmstest_pipe_name(pipe), igt_output_name(output))
> -					test_invalid_num_scalers(&data, pipe, output);
> +					      igt_crtc_name(crtc), igt_output_name(output))
> +					test_invalid_num_scalers(&data, crtc->pipe, output);
>  			}
>  		}
>  	}

-- 
Jani Nikula, Intel

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

* Re: [PATCH i-g-t 04/15] tests/kms_color: Convert to for_each_crtc*()
  2026-01-30 10:52 ` [PATCH i-g-t 04/15] tests/kms_color: Convert to for_each_crtc*() Ville Syrjala
@ 2026-01-30 14:08   ` Jani Nikula
  0 siblings, 0 replies; 42+ messages in thread
From: Jani Nikula @ 2026-01-30 14:08 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

On Fri, 30 Jan 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Convert tests/kms_color to use the new crtc based iterators
> (over the old pipe based ones).
>
> This is another test cased that proved too much for coccinelle
> for whatever reason, so the conversion was done manually.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Reviewed-by: Jani Nikula <jani.nikula@intel.com>

> ---
>  tests/kms_color.c | 28 ++++++++++++++--------------
>  1 file changed, 14 insertions(+), 14 deletions(-)
>
> diff --git a/tests/kms_color.c b/tests/kms_color.c
> index b2ca6975d6a5..a50793651c11 100644
> --- a/tests/kms_color.c
> +++ b/tests/kms_color.c
> @@ -955,7 +955,7 @@ run_deep_color_tests_for_pipe(data_t *data, enum pipe p)
>  static void
>  run_invalid_tests_for_pipe(data_t *data)
>  {
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	struct {
>  		const char *name;
>  		void (*test_t) (data_t *data, enum pipe pipe);
> @@ -975,10 +975,10 @@ run_invalid_tests_for_pipe(data_t *data)
>  	for (i = 0; i < ARRAY_SIZE(tests); i++) {
>  		igt_describe_f("%s", tests[i].desc);
>  		igt_subtest_with_dynamic_f("%s", tests[i].name) {
> -			for_each_pipe(&data->display, pipe) {
> -				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
> -					prep_pipe(data, pipe);
> -					tests[i].test_t(data, pipe);
> +			for_each_crtc(&data->display, crtc) {
> +				igt_dynamic_f("pipe-%s", igt_crtc_name(crtc)) {
> +					prep_pipe(data, crtc->pipe);
> +					tests[i].test_t(data, crtc->pipe);
>  				}
>  			}
>  		}
> @@ -988,7 +988,7 @@ run_invalid_tests_for_pipe(data_t *data)
>  static void
>  run_tests_for_pipe(data_t *data)
>  {
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	static const struct {
>  		const char *name;
>  		bool (*test_t)(data_t*, igt_plane_t*);
> @@ -1118,10 +1118,10 @@ run_tests_for_pipe(data_t *data)
>  	for (i = 0; i < ARRAY_SIZE(gamma_degamma_tests); i++) {
>  		igt_describe_f("%s", gamma_degamma_tests[i].desc);
>  		igt_subtest_with_dynamic_f("%s", gamma_degamma_tests[i].name) {
> -			for_each_pipe_with_valid_output(&data->display, pipe, data->output) {
> -				igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe),
> +			for_each_crtc_with_valid_output(&data->display, crtc, data->output) {
> +				igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
>  					      igt_output_name(data->output))
> -					run_gamma_degamma_tests_for_pipe(data, pipe,
> +					run_gamma_degamma_tests_for_pipe(data, crtc->pipe,
>  									 gamma_degamma_tests[i].test_t);
>  			}
>  		}
> @@ -1130,10 +1130,10 @@ run_tests_for_pipe(data_t *data)
>  	for (i = 0; i < ARRAY_SIZE(ctm_tests); i++) {
>  		igt_describe_f("%s", ctm_tests[i].desc);
>  		igt_subtest_with_dynamic_f("%s", ctm_tests[i].name) {
> -			for_each_pipe_with_valid_output(&data->display, pipe, data->output) {
> -				igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe),
> +			for_each_crtc_with_valid_output(&data->display, crtc, data->output) {
> +				igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
>  					      igt_output_name(data->output))
> -					run_ctm_tests_for_pipe(data, pipe,
> +					run_ctm_tests_for_pipe(data, crtc->pipe,
>  							       ctm_tests[i].fb_colors,
>  							       ctm_tests[i].ctm,
>  							       ctm_tests[i].iter);
> @@ -1148,8 +1148,8 @@ run_tests_for_pipe(data_t *data)
>  
>  	igt_describe("Verify that deep color works correctly");
>  	igt_subtest_with_dynamic("deep-color") {
> -		for_each_pipe(&data->display, pipe) {
> -			run_deep_color_tests_for_pipe(data, pipe);
> +		for_each_crtc(&data->display, crtc) {
> +			run_deep_color_tests_for_pipe(data, crtc->pipe);
>  
>  			if (igt_run_in_simulation())
>  				break;

-- 
Jani Nikula, Intel

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

* Re: [PATCH i-g-t 05/15] tests/intel/kms_pm_dc: Use for_each_crtc*()
  2026-01-30 10:52 ` [PATCH i-g-t 05/15] tests/intel/kms_pm_dc: Use for_each_crtc*() Ville Syrjala
@ 2026-01-30 14:10   ` Jani Nikula
  0 siblings, 0 replies; 42+ messages in thread
From: Jani Nikula @ 2026-01-30 14:10 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

On Fri, 30 Jan 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Convert tests/intel/kms_pm_dc to use the new crtc based iterators
> (over the old pipe based ones).
>
> Another case that proved too complex for coccinelle, so the conversion
> was done manually.
>
> test_deep_pkgc_state() is sligtly tricky since it uses the last

*slightly

Reviewed-by: Jani Nikula <jani.nikula@intel.com>

> iterator value after the loop. But the 'edp_found' check should
> make sure the crtc is valid there as well.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  tests/intel/kms_pm_dc.c | 36 ++++++++++++++++--------------------
>  1 file changed, 16 insertions(+), 20 deletions(-)
>
> diff --git a/tests/intel/kms_pm_dc.c b/tests/intel/kms_pm_dc.c
> index 4babf1341e0b..83dbac296335 100644
> --- a/tests/intel/kms_pm_dc.c
> +++ b/tests/intel/kms_pm_dc.c
> @@ -123,20 +123,19 @@ static void set_output_on_pipe_b(data_t *data)
>  {
>  	igt_display_t *display = &data->display;
>  	igt_output_t *output;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  
> -	for_each_pipe_with_valid_output(display, pipe, output) {
> +	for_each_crtc_with_valid_output(display, crtc, output) {
>  		drmModeConnectorPtr c = output->config.connector;
>  
>  		/* DC5 with PIPE_B transaction */
> -		if (pipe != PIPE_B)
> +		if (crtc->pipe != PIPE_B)
>  			continue;
>  
>  		if (c->connector_type != DRM_MODE_CONNECTOR_eDP)
>  			continue;
>  
> -		igt_output_set_crtc(output,
> -				    igt_crtc_for_pipe(output->display, pipe));
> +		igt_output_set_crtc(output, crtc);
>  		if (!intel_pipe_output_combo_valid(display))
>  			continue;
>  
> @@ -151,18 +150,18 @@ static void setup_output(data_t *data)
>  	igt_display_t *display = &data->display;
>  	igt_output_t *output;
>  	bool is_low_power;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  
> -	for_each_pipe_with_valid_output(display, pipe, output) {
> +	for_each_crtc_with_valid_output(display, crtc, output) {
>  		drmModeConnectorPtr c = output->config.connector;
>  
>  		if (disp_ver >= 13) {
>  			if (disp_ver == 20 || IS_BATTLEMAGE(data->devid) || IS_DG2(data->devid))
> -				is_low_power = (pipe == PIPE_A);
> +				is_low_power = (crtc->pipe == PIPE_A);
>  			else
> -				is_low_power = (pipe == PIPE_A || pipe == PIPE_B);
> +				is_low_power = (crtc->pipe == PIPE_A || crtc->pipe == PIPE_B);
>  		} else {
> -			is_low_power = (pipe == PIPE_A);
> +			is_low_power = (crtc->pipe == PIPE_A);
>  		}
>  
>  		igt_skip_on_f(!is_low_power, "Low power pipe was not selected for the DC5 transaction.\n");
> @@ -170,8 +169,7 @@ static void setup_output(data_t *data)
>  		if (c->connector_type != DRM_MODE_CONNECTOR_eDP)
>  			continue;
>  
> -		igt_output_set_crtc(output,
> -				    igt_crtc_for_pipe(output->display, pipe));
> +		igt_output_set_crtc(output, crtc);
>  		data->output = output;
>  		data->mode = igt_output_get_mode(output);
>  
> @@ -644,7 +642,7 @@ static void test_deep_pkgc_state(data_t *data)
>  	time_t start = time(NULL);
>  	time_t duration = (4 * SEC);
>  	time_t delay;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	bool pkgc_flag = false;
>  	bool flip = true, edp_found = false;
>  
> @@ -652,7 +650,7 @@ static void test_deep_pkgc_state(data_t *data)
>  	igt_plane_t *primary;
>  	igt_output_t *output = NULL;
>  
> -	for_each_pipe_with_valid_output(display, pipe, output) {
> +	for_each_crtc_with_valid_output(display, crtc, output) {
>  		if (output->config.connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
>  
>  			edp_found = true;
> @@ -663,14 +661,12 @@ static void test_deep_pkgc_state(data_t *data)
>  				 * TODO: Add check for vmin = vmax = flipline if VRR enabled
>  				 * when KMD allows for such capability.
>  				 */
> -				igt_crtc_set_prop_value(igt_crtc_for_pipe(display, pipe),
> -							    IGT_CRTC_VRR_ENABLED,
> -							    false);
> +				igt_crtc_set_prop_value(crtc, IGT_CRTC_VRR_ENABLED, false);
>  				igt_assert(igt_display_try_commit_atomic(display,
>  									 DRM_MODE_ATOMIC_ALLOW_MODESET,
>  									 NULL) == 0);
>  			}
> -		break;
> +			break;
>  		}
>  	}
>  
> @@ -681,7 +677,7 @@ static void test_deep_pkgc_state(data_t *data)
>  
>  	igt_display_reset(display);
>  
> -	igt_output_set_crtc(output, igt_crtc_for_pipe(output->display, pipe));
> +	igt_output_set_crtc(output, crtc);
>  	for_each_connector_mode(output) {
>  		data->mode = &output->config.connector->modes[j__];
>  		delay = (MSEC / (data->mode->vrefresh));
> @@ -700,7 +696,7 @@ static void test_deep_pkgc_state(data_t *data)
>  	igt_plane_set_fb(primary, &data->fb_rgb);
>  	igt_display_commit(&data->display);
>  	/* Wait for the vblank to sync the frame time */
> -	igt_wait_for_vblank_count(igt_crtc_for_pipe(&data->display, pipe), 1);
> +	igt_wait_for_vblank_count(crtc, 1);
>  	pre_val = read_pkgc_counter(data->debugfs_root_fd);
>  	/* Add a half-frame delay to ensure the flip occurs when the frame is active. */
>  	usleep(delay * 0.5);

-- 
Jani Nikula, Intel

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

* Re: [PATCH i-g-t 06/15] tests/kms_rotation_crc: Use for_each_crtc*()
  2026-01-30 10:52 ` [PATCH i-g-t 06/15] tests/kms_rotation_crc: " Ville Syrjala
@ 2026-01-30 14:11   ` Jani Nikula
  0 siblings, 0 replies; 42+ messages in thread
From: Jani Nikula @ 2026-01-30 14:11 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

On Fri, 30 Jan 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Convert tests/kms_rotation_crc to use the new crtc based
> iteratros (over the old pipe based stuff).

*iterators

Reviewed-by: Jani Nikula <jani.nikula@intel.com>

> The conversion was done manually due to coccinelle not
> wanting to cooperate with me for whatever random reason.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  tests/kms_rotation_crc.c | 25 +++++++++++--------------
>  1 file changed, 11 insertions(+), 14 deletions(-)
>
> diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
> index abd87508045e..4ba6a19b5862 100644
> --- a/tests/kms_rotation_crc.c
> +++ b/tests/kms_rotation_crc.c
> @@ -587,7 +587,7 @@ static void test_plane_rotation(data_t *data, int plane_type, bool test_bad_form
>  	igt_display_t *display = &data->display;
>  	drmModeModeInfo *mode;
>  	igt_output_t *output;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	int pipe_count = 0, connected_outputs = 0;
>  	bool found = false;
>  
> @@ -603,14 +603,13 @@ static void test_plane_rotation(data_t *data, int plane_type, bool test_bad_form
>  	for_each_connected_output(&data->display, output)
>  		connected_outputs++;
>  
> -	for_each_pipe_with_valid_output(display, pipe, output) {
> +	for_each_crtc_with_valid_output(display, crtc, output) {
>  		igt_plane_t *plane;
>  		int i, j, c;
>  
>  		igt_display_reset(display);
>  
> -		igt_output_set_crtc(output,
> -				    igt_crtc_for_pipe(output->display, pipe));
> +		igt_output_set_crtc(output, crtc);
>  		if (!intel_pipe_output_combo_valid(display))
>  			continue;
>  
> @@ -648,13 +647,12 @@ static void test_plane_rotation(data_t *data, int plane_type, bool test_bad_form
>  			break;
>  		pipe_count++;
>  
> -		igt_output_set_crtc(output,
> -				    igt_crtc_for_pipe(output->display, pipe));
> +		igt_output_set_crtc(output, crtc);
>  
>  		plane = igt_output_get_plane_type(output, plane_type);
>  		igt_require(plane_rotation_requirements(data, plane));
>  
> -		prepare_crtc(data, output, pipe, plane, true);
> +		prepare_crtc(data, output, crtc->pipe, plane, true);
>  
>  		for (i = 0; i < num_rectangle_types; i++) {
>  			/* Unsupported on intel */
> @@ -686,13 +684,13 @@ static void test_plane_rotation(data_t *data, int plane_type, bool test_bad_form
>  					if (!test_format(data, &tested_formats, format))
>  						continue;
>  
> -					test_single_case(data, pipe, output, plane, i,
> +					test_single_case(data, crtc->pipe, output, plane, i,
>  							 format, test_bad_format);
>  				}
>  
>  				igt_vec_fini(&tested_formats);
>  			} else {
> -				test_single_case(data, pipe, output, plane, i,
> +				test_single_case(data, crtc->pipe, output, plane, i,
>  						 data->override_fmt, test_bad_format);
>  			}
>  		}
> @@ -1349,17 +1347,16 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
>  	 */
>  	igt_describe("This test intends to check for fence leaks exhaustively");
>  	igt_subtest_f("exhaust-fences") {
> -		enum pipe pipe;
> +		igt_crtc_t *crtc;
>  		igt_output_t *output;
>  
>  		igt_require_intel(data.gfx_fd);
>  		igt_display_require_output(&data.display);
>  
> -		for_each_pipe_with_valid_output(&data.display, pipe, output) {
> -			igt_plane_t *primary = &igt_crtc_for_pipe(&data.display,
> -								  pipe)->planes[0];
> +		for_each_crtc_with_valid_output(&data.display, crtc, output) {
> +			igt_plane_t *primary = &crtc->planes[0];
>  
> -			test_plane_rotation_exhaust_fences(&data, pipe, output, primary);
> +			test_plane_rotation_exhaust_fences(&data, crtc->pipe, output, primary);
>  			break;
>  		}
>  	}

-- 
Jani Nikula, Intel

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

* Re: [PATCH i-g-t 07/15] lib/kms: Use for_each_crtc_with_single_output() and for_each_crtc()
  2026-01-30 10:52 ` [PATCH i-g-t 07/15] lib/kms: Use for_each_crtc_with_single_output() and for_each_crtc() Ville Syrjala
@ 2026-01-30 14:15   ` Jani Nikula
  0 siblings, 0 replies; 42+ messages in thread
From: Jani Nikula @ 2026-01-30 14:15 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

On Fri, 30 Jan 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Convert some uses of for_each_pipe*() to for_each_crtc*().
> Take care of the cases where the test using the same iterator
> for both for_each_crtc_with_single_output() and for_each_crtc().
>
> Mostly done with cocci, though in a rather ugly way. Either
> it tried to convert too much unrelate junk or it flat our refused

*unrelated

cocci also wants to add a few too many newlines, but it's probably not
worth fighting at this point.

Reviewed-by: Jani Nikula <jani.nikula@intel.com>

> to convert the stuff I wanted. In the end I had to leave out
> the iterator variable declaration changes from the semantic patch
> and instead I fixed those up manually:
>  #include "scripts/iterators.cocci"
>
> @find1@
> typedef igt_crtc_t;
> iterator name for_each_pipe_with_single_output;
> iterator name for_each_crtc_with_single_output;
> iterator name for_each_pipe;
> iterator name for_each_crtc;
> expression DISPLAY, OUTPUT;
> identifier PIPE;
> type T;
> @@
> T PIPE;
> ...
> igt_fixture() {
> ...
> for_each_pipe(DISPLAY, PIPE) { ... }
> ...
> }
> <+...
> for_each_pipe_with_single_output(DISPLAY, PIPE, OUTPUT) { ... }
> ...+>
>
> @depends on find1@
> expression DISPLAY, OUTPUT;
> identifier find1.PIPE;
> @@
> - for_each_pipe_with_single_output(DISPLAY, PIPE, OUTPUT)
> + for_each_crtc_with_single_output(DISPLAY, crtc, OUTPUT)
> {
> <...
> (
> - igt_crtc_for_pipe(..., PIPE)
> + crtc
> |
> - kmstest_pipe_name(PIPE)
> + igt_crtc_name(crtc)
> |
> - PIPE
> + crtc->pipe
> )
> ...>
> }
>
> @depends on find1@
> expression DISPLAY;
> identifier find1.PIPE;
> @@
> igt_fixture() { ...
> - for_each_pipe(DISPLAY, PIPE)
> + for_each_crtc(DISPLAY, crtc)
> {
> <...
> (
> - igt_crtc_for_pipe(..., PIPE)
> + crtc
> |
> - kmstest_pipe_name(PIPE)
> + igt_crtc_name(crtc)
> |
> - PIPE
> + crtc->pipe
> )
> ...>
> }
> ...}
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  tests/intel/kms_busy.c     | 59 +++++++++++++++---------------
>  tests/kms_pipe_crc_basic.c | 74 ++++++++++++++++++++++++--------------
>  2 files changed, 78 insertions(+), 55 deletions(-)
>
> diff --git a/tests/intel/kms_busy.c b/tests/intel/kms_busy.c
> index f78a40891539..e3c2be0b4e41 100644
> --- a/tests/intel/kms_busy.c
> +++ b/tests/intel/kms_busy.c
> @@ -413,10 +413,10 @@ const char *help_str =
>  int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  {
>  	igt_display_t display = { .drm_fd = -1, .n_crtcs = IGT_MAX_PIPES };
> -
> -	enum pipe pipe, active_pipes[IGT_MAX_PIPES];
> +	enum pipe active_pipes[IGT_MAX_PIPES];
>  	igt_output_t *output;
>  	uint32_t last_pipe = 0;
> +	igt_crtc_t *crtc;
>  	int i;
>  	struct {
>  		const char *name;
> @@ -445,8 +445,8 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  		igt_display_require_output(&display);
>  
>  		/* Get active pipes. */
> -		for_each_pipe(&display, pipe)
> -			active_pipes[last_pipe++] = pipe;
> +		for_each_crtc(&display, crtc)
> +			active_pipes[last_pipe++] = crtc->pipe;
>  		last_pipe--;
>  	}
>  
> @@ -454,14 +454,14 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  
>  	igt_describe("Test for basic check of KMS ABI with busy framebuffers.");
>  	igt_subtest_with_dynamic("basic") { /* just run on the first pipe */
> -		for_each_pipe_with_single_output(&display, pipe, output) {
> -			if (!pipe_output_combo_valid(&display, output, pipe))
> +		for_each_crtc_with_single_output(&display, crtc, output) {
> +			if (!pipe_output_combo_valid(&display, output, crtc->pipe))
>  				continue;
>  
>  			igt_dynamic("flip")
> -				test_flip(&display, pipe, output, false);
> +				test_flip(&display, crtc->pipe, output, false);
>  			igt_dynamic("modeset")
> -				test_flip(&display, pipe, output, true);
> +				test_flip(&display, crtc->pipe, output, true);
>  			break;
>  		}
>  	}
> @@ -470,18 +470,18 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  		igt_hang_t hang = igt_allow_hang(display.drm_fd, 0, 0);
>  		errno = 0;
>  
> -		for_each_pipe_with_single_output(&display, pipe, output) {
> -			if (!pipe_output_combo_valid(&display, output, pipe))
> +		for_each_crtc_with_single_output(&display, crtc, output) {
> +			if (!pipe_output_combo_valid(&display, output, crtc->pipe))
>  				continue;
>  
> -			if (!all_pipes && pipe != active_pipes[0] &&
> -					  pipe != active_pipes[last_pipe])
> +			if (!all_pipes && crtc->pipe != active_pipes[0] &&
> +					  crtc->pipe != active_pipes[last_pipe])
>  				continue;
>  
> -			igt_dynamic_f("flip-pipe-%s", kmstest_pipe_name(pipe))
> -				test_flip(&display, pipe, output, false);
> -			igt_dynamic_f("modeset-pipe-%s", kmstest_pipe_name(pipe))
> -				test_flip(&display, pipe, output, true);
> +			igt_dynamic_f("flip-pipe-%s", igt_crtc_name(crtc))
> +				test_flip(&display, crtc->pipe, output, false);
> +			igt_dynamic_f("modeset-pipe-%s", igt_crtc_name(crtc))
> +				test_flip(&display, crtc->pipe, output, true);
>  		}
>  
>  		igt_disallow_hang(display.drm_fd, hang);
> @@ -491,16 +491,17 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  		igt_hang_t hang = igt_allow_hang(display.drm_fd, 0, 0);
>  		errno = 0;
>  
> -		for_each_pipe_with_single_output(&display, pipe, output) {
> -			if (!pipe_output_combo_valid(&display, output, pipe))
> +		for_each_crtc_with_single_output(&display, crtc, output) {
> +			if (!pipe_output_combo_valid(&display, output, crtc->pipe))
>  				continue;
>  
> -			if (!all_pipes && pipe != active_pipes[0] &&
> -					  pipe != active_pipes[last_pipe])
> +			if (!all_pipes && crtc->pipe != active_pipes[0] &&
> +					  crtc->pipe != active_pipes[last_pipe])
>  				continue;
>  
> -			igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe))
> -				test_pageflip_modeset_hang(&display, output, pipe);
> +			igt_dynamic_f("pipe-%s", igt_crtc_name(crtc))
> +				test_pageflip_modeset_hang(&display, output,
> +							   crtc->pipe);
>  		}
>  
>  		igt_disallow_hang(display.drm_fd, hang);
> @@ -524,19 +525,21 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  
>  			hang = igt_allow_hang(display.drm_fd, 0, 0);
>  
> -			for_each_pipe_with_single_output(&display, pipe, output) {
> -				if (!pipe_output_combo_valid(&display, output, pipe))
> +			for_each_crtc_with_single_output(&display, crtc,
> +							 output) {
> +				if (!pipe_output_combo_valid(&display, output, crtc->pipe))
>  					continue;
>  
> -				if (!all_pipes && pipe != active_pipes[0] &&
> -						  pipe != active_pipes[last_pipe])
> +				if (!all_pipes && crtc->pipe != active_pipes[0] &&
> +						  crtc->pipe != active_pipes[last_pipe])
>  					continue;
>  
> -				igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
> +				igt_dynamic_f("pipe-%s", igt_crtc_name(crtc)) {
>  					if (tests[i].reset)
>  						igt_set_module_param_int(display.drm_fd, "force_reset_modeset_test", 1);
>  
> -					test_hang(&display, pipe, output,
> +					test_hang(&display, crtc->pipe,
> +						  output,
>  						  tests[i].modeset, tests[i].hang_newfb);
>  
>  					if (tests[i].reset)
> diff --git a/tests/kms_pipe_crc_basic.c b/tests/kms_pipe_crc_basic.c
> index fb2f5f8ebe96..8cca7e9e40a7 100644
> --- a/tests/kms_pipe_crc_basic.c
> +++ b/tests/kms_pipe_crc_basic.c
> @@ -370,8 +370,8 @@ const char *help_str =
>  
>  int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  {
> -	enum pipe pipe;
>  	igt_output_t *output;
> +	igt_crtc_t *crtc;
>  	struct {
>  		const char *name;
>  		unsigned flags;
> @@ -407,8 +407,8 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  		data.debugfs = igt_debugfs_dir(data.drm_fd);
>  
>  		/* Get active pipes. */
> -		for_each_pipe(&data.display, pipe)
> -			active_pipes[last_pipe++] = pipe;
> +		for_each_crtc(&data.display, crtc)
> +			active_pipes[last_pipe++] = crtc->pipe;
>  		last_pipe--;
>  	}
>  
> @@ -419,18 +419,23 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  	for (i = 0; i < ARRAY_SIZE(tests); i++) {
>  		igt_describe(tests[i].desc);
>  		igt_subtest_with_dynamic(tests[i].name) {
> -			for_each_pipe_with_single_output(&data.display, pipe, output) {
> -				if (simulation_constraint(pipe))
> +			for_each_crtc_with_single_output(&data.display, crtc,
> +							 output) {
> +				if (simulation_constraint(crtc->pipe))
>  					continue;
>  
> -				if(!pipe_output_combo_valid(&data.display, pipe, output))
> +				if(!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  					continue;
>  
> -				igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), output->name) {
> +				igt_dynamic_f("pipe-%s-%s",
> +					      igt_crtc_name(crtc),
> +					      output->name) {
>  					if (tests[i].flags & TEST_SUSPEND) {
>  						enum igt_suspend_test test = SUSPEND_TEST_NONE;
>  
> -						test_read_crc(&data, pipe, output, 0);
> +						test_read_crc(&data,
> +							      crtc->pipe,
> +							      output, 0);
>  
>  						/* rtcwake cmd is not supported on MTK devices */
>  						if (is_mtk_device(data.drm_fd))
> @@ -439,17 +444,26 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  						igt_system_suspend_autoresume(SUSPEND_STATE_MEM,
>  									      test);
>  
> -						test_read_crc(&data, pipe, output, 0);
> +						test_read_crc(&data,
> +							      crtc->pipe,
> +							      output, 0);
>  					} else if (tests[i].flags & TEST_HANG) {
>  						igt_hang_t hang = igt_allow_hang(data.drm_fd, 0, 0);
>  
> -						test_read_crc(&data, pipe, output, 0);
> +						test_read_crc(&data,
> +							      crtc->pipe,
> +							      output, 0);
>  						igt_force_gpu_reset(data.drm_fd);
> -						test_read_crc(&data, pipe, output, 0);
> +						test_read_crc(&data,
> +							      crtc->pipe,
> +							      output, 0);
>  
>  						igt_disallow_hang(data.drm_fd, hang);
>  					} else {
> -						test_read_crc(&data, pipe, output, tests[i].flags);
> +						test_read_crc(&data,
> +							      crtc->pipe,
> +							      output,
> +							      tests[i].flags);
>  					}
>  				}
>  			}
> @@ -459,43 +473,49 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  	igt_describe("Check that disabling CRCs on a CRTC after having disabled the CRTC "
>  		     "does not cause issues.");
>  	igt_subtest_with_dynamic("disable-crc-after-crtc") {
> -		for_each_pipe_with_single_output(&data.display, pipe, output) {
> -			if (simulation_constraint(pipe))
> +		for_each_crtc_with_single_output(&data.display, crtc, output) {
> +			if (simulation_constraint(crtc->pipe))
>  				continue;
>  
> -			if(!pipe_output_combo_valid(&data.display, pipe, output))
> +			if(!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  				continue;
>  
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), output->name)
> -				test_disable_crc_after_crtc(&data, pipe, output);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      output->name)
> +				test_disable_crc_after_crtc(&data, crtc->pipe,
> +							    output);
>  		}
>  	}
>  
>  	igt_describe("Basic sanity check for CRC mismatches with XR24 format");
>  	igt_subtest_with_dynamic("compare-crc-sanitycheck-xr24") {
> -		for_each_pipe_with_single_output(&data.display, pipe, output) {
> -			if (simulation_constraint(pipe))
> +		for_each_crtc_with_single_output(&data.display, crtc, output) {
> +			if (simulation_constraint(crtc->pipe))
>  				continue;
>  
> -			if(!pipe_output_combo_valid(&data.display, pipe, output))
> +			if(!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  				continue;
>  
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), output->name)
> -				test_compare_crc(&data, pipe, output, DRM_FORMAT_XRGB8888);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      output->name)
> +				test_compare_crc(&data, crtc->pipe, output,
> +						 DRM_FORMAT_XRGB8888);
>  		}
>  	}
>  
>  	igt_describe("Basic sanity check for CRC mismatches with NV12 format");
>  	igt_subtest_with_dynamic("compare-crc-sanitycheck-nv12") {
> -		for_each_pipe_with_single_output(&data.display, pipe, output) {
> -			if (simulation_constraint(pipe))
> +		for_each_crtc_with_single_output(&data.display, crtc, output) {
> +			if (simulation_constraint(crtc->pipe))
>  				continue;
>  
> -			if(!pipe_output_combo_valid(&data.display, pipe, output))
> +			if(!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  				continue;
>  
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), output->name)
> -				test_compare_crc(&data, pipe, output, DRM_FORMAT_NV12);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      output->name)
> +				test_compare_crc(&data, crtc->pipe, output,
> +						 DRM_FORMAT_NV12);
>  		}
>  	}

-- 
Jani Nikula, Intel

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

* Re: [PATCH i-g-t 08/15] lib/kms: Use for_each_crtc_with_single_output(), part 1
  2026-01-30 10:52 ` [PATCH i-g-t 08/15] lib/kms: Use for_each_crtc_with_single_output(), part 1 Ville Syrjala
@ 2026-01-30 14:16   ` Jani Nikula
  0 siblings, 0 replies; 42+ messages in thread
From: Jani Nikula @ 2026-01-30 14:16 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

On Fri, 30 Jan 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Convert some uses of for_each_pipe_with_single_output()
> to for_each_crtc_with_single_output(). Take care of the
> cases where we (presumably) still have to keep some
> kind of 'data.pipe' thingy still up to date.
>
> Eventually we should probably replace 'data.pipe' with
> 'data.crtc' but I didn't want to go that far here.
>
> Done with cocci:
>  #include "scripts/iterators.cocci"
>
> @change@
> iterator name for_each_pipe_with_single_output;
> iterator name for_each_crtc_with_single_output;
> typedef igt_crtc_t;
> identifier PIPE;
> expression DISPLAY, OUTPUT, X;
> @@
> - for_each_pipe_with_single_output(DISPLAY, X.PIPE, OUTPUT)
> + for_each_crtc_with_single_output(DISPLAY, crtc, OUTPUT)
> {
> + X.PIPE = crtc->pipe;
> <...
> (
> - igt_crtc_for_pipe(..., X.PIPE)
> + crtc
> |
> - kmstest_pipe_name(X.PIPE)
> + igt_crtc_name(crtc)
> |
> - X.PIPE
> + crtc->pipe
> )
> ...>
> }
>
> @depends on change@
> identifier FUNC;
> @@
> FUNC(...)
> {
> + igt_crtc_t *crtc;
> <+...
> for_each_crtc_with_single_output(...) { ... }
> ...+>
> }
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Reviewed-by: Jani Nikula <jani.nikula@intel.com>

> ---
>  tests/kms_cursor_edge_walk.c | 14 +++++++++-----
>  1 file changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/tests/kms_cursor_edge_walk.c b/tests/kms_cursor_edge_walk.c
> index eaf4c59b8a19..86577fbc53d8 100644
> --- a/tests/kms_cursor_edge_walk.c
> +++ b/tests/kms_cursor_edge_walk.c
> @@ -344,6 +344,7 @@ static const char *help_str =
>  
>  int igt_main_args("", long_opts, help_str, opt_handler, &data)
>  {
> +	igt_crtc_t *crtc;
>  	struct {
>  		const char *name;
>  		unsigned flags;
> @@ -394,21 +395,24 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
>  					data.curw, data.curh, tests[i].name);
>  			igt_subtest_with_dynamic_f("%dx%d-%s", data.curw,
>  						   data.curh, tests[i].name) {
> -				for_each_pipe_with_single_output(&data.display, data.pipe, data.output) {
> -					if (!extended && data.pipe != active_pipes[0] &&
> -					    data.pipe != active_pipes[last_pipe])
> +				for_each_crtc_with_single_output(&data.display,
> +								 crtc,
> +								 data.output) {
> +					data.pipe = crtc->pipe;
> +					if (!extended && crtc->pipe != active_pipes[0] &&
> +					    crtc->pipe != active_pipes[last_pipe])
>  						continue;
>  
>  					igt_display_reset(&data.display);
>  					igt_output_set_crtc(data.output,
> -							    igt_crtc_for_pipe(data.output->display, data.pipe));
> +							    crtc);
>  					if (!intel_pipe_output_combo_valid(&data.display))
>  						continue;
>  
>  					igt_output_set_crtc(data.output, NULL);
>  
>  					igt_dynamic_f("pipe-%s-%s",
> -						      kmstest_pipe_name(data.pipe),
> +						      igt_crtc_name(crtc),
>  						      data.output->name)
>  						test_crtc(&data, tests[i].flags);
>  				}

-- 
Jani Nikula, Intel

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

* Re: [PATCH i-g-t 09/15] lib/kms: Use for_each_crtc_with_single_output(), part 2
  2026-01-30 10:52 ` [PATCH i-g-t 09/15] lib/kms: Use for_each_crtc_with_single_output(), part 2 Ville Syrjala
@ 2026-01-30 14:19   ` Jani Nikula
  0 siblings, 0 replies; 42+ messages in thread
From: Jani Nikula @ 2026-01-30 14:19 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

On Fri, 30 Jan 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Convert more of the for_each_pipe_with_single_output() uses
> over to for_each_crtc_with_single_output(). This covers the
> simple use cases.

Here and in a handful of previous patches the subject prefix should
probably be "tests/kms:".

Reviewed-by: Jani Nikula <jani.nikula@intel.com>

>
> Done with cocci:
>  #include "scripts/iterators.cocci"
>
> @find@
> typedef igt_crtc_t;
> iterator name for_each_pipe_with_single_output;
> iterator name for_each_crtc_with_single_output;
> expression DISPLAY, OUTPUT;
> identifier PIPE;
> type T;
> @@
> (
> - T PIPE;
> + igt_crtc_t *crtc;
> |
> - T PIPE = PIPE_NONE;
> + igt_crtc_t *crtc;
> )
> <+...
> for_each_pipe_with_single_output(DISPLAY, PIPE, OUTPUT) { ... }
> ...+>
>
> @change depends on find@
> expression DISPLAY, OUTPUT;
> identifier find.PIPE;
> @@
> - for_each_pipe_with_single_output(DISPLAY, PIPE, OUTPUT)
> + for_each_crtc_with_single_output(DISPLAY, crtc, OUTPUT)
> {
> <...
> (
> - igt_crtc_for_pipe(..., PIPE)
> + crtc
> |
> - kmstest_pipe_name(PIPE)
> + igt_crtc_name(crtc)
> |
> - PIPE
> + crtc->pipe
> )
> ...>
> }
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  tests/amdgpu/amd_cursor_overlay.c | 16 ++++++----
>  tests/kms_color_pipeline.c        | 12 ++++----
>  tests/kms_plane.c                 |  8 ++---
>  tests/kms_plane_alpha_blend.c     | 24 +++++++++------
>  tests/kms_plane_cursor.c          | 14 +++++----
>  tests/kms_properties.c            | 22 +++++++-------
>  tests/kms_rmfb.c                  | 10 +++----
>  tests/kms_universal_plane.c       | 49 ++++++++++++++++++-------------
>  8 files changed, 89 insertions(+), 66 deletions(-)
>
> diff --git a/tests/amdgpu/amd_cursor_overlay.c b/tests/amdgpu/amd_cursor_overlay.c
> index 76c3003ca432..1d8ffcc86e1d 100644
> --- a/tests/amdgpu/amd_cursor_overlay.c
> +++ b/tests/amdgpu/amd_cursor_overlay.c
> @@ -400,7 +400,7 @@ int igt_main()
>  {
>  	static const int cursor_sizes[] = { 64, 128, 256 };
>  	data_t data = { .max_curw = 64, .max_curh = 64 };
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	igt_output_t *output;
>  	igt_display_t *display;
>  	int i, j, available_overlay_planes;
> @@ -478,13 +478,15 @@ int igt_main()
>  							DRM_FORMAT_NV12,
>  							DRM_FORMAT_MOD_LINEAR));
>  
> -			for_each_pipe_with_single_output(&data.display, pipe, output) {
> +			for_each_crtc_with_single_output(&data.display, crtc,
> +							 output) {
>  
>  				igt_display_reset(display);
>  				igt_output_set_crtc(output,
> -					igt_crtc_for_pipe(output->display, pipe));
> +					crtc);
>  
> -				available_overlay_planes = get_overlay_planes_count(display, pipe);
> +				available_overlay_planes = get_overlay_planes_count(display,
> +										    crtc->pipe);
>  
>  				/* Require at least one overlay plane. */
>  				if (!available_overlay_planes)
> @@ -500,13 +502,15 @@ int igt_main()
>  					igt_skip("%s subtest requires 3 overlay planes with a supported DCN.\n",
>  						 tests[i].name);
>  
> -				test_init(&data, pipe, output, tests[i].flags, available_overlay_planes);
> +				test_init(&data, crtc->pipe, output,
> +					  tests[i].flags,
> +					  available_overlay_planes);
>  
>  				for (j = 0; j < ARRAY_SIZE(cursor_sizes); j++) {
>  					int size = cursor_sizes[j];
>  
>  					igt_dynamic_f("pipe-%s-%s-size-%d",
> -						      kmstest_pipe_name(pipe),
> +						      igt_crtc_name(crtc),
>  						      igt_output_name(output),
>  						      size)
>  						test_cursor(&data, size, tests[i].flags, tests[i].scale_factor);
> diff --git a/tests/kms_color_pipeline.c b/tests/kms_color_pipeline.c
> index bf8c4734b5fd..1e272671f63d 100644
> --- a/tests/kms_color_pipeline.c
> +++ b/tests/kms_color_pipeline.c
> @@ -155,7 +155,7 @@ static bool test_plane_colorops(data_t *data,
>  static void
>  run_tests_for_plane(data_t *data)
>  {
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	igt_output_t *output = NULL;
>  	static const color_t colors_rgb[] = {
>  	        { 1.0, 0.0, 0.0 },
> @@ -276,20 +276,22 @@ run_tests_for_plane(data_t *data)
>  	for (int i = 0; i < ARRAY_SIZE(plane_colorops_tests); i++) {
>  		igt_describe_f("Test plane color pipeline with colorops: %s", plane_colorops_tests[i].name);
>  		igt_subtest_with_dynamic_f("plane-%s", plane_colorops_tests[i].name) {
> -			for_each_pipe_with_single_output(&data->display, pipe, output) {
> +			for_each_crtc_with_single_output(&data->display, crtc,
> +							 output) {
>  				data->output = output;
>  
> -				if (!pipe_output_combo_valid(data, pipe))
> +				if (!pipe_output_combo_valid(data, crtc->pipe))
>  					continue;
>  
> -				test_setup(data, pipe);
> +				test_setup(data, crtc->pipe);
>  
>  				if (!igt_plane_has_prop(data->primary, IGT_PLANE_COLOR_PIPELINE)) {
>  					test_cleanup(data);
>  					continue;
>  				}
>  
> -				igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe),
> +				igt_dynamic_f("pipe-%s-%s",
> +					       igt_crtc_name(crtc),
>  					       igt_output_name(data->output)) {
>  					data->color_depth = 8;
>  					data->drm_format = DRM_FORMAT_XRGB8888;
> diff --git a/tests/kms_plane.c b/tests/kms_plane.c
> index 21d80847cfd1..2be10f03280a 100644
> --- a/tests/kms_plane.c
> +++ b/tests/kms_plane.c
> @@ -1467,19 +1467,19 @@ static bool is_pipe_limit_reached(int count)
>  
>  static void run_test(data_t *data, void (*test)(data_t *, enum pipe))
>  {
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	int count = 0;
>  
> -	for_each_pipe_with_single_output(&data->display, pipe, data->output) {
> +	for_each_crtc_with_single_output(&data->display, crtc, data->output) {
>  		igt_display_reset(&data->display);
>  
>  		igt_output_set_crtc(data->output,
> -				    igt_crtc_for_pipe(data->output->display, pipe));
> +				    crtc);
>  		if (!intel_pipe_output_combo_valid(&data->display))
>  			continue;
>  
>  		igt_output_set_crtc(data->output, NULL);
> -		test(data, pipe);
> +		test(data, crtc->pipe);
>  
>  		if (is_pipe_limit_reached(++count))
>  			break;
> diff --git a/tests/kms_plane_alpha_blend.c b/tests/kms_plane_alpha_blend.c
> index c3d53c66c02a..eaa4f8e2ef1b 100644
> --- a/tests/kms_plane_alpha_blend.c
> +++ b/tests/kms_plane_alpha_blend.c
> @@ -691,31 +691,37 @@ static bool pipe_check(data_t *data, enum pipe pipe,
>  static void run_subtests(data_t *data)
>  {
>  	igt_output_t *output;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  
>  	for (int i = 0; i < ARRAY_SIZE(subtests); i++) {
>  		igt_describe_f("%s\n", subtests[i].desc);
>  
>  		igt_subtest_with_dynamic(subtests[i].name) {
> -			for_each_pipe_with_single_output(&data->display, pipe, output) {
> +			for_each_crtc_with_single_output(&data->display, crtc,
> +							 output) {
>  				if (!extended &&
> -				    pipe != active_pipes[0] &&
> -				    pipe != active_pipes[last_pipe])
> +				    crtc->pipe != active_pipes[0] &&
> +				    crtc->pipe != active_pipes[last_pipe])
>  					continue;
>  
>  				igt_display_reset(&data->display);
>  
>  				igt_output_set_crtc(output,
> -						    igt_crtc_for_pipe(output->display, pipe));
> +						    crtc);
>  				if (!intel_pipe_output_combo_valid(&data->display))
>  					continue;
>  
> -				prepare_crtc(data, output, pipe);
> -				if (!pipe_check(data, pipe, subtests[i].blend, subtests[i].must_multiply))
> +				prepare_crtc(data, output, crtc->pipe);
> +				if (!pipe_check(data, crtc->pipe, subtests[i].blend, subtests[i].must_multiply))
>  					continue;
>  
> -				igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), output->name)
> -					run_test_on_pipe_planes(data, pipe, output, subtests[i].blend,
> +				igt_dynamic_f("pipe-%s-%s",
> +					      igt_crtc_name(crtc),
> +					      output->name)
> +					run_test_on_pipe_planes(data,
> +								crtc->pipe,
> +								output,
> +								subtests[i].blend,
>  								subtests[i].must_multiply, subtests[i].test);
>  			}
>  		}
> diff --git a/tests/kms_plane_cursor.c b/tests/kms_plane_cursor.c
> index 60e757fc701b..8095154718bc 100644
> --- a/tests/kms_plane_cursor.c
> +++ b/tests/kms_plane_cursor.c
> @@ -290,7 +290,7 @@ int igt_main()
>  {
>  	static const int cursor_sizes[] = { 64, 128, 256 };
>  	data_t data = { .max_curw = 64, .max_curh = 64 };
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	igt_output_t *output;
>  	igt_display_t *display;
>  	int i, j;
> @@ -329,26 +329,28 @@ int igt_main()
>  	for (i = 0; i < ARRAY_SIZE(tests); i++) {
>  		igt_describe_f("%s", tests[i].desc);
>  		igt_subtest_with_dynamic_f("%s", tests[i].name) {
> -			for_each_pipe_with_single_output(&data.display, pipe, output) {
> +			for_each_crtc_with_single_output(&data.display, crtc,
> +							 output) {
>  				if ((tests[i].flags & TEST_OVERLAY) &&
> -				    !igt_crtc_get_plane_type(igt_crtc_for_pipe(&data.display, pipe),
> +				    !igt_crtc_get_plane_type(crtc,
>  							     DRM_PLANE_TYPE_OVERLAY))
>  					continue;
>  
>  				igt_display_reset(display);
>  
>  				igt_output_set_crtc(output,
> -						    igt_crtc_for_pipe(output->display, pipe));
> +						    crtc);
>  				if (!intel_pipe_output_combo_valid(display))
>  					continue;
>  
> -				test_init(&data, pipe, output, tests[i].flags);
> +				test_init(&data, crtc->pipe, output,
> +					  tests[i].flags);
>  
>  				for (j = 0; j < ARRAY_SIZE(cursor_sizes); j++) {
>  					int size = cursor_sizes[j];
>  
>  					igt_dynamic_f("pipe-%s-%s-size-%d",
> -						      kmstest_pipe_name(pipe),
> +						      igt_crtc_name(crtc),
>  						      igt_output_name(output),
>  						      size)
>  						test_cursor(&data, size, tests[i].flags);
> diff --git a/tests/kms_properties.c b/tests/kms_properties.c
> index 62e936bc5e51..1d46bca52114 100644
> --- a/tests/kms_properties.c
> +++ b/tests/kms_properties.c
> @@ -348,39 +348,41 @@ static void colorop_properties(igt_display_t *display, bool atomic)
>  static void plane_properties(igt_display_t *display, bool atomic)
>  {
>  	igt_output_t *output;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  
> -	for_each_pipe_with_single_output(display, pipe, output) {
> +	for_each_crtc_with_single_output(display, crtc, output) {
>  		igt_display_reset(display);
>  
>  		igt_output_set_crtc(output,
> -				    igt_crtc_for_pipe(output->display, pipe));
> +				    crtc);
>  		if (!intel_pipe_output_combo_valid(display))
>  			continue;
>  
> -		igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe),
> +		igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
>  			      igt_output_name(output)) {
> -			run_plane_property_tests(display, pipe, output, atomic);
> +			run_plane_property_tests(display, crtc->pipe, output,
> +						 atomic);
>  		}
>  	}
>  }
>  
>  static void crtc_properties(igt_display_t *display, bool atomic)
>  {
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	igt_output_t *output;
>  
> -	for_each_pipe_with_single_output(display, pipe, output) {
> +	for_each_crtc_with_single_output(display, crtc, output) {
>  		igt_display_reset(display);
>  
>  		igt_output_set_crtc(output,
> -				    igt_crtc_for_pipe(output->display, pipe));
> +				    crtc);
>  		if (!intel_pipe_output_combo_valid(display))
>  			continue;
>  
> -		igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe),
> +		igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
>  			      igt_output_name(output)) {
> -			run_crtc_property_tests(display, pipe, output, atomic);
> +			run_crtc_property_tests(display, crtc->pipe, output,
> +						atomic);
>  		}
>  	}
>  }
> diff --git a/tests/kms_rmfb.c b/tests/kms_rmfb.c
> index d4e0b519bbc4..e71d1b9a6fc4 100644
> --- a/tests/kms_rmfb.c
> +++ b/tests/kms_rmfb.c
> @@ -175,20 +175,20 @@ static void
>  run_rmfb_test(struct rmfb_data *data, bool reopen)
>  {
>  	igt_output_t *output;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	igt_display_t *display = &data->display;
>  
> -	for_each_pipe_with_single_output(display, pipe, output) {
> +	for_each_crtc_with_single_output(display, crtc, output) {
>  		igt_display_reset(display);
>  
>  		igt_output_set_crtc(output,
> -				    igt_crtc_for_pipe(output->display, pipe));
> +				    crtc);
>  		if (!intel_pipe_output_combo_valid(display))
>  			continue;
>  
> -		igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe),
> +		igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
>  			      igt_output_name(output))
> -			test_rmfb(data, output, pipe, reopen);
> +			test_rmfb(data, output, crtc->pipe, reopen);
>  	}
>  }
>  
> diff --git a/tests/kms_universal_plane.c b/tests/kms_universal_plane.c
> index 16409a4a55e0..33567597fa88 100644
> --- a/tests/kms_universal_plane.c
> +++ b/tests/kms_universal_plane.c
> @@ -833,62 +833,69 @@ static void
>  run_tests(data_t *data)
>  {
>  	igt_output_t *output;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  
>  	igt_describe("Check the switching between different primary plane fbs with CRTC off");
>  	igt_subtest_with_dynamic("universal-plane-functional") {
> -		for_each_pipe_with_single_output(&data->display, pipe, output) {
> -			if (!pipe_output_combo_valid(&data->display, pipe, output))
> +		for_each_crtc_with_single_output(&data->display, crtc, output) {
> +			if (!pipe_output_combo_valid(&data->display, crtc->pipe, output))
>  				continue;
>  
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
> -				functional_test_pipe(data, pipe, output);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output))
> +				functional_test_pipe(data, crtc->pipe, output);
>  		}
>  	}
>  
>  	igt_describe("Test for scale-up or scale-down using universal plane API without covering CRTC");
>  	igt_subtest_with_dynamic("universal-plane-sanity") {
> -		for_each_pipe_with_single_output(&data->display, pipe, output) {
> -			if (!pipe_output_combo_valid(&data->display, pipe, output))
> +		for_each_crtc_with_single_output(&data->display, crtc, output) {
> +			if (!pipe_output_combo_valid(&data->display, crtc->pipe, output))
>  				continue;
>  
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
> -				sanity_test_pipe(data, pipe, output);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output))
> +				sanity_test_pipe(data, crtc->pipe, output);
>  		}
>  	}
>  
>  	igt_describe("Check pageflips while primary plane is disabled before IOCTL or between IOCTL"
>  		     " and pageflip execution");
>  	igt_subtest_with_dynamic("disable-primary-vs-flip") {
> -		for_each_pipe_with_single_output(&data->display, pipe, output) {
> -			if (!pipe_output_combo_valid(&data->display, pipe, output))
> +		for_each_crtc_with_single_output(&data->display, crtc, output) {
> +			if (!pipe_output_combo_valid(&data->display, crtc->pipe, output))
>  				continue;
>  
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
> -				pageflip_test_pipe(data, pipe, output);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output))
> +				pageflip_test_pipe(data, crtc->pipe, output);
>  		}
>  	}
>  
>  	igt_describe("Check for cursor leaks after performing cursor operations");
>  	igt_subtest_with_dynamic("cursor-fb-leak") {
> -		for_each_pipe_with_single_output(&data->display, pipe, output) {
> -			if (!pipe_output_combo_valid(&data->display, pipe, output))
> +		for_each_crtc_with_single_output(&data->display, crtc, output) {
> +			if (!pipe_output_combo_valid(&data->display, crtc->pipe, output))
>  				continue;
>  
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
> -				cursor_leak_test_pipe(data, pipe, output);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output))
> +				cursor_leak_test_pipe(data, crtc->pipe,
> +						      output);
>  		}
>  	}
>  
>  	igt_describe("Check if pageflip succeeds in windowed setting");
>  	igt_subtest_with_dynamic("universal-plane-pageflip-windowed") {
>  		igt_require(is_intel_device(data->drm_fd) && data->display_ver >= 9);
> -		for_each_pipe_with_single_output(&data->display, pipe, output) {
> -			if (!pipe_output_combo_valid(&data->display, pipe, output))
> +		for_each_crtc_with_single_output(&data->display, crtc, output) {
> +			if (!pipe_output_combo_valid(&data->display, crtc->pipe, output))
>  				continue;
>  
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
> -				pageflip_win_test_pipe(data, pipe, output);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output))
> +				pageflip_win_test_pipe(data, crtc->pipe,
> +						       output);
>  		}
>  	}
>  }

-- 
Jani Nikula, Intel

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

* Re: [PATCH i-g-t 10/15] lib/kms: Use for_each_crtc_with_single_output(), part 3
  2026-01-30 10:52 ` [PATCH i-g-t 10/15] lib/kms: Use for_each_crtc_with_single_output(), part 3 Ville Syrjala
@ 2026-01-30 14:22   ` Jani Nikula
  0 siblings, 0 replies; 42+ messages in thread
From: Jani Nikula @ 2026-01-30 14:22 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

On Fri, 30 Jan 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Convert more of the for_each_pipe_with_single_output() uses
> over to for_each_crtc_with_single_output(). This covers the
> simple use cases that weren't converted by the previous
> attempt (due to coccinelle performance falling off a cliff
> with the more straightforward semantic patch).

*tests/kms in the subject.

Reviewed-by: Jani Nikula <jani.nikula@intel.com>

>
> Done with cocci:
>  #include "scripts/iterators.cocci"
>
> @change@
> iterator name for_each_pipe_with_single_output;
> iterator name for_each_crtc_with_single_output;
> typedef igt_crtc_t;
> enum pipe PIPE;
> expression DISPLAY, OUTPUT;
> @@
> - for_each_pipe_with_single_output(DISPLAY, PIPE, OUTPUT)
> + for_each_crtc_with_single_output(DISPLAY, crtc, OUTPUT)
> {
> <+...
> (
> - igt_crtc_for_pipe(..., PIPE)
> + crtc
> |
> - kmstest_pipe_name(PIPE)
> + igt_crtc_name(crtc)
> |
> - PIPE
> + crtc->pipe
> )
> ...+>
> }
>
> @depends on change@
> identifier FUNC;
> @@
> FUNC(...)
> {
> + igt_crtc_t *crtc;
> <+...
> for_each_crtc_with_single_output(...) { ... }
> ...+>
> }
>
> @depends on change@
> identifier FUNC, PIPE;
> expression E;
> @@
> FUNC(...)
> {
> ...
> (
> - enum pipe PIPE;
> |
> - enum pipe PIPE = E;
> )
> ... when != PIPE
> }
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  tests/kms_atomic.c     | 147 ++++++++++++++++++++++-------------------
>  tests/kms_cursor_crc.c |  86 +++++++++++++-----------
>  2 files changed, 128 insertions(+), 105 deletions(-)
>
> diff --git a/tests/kms_atomic.c b/tests/kms_atomic.c
> index c78b6b7d7e8b..fa321cc3c7a1 100644
> --- a/tests/kms_atomic.c
> +++ b/tests/kms_atomic.c
> @@ -1455,7 +1455,7 @@ static const char *help_str =
>  
>  int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  {
> -	enum pipe pipe = PIPE_NONE;
> +	igt_crtc_t *crtc;
>  	igt_output_t *output = NULL;
>  	data_t data = { 0 };
>  
> @@ -1470,20 +1470,21 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  	igt_describe("Test for KMS atomic modesetting on overlay plane and ensure coherency between "
>  		     "the legacy and atomic interfaces.");
>  	igt_subtest_with_dynamic("plane-overlay-legacy") {
> -		for_each_pipe_with_single_output(&data.display, pipe, output) {
> +		for_each_crtc_with_single_output(&data.display, crtc, output) {
>  			igt_plane_t *overlay =
> -				igt_crtc_get_plane_type(igt_crtc_for_pipe(&data.display, pipe),
> +				igt_crtc_get_plane_type(crtc,
>  							DRM_PLANE_TYPE_OVERLAY);
>  			uint32_t format = plane_get_igt_format(overlay);
>  
> -			if (!pipe_output_combo_valid(&data.display, pipe, output))
> +			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  				continue;
>  			if (!overlay || !format)
>  				continue;
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
> -				atomic_setup(&data, pipe, output);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output)) {
> +				atomic_setup(&data, crtc->pipe, output);
>  				plane_overlay(&data, output, overlay, format);
> -				atomic_clear(&data, pipe, output);
> +				atomic_clear(&data, crtc->pipe, output);
>  			}
>  			if (!all_pipes)
>  				break;
> @@ -1493,13 +1494,14 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  	igt_describe("Test for KMS atomic modesetting on primary plane and ensure coherency between "
>  		     "the legacy and atomic interfaces.");
>  	igt_subtest_with_dynamic("plane-primary-legacy") {
> -		for_each_pipe_with_single_output(&data.display, pipe, output) {
> -			if (!pipe_output_combo_valid(&data.display, pipe, output))
> +		for_each_crtc_with_single_output(&data.display, crtc, output) {
> +			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  				continue;
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
> -				atomic_setup(&data, pipe, output);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output)) {
> +				atomic_setup(&data, crtc->pipe, output);
>  				plane_primary(&data);
> -				atomic_clear(&data, pipe, output);
> +				atomic_clear(&data, crtc->pipe, output);
>  			}
>  			if (!all_pipes)
>  				break;
> @@ -1509,15 +1511,15 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  	igt_describe("Verify that the overlay plane can cover the primary one (and "\
>  		     "vice versa) by changing their zpos property.");
>  	igt_subtest_with_dynamic("plane-primary-overlay-mutable-zpos") {
> -		for_each_pipe_with_single_output(&data.display, pipe, output) {
> +		for_each_crtc_with_single_output(&data.display, crtc, output) {
>  			igt_plane_t *overlay =
> -				igt_crtc_get_plane_type(igt_crtc_for_pipe(&data.display, pipe),
> +				igt_crtc_get_plane_type(crtc,
>  							DRM_PLANE_TYPE_OVERLAY);
>  
> -			if (!pipe_output_combo_valid(&data.display, pipe, output))
> +			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  				continue;
>  
> -			atomic_setup(&data, pipe, output);
> +			atomic_setup(&data, crtc->pipe, output);
>  			if (!overlay)
>  				continue;
>  			if (!has_mutable_zpos(data.primary) || !has_mutable_zpos(overlay))
> @@ -1525,10 +1527,11 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  			if (!igt_plane_has_format_mod(data.primary, DRM_FORMAT_ARGB8888, 0x0) ||
>  			    !igt_plane_has_format_mod(overlay, DRM_FORMAT_ARGB1555, 0x0))
>  				continue;
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output)) {
>  				plane_primary_overlay_mutable_zpos(&data, output, overlay,
>  								   DRM_FORMAT_ARGB8888, DRM_FORMAT_ARGB1555);
> -				atomic_clear(&data, pipe, output);
> +				atomic_clear(&data, crtc->pipe, output);
>  			}
>  			if (!all_pipes)
>  				break;
> @@ -1538,17 +1541,19 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  	igt_describe("Verify the reported zpos property of planes by making sure "\
>  		     "only higher zpos planes cover the lower zpos ones.");
>  	igt_subtest_with_dynamic("plane-immutable-zpos") {
> -		for_each_pipe_with_single_output(&data.display, pipe, output) {
> -			int n_planes = igt_crtc_for_pipe(&data.display, pipe)->n_planes;
> +		for_each_crtc_with_single_output(&data.display, crtc, output) {
> +			int n_planes = crtc->n_planes;
>  
> -			if (!pipe_output_combo_valid(&data.display, pipe, output))
> +			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  				continue;
>  			if (n_planes < 2)
>  				continue;
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
> -				atomic_setup(&data, pipe, output);
> -				plane_immutable_zpos(&data, output, pipe, n_planes);
> -				atomic_clear(&data, pipe, output);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output)) {
> +				atomic_setup(&data, crtc->pipe, output);
> +				plane_immutable_zpos(&data, output,
> +						     crtc->pipe, n_planes);
> +				atomic_clear(&data, crtc->pipe, output);
>  			}
>  			if (!all_pipes)
>  				break;
> @@ -1558,20 +1563,21 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  	igt_describe("Test to ensure that DRM_MODE_ATOMIC_TEST_ONLY really only touches "
>  		     "the free-standing state objects and nothing else.");
>  	igt_subtest_with_dynamic("test-only") {
> -		for_each_pipe_with_single_output(&data.display, pipe, output) {
> +		for_each_crtc_with_single_output(&data.display, crtc, output) {
>  			uint32_t format;
>  
> -			if (!pipe_output_combo_valid(&data.display, pipe, output))
> +			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  				continue;
>  
> -			atomic_setup(&data, pipe, output);
> +			atomic_setup(&data, crtc->pipe, output);
>  			format = plane_get_igt_format(data.primary);
>  
>  			if (!format)
>  				continue;
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
> -				atomic_clear(&data, pipe, output);
> -				test_only(&data, output, pipe, format);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output)) {
> +				atomic_clear(&data, crtc->pipe, output);
> +				test_only(&data, output, crtc->pipe, format);
>  			}
>  			if (!all_pipes)
>  				break;
> @@ -1581,19 +1587,20 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  	igt_describe("Test for KMS atomic modesetting on cursor plane and ensure coherency between "
>  		     "legacy and atomic interfaces.");
>  	igt_subtest_with_dynamic("plane-cursor-legacy") {
> -		for_each_pipe_with_single_output(&data.display, pipe, output) {
> +		for_each_crtc_with_single_output(&data.display, crtc, output) {
>  			igt_plane_t *cursor =
> -				igt_crtc_get_plane_type(igt_crtc_for_pipe(&data.display, pipe),
> +				igt_crtc_get_plane_type(crtc,
>  							DRM_PLANE_TYPE_CURSOR);
>  
> -			if (!pipe_output_combo_valid(&data.display, pipe, output))
> +			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  				continue;
>  			if (!cursor)
>  				continue;
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
> -				atomic_setup(&data, pipe, output);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output)) {
> +				atomic_setup(&data, crtc->pipe, output);
>  				plane_cursor(&data, output, cursor);
> -				atomic_clear(&data, pipe, output);
> +				atomic_clear(&data, crtc->pipe, output);
>  			}
>  			if (!all_pipes)
>  				break;
> @@ -1602,13 +1609,14 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  
>  	igt_describe("Test error handling when invalid plane parameters are passed");
>  	igt_subtest_with_dynamic("plane-invalid-params") {
> -		for_each_pipe_with_single_output(&data.display, pipe, output) {
> -			if (!pipe_output_combo_valid(&data.display, pipe, output))
> +		for_each_crtc_with_single_output(&data.display, crtc, output) {
> +			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  				continue;
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
> -				atomic_setup(&data, pipe, output);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output)) {
> +				atomic_setup(&data, crtc->pipe, output);
>  				plane_invalid_params(&data, output);
> -				atomic_clear(&data, pipe, output);
> +				atomic_clear(&data, crtc->pipe, output);
>  			}
>  			if (!all_pipes)
>  				break;
> @@ -1617,13 +1625,14 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  
>  	igt_describe("Test error handling when invalid plane fence parameters are passed");
>  	igt_subtest_with_dynamic("plane-invalid-params-fence") {
> -		for_each_pipe_with_single_output(&data.display, pipe, output) {
> -			if (!pipe_output_combo_valid(&data.display, pipe, output))
> +		for_each_crtc_with_single_output(&data.display, crtc, output) {
> +			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  				continue;
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
> -				atomic_setup(&data, pipe, output);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output)) {
> +				atomic_setup(&data, crtc->pipe, output);
>  				plane_invalid_params_fence(&data, output);
> -				atomic_clear(&data, pipe, output);
> +				atomic_clear(&data, crtc->pipe, output);
>  			}
>  			if (!all_pipes)
>  				break;
> @@ -1632,13 +1641,14 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  
>  	igt_describe("Test error handling when invalid crtc parameters are passed");
>  	igt_subtest_with_dynamic("crtc-invalid-params") {
> -		for_each_pipe_with_single_output(&data.display, pipe, output) {
> -			if (!pipe_output_combo_valid(&data.display, pipe, output))
> +		for_each_crtc_with_single_output(&data.display, crtc, output) {
> +			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  				continue;
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
> -				atomic_setup(&data, pipe, output);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output)) {
> +				atomic_setup(&data, crtc->pipe, output);
>  				crtc_invalid_params(&data, output);
> -				atomic_clear(&data, pipe, output);
> +				atomic_clear(&data, crtc->pipe, output);
>  			}
>  			if (!all_pipes)
>  				break;
> @@ -1647,13 +1657,14 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  
>  	igt_describe("Test error handling when invalid crtc fence parameters are passed");
>  	igt_subtest_with_dynamic("crtc-invalid-params-fence") {
> -		for_each_pipe_with_single_output(&data.display, pipe, output) {
> -			if (!pipe_output_combo_valid(&data.display, pipe, output))
> +		for_each_crtc_with_single_output(&data.display, crtc, output) {
> +			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  				continue;
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
> -				atomic_setup(&data, pipe, output);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output)) {
> +				atomic_setup(&data, crtc->pipe, output);
>  				crtc_invalid_params_fence(&data, output);
> -				atomic_clear(&data, pipe, output);
> +				atomic_clear(&data, crtc->pipe, output);
>  			}
>  			if (!all_pipes)
>  				break;
> @@ -1664,13 +1675,14 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  		     "various invalid conditions which the libdrm wrapper won't "
>  		     "allow us to create.");
>  	igt_subtest_with_dynamic("atomic-invalid-params") {
> -		for_each_pipe_with_single_output(&data.display, pipe, output) {
> -			if (!pipe_output_combo_valid(&data.display, pipe, output))
> +		for_each_crtc_with_single_output(&data.display, crtc, output) {
> +			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  				continue;
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
> -				atomic_setup(&data, pipe, output);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output)) {
> +				atomic_setup(&data, crtc->pipe, output);
>  				atomic_invalid_params(&data, output);
> -				atomic_clear(&data, pipe, output);
> +				atomic_clear(&data, crtc->pipe, output);
>  			}
>  			if (!all_pipes)
>  				break;
> @@ -1679,17 +1691,18 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  
>  	igt_describe("Simple test cases to use FB_DAMAGE_CLIPS plane property");
>  	igt_subtest_with_dynamic("atomic-plane-damage") {
> -		for_each_pipe_with_single_output(&data.display, pipe, output) {
> -			if (!pipe_output_combo_valid(&data.display, pipe, output))
> +		for_each_crtc_with_single_output(&data.display, crtc, output) {
> +			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  				continue;
>  
> -			atomic_setup(&data, pipe, output);
> +			atomic_setup(&data, crtc->pipe, output);
>  
>  			if (!igt_plane_has_prop(data.primary, IGT_PLANE_FB_DAMAGE_CLIPS))
>  				continue;
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output)) {
>  				atomic_plane_damage(&data);
> -				atomic_clear(&data, pipe, output);
> +				atomic_clear(&data, crtc->pipe, output);
>  			}
>  			if (!all_pipes)
>  				break;
> diff --git a/tests/kms_cursor_crc.c b/tests/kms_cursor_crc.c
> index 4dcf63025687..10e51b457a15 100644
> --- a/tests/kms_cursor_crc.c
> +++ b/tests/kms_cursor_crc.c
> @@ -959,7 +959,7 @@ static void test_size_hints(data_t *data)
>  
>  static void run_size_tests(data_t *data, int w, int h)
>  {
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	struct {
>  		const char *name;
>  		void (*testfunc)(data_t *);
> @@ -1006,11 +1006,12 @@ static void run_size_tests(data_t *data, int w, int h)
>  				}
>  			}
>  
> -			for_each_pipe_with_single_output(&data->display, pipe, data->output) {
> -				if (execution_constraint(pipe))
> +			for_each_crtc_with_single_output(&data->display, crtc,
> +							 data->output) {
> +				if (execution_constraint(crtc->pipe))
>  					continue;
>  
> -				data->pipe = pipe;
> +				data->pipe = crtc->pipe;
>  
>  				if (!valid_pipe_output_combo(data))
>  					continue;
> @@ -1021,7 +1022,8 @@ static void run_size_tests(data_t *data, int w, int h)
>  				}
>  
>  				igt_dynamic_f("pipe-%s-%s",
> -					      kmstest_pipe_name(pipe), igt_output_name(data->output))
> +					      igt_crtc_name(crtc),
> +					      igt_output_name(data->output))
>  					run_test(data, size_tests[i].testfunc, w, h);
>  			}
>  		}
> @@ -1033,7 +1035,7 @@ static void run_size_tests(data_t *data, int w, int h)
>  
>  static void run_tests_on_pipe(data_t *data)
>  {
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	int cursor_size;
>  
>  	igt_fixture() {
> @@ -1045,17 +1047,18 @@ static void run_tests_on_pipe(data_t *data)
>  		     "flight to smaller ones to see that the size is applied "
>  		     "correctly.");
>  	igt_subtest_with_dynamic("cursor-size-change") {
> -		for_each_pipe_with_single_output(&data->display, pipe, data->output) {
> -			if (execution_constraint(pipe))
> +		for_each_crtc_with_single_output(&data->display, crtc,
> +						 data->output) {
> +			if (execution_constraint(crtc->pipe))
>  				continue;
>  
> -			data->pipe = pipe;
> +			data->pipe = crtc->pipe;
>  
>  			if (!valid_pipe_output_combo(data))
>  				continue;
>  
>  			igt_dynamic_f("pipe-%s-%s",
> -				      kmstest_pipe_name(pipe),
> +				      igt_crtc_name(crtc),
>  				      data->output->name)
>  				run_test(data, test_cursor_size,
>  					 data->cursor_max_w, data->cursor_max_h);
> @@ -1065,17 +1068,18 @@ static void run_tests_on_pipe(data_t *data)
>  	igt_describe("Validates the composition of a fully opaque cursor "
>  		     "plane, i.e., alpha channel equal to 1.0.");
>  	igt_subtest_with_dynamic("cursor-alpha-opaque") {
> -		for_each_pipe_with_single_output(&data->display, pipe, data->output) {
> -			if (execution_constraint(pipe))
> +		for_each_crtc_with_single_output(&data->display, crtc,
> +						 data->output) {
> +			if (execution_constraint(crtc->pipe))
>  				continue;
>  
> -			data->pipe = pipe;
> +			data->pipe = crtc->pipe;
>  
>  			if (!valid_pipe_output_combo(data))
>  				continue;
>  
>  			igt_dynamic_f("pipe-%s-%s",
> -				      kmstest_pipe_name(pipe),
> +				      igt_crtc_name(crtc),
>  				      data->output->name)
>  				run_test(data, test_cursor_opaque,
>  					 data->cursor_max_w, data->cursor_max_h);
> @@ -1085,17 +1089,18 @@ static void run_tests_on_pipe(data_t *data)
>  	igt_describe("Validates the composition of a fully transparent cursor "
>  		     "plane, i.e., alpha channel equal to 0.0.");
>  	igt_subtest_with_dynamic("cursor-alpha-transparent") {
> -		for_each_pipe_with_single_output(&data->display, pipe, data->output) {
> -			if (execution_constraint(pipe))
> +		for_each_crtc_with_single_output(&data->display, crtc,
> +						 data->output) {
> +			if (execution_constraint(crtc->pipe))
>  				continue;
>  
> -			data->pipe = pipe;
> +			data->pipe = crtc->pipe;
>  
>  			if (!valid_pipe_output_combo(data))
>  				continue;
>  
>  			igt_dynamic_f("pipe-%s-%s",
> -				      kmstest_pipe_name(pipe),
> +				      igt_crtc_name(crtc),
>  				      data->output->name)
>  				run_test(data, test_cursor_transparent,
>  					 data->cursor_max_w, data->cursor_max_h);
> @@ -1114,17 +1119,18 @@ static void run_tests_on_pipe(data_t *data)
>  
>  	igt_describe("Validate cursor updates don't cause tearing with framebuffer changes");
>  	igt_subtest_with_dynamic("cursor-tearing-framebuffer-change") {
> -		for_each_pipe_with_single_output(&data->display, pipe, data->output) {
> -			if (execution_constraint(pipe))
> +		for_each_crtc_with_single_output(&data->display, crtc,
> +						 data->output) {
> +			if (execution_constraint(crtc->pipe))
>  				continue;
>  
> -			data->pipe = pipe;
> +			data->pipe = crtc->pipe;
>  
>  			if (!valid_pipe_output_combo(data))
>  				continue;
>  
>  			igt_dynamic_f("pipe-%s-%s",
> -					  kmstest_pipe_name(pipe),
> +					  igt_crtc_name(crtc),
>  					  data->output->name)
>  				run_test(data, test_crc_cursors,
>  					  data->cursor_max_w, data->cursor_max_h);
> @@ -1133,17 +1139,18 @@ static void run_tests_on_pipe(data_t *data)
>  
>  	igt_describe("Validate cursor updates don't cause tearing with position changes");
>  	igt_subtest_with_dynamic("cursor-tearing-position-change") {
> -		for_each_pipe_with_single_output(&data->display, pipe, data->output) {
> -			if (execution_constraint(pipe))
> +		for_each_crtc_with_single_output(&data->display, crtc,
> +						 data->output) {
> +			if (execution_constraint(crtc->pipe))
>  				continue;
>  
> -			data->pipe = pipe;
> +			data->pipe = crtc->pipe;
>  
>  			if (!valid_pipe_output_combo(data))
>  				continue;
>  
>  			igt_dynamic_f("pipe-%s-%s",
> -					  kmstest_pipe_name(pipe),
> +					  igt_crtc_name(crtc),
>  					  data->output->name)
>  				run_test(data, test_crc_pos_cursors,
>  					  data->cursor_max_w, data->cursor_max_h);
> @@ -1159,18 +1166,19 @@ static void run_tests_on_pipe(data_t *data)
>  
>  	igt_describe("Check random placement of a cursor with DPMS.");
>  	igt_subtest_with_dynamic("cursor-dpms") {
> -		for_each_pipe_with_single_output(&data->display, pipe, data->output) {
> -			if (execution_constraint(pipe))
> +		for_each_crtc_with_single_output(&data->display, crtc,
> +						 data->output) {
> +			if (execution_constraint(crtc->pipe))
>  				continue;
>  
> -			data->pipe = pipe;
> +			data->pipe = crtc->pipe;
>  			data->flags = TEST_DPMS;
>  
>  			if (!valid_pipe_output_combo(data))
>  				continue;
>  
>  			igt_dynamic_f("pipe-%s-%s",
> -				      kmstest_pipe_name(pipe),
> +				      igt_crtc_name(crtc),
>  				      data->output->name)
>  				run_test(data, test_crc_random,
>  					 data->cursor_max_w, data->cursor_max_h);
> @@ -1180,18 +1188,19 @@ static void run_tests_on_pipe(data_t *data)
>  
>  	igt_describe("Check random placement of a cursor with suspend.");
>  	igt_subtest_with_dynamic("cursor-suspend") {
> -		for_each_pipe_with_single_output(&data->display, pipe, data->output) {
> -			if (execution_constraint(pipe))
> +		for_each_crtc_with_single_output(&data->display, crtc,
> +						 data->output) {
> +			if (execution_constraint(crtc->pipe))
>  				continue;
>  
> -			data->pipe = pipe;
> +			data->pipe = crtc->pipe;
>  			data->flags = TEST_SUSPEND;
>  
>  			if (!valid_pipe_output_combo(data))
>  				continue;
>  
>  			igt_dynamic_f("pipe-%s-%s",
> -				      kmstest_pipe_name(pipe),
> +				      igt_crtc_name(crtc),
>  				      data->output->name)
>  				run_test(data, test_crc_random,
>  					 data->cursor_max_w, data->cursor_max_h);
> @@ -1204,17 +1213,18 @@ static void run_tests_on_pipe(data_t *data)
>  
>  	igt_describe("Check that sizes declared in SIZE_HINTS are accepted.");
>  	igt_subtest_with_dynamic("cursor-size-hints") {
> -		for_each_pipe_with_single_output(&data->display, pipe, data->output) {
> -			if (execution_constraint(pipe))
> +		for_each_crtc_with_single_output(&data->display, crtc,
> +						 data->output) {
> +			if (execution_constraint(crtc->pipe))
>  				continue;
>  
> -			data->pipe = pipe;
> +			data->pipe = crtc->pipe;
>  
>  			if (!valid_pipe_output_combo(data))
>  				continue;
>  
>  			igt_dynamic_f("pipe-%s-%s",
> -				      kmstest_pipe_name(pipe),
> +				      igt_crtc_name(crtc),
>  				      data->output->name)
>  				run_test(data, test_size_hints,
>  					 data->cursor_max_w, data->cursor_max_h);

-- 
Jani Nikula, Intel

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

* Re: [PATCH i-g-t 11/15] lib/kms: Use for_each_crtc_with_valid_output(), part 1
  2026-01-30 10:52 ` [PATCH i-g-t 11/15] lib/kms: Use for_each_crtc_with_valid_output(), part 1 Ville Syrjala
@ 2026-01-30 14:24   ` Jani Nikula
  0 siblings, 0 replies; 42+ messages in thread
From: Jani Nikula @ 2026-01-30 14:24 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

On Fri, 30 Jan 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Convert some uses of for_each_pipe_with_valid_output()
> to for_each_crtc_with_valid_output(). Take care of the
> cases where we (presumably) still have to keep some
> kind of 'data.pipe' thingy still up to date.

*tests/kms

Reviewed-by: Jani Nikula <jani.nikula@intel.com>


>
> Eventually we should probably replace 'data.pipe' with
> 'data.crtc' but I didn't want to go that far here.
>
> Done with cocci:
>  #include "scripts/iterators.cocci"
>
> @change@
> iterator name for_each_pipe_with_valid_output;
> iterator name for_each_crtc_with_valid_output;
> typedef igt_crtc_t;
> identifier PIPE;
> expression DISPLAY, OUTPUT, X;
> @@
> - for_each_pipe_with_valid_output(DISPLAY, X.PIPE, OUTPUT)
> + for_each_crtc_with_valid_output(DISPLAY, crtc, OUTPUT)
> {
> + X.PIPE = crtc->pipe;
> <...
> (
> - igt_crtc_for_pipe(..., X.PIPE)
> + crtc
> |
> - kmstest_pipe_name(X.PIPE)
> + igt_crtc_name(crtc)
> |
> - X.PIPE
> + crtc->pipe
> )
> ...>
> }
>
> @depends on change@
> identifier FUNC;
> @@
> FUNC(...)
> {
> + igt_crtc_t *crtc;
> <+...
> for_each_crtc_with_valid_output(...) { ... }
> ...+>
> }
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  tests/intel/kms_psr2_sf.c |  7 +++++--
>  tests/kms_lease.c         | 15 +++++++++------
>  tests/kms_vblank.c        | 26 +++++++++++++++++---------
>  3 files changed, 31 insertions(+), 17 deletions(-)
>
> diff --git a/tests/intel/kms_psr2_sf.c b/tests/intel/kms_psr2_sf.c
> index f42863874e5e..e23999544370 100644
> --- a/tests/intel/kms_psr2_sf.c
> +++ b/tests/intel/kms_psr2_sf.c
> @@ -1175,6 +1175,7 @@ static void run_plane_update_continuous(data_t data, int i, int coexist_features
>  
>  int igt_main()
>  {
> +	igt_crtc_t *crtc;
>  	bool output_supports_pr_psr2_sel_fetch = false;
>  	bool pr_psr2_sel_fetch_supported = false;
>  	data_t data = {};
> @@ -1219,11 +1220,13 @@ int igt_main()
>  		igt_info("Big framebuffer size %dx%d\n",
>  			 data.big_fb_width, data.big_fb_height);
>  
> -		for_each_pipe_with_valid_output(&data.display, data.pipe, data.output) {
> +		for_each_crtc_with_valid_output(&data.display, crtc,
> +						data.output) {
> +			data.pipe = crtc->pipe;
>  			coexist_features[n_pipes] = 0;
>  			output_supports_pr_psr2_sel_fetch = check_pr_psr2_sel_fetch_support(&data);
>  			if (output_supports_pr_psr2_sel_fetch) {
> -				pipes[n_pipes] = data.pipe;
> +				pipes[n_pipes] = crtc->pipe;
>  				outputs[n_pipes] = data.output;
>  
>  				if (is_dsc_supported_by_sink(data.drm_fd, data.output))
> diff --git a/tests/kms_lease.c b/tests/kms_lease.c
> index 6d45d041b5b4..951159e97779 100644
> --- a/tests/kms_lease.c
> +++ b/tests/kms_lease.c
> @@ -1240,6 +1240,7 @@ static void lease_uevent(data_t *data)
>  
>  int igt_main()
>  {
> +	igt_crtc_t *crtc;
>  	data_t data;
>  	igt_output_t *output;
>  	igt_display_t *display = &data.master.display;
> @@ -1288,21 +1289,23 @@ int igt_main()
>  
>  			igt_describe(f->desc);
>  			igt_subtest_with_dynamic_f("%s", f->name) {
> -				for_each_pipe_with_valid_output(display, data.pipe, output) {
> +				for_each_crtc_with_valid_output(display, crtc,
> +								output) {
> +					data.pipe = crtc->pipe;
>  					igt_display_reset(display);
>  
>  					igt_output_set_crtc(output,
> -							    igt_crtc_for_pipe(output->display, data.pipe));
> +							    crtc);
>  					if (!intel_pipe_output_combo_valid(display))
>  						continue;
>  
> -					igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(data.pipe),
> +					igt_dynamic_f("pipe-%s-%s",
> +						      igt_crtc_name(crtc),
>  						      igt_output_name(output)) {
> -						data.crtc_id = igt_crtc_for_pipe(display,
> -										 data.pipe)->crtc_id;
> +						data.crtc_id = crtc->crtc_id;
>  						data.connector_id = output->id;
>  						data.plane_id =
> -							igt_crtc_get_plane_type(igt_crtc_for_pipe(&data.master.display, data.pipe),
> +							igt_crtc_get_plane_type(crtc,
>  										DRM_PLANE_TYPE_PRIMARY)->drm_plane->plane_id;
>  						f->func(&data);
>  					}
> diff --git a/tests/kms_vblank.c b/tests/kms_vblank.c
> index ed72c3576784..1e4ccd83b554 100644
> --- a/tests/kms_vblank.c
> +++ b/tests/kms_vblank.c
> @@ -625,6 +625,7 @@ const char *help_str =
>  
>  int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  {
> +	igt_crtc_t *crtc;
>  	int fd;
>  	data_t data;
>  
> @@ -642,11 +643,14 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  
>  	igt_describe("Negative test for vblank request.");
>  	igt_subtest_with_dynamic("invalid") {
> -		for_each_pipe_with_valid_output(&data.display, data.pipe, data.output) {
> -			if (!pipe_output_combo_valid(&data.display, data.pipe, data.output))
> +		for_each_crtc_with_valid_output(&data.display, crtc,
> +						data.output) {
> +			data.pipe = crtc->pipe;
> +			if (!pipe_output_combo_valid(&data.display, crtc->pipe, data.output))
>  				continue;
>  
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(data.pipe), data.output->name)
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      data.output->name)
>  				invalid_subtest(&data, fd);
>  			/* one pipe/output combination is enough */
>  				break;
> @@ -655,17 +659,21 @@ int igt_main_args("e", NULL, help_str, opt_handler, NULL)
>  
>  	igt_describe("Check the vblank and flip events works with given crtc id.");
>  	igt_subtest_with_dynamic("crtc-id") {
> -		for_each_pipe_with_valid_output(&data.display, data.pipe, data.output) {
> -			if (!pipe_output_combo_valid(&data.display, data.pipe, data.output))
> +		for_each_crtc_with_valid_output(&data.display, crtc,
> +						data.output) {
> +			data.pipe = crtc->pipe;
> +			if (!pipe_output_combo_valid(&data.display, crtc->pipe, data.output))
>  				continue;
>  
> -			if (!all_pipes && data.pipe != active_pipes[0] &&
> -					  data.pipe != active_pipes[last_pipe]) {
> -				igt_info("Skipping pipe %s\n", kmstest_pipe_name(data.pipe));
> +			if (!all_pipes && crtc->pipe != active_pipes[0] &&
> +					  crtc->pipe != active_pipes[last_pipe]) {
> +				igt_info("Skipping pipe %s\n",
> +					 igt_crtc_name(crtc));
>  				continue;
>  			}
>  
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(data.pipe), data.output->name)
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      data.output->name)
>  				crtc_id_subtest(&data, fd);
>  		}
>  	}

-- 
Jani Nikula, Intel

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

* Re: [PATCH i-g-t 12/15] lib/kms: Use for_each_crtc_with_valid_output(), part 2
  2026-01-30 10:52 ` [PATCH i-g-t 12/15] lib/kms: Use for_each_crtc_with_valid_output(), part 2 Ville Syrjala
@ 2026-01-30 14:26   ` Jani Nikula
  2026-02-02 15:38     ` [PATCH i-g-t v2 " Ville Syrjala
  0 siblings, 1 reply; 42+ messages in thread
From: Jani Nikula @ 2026-01-30 14:26 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

On Fri, 30 Jan 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Convert some uses of for_each_pipe_with_valid_output()
> to for_each_crtc_with_valid_output(). Take care of the
> cases where we (presumably) still have to keep some
> kind of 'data->pipe' thingy still up to date.

*tests/kms

Reviewed-by: Jani Nikula <jani.nikula@intel.com>

>
> Eventually we should probably replace 'data->pipe' with
> 'data->crtc' but I didn't want to go that far here.
>
> Done with cocci:
>  #include "scripts/iterators.cocci"
>
> @change@
> iterator name for_each_pipe_with_valid_output;
> iterator name for_each_crtc_with_valid_output;
> typedef igt_crtc_t;
> identifier PIPE;
> expression DISPLAY, OUTPUT, X;
> @@
> - for_each_pipe_with_valid_output(DISPLAY, X->PIPE, OUTPUT)
> + for_each_crtc_with_valid_output(DISPLAY, crtc, OUTPUT)
> {
> + X->PIPE = crtc->pipe;
> <...
> (
> - igt_crtc_for_pipe(..., X->PIPE)
> + crtc
> |
> - kmstest_pipe_name(X->PIPE)
> + igt_crtc_name(crtc)
> |
> - X->PIPE
> + crtc->pipe
> )
> ...>
> }
>
> @depends on change@
> identifier FUNC;
> @@
> FUNC(...)
> {
> + igt_crtc_t *crtc;
> <+...
> for_each_crtc_with_valid_output(...) { ... }
> ...+>
> }
>
> @@
> identifier CRTC;
> @@
> igt_crtc_t *CRTC;
> ...
> - igt_crtc_t *CRTC;
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  tests/intel/kms_big_fb.c       |  6 ++++--
>  tests/intel/kms_ccs.c          | 19 +++++++++++------
>  tests/intel/kms_fb_coherency.c |  6 ++++--
>  tests/intel/kms_pwrite_crc.c   |  6 ++++--
>  tests/kms_async_flips.c        | 23 +++++++++++++--------
>  tests/kms_vblank.c             | 37 +++++++++++++++++++++++-----------
>  6 files changed, 65 insertions(+), 32 deletions(-)
>
> diff --git a/tests/intel/kms_big_fb.c b/tests/intel/kms_big_fb.c
> index 415508213e55..3946c7c00dfd 100644
> --- a/tests/intel/kms_big_fb.c
> +++ b/tests/intel/kms_big_fb.c
> @@ -685,6 +685,7 @@ max_hw_stride_async_flip_test(data_t *data)
>  
>  static void test_scanout(data_t *data)
>  {
> +	igt_crtc_t *crtc;
>  	igt_output_t *output;
>  
>  	igt_require(data->format == DRM_FORMAT_C8 ||
> @@ -708,11 +709,12 @@ static void test_scanout(data_t *data)
>  	max_fb_size(data, &data->big_fb_width, &data->big_fb_height,
>  		    data->format, data->modifier);
>  
> -	for_each_pipe_with_valid_output(&data->display, data->pipe, data->output) {
> +	for_each_crtc_with_valid_output(&data->display, crtc, data->output) {
> +		data->pipe = crtc->pipe;
>  		igt_display_reset(&data->display);
>  
>  		igt_output_set_crtc(data->output,
> -				    igt_crtc_for_pipe(data->output->display, data->pipe));
> +				    crtc);
>  		if (!intel_pipe_output_combo_valid(&data->display))
>  			continue;
>  
> diff --git a/tests/intel/kms_ccs.c b/tests/intel/kms_ccs.c
> index ea23b6581b06..85d1e16cafe3 100644
> --- a/tests/intel/kms_ccs.c
> +++ b/tests/intel/kms_ccs.c
> @@ -1125,6 +1125,7 @@ static bool valid_modifier_test(u64 modifier, const enum test_flags flags)
>  
>  static void test_output(data_t *data, const int testnum)
>  {
> +	igt_crtc_t *crtc;
>  	uint16_t dev_id;
>  
>  	igt_fixture()
> @@ -1150,15 +1151,18 @@ static void test_output(data_t *data, const int testnum)
>  					      "Older than Xe2 platform needed.\n");
>  			}
>  
> -			for_each_pipe_with_valid_output(&data->display, data->pipe, data->output) {
> +			for_each_crtc_with_valid_output(&data->display, crtc,
> +							data->output) {
> +				data->pipe = crtc->pipe;
>  				igt_display_reset(&data->display);
>  
>  				igt_output_set_crtc(data->output,
> -						    igt_crtc_for_pipe(data->output->display, data->pipe));
> +						    crtc);
>  				if (!intel_pipe_output_combo_valid(&data->display))
>  					continue;
>  
> -				igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(data->pipe),
> +				igt_dynamic_f("pipe-%s-%s",
> +							    igt_crtc_name(crtc),
>  							    data->output->name) {
>  					int valid_tests = 0;
>  
> @@ -1166,9 +1170,12 @@ static void test_output(data_t *data, const int testnum)
>  						igt_info("Testing with seed %d\n", data->seed);
>  
>  					if (data->flags & TEST_ALL_PLANES) {
> -						igt_display_require_output_on_pipe(&data->display, data->pipe);
> +						igt_display_require_output_on_pipe(&data->display,
> +										   crtc->pipe);
>  
> -						for_each_plane_on_pipe(&data->display, data->pipe, data->plane) {
> +						for_each_plane_on_pipe(&data->display,
> +								       crtc->pipe,
> +								       data->plane) {
>  							if (skip_plane(data, data->plane))
>  								continue;
>  
> @@ -1186,7 +1193,7 @@ static void test_output(data_t *data, const int testnum)
>  					igt_require_f(valid_tests > 0,
>  						      "no valid tests for %s on pipe %s\n",
>  						      ccs_modifiers[i].str,
> -						      kmstest_pipe_name(data->pipe));
> +						      igt_crtc_name(crtc));
>  				}
>  			}
>  		}
> diff --git a/tests/intel/kms_fb_coherency.c b/tests/intel/kms_fb_coherency.c
> index e6d043c114d5..2f917e97b792 100644
> --- a/tests/intel/kms_fb_coherency.c
> +++ b/tests/intel/kms_fb_coherency.c
> @@ -222,13 +222,15 @@ static void test_legacy_mmap_wc(data_t *data)
>  
>  static void select_valid_pipe_output_combo(data_t *data)
>  {
> +	igt_crtc_t *crtc;
>  	igt_display_t *display = &data->display;
>  
> -	for_each_pipe_with_valid_output(display, data->pipe, data->output) {
> +	for_each_crtc_with_valid_output(display, crtc, data->output) {
> +		data->pipe = crtc->pipe;
>  		igt_display_reset(display);
>  
>  		igt_output_set_crtc(data->output,
> -				    igt_crtc_for_pipe(data->output->display, data->pipe));
> +				    crtc);
>  		if (intel_pipe_output_combo_valid(display))
>  			return;
>  	}
> diff --git a/tests/intel/kms_pwrite_crc.c b/tests/intel/kms_pwrite_crc.c
> index 64c167ad3f44..4a214d34e53b 100644
> --- a/tests/intel/kms_pwrite_crc.c
> +++ b/tests/intel/kms_pwrite_crc.c
> @@ -169,13 +169,15 @@ static void cleanup_crtc(data_t *data)
>  
>  static void run_test(data_t *data)
>  {
> +	igt_crtc_t *crtc;
>  	igt_display_t *display = &data->display;
>  
> -	for_each_pipe_with_valid_output(display, data->pipe, data->output) {
> +	for_each_crtc_with_valid_output(display, crtc, data->output) {
> +		data->pipe = crtc->pipe;
>  		igt_display_reset(display);
>  
>  		igt_output_set_crtc(data->output,
> -				    igt_crtc_for_pipe(data->output->display, data->pipe));
> +				    crtc);
>  		if (!intel_pipe_output_combo_valid(display))
>  			continue;
>  
> diff --git a/tests/kms_async_flips.c b/tests/kms_async_flips.c
> index 993ad37530b0..8539d31efded 100644
> --- a/tests/kms_async_flips.c
> +++ b/tests/kms_async_flips.c
> @@ -903,16 +903,18 @@ static void require_linear_modifier(data_t *data)
>  
>  static void run_test(data_t *data, void (*test)(data_t *))
>  {
> +	igt_crtc_t *crtc;
>  	igt_display_t *display = &data->display;
>  
>  	if (data->atomic_path)
>  		require_atomic_async_cap(data);
>  
> -	for_each_pipe_with_valid_output(display, data->pipe, data->output) {
> +	for_each_crtc_with_valid_output(display, crtc, data->output) {
> +		data->pipe = crtc->pipe;
>  		igt_display_reset(display);
>  
>  		igt_output_set_crtc(data->output,
> -				    igt_crtc_for_pipe(data->output->display, data->pipe));
> +				    crtc);
>  		if (!intel_pipe_output_combo_valid(display))
>  			continue;
>  
> @@ -923,7 +925,8 @@ static void run_test(data_t *data, void (*test)(data_t *))
>  		else
>  			data->modifier = default_modifier(data);
>  
> -		igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(data->pipe), data->output->name) {
> +		igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +			      data->output->name) {
>  			/*
>  			 * FIXME: joiner+async flip is busted currently in KMD.
>  			 * Remove this check once the issues are fixed in KMD.
> @@ -969,11 +972,13 @@ static bool skip_async_format_mod(data_t *data,
>  
>  static void run_test_with_async_format_modifiers(data_t *data, void (*test)(data_t *))
>  {
> +	igt_crtc_t *crtc;
>  	struct igt_vec tested_formats;
>  
>  	igt_vec_init(&tested_formats, sizeof(struct format_mod));
>  
> -	for_each_pipe_with_valid_output(&data->display, data->pipe, data->output) {
> +	for_each_crtc_with_valid_output(&data->display, crtc, data->output) {
> +		data->pipe = crtc->pipe;
>  		test_init(data);
>  
>  		igt_assert_f(data->plane->async_format_mod_count > 0,
> @@ -990,7 +995,7 @@ static void run_test_with_async_format_modifiers(data_t *data, void (*test)(data
>  					   IGT_MODIFIER_FMT " on %s.%u\n",
>  					   IGT_FORMAT_ARGS(f.format),
>  					   IGT_MODIFIER_ARGS(f.modifier),
> -					   kmstest_pipe_name(data->pipe),
> +					   igt_crtc_name(crtc),
>  					   data->plane->index);
>  				continue;
>  			}
> @@ -999,7 +1004,7 @@ static void run_test_with_async_format_modifiers(data_t *data, void (*test)(data
>  			data->plane_format = f.format;
>  			data->async_mod_formats = true;
>  
> -			igt_dynamic_f("pipe-%s-%s-%s-%s", kmstest_pipe_name(data->pipe),
> +			igt_dynamic_f("pipe-%s-%s-%s-%s", igt_crtc_name(crtc),
>  				      data->output->name,
>  				      igt_fb_modifier_name(data->modifier),
>  				      igt_format_str(data->plane_format)) {
> @@ -1022,10 +1027,12 @@ static void run_test_with_async_format_modifiers(data_t *data, void (*test)(data
>  
>  static void run_test_with_modifiers(data_t *data, void (*test)(data_t *))
>  {
> +	igt_crtc_t *crtc;
>  	if (data->atomic_path)
>  		require_atomic_async_cap(data);
>  
> -	for_each_pipe_with_valid_output(&data->display, data->pipe, data->output) {
> +	for_each_crtc_with_valid_output(&data->display, crtc, data->output) {
> +		data->pipe = crtc->pipe;
>  		test_init(data);
>  
>  		igt_require_f(data->plane->async_format_mod_count > 0,
> @@ -1042,7 +1049,7 @@ static void run_test_with_modifiers(data_t *data, void (*test)(data_t *))
>  
>  			data->modifier = modifier;
>  
> -			igt_dynamic_f("pipe-%s-%s-%s", kmstest_pipe_name(data->pipe),
> +			igt_dynamic_f("pipe-%s-%s-%s", igt_crtc_name(crtc),
>  				      data->output->name,
>  				      igt_fb_modifier_name(modifier)) {
>  				      /*
> diff --git a/tests/kms_vblank.c b/tests/kms_vblank.c
> index 1e4ccd83b554..ecbd85d031a6 100644
> --- a/tests/kms_vblank.c
> +++ b/tests/kms_vblank.c
> @@ -476,6 +476,7 @@ static void vblank_ts_cont(data_t *data, int fd, int nchildren)
>  
>  static void run_subtests(data_t *data)
>  {
> +	igt_crtc_t *crtc;
>  	const struct {
>  		const char *name;
>  		void (*func)(data_t *, int, int);
> @@ -515,17 +516,23 @@ static void run_subtests(data_t *data)
>  
>  			igt_describe("Check if test run while hanging by introducing NOHANG flag.");
>  			igt_subtest_with_dynamic_f("%s-%s", f->name, m->name) {
> -				for_each_pipe_with_valid_output(&data->display, data->pipe, data->output) {
> -					if (!pipe_output_combo_valid(&data->display, data->pipe, data->output))
> +				for_each_crtc_with_valid_output(&data->display,
> +								crtc,
> +								data->output) {
> +					data->pipe = crtc->pipe;
> +					if (!pipe_output_combo_valid(&data->display, crtc->pipe, data->output))
>  						continue;
>  
> -					if (!all_pipes && data->pipe != active_pipes[0] &&
> -					    data->pipe != active_pipes[last_pipe]) {
> -						igt_info("Skipping pipe %s\n", kmstest_pipe_name(data->pipe));
> +					if (!all_pipes && crtc->pipe != active_pipes[0] &&
> +					    crtc->pipe != active_pipes[last_pipe]) {
> +						igt_info("Skipping pipe %s\n",
> +							 igt_crtc_name(crtc));
>  						continue;
>  					}
>  
> -					igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(data->pipe), data->output->name) {
> +					igt_dynamic_f("pipe-%s-%s",
> +						      igt_crtc_name(crtc),
> +						      data->output->name) {
>  						data->flags = m->flags | NOHANG;
>  						run_test(data, f->func);
>  					}
> @@ -541,17 +548,23 @@ static void run_subtests(data_t *data)
>  				igt_hang_t hang;
>  
>  				hang = igt_allow_hang(data->display.drm_fd, 0, 0);
> -				for_each_pipe_with_valid_output(&data->display, data->pipe, data->output) {
> -					if (!pipe_output_combo_valid(&data->display, data->pipe, data->output))
> +				for_each_crtc_with_valid_output(&data->display,
> +								crtc,
> +								data->output) {
> +					data->pipe = crtc->pipe;
> +					if (!pipe_output_combo_valid(&data->display, crtc->pipe, data->output))
>  						continue;
>  
> -					if (!all_pipes && data->pipe != active_pipes[0] &&
> -					    data->pipe != active_pipes[last_pipe]) {
> -						igt_info("Skipping pipe %s\n", kmstest_pipe_name(data->pipe));
> +					if (!all_pipes && crtc->pipe != active_pipes[0] &&
> +					    crtc->pipe != active_pipes[last_pipe]) {
> +						igt_info("Skipping pipe %s\n",
> +							 igt_crtc_name(crtc));
>  						continue;
>  					}
>  
> -					igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(data->pipe), data->output->name) {
> +					igt_dynamic_f("pipe-%s-%s",
> +						      igt_crtc_name(crtc),
> +						      data->output->name) {
>  						data->flags = m->flags;
>  						run_test(data, f->func);
>  					}

-- 
Jani Nikula, Intel

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

* Re: [PATCH i-g-t 13/15] lib/kms: Use for_each_crtc_with_valid_output(), part 3
  2026-01-30 10:52 ` [PATCH i-g-t 13/15] lib/kms: Use for_each_crtc_with_valid_output(), part 3 Ville Syrjala
@ 2026-01-30 14:27   ` Jani Nikula
  0 siblings, 0 replies; 42+ messages in thread
From: Jani Nikula @ 2026-01-30 14:27 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

On Fri, 30 Jan 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Convert some uses of for_each_pipe_with_valid_output()
> to for_each_crtc_with_valid_output(). Take care of the
> cases where we (presumably) still have to keep some
> kind of 'pipe' pointer thingy still up to date.

*tests/kms

Reviewed-by: Jani Nikula <jani.nikula@intel.com>

>
> Eventually we should probably replace the pipe pointer
> with a crtc pointer but I didn't want to go that far here.
>
> Done with cocci:
>  #include "scripts/iterators.cocci"
>
> @change@
> iterator name for_each_pipe_with_valid_output;
> iterator name for_each_crtc_with_valid_output;
> typedef igt_crtc_t;
> enum pipe *PIPE;
> expression DISPLAY, OUTPUT;
> @@
> - for_each_pipe_with_valid_output(DISPLAY, *PIPE, OUTPUT)
> + for_each_crtc_with_valid_output(DISPLAY, crtc, OUTPUT)
> {
> + *PIPE = crtc->pipe;
> <...
> (
> - igt_crtc_for_pipe(..., *PIPE)
> + crtc
> |
> - kmstest_pipe_name(*PIPE)
> + igt_crtc_name(crtc)
> |
> - *PIPE
> + crtc->pipe
> )
> ...>
> }
>
> @depends on change@
> identifier FUNC;
> @@
> FUNC(...)
> {
> + igt_crtc_t *crtc;
> <+...
> for_each_crtc_with_valid_output(...) { ... }
> ...+>
> }
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  tests/kms_prime.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/tests/kms_prime.c b/tests/kms_prime.c
> index f51c463211f4..7b13e9f538e1 100644
> --- a/tests/kms_prime.c
> +++ b/tests/kms_prime.c
> @@ -118,14 +118,16 @@ static bool has_prime_export(int fd)
>  static igt_output_t *setup_display(int importer_fd, igt_display_t *display,
>  				   enum pipe *pipe)
>  {
> +	igt_crtc_t *crtc;
>  	igt_output_t *output;
>  	bool found = false;
>  
> -	for_each_pipe_with_valid_output(display, *pipe, output) {
> +	for_each_crtc_with_valid_output(display, crtc, output) {
> +		*pipe = crtc->pipe;
>  		igt_display_reset(display);
>  
>  		igt_output_set_crtc(output,
> -				    igt_crtc_for_pipe(output->display, *pipe));
> +				    crtc);
>  		if (intel_pipe_output_combo_valid(display)) {
>  			found = true;
>  			break;

-- 
Jani Nikula, Intel

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

* Re: [PATCH i-g-t 14/15] lib/kms: Use for_each_crtc_with_valid_output(), part 4
  2026-01-30 10:52 ` [PATCH i-g-t 14/15] lib/kms: Use for_each_crtc_with_valid_output(), part 4 Ville Syrjala
@ 2026-01-30 14:30   ` Jani Nikula
  0 siblings, 0 replies; 42+ messages in thread
From: Jani Nikula @ 2026-01-30 14:30 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

On Fri, 30 Jan 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Convert the remaining uses of for_each_pipe_with_valid_output()
> to for_each_crtc_with_valid_output(). These should all be
> straiggtforward cases.

*straightforward

*tests/kms

Reviewed-by: Jani Nikula <jani.nikula@intel.com>

>
> Done with cocci:
>  #include "scripts/iterators.cocci"
>
> @find@
> typedef igt_crtc_t;
> iterator name for_each_pipe_with_valid_output;
> iterator name for_each_crtc_with_valid_output;
> expression DISPLAY, OUTPUT;
> identifier PIPE;
> type T;
> @@
> {
> ...
> (
> - T PIPE;
> + igt_crtc_t *crtc;
> |
> - T PIPE = PIPE_NONE;
> + igt_crtc_t *crtc;
> )
> <+...
> for_each_pipe_with_valid_output(DISPLAY, PIPE, OUTPUT) { ... }
> ...+>
> }
>
> @change depends on find@
> expression DISPLAY, OUTPUT;
> identifier find.PIPE;
> @@
> - for_each_pipe_with_valid_output(DISPLAY, PIPE, OUTPUT)
> + for_each_crtc_with_valid_output(DISPLAY, crtc, OUTPUT)
> {
> <...
> (
> - igt_crtc_for_pipe(..., PIPE)
> + crtc
> |
> - kmstest_pipe_name(PIPE)
> + igt_crtc_name(crtc)
> |
> - PIPE
> + crtc->pipe
> )
> ...>
> }
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  lib/igt_kms.c                          |  4 +-
>  tests/intel/kms_cdclk.c                | 12 ++--
>  tests/intel/kms_draw_crc.c             |  8 +--
>  tests/intel/kms_dsc.c                  |  6 +-
>  tests/intel/kms_fence_pin_leak.c       |  8 +--
>  tests/intel/kms_flip_tiling.c          | 15 +++--
>  tests/intel/kms_frontbuffer_tracking.c | 14 ++---
>  tests/intel/kms_mmap_write_crc.c       | 10 ++--
>  tests/intel/kms_pipe_b_c_ivb.c         |  8 +--
>  tests/intel/kms_pm_rpm.c               |  8 +--
>  tests/intel/kms_psr2_su.c              | 15 ++---
>  tests/intel/kms_psr_stress_test.c      |  6 +-
>  tests/intel/perf_pmu.c                 |  8 +--
>  tests/intel/prime_mmap_kms.c           |  6 +-
>  tests/intel/xe_pat.c                   |  8 +--
>  tests/kms_atomic_interruptible.c       | 79 ++++++++++++++++----------
>  tests/kms_atomic_transition.c          | 25 ++++----
>  tests/kms_flip_event_leak.c            | 11 ++--
>  tests/kms_invalid_mode.c               | 13 +++--
>  tests/kms_panel_fitting.c              | 12 ++--
>  tests/kms_plane_multiple.c             | 11 ++--
>  tests/kms_scaling_modes.c              | 12 ++--
>  tests/kms_sequence.c                   | 13 +++--
>  tests/prime_vgem.c                     |  4 +-
>  tests/vmwgfx/vmw_prime.c               | 16 +++---
>  25 files changed, 186 insertions(+), 146 deletions(-)
>
> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> index a94c4820bd87..97b41778a52a 100644
> --- a/lib/igt_kms.c
> +++ b/lib/igt_kms.c
> @@ -3274,10 +3274,10 @@ int igt_display_n_crtcs(igt_display_t *display)
>   */
>  void igt_display_require_output(igt_display_t *display)
>  {
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	igt_output_t *output;
>  
> -	for_each_pipe_with_valid_output(display, pipe, output)
> +	for_each_crtc_with_valid_output(display, crtc, output)
>  		return;
>  
>  	igt_skip("No valid crtc/connector combinations found.\n");
> diff --git a/tests/intel/kms_cdclk.c b/tests/intel/kms_cdclk.c
> index 3ed6e88852e3..bb7c5922b643 100644
> --- a/tests/intel/kms_cdclk.c
> +++ b/tests/intel/kms_cdclk.c
> @@ -324,21 +324,21 @@ static void run_cdclk_test(data_t *data, uint32_t flags)
>  {
>  	igt_display_t *display = &data->display;
>  	igt_output_t *output;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  
> -	for_each_pipe_with_valid_output(display, pipe, output) {
> +	for_each_crtc_with_valid_output(display, crtc, output) {
>  		igt_output_set_crtc(output,
> -				    igt_crtc_for_pipe(output->display, pipe));
> +				    crtc);
>  		if (!intel_pipe_output_combo_valid(display)) {
>  			igt_output_set_crtc(output, NULL);
>  			continue;
>  		}
>  
> -		igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), output->name) {
> +		igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc), output->name) {
>  			if (flags & TEST_PLANESCALING)
> -				test_plane_scaling(data, pipe, output);
> +				test_plane_scaling(data, crtc->pipe, output);
>  			if (flags & TEST_MODETRANSITION)
> -				test_mode_transition(data, pipe, output);
> +				test_mode_transition(data, crtc->pipe, output);
>  		}
>  	}
>  }
> diff --git a/tests/intel/kms_draw_crc.c b/tests/intel/kms_draw_crc.c
> index 26bd1fbb1961..9f7f213877b0 100644
> --- a/tests/intel/kms_draw_crc.c
> +++ b/tests/intel/kms_draw_crc.c
> @@ -93,18 +93,18 @@ struct base_crc base_crcs[ARRAY_SIZE(formats)];
>  
>  static void find_modeset_params(void)
>  {
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  
> -	for_each_pipe_with_valid_output(&display, pipe, output) {
> +	for_each_crtc_with_valid_output(&display, crtc, output) {
>  		igt_display_reset(&display);
>  
>  		igt_output_set_crtc(output,
> -				    igt_crtc_for_pipe(output->display, pipe));
> +				    crtc);
>  		if (!intel_pipe_output_combo_valid(&display))
>  			continue;
>  
>  		mode = igt_output_get_mode(output);
> -		pipe_crc = igt_crtc_crc_new(igt_crtc_for_pipe(&display, pipe),
> +		pipe_crc = igt_crtc_crc_new(crtc,
>  					    IGT_PIPE_CRC_SOURCE_AUTO);
>  		/*Only one pipe/output is enough*/
>  		break;
> diff --git a/tests/intel/kms_dsc.c b/tests/intel/kms_dsc.c
> index e70cae2524a8..e70e0d202628 100644
> --- a/tests/intel/kms_dsc.c
> +++ b/tests/intel/kms_dsc.c
> @@ -251,7 +251,7 @@ static void test_dsc(data_t *data, uint32_t test_type, int bpc,
>  {
>  	igt_display_t *display = &data->display;
>  	igt_output_t *output;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	char name[3][LEN] = {
>  				{0},
>  				{0},
> @@ -260,12 +260,12 @@ static void test_dsc(data_t *data, uint32_t test_type, int bpc,
>  
>  	igt_require(check_gen11_bpc_constraint(data->drm_fd, data->input_bpc));
>  
> -	for_each_pipe_with_valid_output(display, pipe, output) {
> +	for_each_crtc_with_valid_output(display, crtc, output) {
>  		data->output_format = output_format;
>  		data->plane_format = plane_format;
>  		data->input_bpc = bpc;
>  		data->output = output;
> -		data->pipe = pipe;
> +		data->pipe = crtc->pipe;
>  
>  		if (!is_dsc_supported_by_sink(data->drm_fd, data->output) ||
>  		    !check_gen11_dp_constraint(data->drm_fd, data->output, data->pipe))
> diff --git a/tests/intel/kms_fence_pin_leak.c b/tests/intel/kms_fence_pin_leak.c
> index 15ae038d8b08..8dd39e157a95 100644
> --- a/tests/intel/kms_fence_pin_leak.c
> +++ b/tests/intel/kms_fence_pin_leak.c
> @@ -210,17 +210,17 @@ static void run_test(data_t *data)
>  {
>  	igt_display_t *display = &data->display;
>  	igt_output_t *output;
> -	enum pipe p;
> +	igt_crtc_t *crtc;
>  
> -	for_each_pipe_with_valid_output(display, p, output) {
> +	for_each_crtc_with_valid_output(display, crtc, output) {
>  		igt_display_reset(display);
>  
>  		igt_output_set_crtc(output,
> -				    igt_crtc_for_pipe(output->display, p));
> +				    crtc);
>  		if (!intel_pipe_output_combo_valid(display))
>  			continue;
>  
> -		run_single_test(data, p, output);
> +		run_single_test(data, crtc->pipe, output);
>  
>  		return; /* one time ought to be enough */
>  	}
> diff --git a/tests/intel/kms_flip_tiling.c b/tests/intel/kms_flip_tiling.c
> index 269bb0e24d0a..c063a60c8423 100644
> --- a/tests/intel/kms_flip_tiling.c
> +++ b/tests/intel/kms_flip_tiling.c
> @@ -225,17 +225,17 @@ int igt_main()
>  
>  	igt_describe("Check pageflip between modifiers");
>  	igt_subtest_with_dynamic("flip-change-tiling") {
> -		enum pipe pipe;
> +		igt_crtc_t *crtc;
>  		bool run_in_simulation = igt_run_in_simulation();
>  
> -		for_each_pipe_with_valid_output(&data.display, pipe, output) {
> +		for_each_crtc_with_valid_output(&data.display, crtc, output) {
>  			igt_plane_t *plane;
>  
>  			igt_display_reset(&data.display);
>  			pipe_crc_free(&data);
>  
>  			igt_output_set_crtc(output,
> -					    igt_crtc_for_pipe(output->display, pipe));
> +					    crtc);
>  			if (!intel_pipe_output_combo_valid(&data.display))
>  				continue;
>  
> @@ -260,17 +260,20 @@ int igt_main()
>  						continue;
>  
>  					igt_dynamic_f("pipe-%s-%s-%s-to-%s",
> -						      kmstest_pipe_name(pipe),
> +						      igt_crtc_name(crtc),
>  						      igt_output_name(output),
>  						      igt_fb_modifier_name(modifier[0]),
>  						      igt_fb_modifier_name(modifier[1]))
> -						test_flip_tiling(&data, pipe, output, modifier);
> +						test_flip_tiling(&data,
> +								 crtc->pipe,
> +								 output,
> +								 modifier);
>  
>  					if (data.flipevent_in_queue)
>  						handle_lost_event(&data);
>  				}
>  			}
> -			test_cleanup(&data, pipe, output);
> +			test_cleanup(&data, crtc->pipe, output);
>  		}
>  	}
>  
> diff --git a/tests/intel/kms_frontbuffer_tracking.c b/tests/intel/kms_frontbuffer_tracking.c
> index cd80ba444cf5..b60874db000a 100644
> --- a/tests/intel/kms_frontbuffer_tracking.c
> +++ b/tests/intel/kms_frontbuffer_tracking.c
> @@ -1163,20 +1163,20 @@ static bool find_connector(bool edp_only, bool pipe_a,
>  			   enum pipe *ret_pipe)
>  {
>  	igt_output_t *output;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  
> -	for_each_pipe_with_valid_output(&drm.display, pipe, output) {
> +	for_each_crtc_with_valid_output(&drm.display, crtc, output) {
>  		drmModeConnectorPtr c = output->config.connector;
>  
>  		if (edp_only && c->connector_type != DRM_MODE_CONNECTOR_eDP)
>  			continue;
>  
> -		if (pipe_a && pipe != PIPE_A)
> +		if (pipe_a && crtc->pipe != PIPE_A)
>  			continue;
>  
> -		if (output == forbidden_output || pipe == forbidden_pipe) {
> +		if (output == forbidden_output || crtc->pipe == forbidden_pipe) {
>  			igt_output_set_crtc(output,
> -					    igt_crtc_for_pipe(output->display, pipe));
> +					    crtc);
>  			igt_output_override_mode(output, connector_get_mode(output));
>  
>  			continue;
> @@ -1186,11 +1186,11 @@ static bool find_connector(bool edp_only, bool pipe_a,
>  			continue;
>  
>  		igt_output_set_crtc(output,
> -				    igt_crtc_for_pipe(output->display, pipe));
> +				    crtc);
>  		igt_output_override_mode(output, connector_get_mode(output));
>  		if (intel_pipe_output_combo_valid(&drm.display)) {
>  			*ret_output = output;
> -			*ret_pipe = pipe;
> +			*ret_pipe = crtc->pipe;
>  			return true;
>  		}
>  	}
> diff --git a/tests/intel/kms_mmap_write_crc.c b/tests/intel/kms_mmap_write_crc.c
> index 453bcd0198a7..c68fd69c402d 100644
> --- a/tests/intel/kms_mmap_write_crc.c
> +++ b/tests/intel/kms_mmap_write_crc.c
> @@ -269,7 +269,7 @@ int igt_main_args("n", NULL, NULL, opt_handler, NULL)
>  {
>  	int i;
>  	igt_output_t *output;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  
>  	igt_fixture() {
>  		data.drm_fd = drm_open_driver_master(DRIVER_INTEL | DRIVER_XE);
> @@ -289,18 +289,18 @@ int igt_main_args("n", NULL, NULL, opt_handler, NULL)
>  	igt_describe("Tests that caching mode has become UC/WT and flushed using mmap write");
>  
>  	igt_subtest_with_dynamic("main") {
> -		for_each_pipe_with_valid_output(&data.display, pipe, output) {
> +		for_each_crtc_with_valid_output(&data.display, crtc, output) {
>  			igt_display_reset(&data.display);
>  
>  			igt_output_set_crtc(output,
> -					    igt_crtc_for_pipe(output->display, pipe));
> +					    crtc);
>  			if (!intel_pipe_output_combo_valid(&data.display))
>  				continue;
>  
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe),
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
>  				      igt_output_name(output)) {
>  				data.output = output;
> -				data.pipe = pipe;
> +				data.pipe = crtc->pipe;
>  
>  				igt_info("Using %d rounds for each pipe in the test\n", ROUNDS);
>  				prepare_crtc(&data);
> diff --git a/tests/intel/kms_pipe_b_c_ivb.c b/tests/intel/kms_pipe_b_c_ivb.c
> index 4559c8b9e951..f6261cb885b9 100644
> --- a/tests/intel/kms_pipe_b_c_ivb.c
> +++ b/tests/intel/kms_pipe_b_c_ivb.c
> @@ -150,16 +150,16 @@ static void
>  find_outputs(data_t *data, igt_output_t **output1, igt_output_t **output2)
>  {
>  	igt_output_t *output;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  
>  	*output1 = NULL;
>  	*output2 = NULL;
>  
> -	for_each_pipe_with_valid_output(&data->display, pipe, output) {
> -		if (pipe == PIPE_B && !*output1 && output != *output2)
> +	for_each_crtc_with_valid_output(&data->display, crtc, output) {
> +		if (crtc->pipe == PIPE_B && !*output1 && output != *output2)
>  			*output1 = output;
>  
> -		if (pipe == PIPE_C && output != *output1 && !*output2)
> +		if (crtc->pipe == PIPE_C && output != *output1 && !*output2)
>  			*output2 = output;
>  
>  		igt_output_set_crtc(output, NULL);
> diff --git a/tests/intel/kms_pm_rpm.c b/tests/intel/kms_pm_rpm.c
> index d7d0989b9a67..31f596413f9f 100644
> --- a/tests/intel/kms_pm_rpm.c
> +++ b/tests/intel/kms_pm_rpm.c
> @@ -1620,22 +1620,22 @@ static bool is_preferred_mode_present(igt_output_t *output, enum pipe pipe,
>  
>  static void set_prefered_mode(void)
>  {
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	igt_output_t *output;
>  	bool mode_found = false;
>  	igt_display_t *display = &ms_data.display;
>  
>  	igt_display_reset(display);
>  
> -	for_each_pipe_with_valid_output(display, pipe, output) {
> +	for_each_crtc_with_valid_output(display, crtc, output) {
>  
>  		igt_output_set_crtc(output,
> -				    igt_crtc_for_pipe(output->display, pipe));
> +				    crtc);
>  
>  		if (!intel_pipe_output_combo_valid(display))
>  			continue;
>  
> -		if (is_preferred_mode_present(output, pipe, display)) {
> +		if (is_preferred_mode_present(output, crtc->pipe, display)) {
>  			mode_found = true;
>  			break;
>  		}
> diff --git a/tests/intel/kms_psr2_su.c b/tests/intel/kms_psr2_su.c
> index 24318037ea44..39ee3ee17e54 100644
> --- a/tests/intel/kms_psr2_su.c
> +++ b/tests/intel/kms_psr2_su.c
> @@ -118,9 +118,9 @@ static void setup_output(data_t *data)
>  {
>  	igt_display_t *display = &data->display;
>  	igt_output_t *output;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  
> -	for_each_pipe_with_valid_output(display, pipe, output) {
> +	for_each_crtc_with_valid_output(display, crtc, output) {
>  		drmModeConnectorPtr c = output->config.connector;
>  
>  		if (c->connector_type != DRM_MODE_CONNECTOR_eDP)
> @@ -128,7 +128,7 @@ static void setup_output(data_t *data)
>  
>  		igt_display_reset(display);
>  		igt_output_set_crtc(output,
> -				    igt_crtc_for_pipe(output->display, pipe));
> +				    crtc);
>  		if (!intel_pipe_output_combo_valid(display))
>  			continue;
>  
> @@ -313,7 +313,7 @@ static int check_psr2_support(data_t *data, enum pipe pipe)
>  int igt_main()
>  {
>  	data_t data = {};
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	int r, i;
>  	igt_output_t *outputs[IGT_MAX_PIPES * IGT_MAX_PIPES];
>  	int pipes[IGT_MAX_PIPES * IGT_MAX_PIPES];
> @@ -354,9 +354,10 @@ int igt_main()
>  		r = timerfd_settime(data.change_screen_timerfd, 0, &interval, NULL);
>  		igt_require_f(r != -1, "Error setting timerfd\n");
>  
> -		for_each_pipe_with_valid_output(&data.display, pipe, data.output) {
> -			if (check_psr2_support(&data, pipe)) {
> -				pipes[n_pipes] = pipe;
> +		for_each_crtc_with_valid_output(&data.display, crtc,
> +						data.output) {
> +			if (check_psr2_support(&data, crtc->pipe)) {
> +				pipes[n_pipes] = crtc->pipe;
>  				outputs[n_pipes] = data.output;
>  				n_pipes++;
>  			}
> diff --git a/tests/intel/kms_psr_stress_test.c b/tests/intel/kms_psr_stress_test.c
> index 87016eb94f4f..09e73bd49bb3 100644
> --- a/tests/intel/kms_psr_stress_test.c
> +++ b/tests/intel/kms_psr_stress_test.c
> @@ -83,11 +83,11 @@ static void setup_output(data_t *data)
>  {
>  	igt_display_t *display = &data->display;
>  	igt_output_t *output;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  
>  	igt_display_require(&data->display, data->drm_fd);
>  
> -	for_each_pipe_with_valid_output(display, pipe, output) {
> +	for_each_crtc_with_valid_output(display, crtc, output) {
>  		drmModeConnectorPtr c = output->config.connector;
>  
>  		if (c->connector_type != DRM_MODE_CONNECTOR_eDP)
> @@ -95,7 +95,7 @@ static void setup_output(data_t *data)
>  
>  		igt_display_reset(display);
>  		igt_output_set_crtc(output,
> -				    igt_crtc_for_pipe(output->display, pipe));
> +				    crtc);
>  		if (!intel_pipe_output_combo_valid(display)) {
>  			igt_output_set_crtc(output, NULL);
>  			continue;
> diff --git a/tests/intel/perf_pmu.c b/tests/intel/perf_pmu.c
> index 57113981d70a..f87674f74e8f 100644
> --- a/tests/intel/perf_pmu.c
> +++ b/tests/intel/perf_pmu.c
> @@ -1120,7 +1120,7 @@ event_wait(int gem_fd, const intel_ctx_t *ctx,
>  	uint16_t devid;
>  	igt_output_t *output;
>  	data_t data;
> -	enum pipe p;
> +	igt_crtc_t *crtc;
>  	int fd;
>  
>  	devid = intel_get_drm_devid(gem_fd);
> @@ -1167,13 +1167,13 @@ event_wait(int gem_fd, const intel_ctx_t *ctx,
>  	eb.flags = e->flags | I915_EXEC_SECURE;
>  	eb.rsvd1 = ctx->id;
>  
> -	for_each_pipe_with_valid_output(&data.display, p, output) {
> +	for_each_crtc_with_valid_output(&data.display, crtc, output) {
>  		struct igt_helper_process waiter = { };
>  		const unsigned int frames = 3;
>  		uint64_t val[2];
>  
>  		batch[6] = MI_WAIT_FOR_EVENT;
> -		switch (p) {
> +		switch (crtc->pipe) {
>  		case PIPE_A:
>  			batch[6] |= MI_WAIT_FOR_PIPE_A_VBLANK;
>  			batch[5] = ~(1 << 3);
> @@ -1192,7 +1192,7 @@ event_wait(int gem_fd, const intel_ctx_t *ctx,
>  
>  		gem_write(gem_fd, obj.handle, 0, batch, sizeof(batch));
>  
> -		data.pipe = p;
> +		data.pipe = crtc->pipe;
>  		prepare_crtc(&data, gem_fd, output);
>  
>  		fd = open_pmu(gem_fd,
> diff --git a/tests/intel/prime_mmap_kms.c b/tests/intel/prime_mmap_kms.c
> index c19c3763fc04..b263a5822063 100644
> --- a/tests/intel/prime_mmap_kms.c
> +++ b/tests/intel/prime_mmap_kms.c
> @@ -201,13 +201,13 @@ static void run_test(gpu_process_t *gpu)
>  {
>  	igt_display_t *display = &gpu->display;
>  	igt_output_t *output;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  
> -	for_each_pipe_with_valid_output(display, pipe, output) {
> +	for_each_crtc_with_valid_output(display, crtc, output) {
>  		int prime_fd;
>  
>  		gpu->output = output;
> -		gpu->pipe = pipe;
> +		gpu->pipe = crtc->pipe;
>  
>  		prepare_crtc(gpu);
>  
> diff --git a/tests/intel/xe_pat.c b/tests/intel/xe_pat.c
> index 24339f688ce6..21547c84e7f9 100644
> --- a/tests/intel/xe_pat.c
> +++ b/tests/intel/xe_pat.c
> @@ -910,7 +910,7 @@ static void display_vs_wb_transient(int fd)
>  	struct buf_ops *bops;
>  	struct igt_fb src_fb, dst_fb;
>  	struct intel_buf src, dst;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	int bpp = 32;
>  	int i;
>  
> @@ -927,16 +927,16 @@ static void display_vs_wb_transient(int fd)
>  	bops = buf_ops_create(fd);
>  	ibb = intel_bb_create(fd, SZ_4K);
>  
> -	for_each_pipe_with_valid_output(&display, pipe, output) {
> +	for_each_crtc_with_valid_output(&display, crtc, output) {
>  		igt_display_reset(&display);
>  
>  		igt_output_set_crtc(output,
> -				    igt_crtc_for_pipe(output->display, pipe));
> +				    crtc);
>  		if (!intel_pipe_output_combo_valid(&display))
>  			continue;
>  
>  		mode = igt_output_get_mode(output);
> -		pipe_crc = igt_crtc_crc_new(igt_crtc_for_pipe(&display, pipe),
> +		pipe_crc = igt_crtc_crc_new(crtc,
>  					    IGT_PIPE_CRC_SOURCE_AUTO);
>  		break;
>  	}
> diff --git a/tests/kms_atomic_interruptible.c b/tests/kms_atomic_interruptible.c
> index 05cf3f956e1f..8565fc501dc7 100644
> --- a/tests/kms_atomic_interruptible.c
> +++ b/tests/kms_atomic_interruptible.c
> @@ -325,7 +325,7 @@ int igt_main()
>  {
>  	igt_display_t display;
>  	igt_output_t *output;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  
>  	igt_fixture() {
>  		display.drm_fd = drm_open_driver_master(DRIVER_ANY);
> @@ -341,84 +341,105 @@ int igt_main()
>  
>  	igt_describe("Tests the interrupt properties of legacy modeset");
>  	igt_subtest_with_dynamic("legacy-setmode") {
> -		for_each_pipe_with_valid_output(&display, pipe, output) {
> -			if (!pipe_output_combo_valid(&display, pipe, output))
> +		for_each_crtc_with_valid_output(&display, crtc, output) {
> +			if (!pipe_output_combo_valid(&display, crtc->pipe, output))
>  				continue;
>  
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
> -				run_plane_test(&display, pipe, output, test_legacy_modeset, DRM_PLANE_TYPE_PRIMARY);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output))
> +				run_plane_test(&display, crtc->pipe, output,
> +					       test_legacy_modeset,
> +					       DRM_PLANE_TYPE_PRIMARY);
>  			break;
>  		}
>  	}
>  
>  	igt_describe("Tests the interrupt properties of atomic modeset");
>  	igt_subtest_with_dynamic("atomic-setmode") {
> -		for_each_pipe_with_valid_output(&display, pipe, output) {
> -			if (!pipe_output_combo_valid(&display, pipe, output))
> +		for_each_crtc_with_valid_output(&display, crtc, output) {
> +			if (!pipe_output_combo_valid(&display, crtc->pipe, output))
>  				continue;
>  
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
> -				run_plane_test(&display, pipe, output, test_atomic_modeset, DRM_PLANE_TYPE_PRIMARY);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output))
> +				run_plane_test(&display, crtc->pipe, output,
> +					       test_atomic_modeset,
> +					       DRM_PLANE_TYPE_PRIMARY);
>  			break;
>  		}
>  	}
>  
>  	igt_describe("Tests the interrupt properties for DPMS");
>  	igt_subtest_with_dynamic("legacy-dpms") {
> -		for_each_pipe_with_valid_output(&display, pipe, output) {
> -			if (!pipe_output_combo_valid(&display, pipe, output))
> +		for_each_crtc_with_valid_output(&display, crtc, output) {
> +			if (!pipe_output_combo_valid(&display, crtc->pipe, output))
>  				continue;
>  
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
> -				run_plane_test(&display, pipe, output, test_legacy_dpms, DRM_PLANE_TYPE_PRIMARY);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output))
> +				run_plane_test(&display, crtc->pipe, output,
> +					       test_legacy_dpms,
> +					       DRM_PLANE_TYPE_PRIMARY);
>  			break;
>  		}
>  	}
>  
>  	igt_describe("Tests the interrupt properties for pageflip");
>  	igt_subtest_with_dynamic("legacy-pageflip") {
> -		for_each_pipe_with_valid_output(&display, pipe, output) {
> -			if (!pipe_output_combo_valid(&display, pipe, output))
> +		for_each_crtc_with_valid_output(&display, crtc, output) {
> +			if (!pipe_output_combo_valid(&display, crtc->pipe, output))
>  				continue;
>  
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
> -				run_plane_test(&display, pipe, output, test_pageflip, DRM_PLANE_TYPE_PRIMARY);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output))
> +				run_plane_test(&display, crtc->pipe, output,
> +					       test_pageflip,
> +					       DRM_PLANE_TYPE_PRIMARY);
>  			break;
>  		}
>  	}
>  
>  	igt_describe("Tests the interrupt properties for cursor");
>  	igt_subtest_with_dynamic("legacy-cursor") {
> -		for_each_pipe_with_valid_output(&display, pipe, output) {
> -			if (!pipe_output_combo_valid(&display, pipe, output))
> +		for_each_crtc_with_valid_output(&display, crtc, output) {
> +			if (!pipe_output_combo_valid(&display, crtc->pipe, output))
>  				continue;
>  
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
> -				run_plane_test(&display, pipe, output, test_setcursor, DRM_PLANE_TYPE_CURSOR);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output))
> +				run_plane_test(&display, crtc->pipe, output,
> +					       test_setcursor,
> +					       DRM_PLANE_TYPE_CURSOR);
>  			break;
>  		}
>  	}
>  
>  	igt_describe("Tests the interrupt properties for primary plane");
>  	igt_subtest_with_dynamic("universal-setplane-primary") {
> -		for_each_pipe_with_valid_output(&display, pipe, output) {
> -			if (!pipe_output_combo_valid(&display, pipe, output))
> +		for_each_crtc_with_valid_output(&display, crtc, output) {
> +			if (!pipe_output_combo_valid(&display, crtc->pipe, output))
>  				continue;
>  
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
> -				run_plane_test(&display, pipe, output, test_setplane, DRM_PLANE_TYPE_PRIMARY);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output))
> +				run_plane_test(&display, crtc->pipe, output,
> +					       test_setplane,
> +					       DRM_PLANE_TYPE_PRIMARY);
>  			break;
>  		}
>  	}
>  
>  	igt_describe("Tests the interrupt properties for cursor plane");
>  	igt_subtest_with_dynamic("universal-setplane-cursor") {
> -		for_each_pipe_with_valid_output(&display, pipe, output) {
> -			if (!pipe_output_combo_valid(&display, pipe, output))
> +		for_each_crtc_with_valid_output(&display, crtc, output) {
> +			if (!pipe_output_combo_valid(&display, crtc->pipe, output))
>  				continue;
>  
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
> -				run_plane_test(&display, pipe, output, test_setplane, DRM_PLANE_TYPE_CURSOR);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output))
> +				run_plane_test(&display, crtc->pipe, output,
> +					       test_setplane,
> +					       DRM_PLANE_TYPE_CURSOR);
>  			break;
>  		}
>  	}
> diff --git a/tests/kms_atomic_transition.c b/tests/kms_atomic_transition.c
> index f0598e486111..ece95961cdf2 100644
> --- a/tests/kms_atomic_transition.c
> +++ b/tests/kms_atomic_transition.c
> @@ -1128,7 +1128,7 @@ static data_t data;
>  int igt_main_args("", long_opts, help_str, opt_handler, &data)
>  {
>  	igt_output_t *output;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	struct {
>  		const char *name;
>  		enum transition_type type;
> @@ -1201,17 +1201,18 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
>  	igt_subtest_with_dynamic("plane-primary-toggle-with-vblank-wait") {
>  		pipe_count = 0;
>  
> -		for_each_pipe_with_valid_output(&data.display, pipe, output) {
> +		for_each_crtc_with_valid_output(&data.display, crtc, output) {
>  			if (pipe_count == 2 * count && !data.extended)
>  				break;
>  
> -			if (!pipe_output_combo_valid(&data.display, pipe, output))
> +			if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  				continue;
>  
>  			pipe_count++;
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
> -				run_primary_test(&data, pipe, output);
> -			test_cleanup(&data, pipe, output, false);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output))
> +				run_primary_test(&data, crtc->pipe, output);
> +			test_cleanup(&data, crtc->pipe, output, false);
>  		}
>  	}
>  
> @@ -1223,7 +1224,8 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
>  		igt_subtest_with_dynamic_f("%s", transition_tests[i].name) {
>  			pipe_count = 0;
>  
> -			for_each_pipe_with_valid_output(&data.display, pipe, output) {
> +			for_each_crtc_with_valid_output(&data.display, crtc,
> +							output) {
>  				/*
>  				 * Test modeset cases on internal panels separately with a reduced
>  				 * number of combinations, to avoid long runtimes due to modesets on
> @@ -1240,19 +1242,20 @@ int igt_main_args("", long_opts, help_str, opt_handler, &data)
>  				if (pipe_count == 2 * count && !data.extended)
>  					break;
>  
> -				if (!pipe_output_combo_valid(&data.display, pipe, output))
> +				if (!pipe_output_combo_valid(&data.display, crtc->pipe, output))
>  					continue;
>  
>  				pipe_count++;
>  				igt_dynamic_f("pipe-%s-%s",
> -					      kmstest_pipe_name(pipe),
> +					      igt_crtc_name(crtc),
>  					      igt_output_name(output))
> -					run_transition_test(&data, pipe, output,
> +					run_transition_test(&data, crtc->pipe,
> +							    output,
>  							    transition_tests[i].type,
>  							    transition_tests[i].nonblocking,
>  							    transition_tests[i].fencing);
>  
> -				test_cleanup(&data, pipe, output,
> +				test_cleanup(&data, crtc->pipe, output,
>  					     transition_tests[i].fencing);
>  			}
>  		}
> diff --git a/tests/kms_flip_event_leak.c b/tests/kms_flip_event_leak.c
> index ce8993ccb681..545719638898 100644
> --- a/tests/kms_flip_event_leak.c
> +++ b/tests/kms_flip_event_leak.c
> @@ -107,7 +107,7 @@ int igt_main()
>  {
>  	data_t data = {};
>  	igt_output_t *output;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  
>  	igt_fixture() {
>  		data.drm_fd = drm_open_driver_master(DRIVER_ANY);
> @@ -118,16 +118,17 @@ int igt_main()
>  	}
>  
>  	igt_subtest_with_dynamic("basic") {
> -		for_each_pipe_with_valid_output(&data.display, pipe, output) {
> +		for_each_crtc_with_valid_output(&data.display, crtc, output) {
>  			igt_display_reset(&data.display);
>  
>  			igt_output_set_crtc(output,
> -					    igt_crtc_for_pipe(output->display, pipe));
> +					    crtc);
>  			if (!intel_pipe_output_combo_valid(&data.display))
>  				continue;
>  
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
> -				test(&data, pipe, output);
> +			igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +				      igt_output_name(output)) {
> +				test(&data, crtc->pipe, output);
>  			}
>  		}
>  	}
> diff --git a/tests/kms_invalid_mode.c b/tests/kms_invalid_mode.c
> index a3d52deafd7f..163bdb96bc3a 100644
> --- a/tests/kms_invalid_mode.c
> +++ b/tests/kms_invalid_mode.c
> @@ -337,7 +337,7 @@ static data_t data;
>  int igt_main()
>  {
>  
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	igt_output_t *output;
>  
>  	igt_fixture() {
> @@ -356,17 +356,20 @@ int igt_main()
>  	igt_describe("Make sure all modesets are rejected when the requested mode is invalid");
>  	for (int i = 0; i < ARRAY_SIZE(subtests); i++) {
>  		igt_subtest_with_dynamic(subtests[i].name) {
> -			for_each_pipe_with_valid_output(&data.display, pipe, output) {
> +			for_each_crtc_with_valid_output(&data.display, crtc,
> +							output) {
>  				igt_display_reset(&data.display);
>  
>  				igt_output_set_crtc(output,
> -						    igt_crtc_for_pipe(output->display, pipe));
> +						    crtc);
>  				if (!intel_pipe_output_combo_valid(&data.display))
>  					continue;
>  
> -				igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output)) {
> +				igt_dynamic_f("pipe-%s-%s",
> +					      igt_crtc_name(crtc),
> +					      igt_output_name(output)) {
>  					data.output = output;
> -					data.pipe = pipe;
> +					data.pipe = crtc->pipe;
>  					data.adjust_mode = subtests[i].adjust_mode;
>  					test_output(&data);
>  				}
> diff --git a/tests/kms_panel_fitting.c b/tests/kms_panel_fitting.c
> index 9bfb7d3f1356..f4c2d0697539 100644
> --- a/tests/kms_panel_fitting.c
> +++ b/tests/kms_panel_fitting.c
> @@ -246,7 +246,7 @@ static void test_panel_fitting(data_t *data, enum test_type type)
>  {
>  	igt_display_t *display = &data->display;
>  	igt_output_t *output;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	struct stat sb;
>  
>  	if (type == TEST_ATOMIC) {
> @@ -265,18 +265,20 @@ static void test_panel_fitting(data_t *data, enum test_type type)
>  
>  	}
>  
> -	for_each_pipe_with_valid_output(display, pipe, output) {
> +	for_each_crtc_with_valid_output(display, crtc, output) {
>  		/* Check that the "scaling mode" property has been set. */
>  		if (!igt_output_has_prop(output, IGT_CONNECTOR_SCALING_MODE))
>  			continue;
>  
>  		cleanup_crtc(data);
>  
> -		igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), output->name) {
> +		igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc), output->name) {
>  			if (type == TEST_ATOMIC)
> -				test_panel_fitting_fastset(display, pipe, output);
> +				test_panel_fitting_fastset(display,
> +							   crtc->pipe, output);
>  			if (type == TEST_LEGACY)
> -				test_panel_fitting_legacy(data, display, pipe, output);
> +				test_panel_fitting_legacy(data, display,
> +							  crtc->pipe, output);
>  		}
>  	}
>  }
> diff --git a/tests/kms_plane_multiple.c b/tests/kms_plane_multiple.c
> index fd2293a6c742..e399f3ee270d 100644
> --- a/tests/kms_plane_multiple.c
> +++ b/tests/kms_plane_multiple.c
> @@ -556,23 +556,24 @@ static void run_2_display_test(data_t *data, uint64_t modifier, const char *name
>  
>  static void run_test(data_t *data, uint64_t modifier, const char *name)
>  {
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	igt_output_t *output;
>  	igt_display_t *display = &data->display;
>  
>  	igt_skip_on_f(!igt_display_has_format_mod(display, DRM_FORMAT_XRGB8888, modifier),
>  		      "%s modifier is not supported\n", name);
>  
> -	for_each_pipe_with_valid_output(display, pipe, output) {
> +	for_each_crtc_with_valid_output(display, crtc, output) {
>  		igt_display_reset(display);
>  
>  		igt_output_set_crtc(output,
> -				    igt_crtc_for_pipe(output->display, pipe));
> +				    crtc);
>  		if (!intel_pipe_output_combo_valid(display))
>  			continue;
>  
> -		igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), output->name)
> -			test_plane_position(data, pipe, output, modifier);
> +		igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc), output->name)
> +			test_plane_position(data, crtc->pipe, output,
> +					    modifier);
>  	}
>  }
>  
> diff --git a/tests/kms_scaling_modes.c b/tests/kms_scaling_modes.c
> index 588513750257..f74db2912561 100644
> --- a/tests/kms_scaling_modes.c
> +++ b/tests/kms_scaling_modes.c
> @@ -110,9 +110,9 @@ static void test_scaling_mode(data_t *data, uint32_t flags)
>  {
>  	igt_display_t *display = &data->display;
>  	igt_output_t *output;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  
> -	for_each_pipe_with_valid_output(display, pipe, output) {
> +	for_each_crtc_with_valid_output(display, crtc, output) {
>  		igt_display_reset(display);
>  
>  		if (!has_scaling_mode(output)) {
> @@ -122,12 +122,14 @@ static void test_scaling_mode(data_t *data, uint32_t flags)
>  		}
>  
>  		igt_output_set_crtc(output,
> -				    igt_crtc_for_pipe(output->display, pipe));
> +				    crtc);
>  		if (!intel_pipe_output_combo_valid(display))
>  			continue;
>  
> -		igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), igt_output_name(output))
> -			test_scaling_mode_on_output(display, pipe, output, flags);
> +		igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
> +			      igt_output_name(output))
> +			test_scaling_mode_on_output(display, crtc->pipe,
> +						    output, flags);
>  	}
>  }
>  
> diff --git a/tests/kms_sequence.c b/tests/kms_sequence.c
> index 9eea70cf7a88..7fe314afaf7f 100644
> --- a/tests/kms_sequence.c
> +++ b/tests/kms_sequence.c
> @@ -272,7 +272,7 @@ int igt_main()
>  {
>  	int fd;
>  	igt_output_t *output;
> -	enum pipe p;
> +	igt_crtc_t *crtc;
>  	data_t data;
>  	const struct {
>  		const char *name;
> @@ -309,16 +309,19 @@ int igt_main()
>  			igt_describe("This is a test of drmCrtcGetSequence and "
>  				     "drmCrtcQueueSequence");
>  			igt_subtest_with_dynamic_f("%s-%s", f->name, m->name) {
> -				for_each_pipe_with_valid_output(&data.display, p, output) {
> +				for_each_crtc_with_valid_output(&data.display,
> +								crtc, output) {
>  					igt_display_reset(&data.display);
>  
>  					igt_output_set_crtc(output,
> -							    igt_crtc_for_pipe(output->display, p));
> +							    crtc);
>  					if (!intel_pipe_output_combo_valid(&data.display))
>  						continue;
>  
> -					igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(p), igt_output_name(output)) {
> -						data.pipe = p;
> +					igt_dynamic_f("pipe-%s-%s",
> +						      igt_crtc_name(crtc),
> +						      igt_output_name(output)) {
> +						data.pipe = crtc->pipe;
>  						data.output = output;
>  						data.flags = m->flags;
>  						run_test(&data, fd, f->func);
> diff --git a/tests/prime_vgem.c b/tests/prime_vgem.c
> index 79963648f132..bbf5ab97f459 100644
> --- a/tests/prime_vgem.c
> +++ b/tests/prime_vgem.c
> @@ -1053,12 +1053,12 @@ static void test_flip(int i915, int vgem, unsigned hang)
>  	igt_display_t display;
>  	igt_output_t *output;
>  	struct vgem_bo bo[2];
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  
>  	igt_display_require(&display, i915);
>  	igt_display_require_output(&display);
>  
> -	for_each_pipe_with_valid_output(&display, pipe, output) {
> +	for_each_crtc_with_valid_output(&display, crtc, output) {
>  		mode = igt_output_get_mode(output);
>  		break;
>  	}
> diff --git a/tests/vmwgfx/vmw_prime.c b/tests/vmwgfx/vmw_prime.c
> index 5f704089b146..e5aca6169e3b 100644
> --- a/tests/vmwgfx/vmw_prime.c
> +++ b/tests/vmwgfx/vmw_prime.c
> @@ -287,20 +287,20 @@ static void draw_triangle_3d(struct gpu_process_t *gpu, uint32_t draw_flags)
>  {
>  	igt_display_t *display = &gpu->display;
>  	igt_output_t *output;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	igt_pipe_crc_t *pipe_crc;
>  	igt_crc_t blank_crc, tri_crc;
>  	char *blank_crc_str, *tri_crc_str;
>  	bool crc_equal;
>  
> -	for_each_pipe_with_valid_output(display, pipe, output) {
> +	for_each_crtc_with_valid_output(display, crtc, output) {
>  		int prime_fd;
>  
>  		gpu->output = output;
> -		gpu->pipe = pipe;
> +		gpu->pipe = crtc->pipe;
>  
>  		prepare_crtc(gpu);
> -		pipe_crc = igt_pipe_crc_new(gpu->mdevice.drm_fd, pipe,
> +		pipe_crc = igt_pipe_crc_new(gpu->mdevice.drm_fd, crtc->pipe,
>  					    IGT_PIPE_CRC_SOURCE_AUTO);
>  		igt_pipe_crc_collect_crc(pipe_crc, &blank_crc);
>  
> @@ -352,7 +352,7 @@ static void draw_dumb_buffer(struct gpu_process_t *gpu)
>  {
>  	igt_display_t *display = &gpu->display;
>  	igt_output_t *output;
> -	enum pipe pipe;
> +	igt_crtc_t *crtc;
>  	igt_pipe_crc_t *pipe_crc;
>  	igt_crc_t blank_crc, red_crc, blue_crc, tri_crc, red2_crc;
>  	char *blank_crc_str, *red_crc_str, *red2_crc_str, *blue_crc_str,
> @@ -362,12 +362,12 @@ static void draw_dumb_buffer(struct gpu_process_t *gpu)
>  	struct vmw_default_objects objects = { 0 };
>  	int32_t cid = vmw_ioctl_context_create(gpu->mdevice.drm_fd);
>  
> -	for_each_pipe_with_valid_output(display, pipe, output) {
> +	for_each_crtc_with_valid_output(display, crtc, output) {
>  		gpu->output = output;
> -		gpu->pipe = pipe;
> +		gpu->pipe = crtc->pipe;
>  
>  		prepare_crtc_surface(gpu);
> -		pipe_crc = igt_pipe_crc_new(gpu->mdevice.drm_fd, pipe,
> +		pipe_crc = igt_pipe_crc_new(gpu->mdevice.drm_fd, crtc->pipe,
>  					    IGT_PIPE_CRC_SOURCE_AUTO);
>  		igt_pipe_crc_collect_crc(pipe_crc, &blank_crc);

-- 
Jani Nikula, Intel

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

* Re: [PATCH i-g-t 15/15] lib/kms: Nuke for_each_pipe_with_*_output()
  2026-01-30 10:52 ` [PATCH i-g-t 15/15] lib/kms: Nuke for_each_pipe_with_*_output() Ville Syrjala
@ 2026-01-30 14:35   ` Jani Nikula
  0 siblings, 0 replies; 42+ messages in thread
From: Jani Nikula @ 2026-01-30 14:35 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

On Fri, 30 Jan 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> The pipe based for_each_pipe_with_{single,valid}_output()
> iterators are no longer used anywhere. Get rid of them
> so that everyone is forced to use the new crtc based
> counterparts instead.

Unfortunately, one more user just got merged: 47ecc6345492
("tools/intel_hdcp: Basic init and cleanup for hdcp, constants, enums").

With that fixed,

Reviewed-by: Jani Nikula <jani.nikula@intel.com>

>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  lib/igt_kms.h | 38 --------------------------------------
>  1 file changed, 38 deletions(-)
>
> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
> index a4857ea0e574..057a0f5e90e0 100644
> --- a/lib/igt_kms.h
> +++ b/lib/igt_kms.h
> @@ -774,27 +774,6 @@ static inline bool igt_crtc_connector_valid(igt_crtc_t *crtc, igt_output_t *outp
>  	     (crtc)++) \
>  		for_each_if ((crtc)->valid)
>  
> -/**
> - * for_each_pipe_with_valid_output:
> - * @display: a pointer to an #igt_display_t structure
> - * @pipe: The pipe for which this @pipe / @output combination is valid.
> - * @output: The output for which this @pipe / @output combination is valid.
> - *
> - * This for loop is called over all connected outputs. This function
> - * will try every combination of @pipe and @output.
> - *
> - * If you only need to test a single output for each pipe, use
> - * for_each_pipe_with_single_output(), if you only need an
> - * output for a single pipe, use igt_get_single_output_for_pipe().
> - */
> -#define for_each_pipe_with_valid_output(display, pipe, output) \
> -	for (int con__ = (pipe) = 0; \
> -	     assert(igt_can_fail()), (pipe) < igt_display_n_crtcs(display) && con__ < (display)->n_outputs; \
> -	     con__ = (con__ + 1 < (display)->n_outputs) ? con__ + 1 : (pipe = pipe + 1, 0)) \
> -		for_each_if(igt_crtc_for_pipe((display), (pipe))->valid) \
> -			for_each_if ((((output) = &(display)->outputs[con__]), \
> -						igt_pipe_connector_valid((pipe), (output))))
> -
>  /**
>   * for_each_crtc_with_valid_output:
>   * @display: a pointer to an #igt_display_t structure
> @@ -819,23 +798,6 @@ static inline bool igt_crtc_connector_valid(igt_crtc_t *crtc, igt_output_t *outp
>  igt_output_t **__igt_pipe_populate_outputs(igt_display_t *display,
>  					   igt_output_t **chosen_outputs);
>  
> -/**
> - * for_each_pipe_with_single_output:
> - * @display: a pointer to an #igt_display_t structure
> - * @pipe: The pipe for which this @pipe / @output combination is valid.
> - * @output: The output for which this @pipe / @output combination is valid.
> - *
> - * This loop is called over all pipes, and will try to find a compatible output
> - * for each pipe. Unlike for_each_pipe_with_valid_output(), this function will
> - * be called at most once for each pipe.
> - */
> -#define for_each_pipe_with_single_output(display, pipe, output) \
> -	for (igt_output_t *__outputs[igt_display_n_crtcs(display)], \
> -	     **__output = __igt_pipe_populate_outputs((display), __outputs); \
> -		 __output < &__outputs[igt_display_n_crtcs(display)]; __output++) \
> -		for_each_if (*__output && \
> -			     ((pipe) = (__output - __outputs), (output) = *__output, 1))
> -
>  /**
>   * for_each_crtc_with_single_output:
>   * @display: a pointer to an #igt_display_t structure

-- 
Jani Nikula, Intel

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

* Re: [PATCH i-g-t 01/15] lib/kms: Introduce for_each_crtc*()
  2026-01-30 13:38   ` Jani Nikula
@ 2026-01-30 15:36     ` Ville Syrjälä
  2026-02-02 11:10       ` Jani Nikula
  0 siblings, 1 reply; 42+ messages in thread
From: Ville Syrjälä @ 2026-01-30 15:36 UTC (permalink / raw)
  To: Jani Nikula; +Cc: igt-dev

On Fri, Jan 30, 2026 at 03:38:03PM +0200, Jani Nikula wrote:
> On Fri, 30 Jan 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > Add for_each_crtc*() as the crtc based replacement for
> > the for_each_pipe*() iterators (which will eventually get
> > nuked).
> >
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> >  lib/igt_kms.h | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 68 insertions(+)
> >
> > diff --git a/lib/igt_kms.h b/lib/igt_kms.h
> > index 432c67d11780..a4857ea0e574 100644
> > --- a/lib/igt_kms.h
> > +++ b/lib/igt_kms.h
> > @@ -682,6 +682,19 @@ static inline bool igt_pipe_connector_valid(enum pipe pipe, igt_output_t *output
> >  		output->config.valid_crtc_idx_mask & (1 << (pipe));
> >  }
> >  
> > +/**
> > + * igt_crtc_connector_valid:
> > + * @crtc: CRTC to check.
> > + * @output: #igt_output_t to check.
> > + *
> > + * Checks whether the given CRTC and output can be used together.
> > + */
> > +static inline bool igt_crtc_connector_valid(igt_crtc_t *crtc, igt_output_t *output)
> > +{
> > +	return igt_output_is_connected(output) &&
> > +		output->config.valid_crtc_idx_mask & (1 << crtc->pipe);
> 
> So should this use crtc->crtc_offset instead of crtc->pipe? Or will that
> bring complications during the conversions that try to remain
> functionally unchanged?

I wasn't thinking too had at this point. Just trying to mostly preserve
the behaviour until we can get to the point where we only have to
modify igt_kms.[ch] to change things.

> 
> (And should crtc->crtc_offset really be named crtc_index?)

Yeah, I think so. But not worrying about it right now.

> 
> > +}
> > +
> >  #define for_each_if(condition) if (!(condition)) {} else
> >  
> >  /**
> > @@ -744,6 +757,23 @@ static inline bool igt_pipe_connector_valid(enum pipe pipe, igt_output_t *output
> >  	for_each_pipe_static(pipe) \
> >  		for_each_if(igt_crtc_for_pipe((display), (pipe))->valid)
> >  
> > +/**
> > + * for_each_crtc:
> > + * @display: a pointer to an #igt_display_t structure
> > + * @crtc: The CRTC
> > + *
> > + * This for loop iterates over all CRTCs.
> > + *
> > + * Note that this cannot be used to enumerate per-CRTC subtest names since it
> > + * depends upon runtime probing of the actual kms driver that is being tested.
> > + * Use #for_each_pipe_static instead.
> > + */
> > +#define for_each_crtc(display, crtc) \
> > +	for ((crtc) = &(display)->crtcs[0]; \
> > +	     (crtc) < &(display)->crtcs[(display)->n_crtcs]; \
> > +	     (crtc)++) \
> > +		for_each_if ((crtc)->valid)
> 
> I feel like for_each_crtc() should iterate the CRTCs in CRTC order, not
> pipe order. What's the plan? Are we eventually going to have ->crtcs[]
> in CRTC order?

I don't even know what it means to have them in pipe order. It should be
one and the same right now because the kernel anyway has them in the
same order. I guess it just means we could theoeretically have holes
in the array with crtc->valid==false for fused off pipes?

But yeah, if/when we start to reorder the pipes, I think we should keep
this stuff in CRTC order, and get rid of the holes.

> And then do something special when some tests want to use
> pipe order?

Something like that. Or make sure the tests don't have some
silly assumptions where the order matters.

> The other day I was looking at making ->n_crtcs and thus
> igt_display_n_crtcs() reflect the actual CRTC count, not IGT_MAX_PIPES,
> and it's also complicated because too many places depend on
> igt_display_n_crtcs() indicating the size of ->crtcs[] and that being
> indexed by pipe instead of CRTC index. So that's also dependent on
> indexing ->crtcs[] with CRTC index.

Yeah, it all needs to get fixed properly to get rid of the pipe
indexing/holes. And then we can nuke that silly crtc->valid thing
as well. Though I admit I didn't really look to closely at what
it all entails.

> Anyway, the loops here make my head spin, but it's all

Yeah, they ugly. for_each_crtc_with_single_output() in particular since
it still shares __igt_pipe_populate_outputs() with the pipe based thing
but I didn't want to start rewriting that stuff until the old iterator
is gone.

> 
> Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> 
> I'd just like to hear what the plan is wrt the above questions, perhaps
> recorded in the commit message.

I suppose I don't really have a real solid plane yet, other than
to try to limit the damage to lib/igt_kms.[ch] when we need to
do those changes.

> 
> BR,
> Jani.
> 
> 
> > +
> >  /**
> >   * for_each_pipe_with_valid_output:
> >   * @display: a pointer to an #igt_display_t structure
> > @@ -765,6 +795,27 @@ static inline bool igt_pipe_connector_valid(enum pipe pipe, igt_output_t *output
> >  			for_each_if ((((output) = &(display)->outputs[con__]), \
> >  						igt_pipe_connector_valid((pipe), (output))))
> >  
> > +/**
> > + * for_each_crtc_with_valid_output:
> > + * @display: a pointer to an #igt_display_t structure
> > + * @crtc: CRTC for which this @crtc / @output combination is valid.
> > + * @output: The output for which this @crtc / @output combination is valid.
> > + *
> > + * This for loop is called over all connected outputs. This function
> > + * will try every combination of @crtc and @output.
> > + *
> > + * If you only need to test a single output for each pipe, use
> > + * for_each_crtc_with_single_output(), if you only need an
> > + * output for a single CRTC, use igt_get_single_output_for_pipe().
> > + */
> > +#define for_each_crtc_with_valid_output(display, crtc, output) \
> > +	for ((output) = &(display)->outputs[0], (crtc) = &(display)->crtcs[0]; \
> > +	     assert(igt_can_fail()), (crtc) < &(display)->crtcs[(display)->n_crtcs] && \
> > +		     (output) < &(display)->outputs[(display)->n_outputs]; \
> > +	     (output) = (output) + 1 < &(display)->outputs[(display)->n_outputs] ? \
> > +		     (output) + 1 : ((crtc)++, &(display)->outputs[0])) \
> > +		for_each_if ((crtc)->valid && igt_crtc_connector_valid((crtc), (output)))
> > +
> >  igt_output_t **__igt_pipe_populate_outputs(igt_display_t *display,
> >  					   igt_output_t **chosen_outputs);
> >  
> > @@ -785,6 +836,23 @@ igt_output_t **__igt_pipe_populate_outputs(igt_display_t *display,
> >  		for_each_if (*__output && \
> >  			     ((pipe) = (__output - __outputs), (output) = *__output, 1))
> >  
> > +/**
> > + * for_each_crtc_with_single_output:
> > + * @display: a pointer to an #igt_display_t structure
> > + * @crtc: The CRTC for which this @crtc / @output combination is valid.
> > + * @output: The output for which this @crtc / @output combination is valid.
> > + *
> > + * This loop is called over all CRTCs, and will try to find a compatible output
> > + * for each CRTC. Unlike for_each_pipe_with_valid_output(), this function will
> > + * be called at most once for each pipe.
> > + */
> > +#define for_each_crtc_with_single_output(display, crtc, output) \
> > +	for (igt_output_t *__outputs[igt_display_n_crtcs(display)], \
> > +	     **__output = __igt_pipe_populate_outputs((display), __outputs); \
> > +		 __output < &__outputs[igt_display_n_crtcs(display)]; __output++) \
> > +		for_each_if (*__output && \
> > +			     ((crtc) = igt_crtc_for_pipe((display), (__output - __outputs)), (output) = *__output, 1))
> > +
> >  /**
> >   * for_each_valid_output_on_pipe:
> >   * @display: a pointer to an #igt_display_t structure
> 
> -- 
> Jani Nikula, Intel

-- 
Ville Syrjälä
Intel

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

* Re: [PATCH i-g-t 03/15] tests/kms_plane_scaling: Use for_each_crtc*()
  2026-01-30 12:03   ` Jani Nikula
@ 2026-01-30 15:41     ` Ville Syrjälä
  2026-02-02 11:04       ` Jani Nikula
  0 siblings, 1 reply; 42+ messages in thread
From: Ville Syrjälä @ 2026-01-30 15:41 UTC (permalink / raw)
  To: Jani Nikula; +Cc: igt-dev

On Fri, Jan 30, 2026 at 02:03:44PM +0200, Jani Nikula wrote:
> On Fri, 30 Jan 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> > -				for_each_pipe(&data.display, pipe) {
> > -					igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
> > -						for_each_valid_output_on_pipe(&data.display, pipe, output) {
> > +				for_each_crtc(&data.display, crtc) {
> > +					igt_dynamic_f("pipe-%s", igt_crtc_name(crtc)) {
> 
> First, a higher level meta comment here. I'm having mild second thoughts
> about igt_crtc_name() returning kmstest_pipe_name().
> 
> What if, in the future, we want to use CRTC name? And make that
> different from the pipe name? If we percolate igt_crtc_name() all over
> the place, the switch is going to be difficult. (Mostly because it's
> being used in test names.)
> 
> Should we have igt_crtc_name() return something based on the CRTC index
> instead? And have, say, igt_crtc_pipe_name() return kmstest_pipe_name(),
> and use that in these conversions?
> 
> Or, more generally, maybe igt_crtc_name() should be the vendor neutral
> DRM KMS name, and, say, igt_crtc_vendor_name() should return something
> that's specific to the vendor. For Intel, it would be pipe, since that's
> mostly Intel specific thing. For others, it might be something else.
> 
> Or am I overcomplicating, and we should just cross that bridge when we
> come to it?

Shrug. I suppose for now igt_crtc_name() is always the pipe name,
so if at some point want to start using some other naming scheme
we could start that off with a global
s/igt_crtc_name()/igt_crtc_pipe_name()/ or whatever. So doesn't
really seem to matter what we call it for now. But I can rename
it now as well, if you think it's a good idea.

-- 
Ville Syrjälä
Intel

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

* Re: [PATCH i-g-t 03/15] tests/kms_plane_scaling: Use for_each_crtc*()
  2026-01-30 15:41     ` Ville Syrjälä
@ 2026-02-02 11:04       ` Jani Nikula
  0 siblings, 0 replies; 42+ messages in thread
From: Jani Nikula @ 2026-02-02 11:04 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: igt-dev

On Fri, 30 Jan 2026, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> On Fri, Jan 30, 2026 at 02:03:44PM +0200, Jani Nikula wrote:
>> On Fri, 30 Jan 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
>> > -				for_each_pipe(&data.display, pipe) {
>> > -					igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe)) {
>> > -						for_each_valid_output_on_pipe(&data.display, pipe, output) {
>> > +				for_each_crtc(&data.display, crtc) {
>> > +					igt_dynamic_f("pipe-%s", igt_crtc_name(crtc)) {
>> 
>> First, a higher level meta comment here. I'm having mild second thoughts
>> about igt_crtc_name() returning kmstest_pipe_name().
>> 
>> What if, in the future, we want to use CRTC name? And make that
>> different from the pipe name? If we percolate igt_crtc_name() all over
>> the place, the switch is going to be difficult. (Mostly because it's
>> being used in test names.)
>> 
>> Should we have igt_crtc_name() return something based on the CRTC index
>> instead? And have, say, igt_crtc_pipe_name() return kmstest_pipe_name(),
>> and use that in these conversions?
>> 
>> Or, more generally, maybe igt_crtc_name() should be the vendor neutral
>> DRM KMS name, and, say, igt_crtc_vendor_name() should return something
>> that's specific to the vendor. For Intel, it would be pipe, since that's
>> mostly Intel specific thing. For others, it might be something else.
>> 
>> Or am I overcomplicating, and we should just cross that bridge when we
>> come to it?
>
> Shrug. I suppose for now igt_crtc_name() is always the pipe name,
> so if at some point want to start using some other naming scheme
> we could start that off with a global
> s/igt_crtc_name()/igt_crtc_pipe_name()/ or whatever. So doesn't
> really seem to matter what we call it for now. But I can rename
> it now as well, if you think it's a good idea.

Well, *shrug*. I don't know, it's a quick cocci patch to rename
afterwards as well if/when we go down that path.

BR,
Jani.


-- 
Jani Nikula, Intel

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

* Re: [PATCH i-g-t 01/15] lib/kms: Introduce for_each_crtc*()
  2026-01-30 15:36     ` Ville Syrjälä
@ 2026-02-02 11:10       ` Jani Nikula
  2026-02-02 15:31         ` Ville Syrjälä
  0 siblings, 1 reply; 42+ messages in thread
From: Jani Nikula @ 2026-02-02 11:10 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: igt-dev

On Fri, 30 Jan 2026, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> On Fri, Jan 30, 2026 at 03:38:03PM +0200, Jani Nikula wrote:
>> On Fri, 30 Jan 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
>> > +/**
>> > + * for_each_crtc:
>> > + * @display: a pointer to an #igt_display_t structure
>> > + * @crtc: The CRTC
>> > + *
>> > + * This for loop iterates over all CRTCs.
>> > + *
>> > + * Note that this cannot be used to enumerate per-CRTC subtest names since it
>> > + * depends upon runtime probing of the actual kms driver that is being tested.
>> > + * Use #for_each_pipe_static instead.
>> > + */
>> > +#define for_each_crtc(display, crtc) \
>> > +	for ((crtc) = &(display)->crtcs[0]; \
>> > +	     (crtc) < &(display)->crtcs[(display)->n_crtcs]; \
>> > +	     (crtc)++) \
>> > +		for_each_if ((crtc)->valid)
>> 
>> I feel like for_each_crtc() should iterate the CRTCs in CRTC order, not
>> pipe order. What's the plan? Are we eventually going to have ->crtcs[]
>> in CRTC order?
>
> I don't even know what it means to have them in pipe order. It should be
> one and the same right now because the kernel anyway has them in the
> same order. I guess it just means we could theoeretically have holes
> in the array with crtc->valid==false for fused off pipes?
>
> But yeah, if/when we start to reorder the pipes, I think we should keep
> this stuff in CRTC order, and get rid of the holes.

In igt_display_require(), the loop is:

	for (i = 0; i < resources->count_crtcs; i++) {
		igt_crtc_t *crtc;
		int pipe_enum = is_intel_dev ? __intel_get_pipe_from_crtc_index(drm_fd, i) : i;

		crtc = igt_crtc_for_pipe(display, pipe_enum);
		crtc->pipe = pipe_enum;

		crtc->valid = true;
		crtc->crtc_id = resources->crtcs[i];
		/* offset of a pipe in crtcs list */
		crtc->crtc_offset = i;
	}

And igt_crtc_for_pipe() returns &display->crtcs[pipe] i.e. the
display->crtcs is currently in pipe order, and it could have holes if
pipes have been fused off.

Feels like this is so convoluted all over the place that we'd be better
off resetting everything back to assuming pipe === crtc index, and
fixing stuff from ground up. :/


BR,
Jani.


-- 
Jani Nikula, Intel

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

* Re: [PATCH i-g-t 01/15] lib/kms: Introduce for_each_crtc*()
  2026-02-02 11:10       ` Jani Nikula
@ 2026-02-02 15:31         ` Ville Syrjälä
  0 siblings, 0 replies; 42+ messages in thread
From: Ville Syrjälä @ 2026-02-02 15:31 UTC (permalink / raw)
  To: Jani Nikula; +Cc: igt-dev

On Mon, Feb 02, 2026 at 01:10:35PM +0200, Jani Nikula wrote:
> On Fri, 30 Jan 2026, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> > On Fri, Jan 30, 2026 at 03:38:03PM +0200, Jani Nikula wrote:
> >> On Fri, 30 Jan 2026, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> >> > +/**
> >> > + * for_each_crtc:
> >> > + * @display: a pointer to an #igt_display_t structure
> >> > + * @crtc: The CRTC
> >> > + *
> >> > + * This for loop iterates over all CRTCs.
> >> > + *
> >> > + * Note that this cannot be used to enumerate per-CRTC subtest names since it
> >> > + * depends upon runtime probing of the actual kms driver that is being tested.
> >> > + * Use #for_each_pipe_static instead.
> >> > + */
> >> > +#define for_each_crtc(display, crtc) \
> >> > +	for ((crtc) = &(display)->crtcs[0]; \
> >> > +	     (crtc) < &(display)->crtcs[(display)->n_crtcs]; \
> >> > +	     (crtc)++) \
> >> > +		for_each_if ((crtc)->valid)
> >> 
> >> I feel like for_each_crtc() should iterate the CRTCs in CRTC order, not
> >> pipe order. What's the plan? Are we eventually going to have ->crtcs[]
> >> in CRTC order?
> >
> > I don't even know what it means to have them in pipe order. It should be
> > one and the same right now because the kernel anyway has them in the
> > same order. I guess it just means we could theoeretically have holes
> > in the array with crtc->valid==false for fused off pipes?
> >
> > But yeah, if/when we start to reorder the pipes, I think we should keep
> > this stuff in CRTC order, and get rid of the holes.
> 
> In igt_display_require(), the loop is:
> 
> 	for (i = 0; i < resources->count_crtcs; i++) {
> 		igt_crtc_t *crtc;
> 		int pipe_enum = is_intel_dev ? __intel_get_pipe_from_crtc_index(drm_fd, i) : i;
> 
> 		crtc = igt_crtc_for_pipe(display, pipe_enum);
> 		crtc->pipe = pipe_enum;
> 
> 		crtc->valid = true;
> 		crtc->crtc_id = resources->crtcs[i];
> 		/* offset of a pipe in crtcs list */
> 		crtc->crtc_offset = i;
> 	}
> 
> And igt_crtc_for_pipe() returns &display->crtcs[pipe] i.e. the
> display->crtcs is currently in pipe order, and it could have holes if
> pipes have been fused off.
> 
> Feels like this is so convoluted all over the place that we'd be better
> off resetting everything back to assuming pipe === crtc index, and
> fixing stuff from ground up. :/

Yeah, pretty much.

I guess once the bigger cocci stuff is done we should do something
like:
- leave most crtc->pipe vs. PIPE_<whatever> checks alone as those
  are probably looking for a specific hardware pipe
- most other crtc->pipe usages should just be converted to
  crtc_index instead

That could perhaps be done with cocci as well.

And then we can start cleaning igt_kms itself:
- make display->crtcs[] keep the kernel crtc order and get rid of
  the holes, and have igt_crtc_for_pipe() just search through the
  array for the right crtc
- change all the pending_pipe/valid_crtc_idx_mask/etc. stuff to use
  igt_crtc_t or crtc_index
- etc.

-- 
Ville Syrjälä
Intel

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

* [PATCH i-g-t v2 12/15] lib/kms: Use for_each_crtc_with_valid_output(), part 2
  2026-01-30 14:26   ` Jani Nikula
@ 2026-02-02 15:38     ` Ville Syrjala
  0 siblings, 0 replies; 42+ messages in thread
From: Ville Syrjala @ 2026-02-02 15:38 UTC (permalink / raw)
  To: igt-dev

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Convert some uses of for_each_pipe_with_valid_output()
to for_each_crtc_with_valid_output(). Take care of the
cases where we (presumably) still have to keep some
kind of 'data->pipe' thingy still up to date.

Eventually we should probably replace 'data->pipe' with
'data->crtc' but I didn't want to go that far here.

Done with cocci:
 #include "scripts/iterators.cocci"

@change@
iterator name for_each_pipe_with_valid_output;
iterator name for_each_crtc_with_valid_output;
typedef igt_crtc_t;
identifier PIPE;
expression DISPLAY, OUTPUT, X;
@@
- for_each_pipe_with_valid_output(DISPLAY, X->PIPE, OUTPUT)
+ for_each_crtc_with_valid_output(DISPLAY, crtc, OUTPUT)
{
+ X->PIPE = crtc->pipe;
<...
(
- igt_crtc_for_pipe(..., X->PIPE)
+ crtc
|
- kmstest_pipe_name(X->PIPE)
+ igt_crtc_name(crtc)
|
- X->PIPE
+ crtc->pipe
)
...>
}

@depends on change@
identifier FUNC;
@@
FUNC(...)
{
+ igt_crtc_t *crtc;
<+...
for_each_crtc_with_valid_output(...) { ... }
...+>
}

@@
identifier CRTC;
@@
igt_crtc_t *CRTC;
...
- igt_crtc_t *CRTC;

v2: Deal with the new use in tools/intel_hdcp

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tests/intel/kms_big_fb.c       |  6 ++++--
 tests/intel/kms_ccs.c          | 19 +++++++++++------
 tests/intel/kms_fb_coherency.c |  6 ++++--
 tests/intel/kms_pwrite_crc.c   |  6 ++++--
 tests/kms_async_flips.c        | 23 +++++++++++++--------
 tests/kms_vblank.c             | 37 +++++++++++++++++++++++-----------
 tools/intel_hdcp.c             |  6 ++++--
 7 files changed, 69 insertions(+), 34 deletions(-)

diff --git a/tests/intel/kms_big_fb.c b/tests/intel/kms_big_fb.c
index 415508213e55..3946c7c00dfd 100644
--- a/tests/intel/kms_big_fb.c
+++ b/tests/intel/kms_big_fb.c
@@ -685,6 +685,7 @@ max_hw_stride_async_flip_test(data_t *data)
 
 static void test_scanout(data_t *data)
 {
+	igt_crtc_t *crtc;
 	igt_output_t *output;
 
 	igt_require(data->format == DRM_FORMAT_C8 ||
@@ -708,11 +709,12 @@ static void test_scanout(data_t *data)
 	max_fb_size(data, &data->big_fb_width, &data->big_fb_height,
 		    data->format, data->modifier);
 
-	for_each_pipe_with_valid_output(&data->display, data->pipe, data->output) {
+	for_each_crtc_with_valid_output(&data->display, crtc, data->output) {
+		data->pipe = crtc->pipe;
 		igt_display_reset(&data->display);
 
 		igt_output_set_crtc(data->output,
-				    igt_crtc_for_pipe(data->output->display, data->pipe));
+				    crtc);
 		if (!intel_pipe_output_combo_valid(&data->display))
 			continue;
 
diff --git a/tests/intel/kms_ccs.c b/tests/intel/kms_ccs.c
index ea23b6581b06..85d1e16cafe3 100644
--- a/tests/intel/kms_ccs.c
+++ b/tests/intel/kms_ccs.c
@@ -1125,6 +1125,7 @@ static bool valid_modifier_test(u64 modifier, const enum test_flags flags)
 
 static void test_output(data_t *data, const int testnum)
 {
+	igt_crtc_t *crtc;
 	uint16_t dev_id;
 
 	igt_fixture()
@@ -1150,15 +1151,18 @@ static void test_output(data_t *data, const int testnum)
 					      "Older than Xe2 platform needed.\n");
 			}
 
-			for_each_pipe_with_valid_output(&data->display, data->pipe, data->output) {
+			for_each_crtc_with_valid_output(&data->display, crtc,
+							data->output) {
+				data->pipe = crtc->pipe;
 				igt_display_reset(&data->display);
 
 				igt_output_set_crtc(data->output,
-						    igt_crtc_for_pipe(data->output->display, data->pipe));
+						    crtc);
 				if (!intel_pipe_output_combo_valid(&data->display))
 					continue;
 
-				igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(data->pipe),
+				igt_dynamic_f("pipe-%s-%s",
+							    igt_crtc_name(crtc),
 							    data->output->name) {
 					int valid_tests = 0;
 
@@ -1166,9 +1170,12 @@ static void test_output(data_t *data, const int testnum)
 						igt_info("Testing with seed %d\n", data->seed);
 
 					if (data->flags & TEST_ALL_PLANES) {
-						igt_display_require_output_on_pipe(&data->display, data->pipe);
+						igt_display_require_output_on_pipe(&data->display,
+										   crtc->pipe);
 
-						for_each_plane_on_pipe(&data->display, data->pipe, data->plane) {
+						for_each_plane_on_pipe(&data->display,
+								       crtc->pipe,
+								       data->plane) {
 							if (skip_plane(data, data->plane))
 								continue;
 
@@ -1186,7 +1193,7 @@ static void test_output(data_t *data, const int testnum)
 					igt_require_f(valid_tests > 0,
 						      "no valid tests for %s on pipe %s\n",
 						      ccs_modifiers[i].str,
-						      kmstest_pipe_name(data->pipe));
+						      igt_crtc_name(crtc));
 				}
 			}
 		}
diff --git a/tests/intel/kms_fb_coherency.c b/tests/intel/kms_fb_coherency.c
index e6d043c114d5..2f917e97b792 100644
--- a/tests/intel/kms_fb_coherency.c
+++ b/tests/intel/kms_fb_coherency.c
@@ -222,13 +222,15 @@ static void test_legacy_mmap_wc(data_t *data)
 
 static void select_valid_pipe_output_combo(data_t *data)
 {
+	igt_crtc_t *crtc;
 	igt_display_t *display = &data->display;
 
-	for_each_pipe_with_valid_output(display, data->pipe, data->output) {
+	for_each_crtc_with_valid_output(display, crtc, data->output) {
+		data->pipe = crtc->pipe;
 		igt_display_reset(display);
 
 		igt_output_set_crtc(data->output,
-				    igt_crtc_for_pipe(data->output->display, data->pipe));
+				    crtc);
 		if (intel_pipe_output_combo_valid(display))
 			return;
 	}
diff --git a/tests/intel/kms_pwrite_crc.c b/tests/intel/kms_pwrite_crc.c
index 64c167ad3f44..4a214d34e53b 100644
--- a/tests/intel/kms_pwrite_crc.c
+++ b/tests/intel/kms_pwrite_crc.c
@@ -169,13 +169,15 @@ static void cleanup_crtc(data_t *data)
 
 static void run_test(data_t *data)
 {
+	igt_crtc_t *crtc;
 	igt_display_t *display = &data->display;
 
-	for_each_pipe_with_valid_output(display, data->pipe, data->output) {
+	for_each_crtc_with_valid_output(display, crtc, data->output) {
+		data->pipe = crtc->pipe;
 		igt_display_reset(display);
 
 		igt_output_set_crtc(data->output,
-				    igt_crtc_for_pipe(data->output->display, data->pipe));
+				    crtc);
 		if (!intel_pipe_output_combo_valid(display))
 			continue;
 
diff --git a/tests/kms_async_flips.c b/tests/kms_async_flips.c
index 993ad37530b0..8539d31efded 100644
--- a/tests/kms_async_flips.c
+++ b/tests/kms_async_flips.c
@@ -903,16 +903,18 @@ static void require_linear_modifier(data_t *data)
 
 static void run_test(data_t *data, void (*test)(data_t *))
 {
+	igt_crtc_t *crtc;
 	igt_display_t *display = &data->display;
 
 	if (data->atomic_path)
 		require_atomic_async_cap(data);
 
-	for_each_pipe_with_valid_output(display, data->pipe, data->output) {
+	for_each_crtc_with_valid_output(display, crtc, data->output) {
+		data->pipe = crtc->pipe;
 		igt_display_reset(display);
 
 		igt_output_set_crtc(data->output,
-				    igt_crtc_for_pipe(data->output->display, data->pipe));
+				    crtc);
 		if (!intel_pipe_output_combo_valid(display))
 			continue;
 
@@ -923,7 +925,8 @@ static void run_test(data_t *data, void (*test)(data_t *))
 		else
 			data->modifier = default_modifier(data);
 
-		igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(data->pipe), data->output->name) {
+		igt_dynamic_f("pipe-%s-%s", igt_crtc_name(crtc),
+			      data->output->name) {
 			/*
 			 * FIXME: joiner+async flip is busted currently in KMD.
 			 * Remove this check once the issues are fixed in KMD.
@@ -969,11 +972,13 @@ static bool skip_async_format_mod(data_t *data,
 
 static void run_test_with_async_format_modifiers(data_t *data, void (*test)(data_t *))
 {
+	igt_crtc_t *crtc;
 	struct igt_vec tested_formats;
 
 	igt_vec_init(&tested_formats, sizeof(struct format_mod));
 
-	for_each_pipe_with_valid_output(&data->display, data->pipe, data->output) {
+	for_each_crtc_with_valid_output(&data->display, crtc, data->output) {
+		data->pipe = crtc->pipe;
 		test_init(data);
 
 		igt_assert_f(data->plane->async_format_mod_count > 0,
@@ -990,7 +995,7 @@ static void run_test_with_async_format_modifiers(data_t *data, void (*test)(data
 					   IGT_MODIFIER_FMT " on %s.%u\n",
 					   IGT_FORMAT_ARGS(f.format),
 					   IGT_MODIFIER_ARGS(f.modifier),
-					   kmstest_pipe_name(data->pipe),
+					   igt_crtc_name(crtc),
 					   data->plane->index);
 				continue;
 			}
@@ -999,7 +1004,7 @@ static void run_test_with_async_format_modifiers(data_t *data, void (*test)(data
 			data->plane_format = f.format;
 			data->async_mod_formats = true;
 
-			igt_dynamic_f("pipe-%s-%s-%s-%s", kmstest_pipe_name(data->pipe),
+			igt_dynamic_f("pipe-%s-%s-%s-%s", igt_crtc_name(crtc),
 				      data->output->name,
 				      igt_fb_modifier_name(data->modifier),
 				      igt_format_str(data->plane_format)) {
@@ -1022,10 +1027,12 @@ static void run_test_with_async_format_modifiers(data_t *data, void (*test)(data
 
 static void run_test_with_modifiers(data_t *data, void (*test)(data_t *))
 {
+	igt_crtc_t *crtc;
 	if (data->atomic_path)
 		require_atomic_async_cap(data);
 
-	for_each_pipe_with_valid_output(&data->display, data->pipe, data->output) {
+	for_each_crtc_with_valid_output(&data->display, crtc, data->output) {
+		data->pipe = crtc->pipe;
 		test_init(data);
 
 		igt_require_f(data->plane->async_format_mod_count > 0,
@@ -1042,7 +1049,7 @@ static void run_test_with_modifiers(data_t *data, void (*test)(data_t *))
 
 			data->modifier = modifier;
 
-			igt_dynamic_f("pipe-%s-%s-%s", kmstest_pipe_name(data->pipe),
+			igt_dynamic_f("pipe-%s-%s-%s", igt_crtc_name(crtc),
 				      data->output->name,
 				      igt_fb_modifier_name(modifier)) {
 				      /*
diff --git a/tests/kms_vblank.c b/tests/kms_vblank.c
index 1e4ccd83b554..ecbd85d031a6 100644
--- a/tests/kms_vblank.c
+++ b/tests/kms_vblank.c
@@ -476,6 +476,7 @@ static void vblank_ts_cont(data_t *data, int fd, int nchildren)
 
 static void run_subtests(data_t *data)
 {
+	igt_crtc_t *crtc;
 	const struct {
 		const char *name;
 		void (*func)(data_t *, int, int);
@@ -515,17 +516,23 @@ static void run_subtests(data_t *data)
 
 			igt_describe("Check if test run while hanging by introducing NOHANG flag.");
 			igt_subtest_with_dynamic_f("%s-%s", f->name, m->name) {
-				for_each_pipe_with_valid_output(&data->display, data->pipe, data->output) {
-					if (!pipe_output_combo_valid(&data->display, data->pipe, data->output))
+				for_each_crtc_with_valid_output(&data->display,
+								crtc,
+								data->output) {
+					data->pipe = crtc->pipe;
+					if (!pipe_output_combo_valid(&data->display, crtc->pipe, data->output))
 						continue;
 
-					if (!all_pipes && data->pipe != active_pipes[0] &&
-					    data->pipe != active_pipes[last_pipe]) {
-						igt_info("Skipping pipe %s\n", kmstest_pipe_name(data->pipe));
+					if (!all_pipes && crtc->pipe != active_pipes[0] &&
+					    crtc->pipe != active_pipes[last_pipe]) {
+						igt_info("Skipping pipe %s\n",
+							 igt_crtc_name(crtc));
 						continue;
 					}
 
-					igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(data->pipe), data->output->name) {
+					igt_dynamic_f("pipe-%s-%s",
+						      igt_crtc_name(crtc),
+						      data->output->name) {
 						data->flags = m->flags | NOHANG;
 						run_test(data, f->func);
 					}
@@ -541,17 +548,23 @@ static void run_subtests(data_t *data)
 				igt_hang_t hang;
 
 				hang = igt_allow_hang(data->display.drm_fd, 0, 0);
-				for_each_pipe_with_valid_output(&data->display, data->pipe, data->output) {
-					if (!pipe_output_combo_valid(&data->display, data->pipe, data->output))
+				for_each_crtc_with_valid_output(&data->display,
+								crtc,
+								data->output) {
+					data->pipe = crtc->pipe;
+					if (!pipe_output_combo_valid(&data->display, crtc->pipe, data->output))
 						continue;
 
-					if (!all_pipes && data->pipe != active_pipes[0] &&
-					    data->pipe != active_pipes[last_pipe]) {
-						igt_info("Skipping pipe %s\n", kmstest_pipe_name(data->pipe));
+					if (!all_pipes && crtc->pipe != active_pipes[0] &&
+					    crtc->pipe != active_pipes[last_pipe]) {
+						igt_info("Skipping pipe %s\n",
+							 igt_crtc_name(crtc));
 						continue;
 					}
 
-					igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(data->pipe), data->output->name) {
+					igt_dynamic_f("pipe-%s-%s",
+						      igt_crtc_name(crtc),
+						      data->output->name) {
 						data->flags = m->flags;
 						run_test(data, f->func);
 					}
diff --git a/tools/intel_hdcp.c b/tools/intel_hdcp.c
index 86ef0115e5ed..cd5d2b6be108 100644
--- a/tools/intel_hdcp.c
+++ b/tools/intel_hdcp.c
@@ -615,6 +615,7 @@ static void enable_hdcp_type(data_t *data, enum hdcp_type type)
 
 static void test_init(data_t *data)
 {
+	igt_crtc_t *crtc;
 	drmModeModeInfo *mode;
 
 	data->fd = __drm_open_driver(DRIVER_ANY);
@@ -626,7 +627,8 @@ static void test_init(data_t *data)
 	igt_display_require_output(&data->display);
 	igt_display_reset(&data->display);
 
-	for_each_pipe_with_valid_output(&data->display, data->pipe, data->output) {
+	for_each_crtc_with_valid_output(&data->display, crtc, data->output) {
+		data->pipe = crtc->pipe;
 		if (!igt_output_has_prop(data->output, IGT_CONNECTOR_CONTENT_PROTECTION))
 			continue;
 
@@ -637,7 +639,7 @@ static void test_init(data_t *data)
 		igt_create_color_fb(data->fd, data->width, data->height, DRM_FORMAT_XRGB8888,
 				    DRM_FORMAT_MOD_LINEAR, 0.0, 0.0, 0.0, &data->fb);
 
-		igt_output_set_crtc(data->output, igt_crtc_for_pipe(&data->display, data->pipe));
+		igt_output_set_crtc(data->output, crtc);
 		igt_display_commit2(&data->display, COMMIT_ATOMIC);
 
 		break;
-- 
2.52.0


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

* ✓ i915.CI.BAT: success for lib/kms: Start introducing for_each_crtc*() (rev2)
  2026-01-30 10:52 [PATCH i-g-t 00/15] lib/kms: Start introducing for_each_crtc*() Ville Syrjala
                   ` (14 preceding siblings ...)
  2026-01-30 10:52 ` [PATCH i-g-t 15/15] lib/kms: Nuke for_each_pipe_with_*_output() Ville Syrjala
@ 2026-02-03  2:58 ` Patchwork
  2026-02-03  3:12 ` ✓ Xe.CI.BAT: " Patchwork
                   ` (2 subsequent siblings)
  18 siblings, 0 replies; 42+ messages in thread
From: Patchwork @ 2026-02-03  2:58 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: igt-dev

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

== Series Details ==

Series: lib/kms: Start introducing for_each_crtc*() (rev2)
URL   : https://patchwork.freedesktop.org/series/160908/
State : success

== Summary ==

CI Bug Log - changes from IGT_8729 -> IGTPW_14471
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (42 -> 41)
------------------------------

  Additional (1): bat-adls-6 
  Missing    (2): bat-dg2-13 fi-snb-2520m 

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_lmem_swapping@parallel-random-engines:
    - bat-adls-6:         NOTRUN -> [SKIP][1] ([i915#4613]) +3 other tests skip
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/bat-adls-6/igt@gem_lmem_swapping@parallel-random-engines.html

  * igt@gem_tiled_pread_basic:
    - bat-adls-6:         NOTRUN -> [SKIP][2] ([i915#3282])
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/bat-adls-6/igt@gem_tiled_pread_basic.html

  * igt@i915_selftest@live:
    - bat-mtlp-8:         [PASS][3] -> [DMESG-FAIL][4] ([i915#12061]) +1 other test dmesg-fail
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8729/bat-mtlp-8/igt@i915_selftest@live.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/bat-mtlp-8/igt@i915_selftest@live.html

  * igt@i915_selftest@live@workarounds:
    - bat-dg2-9:          [PASS][5] -> [DMESG-FAIL][6] ([i915#12061]) +1 other test dmesg-fail
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8729/bat-dg2-9/igt@i915_selftest@live@workarounds.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/bat-dg2-9/igt@i915_selftest@live@workarounds.html

  * igt@intel_hwmon@hwmon-read:
    - bat-adls-6:         NOTRUN -> [SKIP][7] ([i915#7707]) +1 other test skip
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/bat-adls-6/igt@intel_hwmon@hwmon-read.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
    - bat-adls-6:         NOTRUN -> [SKIP][8] ([i915#4103]) +1 other test skip
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/bat-adls-6/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html

  * igt@kms_dsc@dsc-basic:
    - bat-adls-6:         NOTRUN -> [SKIP][9] ([i915#3555] / [i915#3840])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/bat-adls-6/igt@kms_dsc@dsc-basic.html

  * igt@kms_force_connector_basic@force-load-detect:
    - bat-adls-6:         NOTRUN -> [SKIP][10]
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/bat-adls-6/igt@kms_force_connector_basic@force-load-detect.html

  * igt@kms_pm_backlight@basic-brightness:
    - bat-adls-6:         NOTRUN -> [SKIP][11] ([i915#5354])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/bat-adls-6/igt@kms_pm_backlight@basic-brightness.html

  * igt@kms_psr@psr-primary-mmap-gtt:
    - bat-adls-6:         NOTRUN -> [SKIP][12] ([i915#1072] / [i915#9732]) +3 other tests skip
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/bat-adls-6/igt@kms_psr@psr-primary-mmap-gtt.html

  * igt@kms_setmode@basic-clone-single-crtc:
    - bat-adls-6:         NOTRUN -> [SKIP][13] ([i915#3555])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/bat-adls-6/igt@kms_setmode@basic-clone-single-crtc.html

  * igt@prime_vgem@basic-fence-read:
    - bat-adls-6:         NOTRUN -> [SKIP][14] ([i915#3291]) +2 other tests skip
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/bat-adls-6/igt@prime_vgem@basic-fence-read.html

  
#### Possible fixes ####

  * igt@i915_selftest@live@workarounds:
    - bat-arlh-3:         [DMESG-FAIL][15] ([i915#12061]) -> [PASS][16] +1 other test pass
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8729/bat-arlh-3/igt@i915_selftest@live@workarounds.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/bat-arlh-3/igt@i915_selftest@live@workarounds.html
    - bat-arls-5:         [DMESG-FAIL][17] ([i915#12061]) -> [PASS][18] +1 other test pass
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_8729/bat-arls-5/igt@i915_selftest@live@workarounds.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/bat-arls-5/igt@i915_selftest@live@workarounds.html

  
  [i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
  [i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
  [i915#3282]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3282
  [i915#3291]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3291
  [i915#3555]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3555
  [i915#3840]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3840
  [i915#4103]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4103
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
  [i915#5354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5354
  [i915#7707]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7707
  [i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732


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

  * CI: CI-20190529 -> None
  * IGT: IGT_8729 -> IGTPW_14471
  * Linux: CI_DRM_17916 -> CI_DRM_17922

  CI-20190529: 20190529
  CI_DRM_17916: cd1fd615b2ba56ea3fb033262d4fbd0503055d3c @ git://anongit.freedesktop.org/gfx-ci/linux
  CI_DRM_17922: 4f6f70eee8ddc4a78a87283d8822aaecb26d3d42 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_14471: 2461f6b28569b0a53c16bee94441e9b97a6b39e6 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  IGT_8729: 8729

== Logs ==

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

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

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

* ✓ Xe.CI.BAT: success for lib/kms: Start introducing for_each_crtc*() (rev2)
  2026-01-30 10:52 [PATCH i-g-t 00/15] lib/kms: Start introducing for_each_crtc*() Ville Syrjala
                   ` (15 preceding siblings ...)
  2026-02-03  2:58 ` ✓ i915.CI.BAT: success for lib/kms: Start introducing for_each_crtc*() (rev2) Patchwork
@ 2026-02-03  3:12 ` Patchwork
  2026-02-03 13:48 ` ✗ i915.CI.Full: failure " Patchwork
  2026-02-03 14:33 ` ✗ Xe.CI.FULL: " Patchwork
  18 siblings, 0 replies; 42+ messages in thread
From: Patchwork @ 2026-02-03  3:12 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: igt-dev

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

== Series Details ==

Series: lib/kms: Start introducing for_each_crtc*() (rev2)
URL   : https://patchwork.freedesktop.org/series/160908/
State : success

== Summary ==

CI Bug Log - changes from XEIGT_8729_BAT -> XEIGTPW_14471_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (12 -> 11)
------------------------------

  Missing    (1): bat-bmg-3 

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

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

### IGT changes ###

#### Issues hit ####

  * igt@xe_waitfence@reltime:
    - bat-dg2-oem2:       [PASS][1] -> [FAIL][2] ([Intel XE#6520])
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/bat-dg2-oem2/igt@xe_waitfence@reltime.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/bat-dg2-oem2/igt@xe_waitfence@reltime.html

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


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

  * IGT: IGT_8729 -> IGTPW_14471
  * Linux: xe-4480-88c5cd5324a45f418e99c62974a746596bc81d93 -> xe-4487-4f6f70eee8ddc4a78a87283d8822aaecb26d3d42

  IGTPW_14471: 2461f6b28569b0a53c16bee94441e9b97a6b39e6 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  IGT_8729: 8729
  xe-4480-88c5cd5324a45f418e99c62974a746596bc81d93: 88c5cd5324a45f418e99c62974a746596bc81d93
  xe-4487-4f6f70eee8ddc4a78a87283d8822aaecb26d3d42: 4f6f70eee8ddc4a78a87283d8822aaecb26d3d42

== Logs ==

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

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

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

* ✗ i915.CI.Full: failure for lib/kms: Start introducing for_each_crtc*() (rev2)
  2026-01-30 10:52 [PATCH i-g-t 00/15] lib/kms: Start introducing for_each_crtc*() Ville Syrjala
                   ` (16 preceding siblings ...)
  2026-02-03  3:12 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-02-03 13:48 ` Patchwork
  2026-02-03 14:33 ` ✗ Xe.CI.FULL: " Patchwork
  18 siblings, 0 replies; 42+ messages in thread
From: Patchwork @ 2026-02-03 13:48 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: igt-dev

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

== Series Details ==

Series: lib/kms: Start introducing for_each_crtc*() (rev2)
URL   : https://patchwork.freedesktop.org/series/160908/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_17922_full -> IGTPW_14471_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with IGTPW_14471_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_14471_full, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
  to document this new failure mode, which will reduce false positives in CI.

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

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

  No changes in participating hosts

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@gem_mmap_gtt@hang-busy:
    - shard-snb:          [PASS][1] -> [INCOMPLETE][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-snb1/igt@gem_mmap_gtt@hang-busy.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-snb4/igt@gem_mmap_gtt@hang-busy.html

  * igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-hdmi-a-1:
    - shard-tglu:         [PASS][3] -> [FAIL][4] +1 other test fail
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-tglu-5/igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-hdmi-a-1.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-6/igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc:
    - shard-tglu:         [PASS][5] -> [ABORT][6] +1 other test abort
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-tglu-4/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-10/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@api_intel_bb@crc32:
    - shard-tglu:         NOTRUN -> [SKIP][7] ([i915#6230])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-10/igt@api_intel_bb@crc32.html

  * igt@device_reset@cold-reset-bound:
    - shard-rkl:          NOTRUN -> [SKIP][8] ([i915#11078])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-8/igt@device_reset@cold-reset-bound.html

  * igt@gem_basic@multigpu-create-close:
    - shard-dg2:          NOTRUN -> [SKIP][9] ([i915#7697])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-6/igt@gem_basic@multigpu-create-close.html

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

  * igt@gem_ccs@block-multicopy-inplace:
    - shard-rkl:          NOTRUN -> [SKIP][11] ([i915#14544] / [i915#3555] / [i915#9323])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@gem_ccs@block-multicopy-inplace.html
    - shard-dg1:          NOTRUN -> [SKIP][12] ([i915#3555] / [i915#9323])
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-14/igt@gem_ccs@block-multicopy-inplace.html
    - shard-mtlp:         NOTRUN -> [SKIP][13] ([i915#3555] / [i915#9323])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-2/igt@gem_ccs@block-multicopy-inplace.html

  * igt@gem_ccs@ctrl-surf-copy:
    - shard-tglu:         NOTRUN -> [SKIP][14] ([i915#3555] / [i915#9323]) +1 other test skip
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-3/igt@gem_ccs@ctrl-surf-copy.html

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

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

  * igt@gem_create@create-ext-cpu-access-big:
    - shard-tglu-1:       NOTRUN -> [SKIP][17] ([i915#6335])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@gem_create@create-ext-cpu-access-big.html

  * igt@gem_create@create-ext-cpu-access-sanity-check:
    - shard-rkl:          NOTRUN -> [SKIP][18] ([i915#6335])
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-8/igt@gem_create@create-ext-cpu-access-sanity-check.html

  * igt@gem_create@create-ext-set-pat:
    - shard-rkl:          NOTRUN -> [SKIP][19] ([i915#8562])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-8/igt@gem_create@create-ext-set-pat.html

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

  * igt@gem_ctx_sseu@invalid-args:
    - shard-dg2:          NOTRUN -> [SKIP][21] ([i915#280])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-6/igt@gem_ctx_sseu@invalid-args.html
    - shard-dg1:          NOTRUN -> [SKIP][22] ([i915#280])
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-14/igt@gem_ctx_sseu@invalid-args.html
    - shard-mtlp:         NOTRUN -> [SKIP][23] ([i915#280])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-3/igt@gem_ctx_sseu@invalid-args.html

  * igt@gem_ctx_sseu@mmap-args:
    - shard-rkl:          NOTRUN -> [SKIP][24] ([i915#280]) +1 other test skip
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-4/igt@gem_ctx_sseu@mmap-args.html
    - shard-tglu:         NOTRUN -> [SKIP][25] ([i915#280]) +2 other tests skip
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-8/igt@gem_ctx_sseu@mmap-args.html

  * igt@gem_eio@hibernate:
    - shard-dg2:          [PASS][26] -> [FAIL][27] ([i915#15576])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg2-4/igt@gem_eio@hibernate.html
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-3/igt@gem_eio@hibernate.html

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

  * igt@gem_exec_big@single:
    - shard-tglu:         [PASS][29] -> [ABORT][30] ([i915#11713])
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-tglu-10/igt@gem_exec_big@single.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-2/igt@gem_exec_big@single.html

  * igt@gem_exec_capture@capture-invisible@smem0:
    - shard-glk:          NOTRUN -> [SKIP][31] ([i915#6334]) +1 other test skip
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-glk6/igt@gem_exec_capture@capture-invisible@smem0.html
    - shard-rkl:          NOTRUN -> [SKIP][32] ([i915#6334]) +1 other test skip
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-7/igt@gem_exec_capture@capture-invisible@smem0.html
    - shard-tglu-1:       NOTRUN -> [SKIP][33] ([i915#6334]) +1 other test skip
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@gem_exec_capture@capture-invisible@smem0.html

  * igt@gem_exec_capture@capture@vecs0-lmem0:
    - shard-dg2:          NOTRUN -> [FAIL][34] ([i915#11965]) +4 other tests fail
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-1/igt@gem_exec_capture@capture@vecs0-lmem0.html

  * igt@gem_exec_fence@submit:
    - shard-dg2:          NOTRUN -> [SKIP][35] ([i915#4812])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-8/igt@gem_exec_fence@submit.html

  * igt@gem_exec_flush@basic-wb-prw-default:
    - shard-dg2:          NOTRUN -> [SKIP][36] ([i915#3539] / [i915#4852]) +1 other test skip
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-6/igt@gem_exec_flush@basic-wb-prw-default.html

  * igt@gem_exec_params@rsvd2-dirt:
    - shard-dg2:          NOTRUN -> [SKIP][37] ([i915#5107])
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-4/igt@gem_exec_params@rsvd2-dirt.html

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

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

  * igt@gem_exec_reloc@basic-write-read:
    - shard-rkl:          NOTRUN -> [SKIP][40] ([i915#14544] / [i915#3281])
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@gem_exec_reloc@basic-write-read.html
    - shard-dg1:          NOTRUN -> [SKIP][41] ([i915#3281]) +1 other test skip
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-17/igt@gem_exec_reloc@basic-write-read.html

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

  * igt@gem_exec_schedule@semaphore-power:
    - shard-mtlp:         NOTRUN -> [SKIP][43] ([i915#4537] / [i915#4812])
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-6/igt@gem_exec_schedule@semaphore-power.html

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

  * igt@gem_lmem_swapping@basic:
    - shard-mtlp:         NOTRUN -> [SKIP][45] ([i915#4613]) +1 other test skip
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-6/igt@gem_lmem_swapping@basic.html
    - shard-tglu-1:       NOTRUN -> [SKIP][46] ([i915#4613]) +1 other test skip
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@gem_lmem_swapping@basic.html

  * igt@gem_lmem_swapping@heavy-verify-multi-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][47] ([i915#4613]) +4 other tests skip
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-4/igt@gem_lmem_swapping@heavy-verify-multi-ccs.html
    - shard-dg1:          NOTRUN -> [SKIP][48] ([i915#12193])
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-16/igt@gem_lmem_swapping@heavy-verify-multi-ccs.html

  * igt@gem_lmem_swapping@heavy-verify-multi-ccs@lmem0:
    - shard-dg1:          NOTRUN -> [SKIP][49] ([i915#4565])
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-16/igt@gem_lmem_swapping@heavy-verify-multi-ccs@lmem0.html

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

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

  * igt@gem_mmap_gtt@flink-race:
    - shard-dg1:          NOTRUN -> [SKIP][52] ([i915#4077]) +2 other tests skip
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-18/igt@gem_mmap_gtt@flink-race.html
    - shard-mtlp:         NOTRUN -> [SKIP][53] ([i915#4077]) +4 other tests skip
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-5/igt@gem_mmap_gtt@flink-race.html

  * igt@gem_mmap_gtt@zero-extend:
    - shard-dg2:          NOTRUN -> [SKIP][54] ([i915#4077]) +8 other tests skip
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-5/igt@gem_mmap_gtt@zero-extend.html

  * igt@gem_mmap_wc@fault-concurrent:
    - shard-mtlp:         NOTRUN -> [SKIP][55] ([i915#4083])
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-2/igt@gem_mmap_wc@fault-concurrent.html

  * igt@gem_mmap_wc@write-gtt-read-wc:
    - shard-dg2:          NOTRUN -> [SKIP][56] ([i915#4083]) +4 other tests skip
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-3/igt@gem_mmap_wc@write-gtt-read-wc.html

  * igt@gem_partial_pwrite_pread@reads-display:
    - shard-mtlp:         NOTRUN -> [SKIP][57] ([i915#3282])
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-5/igt@gem_partial_pwrite_pread@reads-display.html

  * igt@gem_partial_pwrite_pread@reads-uncached:
    - shard-rkl:          NOTRUN -> [SKIP][58] ([i915#14544] / [i915#3282]) +1 other test skip
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@gem_partial_pwrite_pread@reads-uncached.html

  * igt@gem_partial_pwrite_pread@writes-after-reads-display:
    - shard-rkl:          NOTRUN -> [SKIP][59] ([i915#3282]) +4 other tests skip
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-8/igt@gem_partial_pwrite_pread@writes-after-reads-display.html

  * igt@gem_pread@exhaustion:
    - shard-dg2:          NOTRUN -> [SKIP][60] ([i915#3282])
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-7/igt@gem_pread@exhaustion.html

  * igt@gem_pxp@regular-baseline-src-copy-readible:
    - shard-dg2:          NOTRUN -> [SKIP][61] ([i915#4270]) +1 other test skip
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-11/igt@gem_pxp@regular-baseline-src-copy-readible.html

  * igt@gem_pxp@verify-pxp-execution-after-suspend-resume:
    - shard-dg1:          NOTRUN -> [SKIP][62] ([i915#4270])
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-14/igt@gem_pxp@verify-pxp-execution-after-suspend-resume.html

  * igt@gem_pxp@verify-pxp-stale-buf-execution:
    - shard-rkl:          [PASS][63] -> [SKIP][64] ([i915#4270])
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-3/igt@gem_pxp@verify-pxp-stale-buf-execution.html
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-7/igt@gem_pxp@verify-pxp-stale-buf-execution.html

  * igt@gem_render_copy@y-tiled-ccs-to-y-tiled:
    - shard-mtlp:         NOTRUN -> [SKIP][65] ([i915#8428])
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-2/igt@gem_render_copy@y-tiled-ccs-to-y-tiled.html

  * igt@gem_render_copy@yf-tiled-to-vebox-yf-tiled:
    - shard-dg2:          NOTRUN -> [SKIP][66] ([i915#5190] / [i915#8428]) +5 other tests skip
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-1/igt@gem_render_copy@yf-tiled-to-vebox-yf-tiled.html

  * igt@gem_set_tiling_vs_blt@untiled-to-tiled:
    - shard-dg2:          NOTRUN -> [SKIP][67] ([i915#4079]) +2 other tests skip
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-8/igt@gem_set_tiling_vs_blt@untiled-to-tiled.html
    - shard-rkl:          NOTRUN -> [SKIP][68] ([i915#8411]) +1 other test skip
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-3/igt@gem_set_tiling_vs_blt@untiled-to-tiled.html

  * igt@gem_tiled_pread_pwrite:
    - shard-dg1:          NOTRUN -> [SKIP][69] ([i915#4079]) +1 other test skip
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-18/igt@gem_tiled_pread_pwrite.html
    - shard-mtlp:         NOTRUN -> [SKIP][70] ([i915#4079]) +1 other test skip
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-5/igt@gem_tiled_pread_pwrite.html

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

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

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

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

  * igt@gem_userptr_blits@readonly-pwrite-unsync:
    - shard-dg2:          NOTRUN -> [SKIP][75] ([i915#3297])
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-6/igt@gem_userptr_blits@readonly-pwrite-unsync.html
    - shard-dg1:          NOTRUN -> [SKIP][76] ([i915#3297])
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-14/igt@gem_userptr_blits@readonly-pwrite-unsync.html
    - shard-mtlp:         NOTRUN -> [SKIP][77] ([i915#3297]) +1 other test skip
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-3/igt@gem_userptr_blits@readonly-pwrite-unsync.html

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

  * igt@gem_workarounds@suspend-resume:
    - shard-rkl:          [PASS][79] -> [INCOMPLETE][80] ([i915#13356])
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-8/igt@gem_workarounds@suspend-resume.html
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@gem_workarounds@suspend-resume.html

  * igt@gen7_exec_parse@chained-batch:
    - shard-rkl:          NOTRUN -> [SKIP][81] ([i915#14544])
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@gen7_exec_parse@chained-batch.html

  * igt@gen7_exec_parse@oacontrol-tracking:
    - shard-snb:          NOTRUN -> [SKIP][82] +77 other tests skip
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-snb4/igt@gen7_exec_parse@oacontrol-tracking.html

  * igt@gen9_exec_parse@basic-rejected:
    - shard-tglu:         NOTRUN -> [SKIP][83] ([i915#2527] / [i915#2856]) +3 other tests skip
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-10/igt@gen9_exec_parse@basic-rejected.html
    - shard-mtlp:         NOTRUN -> [SKIP][84] ([i915#2856])
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-5/igt@gen9_exec_parse@basic-rejected.html
    - shard-rkl:          NOTRUN -> [SKIP][85] ([i915#14544] / [i915#2527])
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@gen9_exec_parse@basic-rejected.html
    - shard-dg1:          NOTRUN -> [SKIP][86] ([i915#2527])
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-17/igt@gen9_exec_parse@basic-rejected.html

  * igt@gen9_exec_parse@batch-without-end:
    - shard-rkl:          NOTRUN -> [SKIP][87] ([i915#2527])
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-3/igt@gen9_exec_parse@batch-without-end.html

  * igt@gen9_exec_parse@bb-chained:
    - shard-dg2:          NOTRUN -> [SKIP][88] ([i915#2856]) +1 other test skip
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-5/igt@gen9_exec_parse@bb-chained.html

  * igt@gen9_exec_parse@bb-start-far:
    - shard-tglu-1:       NOTRUN -> [SKIP][89] ([i915#2527] / [i915#2856])
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@gen9_exec_parse@bb-start-far.html

  * igt@i915_drm_fdinfo@all-busy-check-all:
    - shard-dg2:          NOTRUN -> [SKIP][90] ([i915#14123])
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-1/igt@i915_drm_fdinfo@all-busy-check-all.html

  * igt@i915_drm_fdinfo@virtual-busy:
    - shard-dg2:          NOTRUN -> [SKIP][91] ([i915#14118]) +1 other test skip
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-6/igt@i915_drm_fdinfo@virtual-busy.html
    - shard-mtlp:         NOTRUN -> [SKIP][92] ([i915#14118])
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-2/igt@i915_drm_fdinfo@virtual-busy.html

  * igt@i915_pm_freq_api@freq-reset-multiple:
    - shard-rkl:          NOTRUN -> [SKIP][93] ([i915#14544] / [i915#8399])
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@i915_pm_freq_api@freq-reset-multiple.html

  * igt@i915_pm_freq_api@freq-suspend:
    - shard-rkl:          NOTRUN -> [SKIP][94] ([i915#8399])
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-2/igt@i915_pm_freq_api@freq-suspend.html

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

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

  * igt@i915_query@query-topology-coherent-slice-mask:
    - shard-mtlp:         NOTRUN -> [SKIP][97] ([i915#6188])
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-6/igt@i915_query@query-topology-coherent-slice-mask.html
    - shard-dg2:          NOTRUN -> [SKIP][98] ([i915#6188])
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-1/igt@i915_query@query-topology-coherent-slice-mask.html

  * igt@i915_selftest@live:
    - shard-mtlp:         [PASS][99] -> [DMESG-FAIL][100] ([i915#12061] / [i915#15560])
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-mtlp-8/igt@i915_selftest@live.html
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-8/igt@i915_selftest@live.html

  * igt@i915_selftest@live@workarounds:
    - shard-mtlp:         [PASS][101] -> [DMESG-FAIL][102] ([i915#12061])
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-mtlp-8/igt@i915_selftest@live@workarounds.html
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-8/igt@i915_selftest@live@workarounds.html

  * igt@i915_suspend@basic-s3-without-i915:
    - shard-rkl:          NOTRUN -> [ABORT][103] ([i915#15131])
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-1/igt@i915_suspend@basic-s3-without-i915.html

  * igt@i915_suspend@forcewake:
    - shard-glk:          NOTRUN -> [INCOMPLETE][104] ([i915#4817])
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-glk3/igt@i915_suspend@forcewake.html

  * igt@intel_hwmon@hwmon-read:
    - shard-rkl:          NOTRUN -> [SKIP][105] ([i915#7707])
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-4/igt@intel_hwmon@hwmon-read.html

  * igt@kms_addfb_basic@basic-y-tiled-legacy:
    - shard-dg2:          NOTRUN -> [SKIP][106] ([i915#4215] / [i915#5190])
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-5/igt@kms_addfb_basic@basic-y-tiled-legacy.html
    - shard-dg1:          NOTRUN -> [SKIP][107] ([i915#4215])
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-14/igt@kms_addfb_basic@basic-y-tiled-legacy.html
    - shard-mtlp:         NOTRUN -> [SKIP][108] ([i915#4212])
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-8/igt@kms_addfb_basic@basic-y-tiled-legacy.html

  * igt@kms_addfb_basic@clobberred-modifier:
    - shard-dg2:          NOTRUN -> [SKIP][109] ([i915#4212])
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-1/igt@kms_addfb_basic@clobberred-modifier.html

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

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

  * igt@kms_big_fb@4-tiled-64bpp-rotate-270:
    - shard-tglu-1:       NOTRUN -> [SKIP][112] ([i915#5286])
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@kms_big_fb@4-tiled-64bpp-rotate-270.html

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

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip:
    - shard-rkl:          NOTRUN -> [SKIP][115] ([i915#14544] / [i915#5286])
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip:
    - shard-mtlp:         [PASS][116] -> [FAIL][117] ([i915#5138])
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-mtlp-5/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-2/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip.html

  * igt@kms_big_fb@linear-16bpp-rotate-270:
    - shard-tglu:         NOTRUN -> [SKIP][118] +61 other tests skip
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-8/igt@kms_big_fb@linear-16bpp-rotate-270.html
    - shard-mtlp:         NOTRUN -> [SKIP][119] +10 other tests skip
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-4/igt@kms_big_fb@linear-16bpp-rotate-270.html
    - shard-dg1:          NOTRUN -> [SKIP][120] ([i915#3638])
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-17/igt@kms_big_fb@linear-16bpp-rotate-270.html

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

  * igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-0-hflip:
    - shard-tglu:         NOTRUN -> [SKIP][122] ([i915#3828]) +1 other test skip
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-8/igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-0-hflip.html

  * igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-180-hflip:
    - shard-rkl:          NOTRUN -> [SKIP][123] ([i915#3828])
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-3/igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-180-hflip.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip:
    - shard-dg2:          NOTRUN -> [SKIP][124] ([i915#4538] / [i915#5190]) +11 other tests skip
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-3/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html

  * igt@kms_big_fb@yf-tiled-16bpp-rotate-90:
    - shard-dg1:          NOTRUN -> [SKIP][125] ([i915#4538]) +1 other test skip
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-16/igt@kms_big_fb@yf-tiled-16bpp-rotate-90.html

  * igt@kms_ccs@bad-pixel-format-y-tiled-ccs@pipe-d-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][126] ([i915#10307] / [i915#10434] / [i915#6095]) +1 other test skip
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-4/igt@kms_ccs@bad-pixel-format-y-tiled-ccs@pipe-d-hdmi-a-1.html

  * igt@kms_ccs@bad-pixel-format-yf-tiled-ccs@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][127] ([i915#14544] / [i915#6095]) +3 other tests skip
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_ccs@bad-pixel-format-yf-tiled-ccs@pipe-a-hdmi-a-2.html

  * igt@kms_ccs@bad-pixel-format-yf-tiled-ccs@pipe-c-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][128] ([i915#14098] / [i915#14544] / [i915#6095]) +1 other test skip
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_ccs@bad-pixel-format-yf-tiled-ccs@pipe-c-hdmi-a-2.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs:
    - shard-mtlp:         NOTRUN -> [SKIP][129] ([i915#12313]) +1 other test skip
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-7/igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-dg2-rc-ccs-cc:
    - shard-mtlp:         NOTRUN -> [SKIP][130] ([i915#6095]) +19 other tests skip
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-6/igt@kms_ccs@bad-rotation-90-4-tiled-dg2-rc-ccs-cc.html

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

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

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-mc-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][133] ([i915#6095]) +46 other tests skip
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-1/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-mc-ccs.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-mc-ccs@pipe-c-hdmi-a-2:
    - shard-glk:          NOTRUN -> [SKIP][134] +522 other tests skip
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-glk6/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-mc-ccs@pipe-c-hdmi-a-2.html

  * igt@kms_ccs@crc-primary-rotation-180-yf-tiled-ccs@pipe-d-hdmi-a-3:
    - shard-dg1:          NOTRUN -> [SKIP][135] ([i915#6095]) +183 other tests skip
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-13/igt@kms_ccs@crc-primary-rotation-180-yf-tiled-ccs@pipe-d-hdmi-a-3.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs@pipe-c-hdmi-a-1:
    - shard-tglu:         NOTRUN -> [SKIP][136] ([i915#6095]) +59 other tests skip
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-10/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs@pipe-c-hdmi-a-1.html

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

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

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

  * igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [INCOMPLETE][140] ([i915#15582]) +1 other test incomplete
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs@pipe-a-hdmi-a-2.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][141] ([i915#12313] / [i915#14544])
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs:
    - shard-tglu-1:       NOTRUN -> [SKIP][142] ([i915#6095]) +19 other tests skip
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs.html

  * igt@kms_cdclk@mode-transition:
    - shard-rkl:          NOTRUN -> [SKIP][143] ([i915#3742])
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-4/igt@kms_cdclk@mode-transition.html

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

  * igt@kms_chamelium_edid@hdmi-edid-change-during-suspend:
    - shard-dg1:          NOTRUN -> [SKIP][145] ([i915#11151] / [i915#7828]) +1 other test skip
   [145]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-16/igt@kms_chamelium_edid@hdmi-edid-change-during-suspend.html

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

  * igt@kms_chamelium_frames@vga-frame-dump:
    - shard-mtlp:         NOTRUN -> [SKIP][147] ([i915#11151] / [i915#7828]) +1 other test skip
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-6/igt@kms_chamelium_frames@vga-frame-dump.html

  * igt@kms_chamelium_hpd@dp-hpd-storm-disable:
    - shard-tglu-1:       NOTRUN -> [SKIP][148] ([i915#11151] / [i915#7828]) +1 other test skip
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@kms_chamelium_hpd@dp-hpd-storm-disable.html

  * igt@kms_chamelium_hpd@vga-hpd-fast:
    - shard-rkl:          NOTRUN -> [SKIP][149] ([i915#11151] / [i915#7828]) +8 other tests skip
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-7/igt@kms_chamelium_hpd@vga-hpd-fast.html

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

  * igt@kms_color_pipeline@plane-lut1d-lut1d@pipe-c-edp-1:
    - shard-mtlp:         NOTRUN -> [FAIL][151] ([i915#15522]) +4 other tests fail
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-4/igt@kms_color_pipeline@plane-lut1d-lut1d@pipe-c-edp-1.html

  * igt@kms_content_protection@atomic-dpms-hdcp14:
    - shard-dg2:          NOTRUN -> [SKIP][152] ([i915#6944])
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-5/igt@kms_content_protection@atomic-dpms-hdcp14.html
    - shard-dg1:          NOTRUN -> [SKIP][153] ([i915#6944])
   [153]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-14/igt@kms_content_protection@atomic-dpms-hdcp14.html
    - shard-mtlp:         NOTRUN -> [SKIP][154] ([i915#6944])
   [154]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-8/igt@kms_content_protection@atomic-dpms-hdcp14.html

  * igt@kms_content_protection@atomic-dpms@pipe-a-dp-3:
    - shard-dg2:          NOTRUN -> [FAIL][155] ([i915#7173]) +2 other tests fail
   [155]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-11/igt@kms_content_protection@atomic-dpms@pipe-a-dp-3.html

  * igt@kms_content_protection@atomic-hdcp14:
    - shard-tglu:         NOTRUN -> [SKIP][156] ([i915#6944]) +1 other test skip
   [156]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-3/igt@kms_content_protection@atomic-hdcp14.html

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

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

  * igt@kms_content_protection@dp-mst-type-0-hdcp14:
    - shard-rkl:          NOTRUN -> [SKIP][159] ([i915#14544] / [i915#15330])
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_content_protection@dp-mst-type-0-hdcp14.html

  * igt@kms_content_protection@dp-mst-type-1-suspend-resume:
    - shard-dg2:          NOTRUN -> [SKIP][160] ([i915#15330])
   [160]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-5/igt@kms_content_protection@dp-mst-type-1-suspend-resume.html

  * igt@kms_content_protection@legacy-hdcp14:
    - shard-rkl:          NOTRUN -> [SKIP][161] ([i915#6944]) +1 other test skip
   [161]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-4/igt@kms_content_protection@legacy-hdcp14.html

  * igt@kms_content_protection@lic-type-0:
    - shard-tglu:         NOTRUN -> [SKIP][162] ([i915#6944] / [i915#9424]) +1 other test skip
   [162]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-8/igt@kms_content_protection@lic-type-0.html

  * igt@kms_content_protection@lic-type-1:
    - shard-mtlp:         NOTRUN -> [SKIP][163] ([i915#6944] / [i915#9424]) +1 other test skip
   [163]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-2/igt@kms_content_protection@lic-type-1.html
    - shard-dg2:          NOTRUN -> [SKIP][164] ([i915#6944] / [i915#9424])
   [164]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-8/igt@kms_content_protection@lic-type-1.html
    - shard-rkl:          NOTRUN -> [SKIP][165] ([i915#6944] / [i915#9424])
   [165]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-3/igt@kms_content_protection@lic-type-1.html
    - shard-dg1:          NOTRUN -> [SKIP][166] ([i915#6944] / [i915#9424])
   [166]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-16/igt@kms_content_protection@lic-type-1.html

  * igt@kms_content_protection@type1:
    - shard-rkl:          NOTRUN -> [SKIP][167] ([i915#6944] / [i915#7118] / [i915#9424]) +1 other test skip
   [167]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-7/igt@kms_content_protection@type1.html
    - shard-tglu-1:       NOTRUN -> [SKIP][168] ([i915#6944] / [i915#7116] / [i915#7118] / [i915#9424])
   [168]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@kms_content_protection@type1.html

  * igt@kms_content_protection@uevent:
    - shard-dg2:          NOTRUN -> [SKIP][169] ([i915#6944] / [i915#7118] / [i915#9424])
   [169]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-7/igt@kms_content_protection@uevent.html

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

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

  * igt@kms_cursor_crc@cursor-offscreen-max-size:
    - shard-mtlp:         NOTRUN -> [SKIP][172] ([i915#3555] / [i915#8814])
   [172]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-2/igt@kms_cursor_crc@cursor-offscreen-max-size.html

  * igt@kms_cursor_crc@cursor-onscreen-512x170:
    - shard-rkl:          NOTRUN -> [SKIP][173] ([i915#13049])
   [173]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-8/igt@kms_cursor_crc@cursor-onscreen-512x170.html

  * igt@kms_cursor_crc@cursor-random-128x42:
    - shard-rkl:          [PASS][174] -> [FAIL][175] ([i915#13566])
   [174]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-2/igt@kms_cursor_crc@cursor-random-128x42.html
   [175]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-1/igt@kms_cursor_crc@cursor-random-128x42.html

  * igt@kms_cursor_crc@cursor-random-128x42@pipe-a-hdmi-a-1:
    - shard-tglu:         [PASS][176] -> [FAIL][177] ([i915#13566]) +1 other test fail
   [176]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-tglu-4/igt@kms_cursor_crc@cursor-random-128x42@pipe-a-hdmi-a-1.html
   [177]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-2/igt@kms_cursor_crc@cursor-random-128x42@pipe-a-hdmi-a-1.html

  * igt@kms_cursor_crc@cursor-sliding-64x21@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [FAIL][178] ([i915#13566]) +2 other tests fail
   [178]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-7/igt@kms_cursor_crc@cursor-sliding-64x21@pipe-a-hdmi-a-2.html

  * igt@kms_cursor_crc@cursor-suspend@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [INCOMPLETE][179] ([i915#12358] / [i915#14152]) +1 other test incomplete
   [179]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_cursor_crc@cursor-suspend@pipe-a-hdmi-a-2.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
    - shard-tglu:         NOTRUN -> [SKIP][180] ([i915#4103]) +1 other test skip
   [180]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-8/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html

  * igt@kms_cursor_legacy@cursora-vs-flipb-legacy:
    - shard-rkl:          NOTRUN -> [SKIP][181] +24 other tests skip
   [181]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-1/igt@kms_cursor_legacy@cursora-vs-flipb-legacy.html

  * igt@kms_cursor_legacy@cursorb-vs-flipa-toggle:
    - shard-dg2:          NOTRUN -> [SKIP][182] ([i915#13046] / [i915#5354]) +3 other tests skip
   [182]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-7/igt@kms_cursor_legacy@cursorb-vs-flipa-toggle.html
    - shard-mtlp:         NOTRUN -> [SKIP][183] ([i915#9809])
   [183]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-3/igt@kms_cursor_legacy@cursorb-vs-flipa-toggle.html

  * igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions:
    - shard-snb:          [PASS][184] -> [SKIP][185]
   [184]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-snb4/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions.html
   [185]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-snb1/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions.html

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

  * igt@kms_dirtyfb@psr-dirtyfb-ioctl:
    - shard-dg2:          NOTRUN -> [SKIP][187] ([i915#9833])
   [187]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-3/igt@kms_dirtyfb@psr-dirtyfb-ioctl.html

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

  * igt@kms_dp_linktrain_fallback@dp-fallback:
    - shard-tglu-1:       NOTRUN -> [SKIP][189] ([i915#13707])
   [189]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@kms_dp_linktrain_fallback@dp-fallback.html

  * igt@kms_dp_linktrain_fallback@dsc-fallback:
    - shard-dg2:          NOTRUN -> [SKIP][190] ([i915#13707])
   [190]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-4/igt@kms_dp_linktrain_fallback@dsc-fallback.html

  * igt@kms_draw_crc@draw-method-mmap-gtt:
    - shard-dg1:          NOTRUN -> [SKIP][191] ([i915#8812])
   [191]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-13/igt@kms_draw_crc@draw-method-mmap-gtt.html
    - shard-mtlp:         NOTRUN -> [SKIP][192] ([i915#3555] / [i915#8812])
   [192]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-8/igt@kms_draw_crc@draw-method-mmap-gtt.html
    - shard-dg2:          NOTRUN -> [SKIP][193] ([i915#8812])
   [193]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-11/igt@kms_draw_crc@draw-method-mmap-gtt.html

  * igt@kms_dsc@dsc-fractional-bpp:
    - shard-dg2:          NOTRUN -> [SKIP][194] ([i915#3840] / [i915#9688])
   [194]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-5/igt@kms_dsc@dsc-fractional-bpp.html

  * igt@kms_dsc@dsc-with-bpc-formats:
    - shard-dg2:          NOTRUN -> [SKIP][195] ([i915#3555] / [i915#3840])
   [195]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-7/igt@kms_dsc@dsc-with-bpc-formats.html
    - shard-rkl:          NOTRUN -> [SKIP][196] ([i915#3555] / [i915#3840]) +1 other test skip
   [196]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-4/igt@kms_dsc@dsc-with-bpc-formats.html

  * igt@kms_dsc@dsc-with-formats:
    - shard-tglu-1:       NOTRUN -> [SKIP][197] ([i915#3555] / [i915#3840])
   [197]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@kms_dsc@dsc-with-formats.html

  * igt@kms_fbcon_fbt@psr-suspend:
    - shard-tglu:         NOTRUN -> [SKIP][198] ([i915#3469]) +1 other test skip
   [198]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-5/igt@kms_fbcon_fbt@psr-suspend.html

  * igt@kms_feature_discovery@chamelium:
    - shard-tglu-1:       NOTRUN -> [SKIP][199] ([i915#2065] / [i915#4854])
   [199]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@kms_feature_discovery@chamelium.html

  * igt@kms_feature_discovery@dp-mst:
    - shard-rkl:          NOTRUN -> [SKIP][200] ([i915#9337])
   [200]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-5/igt@kms_feature_discovery@dp-mst.html
    - shard-tglu:         NOTRUN -> [SKIP][201] ([i915#9337])
   [201]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-6/igt@kms_feature_discovery@dp-mst.html

  * igt@kms_feature_discovery@psr1:
    - shard-tglu:         NOTRUN -> [SKIP][202] ([i915#658])
   [202]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-7/igt@kms_feature_discovery@psr1.html

  * igt@kms_feature_discovery@psr2:
    - shard-rkl:          NOTRUN -> [SKIP][203] ([i915#14544] / [i915#658])
   [203]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_feature_discovery@psr2.html

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

  * igt@kms_flip@2x-flip-vs-modeset:
    - shard-dg2:          NOTRUN -> [SKIP][205] ([i915#9934]) +4 other tests skip
   [205]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-4/igt@kms_flip@2x-flip-vs-modeset.html

  * igt@kms_flip@2x-flip-vs-suspend-interruptible:
    - shard-mtlp:         NOTRUN -> [SKIP][206] ([i915#3637] / [i915#9934]) +1 other test skip
   [206]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-3/igt@kms_flip@2x-flip-vs-suspend-interruptible.html
    - shard-snb:          [PASS][207] -> [TIMEOUT][208] ([i915#14033] / [i915#14350])
   [207]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-snb7/igt@kms_flip@2x-flip-vs-suspend-interruptible.html
   [208]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-snb6/igt@kms_flip@2x-flip-vs-suspend-interruptible.html

  * igt@kms_flip@2x-flip-vs-suspend-interruptible@ab-vga1-hdmi-a1:
    - shard-snb:          [PASS][209] -> [TIMEOUT][210] ([i915#14033])
   [209]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-snb7/igt@kms_flip@2x-flip-vs-suspend-interruptible@ab-vga1-hdmi-a1.html
   [210]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-snb6/igt@kms_flip@2x-flip-vs-suspend-interruptible@ab-vga1-hdmi-a1.html

  * igt@kms_flip@2x-nonexisting-fb:
    - shard-tglu:         NOTRUN -> [SKIP][211] ([i915#3637] / [i915#9934]) +6 other tests skip
   [211]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-6/igt@kms_flip@2x-nonexisting-fb.html

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

  * igt@kms_flip@2x-plain-flip-fb-recreate-interruptible:
    - shard-dg1:          NOTRUN -> [SKIP][213] ([i915#9934]) +1 other test skip
   [213]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-14/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible.html

  * igt@kms_flip@flip-vs-fences:
    - shard-dg2:          NOTRUN -> [SKIP][214] ([i915#8381])
   [214]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-3/igt@kms_flip@flip-vs-fences.html

  * igt@kms_flip@flip-vs-suspend:
    - shard-rkl:          [PASS][215] -> [ABORT][216] ([i915#15132])
   [215]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-5/igt@kms_flip@flip-vs-suspend.html
   [216]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-1/igt@kms_flip@flip-vs-suspend.html

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

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

  * igt@kms_flip@flip-vs-suspend@c-hdmi-a2:
    - shard-rkl:          NOTRUN -> [ABORT][219] ([i915#15132])
   [219]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-1/igt@kms_flip@flip-vs-suspend@c-hdmi-a2.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling:
    - shard-tglu:         NOTRUN -> [SKIP][220] ([i915#15643]) +5 other tests skip
   [220]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-8/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling:
    - shard-dg2:          NOTRUN -> [SKIP][221] ([i915#15643])
   [221]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-11/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-upscaling.html

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

  * igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling:
    - shard-dg1:          NOTRUN -> [SKIP][223] ([i915#15643])
   [223]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-14/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling.html
    - shard-mtlp:         NOTRUN -> [SKIP][224] ([i915#15643])
   [224]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-6/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling.html

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

  * igt@kms_flip_scaled_crc@flip-64bpp-xtile-to-16bpp-xtile-downscaling:
    - shard-dg1:          [PASS][226] -> [DMESG-WARN][227] ([i915#4423]) +1 other test dmesg-warn
   [226]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg1-17/igt@kms_flip_scaled_crc@flip-64bpp-xtile-to-16bpp-xtile-downscaling.html
   [227]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-12/igt@kms_flip_scaled_crc@flip-64bpp-xtile-to-16bpp-xtile-downscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling:
    - shard-tglu-1:       NOTRUN -> [SKIP][228] ([i915#15643]) +1 other test skip
   [228]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-p016-linear-to-p016-linear-reflect-x:
    - shard-tglu:         NOTRUN -> [SKIP][229] ([i915#15645]) +1 other test skip
   [229]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-6/igt@kms_flip_scaled_crc@flip-p016-linear-to-p016-linear-reflect-x.html

  * igt@kms_frontbuffer_tracking@fbc-1p-offscreen-pri-shrfb-draw-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][230] ([i915#15104]) +1 other test skip
   [230]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-4/igt@kms_frontbuffer_tracking@fbc-1p-offscreen-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][231] ([i915#8708]) +13 other tests skip
   [231]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-4/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-blt:
    - shard-rkl:          NOTRUN -> [SKIP][232] ([i915#14544] / [i915#1825]) +1 other test skip
   [232]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-fullscreen:
    - shard-dg1:          NOTRUN -> [SKIP][233] +5 other tests skip
   [233]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-14/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-fullscreen.html

  * igt@kms_frontbuffer_tracking@fbc-abgr161616f-draw-pwrite:
    - shard-tglu-1:       NOTRUN -> [SKIP][234] ([i915#15574])
   [234]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@kms_frontbuffer_tracking@fbc-abgr161616f-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbc-suspend:
    - shard-glk:          NOTRUN -> [INCOMPLETE][235] ([i915#10056])
   [235]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-glk9/igt@kms_frontbuffer_tracking@fbc-suspend.html

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

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-pri-indfb-multidraw:
    - shard-dg1:          NOTRUN -> [SKIP][237] ([i915#15102] / [i915#3458]) +4 other tests skip
   [237]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-13/igt@kms_frontbuffer_tracking@fbcpsr-1p-pri-indfb-multidraw.html

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

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-rte:
    - shard-dg2:          NOTRUN -> [SKIP][239] ([i915#5354]) +17 other tests skip
   [239]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-2p-rte.html

  * igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-render:
    - shard-rkl:          NOTRUN -> [SKIP][240] ([i915#14544] / [i915#15102] / [i915#3023]) +2 other tests skip
   [240]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-rgb565-draw-render.html

  * igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-indfb-draw-blt:
    - shard-dg2:          NOTRUN -> [SKIP][241] ([i915#15102]) +2 other tests skip
   [241]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-7/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-indfb-draw-blt.html
    - shard-rkl:          NOTRUN -> [SKIP][242] ([i915#15102]) +4 other tests skip
   [242]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-8/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-blt:
    - shard-dg1:          NOTRUN -> [SKIP][243] ([i915#15102])
   [243]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-12/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@psr-1p-pri-indfb-multidraw:
    - shard-dg2:          NOTRUN -> [SKIP][244] ([i915#15102] / [i915#3458]) +12 other tests skip
   [244]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-7/igt@kms_frontbuffer_tracking@psr-1p-pri-indfb-multidraw.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-indfb-plflip-blt:
    - shard-rkl:          NOTRUN -> [SKIP][245] ([i915#15102] / [i915#3023]) +20 other tests skip
   [245]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-5/igt@kms_frontbuffer_tracking@psr-1p-primscrn-indfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-move:
    - shard-tglu:         NOTRUN -> [SKIP][246] ([i915#15102]) +15 other tests skip
   [246]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-3/igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-move.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-draw-mmap-wc:
    - shard-rkl:          NOTRUN -> [SKIP][247] ([i915#1825]) +42 other tests skip
   [247]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-7/igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-draw-mmap-wc.html
    - shard-tglu-1:       NOTRUN -> [SKIP][248] +35 other tests skip
   [248]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@kms_frontbuffer_tracking@psr-2p-primscrn-spr-indfb-draw-mmap-wc.html

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

  * igt@kms_frontbuffer_tracking@psr-abgr161616f-draw-blt:
    - shard-tglu:         NOTRUN -> [SKIP][250] ([i915#15574]) +2 other tests skip
   [250]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-4/igt@kms_frontbuffer_tracking@psr-abgr161616f-draw-blt.html

  * igt@kms_frontbuffer_tracking@psr-abgr161616f-draw-render:
    - shard-dg2:          NOTRUN -> [SKIP][251] ([i915#15574]) +1 other test skip
   [251]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-6/igt@kms_frontbuffer_tracking@psr-abgr161616f-draw-render.html
    - shard-rkl:          NOTRUN -> [SKIP][252] ([i915#15574]) +2 other tests skip
   [252]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-1/igt@kms_frontbuffer_tracking@psr-abgr161616f-draw-render.html
    - shard-dg1:          NOTRUN -> [SKIP][253] ([i915#15574])
   [253]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-18/igt@kms_frontbuffer_tracking@psr-abgr161616f-draw-render.html
    - shard-mtlp:         NOTRUN -> [SKIP][254] ([i915#15574])
   [254]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-2/igt@kms_frontbuffer_tracking@psr-abgr161616f-draw-render.html

  * igt@kms_frontbuffer_tracking@psr-indfb-scaledprimary:
    - shard-tglu-1:       NOTRUN -> [SKIP][255] ([i915#15102]) +7 other tests skip
   [255]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@kms_frontbuffer_tracking@psr-indfb-scaledprimary.html

  * igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-gtt:
    - shard-dg1:          NOTRUN -> [SKIP][256] ([i915#8708]) +6 other tests skip
   [256]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-16/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-gtt.html

  * igt@kms_hdr@bpc-switch-dpms:
    - shard-dg2:          NOTRUN -> [SKIP][257] ([i915#3555] / [i915#8228])
   [257]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-8/igt@kms_hdr@bpc-switch-dpms.html
    - shard-rkl:          [PASS][258] -> [SKIP][259] ([i915#3555] / [i915#8228])
   [258]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@kms_hdr@bpc-switch-dpms.html
   [259]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-3/igt@kms_hdr@bpc-switch-dpms.html

  * igt@kms_hdr@bpc-switch-suspend:
    - shard-rkl:          NOTRUN -> [SKIP][260] ([i915#3555] / [i915#8228])
   [260]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-3/igt@kms_hdr@bpc-switch-suspend.html

  * igt@kms_hdr@brightness-with-hdr:
    - shard-mtlp:         NOTRUN -> [SKIP][261] ([i915#12713])
   [261]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-6/igt@kms_hdr@brightness-with-hdr.html
    - shard-dg2:          NOTRUN -> [SKIP][262] ([i915#12713])
   [262]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-1/igt@kms_hdr@brightness-with-hdr.html
    - shard-rkl:          NOTRUN -> [SKIP][263] ([i915#13331] / [i915#14544])
   [263]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_hdr@brightness-with-hdr.html
    - shard-dg1:          NOTRUN -> [SKIP][264] ([i915#12713])
   [264]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-14/igt@kms_hdr@brightness-with-hdr.html
    - shard-tglu:         NOTRUN -> [SKIP][265] ([i915#12713])
   [265]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-6/igt@kms_hdr@brightness-with-hdr.html

  * igt@kms_hdr@invalid-hdr:
    - shard-tglu:         NOTRUN -> [SKIP][266] ([i915#3555] / [i915#8228])
   [266]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-10/igt@kms_hdr@invalid-hdr.html

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

  * igt@kms_joiner@basic-big-joiner:
    - shard-rkl:          NOTRUN -> [SKIP][268] ([i915#15460])
   [268]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-2/igt@kms_joiner@basic-big-joiner.html

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

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

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

  * igt@kms_joiner@invalid-modeset-force-big-joiner:
    - shard-rkl:          NOTRUN -> [SKIP][272] ([i915#15459])
   [272]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-4/igt@kms_joiner@invalid-modeset-force-big-joiner.html

  * igt@kms_joiner@invalid-modeset-ultra-joiner:
    - shard-dg2:          NOTRUN -> [SKIP][273] ([i915#15458])
   [273]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-4/igt@kms_joiner@invalid-modeset-ultra-joiner.html
    - shard-rkl:          NOTRUN -> [SKIP][274] ([i915#14544] / [i915#15458])
   [274]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_joiner@invalid-modeset-ultra-joiner.html

  * igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner:
    - shard-tglu:         NOTRUN -> [SKIP][275] ([i915#15638])
   [275]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-8/igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner.html

  * igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
    - shard-mtlp:         NOTRUN -> [SKIP][276] ([i915#4816])
   [276]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-6/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html
    - shard-dg2:          NOTRUN -> [SKIP][277] ([i915#4816])
   [277]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-3/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html
    - shard-rkl:          NOTRUN -> [SKIP][278] ([i915#1839] / [i915#4816])
   [278]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-7/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html
    - shard-tglu-1:       NOTRUN -> [SKIP][279] ([i915#1839])
   [279]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html
    - shard-dg1:          NOTRUN -> [SKIP][280] ([i915#1839])
   [280]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-13/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html

  * igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier-source-clamping@pipe-a-plane-2:
    - shard-glk10:        NOTRUN -> [SKIP][281] +75 other tests skip
   [281]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-glk10/igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier-source-clamping@pipe-a-plane-2.html

  * igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier@pipe-b-plane-5:
    - shard-dg2:          NOTRUN -> [SKIP][282] ([i915#15608] / [i915#8825]) +1 other test skip
   [282]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-7/igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier@pipe-b-plane-5.html

  * igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier-source-clamping:
    - shard-dg2:          NOTRUN -> [SKIP][283] ([i915#15608] / [i915#15609] / [i915#8825]) +1 other test skip
   [283]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-11/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier-source-clamping.html
    - shard-rkl:          NOTRUN -> [SKIP][284] ([i915#15608] / [i915#15609] / [i915#8825]) +2 other tests skip
   [284]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-8/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier-source-clamping.html

  * igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier-source-clamping@pipe-a-plane-5:
    - shard-dg2:          NOTRUN -> [SKIP][285] ([i915#15609]) +3 other tests skip
   [285]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-11/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier-source-clamping@pipe-a-plane-5.html

  * igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier-source-clamping@pipe-b-plane-0:
    - shard-dg2:          NOTRUN -> [SKIP][286] ([i915#15608]) +12 other tests skip
   [286]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-11/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier-source-clamping@pipe-b-plane-0.html

  * igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-modifier-source-clamping@pipe-a-plane-5:
    - shard-rkl:          NOTRUN -> [SKIP][287] ([i915#15609]) +6 other tests skip
   [287]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-1/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-modifier-source-clamping@pipe-a-plane-5.html

  * igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-modifier-source-clamping@pipe-b-plane-0:
    - shard-rkl:          NOTRUN -> [SKIP][288] ([i915#15608]) +18 other tests skip
   [288]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-1/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-modifier-source-clamping@pipe-b-plane-0.html

  * igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-modifier-source-clamping@pipe-b-plane-5:
    - shard-rkl:          NOTRUN -> [SKIP][289] ([i915#15609] / [i915#8825]) +2 other tests skip
   [289]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-1/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-modifier-source-clamping@pipe-b-plane-5.html

  * igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-modifier@pipe-b-plane-7:
    - shard-tglu:         NOTRUN -> [SKIP][290] ([i915#15608] / [i915#8825]) +1 other test skip
   [290]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-8/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-modifier@pipe-b-plane-7.html

  * igt@kms_plane@pixel-format-4-tiled-lnl-ccs-modifier-source-clamping@pipe-a-plane-7:
    - shard-tglu:         NOTRUN -> [SKIP][291] ([i915#15609]) +4 other tests skip
   [291]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-6/igt@kms_plane@pixel-format-4-tiled-lnl-ccs-modifier-source-clamping@pipe-a-plane-7.html

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

  * igt@kms_plane@pixel-format-4-tiled-mtl-mc-ccs-modifier-source-clamping@pipe-b-plane-5:
    - shard-dg2:          NOTRUN -> [SKIP][293] ([i915#15609] / [i915#8825]) +1 other test skip
   [293]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-4/igt@kms_plane@pixel-format-4-tiled-mtl-mc-ccs-modifier-source-clamping@pipe-b-plane-5.html

  * igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-modifier@pipe-a-plane-7:
    - shard-tglu-1:       NOTRUN -> [SKIP][294] ([i915#15608]) +8 other tests skip
   [294]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-modifier@pipe-a-plane-7.html

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

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

  * igt@kms_plane@pixel-format-y-tiled-ccs-modifier-source-clamping:
    - shard-tglu:         NOTRUN -> [SKIP][297] ([i915#15608] / [i915#15609] / [i915#8825]) +2 other tests skip
   [297]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-8/igt@kms_plane@pixel-format-y-tiled-ccs-modifier-source-clamping.html

  * igt@kms_plane@pixel-format-y-tiled-ccs-modifier-source-clamping@pipe-a-plane-3:
    - shard-tglu:         NOTRUN -> [SKIP][298] ([i915#15608]) +24 other tests skip
   [298]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-8/igt@kms_plane@pixel-format-y-tiled-ccs-modifier-source-clamping@pipe-a-plane-3.html

  * igt@kms_plane@pixel-format-y-tiled-ccs-modifier-source-clamping@pipe-b-plane-7:
    - shard-tglu:         NOTRUN -> [SKIP][299] ([i915#15609] / [i915#8825]) +2 other tests skip
   [299]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-8/igt@kms_plane@pixel-format-y-tiled-ccs-modifier-source-clamping@pipe-b-plane-7.html

  * igt@kms_plane_alpha_blend@alpha-opaque-fb:
    - shard-glk:          NOTRUN -> [FAIL][300] ([i915#10647] / [i915#12169]) +1 other test fail
   [300]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-glk9/igt@kms_plane_alpha_blend@alpha-opaque-fb.html

  * igt@kms_plane_alpha_blend@alpha-transparent-fb:
    - shard-glk:          NOTRUN -> [FAIL][301] ([i915#10647] / [i915#12177])
   [301]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-glk6/igt@kms_plane_alpha_blend@alpha-transparent-fb.html

  * igt@kms_plane_alpha_blend@constant-alpha-max@pipe-c-hdmi-a-1:
    - shard-glk:          NOTRUN -> [FAIL][302] ([i915#10647]) +5 other tests fail
   [302]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-glk3/igt@kms_plane_alpha_blend@constant-alpha-max@pipe-c-hdmi-a-1.html

  * igt@kms_plane_lowres@tiling-yf:
    - shard-rkl:          NOTRUN -> [SKIP][303] ([i915#3555]) +5 other tests skip
   [303]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-3/igt@kms_plane_lowres@tiling-yf.html

  * igt@kms_plane_multiple@2x-tiling-4:
    - shard-dg2:          NOTRUN -> [SKIP][304] ([i915#13958])
   [304]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-4/igt@kms_plane_multiple@2x-tiling-4.html
    - shard-rkl:          NOTRUN -> [SKIP][305] ([i915#13958])
   [305]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-7/igt@kms_plane_multiple@2x-tiling-4.html
    - shard-dg1:          NOTRUN -> [SKIP][306] ([i915#13958])
   [306]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-18/igt@kms_plane_multiple@2x-tiling-4.html
    - shard-tglu:         NOTRUN -> [SKIP][307] ([i915#13958])
   [307]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-7/igt@kms_plane_multiple@2x-tiling-4.html
    - shard-mtlp:         NOTRUN -> [SKIP][308] ([i915#13958])
   [308]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-5/igt@kms_plane_multiple@2x-tiling-4.html

  * igt@kms_plane_multiple@2x-tiling-x:
    - shard-tglu-1:       NOTRUN -> [SKIP][309] ([i915#13958])
   [309]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@kms_plane_multiple@2x-tiling-x.html

  * igt@kms_plane_multiple@tiling-4:
    - shard-tglu-1:       NOTRUN -> [SKIP][310] ([i915#14259])
   [310]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@kms_plane_multiple@tiling-4.html

  * igt@kms_plane_multiple@tiling-yf:
    - shard-dg2:          NOTRUN -> [SKIP][311] ([i915#14259])
   [311]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-11/igt@kms_plane_multiple@tiling-yf.html

  * igt@kms_plane_scaling@plane-upscale-20x20-with-rotation@pipe-a:
    - shard-rkl:          NOTRUN -> [SKIP][312] ([i915#15329]) +11 other tests skip
   [312]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-5/igt@kms_plane_scaling@plane-upscale-20x20-with-rotation@pipe-a.html
    - shard-dg1:          NOTRUN -> [SKIP][313] ([i915#15329]) +4 other tests skip
   [313]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-16/igt@kms_plane_scaling@plane-upscale-20x20-with-rotation@pipe-a.html

  * igt@kms_plane_scaling@plane-upscale-20x20-with-rotation@pipe-c:
    - shard-tglu:         NOTRUN -> [SKIP][314] ([i915#15329]) +4 other tests skip
   [314]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-6/igt@kms_plane_scaling@plane-upscale-20x20-with-rotation@pipe-c.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-5-upscale-20x20@pipe-d:
    - shard-mtlp:         NOTRUN -> [SKIP][315] ([i915#15329]) +4 other tests skip
   [315]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-8/igt@kms_plane_scaling@planes-downscale-factor-0-5-upscale-20x20@pipe-d.html

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

  * igt@kms_pm_backlight@fade-with-dpms:
    - shard-rkl:          NOTRUN -> [SKIP][317] ([i915#14544] / [i915#5354])
   [317]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_pm_backlight@fade-with-dpms.html

  * igt@kms_pm_dc@dc5-psr:
    - shard-dg2:          NOTRUN -> [SKIP][318] ([i915#9685]) +1 other test skip
   [318]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-8/igt@kms_pm_dc@dc5-psr.html
    - shard-rkl:          NOTRUN -> [SKIP][319] ([i915#9685]) +2 other tests skip
   [319]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-3/igt@kms_pm_dc@dc5-psr.html
    - shard-dg1:          NOTRUN -> [SKIP][320] ([i915#9685]) +1 other test skip
   [320]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-16/igt@kms_pm_dc@dc5-psr.html
    - shard-tglu:         NOTRUN -> [SKIP][321] ([i915#9685])
   [321]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-4/igt@kms_pm_dc@dc5-psr.html

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

  * igt@kms_pm_rpm@dpms-mode-unset-lpsp:
    - shard-rkl:          [PASS][323] -> [SKIP][324] ([i915#15073])
   [323]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-2/igt@kms_pm_rpm@dpms-mode-unset-lpsp.html
   [324]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-4/igt@kms_pm_rpm@dpms-mode-unset-lpsp.html

  * igt@kms_pm_rpm@modeset-lpsp-stress-no-wait:
    - shard-dg1:          [PASS][325] -> [SKIP][326] ([i915#15073])
   [325]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg1-14/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html
   [326]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-18/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html

  * igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
    - shard-tglu:         NOTRUN -> [SKIP][327] ([i915#15073]) +1 other test skip
   [327]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-6/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html

  * igt@kms_pm_rpm@package-g7:
    - shard-dg2:          NOTRUN -> [SKIP][328] ([i915#15403])
   [328]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-3/igt@kms_pm_rpm@package-g7.html

  * igt@kms_pm_rpm@pc8-residency:
    - shard-dg2:          NOTRUN -> [SKIP][329] +7 other tests skip
   [329]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-7/igt@kms_pm_rpm@pc8-residency.html

  * igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area:
    - shard-glk:          NOTRUN -> [SKIP][330] ([i915#11520]) +13 other tests skip
   [330]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-glk6/igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area.html

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

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

  * igt@kms_psr2_sf@pr-overlay-plane-update-continuous-sf:
    - shard-rkl:          NOTRUN -> [SKIP][333] ([i915#11520]) +10 other tests skip
   [333]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-2/igt@kms_psr2_sf@pr-overlay-plane-update-continuous-sf.html

  * igt@kms_psr2_sf@pr-overlay-plane-update-sf-dmg-area:
    - shard-snb:          NOTRUN -> [SKIP][334] ([i915#11520])
   [334]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-snb1/igt@kms_psr2_sf@pr-overlay-plane-update-sf-dmg-area.html
    - shard-dg1:          NOTRUN -> [SKIP][335] ([i915#11520])
   [335]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-13/igt@kms_psr2_sf@pr-overlay-plane-update-sf-dmg-area.html
    - shard-mtlp:         NOTRUN -> [SKIP][336] ([i915#12316]) +1 other test skip
   [336]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-7/igt@kms_psr2_sf@pr-overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-sf:
    - shard-tglu-1:       NOTRUN -> [SKIP][337] ([i915#11520])
   [337]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-sf.html

  * igt@kms_psr2_sf@psr2-overlay-plane-update-sf-dmg-area:
    - shard-glk10:        NOTRUN -> [SKIP][338] ([i915#11520]) +2 other tests skip
   [338]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-glk10/igt@kms_psr2_sf@psr2-overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area-big-fb:
    - shard-rkl:          NOTRUN -> [SKIP][339] ([i915#11520] / [i915#14544])
   [339]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area-big-fb.html

  * igt@kms_psr2_su@page_flip-nv12:
    - shard-tglu-1:       NOTRUN -> [SKIP][340] ([i915#9683])
   [340]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@kms_psr2_su@page_flip-nv12.html

  * igt@kms_psr2_su@page_flip-p010:
    - shard-mtlp:         NOTRUN -> [SKIP][341] ([i915#4348])
   [341]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-7/igt@kms_psr2_su@page_flip-p010.html

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

  * igt@kms_psr@fbc-psr-cursor-blt:
    - shard-dg2:          NOTRUN -> [SKIP][343] ([i915#1072] / [i915#9732]) +12 other tests skip
   [343]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-3/igt@kms_psr@fbc-psr-cursor-blt.html

  * igt@kms_psr@fbc-psr-cursor-blt@edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][344] ([i915#9688]) +4 other tests skip
   [344]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-4/igt@kms_psr@fbc-psr-cursor-blt@edp-1.html

  * igt@kms_psr@pr-primary-mmap-gtt:
    - shard-rkl:          NOTRUN -> [SKIP][345] ([i915#1072] / [i915#14544] / [i915#9732]) +2 other tests skip
   [345]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_psr@pr-primary-mmap-gtt.html

  * igt@kms_psr@psr-cursor-plane-onoff:
    - shard-tglu-1:       NOTRUN -> [SKIP][346] ([i915#9732]) +7 other tests skip
   [346]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@kms_psr@psr-cursor-plane-onoff.html

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

  * igt@kms_psr@psr2-cursor-plane-onoff:
    - shard-tglu:         NOTRUN -> [SKIP][348] ([i915#9732]) +20 other tests skip
   [348]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-2/igt@kms_psr@psr2-cursor-plane-onoff.html

  * igt@kms_rotation_crc@multiplane-rotation:
    - shard-glk:          NOTRUN -> [INCOMPLETE][349] ([i915#15492])
   [349]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-glk6/igt@kms_rotation_crc@multiplane-rotation.html

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

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

  * igt@kms_rotation_crc@sprite-rotation-90:
    - shard-dg2:          NOTRUN -> [SKIP][352] ([i915#12755]) +1 other test skip
   [352]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-3/igt@kms_rotation_crc@sprite-rotation-90.html
    - shard-mtlp:         NOTRUN -> [SKIP][353] ([i915#12755]) +1 other test skip
   [353]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-6/igt@kms_rotation_crc@sprite-rotation-90.html

  * igt@kms_scaling_modes@scaling-mode-full:
    - shard-tglu:         NOTRUN -> [SKIP][354] ([i915#3555]) +4 other tests skip
   [354]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-3/igt@kms_scaling_modes@scaling-mode-full.html

  * igt@kms_setmode@basic:
    - shard-snb:          [PASS][355] -> [FAIL][356] ([i915#15106]) +1 other test fail
   [355]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-snb7/igt@kms_setmode@basic.html
   [356]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-snb5/igt@kms_setmode@basic.html
    - shard-tglu:         [PASS][357] -> [FAIL][358] ([i915#15106]) +2 other tests fail
   [357]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-tglu-4/igt@kms_setmode@basic.html
   [358]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-8/igt@kms_setmode@basic.html
    - shard-rkl:          [PASS][359] -> [FAIL][360] ([i915#15106])
   [359]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-7/igt@kms_setmode@basic.html
   [360]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-5/igt@kms_setmode@basic.html

  * igt@kms_setmode@basic-clone-single-crtc:
    - shard-dg2:          NOTRUN -> [SKIP][361] ([i915#3555]) +5 other tests skip
   [361]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-3/igt@kms_setmode@basic-clone-single-crtc.html
    - shard-tglu-1:       NOTRUN -> [SKIP][362] ([i915#3555])
   [362]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-1/igt@kms_setmode@basic-clone-single-crtc.html

  * igt@kms_setmode@basic@pipe-a-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [FAIL][363] ([i915#15106])
   [363]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-5/igt@kms_setmode@basic@pipe-a-hdmi-a-1.html

  * igt@kms_setmode@invalid-clone-single-crtc:
    - shard-rkl:          NOTRUN -> [SKIP][364] ([i915#14544] / [i915#3555])
   [364]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_setmode@invalid-clone-single-crtc.html
    - shard-dg1:          NOTRUN -> [SKIP][365] ([i915#3555]) +1 other test skip
   [365]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-17/igt@kms_setmode@invalid-clone-single-crtc.html
    - shard-mtlp:         NOTRUN -> [SKIP][366] ([i915#3555] / [i915#8809])
   [366]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-5/igt@kms_setmode@invalid-clone-single-crtc.html

  * igt@kms_vblank@ts-continuation-dpms-suspend:
    - shard-rkl:          NOTRUN -> [INCOMPLETE][367] ([i915#12276]) +1 other test incomplete
   [367]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-4/igt@kms_vblank@ts-continuation-dpms-suspend.html

  * igt@kms_vrr@flip-basic:
    - shard-rkl:          NOTRUN -> [SKIP][368] ([i915#15243] / [i915#3555]) +1 other test skip
   [368]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-2/igt@kms_vrr@flip-basic.html

  * igt@kms_vrr@flip-suspend:
    - shard-dg2:          NOTRUN -> [SKIP][369] ([i915#15243] / [i915#3555])
   [369]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-3/igt@kms_vrr@flip-suspend.html

  * igt@kms_vrr@max-min:
    - shard-tglu:         NOTRUN -> [SKIP][370] ([i915#9906])
   [370]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-10/igt@kms_vrr@max-min.html

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

  * igt@perf@global-sseu-config:
    - shard-mtlp:         NOTRUN -> [SKIP][372] ([i915#7387])
   [372]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-8/igt@perf@global-sseu-config.html
    - shard-dg2:          NOTRUN -> [SKIP][373] ([i915#7387])
   [373]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-7/igt@perf@global-sseu-config.html

  * igt@perf@per-context-mode-unprivileged:
    - shard-rkl:          NOTRUN -> [SKIP][374] ([i915#2435])
   [374]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-7/igt@perf@per-context-mode-unprivileged.html

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

  * igt@perf_pmu@frequency:
    - shard-dg2:          NOTRUN -> [FAIL][376] ([i915#12549] / [i915#6806]) +1 other test fail
   [376]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-7/igt@perf_pmu@frequency.html

  * igt@perf_pmu@module-unload:
    - shard-tglu:         NOTRUN -> [FAIL][377] ([i915#14433])
   [377]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-8/igt@perf_pmu@module-unload.html

  * igt@perf_pmu@most-busy-idle-check-all:
    - shard-dg2:          [PASS][378] -> [FAIL][379] ([i915#15520]) +1 other test fail
   [378]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg2-11/igt@perf_pmu@most-busy-idle-check-all.html
   [379]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-1/igt@perf_pmu@most-busy-idle-check-all.html
    - shard-dg1:          [PASS][380] -> [FAIL][381] ([i915#15520]) +1 other test fail
   [380]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg1-12/igt@perf_pmu@most-busy-idle-check-all.html
   [381]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-18/igt@perf_pmu@most-busy-idle-check-all.html

  * igt@perf_pmu@most-busy-idle-check-all@bcs0:
    - shard-mtlp:         [PASS][382] -> [FAIL][383] ([i915#15520]) +2 other tests fail
   [382]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-mtlp-4/igt@perf_pmu@most-busy-idle-check-all@bcs0.html
   [383]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-7/igt@perf_pmu@most-busy-idle-check-all@bcs0.html

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

  * igt@perf_pmu@rc6-suspend:
    - shard-rkl:          [PASS][385] -> [INCOMPLETE][386] ([i915#13520])
   [385]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-2/igt@perf_pmu@rc6-suspend.html
   [386]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@perf_pmu@rc6-suspend.html

  * igt@prime_vgem@basic-fence-read:
    - shard-mtlp:         NOTRUN -> [SKIP][387] ([i915#3708])
   [387]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-8/igt@prime_vgem@basic-fence-read.html

  * igt@prime_vgem@basic-read:
    - shard-rkl:          NOTRUN -> [SKIP][388] ([i915#3291] / [i915#3708])
   [388]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-4/igt@prime_vgem@basic-read.html

  * igt@prime_vgem@coherency-gtt:
    - shard-rkl:          NOTRUN -> [SKIP][389] ([i915#3708]) +1 other test skip
   [389]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-1/igt@prime_vgem@coherency-gtt.html

  * igt@sriov_basic@bind-unbind-vf@vf-4:
    - shard-tglu:         NOTRUN -> [FAIL][390] ([i915#12910]) +9 other tests fail
   [390]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-6/igt@sriov_basic@bind-unbind-vf@vf-4.html

  * igt@sriov_basic@enable-vfs-autoprobe-off:
    - shard-dg2:          NOTRUN -> [SKIP][391] ([i915#9917])
   [391]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-8/igt@sriov_basic@enable-vfs-autoprobe-off.html

  * igt@sriov_basic@enable-vfs-autoprobe-on:
    - shard-rkl:          NOTRUN -> [SKIP][392] ([i915#9917])
   [392]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-8/igt@sriov_basic@enable-vfs-autoprobe-on.html
    - shard-dg1:          NOTRUN -> [SKIP][393] ([i915#9917])
   [393]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-13/igt@sriov_basic@enable-vfs-autoprobe-on.html

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

  
#### Possible fixes ####

  * igt@gem_ccs@suspend-resume:
    - shard-dg2:          [INCOMPLETE][395] ([i915#13356]) -> [PASS][396]
   [395]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg2-7/igt@gem_ccs@suspend-resume.html
   [396]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-11/igt@gem_ccs@suspend-resume.html

  * igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-smem-lmem0:
    - shard-dg2:          [INCOMPLETE][397] ([i915#12392] / [i915#13356]) -> [PASS][398]
   [397]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg2-7/igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-smem-lmem0.html
   [398]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-11/igt@gem_ccs@suspend-resume@xmajor-compressed-compfmt0-smem-lmem0.html

  * igt@gem_exec_endless@dispatch@vcs1:
    - shard-dg1:          [TIMEOUT][399] ([i915#3778]) -> [PASS][400] +1 other test pass
   [399]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg1-13/igt@gem_exec_endless@dispatch@vcs1.html
   [400]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-16/igt@gem_exec_endless@dispatch@vcs1.html

  * igt@gem_mmap_offset@clear-via-pagefault:
    - shard-mtlp:         [ABORT][401] ([i915#14809]) -> [PASS][402] +1 other test pass
   [401]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-mtlp-2/igt@gem_mmap_offset@clear-via-pagefault.html
   [402]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-7/igt@gem_mmap_offset@clear-via-pagefault.html

  * igt@i915_pm_rc6_residency@rc6-accuracy:
    - shard-dg2:          [FAIL][403] ([i915#12964]) -> [PASS][404] +1 other test pass
   [403]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg2-11/igt@i915_pm_rc6_residency@rc6-accuracy.html
   [404]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-5/igt@i915_pm_rc6_residency@rc6-accuracy.html

  * igt@i915_suspend@basic-s2idle-without-i915:
    - shard-tglu:         [ABORT][405] -> [PASS][406]
   [405]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-tglu-9/igt@i915_suspend@basic-s2idle-without-i915.html
   [406]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-7/igt@i915_suspend@basic-s2idle-without-i915.html

  * igt@i915_suspend@fence-restore-tiled2untiled:
    - shard-rkl:          [INCOMPLETE][407] ([i915#4817]) -> [PASS][408]
   [407]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@i915_suspend@fence-restore-tiled2untiled.html
   [408]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-5/igt@i915_suspend@fence-restore-tiled2untiled.html

  * igt@i915_suspend@forcewake:
    - shard-rkl:          [ABORT][409] ([i915#15140]) -> [PASS][410]
   [409]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-1/igt@i915_suspend@forcewake.html
   [410]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-5/igt@i915_suspend@forcewake.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip:
    - shard-mtlp:         [FAIL][411] ([i915#5138]) -> [PASS][412]
   [411]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-mtlp-8/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html
   [412]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-mtlp-3/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html

  * igt@kms_cursor_crc@cursor-random-256x85@pipe-a-hdmi-a-1:
    - shard-tglu:         [FAIL][413] ([i915#13566]) -> [PASS][414] +1 other test pass
   [413]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-tglu-6/igt@kms_cursor_crc@cursor-random-256x85@pipe-a-hdmi-a-1.html
   [414]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-7/igt@kms_cursor_crc@cursor-random-256x85@pipe-a-hdmi-a-1.html

  * igt@kms_cursor_crc@cursor-sliding-128x42:
    - shard-rkl:          [FAIL][415] ([i915#13566]) -> [PASS][416] +1 other test pass
   [415]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-7/igt@kms_cursor_crc@cursor-sliding-128x42.html
   [416]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-3/igt@kms_cursor_crc@cursor-sliding-128x42.html

  * igt@kms_dp_aux_dev:
    - shard-dg2:          [SKIP][417] ([i915#1257]) -> [PASS][418]
   [417]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg2-7/igt@kms_dp_aux_dev.html
   [418]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-11/igt@kms_dp_aux_dev.html

  * igt@kms_flip@flip-vs-suspend-interruptible@a-hdmi-a2:
    - shard-rkl:          [INCOMPLETE][419] ([i915#6113]) -> [PASS][420] +1 other test pass
   [419]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@kms_flip@flip-vs-suspend-interruptible@a-hdmi-a2.html
   [420]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-7/igt@kms_flip@flip-vs-suspend-interruptible@a-hdmi-a2.html

  * igt@kms_force_connector_basic@force-edid:
    - shard-dg1:          [DMESG-WARN][421] ([i915#4391] / [i915#4423]) -> [PASS][422]
   [421]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg1-16/igt@kms_force_connector_basic@force-edid.html
   [422]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-16/igt@kms_force_connector_basic@force-edid.html

  * igt@kms_hdr@static-swap:
    - shard-rkl:          [SKIP][423] ([i915#3555] / [i915#8228]) -> [PASS][424]
   [423]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-2/igt@kms_hdr@static-swap.html
   [424]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_hdr@static-swap.html

  * igt@kms_plane_lowres@tiling-none:
    - shard-dg1:          [DMESG-WARN][425] ([i915#4423]) -> [PASS][426] +3 other tests pass
   [425]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg1-14/igt@kms_plane_lowres@tiling-none.html
   [426]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-14/igt@kms_plane_lowres@tiling-none.html

  * igt@kms_pm_rpm@modeset-lpsp:
    - shard-dg1:          [SKIP][427] ([i915#15073]) -> [PASS][428]
   [427]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg1-12/igt@kms_pm_rpm@modeset-lpsp.html
   [428]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-14/igt@kms_pm_rpm@modeset-lpsp.html

  * igt@kms_pm_rpm@modeset-lpsp-stress-no-wait:
    - shard-dg2:          [SKIP][429] ([i915#15073]) -> [PASS][430]
   [429]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg2-5/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html
   [430]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-4/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html

  * igt@kms_pm_rpm@modeset-non-lpsp-stress:
    - shard-rkl:          [SKIP][431] ([i915#15073]) -> [PASS][432] +1 other test pass
   [431]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-8/igt@kms_pm_rpm@modeset-non-lpsp-stress.html
   [432]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-4/igt@kms_pm_rpm@modeset-non-lpsp-stress.html

  * igt@kms_pm_rpm@system-suspend-idle:
    - shard-rkl:          [INCOMPLETE][433] ([i915#14419]) -> [PASS][434]
   [433]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-4/igt@kms_pm_rpm@system-suspend-idle.html
   [434]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-5/igt@kms_pm_rpm@system-suspend-idle.html

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

  
#### Warnings ####

  * igt@gem_ctx_sseu@invalid-sseu:
    - shard-rkl:          [SKIP][437] ([i915#280]) -> [SKIP][438] ([i915#14544] / [i915#280])
   [437]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-8/igt@gem_ctx_sseu@invalid-sseu.html
   [438]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@gem_ctx_sseu@invalid-sseu.html

  * igt@gem_exec_reloc@basic-cpu-read-active:
    - shard-rkl:          [SKIP][439] ([i915#14544] / [i915#3281]) -> [SKIP][440] ([i915#3281]) +2 other tests skip
   [439]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@gem_exec_reloc@basic-cpu-read-active.html
   [440]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-2/igt@gem_exec_reloc@basic-cpu-read-active.html

  * igt@gem_exec_reloc@basic-range-active:
    - shard-rkl:          [SKIP][441] ([i915#3281]) -> [SKIP][442] ([i915#14544] / [i915#3281]) +2 other tests skip
   [441]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-8/igt@gem_exec_reloc@basic-range-active.html
   [442]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@gem_exec_reloc@basic-range-active.html

  * igt@gem_lmem_swapping@heavy-multi:
    - shard-rkl:          [SKIP][443] ([i915#4613]) -> [SKIP][444] ([i915#14544] / [i915#4613])
   [443]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-7/igt@gem_lmem_swapping@heavy-multi.html
   [444]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@gem_lmem_swapping@heavy-multi.html

  * igt@gem_lmem_swapping@smem-oom:
    - shard-rkl:          [SKIP][445] ([i915#14544] / [i915#4613]) -> [SKIP][446] ([i915#4613])
   [445]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@gem_lmem_swapping@smem-oom.html
   [446]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-7/igt@gem_lmem_swapping@smem-oom.html

  * igt@gem_partial_pwrite_pread@writes-after-reads-snoop:
    - shard-rkl:          [SKIP][447] ([i915#3282]) -> [SKIP][448] ([i915#14544] / [i915#3282]) +1 other test skip
   [447]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-5/igt@gem_partial_pwrite_pread@writes-after-reads-snoop.html
   [448]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@gem_partial_pwrite_pread@writes-after-reads-snoop.html

  * igt@gem_pwrite_snooped:
    - shard-rkl:          [SKIP][449] ([i915#14544] / [i915#3282]) -> [SKIP][450] ([i915#3282])
   [449]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@gem_pwrite_snooped.html
   [450]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-2/igt@gem_pwrite_snooped.html

  * igt@gem_pxp@hw-rejects-pxp-context:
    - shard-rkl:          [SKIP][451] ([i915#13717]) -> [SKIP][452] ([i915#13717] / [i915#14544])
   [451]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-4/igt@gem_pxp@hw-rejects-pxp-context.html
   [452]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@gem_pxp@hw-rejects-pxp-context.html

  * igt@gen9_exec_parse@bb-chained:
    - shard-rkl:          [SKIP][453] ([i915#14544] / [i915#2527]) -> [SKIP][454] ([i915#2527])
   [453]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@gen9_exec_parse@bb-chained.html
   [454]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-5/igt@gen9_exec_parse@bb-chained.html

  * igt@kms_atomic@plane-primary-overlay-mutable-zpos:
    - shard-rkl:          [SKIP][455] ([i915#9531]) -> [SKIP][456] ([i915#14544] / [i915#9531])
   [455]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-7/igt@kms_atomic@plane-primary-overlay-mutable-zpos.html
   [456]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_atomic@plane-primary-overlay-mutable-zpos.html

  * igt@kms_big_fb@4-tiled-addfb-size-overflow:
    - shard-dg1:          [SKIP][457] ([i915#5286]) -> [SKIP][458] ([i915#4423] / [i915#5286])
   [457]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg1-13/igt@kms_big_fb@4-tiled-addfb-size-overflow.html
   [458]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-18/igt@kms_big_fb@4-tiled-addfb-size-overflow.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip:
    - shard-rkl:          [SKIP][459] ([i915#14544] / [i915#5286]) -> [SKIP][460] ([i915#5286])
   [459]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip.html
   [460]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-1/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip:
    - shard-rkl:          [SKIP][461] ([i915#5286]) -> [SKIP][462] ([i915#14544] / [i915#5286]) +1 other test skip
   [461]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-2/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
   [462]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip.html

  * igt@kms_big_fb@linear-32bpp-rotate-270:
    - shard-rkl:          [SKIP][463] ([i915#14544] / [i915#3638]) -> [SKIP][464] ([i915#3638])
   [463]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@kms_big_fb@linear-32bpp-rotate-270.html
   [464]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-7/igt@kms_big_fb@linear-32bpp-rotate-270.html

  * igt@kms_big_fb@x-tiled-16bpp-rotate-90:
    - shard-rkl:          [SKIP][465] ([i915#3638]) -> [SKIP][466] ([i915#14544] / [i915#3638])
   [465]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-2/igt@kms_big_fb@x-tiled-16bpp-rotate-90.html
   [466]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_big_fb@x-tiled-16bpp-rotate-90.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs:
    - shard-rkl:          [SKIP][467] ([i915#12313]) -> [SKIP][468] ([i915#12313] / [i915#14544])
   [467]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-2/igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs.html
   [468]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs.html

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

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-mc-ccs:
    - shard-rkl:          [SKIP][471] ([i915#14098] / [i915#14544] / [i915#6095]) -> [SKIP][472] ([i915#14098] / [i915#6095]) +5 other tests skip
   [471]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-mc-ccs.html
   [472]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-8/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-mc-ccs.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-c-hdmi-a-2:
    - shard-rkl:          [SKIP][473] ([i915#14098] / [i915#6095]) -> [SKIP][474] ([i915#14098] / [i915#14544] / [i915#6095]) +7 other tests skip
   [473]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-3/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-c-hdmi-a-2.html
   [474]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs@pipe-c-hdmi-a-2.html

  * igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs:
    - shard-dg1:          [SKIP][475] ([i915#12313] / [i915#4423]) -> [SKIP][476] ([i915#12313])
   [475]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg1-17/igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs.html
   [476]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-17/igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs.html

  * igt@kms_ccs@random-ccs-data-y-tiled-gen12-mc-ccs@pipe-a-hdmi-a-2:
    - shard-rkl:          [SKIP][477] ([i915#14544] / [i915#6095]) -> [SKIP][478] ([i915#6095]) +3 other tests skip
   [477]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@kms_ccs@random-ccs-data-y-tiled-gen12-mc-ccs@pipe-a-hdmi-a-2.html
   [478]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-3/igt@kms_ccs@random-ccs-data-y-tiled-gen12-mc-ccs@pipe-a-hdmi-a-2.html

  * igt@kms_chamelium_color@degamma:
    - shard-rkl:          [SKIP][479] -> [SKIP][480] ([i915#14544]) +5 other tests skip
   [479]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-8/igt@kms_chamelium_color@degamma.html
   [480]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_chamelium_color@degamma.html

  * igt@kms_chamelium_frames@dp-crc-fast:
    - shard-rkl:          [SKIP][481] ([i915#11151] / [i915#14544] / [i915#7828]) -> [SKIP][482] ([i915#11151] / [i915#7828]) +1 other test skip
   [481]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@kms_chamelium_frames@dp-crc-fast.html
   [482]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-3/igt@kms_chamelium_frames@dp-crc-fast.html

  * igt@kms_chamelium_hpd@vga-hpd-for-each-pipe:
    - shard-rkl:          [SKIP][483] ([i915#11151] / [i915#7828]) -> [SKIP][484] ([i915#11151] / [i915#14544] / [i915#7828]) +3 other tests skip
   [483]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-8/igt@kms_chamelium_hpd@vga-hpd-for-each-pipe.html
   [484]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_chamelium_hpd@vga-hpd-for-each-pipe.html

  * igt@kms_content_protection@dp-mst-type-0:
    - shard-rkl:          [SKIP][485] ([i915#14544] / [i915#15330] / [i915#3116]) -> [SKIP][486] ([i915#15330] / [i915#3116])
   [485]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@kms_content_protection@dp-mst-type-0.html
   [486]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-2/igt@kms_content_protection@dp-mst-type-0.html

  * igt@kms_content_protection@dp-mst-type-1:
    - shard-rkl:          [SKIP][487] ([i915#15330] / [i915#3116]) -> [SKIP][488] ([i915#14544] / [i915#15330] / [i915#3116])
   [487]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-3/igt@kms_content_protection@dp-mst-type-1.html
   [488]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_content_protection@dp-mst-type-1.html

  * igt@kms_content_protection@lic-type-0-hdcp14:
    - shard-dg2:          [SKIP][489] ([i915#6944]) -> [FAIL][490] ([i915#7173])
   [489]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg2-8/igt@kms_content_protection@lic-type-0-hdcp14.html
   [490]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-11/igt@kms_content_protection@lic-type-0-hdcp14.html

  * igt@kms_content_protection@suspend-resume:
    - shard-dg2:          [FAIL][491] ([i915#7173]) -> [SKIP][492] ([i915#6944])
   [491]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg2-11/igt@kms_content_protection@suspend-resume.html
   [492]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-7/igt@kms_content_protection@suspend-resume.html

  * igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic:
    - shard-rkl:          [SKIP][493] ([i915#14544]) -> [SKIP][494] +2 other tests skip
   [493]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic.html
   [494]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-2/igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic.html

  * igt@kms_dp_linktrain_fallback@dsc-fallback:
    - shard-rkl:          [SKIP][495] ([i915#13707] / [i915#14544]) -> [SKIP][496] ([i915#13707])
   [495]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@kms_dp_linktrain_fallback@dsc-fallback.html
   [496]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-7/igt@kms_dp_linktrain_fallback@dsc-fallback.html

  * igt@kms_dsc@dsc-fractional-bpp:
    - shard-rkl:          [SKIP][497] ([i915#14544] / [i915#3840]) -> [SKIP][498] ([i915#3840])
   [497]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@kms_dsc@dsc-fractional-bpp.html
   [498]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-5/igt@kms_dsc@dsc-fractional-bpp.html

  * igt@kms_dsc@dsc-with-output-formats:
    - shard-rkl:          [SKIP][499] ([i915#3555] / [i915#3840]) -> [SKIP][500] ([i915#14544] / [i915#3555] / [i915#3840])
   [499]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-5/igt@kms_dsc@dsc-with-output-formats.html
   [500]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_dsc@dsc-with-output-formats.html

  * igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible:
    - shard-rkl:          [SKIP][501] ([i915#9934]) -> [SKIP][502] ([i915#14544] / [i915#9934]) +2 other tests skip
   [501]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-4/igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible.html
   [502]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_flip@2x-flip-vs-absolute-wf_vblank-interruptible.html

  * igt@kms_flip@2x-flip-vs-expired-vblank:
    - shard-rkl:          [SKIP][503] ([i915#14544] / [i915#9934]) -> [SKIP][504] ([i915#9934])
   [503]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@kms_flip@2x-flip-vs-expired-vblank.html
   [504]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-2/igt@kms_flip@2x-flip-vs-expired-vblank.html

  * igt@kms_flip@flip-vs-suspend:
    - shard-glk:          [INCOMPLETE][505] ([i915#12745] / [i915#4839] / [i915#6113]) -> [INCOMPLETE][506] ([i915#12745] / [i915#4839])
   [505]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-glk3/igt@kms_flip@flip-vs-suspend.html
   [506]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-glk9/igt@kms_flip@flip-vs-suspend.html

  * igt@kms_flip@flip-vs-suspend@a-hdmi-a1:
    - shard-glk:          [INCOMPLETE][507] ([i915#12745] / [i915#6113]) -> [INCOMPLETE][508] ([i915#12745])
   [507]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-glk3/igt@kms_flip@flip-vs-suspend@a-hdmi-a1.html
   [508]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-glk9/igt@kms_flip@flip-vs-suspend@a-hdmi-a1.html

  * igt@kms_flip_scaled_crc@flip-32bpp-linear-to-32bpp-linear-reflect-x:
    - shard-rkl:          [SKIP][509] ([i915#15645]) -> [SKIP][510] ([i915#14544] / [i915#15645])
   [509]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-4/igt@kms_flip_scaled_crc@flip-32bpp-linear-to-32bpp-linear-reflect-x.html
   [510]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_flip_scaled_crc@flip-32bpp-linear-to-32bpp-linear-reflect-x.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling:
    - shard-rkl:          [SKIP][511] ([i915#14544] / [i915#15643]) -> [SKIP][512] ([i915#15643]) +2 other tests skip
   [511]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling.html
   [512]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-7/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling:
    - shard-rkl:          [SKIP][513] ([i915#15643]) -> [SKIP][514] ([i915#14544] / [i915#15643]) +1 other test skip
   [513]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-3/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling.html
   [514]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-wc:
    - shard-dg1:          [SKIP][515] ([i915#8708]) -> [SKIP][516] ([i915#4423] / [i915#8708])
   [515]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg1-18/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-wc.html
   [516]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-18/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-mmap-cpu:
    - shard-dg1:          [SKIP][517] ([i915#4423]) -> [SKIP][518]
   [517]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg1-17/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-mmap-cpu.html
   [518]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-13/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbc-abgr161616f-draw-pwrite:
    - shard-dg1:          [SKIP][519] ([i915#15574]) -> [SKIP][520] ([i915#15574] / [i915#4423])
   [519]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg1-12/igt@kms_frontbuffer_tracking@fbc-abgr161616f-draw-pwrite.html
   [520]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-13/igt@kms_frontbuffer_tracking@fbc-abgr161616f-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbc-tiling-4:
    - shard-rkl:          [SKIP][521] ([i915#5439]) -> [SKIP][522] ([i915#14544] / [i915#5439])
   [521]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-5/igt@kms_frontbuffer_tracking@fbc-tiling-4.html
   [522]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_frontbuffer_tracking@fbc-tiling-4.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-gtt:
    - shard-rkl:          [SKIP][523] ([i915#14544] / [i915#15102] / [i915#3023]) -> [SKIP][524] ([i915#15102] / [i915#3023]) +4 other tests skip
   [523]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-gtt.html
   [524]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-7/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt:
    - shard-rkl:          [SKIP][525] ([i915#1825]) -> [SKIP][526] ([i915#14544] / [i915#1825]) +14 other tests skip
   [525]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-7/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt.html
   [526]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-shrfb-scaledprimary:
    - shard-dg2:          [SKIP][527] ([i915#10433] / [i915#15102] / [i915#3458]) -> [SKIP][528] ([i915#15102] / [i915#3458]) +1 other test skip
   [527]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-shrfb-scaledprimary.html
   [528]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-11/igt@kms_frontbuffer_tracking@fbcpsr-shrfb-scaledprimary.html

  * igt@kms_frontbuffer_tracking@fbcpsr-suspend:
    - shard-dg2:          [SKIP][529] ([i915#15102] / [i915#3458]) -> [SKIP][530] ([i915#10433] / [i915#15102] / [i915#3458]) +5 other tests skip
   [529]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg2-1/igt@kms_frontbuffer_tracking@fbcpsr-suspend.html
   [530]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-suspend.html

  * igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-mmap-cpu:
    - shard-rkl:          [SKIP][531] ([i915#15102]) -> [SKIP][532] ([i915#14544] / [i915#15102])
   [531]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-2/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-mmap-cpu.html
   [532]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-pwrite:
    - shard-rkl:          [SKIP][533] ([i915#14544] / [i915#15102]) -> [SKIP][534] ([i915#15102])
   [533]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-pwrite.html
   [534]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-2/igt@kms_frontbuffer_tracking@psr-1p-offscreen-pri-shrfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-mmap-gtt:
    - shard-rkl:          [SKIP][535] ([i915#15102] / [i915#3023]) -> [SKIP][536] ([i915#14544] / [i915#15102] / [i915#3023]) +4 other tests skip
   [535]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-5/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-mmap-gtt.html
   [536]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-pri-shrfb-draw-mmap-gtt:
    - shard-rkl:          [SKIP][537] ([i915#14544] / [i915#1825]) -> [SKIP][538] ([i915#1825]) +4 other tests skip
   [537]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@kms_frontbuffer_tracking@psr-2p-primscrn-pri-shrfb-draw-mmap-gtt.html
   [538]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-4/igt@kms_frontbuffer_tracking@psr-2p-primscrn-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_panel_fitting@legacy:
    - shard-dg1:          [SKIP][539] ([i915#4423] / [i915#6301]) -> [SKIP][540] ([i915#6301])
   [539]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg1-17/igt@kms_panel_fitting@legacy.html
   [540]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-18/igt@kms_panel_fitting@legacy.html

  * igt@kms_pipe_stress@stress-xrgb8888-4tiled:
    - shard-rkl:          [SKIP][541] ([i915#14712]) -> [SKIP][542] ([i915#14544] / [i915#14712])
   [541]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-3/igt@kms_pipe_stress@stress-xrgb8888-4tiled.html
   [542]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_pipe_stress@stress-xrgb8888-4tiled.html

  * igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier-source-clamping:
    - shard-rkl:          [SKIP][543] ([i915#15608] / [i915#15609] / [i915#8825]) -> [SKIP][544] ([i915#14544] / [i915#15608] / [i915#15609] / [i915#8825])
   [543]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-8/igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier-source-clamping.html
   [544]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier-source-clamping.html

  * igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier-source-clamping@pipe-a-plane-0:
    - shard-rkl:          [SKIP][545] ([i915#15608]) -> [SKIP][546] ([i915#14544] / [i915#15608]) +2 other tests skip
   [545]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-8/igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier-source-clamping@pipe-a-plane-0.html
   [546]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier-source-clamping@pipe-a-plane-0.html

  * igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier-source-clamping@pipe-b-plane-5:
    - shard-rkl:          [SKIP][547] ([i915#15609] / [i915#8825]) -> [SKIP][548] ([i915#14544] / [i915#15609] / [i915#8825])
   [547]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-8/igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier-source-clamping@pipe-b-plane-5.html
   [548]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier-source-clamping@pipe-b-plane-5.html

  * igt@kms_plane@pixel-format-y-tiled-ccs-modifier:
    - shard-rkl:          [SKIP][549] ([i915#15608] / [i915#8825]) -> [SKIP][550] ([i915#14544] / [i915#15608] / [i915#8825]) +3 other tests skip
   [549]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-7/igt@kms_plane@pixel-format-y-tiled-ccs-modifier.html
   [550]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_plane@pixel-format-y-tiled-ccs-modifier.html

  * igt@kms_plane_multiple@2x-tiling-none:
    - shard-rkl:          [SKIP][551] ([i915#13958]) -> [SKIP][552] ([i915#13958] / [i915#14544])
   [551]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-4/igt@kms_plane_multiple@2x-tiling-none.html
   [552]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_plane_multiple@2x-tiling-none.html

  * igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b:
    - shard-rkl:          [SKIP][553] ([i915#15329]) -> [SKIP][554] ([i915#14544] / [i915#15329]) +3 other tests skip
   [553]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-4/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b.html
   [554]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-b.html

  * igt@kms_pm_dc@dc6-dpms:
    - shard-tglu:         [FAIL][555] ([i915#9295]) -> [SKIP][556] ([i915#15128])
   [555]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-tglu-8/igt@kms_pm_dc@dc6-dpms.html
   [556]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-tglu-6/igt@kms_pm_dc@dc6-dpms.html

  * igt@kms_prime@basic-modeset-hybrid:
    - shard-rkl:          [SKIP][557] ([i915#14544] / [i915#6524]) -> [SKIP][558] ([i915#6524])
   [557]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@kms_prime@basic-modeset-hybrid.html
   [558]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-1/igt@kms_prime@basic-modeset-hybrid.html

  * igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-fully-sf:
    - shard-rkl:          [SKIP][559] ([i915#11520]) -> [SKIP][560] ([i915#11520] / [i915#14544]) +3 other tests skip
   [559]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-5/igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-fully-sf.html
   [560]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-fully-sf.html

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

  * igt@kms_psr@fbc-psr-sprite-mmap-cpu:
    - shard-dg1:          [SKIP][563] ([i915#1072] / [i915#4423] / [i915#9732]) -> [SKIP][564] ([i915#1072] / [i915#9732])
   [563]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-dg1-17/igt@kms_psr@fbc-psr-sprite-mmap-cpu.html
   [564]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-dg1-13/igt@kms_psr@fbc-psr-sprite-mmap-cpu.html

  * igt@kms_psr@psr-primary-mmap-cpu:
    - shard-rkl:          [SKIP][565] ([i915#1072] / [i915#14544] / [i915#9732]) -> [SKIP][566] ([i915#1072] / [i915#9732]) +4 other tests skip
   [565]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@kms_psr@psr-primary-mmap-cpu.html
   [566]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-8/igt@kms_psr@psr-primary-mmap-cpu.html

  * igt@kms_psr@psr2-sprite-mmap-cpu:
    - shard-rkl:          [SKIP][567] ([i915#1072] / [i915#9732]) -> [SKIP][568] ([i915#1072] / [i915#14544] / [i915#9732]) +7 other tests skip
   [567]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-4/igt@kms_psr@psr2-sprite-mmap-cpu.html
   [568]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_psr@psr2-sprite-mmap-cpu.html

  * igt@kms_vrr@max-min:
    - shard-rkl:          [SKIP][569] ([i915#9906]) -> [SKIP][570] ([i915#14544] / [i915#9906])
   [569]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-5/igt@kms_vrr@max-min.html
   [570]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@kms_vrr@max-min.html

  * igt@sriov_basic@enable-vfs-autoprobe-off:
    - shard-rkl:          [SKIP][571] ([i915#14544] / [i915#9917]) -> [SKIP][572] ([i915#9917])
   [571]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-6/igt@sriov_basic@enable-vfs-autoprobe-off.html
   [572]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-3/igt@sriov_basic@enable-vfs-autoprobe-off.html

  * igt@sriov_basic@enable-vfs-bind-unbind-each:
    - shard-rkl:          [SKIP][573] ([i915#9917]) -> [SKIP][574] ([i915#14544] / [i915#9917])
   [573]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_17922/shard-rkl-7/igt@sriov_basic@enable-vfs-bind-unbind-each.html
   [574]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_14471/shard-rkl-6/igt@sriov_basic@enable-vfs-bind-unbind-each.html

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

  [i915#10056]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10056
  [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#10647]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10647
  [i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
  [i915#11078]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11078
  [i915#11151]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11151
  [i915#11520]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11520
  [i915#11713]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11713
  [i915#11965]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11965
  [i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
  [i915#12169]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12169
  [i915#12177]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12177
  [i915#12193]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12193
  [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#12358]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12358
  [i915#12392]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12392
  [i915#12454]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12454
  [i915#12549]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12549
  [i915#1257]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1257
  [i915#12712]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12712
  [i915#12713]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12713
  [i915#12745]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12745
  [i915#12755]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12755
  [i915#12805]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12805
  [i915#12910]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12910
  [i915#12964]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12964
  [i915#13008]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13008
  [i915#13046]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13046
  [i915#13049]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13049
  [i915#13331]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13331
  [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#13688]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13688
  [i915#13707]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13707
  [i915#13717]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13717
  [i915#13748]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13748
  [i915#13781]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13781
  [i915#13958]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13958
  [i915#14033]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14033
  [i915#14098]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14098
  [i915#14118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14118
  [i915#14123]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14123
  [i915#14152]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14152
  [i915#14259]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14259
  [i915#14350]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14350
  [i915#14419]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14419
  [i915#14433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14433
  [i915#14498]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14498
  [i915#14544]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14544
  [i915#14712]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14712
  [i915#14809]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14809
  [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#15128]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15128
  [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#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#15403]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15403
  [i915#15458]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15458
  [i915#15459]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15459
  [i915#15460]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15460
  [i915#15492]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15492
  [i915#15520]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15520
  [i915#15522]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15522
  [i915#15560]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15560
  [i915#15574]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15574
  [i915#15576]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15576
  [i915#15582]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15582
  [i915#15608]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15608
  [i915#15609]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15609
  [i915#15638]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15638
  [i915#15643]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15643
  [i915#15645]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15645
  [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#2065]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2065
  [i915#2433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2433
  [i915#2435]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2435
  [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#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#3778]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3778
  [i915#3828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3828
  [i915#3840]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3840
  [i915#4077]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4077
  [i915#4079]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4079
  [i915#4083]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4083
  [i915#4103]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4103
  [i915#4212]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4212
  [i915#4215]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4215
  [i915#4270]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4270
  [i915#4348]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4348
  [i915#4349]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4349
  [i915#4391]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4391
  [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#4565]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4565
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
  [i915#4812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4812
  [i915#4816]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4816
  [i915#4817]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4817
  [i915#4839]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4839
  [i915#4852]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4852
  [i915#4854]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4854
  [i915#4860]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4860
  [i915#4880]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4880
  [i915#5107]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5107
  [i915#5138]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5138
  [i915#5190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5190
  [i915#5286]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5286
  [i915#5289]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5289
  [i915#5354]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5354
  [i915#5439]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5439
  [i915#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#6230]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6230
  [i915#6301]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6301
  [i915#6334]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6334
  [i915#6335]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6335
  [i915#6524]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6524
  [i915#658]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/658
  [i915#6806]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6806
  [i915#6944]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6944
  [i915#7116]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7116
  [i915#7118]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7118
  [i915#7173]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7173
  [i915#7387]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7387
  [i915#7697]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7697
  [i915#7707]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7707
  [i915#7828]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7828
  [i915#7984]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7984
  [i915#8228]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8228
  [i915#8381]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8381
  [i915#8399]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8399
  [i915#8411]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8411
  [i915#8428]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8428
  [i915#8516]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8516
  [i915#8562]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8562
  [i915#8708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8708
  [i915#8809]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8809
  [i915#8812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8812
  [i915#8814]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8814
  [i915#8825]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/8825
  [i915#9295]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9295
  [i915#9323]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9323
  [i915#9337]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9337
  [i915#9424]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9424
  [i915#9531]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9531
  [i915#9683]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9683
  [i915#9685]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9685
  [i915#9688]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9688
  [i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732
  [i915#9809]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9809
  [i915#9812]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9812
  [i915#9833]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9833
  [i915#9906]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9906
  [i915#9917]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9917
  [i915#9934]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9934


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

  * CI: CI-20190529 -> None
  * IGT: IGT_8729 -> IGTPW_14471
  * Piglit: piglit_4509 -> None

  CI-20190529: 20190529
  CI_DRM_17922: 4f6f70eee8ddc4a78a87283d8822aaecb26d3d42 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_14471: 2461f6b28569b0a53c16bee94441e9b97a6b39e6 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  IGT_8729: 8729
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

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

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

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

* ✗ Xe.CI.FULL: failure for lib/kms: Start introducing for_each_crtc*() (rev2)
  2026-01-30 10:52 [PATCH i-g-t 00/15] lib/kms: Start introducing for_each_crtc*() Ville Syrjala
                   ` (17 preceding siblings ...)
  2026-02-03 13:48 ` ✗ i915.CI.Full: failure " Patchwork
@ 2026-02-03 14:33 ` Patchwork
  18 siblings, 0 replies; 42+ messages in thread
From: Patchwork @ 2026-02-03 14:33 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: igt-dev

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

== Series Details ==

Series: lib/kms: Start introducing for_each_crtc*() (rev2)
URL   : https://patchwork.freedesktop.org/series/160908/
State : failure

== Summary ==

CI Bug Log - changes from XEIGT_8729_FULL -> XEIGTPW_14471_FULL
====================================================

Summary
-------

  **FAILURE**

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

### IGT changes ###

#### Possible regressions ####

  * igt@kms_pm_rpm@legacy-planes:
    - shard-lnl:          [PASS][1] -> [SKIP][2]
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-7/igt@kms_pm_rpm@legacy-planes.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-1/igt@kms_pm_rpm@legacy-planes.html

  
#### Warnings ####

  * igt@kms_content_protection@atomic-hdcp14:
    - shard-bmg:          [FAIL][3] ([Intel XE#3304]) -> [SKIP][4]
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-10/igt@kms_content_protection@atomic-hdcp14.html
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@kms_content_protection@atomic-hdcp14.html

  * igt@kms_content_protection@uevent-hdcp14:
    - shard-bmg:          [FAIL][5] ([Intel XE#6707]) -> [SKIP][6]
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-9/igt@kms_content_protection@uevent-hdcp14.html
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@kms_content_protection@uevent-hdcp14.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@kms_async_flips@test-cursor-atomic:
    - shard-lnl:          NOTRUN -> [SKIP][7] ([Intel XE#664])
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-8/igt@kms_async_flips@test-cursor-atomic.html

  * igt@kms_big_fb@4-tiled-16bpp-rotate-270:
    - shard-lnl:          NOTRUN -> [SKIP][8] ([Intel XE#1407]) +4 other tests skip
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-6/igt@kms_big_fb@4-tiled-16bpp-rotate-270.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip:
    - shard-lnl:          NOTRUN -> [SKIP][9] ([Intel XE#3658])
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-2/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip.html

  * igt@kms_big_fb@linear-32bpp-rotate-270:
    - shard-bmg:          NOTRUN -> [SKIP][10] ([Intel XE#2327]) +1 other test skip
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-8/igt@kms_big_fb@linear-32bpp-rotate-270.html

  * igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-0-hflip:
    - shard-lnl:          NOTRUN -> [SKIP][11] ([Intel XE#7059])
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-4/igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-0-hflip.html

  * igt@kms_big_fb@y-tiled-8bpp-rotate-90:
    - shard-bmg:          NOTRUN -> [SKIP][12] ([Intel XE#1124]) +9 other tests skip
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-2/igt@kms_big_fb@y-tiled-8bpp-rotate-90.html

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

  * igt@kms_big_fb@yf-tiled-16bpp-rotate-270:
    - shard-lnl:          NOTRUN -> [SKIP][14] ([Intel XE#1124]) +11 other tests skip
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-7/igt@kms_big_fb@yf-tiled-16bpp-rotate-270.html

  * igt@kms_big_fb@yf-tiled-addfb:
    - shard-lnl:          NOTRUN -> [SKIP][15] ([Intel XE#1467])
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-3/igt@kms_big_fb@yf-tiled-addfb.html

  * igt@kms_big_fb@yf-tiled-addfb-size-overflow:
    - shard-bmg:          NOTRUN -> [SKIP][16] ([Intel XE#610])
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-8/igt@kms_big_fb@yf-tiled-addfb-size-overflow.html

  * igt@kms_bw@connected-linear-tiling-2-displays-1920x1080p:
    - shard-lnl:          NOTRUN -> [SKIP][17] ([Intel XE#2191]) +2 other tests skip
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-6/igt@kms_bw@connected-linear-tiling-2-displays-1920x1080p.html

  * igt@kms_bw@connected-linear-tiling-2-displays-3840x2160p:
    - shard-bmg:          [PASS][18] -> [SKIP][19] ([Intel XE#2314] / [Intel XE#2894])
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-10/igt@kms_bw@connected-linear-tiling-2-displays-3840x2160p.html
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@kms_bw@connected-linear-tiling-2-displays-3840x2160p.html

  * igt@kms_bw@connected-linear-tiling-3-displays-3840x2160p:
    - shard-bmg:          NOTRUN -> [SKIP][20] ([Intel XE#2314] / [Intel XE#2894]) +1 other test skip
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-9/igt@kms_bw@connected-linear-tiling-3-displays-3840x2160p.html

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

  * igt@kms_ccs@bad-aux-stride-y-tiled-gen12-rc-ccs-cc:
    - shard-bmg:          NOTRUN -> [SKIP][22] ([Intel XE#2887]) +6 other tests skip
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-2/igt@kms_ccs@bad-aux-stride-y-tiled-gen12-rc-ccs-cc.html

  * igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-rc-ccs:
    - shard-lnl:          NOTRUN -> [SKIP][23] ([Intel XE#2887]) +16 other tests skip
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-3/igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-rc-ccs.html

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

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

  * igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-mc-ccs:
    - shard-lnl:          NOTRUN -> [SKIP][27] ([Intel XE#3432]) +2 other tests skip
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-7/igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-mc-ccs.html

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

  * igt@kms_cdclk@mode-transition:
    - shard-bmg:          NOTRUN -> [SKIP][29] ([Intel XE#2724])
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-8/igt@kms_cdclk@mode-transition.html

  * igt@kms_cdclk@mode-transition@pipe-b-edp-1:
    - shard-lnl:          NOTRUN -> [SKIP][30] ([Intel XE#4417]) +3 other tests skip
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-2/igt@kms_cdclk@mode-transition@pipe-b-edp-1.html

  * igt@kms_cdclk@plane-scaling:
    - shard-lnl:          NOTRUN -> [SKIP][31] ([Intel XE#4416]) +3 other tests skip
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-1/igt@kms_cdclk@plane-scaling.html

  * igt@kms_chamelium_color@ctm-max:
    - shard-lnl:          NOTRUN -> [SKIP][32] ([Intel XE#306]) +2 other tests skip
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-2/igt@kms_chamelium_color@ctm-max.html
    - shard-bmg:          NOTRUN -> [SKIP][33] ([Intel XE#2325]) +1 other test skip
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@kms_chamelium_color@ctm-max.html

  * igt@kms_chamelium_edid@hdmi-edid-change-during-suspend:
    - shard-lnl:          NOTRUN -> [SKIP][34] ([Intel XE#373]) +12 other tests skip
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-7/igt@kms_chamelium_edid@hdmi-edid-change-during-suspend.html

  * igt@kms_chamelium_hpd@hdmi-hpd-storm-disable:
    - shard-bmg:          NOTRUN -> [SKIP][35] ([Intel XE#2252]) +3 other tests skip
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-4/igt@kms_chamelium_hpd@hdmi-hpd-storm-disable.html

  * igt@kms_chamelium_sharpness_filter@filter-basic:
    - shard-lnl:          NOTRUN -> [SKIP][36] ([Intel XE#6507])
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-5/igt@kms_chamelium_sharpness_filter@filter-basic.html

  * igt@kms_color_pipeline@plane-lut1d-pre-ctm3x4@pipe-c-edp-1:
    - shard-lnl:          NOTRUN -> [FAIL][37] ([Intel XE#6968]) +7 other tests fail
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-8/igt@kms_color_pipeline@plane-lut1d-pre-ctm3x4@pipe-c-edp-1.html

  * igt@kms_content_protection@atomic-dpms-hdcp14:
    - shard-lnl:          NOTRUN -> [SKIP][38] ([Intel XE#6973])
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-3/igt@kms_content_protection@atomic-dpms-hdcp14.html

  * igt@kms_content_protection@atomic-dpms@pipe-a-dp-2:
    - shard-bmg:          NOTRUN -> [FAIL][39] ([Intel XE#1178] / [Intel XE#3304]) +1 other test fail
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-8/igt@kms_content_protection@atomic-dpms@pipe-a-dp-2.html

  * igt@kms_content_protection@dp-mst-type-1:
    - shard-lnl:          NOTRUN -> [SKIP][40] ([Intel XE#307] / [Intel XE#6974])
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-2/igt@kms_content_protection@dp-mst-type-1.html

  * igt@kms_content_protection@dp-mst-type-1-suspend-resume:
    - shard-lnl:          NOTRUN -> [SKIP][41] ([Intel XE#6974])
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-6/igt@kms_content_protection@dp-mst-type-1-suspend-resume.html

  * igt@kms_content_protection@mei-interface:
    - shard-lnl:          NOTRUN -> [SKIP][42] ([Intel XE#1468])
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-3/igt@kms_content_protection@mei-interface.html

  * igt@kms_content_protection@uevent:
    - shard-lnl:          NOTRUN -> [SKIP][43] ([Intel XE#3278])
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-5/igt@kms_content_protection@uevent.html
    - shard-bmg:          NOTRUN -> [SKIP][44] ([Intel XE#2341])
   [44]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@kms_content_protection@uevent.html

  * igt@kms_cursor_crc@cursor-random-32x32:
    - shard-bmg:          NOTRUN -> [SKIP][45] ([Intel XE#2320]) +2 other tests skip
   [45]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-4/igt@kms_cursor_crc@cursor-random-32x32.html

  * igt@kms_cursor_crc@cursor-rapid-movement-256x85:
    - shard-lnl:          NOTRUN -> [SKIP][46] ([Intel XE#1424]) +3 other tests skip
   [46]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-1/igt@kms_cursor_crc@cursor-rapid-movement-256x85.html

  * igt@kms_cursor_crc@cursor-sliding-512x512:
    - shard-lnl:          NOTRUN -> [SKIP][47] ([Intel XE#2321]) +4 other tests skip
   [47]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-6/igt@kms_cursor_crc@cursor-sliding-512x512.html
    - shard-bmg:          NOTRUN -> [SKIP][48] ([Intel XE#2321]) +1 other test skip
   [48]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-1/igt@kms_cursor_crc@cursor-sliding-512x512.html

  * igt@kms_cursor_legacy@cursora-vs-flipb-varying-size:
    - shard-lnl:          NOTRUN -> [SKIP][49] ([Intel XE#309]) +2 other tests skip
   [49]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-4/igt@kms_cursor_legacy@cursora-vs-flipb-varying-size.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic:
    - shard-bmg:          [PASS][50] -> [FAIL][51] ([Intel XE#6715])
   [50]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-10/igt@kms_cursor_legacy@flip-vs-cursor-atomic.html
   [51]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-3/igt@kms_cursor_legacy@flip-vs-cursor-atomic.html

  * igt@kms_cursor_legacy@torture-bo@pipe-a:
    - shard-bmg:          [PASS][52] -> [DMESG-WARN][53] ([Intel XE#5354]) +1 other test dmesg-warn
   [52]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-4/igt@kms_cursor_legacy@torture-bo@pipe-a.html
   [53]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@kms_cursor_legacy@torture-bo@pipe-a.html

  * igt@kms_dirtyfb@psr-dirtyfb-ioctl:
    - shard-bmg:          NOTRUN -> [SKIP][54] ([Intel XE#1508])
   [54]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-9/igt@kms_dirtyfb@psr-dirtyfb-ioctl.html

  * igt@kms_dp_link_training@non-uhbr-sst:
    - shard-lnl:          NOTRUN -> [SKIP][55] ([Intel XE#4354])
   [55]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-8/igt@kms_dp_link_training@non-uhbr-sst.html

  * igt@kms_dp_linktrain_fallback@dsc-fallback:
    - shard-lnl:          NOTRUN -> [SKIP][56] ([Intel XE#4331])
   [56]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-6/igt@kms_dp_linktrain_fallback@dsc-fallback.html

  * igt@kms_dsc@dsc-with-bpc:
    - shard-lnl:          NOTRUN -> [SKIP][57] ([Intel XE#2244]) +4 other tests skip
   [57]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-1/igt@kms_dsc@dsc-with-bpc.html

  * igt@kms_dsc@dsc-with-formats:
    - shard-bmg:          NOTRUN -> [SKIP][58] ([Intel XE#2244]) +1 other test skip
   [58]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@kms_dsc@dsc-with-formats.html

  * igt@kms_flip@2x-flip-vs-dpms-off-vs-modeset:
    - shard-bmg:          [PASS][59] -> [SKIP][60] ([Intel XE#2316]) +5 other tests skip
   [59]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-3/igt@kms_flip@2x-flip-vs-dpms-off-vs-modeset.html
   [60]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@kms_flip@2x-flip-vs-dpms-off-vs-modeset.html

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

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1:
    - shard-lnl:          [PASS][62] -> [FAIL][63] ([Intel XE#301]) +1 other test fail
   [62]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-1/igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1.html
   [63]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-5/igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1.html

  * igt@kms_flip@flip-vs-suspend-interruptible:
    - shard-bmg:          [PASS][64] -> [INCOMPLETE][65] ([Intel XE#2049] / [Intel XE#2597]) +1 other test incomplete
   [64]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-4/igt@kms_flip@flip-vs-suspend-interruptible.html
   [65]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-8/igt@kms_flip@flip-vs-suspend-interruptible.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling:
    - shard-bmg:          NOTRUN -> [SKIP][66] ([Intel XE#7178])
   [66]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling:
    - shard-lnl:          NOTRUN -> [SKIP][67] ([Intel XE#7178]) +6 other tests skip
   [67]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-3/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-nv12-linear-to-nv12-linear-reflect-x:
    - shard-bmg:          NOTRUN -> [SKIP][68] ([Intel XE#7179])
   [68]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-1/igt@kms_flip_scaled_crc@flip-nv12-linear-to-nv12-linear-reflect-x.html

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

  * igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-render:
    - shard-bmg:          NOTRUN -> [SKIP][70] ([Intel XE#2312]) +3 other tests skip
   [70]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@drrs-abgr161616f-draw-render:
    - shard-bmg:          NOTRUN -> [SKIP][71] ([Intel XE#7061]) +1 other test skip
   [71]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-9/igt@kms_frontbuffer_tracking@drrs-abgr161616f-draw-render.html

  * igt@kms_frontbuffer_tracking@drrs-rgb565-draw-render:
    - shard-bmg:          NOTRUN -> [SKIP][72] ([Intel XE#2311]) +24 other tests skip
   [72]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-4/igt@kms_frontbuffer_tracking@drrs-rgb565-draw-render.html

  * igt@kms_frontbuffer_tracking@fbc-1p-offscreen-pri-shrfb-draw-blt:
    - shard-bmg:          NOTRUN -> [SKIP][73] ([Intel XE#4141]) +6 other tests skip
   [73]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@kms_frontbuffer_tracking@fbc-1p-offscreen-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-render:
    - shard-lnl:          NOTRUN -> [SKIP][74] ([Intel XE#651]) +14 other tests skip
   [74]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-7/igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-render.html

  * igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-indfb-draw-render:
    - shard-lnl:          NOTRUN -> [SKIP][75] ([Intel XE#656]) +49 other tests skip
   [75]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-4/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-pri-indfb-draw-render.html

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

  * igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-wc:
    - shard-bmg:          NOTRUN -> [SKIP][77] ([Intel XE#2313]) +15 other tests skip
   [77]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-1/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-wc.html

  * igt@kms_hdr@brightness-with-hdr:
    - shard-lnl:          NOTRUN -> [SKIP][78] ([Intel XE#3374] / [Intel XE#3544])
   [78]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-7/igt@kms_hdr@brightness-with-hdr.html

  * igt@kms_joiner@basic-big-joiner:
    - shard-lnl:          NOTRUN -> [SKIP][79] ([Intel XE#6901])
   [79]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-7/igt@kms_joiner@basic-big-joiner.html
    - shard-bmg:          NOTRUN -> [SKIP][80] ([Intel XE#6901])
   [80]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-10/igt@kms_joiner@basic-big-joiner.html

  * igt@kms_joiner@basic-ultra-joiner:
    - shard-lnl:          NOTRUN -> [SKIP][81] ([Intel XE#6900])
   [81]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-6/igt@kms_joiner@basic-ultra-joiner.html

  * igt@kms_panel_fitting@legacy:
    - shard-bmg:          NOTRUN -> [SKIP][82] ([Intel XE#2486])
   [82]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-8/igt@kms_panel_fitting@legacy.html

  * igt@kms_pipe_stress@stress-xrgb8888-yftiled:
    - shard-bmg:          NOTRUN -> [SKIP][83] ([Intel XE#6912])
   [83]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-4/igt@kms_pipe_stress@stress-xrgb8888-yftiled.html

  * igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier-source-clamping@pipe-b-plane-5:
    - shard-lnl:          NOTRUN -> [SKIP][84] ([Intel XE#7131]) +5 other tests skip
   [84]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-1/igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier-source-clamping@pipe-b-plane-5.html

  * igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier@pipe-b-plane-0:
    - shard-lnl:          NOTRUN -> [SKIP][85] ([Intel XE#7130]) +23 other tests skip
   [85]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-4/igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier@pipe-b-plane-0.html

  * igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-modifier-source-clamping:
    - shard-bmg:          NOTRUN -> [SKIP][86] ([Intel XE#7111] / [Intel XE#7130] / [Intel XE#7131]) +1 other test skip
   [86]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-8/igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-modifier-source-clamping.html

  * igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-modifier-source-clamping@pipe-b-plane-0:
    - shard-bmg:          NOTRUN -> [SKIP][87] ([Intel XE#7130]) +9 other tests skip
   [87]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-8/igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-modifier-source-clamping@pipe-b-plane-0.html

  * igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-modifier-source-clamping@pipe-b-plane-5:
    - shard-bmg:          NOTRUN -> [SKIP][88] ([Intel XE#7111] / [Intel XE#7131]) +1 other test skip
   [88]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-8/igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-modifier-source-clamping@pipe-b-plane-5.html

  * igt@kms_plane@pixel-format-linear-modifier-source-clamping@pipe-b-plane-5:
    - shard-bmg:          NOTRUN -> [SKIP][89] ([Intel XE#7131]) +3 other tests skip
   [89]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-2/igt@kms_plane@pixel-format-linear-modifier-source-clamping@pipe-b-plane-5.html

  * igt@kms_plane@pixel-format-y-tiled-modifier-source-clamping:
    - shard-lnl:          NOTRUN -> [SKIP][90] ([Intel XE#7130] / [Intel XE#7131]) +1 other test skip
   [90]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-2/igt@kms_plane@pixel-format-y-tiled-modifier-source-clamping.html

  * igt@kms_plane_lowres@tiling-y:
    - shard-bmg:          NOTRUN -> [SKIP][91] ([Intel XE#2393])
   [91]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-7/igt@kms_plane_lowres@tiling-y.html

  * igt@kms_plane_lowres@tiling-yf:
    - shard-lnl:          NOTRUN -> [SKIP][92] ([Intel XE#599])
   [92]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-3/igt@kms_plane_lowres@tiling-yf.html

  * igt@kms_plane_multiple@2x-tiling-none:
    - shard-lnl:          NOTRUN -> [SKIP][93] ([Intel XE#4596]) +1 other test skip
   [93]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-1/igt@kms_plane_multiple@2x-tiling-none.html
    - shard-bmg:          NOTRUN -> [SKIP][94] ([Intel XE#4596])
   [94]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@kms_plane_multiple@2x-tiling-none.html

  * igt@kms_plane_multiple@tiling-yf:
    - shard-lnl:          NOTRUN -> [SKIP][95] ([Intel XE#5020])
   [95]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-3/igt@kms_plane_multiple@tiling-yf.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-5-upscale-20x20@pipe-c:
    - shard-lnl:          NOTRUN -> [SKIP][96] ([Intel XE#6886]) +17 other tests skip
   [96]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-6/igt@kms_plane_scaling@planes-downscale-factor-0-5-upscale-20x20@pipe-c.html

  * igt@kms_pm_dc@dc6-dpms:
    - shard-lnl:          NOTRUN -> [FAIL][97] ([Intel XE#718])
   [97]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-4/igt@kms_pm_dc@dc6-dpms.html

  * igt@kms_pm_dc@dc6-psr:
    - shard-lnl:          [PASS][98] -> [FAIL][99] ([Intel XE#718])
   [98]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-8/igt@kms_pm_dc@dc6-psr.html
   [99]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-6/igt@kms_pm_dc@dc6-psr.html

  * igt@kms_pm_dc@deep-pkgc:
    - shard-lnl:          [PASS][100] -> [FAIL][101] ([Intel XE#2029])
   [100]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-3/igt@kms_pm_dc@deep-pkgc.html
   [101]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-6/igt@kms_pm_dc@deep-pkgc.html

  * igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
    - shard-lnl:          NOTRUN -> [SKIP][102] ([Intel XE#1439] / [Intel XE#3141]) +1 other test skip
   [102]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-3/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html

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

  * igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf:
    - shard-lnl:          NOTRUN -> [SKIP][104] ([Intel XE#1406] / [Intel XE#2893] / [Intel XE#4608]) +2 other tests skip
   [104]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-1/igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf.html

  * igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-exceed-sf@pipe-b-edp-1:
    - shard-lnl:          NOTRUN -> [SKIP][105] ([Intel XE#1406] / [Intel XE#4608]) +5 other tests skip
   [105]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-3/igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-exceed-sf@pipe-b-edp-1.html

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

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

  * igt@kms_psr@fbc-psr2-sprite-plane-move@edp-1:
    - shard-lnl:          NOTRUN -> [SKIP][108] ([Intel XE#1406] / [Intel XE#4609]) +3 other tests skip
   [108]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-7/igt@kms_psr@fbc-psr2-sprite-plane-move@edp-1.html

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

  * igt@kms_psr@psr-suspend:
    - shard-bmg:          NOTRUN -> [SKIP][110] ([Intel XE#1406] / [Intel XE#2234] / [Intel XE#2850]) +8 other tests skip
   [110]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-2/igt@kms_psr@psr-suspend.html

  * igt@kms_rotation_crc@primary-rotation-90:
    - shard-lnl:          NOTRUN -> [SKIP][111] ([Intel XE#3414] / [Intel XE#3904]) +2 other tests skip
   [111]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-8/igt@kms_rotation_crc@primary-rotation-90.html

  * igt@kms_rotation_crc@primary-y-tiled-reflect-x-0:
    - shard-lnl:          NOTRUN -> [SKIP][112] ([Intel XE#1127])
   [112]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-4/igt@kms_rotation_crc@primary-y-tiled-reflect-x-0.html

  * igt@kms_setmode@invalid-clone-exclusive-crtc:
    - shard-lnl:          NOTRUN -> [SKIP][113] ([Intel XE#1435]) +1 other test skip
   [113]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-4/igt@kms_setmode@invalid-clone-exclusive-crtc.html

  * igt@kms_setmode@invalid-clone-single-crtc:
    - shard-bmg:          [PASS][114] -> [SKIP][115] ([Intel XE#1435])
   [114]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-8/igt@kms_setmode@invalid-clone-single-crtc.html
   [115]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@kms_setmode@invalid-clone-single-crtc.html

  * igt@kms_sharpness_filter@invalid-filter-with-plane:
    - shard-bmg:          NOTRUN -> [SKIP][116] ([Intel XE#6503]) +1 other test skip
   [116]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-2/igt@kms_sharpness_filter@invalid-filter-with-plane.html

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-bmg:          NOTRUN -> [SKIP][117] ([Intel XE#2426])
   [117]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-1/igt@kms_tiled_display@basic-test-pattern.html

  * igt@kms_tiled_display@basic-test-pattern-with-chamelium:
    - shard-lnl:          NOTRUN -> [SKIP][118] ([Intel XE#362])
   [118]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-3/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html

  * igt@kms_tv_load_detect@load-detect:
    - shard-bmg:          NOTRUN -> [SKIP][119] ([Intel XE#2450])
   [119]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@kms_tv_load_detect@load-detect.html

  * igt@kms_vrr@flip-basic:
    - shard-bmg:          NOTRUN -> [SKIP][120] ([Intel XE#1499]) +1 other test skip
   [120]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-10/igt@kms_vrr@flip-basic.html

  * igt@kms_vrr@flipline:
    - shard-lnl:          NOTRUN -> [FAIL][121] ([Intel XE#4227]) +1 other test fail
   [121]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-4/igt@kms_vrr@flipline.html

  * igt@kms_vrr@negative-basic:
    - shard-lnl:          NOTRUN -> [SKIP][122] ([Intel XE#1499]) +1 other test skip
   [122]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-3/igt@kms_vrr@negative-basic.html

  * igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all:
    - shard-bmg:          [PASS][123] -> [FAIL][124] ([Intel XE#5937])
   [123]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-1/igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all.html
   [124]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-4/igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all.html

  * igt@xe_compute@ccs-mode-basic:
    - shard-lnl:          NOTRUN -> [SKIP][125] ([Intel XE#1447])
   [125]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-8/igt@xe_compute@ccs-mode-basic.html

  * igt@xe_compute_preempt@compute-preempt-many-vram-evict:
    - shard-lnl:          NOTRUN -> [SKIP][126] ([Intel XE#5191])
   [126]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-5/igt@xe_compute_preempt@compute-preempt-many-vram-evict.html

  * igt@xe_create@multigpu-create-massive-size:
    - shard-lnl:          NOTRUN -> [SKIP][127] ([Intel XE#944]) +4 other tests skip
   [127]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-1/igt@xe_create@multigpu-create-massive-size.html

  * igt@xe_eudebug@basic-vm-bind-ufence:
    - shard-bmg:          NOTRUN -> [SKIP][128] ([Intel XE#4837]) +1 other test skip
   [128]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-9/igt@xe_eudebug@basic-vm-bind-ufence.html

  * igt@xe_eudebug@read-metadata:
    - shard-lnl:          NOTRUN -> [SKIP][129] ([Intel XE#4837]) +10 other tests skip
   [129]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-1/igt@xe_eudebug@read-metadata.html

  * igt@xe_eudebug_online@breakpoint-many-sessions-tiles:
    - shard-bmg:          NOTRUN -> [SKIP][130] ([Intel XE#4837] / [Intel XE#6665]) +2 other tests skip
   [130]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-9/igt@xe_eudebug_online@breakpoint-many-sessions-tiles.html

  * igt@xe_eudebug_online@interrupt-other-debuggable:
    - shard-lnl:          NOTRUN -> [SKIP][131] ([Intel XE#4837] / [Intel XE#6665]) +5 other tests skip
   [131]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-6/igt@xe_eudebug_online@interrupt-other-debuggable.html

  * igt@xe_eudebug_sriov@deny-sriov:
    - shard-lnl:          NOTRUN -> [SKIP][132] ([Intel XE#4518])
   [132]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-3/igt@xe_eudebug_sriov@deny-sriov.html

  * igt@xe_evict@evict-beng-cm-threads-small:
    - shard-lnl:          NOTRUN -> [SKIP][133] ([Intel XE#688]) +14 other tests skip
   [133]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-1/igt@xe_evict@evict-beng-cm-threads-small.html

  * igt@xe_evict@evict-mixed-many-threads-small:
    - shard-bmg:          [PASS][134] -> [INCOMPLETE][135] ([Intel XE#6321])
   [134]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-4/igt@xe_evict@evict-mixed-many-threads-small.html
   [135]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-8/igt@xe_evict@evict-mixed-many-threads-small.html

  * igt@xe_evict@evict-small-external-multi-queue-cm:
    - shard-bmg:          NOTRUN -> [SKIP][136] ([Intel XE#7140])
   [136]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-9/igt@xe_evict@evict-small-external-multi-queue-cm.html

  * igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr:
    - shard-bmg:          NOTRUN -> [SKIP][137] ([Intel XE#2322]) +8 other tests skip
   [137]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-3/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr.html

  * igt@xe_exec_basic@multigpu-many-execqueues-many-vm-userptr-invalidate-race:
    - shard-lnl:          NOTRUN -> [SKIP][138] ([Intel XE#1392]) +10 other tests skip
   [138]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-1/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-userptr-invalidate-race.html

  * igt@xe_exec_fault_mode@many-execqueues-multi-queue-userptr-invalidate-prefetch:
    - shard-bmg:          NOTRUN -> [SKIP][139] ([Intel XE#7136]) +9 other tests skip
   [139]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-4/igt@xe_exec_fault_mode@many-execqueues-multi-queue-userptr-invalidate-prefetch.html

  * igt@xe_exec_fault_mode@once-multi-queue-userptr-rebind:
    - shard-lnl:          NOTRUN -> [SKIP][140] ([Intel XE#7136]) +17 other tests skip
   [140]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-2/igt@xe_exec_fault_mode@once-multi-queue-userptr-rebind.html

  * igt@xe_exec_multi_queue@many-queues-preempt-mode-userptr:
    - shard-lnl:          NOTRUN -> [SKIP][141] ([Intel XE#6874]) +33 other tests skip
   [141]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-4/igt@xe_exec_multi_queue@many-queues-preempt-mode-userptr.html

  * igt@xe_exec_multi_queue@one-queue-preempt-mode-fault-dyn-priority-smem:
    - shard-bmg:          NOTRUN -> [SKIP][142] ([Intel XE#6874]) +14 other tests skip
   [142]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-1/igt@xe_exec_multi_queue@one-queue-preempt-mode-fault-dyn-priority-smem.html

  * igt@xe_exec_reset@gt-reset-stress:
    - shard-lnl:          NOTRUN -> [DMESG-WARN][143] ([Intel XE#7023])
   [143]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-4/igt@xe_exec_reset@gt-reset-stress.html

  * igt@xe_exec_system_allocator@many-64k-mmap-huge:
    - shard-lnl:          NOTRUN -> [SKIP][144] ([Intel XE#5007])
   [144]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-3/igt@xe_exec_system_allocator@many-64k-mmap-huge.html

  * igt@xe_exec_system_allocator@many-64k-mmap-new-huge:
    - shard-bmg:          NOTRUN -> [SKIP][145] ([Intel XE#5007]) +1 other test skip
   [145]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@xe_exec_system_allocator@many-64k-mmap-new-huge.html

  * igt@xe_exec_system_allocator@once-mmap-new-huge-nomemset:
    - shard-bmg:          NOTRUN -> [SKIP][146] ([Intel XE#4943]) +14 other tests skip
   [146]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-3/igt@xe_exec_system_allocator@once-mmap-new-huge-nomemset.html

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

  * igt@xe_exec_system_allocator@process-many-large-execqueues-new:
    - shard-bmg:          [PASS][148] -> [ABORT][149] ([Intel XE#7169])
   [148]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-4/igt@xe_exec_system_allocator@process-many-large-execqueues-new.html
   [149]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-10/igt@xe_exec_system_allocator@process-many-large-execqueues-new.html

  * igt@xe_exec_system_allocator@twice-mmap-huge:
    - shard-lnl:          NOTRUN -> [SKIP][150] ([Intel XE#4943]) +35 other tests skip
   [150]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-5/igt@xe_exec_system_allocator@twice-mmap-huge.html

  * igt@xe_exec_threads@threads-multi-queue-cm-shared-vm-rebind:
    - shard-lnl:          NOTRUN -> [SKIP][151] ([Intel XE#7138]) +13 other tests skip
   [151]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-1/igt@xe_exec_threads@threads-multi-queue-cm-shared-vm-rebind.html

  * igt@xe_exec_threads@threads-multi-queue-mixed-shared-vm-rebind:
    - shard-bmg:          NOTRUN -> [SKIP][152] ([Intel XE#7138]) +4 other tests skip
   [152]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@xe_exec_threads@threads-multi-queue-mixed-shared-vm-rebind.html

  * igt@xe_live_ktest@xe_migrate@xe_validate_ccs_kunit:
    - shard-lnl:          NOTRUN -> [SKIP][153] ([Intel XE#2229])
   [153]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-3/igt@xe_live_ktest@xe_migrate@xe_validate_ccs_kunit.html

  * igt@xe_media_fill@media-fill:
    - shard-lnl:          NOTRUN -> [SKIP][154] ([Intel XE#560])
   [154]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-8/igt@xe_media_fill@media-fill.html

  * igt@xe_module_load@load:
    - shard-lnl:          ([PASS][155], [PASS][156], [PASS][157], [PASS][158], [PASS][159], [PASS][160], [PASS][161], [PASS][162], [PASS][163], [PASS][164], [PASS][165], [PASS][166], [PASS][167], [PASS][168], [PASS][169], [PASS][170], [PASS][171], [PASS][172], [PASS][173], [PASS][174], [PASS][175]) -> ([PASS][176], [PASS][177], [PASS][178], [PASS][179], [PASS][180], [PASS][181], [PASS][182], [PASS][183], [PASS][184], [PASS][185], [PASS][186], [PASS][187], [PASS][188], [PASS][189], [PASS][190], [PASS][191], [PASS][192], [PASS][193], [PASS][194], [PASS][195], [PASS][196], [SKIP][197], [PASS][198], [PASS][199], [PASS][200], [PASS][201]) ([Intel XE#378])
   [155]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-1/igt@xe_module_load@load.html
   [156]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-4/igt@xe_module_load@load.html
   [157]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-3/igt@xe_module_load@load.html
   [158]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-2/igt@xe_module_load@load.html
   [159]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-2/igt@xe_module_load@load.html
   [160]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-2/igt@xe_module_load@load.html
   [161]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-1/igt@xe_module_load@load.html
   [162]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-4/igt@xe_module_load@load.html
   [163]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-3/igt@xe_module_load@load.html
   [164]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-3/igt@xe_module_load@load.html
   [165]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-4/igt@xe_module_load@load.html
   [166]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-8/igt@xe_module_load@load.html
   [167]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-8/igt@xe_module_load@load.html
   [168]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-8/igt@xe_module_load@load.html
   [169]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-7/igt@xe_module_load@load.html
   [170]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-7/igt@xe_module_load@load.html
   [171]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-7/igt@xe_module_load@load.html
   [172]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-5/igt@xe_module_load@load.html
   [173]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-5/igt@xe_module_load@load.html
   [174]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-5/igt@xe_module_load@load.html
   [175]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-1/igt@xe_module_load@load.html
   [176]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-3/igt@xe_module_load@load.html
   [177]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-3/igt@xe_module_load@load.html
   [178]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-3/igt@xe_module_load@load.html
   [179]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-3/igt@xe_module_load@load.html
   [180]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-2/igt@xe_module_load@load.html
   [181]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-6/igt@xe_module_load@load.html
   [182]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-6/igt@xe_module_load@load.html
   [183]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-2/igt@xe_module_load@load.html
   [184]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-2/igt@xe_module_load@load.html
   [185]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-2/igt@xe_module_load@load.html
   [186]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-4/igt@xe_module_load@load.html
   [187]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-4/igt@xe_module_load@load.html
   [188]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-6/igt@xe_module_load@load.html
   [189]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-8/igt@xe_module_load@load.html
   [190]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-7/igt@xe_module_load@load.html
   [191]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-7/igt@xe_module_load@load.html
   [192]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-7/igt@xe_module_load@load.html
   [193]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-8/igt@xe_module_load@load.html
   [194]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-8/igt@xe_module_load@load.html
   [195]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-8/igt@xe_module_load@load.html
   [196]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-1/igt@xe_module_load@load.html
   [197]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-5/igt@xe_module_load@load.html
   [198]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-5/igt@xe_module_load@load.html
   [199]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-5/igt@xe_module_load@load.html
   [200]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-1/igt@xe_module_load@load.html
   [201]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-1/igt@xe_module_load@load.html
    - shard-bmg:          ([PASS][202], [PASS][203], [PASS][204], [PASS][205], [PASS][206], [PASS][207], [PASS][208], [PASS][209], [PASS][210], [PASS][211], [PASS][212], [PASS][213], [PASS][214], [PASS][215], [PASS][216], [PASS][217], [PASS][218], [PASS][219], [PASS][220], [PASS][221], [PASS][222], [PASS][223], [PASS][224], [PASS][225], [PASS][226]) -> ([PASS][227], [PASS][228], [PASS][229], [PASS][230], [PASS][231], [PASS][232], [PASS][233], [PASS][234], [PASS][235], [PASS][236], [PASS][237], [PASS][238], [PASS][239], [PASS][240], [SKIP][241], [PASS][242], [PASS][243], [PASS][244], [PASS][245], [PASS][246], [PASS][247], [PASS][248], [PASS][249], [PASS][250], [PASS][251], [PASS][252]) ([Intel XE#2457])
   [202]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-8/igt@xe_module_load@load.html
   [203]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-8/igt@xe_module_load@load.html
   [204]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-8/igt@xe_module_load@load.html
   [205]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-8/igt@xe_module_load@load.html
   [206]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-10/igt@xe_module_load@load.html
   [207]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-10/igt@xe_module_load@load.html
   [208]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-3/igt@xe_module_load@load.html
   [209]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-10/igt@xe_module_load@load.html
   [210]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-3/igt@xe_module_load@load.html
   [211]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-3/igt@xe_module_load@load.html
   [212]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-1/igt@xe_module_load@load.html
   [213]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-1/igt@xe_module_load@load.html
   [214]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-1/igt@xe_module_load@load.html
   [215]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-2/igt@xe_module_load@load.html
   [216]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-2/igt@xe_module_load@load.html
   [217]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-2/igt@xe_module_load@load.html
   [218]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-9/igt@xe_module_load@load.html
   [219]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-9/igt@xe_module_load@load.html
   [220]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-4/igt@xe_module_load@load.html
   [221]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-4/igt@xe_module_load@load.html
   [222]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-9/igt@xe_module_load@load.html
   [223]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-9/igt@xe_module_load@load.html
   [224]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-7/igt@xe_module_load@load.html
   [225]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-7/igt@xe_module_load@load.html
   [226]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-7/igt@xe_module_load@load.html
   [227]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@xe_module_load@load.html
   [228]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-2/igt@xe_module_load@load.html
   [229]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-8/igt@xe_module_load@load.html
   [230]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-8/igt@xe_module_load@load.html
   [231]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-8/igt@xe_module_load@load.html
   [232]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-8/igt@xe_module_load@load.html
   [233]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-3/igt@xe_module_load@load.html
   [234]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-2/igt@xe_module_load@load.html
   [235]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-2/igt@xe_module_load@load.html
   [236]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-3/igt@xe_module_load@load.html
   [237]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-3/igt@xe_module_load@load.html
   [238]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-3/igt@xe_module_load@load.html
   [239]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-9/igt@xe_module_load@load.html
   [240]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-9/igt@xe_module_load@load.html
   [241]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-9/igt@xe_module_load@load.html
   [242]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-10/igt@xe_module_load@load.html
   [243]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-4/igt@xe_module_load@load.html
   [244]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-10/igt@xe_module_load@load.html
   [245]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-10/igt@xe_module_load@load.html
   [246]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-7/igt@xe_module_load@load.html
   [247]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-4/igt@xe_module_load@load.html
   [248]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-1/igt@xe_module_load@load.html
   [249]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-1/igt@xe_module_load@load.html
   [250]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@xe_module_load@load.html
   [251]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-7/igt@xe_module_load@load.html
   [252]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@xe_module_load@load.html

  * igt@xe_multigpu_svm@mgpu-migration-basic:
    - shard-lnl:          NOTRUN -> [SKIP][253] ([Intel XE#6964]) +3 other tests skip
   [253]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-3/igt@xe_multigpu_svm@mgpu-migration-basic.html

  * igt@xe_multigpu_svm@mgpu-pagefault-conflict:
    - shard-bmg:          NOTRUN -> [SKIP][254] ([Intel XE#6964]) +1 other test skip
   [254]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-8/igt@xe_multigpu_svm@mgpu-pagefault-conflict.html

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

  * igt@xe_pm@s3-d3cold-basic-exec:
    - shard-lnl:          NOTRUN -> [SKIP][256] ([Intel XE#2284] / [Intel XE#366]) +2 other tests skip
   [256]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-6/igt@xe_pm@s3-d3cold-basic-exec.html

  * igt@xe_pm@s3-multiple-execs:
    - shard-lnl:          NOTRUN -> [SKIP][257] ([Intel XE#584])
   [257]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-3/igt@xe_pm@s3-multiple-execs.html

  * igt@xe_pm@vram-d3cold-threshold:
    - shard-bmg:          NOTRUN -> [SKIP][258] ([Intel XE#579])
   [258]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-10/igt@xe_pm@vram-d3cold-threshold.html

  * igt@xe_query@multigpu-query-invalid-cs-cycles:
    - shard-bmg:          NOTRUN -> [SKIP][259] ([Intel XE#944]) +1 other test skip
   [259]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@xe_query@multigpu-query-invalid-cs-cycles.html

  * igt@xe_sriov_scheduling@nonpreempt-engine-resets:
    - shard-lnl:          NOTRUN -> [SKIP][260] ([Intel XE#4351])
   [260]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-8/igt@xe_sriov_scheduling@nonpreempt-engine-resets.html

  * igt@xe_sriov_vram@vf-access-beyond:
    - shard-lnl:          NOTRUN -> [SKIP][261] ([Intel XE#6376])
   [261]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-8/igt@xe_sriov_vram@vf-access-beyond.html

  
#### Possible fixes ####

  * igt@kms_cursor_legacy@flip-vs-cursor-legacy:
    - shard-bmg:          [FAIL][262] ([Intel XE#5299]) -> [PASS][263]
   [262]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-9/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html
   [263]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-7/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html

  * igt@kms_flip@2x-flip-vs-suspend-interruptible:
    - shard-bmg:          [DMESG-WARN][264] ([Intel XE#5208]) -> [PASS][265]
   [264]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-3/igt@kms_flip@2x-flip-vs-suspend-interruptible.html
   [265]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-4/igt@kms_flip@2x-flip-vs-suspend-interruptible.html

  * igt@kms_flip@2x-plain-flip-fb-recreate:
    - shard-bmg:          [FAIL][266] ([Intel XE#5408] / [Intel XE#6266]) -> [PASS][267]
   [266]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-2/igt@kms_flip@2x-plain-flip-fb-recreate.html
   [267]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-3/igt@kms_flip@2x-plain-flip-fb-recreate.html

  * igt@kms_flip@2x-plain-flip-fb-recreate@ab-dp2-hdmi-a3:
    - shard-bmg:          [FAIL][268] ([Intel XE#6266]) -> [PASS][269]
   [268]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-2/igt@kms_flip@2x-plain-flip-fb-recreate@ab-dp2-hdmi-a3.html
   [269]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-3/igt@kms_flip@2x-plain-flip-fb-recreate@ab-dp2-hdmi-a3.html

  * igt@kms_flip@flip-vs-suspend:
    - shard-bmg:          [DMESG-WARN][270] ([Intel XE#3428] / [Intel XE#5208]) -> [PASS][271]
   [270]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-3/igt@kms_flip@flip-vs-suspend.html
   [271]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-9/igt@kms_flip@flip-vs-suspend.html

  * igt@kms_flip@flip-vs-suspend@a-dp2:
    - shard-bmg:          [DMESG-WARN][272] ([Intel XE#3428]) -> [PASS][273] +1 other test pass
   [272]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-3/igt@kms_flip@flip-vs-suspend@a-dp2.html
   [273]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-9/igt@kms_flip@flip-vs-suspend@a-dp2.html

  * igt@kms_hdr@invalid-hdr:
    - shard-bmg:          [SKIP][274] ([Intel XE#1503]) -> [PASS][275]
   [274]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-4/igt@kms_hdr@invalid-hdr.html
   [275]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@kms_hdr@invalid-hdr.html

  * igt@kms_pm_dc@dc5-dpms:
    - shard-lnl:          [FAIL][276] ([Intel XE#718]) -> [PASS][277]
   [276]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-1/igt@kms_pm_dc@dc5-dpms.html
   [277]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-3/igt@kms_pm_dc@dc5-dpms.html

  * igt@kms_setmode@basic:
    - shard-bmg:          [FAIL][278] ([Intel XE#6361]) -> [PASS][279] +1 other test pass
   [278]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-3/igt@kms_setmode@basic.html
   [279]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-10/igt@kms_setmode@basic.html

  * igt@xe_configfs@gt-types-allowed:
    - shard-lnl:          [DMESG-WARN][280] -> [PASS][281]
   [280]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-8/igt@xe_configfs@gt-types-allowed.html
   [281]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-1/igt@xe_configfs@gt-types-allowed.html

  * igt@xe_fault_injection@vm-bind-fail-xe_pt_update_ops_prepare:
    - shard-bmg:          [ABORT][282] -> [PASS][283]
   [282]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-4/igt@xe_fault_injection@vm-bind-fail-xe_pt_update_ops_prepare.html
   [283]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@xe_fault_injection@vm-bind-fail-xe_pt_update_ops_prepare.html

  * igt@xe_pm@s2idle-mocs:
    - shard-bmg:          [INCOMPLETE][284] ([Intel XE#4504]) -> [PASS][285]
   [284]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-1/igt@xe_pm@s2idle-mocs.html
   [285]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-3/igt@xe_pm@s2idle-mocs.html

  * igt@xe_pm@s4-mocs:
    - shard-lnl:          [ABORT][286] ([Intel XE#7169]) -> [PASS][287]
   [286]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-lnl-2/igt@xe_pm@s4-mocs.html
   [287]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-lnl-8/igt@xe_pm@s4-mocs.html

  * igt@xe_sriov_flr@flr-vfs-parallel:
    - shard-bmg:          [FAIL][288] ([Intel XE#6569]) -> [PASS][289]
   [288]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-2/igt@xe_sriov_flr@flr-vfs-parallel.html
   [289]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-8/igt@xe_sriov_flr@flr-vfs-parallel.html

  
#### Warnings ####

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-move:
    - shard-bmg:          [SKIP][290] ([Intel XE#4141]) -> [SKIP][291] ([Intel XE#2312]) +2 other tests skip
   [290]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-2/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-move.html
   [291]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-move.html

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

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-indfb-plflip-blt:
    - shard-bmg:          [ABORT][294] ([Intel XE#7169]) -> [SKIP][295] ([Intel XE#2313])
   [294]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-9/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-indfb-plflip-blt.html
   [295]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-10/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-indfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-shrfb-pgflip-blt:
    - shard-bmg:          [SKIP][296] ([Intel XE#2313]) -> [SKIP][297] ([Intel XE#2312]) +8 other tests skip
   [296]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-1/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-shrfb-pgflip-blt.html
   [297]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-5/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-shrfb-pgflip-blt.html

  * igt@kms_hdr@brightness-with-hdr:
    - shard-bmg:          [SKIP][298] ([Intel XE#3544]) -> [SKIP][299] ([Intel XE#3374] / [Intel XE#3544])
   [298]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-10/igt@kms_hdr@brightness-with-hdr.html
   [299]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-8/igt@kms_hdr@brightness-with-hdr.html

  * igt@kms_tiled_display@basic-test-pattern-with-chamelium:
    - shard-bmg:          [SKIP][300] ([Intel XE#2509]) -> [SKIP][301] ([Intel XE#2426])
   [300]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_8729/shard-bmg-10/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
   [301]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_14471/shard-bmg-7/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html

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

  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [Intel XE#1127]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1127
  [Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
  [Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
  [Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
  [Intel XE#1407]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1407
  [Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
  [Intel XE#1424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1424
  [Intel XE#1435]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1435
  [Intel XE#1439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1439
  [Intel XE#1447]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1447
  [Intel XE#1467]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1467
  [Intel XE#1468]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1468
  [Intel XE#1477]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1477
  [Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
  [Intel XE#1499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1499
  [Intel XE#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
  [Intel XE#1508]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1508
  [Intel XE#2029]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2029
  [Intel XE#2049]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2049
  [Intel XE#2191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2191
  [Intel XE#2229]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2229
  [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#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#2312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2312
  [Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
  [Intel XE#2314]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2314
  [Intel XE#2316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2316
  [Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
  [Intel XE#2321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2321
  [Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
  [Intel XE#2325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2325
  [Intel XE#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
  [Intel XE#2341]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2341
  [Intel XE#2387]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2387
  [Intel XE#2393]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2393
  [Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
  [Intel XE#2450]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2450
  [Intel XE#2457]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2457
  [Intel XE#2486]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2486
  [Intel XE#2509]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2509
  [Intel XE#2597]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2597
  [Intel XE#2652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2652
  [Intel XE#2724]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2724
  [Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
  [Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
  [Intel XE#2893]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2893
  [Intel XE#2894]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2894
  [Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
  [Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306
  [Intel XE#307]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/307
  [Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
  [Intel XE#3141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3141
  [Intel XE#3278]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3278
  [Intel XE#3304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3304
  [Intel XE#3374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3374
  [Intel XE#3414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3414
  [Intel XE#3428]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3428
  [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#362]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/362
  [Intel XE#3658]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3658
  [Intel XE#366]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/366
  [Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
  [Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
  [Intel XE#378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/378
  [Intel XE#3904]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3904
  [Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
  [Intel XE#4227]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4227
  [Intel XE#4331]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4331
  [Intel XE#4351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4351
  [Intel XE#4354]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4354
  [Intel XE#4416]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4416
  [Intel XE#4417]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4417
  [Intel XE#4504]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4504
  [Intel XE#4518]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4518
  [Intel XE#4596]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4596
  [Intel XE#4608]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4608
  [Intel XE#4609]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4609
  [Intel XE#4837]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4837
  [Intel XE#4943]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4943
  [Intel XE#5007]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5007
  [Intel XE#5020]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5020
  [Intel XE#5191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5191
  [Intel XE#5208]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5208
  [Intel XE#5299]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5299
  [Intel XE#5354]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5354
  [Intel XE#5408]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5408
  [Intel XE#560]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/560
  [Intel XE#579]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/579
  [Intel XE#584]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/584
  [Intel XE#5937]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5937
  [Intel XE#599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/599
  [Intel XE#610]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/610
  [Intel XE#6196]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6196
  [Intel XE#6266]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6266
  [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#6361]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6361
  [Intel XE#6376]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6376
  [Intel XE#6503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6503
  [Intel XE#6507]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6507
  [Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
  [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#664]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/664
  [Intel XE#6665]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6665
  [Intel XE#6707]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6707
  [Intel XE#6715]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6715
  [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#6900]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6900
  [Intel XE#6901]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6901
  [Intel XE#6912]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6912
  [Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
  [Intel XE#6968]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6968
  [Intel XE#6973]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6973
  [Intel XE#6974]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6974
  [Intel XE#7023]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7023
  [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#7111]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7111
  [Intel XE#7130]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7130
  [Intel XE#7131]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7131
  [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#7140]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7140
  [Intel XE#7169]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7169
  [Intel XE#7174]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7174
  [Intel XE#7178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7178
  [Intel XE#7179]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7179
  [Intel XE#718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/718
  [Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
  [Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
  [Intel XE#977]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/977


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

  * IGT: IGT_8729 -> IGTPW_14471
  * Linux: xe-4480-88c5cd5324a45f418e99c62974a746596bc81d93 -> xe-4487-4f6f70eee8ddc4a78a87283d8822aaecb26d3d42

  IGTPW_14471: 2461f6b28569b0a53c16bee94441e9b97a6b39e6 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  IGT_8729: 8729
  xe-4480-88c5cd5324a45f418e99c62974a746596bc81d93: 88c5cd5324a45f418e99c62974a746596bc81d93
  xe-4487-4f6f70eee8ddc4a78a87283d8822aaecb26d3d42: 4f6f70eee8ddc4a78a87283d8822aaecb26d3d42

== Logs ==

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

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

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

end of thread, other threads:[~2026-02-03 14:34 UTC | newest]

Thread overview: 42+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-30 10:52 [PATCH i-g-t 00/15] lib/kms: Start introducing for_each_crtc*() Ville Syrjala
2026-01-30 10:52 ` [PATCH i-g-t 01/15] lib/kms: Introduce for_each_crtc*() Ville Syrjala
2026-01-30 13:38   ` Jani Nikula
2026-01-30 15:36     ` Ville Syrjälä
2026-02-02 11:10       ` Jani Nikula
2026-02-02 15:31         ` Ville Syrjälä
2026-01-30 10:52 ` [PATCH i-g-t 02/15] tests/drm_read: Use for_each_crtc*() Ville Syrjala
2026-01-30 13:39   ` Jani Nikula
2026-01-30 10:52 ` [PATCH i-g-t 03/15] tests/kms_plane_scaling: " Ville Syrjala
2026-01-30 12:03   ` Jani Nikula
2026-01-30 15:41     ` Ville Syrjälä
2026-02-02 11:04       ` Jani Nikula
2026-01-30 14:07   ` Jani Nikula
2026-01-30 10:52 ` [PATCH i-g-t 04/15] tests/kms_color: Convert to for_each_crtc*() Ville Syrjala
2026-01-30 14:08   ` Jani Nikula
2026-01-30 10:52 ` [PATCH i-g-t 05/15] tests/intel/kms_pm_dc: Use for_each_crtc*() Ville Syrjala
2026-01-30 14:10   ` Jani Nikula
2026-01-30 10:52 ` [PATCH i-g-t 06/15] tests/kms_rotation_crc: " Ville Syrjala
2026-01-30 14:11   ` Jani Nikula
2026-01-30 10:52 ` [PATCH i-g-t 07/15] lib/kms: Use for_each_crtc_with_single_output() and for_each_crtc() Ville Syrjala
2026-01-30 14:15   ` Jani Nikula
2026-01-30 10:52 ` [PATCH i-g-t 08/15] lib/kms: Use for_each_crtc_with_single_output(), part 1 Ville Syrjala
2026-01-30 14:16   ` Jani Nikula
2026-01-30 10:52 ` [PATCH i-g-t 09/15] lib/kms: Use for_each_crtc_with_single_output(), part 2 Ville Syrjala
2026-01-30 14:19   ` Jani Nikula
2026-01-30 10:52 ` [PATCH i-g-t 10/15] lib/kms: Use for_each_crtc_with_single_output(), part 3 Ville Syrjala
2026-01-30 14:22   ` Jani Nikula
2026-01-30 10:52 ` [PATCH i-g-t 11/15] lib/kms: Use for_each_crtc_with_valid_output(), part 1 Ville Syrjala
2026-01-30 14:24   ` Jani Nikula
2026-01-30 10:52 ` [PATCH i-g-t 12/15] lib/kms: Use for_each_crtc_with_valid_output(), part 2 Ville Syrjala
2026-01-30 14:26   ` Jani Nikula
2026-02-02 15:38     ` [PATCH i-g-t v2 " Ville Syrjala
2026-01-30 10:52 ` [PATCH i-g-t 13/15] lib/kms: Use for_each_crtc_with_valid_output(), part 3 Ville Syrjala
2026-01-30 14:27   ` Jani Nikula
2026-01-30 10:52 ` [PATCH i-g-t 14/15] lib/kms: Use for_each_crtc_with_valid_output(), part 4 Ville Syrjala
2026-01-30 14:30   ` Jani Nikula
2026-01-30 10:52 ` [PATCH i-g-t 15/15] lib/kms: Nuke for_each_pipe_with_*_output() Ville Syrjala
2026-01-30 14:35   ` Jani Nikula
2026-02-03  2:58 ` ✓ i915.CI.BAT: success for lib/kms: Start introducing for_each_crtc*() (rev2) Patchwork
2026-02-03  3:12 ` ✓ Xe.CI.BAT: " Patchwork
2026-02-03 13:48 ` ✗ i915.CI.Full: failure " Patchwork
2026-02-03 14:33 ` ✗ Xe.CI.FULL: " Patchwork

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