All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH i-g-t 0/4] revamp big joiner test
@ 2024-03-10 14:27 Kunal Joshi
  2024-03-10 14:27 ` [PATCH i-g-t 1/4] lib/igt_kms: move bigjoiner_mode_found to lib Kunal Joshi
                   ` (6 more replies)
  0 siblings, 7 replies; 22+ messages in thread
From: Kunal Joshi @ 2024-03-10 14:27 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi

modify test to support multiple big joiner outputs
simultaneously, support for ignoring fused pipes and
addition of subtests for testing force joiner support for
which is added by below in kmd.

drm/i915: Add bigjoiner force enable option to debugfs

Kunal Joshi (4):
  lib/igt_kms: move bigjoiner_mode_found to lib
  tests/intel/kms_big_joiner: revamp bigjoiner
  lib/igt_kms: add helper to enable/disable force joiner
  tests/intel/kms_big_joiner: add tests for force joiner

 lib/igt_kms.c                |  84 +++++++
 lib/igt_kms.h                |   4 +
 tests/intel/kms_big_joiner.c | 467 +++++++++++++++++++----------------
 3 files changed, 346 insertions(+), 209 deletions(-)

-- 
2.34.1


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

* [PATCH i-g-t 1/4] lib/igt_kms: move bigjoiner_mode_found to lib
  2024-03-10 14:27 [PATCH i-g-t 0/4] revamp big joiner test Kunal Joshi
@ 2024-03-10 14:27 ` Kunal Joshi
  2024-03-15  4:10   ` Nautiyal, Ankit K
  2024-03-10 14:27 ` [PATCH i-g-t 2/4] tests/intel/kms_big_joiner: revamp bigjoiner Kunal Joshi
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 22+ messages in thread
From: Kunal Joshi @ 2024-03-10 14:27 UTC (permalink / raw)
  To: igt-dev
  Cc: Kunal Joshi, Stanislav Lisovskiy, Ankit Nautiyal, Karthik B S,
	Bhanuprakash Modem

move bigjoiner_mode_found to lib

Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Cc: Karthik B S <karthik.b.s@intel.com>
Cc: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
 lib/igt_kms.c                | 25 +++++++++++++++++++++++++
 lib/igt_kms.h                |  2 ++
 tests/intel/kms_big_joiner.c | 14 +-------------
 3 files changed, 28 insertions(+), 13 deletions(-)

diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index e18f6fe59..63c8045c7 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -6143,6 +6143,31 @@ bool igt_bigjoiner_possible(drmModeModeInfo *mode, int max_dotclock)
 		mode->clock > max_dotclock);
 }
 
+/**
+ * bigjoiner_mode_found:
+ * @connector: libdrm connector
+ * @sort_method: comparator method
+ * @mode: libdrm mode
+ *
+ * Bigjoiner will come in to the picture when the
+ * resolution > 5K or clock > max-dot-clock.
+ *
+ * Returns: True if big joiner found in connector modes
+ */
+bool bigjoiner_mode_found(int drm_fd, drmModeConnector *connector,
+			  int max_dotclock)
+{
+	bool found = false;
+
+	igt_sort_connector_modes(connector, sort_drm_modes_by_res_dsc);
+	found = igt_bigjoiner_possible(&connector->modes[0], max_dotclock);
+	if (!found) {
+		igt_sort_connector_modes(connector, sort_drm_modes_by_clk_dsc);
+		found = igt_bigjoiner_possible(&connector->modes[0], max_dotclock);
+	}
+	return found;
+}
+
 /**
  * igt_check_bigjoiner_support:
  * @display: a pointer to an #igt_display_t structure
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index b3882808b..bab8487d3 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -1212,6 +1212,8 @@ bool igt_max_bpc_constraint(igt_display_t *display, enum pipe pipe,
 		igt_output_t *output, int bpc);
 int igt_get_max_dotclock(int fd);
 bool igt_bigjoiner_possible(drmModeModeInfo *mode, int max_dotclock);
+bool bigjoiner_mode_found(int drm_fd, drmModeConnector *connector,
+			  int max_dotclock);
 bool igt_check_bigjoiner_support(igt_display_t *display);
 bool igt_parse_mode_string(const char *mode_string, drmModeModeInfo *mode);
 bool intel_pipe_output_combo_valid(igt_display_t *display);
diff --git a/tests/intel/kms_big_joiner.c b/tests/intel/kms_big_joiner.c
index aba2adfbe..28678b958 100644
--- a/tests/intel/kms_big_joiner.c
+++ b/tests/intel/kms_big_joiner.c
@@ -199,16 +199,6 @@ static void test_dual_display(data_t *data)
 	igt_display_commit2(display, COMMIT_ATOMIC);
 }
 
-static bool bigjoiner_mode_found(drmModeConnector *connector,
-				 int (*sort_method)(const void *, const void*),
-				 drmModeModeInfo *mode)
-{
-	igt_sort_connector_modes(connector, sort_method);
-	*mode = connector->modes[0];
-
-	return igt_bigjoiner_possible(mode, max_dotclock);
-}
-
 igt_main
 {
 	data_t data;
@@ -235,9 +225,7 @@ igt_main
 			 * Bigjoiner will come in to the picture when the
 			 * resolution > 5K or clock > max-dot-clock.
 			 */
-			found = (bigjoiner_mode_found(connector, sort_drm_modes_by_res_dsc, &mode) ||
-				 bigjoiner_mode_found(connector, sort_drm_modes_by_clk_dsc, &mode)) ?
-					true : false;
+			found = bigjoiner_mode_found(data.drm_fd, connector, max_dotclock);
 
 			if (found) {
 				data.output[count].output_id = output->id;
-- 
2.34.1


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

* [PATCH i-g-t 2/4] tests/intel/kms_big_joiner: revamp bigjoiner
  2024-03-10 14:27 [PATCH i-g-t 0/4] revamp big joiner test Kunal Joshi
  2024-03-10 14:27 ` [PATCH i-g-t 1/4] lib/igt_kms: move bigjoiner_mode_found to lib Kunal Joshi
@ 2024-03-10 14:27 ` Kunal Joshi
  2024-03-14  8:43   ` Nautiyal, Ankit K
  2024-03-10 14:27 ` [PATCH i-g-t 3/4] lib/igt_kms: add helper to enable/disable force joiner Kunal Joshi
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 22+ messages in thread
From: Kunal Joshi @ 2024-03-10 14:27 UTC (permalink / raw)
  To: igt-dev
  Cc: Kunal Joshi, Stanislav Lisovskiy, Ankit Nautiyal, Karthik B S,
	Bhanuprakash Modem

modify test to support simultaneously testing multiple bigjoiner
output and ignoring fused off pipes.

v2: Don't change license (Bhanu)
    Print the pipe name (Bhanu)
    Remove unwanted commit (Bhanu)
    Move combine output logic to igt_fixture (Bhanu)
    split revamp and force joiner (Bhanu)

v3: Ignored fused pipes (Stan)

Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Cc: Karthik B S <karthik.b.s@intel.com>
Cc: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
---
 tests/intel/kms_big_joiner.c | 398 +++++++++++++++++------------------
 1 file changed, 195 insertions(+), 203 deletions(-)

diff --git a/tests/intel/kms_big_joiner.c b/tests/intel/kms_big_joiner.c
index 28678b958..d4b0d1100 100644
--- a/tests/intel/kms_big_joiner.c
+++ b/tests/intel/kms_big_joiner.c
@@ -37,184 +37,227 @@
 #include "igt.h"
 
 /**
- * SUBTEST: invalid-modeset
+ * SUBTEST: invalid-modeset-bigjoiner
  * Description: Verify if the modeset on the adjoining pipe is rejected when
  *              the pipe is active with a big joiner modeset
  *
- * SUBTEST: basic
+ * SUBTEST: basic-bigjoiner
  * Description: Verify the basic modeset on big joiner mode on all pipes
  *
- * SUBTEST: 2x-modeset
- * Description: Verify simultaneous modeset on 2 big joiner outputs
  */
 
 IGT_TEST_DESCRIPTION("Test big joiner");
 
-struct bigjoiner_output {
-	uint32_t output_id;
-	drmModeModeInfo mode;
-};
+#define INVALID_TEST_OUTPUT 2
 
 typedef struct {
 	int drm_fd;
-	igt_display_t display;
-	struct igt_fb fb;
+	int big_joiner_output_count;
+	int non_big_joiner_output_count;
+	int combined_output_count;
+	int output_count;
 	int n_pipes;
-	enum pipe pipe1;
-	enum pipe pipe2;
-	struct bigjoiner_output output[2];
+	int master_pipes;
+	uint64_t big_joiner_output[IGT_MAX_PIPES];
+	uint64_t non_big_joiner_output[IGT_MAX_PIPES];
+	uint64_t combined_output[IGT_MAX_PIPES];
+	enum pipe pipe_seq[IGT_MAX_PIPES];
+	igt_display_t display;
 } data_t;
 
 static int max_dotclock;
 
-static void test_invalid_modeset(data_t *data)
+static void set_all_master_pipes_for_platform(data_t *data)
 {
-	igt_output_t *output;
-	igt_display_t *display = &data->display;
-	int ret;
-
-	igt_info("Bigjoiner test on ");
-	for_each_connected_output(display, output){
-		enum pipe p = output->pending_pipe;
-		drmModeModeInfo *mode;
-		igt_pipe_t *pipe;
-		igt_plane_t *plane;
+	enum pipe pipe;
 
-		if (p == PIPE_NONE)
-			continue;
-
-		mode = igt_output_get_mode(output);
-		igt_info("pipe:%s, output:%s, mode:", kmstest_pipe_name(p), igt_output_name(output));
-		kmstest_dump_mode(mode);
+	for (pipe = PIPE_A; pipe < IGT_MAX_PIPES; pipe++)
+		if (data->display.pipes[pipe].enabled) {
+			igt_info("Found master pipe %s\n", kmstest_pipe_name(pipe));
+			data->master_pipes |= BIT(pipe);
+		}
+}
 
-		pipe = &display->pipes[p];
-		plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
+static igt_output_t *get_output_by_id_or_assert(data_t *data, uint64_t id)
+{
+	igt_output_t *output;
 
-		igt_plane_set_fb(plane, &data->fb);
-		igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
-		igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
+	for_each_connected_output(&data->display, output) {
+		if (output->id == id)
+			return output;
 	}
+	igt_assert_f(false, "Output not found\n");
+	return NULL;
+}
 
-	igt_assert(!igt_check_bigjoiner_support(display));
-
-	/* This commit is expectd to fail as this pipe is being used for big joiner */
-	ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY |
-					    DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-
-	igt_display_reset(&data->display);
-	igt_display_commit2(display, COMMIT_ATOMIC);
+static enum pipe get_next_master_pipe(data_t *data, unsigned int available_pipe_mask)
+{
+	if ((data->master_pipes & available_pipe_mask) == 0)
+		return PIPE_NONE;
 
-	igt_assert_lt(ret, 0);
+	return ffs(data->master_pipes & available_pipe_mask) - 1;
 }
 
-static void test_basic_modeset(data_t *data)
+static void test_single_joiner(data_t *data, int output_count)
 {
+	int i, ret;
+	enum pipe pipe, master_pipe;
+	unsigned int available_pipe_mask = BIT(data->n_pipes) - 1;
+	unsigned int attempt_mask;
+	igt_output_t *output;
+	igt_plane_t *primary;
+	uint64_t *outputs;
+	igt_fb_t fb;
 	drmModeModeInfo *mode;
-	igt_output_t *output, *bigjoiner_output = NULL;
-	igt_display_t *display = &data->display;
-	igt_pipe_t *pipe;
-	igt_plane_t *plane;
 
-	igt_display_reset(display);
+	outputs = data->big_joiner_output;
 
-	for_each_connected_output(display, output) {
-		if (data->output[0].output_id == output->id) {
-			bigjoiner_output = output;
-			break;
+	for (i = 0; i < output_count; i++) {
+		output = get_output_by_id_or_assert(data, outputs[i]);
+		for (pipe = 0; pipe < data->n_pipes-1; pipe++) {
+			igt_display_reset(&data->display);
+			attempt_mask = BIT(pipe);
+
+			master_pipe = get_next_master_pipe(data, available_pipe_mask & attempt_mask);
+			if (master_pipe == PIPE_NONE)
+				continue;
+			igt_info("Using pipe %s as master and %s slave for %s\n", kmstest_pipe_name(pipe), kmstest_pipe_name(pipe + 1), output->name);
+			igt_output_set_pipe(output, pipe);
+			mode = igt_output_get_mode(output);
+			primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
+			igt_create_pattern_fb(data->drm_fd, mode->hdisplay, mode->vdisplay, DRM_FORMAT_XRGB8888,
+								  DRM_FORMAT_MOD_LINEAR, &fb);
+			igt_plane_set_fb(primary, &fb);
+			ret = igt_display_try_commit2(&data->display, COMMIT_ATOMIC);
+			igt_assert_f(ret == 0, "Commit should have passed\n");
 		}
 	}
+}
 
-	igt_output_set_pipe(bigjoiner_output, data->pipe1);
+static void test_multi_joiner(data_t *data, int output_count)
+{
+	int i, ret;
+	unsigned int available_pipe_mask;
+	enum pipe pipe, master_pipe;
+	uint64_t *outputs;
+	igt_output_t *output;
+	igt_plane_t *primary[output_count];
+	igt_fb_t fb[output_count];
+	drmModeModeInfo *mode;
 
-	mode = &data->output[0].mode;
-	igt_output_override_mode(bigjoiner_output, mode);
+	available_pipe_mask = BIT(data->n_pipes) - 1;
+	outputs = data->big_joiner_output;
 
-	pipe = &display->pipes[data->pipe1];
-	plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
+	igt_display_reset(&data->display);
+	for (i = 0; i < output_count; i++) {
+		output = get_output_by_id_or_assert(data, outputs[i]);
+		for (pipe = 0; pipe < data->n_pipes; pipe++) {
+			unsigned int attempt_mask = BIT(pipe);
 
-	igt_plane_set_fb(plane, &data->fb);
-	igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
-	igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
+			master_pipe = get_next_master_pipe(data, available_pipe_mask & attempt_mask);
+			if (master_pipe == PIPE_NONE)
+				continue;
 
-	igt_display_commit2(display, COMMIT_ATOMIC);
+			igt_info("Using pipe %s as master %s slave for %s\n", kmstest_pipe_name(pipe), kmstest_pipe_name(pipe + 1), output->name);
+			igt_output_set_pipe(output, pipe);
+			mode = igt_output_get_mode(output);
+			primary[i] = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
+			igt_create_pattern_fb(data->drm_fd, mode->hdisplay, mode->vdisplay, DRM_FORMAT_XRGB8888,
+								  DRM_FORMAT_MOD_LINEAR, &fb[i]);
+			igt_plane_set_fb(primary[i], &fb[i]);
 
-	igt_output_set_pipe(bigjoiner_output, PIPE_NONE);
-	igt_plane_set_fb(plane, NULL);
-	igt_display_commit2(display, COMMIT_ATOMIC);
+			available_pipe_mask &= ~BIT(master_pipe);
+			available_pipe_mask &= ~BIT(master_pipe + 1);
+			break;
+		}
+	}
+	ret = igt_display_try_commit2(&data->display, COMMIT_ATOMIC);
+	igt_assert_f(ret == 0, "Commit should have passed\n");
 }
 
-static void test_dual_display(data_t *data)
+static void test_invalid_modeset_two_joiner(data_t *data,
+					    bool combined)
 {
+	int i, j, ret;
+	uint64_t *outputs;
+	igt_output_t *output;
+	igt_plane_t *primary[INVALID_TEST_OUTPUT];
+	igt_fb_t fb[INVALID_TEST_OUTPUT];
 	drmModeModeInfo *mode;
-	igt_output_t *output, *bigjoiner_output[2];
-	igt_display_t *display = &data->display;
-	igt_pipe_t *pipe;
-	igt_plane_t *plane1, *plane2;
-	int count = 0;
-
-	igt_display_reset(display);
-
-	for_each_connected_output(display, output) {
-		if (data->output[count].output_id == output->id) {
-			bigjoiner_output[count] = output;
-			count++;
-		}
 
-		if (count > 1)
-			break;
+	outputs = combined ? data->combined_output : data->big_joiner_output;
+
+	for (i = 0; i < data->n_pipes-1; i++) {
+		igt_display_reset(&data->display);
+		for (j = 0; j < INVALID_TEST_OUTPUT; j++) {
+			output = get_output_by_id_or_assert(data, outputs[j]);
+			igt_assert(output);
+			igt_output_set_pipe(output, data->pipe_seq[i + j]);
+			mode = igt_output_get_mode(output);
+			igt_info(" Assigning pipe %s to %s with mode %dx%d@%d%s",
+				 kmstest_pipe_name(data->pipe_seq[i + j]),
+				 igt_output_name(output), mode->hdisplay,
+				 mode->vdisplay, mode->vrefresh,
+				 j == INVALID_TEST_OUTPUT - 1 ? "\n" : ", ");
+			primary[j] = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
+			igt_create_pattern_fb(data->drm_fd, mode->hdisplay, mode->vdisplay, DRM_FORMAT_XRGB8888,
+								  DRM_FORMAT_MOD_LINEAR, &fb[j]);
+			igt_plane_set_fb(primary[j], &fb[j]);
+		}
+		ret = igt_display_try_commit2(&data->display, COMMIT_ATOMIC);
+		igt_assert_f(ret != 0, "Commit shouldn't have passed\n");
 	}
+}
 
-	igt_output_set_pipe(bigjoiner_output[0], data->pipe1);
-	igt_output_set_pipe(bigjoiner_output[1], data->pipe2);
-
-	/* Set up first big joiner output on Pipe A*/
-	mode = &data->output[0].mode;
-	igt_output_override_mode(bigjoiner_output[0], mode);
-
-	pipe = &display->pipes[data->pipe1];
-	plane1 = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
-
-	igt_plane_set_fb(plane1, &data->fb);
-	igt_fb_set_size(&data->fb, plane1, mode->hdisplay, mode->vdisplay);
-	igt_plane_set_size(plane1, mode->hdisplay, mode->vdisplay);
-
-	/* Set up second big joiner output on Pipe C*/
-	mode = &data->output[1].mode;
-	igt_output_override_mode(bigjoiner_output[1], mode);
-
-	pipe = &display->pipes[data->pipe2];
-	plane2 = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
-
-	igt_plane_set_fb(plane2, &data->fb);
-	igt_fb_set_size(&data->fb, plane2, mode->hdisplay, mode->vdisplay);
-	igt_plane_set_size(plane2, mode->hdisplay, mode->vdisplay);
+static void tets_big_joiner_on_last_pipe(data_t *data)
+{
+	int i, len, ret;
+	uint64_t *outputs;
+	igt_output_t *output;
+	igt_plane_t *primary;
+	igt_fb_t fb;
+	drmModeModeInfo *mode;
 
-	igt_display_commit2(display, COMMIT_ATOMIC);
+	len = data->big_joiner_output_count;
+	outputs = data->big_joiner_output;
 
-	/* Clean up */
-	igt_output_set_pipe(bigjoiner_output[0], PIPE_NONE);
-	igt_output_set_pipe(bigjoiner_output[1], PIPE_NONE);
-	igt_plane_set_fb(plane1, NULL);
-	igt_plane_set_fb(plane2, NULL);
-	igt_display_commit2(display, COMMIT_ATOMIC);
+	for (i = 0; i < len; i++) {
+		igt_display_reset(&data->display);
+		output = get_output_by_id_or_assert(data, outputs[i]);
+		igt_output_set_pipe(output, data->pipe_seq[data->n_pipes - 1]);
+		mode = igt_output_get_mode(output);
+		igt_info(" Assigning pipe %s to %s with mode %dx%d@%d\n",
+				 kmstest_pipe_name(data->pipe_seq[data->n_pipes - 1]),
+				 igt_output_name(output), mode->hdisplay,
+				 mode->vdisplay, mode->vrefresh);
+		primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
+		igt_create_pattern_fb(data->drm_fd, mode->hdisplay, mode->vdisplay, DRM_FORMAT_XRGB8888,
+							  DRM_FORMAT_MOD_LINEAR, &fb);
+		igt_plane_set_fb(primary, &fb);
+		ret = igt_display_try_commit2(&data->display, COMMIT_ATOMIC);
+		igt_assert_f(ret != 0, "Commit shouldn't have passed\n");
+	}
 }
 
+
 igt_main
 {
-	data_t data;
+	int i, j;
 	igt_output_t *output;
-	drmModeModeInfo mode;
-	int valid_output = 0, i, count = 0, j = 0;
-	uint16_t width = 0, height = 0;
-	enum pipe pipe_seq[IGT_MAX_PIPES];
+	data_t data;
 
 	igt_fixture {
+		data.big_joiner_output_count = 0;
+		data.non_big_joiner_output_count = 0;
+		data.combined_output_count = 0;
+		data.output_count = 0;
+		j = 0;
+
 		data.drm_fd = drm_open_driver_master(DRIVER_INTEL | DRIVER_XE);
 		kmstest_set_vt_graphics_mode();
-
 		igt_display_require(&data.display, data.drm_fd);
+		set_all_master_pipes_for_platform(&data);
 		igt_require(data.display.is_atomic);
-
 		max_dotclock = igt_get_max_dotclock(data.drm_fd);
 
 		for_each_connected_output(&data.display, output) {
@@ -228,105 +271,54 @@ igt_main
 			found = bigjoiner_mode_found(data.drm_fd, connector, max_dotclock);
 
 			if (found) {
-				data.output[count].output_id = output->id;
-				memcpy(&data.output[count].mode, &mode, sizeof(drmModeModeInfo));
-				count++;
-
-				width = max(width, mode.hdisplay);
-				height = max(height, mode.vdisplay);
+				data.big_joiner_output[data.big_joiner_output_count++] = output->config.connector->connector_id;
+				igt_output_override_mode(output, &connector->modes[0]);
+			} else {
+				data.non_big_joiner_output[data.non_big_joiner_output_count++] = output->config.connector->connector_id;
 			}
-			valid_output++;
+			data.output_count++;
+		}
+		if (data.big_joiner_output_count == 1 && data.non_big_joiner_output_count >= 1) {
+			data.combined_output[data.combined_output_count++] = data.big_joiner_output[0];
+			data.combined_output[data.combined_output_count++] = data.non_big_joiner_output[0];
 		}
-
 		data.n_pipes = 0;
 		for_each_pipe(&data.display, i) {
 			data.n_pipes++;
-			pipe_seq[j] = i;
+			data.pipe_seq[j] = i;
 			j++;
 		}
-
-		igt_require_f(count > 0, "No output with 5k+ mode (or) clock > max-dot-clock found\n");
-
-		igt_create_pattern_fb(data.drm_fd, width, height, DRM_FORMAT_XRGB8888,
-				      DRM_FORMAT_MOD_LINEAR, &data.fb);
 	}
 
 	igt_describe("Verify the basic modeset on big joiner mode on all pipes");
-	igt_subtest_with_dynamic("basic") {
-		for (i = 0; i < data.n_pipes - 1; i++) {
-			data.pipe1 = pipe_seq[i];
-			igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe_seq[i]))
-				test_basic_modeset(&data);
-		}
-	}
+	igt_subtest_with_dynamic("basic-bigjoiner") {
+			igt_require_f(data.big_joiner_output_count > 0,
+				      "No bigjoiner output found\n");
+			igt_require_f(data.n_pipes > 1,
+				      "Minimum 2 pipes required\n");
+			igt_dynamic_f("single-joiner")
+				test_single_joiner(&data, data.big_joiner_output_count);
+			if (data.big_joiner_output_count > 1)
+				igt_dynamic_f("multi-joiner")
+					test_multi_joiner(&data, data.big_joiner_output_count);
 
-	igt_describe("Verify if the modeset on the adjoining pipe is rejected "
-		     "when the pipe is active with a big joiner modeset");
-	igt_subtest_with_dynamic("invalid-modeset") {
-		data.pipe1 = pipe_seq[j - 1];
-
-		igt_display_reset(&data.display);
-		for_each_connected_output(&data.display, output) {
-			if (data.output[0].output_id != output->id)
-				continue;
-
-			mode = data.output[0].mode;
-			igt_output_set_pipe(output, data.pipe1);
-			igt_output_override_mode(output, &mode);
-
-			igt_dynamic_f("pipe-%s-%s",
-				      kmstest_pipe_name(data.pipe1),
-				      igt_output_name(output))
-				test_invalid_modeset(&data);
-		}
-
-		if(valid_output > 1) {
-			for (i = 0; i < data.n_pipes - 1; i++) {
-				igt_output_t *first_output = NULL, *second_output = NULL;
-
-				data.pipe1 = pipe_seq[i];
-				data.pipe2 = pipe_seq[i + 1];
-
-				igt_display_reset(&data.display);
-				for_each_connected_output(&data.display, output) {
-					if (data.output[0].output_id == output->id) {
-						first_output = output;
-						mode = data.output[0].mode;
-
-						igt_output_set_pipe(output, data.pipe1);
-						igt_output_override_mode(output, &mode);
-					} else if (second_output == NULL) {
-						second_output = output;
-						igt_output_set_pipe(output, data.pipe2);
-
-						break;
-					}
-				}
-
-				igt_dynamic_f("pipe-%s-%s-pipe-%s-%s",
-					      kmstest_pipe_name(data.pipe1),
-					      igt_output_name(first_output),
-					      kmstest_pipe_name(data.pipe2),
-					      igt_output_name(second_output))
-					test_invalid_modeset(&data);
-			}
-		}
 	}
 
-	igt_describe("Verify simultaneous modeset on 2 big joiner outputs");
-	igt_subtest_with_dynamic("2x-modeset") {
-		igt_require_f(count > 1, "2 outputs with big joiner modes are required\n");
-		igt_require_f(data.n_pipes > 3, "Minumum of 4 pipes are required\n");
-		for (i = 0; (i + 2) < data.n_pipes - 1; i++) {
-			data.pipe1 = pipe_seq[i];
-			data.pipe2 = pipe_seq[i + 2];
-			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe_seq[i]), kmstest_pipe_name(pipe_seq[i + 2]))
-				test_dual_display(&data);
-		}
+	igt_subtest_with_dynamic("invalid-modeset-bigjoiner") {
+		igt_require_f(data.big_joiner_output_count > 0, "Non big joiner output not found\n");
+		igt_require_f(data.n_pipes > 1, "Minimum of 2 pipes are required\n");
+		if (data.big_joiner_output_count >= 1)
+			igt_dynamic_f("big_joiner_on_last_pipe")
+				tets_big_joiner_on_last_pipe(&data);
+		if (data.big_joiner_output_count > 1)
+			igt_dynamic_f("invalid_combinations")
+				test_invalid_modeset_two_joiner(&data, false);
+		if (data.combined_output_count)
+			igt_dynamic_f("combined_output")
+				test_invalid_modeset_two_joiner(&data, true);
 	}
 
 	igt_fixture {
-		igt_remove_fb(data.drm_fd, &data.fb);
 		igt_display_fini(&data.display);
 		drm_close_driver(data.drm_fd);
 	}
-- 
2.34.1


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

* [PATCH i-g-t 3/4] lib/igt_kms: add helper to enable/disable force joiner
  2024-03-10 14:27 [PATCH i-g-t 0/4] revamp big joiner test Kunal Joshi
  2024-03-10 14:27 ` [PATCH i-g-t 1/4] lib/igt_kms: move bigjoiner_mode_found to lib Kunal Joshi
  2024-03-10 14:27 ` [PATCH i-g-t 2/4] tests/intel/kms_big_joiner: revamp bigjoiner Kunal Joshi
@ 2024-03-10 14:27 ` Kunal Joshi
  2024-03-20 12:53   ` Nautiyal, Ankit K
  2024-03-10 14:27 ` [PATCH i-g-t 4/4] tests/intel/kms_big_joiner: add tests for " Kunal Joshi
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 22+ messages in thread
From: Kunal Joshi @ 2024-03-10 14:27 UTC (permalink / raw)
  To: igt-dev
  Cc: Kunal Joshi, Stanislav Lisovskiy, Ankit Nautiyal, Karthik B S,
	Bhanuprakash Modem

add helpers to check whether force joiner debugfs exists
and to enable/disable force joiner for a specific connector.

Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Cc: Karthik B S <karthik.b.s@intel.com>
Cc: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
 lib/igt_kms.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++
 lib/igt_kms.h |  2 ++
 2 files changed, 61 insertions(+)

diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index 63c8045c7..9d0cbd329 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -6168,6 +6168,65 @@ bool bigjoiner_mode_found(int drm_fd, drmModeConnector *connector,
 	return found;
 }
 
+/**
+ * Checks if the force big joiner is enabled for a specific connector.
+ *
+ * @drmfd The file descriptor of the DRM device.
+ * @connector_name The name of the connector.
+ * Returns:
+ *  true if status equals enable, false otherwise.
+ */
+static bool igt_check_force_bigjoiner_status(int drmfd, char *connector_name, bool enable)
+{
+	char buf[512];
+	int debugfs_fd, ret;
+
+	igt_assert_f(connector_name, "Connector name cannot be NULL\n");
+	debugfs_fd = igt_debugfs_connector_dir(drmfd, connector_name, O_RDONLY);
+	igt_assert_f(debugfs_fd >= 0, "Could not open debugfs for connector %s\n", connector_name);
+	ret = igt_debugfs_simple_read(debugfs_fd, "i915_bigjoiner_force_enable", buf, sizeof(buf));
+	close(debugfs_fd);
+	igt_assert_f(ret > 0, "Could not read i915_bigjoiner_force_enable for connector %s\n", connector_name);
+	return enable ? strstr(buf, "Bigjoiner enable: 1") :
+					strstr(buf, "Bigjoiner enable: 0");
+}
+
+bool has_force_joiner_debugfs(int drmfd, igt_output_t *output)
+{
+	char buf[512];
+	int debugfs_fd, ret;
+
+	igt_assert_f(output->name, "Connector name cannot be NULL\n");
+	debugfs_fd = igt_debugfs_connector_dir(drmfd, output->name, O_RDONLY);
+	igt_assert_f(debugfs_fd >= 0, "Could not open debugfs for connector %s\n", output->name);
+	ret = igt_debugfs_simple_read(debugfs_fd, "i915_bigjoiner_force_enable", buf, sizeof(buf));
+	close(debugfs_fd);
+	return ret >= 0;
+}
+
+/**
+ * Forces the enable/disable state of big joiner for a specific connector.
+ *
+ * @drmfd The file descriptor of the DRM device.
+ * @connector_name The name of the connector.
+ * @enable The desired state of big joiner (true for enable, false for disable).
+ * Returns:
+ *  true on success, false otherwise.
+ */
+bool igt_force_bigjoiner_enable(int drmfd, char *connector_name, bool enable)
+{
+	int debugfs_fd, ret;
+
+	igt_assert_f(connector_name, "Connector name cannot be NULL\n");
+	debugfs_fd = igt_debugfs_connector_dir(drmfd, connector_name, O_DIRECTORY);
+	igt_assert_f(debugfs_fd >= 0, "Could not open debugfs for connector %s\n", connector_name);
+	ret = igt_sysfs_write(debugfs_fd, "i915_bigjoiner_force_enable", enable ? "1" : "0", 1);
+	close(debugfs_fd);
+	igt_assert_f(ret > 0, "Could not write i915_bigjoiner_force_enable for connector %s\n", connector_name);
+
+	return igt_check_force_bigjoiner_status(drmfd, connector_name, enable);
+}
+
 /**
  * igt_check_bigjoiner_support:
  * @display: a pointer to an #igt_display_t structure
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index bab8487d3..f13b7fd53 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -1214,6 +1214,8 @@ int igt_get_max_dotclock(int fd);
 bool igt_bigjoiner_possible(drmModeModeInfo *mode, int max_dotclock);
 bool bigjoiner_mode_found(int drm_fd, drmModeConnector *connector,
 			  int max_dotclock);
+bool has_force_joiner_debugfs(int drmfd, igt_output_t *output);
+bool igt_force_bigjoiner_enable(int drmfd, char *connector_name, bool enable);
 bool igt_check_bigjoiner_support(igt_display_t *display);
 bool igt_parse_mode_string(const char *mode_string, drmModeModeInfo *mode);
 bool intel_pipe_output_combo_valid(igt_display_t *display);
-- 
2.34.1


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

* [PATCH i-g-t 4/4] tests/intel/kms_big_joiner: add tests for force joiner
  2024-03-10 14:27 [PATCH i-g-t 0/4] revamp big joiner test Kunal Joshi
                   ` (2 preceding siblings ...)
  2024-03-10 14:27 ` [PATCH i-g-t 3/4] lib/igt_kms: add helper to enable/disable force joiner Kunal Joshi
@ 2024-03-10 14:27 ` Kunal Joshi
  2024-03-20 13:17   ` Nautiyal, Ankit K
  2024-03-10 14:48 ` ✓ CI.xeBAT: success for revamp big joiner test (rev7) Patchwork
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 22+ messages in thread
From: Kunal Joshi @ 2024-03-10 14:27 UTC (permalink / raw)
  To: igt-dev
  Cc: Kunal Joshi, Stanislav Lisovskiy, Ankit Nautiyal, Karthik B S,
	Bhanuprakash Modem

add tests for force joiner

Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Cc: Karthik B S <karthik.b.s@intel.com>
Cc: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
---
 tests/intel/kms_big_joiner.c | 101 +++++++++++++++++++++++++++++------
 1 file changed, 85 insertions(+), 16 deletions(-)

diff --git a/tests/intel/kms_big_joiner.c b/tests/intel/kms_big_joiner.c
index d4b0d1100..6017b30cd 100644
--- a/tests/intel/kms_big_joiner.c
+++ b/tests/intel/kms_big_joiner.c
@@ -44,13 +44,20 @@
  * SUBTEST: basic-bigjoiner
  * Description: Verify the basic modeset on big joiner mode on all pipes
  *
+ * SUBTEST: invalid-modeset-force-joiner
+ * Description: Verify if the modeset on the adjoining pipe is rejected when
+ *              the pipe is active with a force joiner modeset
+ *
+ * SUBTEST: basic-force-joiner
+ * Description: Verify the basic modeset on force joiner mode on all pipes
  */
 
-IGT_TEST_DESCRIPTION("Test big joiner");
+IGT_TEST_DESCRIPTION("Test big joiner / force joiner");
 
 #define INVALID_TEST_OUTPUT 2
 
 typedef struct {
+	bool force_joiner_supported;
 	int drm_fd;
 	int big_joiner_output_count;
 	int non_big_joiner_output_count;
@@ -90,6 +97,17 @@ static igt_output_t *get_output_by_id_or_assert(data_t *data, uint64_t id)
 	return NULL;
 }
 
+static void toggle_force_joiner_on_all_non_big_joiner_outputs(data_t *data, bool toggle)
+{
+	int i;
+	igt_output_t *output;
+
+	for (i = 0; i < data->non_big_joiner_output_count; i++) {
+		output = get_output_by_id_or_assert(data, data->non_big_joiner_output[i]);
+		igt_force_bigjoiner_enable(data->drm_fd, output->name, toggle);
+	}
+}
+
 static enum pipe get_next_master_pipe(data_t *data, unsigned int available_pipe_mask)
 {
 	if ((data->master_pipes & available_pipe_mask) == 0)
@@ -98,7 +116,7 @@ static enum pipe get_next_master_pipe(data_t *data, unsigned int available_pipe_
 	return ffs(data->master_pipes & available_pipe_mask) - 1;
 }
 
-static void test_single_joiner(data_t *data, int output_count)
+static void test_single_joiner(data_t *data, int output_count, bool force_joiner)
 {
 	int i, ret;
 	enum pipe pipe, master_pipe;
@@ -110,7 +128,7 @@ static void test_single_joiner(data_t *data, int output_count)
 	igt_fb_t fb;
 	drmModeModeInfo *mode;
 
-	outputs = data->big_joiner_output;
+	outputs = force_joiner ? data->non_big_joiner_output : data->big_joiner_output;
 
 	for (i = 0; i < output_count; i++) {
 		output = get_output_by_id_or_assert(data, outputs[i]);
@@ -121,7 +139,8 @@ static void test_single_joiner(data_t *data, int output_count)
 			master_pipe = get_next_master_pipe(data, available_pipe_mask & attempt_mask);
 			if (master_pipe == PIPE_NONE)
 				continue;
-			igt_info("Using pipe %s as master and %s slave for %s\n", kmstest_pipe_name(pipe), kmstest_pipe_name(pipe + 1), output->name);
+			igt_info("Using pipe %s as master and %s slave for %s\n", kmstest_pipe_name(pipe),
+					 kmstest_pipe_name(pipe + 1), output->name);
 			igt_output_set_pipe(output, pipe);
 			mode = igt_output_get_mode(output);
 			primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
@@ -134,7 +153,7 @@ static void test_single_joiner(data_t *data, int output_count)
 	}
 }
 
-static void test_multi_joiner(data_t *data, int output_count)
+static void test_multi_joiner(data_t *data, int output_count, bool force_joiner)
 {
 	int i, ret;
 	unsigned int available_pipe_mask;
@@ -158,7 +177,8 @@ static void test_multi_joiner(data_t *data, int output_count)
 			if (master_pipe == PIPE_NONE)
 				continue;
 
-			igt_info("Using pipe %s as master %s slave for %s\n", kmstest_pipe_name(pipe), kmstest_pipe_name(pipe + 1), output->name);
+			igt_info("Using pipe %s as master %s slave for %s\n", kmstest_pipe_name(pipe),
+					 kmstest_pipe_name(pipe + 1), output->name);
 			igt_output_set_pipe(output, pipe);
 			mode = igt_output_get_mode(output);
 			primary[i] = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
@@ -176,7 +196,7 @@ static void test_multi_joiner(data_t *data, int output_count)
 }
 
 static void test_invalid_modeset_two_joiner(data_t *data,
-					    bool combined)
+					    bool combined,  bool force_joiner)
 {
 	int i, j, ret;
 	uint64_t *outputs;
@@ -209,7 +229,7 @@ static void test_invalid_modeset_two_joiner(data_t *data,
 	}
 }
 
-static void tets_big_joiner_on_last_pipe(data_t *data)
+static void test_joiner_on_last_pipe(data_t *data, bool force_joiner)
 {
 	int i, len, ret;
 	uint64_t *outputs;
@@ -218,8 +238,8 @@ static void tets_big_joiner_on_last_pipe(data_t *data)
 	igt_fb_t fb;
 	drmModeModeInfo *mode;
 
-	len = data->big_joiner_output_count;
-	outputs = data->big_joiner_output;
+	len = force_joiner ? data->non_big_joiner_output_count : data->big_joiner_output_count;
+	outputs = force_joiner ? data->non_big_joiner_output : data->big_joiner_output;
 
 	for (i = 0; i < len; i++) {
 		igt_display_reset(&data->display);
@@ -247,6 +267,7 @@ igt_main
 	data_t data;
 
 	igt_fixture {
+		data.force_joiner_supported = false;
 		data.big_joiner_output_count = 0;
 		data.non_big_joiner_output_count = 0;
 		data.combined_output_count = 0;
@@ -274,7 +295,10 @@ igt_main
 				data.big_joiner_output[data.big_joiner_output_count++] = output->config.connector->connector_id;
 				igt_output_override_mode(output, &connector->modes[0]);
 			} else {
-				data.non_big_joiner_output[data.non_big_joiner_output_count++] = output->config.connector->connector_id;
+				if (has_force_joiner_debugfs(data.drm_fd, output)) {
+					data.force_joiner_supported = true;
+					data.non_big_joiner_output[data.non_big_joiner_output_count++] = output->config.connector->connector_id;
+				}
 			}
 			data.output_count++;
 		}
@@ -297,10 +321,10 @@ igt_main
 			igt_require_f(data.n_pipes > 1,
 				      "Minimum 2 pipes required\n");
 			igt_dynamic_f("single-joiner")
-				test_single_joiner(&data, data.big_joiner_output_count);
+				test_single_joiner(&data, data.big_joiner_output_count, false);
 			if (data.big_joiner_output_count > 1)
 				igt_dynamic_f("multi-joiner")
-					test_multi_joiner(&data, data.big_joiner_output_count);
+					test_multi_joiner(&data, data.big_joiner_output_count, false);
 
 	}
 
@@ -309,13 +333,58 @@ igt_main
 		igt_require_f(data.n_pipes > 1, "Minimum of 2 pipes are required\n");
 		if (data.big_joiner_output_count >= 1)
 			igt_dynamic_f("big_joiner_on_last_pipe")
-				tets_big_joiner_on_last_pipe(&data);
+				test_joiner_on_last_pipe(&data, false);
 		if (data.big_joiner_output_count > 1)
 			igt_dynamic_f("invalid_combinations")
-				test_invalid_modeset_two_joiner(&data, false);
+				test_invalid_modeset_two_joiner(&data, false, false);
 		if (data.combined_output_count)
 			igt_dynamic_f("combined_output")
-				test_invalid_modeset_two_joiner(&data, true);
+				test_invalid_modeset_two_joiner(&data, true, false);
+	}
+
+	igt_describe("Verify the basic modeset on big joiner mode on all pipes");
+	igt_subtest_with_dynamic("basic-force-joiner") {
+			igt_require_f(data.force_joiner_supported,
+						 "force joiner not supported on this platform or none of the connected output supports it\n");
+			igt_require_f(data.non_big_joiner_output_count > 0,
+				      "No non big joiner output found\n");
+			igt_require_f(data.n_pipes > 1,
+				      "Minimum 2 pipes required\n");
+			igt_dynamic_f("single") {
+				toggle_force_joiner_on_all_non_big_joiner_outputs(&data, true);
+				test_single_joiner(&data, data.non_big_joiner_output_count, true);
+				toggle_force_joiner_on_all_non_big_joiner_outputs(&data, false);
+
+			}
+			if (data.non_big_joiner_output_count > 1) {
+				igt_dynamic_f("multi") {
+					toggle_force_joiner_on_all_non_big_joiner_outputs(&data, true);
+					test_multi_joiner(&data, data.non_big_joiner_output_count, true);
+					toggle_force_joiner_on_all_non_big_joiner_outputs(&data, false);
+				}
+			}
+	}
+
+	igt_subtest_with_dynamic("invalid-modeset-force-joiner") {
+			igt_require_f(data.force_joiner_supported,
+						 "force joiner not supported on this platform or none of the connected output supports it\n");
+		igt_require_f(data.non_big_joiner_output_count > 0, "Non big joiner output not found\n");
+		igt_require_f(data.n_pipes > 1, "Minimum of 2 pipes are required\n");
+
+		if (data.non_big_joiner_output_count >= 1) {
+			igt_dynamic_f("big_joiner_on_last_pipe") {
+				toggle_force_joiner_on_all_non_big_joiner_outputs(&data, true);
+				test_joiner_on_last_pipe(&data, true);
+				toggle_force_joiner_on_all_non_big_joiner_outputs(&data, false);
+			}
+		}
+		if (data.non_big_joiner_output_count > 1) {
+			igt_dynamic_f("invalid_combinations") {
+				toggle_force_joiner_on_all_non_big_joiner_outputs(&data, true);
+				test_invalid_modeset_two_joiner(&data, true, false);
+				toggle_force_joiner_on_all_non_big_joiner_outputs(&data, false);
+			}
+		}
 	}
 
 	igt_fixture {
-- 
2.34.1


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

* ✓ CI.xeBAT: success for revamp big joiner test (rev7)
  2024-03-10 14:27 [PATCH i-g-t 0/4] revamp big joiner test Kunal Joshi
                   ` (3 preceding siblings ...)
  2024-03-10 14:27 ` [PATCH i-g-t 4/4] tests/intel/kms_big_joiner: add tests for " Kunal Joshi
@ 2024-03-10 14:48 ` Patchwork
  2024-03-10 14:56 ` ✓ Fi.CI.BAT: " Patchwork
  2024-03-10 16:26 ` ✗ Fi.CI.IGT: failure " Patchwork
  6 siblings, 0 replies; 22+ messages in thread
From: Patchwork @ 2024-03-10 14:48 UTC (permalink / raw)
  To: Kunal Joshi; +Cc: igt-dev

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

== Series Details ==

Series: revamp big joiner test (rev7)
URL   : https://patchwork.freedesktop.org/series/130572/
State : success

== Summary ==

CI Bug Log - changes from XEIGT_7751_BAT -> XEIGTPW_10799_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (4 -> 4)
------------------------------

  No changes in participating hosts

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

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

### IGT changes ###

#### Issues hit ####

  * igt@xe_pat@pat-index-xehpc@render:
    - bat-pvc-2:          NOTRUN -> [SKIP][1] ([Intel XE#976])
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10799/bat-pvc-2/igt@xe_pat@pat-index-xehpc@render.html

  
#### Possible fixes ####

  * igt@xe_exec_fault_mode@twice-userptr-invalidate-prefetch:
    - bat-pvc-2:          [SKIP][2] ([Intel XE#1130]) -> [PASS][3] +166 other tests pass
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7751/bat-pvc-2/igt@xe_exec_fault_mode@twice-userptr-invalidate-prefetch.html
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10799/bat-pvc-2/igt@xe_exec_fault_mode@twice-userptr-invalidate-prefetch.html

  * igt@xe_live_ktest@xe_bo@xe_ccs_migrate_kunit:
    - bat-pvc-2:          [SKIP][4] ([Intel XE#1245]) -> [PASS][5] +6 other tests pass
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7751/bat-pvc-2/igt@xe_live_ktest@xe_bo@xe_ccs_migrate_kunit.html
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10799/bat-pvc-2/igt@xe_live_ktest@xe_bo@xe_ccs_migrate_kunit.html

  * igt@xe_module_load@load:
    - bat-pvc-2:          [DMESG-FAIL][6] ([Intel XE#1315]) -> [PASS][7]
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7751/bat-pvc-2/igt@xe_module_load@load.html
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10799/bat-pvc-2/igt@xe_module_load@load.html

  
#### Warnings ####

  * igt@kms_addfb_basic@addfb25-x-tiled-legacy:
    - bat-pvc-2:          [SKIP][8] ([Intel XE#1314]) -> [SKIP][9] ([i915#6077]) +30 other tests skip
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7751/bat-pvc-2/igt@kms_addfb_basic@addfb25-x-tiled-legacy.html
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10799/bat-pvc-2/igt@kms_addfb_basic@addfb25-x-tiled-legacy.html

  * igt@kms_cursor_legacy@basic-flip-after-cursor-atomic:
    - bat-pvc-2:          [SKIP][10] ([Intel XE#1314]) -> [SKIP][11] ([Intel XE#1024] / [Intel XE#782]) +5 other tests skip
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7751/bat-pvc-2/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10799/bat-pvc-2/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html

  * igt@kms_dsc@dsc-basic:
    - bat-pvc-2:          [SKIP][12] ([Intel XE#1314]) -> [SKIP][13] ([Intel XE#1024] / [Intel XE#784])
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7751/bat-pvc-2/igt@kms_dsc@dsc-basic.html
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10799/bat-pvc-2/igt@kms_dsc@dsc-basic.html

  * igt@kms_flip@basic-flip-vs-dpms:
    - bat-pvc-2:          [SKIP][14] ([Intel XE#1314]) -> [SKIP][15] ([Intel XE#1024] / [Intel XE#947]) +3 other tests skip
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7751/bat-pvc-2/igt@kms_flip@basic-flip-vs-dpms.html
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10799/bat-pvc-2/igt@kms_flip@basic-flip-vs-dpms.html

  * igt@kms_force_connector_basic@force-connector-state:
    - bat-pvc-2:          [SKIP][16] ([Intel XE#1314]) -> [SKIP][17] ([Intel XE#540]) +3 other tests skip
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7751/bat-pvc-2/igt@kms_force_connector_basic@force-connector-state.html
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10799/bat-pvc-2/igt@kms_force_connector_basic@force-connector-state.html

  * igt@kms_frontbuffer_tracking@basic:
    - bat-pvc-2:          [SKIP][18] ([Intel XE#1314]) -> [SKIP][19] ([Intel XE#1024] / [Intel XE#783])
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7751/bat-pvc-2/igt@kms_frontbuffer_tracking@basic.html
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10799/bat-pvc-2/igt@kms_frontbuffer_tracking@basic.html

  * igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence:
    - bat-pvc-2:          [SKIP][20] ([Intel XE#1314]) -> [SKIP][21] ([Intel XE#829]) +6 other tests skip
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7751/bat-pvc-2/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10799/bat-pvc-2/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html

  * igt@kms_prop_blob@basic:
    - bat-pvc-2:          [SKIP][22] ([Intel XE#1314]) -> [SKIP][23] ([Intel XE#780])
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7751/bat-pvc-2/igt@kms_prop_blob@basic.html
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10799/bat-pvc-2/igt@kms_prop_blob@basic.html

  * igt@kms_psr@psr-cursor-plane-move:
    - bat-pvc-2:          [SKIP][24] ([Intel XE#1314]) -> [SKIP][25] ([Intel XE#1024]) +2 other tests skip
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7751/bat-pvc-2/igt@kms_psr@psr-cursor-plane-move.html
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10799/bat-pvc-2/igt@kms_psr@psr-cursor-plane-move.html

  * igt@xe_evict@evict-beng-small-external:
    - bat-pvc-2:          [SKIP][26] ([Intel XE#1130]) -> [FAIL][27] ([Intel XE#1000]) +3 other tests fail
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7751/bat-pvc-2/igt@xe_evict@evict-beng-small-external.html
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10799/bat-pvc-2/igt@xe_evict@evict-beng-small-external.html

  * igt@xe_evict@evict-small-cm:
    - bat-pvc-2:          [SKIP][28] ([Intel XE#1130]) -> [DMESG-FAIL][29] ([Intel XE#482]) +3 other tests dmesg-fail
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7751/bat-pvc-2/igt@xe_evict@evict-small-cm.html
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10799/bat-pvc-2/igt@xe_evict@evict-small-cm.html

  * igt@xe_gt_freq@freq_range_idle:
    - bat-pvc-2:          [SKIP][30] ([Intel XE#1130]) -> [SKIP][31] ([Intel XE#1021]) +1 other test skip
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7751/bat-pvc-2/igt@xe_gt_freq@freq_range_idle.html
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10799/bat-pvc-2/igt@xe_gt_freq@freq_range_idle.html

  * igt@xe_huc_copy@huc_copy:
    - bat-pvc-2:          [SKIP][32] ([Intel XE#1130]) -> [SKIP][33] ([Intel XE#255])
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7751/bat-pvc-2/igt@xe_huc_copy@huc_copy.html
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10799/bat-pvc-2/igt@xe_huc_copy@huc_copy.html

  * igt@xe_intel_bb@render:
    - bat-pvc-2:          [SKIP][34] ([Intel XE#1130]) -> [SKIP][35] ([Intel XE#532])
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7751/bat-pvc-2/igt@xe_intel_bb@render.html
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10799/bat-pvc-2/igt@xe_intel_bb@render.html

  * igt@xe_pat@pat-index-xe2:
    - bat-pvc-2:          [SKIP][36] ([Intel XE#1130]) -> [SKIP][37] ([Intel XE#977]) +1 other test skip
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7751/bat-pvc-2/igt@xe_pat@pat-index-xe2.html
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10799/bat-pvc-2/igt@xe_pat@pat-index-xe2.html

  * igt@xe_pat@pat-index-xelpg:
    - bat-pvc-2:          [SKIP][38] ([Intel XE#1130]) -> [SKIP][39] ([Intel XE#979])
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7751/bat-pvc-2/igt@xe_pat@pat-index-xelpg.html
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10799/bat-pvc-2/igt@xe_pat@pat-index-xelpg.html

  * igt@xe_pm_residency@gt-c6-on-idle:
    - bat-pvc-2:          [SKIP][40] ([Intel XE#1130]) -> [SKIP][41] ([Intel XE#531])
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_7751/bat-pvc-2/igt@xe_pm_residency@gt-c6-on-idle.html
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_10799/bat-pvc-2/igt@xe_pm_residency@gt-c6-on-idle.html

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

  [Intel XE#1000]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1000
  [Intel XE#1021]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1021
  [Intel XE#1024]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1024
  [Intel XE#1130]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1130
  [Intel XE#1245]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1245
  [Intel XE#1314]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1314
  [Intel XE#1315]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1315
  [Intel XE#255]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/255
  [Intel XE#482]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/482
  [Intel XE#531]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/531
  [Intel XE#532]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/532
  [Intel XE#540]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/540
  [Intel XE#780]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/780
  [Intel XE#782]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/782
  [Intel XE#783]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/783
  [Intel XE#784]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/784
  [Intel XE#829]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/829
  [Intel XE#947]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/947
  [Intel XE#976]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/976
  [Intel XE#977]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/977
  [Intel XE#979]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/979
  [i915#6077]: https://gitlab.freedesktop.org/drm/intel/issues/6077


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

  * IGT: IGT_7751 -> IGTPW_10799
  * Linux: xe-924-dfd62d0c182e06ae11999b117c3569bfef6c8413 -> xe-926-3fde6df89bac97416ce1c82b14237a1a67ce3285

  IGTPW_10799: 10799
  IGT_7751: 86173d01d4d3644237f781dc5f9890bd26c988de @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-924-dfd62d0c182e06ae11999b117c3569bfef6c8413: dfd62d0c182e06ae11999b117c3569bfef6c8413
  xe-926-3fde6df89bac97416ce1c82b14237a1a67ce3285: 3fde6df89bac97416ce1c82b14237a1a67ce3285

== Logs ==

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

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

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

* ✓ Fi.CI.BAT: success for revamp big joiner test (rev7)
  2024-03-10 14:27 [PATCH i-g-t 0/4] revamp big joiner test Kunal Joshi
                   ` (4 preceding siblings ...)
  2024-03-10 14:48 ` ✓ CI.xeBAT: success for revamp big joiner test (rev7) Patchwork
@ 2024-03-10 14:56 ` Patchwork
  2024-03-10 16:26 ` ✗ Fi.CI.IGT: failure " Patchwork
  6 siblings, 0 replies; 22+ messages in thread
From: Patchwork @ 2024-03-10 14:56 UTC (permalink / raw)
  To: Kunal Joshi; +Cc: igt-dev

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

== Series Details ==

Series: revamp big joiner test (rev7)
URL   : https://patchwork.freedesktop.org/series/130572/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_14416 -> IGTPW_10799
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (39 -> 28)
------------------------------

  Missing    (11): bat-kbl-2 fi-bsw-n3050 fi-apl-guc fi-snb-2520m fi-glk-j4005 bat-atsm-1 fi-cfl-8109u fi-pnv-d510 bat-jsl-1 bat-mtlp-8 bat-arls-3 

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

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

### IGT changes ###

#### Issues hit ####

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

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

  * igt@i915_pm_rps@basic-api:
    - bat-dg2-8:          NOTRUN -> [SKIP][3] ([i915#6621])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-dg2-8/igt@i915_pm_rps@basic-api.html
    - bat-adlm-1:         NOTRUN -> [SKIP][4] ([i915#6621])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-adlm-1/igt@i915_pm_rps@basic-api.html
    - bat-mtlp-6:         NOTRUN -> [SKIP][5] ([i915#6621])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-mtlp-6/igt@i915_pm_rps@basic-api.html

  * igt@i915_selftest@live@client:
    - bat-dg2-14:         [PASS][6] -> [ABORT][7] ([i915#10366])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/bat-dg2-14/igt@i915_selftest@live@client.html
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-dg2-14/igt@i915_selftest@live@client.html

  * igt@kms_force_connector_basic@force-load-detect:
    - bat-adlm-1:         NOTRUN -> [SKIP][8]
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-adlm-1/igt@kms_force_connector_basic@force-load-detect.html

  * igt@kms_force_connector_basic@prune-stale-modes:
    - bat-mtlp-6:         NOTRUN -> [SKIP][9] ([i915#5274] / [i915#9792])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-mtlp-6/igt@kms_force_connector_basic@prune-stale-modes.html

  * igt@kms_frontbuffer_tracking@basic:
    - bat-adlm-1:         NOTRUN -> [SKIP][10] ([i915#1849] / [i915#4342])
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-adlm-1/igt@kms_frontbuffer_tracking@basic.html
    - bat-mtlp-6:         NOTRUN -> [SKIP][11] ([i915#4342] / [i915#5354] / [i915#9792])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-mtlp-6/igt@kms_frontbuffer_tracking@basic.html

  * igt@kms_pipe_crc_basic@hang-read-crc:
    - bat-adlm-1:         NOTRUN -> [SKIP][12] ([i915#9875] / [i915#9900]) +6 other tests skip
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-adlm-1/igt@kms_pipe_crc_basic@hang-read-crc.html
    - bat-mtlp-6:         NOTRUN -> [SKIP][13] ([i915#9792]) +7 other tests skip
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-mtlp-6/igt@kms_pipe_crc_basic@hang-read-crc.html

  * igt@kms_pm_backlight@basic-brightness:
    - bat-adlm-1:         NOTRUN -> [SKIP][14] ([i915#5354])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-adlm-1/igt@kms_pm_backlight@basic-brightness.html
    - bat-mtlp-6:         NOTRUN -> [SKIP][15] ([i915#5354] / [i915#9792])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-mtlp-6/igt@kms_pm_backlight@basic-brightness.html

  * igt@kms_pm_rpm@basic-pci-d3-state:
    - bat-dg2-11:         [PASS][16] -> [ABORT][17] ([i915#10367])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/bat-dg2-11/igt@kms_pm_rpm@basic-pci-d3-state.html
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-dg2-11/igt@kms_pm_rpm@basic-pci-d3-state.html

  * igt@kms_psr@psr-cursor-plane-move:
    - bat-mtlp-6:         NOTRUN -> [SKIP][18] ([i915#9673] / [i915#9732] / [i915#9792]) +3 other tests skip
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-mtlp-6/igt@kms_psr@psr-cursor-plane-move.html

  * igt@kms_psr@psr-sprite-plane-onoff:
    - bat-dg2-8:          NOTRUN -> [SKIP][19] ([i915#9673] / [i915#9732]) +3 other tests skip
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-dg2-8/igt@kms_psr@psr-sprite-plane-onoff.html
    - bat-adlm-1:         NOTRUN -> [SKIP][20] ([i915#9673] / [i915#9732]) +3 other tests skip
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-adlm-1/igt@kms_psr@psr-sprite-plane-onoff.html

  * igt@kms_setmode@basic-clone-single-crtc:
    - bat-dg2-8:          NOTRUN -> [SKIP][21] ([i915#3555])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-dg2-8/igt@kms_setmode@basic-clone-single-crtc.html
    - bat-adlm-1:         NOTRUN -> [SKIP][22] ([i915#3555])
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-adlm-1/igt@kms_setmode@basic-clone-single-crtc.html
    - bat-mtlp-6:         NOTRUN -> [SKIP][23] ([i915#3555] / [i915#8809] / [i915#9792])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-mtlp-6/igt@kms_setmode@basic-clone-single-crtc.html

  * igt@prime_vgem@basic-fence-flip:
    - bat-dg2-8:          NOTRUN -> [SKIP][24] ([i915#3708])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-dg2-8/igt@prime_vgem@basic-fence-flip.html
    - bat-adlm-1:         NOTRUN -> [SKIP][25] ([i915#3708] / [i915#9900])
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-adlm-1/igt@prime_vgem@basic-fence-flip.html
    - bat-mtlp-6:         NOTRUN -> [SKIP][26] ([i915#3708] / [i915#9792])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-mtlp-6/igt@prime_vgem@basic-fence-flip.html

  * igt@prime_vgem@basic-fence-mmap:
    - bat-dg2-8:          NOTRUN -> [SKIP][27] ([i915#3708] / [i915#4077]) +1 other test skip
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-dg2-8/igt@prime_vgem@basic-fence-mmap.html
    - bat-mtlp-6:         NOTRUN -> [SKIP][28] ([i915#3708] / [i915#4077]) +1 other test skip
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-mtlp-6/igt@prime_vgem@basic-fence-mmap.html

  * igt@prime_vgem@basic-write:
    - bat-dg2-8:          NOTRUN -> [SKIP][29] ([i915#3291] / [i915#3708]) +2 other tests skip
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-dg2-8/igt@prime_vgem@basic-write.html
    - bat-adlm-1:         NOTRUN -> [SKIP][30] ([i915#3708]) +2 other tests skip
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-adlm-1/igt@prime_vgem@basic-write.html
    - bat-mtlp-6:         NOTRUN -> [SKIP][31] ([i915#3708]) +2 other tests skip
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-mtlp-6/igt@prime_vgem@basic-write.html

  
#### Possible fixes ####

  * igt@i915_selftest@live@gt_contexts:
    - bat-dg2-9:          [ABORT][32] ([i915#10366]) -> [PASS][33]
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/bat-dg2-9/igt@i915_selftest@live@gt_contexts.html
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-dg2-9/igt@i915_selftest@live@gt_contexts.html

  * igt@kms_pm_rpm@basic-rte:
    - bat-dg2-8:          [ABORT][34] ([i915#10367]) -> [PASS][35]
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/bat-dg2-8/igt@kms_pm_rpm@basic-rte.html
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/bat-dg2-8/igt@kms_pm_rpm@basic-rte.html

  
  [i915#10366]: https://gitlab.freedesktop.org/drm/intel/issues/10366
  [i915#10367]: https://gitlab.freedesktop.org/drm/intel/issues/10367
  [i915#1849]: https://gitlab.freedesktop.org/drm/intel/issues/1849
  [i915#3291]: https://gitlab.freedesktop.org/drm/intel/issues/3291
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
  [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
  [i915#4342]: https://gitlab.freedesktop.org/drm/intel/issues/4342
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#5274]: https://gitlab.freedesktop.org/drm/intel/issues/5274
  [i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354
  [i915#6621]: https://gitlab.freedesktop.org/drm/intel/issues/6621
  [i915#8809]: https://gitlab.freedesktop.org/drm/intel/issues/8809
  [i915#9673]: https://gitlab.freedesktop.org/drm/intel/issues/9673
  [i915#9732]: https://gitlab.freedesktop.org/drm/intel/issues/9732
  [i915#9792]: https://gitlab.freedesktop.org/drm/intel/issues/9792
  [i915#9875]: https://gitlab.freedesktop.org/drm/intel/issues/9875
  [i915#9900]: https://gitlab.freedesktop.org/drm/intel/issues/9900


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

  * CI: CI-20190529 -> None
  * IGT: IGT_7751 -> IGTPW_10799

  CI-20190529: 20190529
  CI_DRM_14416: 3fde6df89bac97416ce1c82b14237a1a67ce3285 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_10799: 10799
  IGT_7751: 86173d01d4d3644237f781dc5f9890bd26c988de @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git


Testlist changes
----------------

+igt@kms_big_joiner@basic-bigjoiner
+igt@kms_big_joiner@basic-force-joiner
+igt@kms_big_joiner@invalid-modeset-bigjoiner
+igt@kms_big_joiner@invalid-modeset-force-joiner
-igt@kms_big_joiner@2x-modeset
-igt@kms_big_joiner@basic
-igt@kms_big_joiner@invalid-modeset

== Logs ==

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

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

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

* ✗ Fi.CI.IGT: failure for revamp big joiner test (rev7)
  2024-03-10 14:27 [PATCH i-g-t 0/4] revamp big joiner test Kunal Joshi
                   ` (5 preceding siblings ...)
  2024-03-10 14:56 ` ✓ Fi.CI.BAT: " Patchwork
@ 2024-03-10 16:26 ` Patchwork
  6 siblings, 0 replies; 22+ messages in thread
From: Patchwork @ 2024-03-10 16:26 UTC (permalink / raw)
  To: Kunal Joshi; +Cc: igt-dev

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

== Series Details ==

Series: revamp big joiner test (rev7)
URL   : https://patchwork.freedesktop.org/series/130572/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_14416_full -> IGTPW_10799_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with IGTPW_10799_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_10799_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_10799/index.html

Participating hosts (9 -> 9)
------------------------------

  No changes in participating hosts

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@gem_eio@wait-wedge-immediate:
    - shard-dg2:          [PASS][1] -> [ABORT][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-6/igt@gem_eio@wait-wedge-immediate.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@gem_eio@wait-wedge-immediate.html
    - shard-dg1:          [PASS][3] -> [ABORT][4] +1 other test abort
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg1-17/igt@gem_eio@wait-wedge-immediate.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-17/igt@gem_eio@wait-wedge-immediate.html

  * {igt@kms_big_joiner@basic-bigjoiner} (NEW):
    - shard-mtlp:         NOTRUN -> [SKIP][5] +1 other test skip
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-7/igt@kms_big_joiner@basic-bigjoiner.html

  * {igt@kms_big_joiner@basic-force-joiner} (NEW):
    - shard-tglu:         NOTRUN -> [SKIP][6] +3 other tests skip
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-tglu-4/igt@kms_big_joiner@basic-force-joiner.html

  * {igt@kms_big_joiner@invalid-modeset-bigjoiner} (NEW):
    - shard-dg1:          NOTRUN -> [SKIP][7] +2 other tests skip
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-18/igt@kms_big_joiner@invalid-modeset-bigjoiner.html

  * {igt@kms_big_joiner@invalid-modeset-force-joiner} (NEW):
    - shard-dg2:          NOTRUN -> [SKIP][8] +2 other tests skip
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@kms_big_joiner@invalid-modeset-force-joiner.html
    - shard-rkl:          NOTRUN -> [SKIP][9] +2 other tests skip
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-1/igt@kms_big_joiner@invalid-modeset-force-joiner.html

  
#### Warnings ####

  * igt@gem_lmem_swapping@heavy-verify-multi-ccs@lmem0:
    - shard-dg2:          [FAIL][10] ([i915#10378]) -> [FAIL][11]
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-5/igt@gem_lmem_swapping@heavy-verify-multi-ccs@lmem0.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-2/igt@gem_lmem_swapping@heavy-verify-multi-ccs@lmem0.html

  
New tests
---------

  New tests have been introduced between CI_DRM_14416_full and IGTPW_10799_full:

### New IGT tests (9) ###

  * igt@kms_big_joiner@basic-bigjoiner:
    - Statuses : 7 skip(s)
    - Exec time: [0.0] s

  * igt@kms_big_joiner@basic-force-joiner:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@kms_big_joiner@basic-force-joiner@single:
    - Statuses : 1 pass(s)
    - Exec time: [2.54] s

  * igt@kms_big_joiner@invalid-modeset-bigjoiner:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@kms_big_joiner@invalid-modeset-force-joiner:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@kms_big_joiner@invalid-modeset-force-joiner@big_joiner_on_last_pipe:
    - Statuses : 1 pass(s)
    - Exec time: [0.05] s

  * igt@kms_cursor_crc@cursor-dpms@pipe-d-dp-4:
    - Statuses : 1 pass(s)
    - Exec time: [1.17] s

  * igt@kms_cursor_crc@cursor-rapid-movement-256x256@pipe-d-dp-4:
    - Statuses : 1 pass(s)
    - Exec time: [0.40] s

  * igt@kms_cursor_crc@cursor-sliding-256x256@pipe-d-dp-4:
    - Statuses : 1 pass(s)
    - Exec time: [4.23] s

  

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

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

### IGT changes ###

#### Issues hit ####

  * igt@api_intel_allocator@fork-simple-stress:
    - shard-dg2:          [PASS][12] -> [SKIP][13] +3 other tests skip
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-2/igt@api_intel_allocator@fork-simple-stress.html
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@api_intel_allocator@fork-simple-stress.html

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

  * igt@api_intel_bb@crc32:
    - shard-dg1:          NOTRUN -> [SKIP][15] ([i915#6230])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-13/igt@api_intel_bb@crc32.html
    - shard-tglu:         NOTRUN -> [SKIP][16] ([i915#6230])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-tglu-3/igt@api_intel_bb@crc32.html

  * igt@api_intel_bb@object-reloc-keep-cache:
    - shard-dg2:          NOTRUN -> [SKIP][17] ([i915#8411])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@api_intel_bb@object-reloc-keep-cache.html

  * igt@drm_fdinfo@busy-hang@bcs0:
    - shard-dg2:          NOTRUN -> [SKIP][18] ([i915#8414]) +11 other tests skip
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-2/igt@drm_fdinfo@busy-hang@bcs0.html
    - shard-dg1:          NOTRUN -> [SKIP][19] ([i915#8414]) +6 other tests skip
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-19/igt@drm_fdinfo@busy-hang@bcs0.html

  * igt@drm_fdinfo@busy-hang@rcs0:
    - shard-mtlp:         NOTRUN -> [SKIP][20] ([i915#8414]) +6 other tests skip
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-8/igt@drm_fdinfo@busy-hang@rcs0.html

  * igt@drm_fdinfo@most-busy-idle-check-all@rcs0:
    - shard-rkl:          [PASS][21] -> [FAIL][22] ([i915#7742])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-rkl-5/igt@drm_fdinfo@most-busy-idle-check-all@rcs0.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-4/igt@drm_fdinfo@most-busy-idle-check-all@rcs0.html

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

  * igt@gem_caching@writes:
    - shard-mtlp:         NOTRUN -> [SKIP][24] ([i915#4873])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-1/igt@gem_caching@writes.html

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

  * igt@gem_ctx_exec@basic-nohangcheck:
    - shard-rkl:          NOTRUN -> [FAIL][26] ([i915#6268])
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-1/igt@gem_ctx_exec@basic-nohangcheck.html
    - shard-tglu:         [PASS][27] -> [FAIL][28] ([i915#6268])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-tglu-2/igt@gem_ctx_exec@basic-nohangcheck.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-tglu-8/igt@gem_ctx_exec@basic-nohangcheck.html

  * igt@gem_ctx_persistence@engines-hostile:
    - shard-snb:          NOTRUN -> [SKIP][29] ([i915#1099])
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-snb5/igt@gem_ctx_persistence@engines-hostile.html

  * igt@gem_ctx_persistence@heartbeat-hang:
    - shard-dg2:          NOTRUN -> [SKIP][30] ([i915#8555]) +2 other tests skip
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-2/igt@gem_ctx_persistence@heartbeat-hang.html

  * igt@gem_ctx_sseu@engines:
    - shard-dg1:          NOTRUN -> [SKIP][31] ([i915#280]) +1 other test skip
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-19/igt@gem_ctx_sseu@engines.html

  * igt@gem_ctx_sseu@invalid-args:
    - shard-dg2:          NOTRUN -> [SKIP][32] ([i915#280])
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@gem_ctx_sseu@invalid-args.html

  * igt@gem_eio@unwedge-stress:
    - shard-snb:          NOTRUN -> [FAIL][33] ([i915#8898])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-snb6/igt@gem_eio@unwedge-stress.html

  * igt@gem_exec_balancer@bonded-sync:
    - shard-dg2:          NOTRUN -> [SKIP][34] ([i915#4771])
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@gem_exec_balancer@bonded-sync.html

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

  * igt@gem_exec_balancer@noheartbeat:
    - shard-dg1:          NOTRUN -> [SKIP][36] ([i915#8555])
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-13/igt@gem_exec_balancer@noheartbeat.html

  * igt@gem_exec_balancer@parallel-keep-submit-fence:
    - shard-dg2:          [PASS][37] -> [SKIP][38] ([i915#2575]) +23 other tests skip
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-2/igt@gem_exec_balancer@parallel-keep-submit-fence.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@gem_exec_balancer@parallel-keep-submit-fence.html

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

  * igt@gem_exec_capture@many-4k-zero:
    - shard-glk:          NOTRUN -> [FAIL][40] ([i915#9606])
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-glk7/igt@gem_exec_capture@many-4k-zero.html

  * igt@gem_exec_fair@basic-deadline:
    - shard-mtlp:         NOTRUN -> [SKIP][41] ([i915#4473] / [i915#4771])
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-5/igt@gem_exec_fair@basic-deadline.html

  * igt@gem_exec_fair@basic-none-share:
    - shard-dg2:          NOTRUN -> [SKIP][42] ([i915#3539] / [i915#4852]) +5 other tests skip
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@gem_exec_fair@basic-none-share.html
    - shard-dg1:          NOTRUN -> [SKIP][43] ([i915#3539] / [i915#4852]) +1 other test skip
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-13/igt@gem_exec_fair@basic-none-share.html

  * igt@gem_exec_fair@basic-none-solo:
    - shard-mtlp:         NOTRUN -> [SKIP][44] ([i915#4473])
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-3/igt@gem_exec_fair@basic-none-solo.html

  * igt@gem_exec_fair@basic-pace-share@rcs0:
    - shard-glk:          NOTRUN -> [FAIL][45] ([i915#2842])
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-glk8/igt@gem_exec_fair@basic-pace-share@rcs0.html

  * igt@gem_exec_fair@basic-pace-solo@rcs0:
    - shard-rkl:          [PASS][46] -> [FAIL][47] ([i915#2842])
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-rkl-4/igt@gem_exec_fair@basic-pace-solo@rcs0.html
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-1/igt@gem_exec_fair@basic-pace-solo@rcs0.html

  * igt@gem_exec_fair@basic-throttle@rcs0:
    - shard-tglu:         [PASS][48] -> [FAIL][49] ([i915#2842])
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-tglu-10/igt@gem_exec_fair@basic-throttle@rcs0.html
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-tglu-5/igt@gem_exec_fair@basic-throttle@rcs0.html

  * igt@gem_exec_fence@concurrent:
    - shard-dg2:          NOTRUN -> [SKIP][50] ([i915#4812])
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@gem_exec_fence@concurrent.html
    - shard-dg1:          NOTRUN -> [SKIP][51] ([i915#4812])
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-17/igt@gem_exec_fence@concurrent.html

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

  * igt@gem_exec_gttfill@multigpu-basic:
    - shard-mtlp:         NOTRUN -> [SKIP][53] ([i915#7697]) +1 other test skip
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-1/igt@gem_exec_gttfill@multigpu-basic.html

  * igt@gem_exec_reloc@basic-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][54] ([i915#3281]) +14 other tests skip
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@gem_exec_reloc@basic-gtt.html

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

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

  * igt@gem_exec_schedule@preempt-queue-chain:
    - shard-mtlp:         NOTRUN -> [SKIP][58] ([i915#4537] / [i915#4812])
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-2/igt@gem_exec_schedule@preempt-queue-chain.html
    - shard-dg2:          NOTRUN -> [SKIP][59] ([i915#4537] / [i915#4812])
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-2/igt@gem_exec_schedule@preempt-queue-chain.html

  * igt@gem_fence_thrash@bo-write-verify-x:
    - shard-dg1:          NOTRUN -> [SKIP][60] ([i915#4860])
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-17/igt@gem_fence_thrash@bo-write-verify-x.html

  * igt@gem_fence_thrash@bo-write-verify-y:
    - shard-dg2:          NOTRUN -> [SKIP][61] ([i915#4860]) +3 other tests skip
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-5/igt@gem_fence_thrash@bo-write-verify-y.html

  * igt@gem_fenced_exec_thrash@too-many-fences:
    - shard-mtlp:         NOTRUN -> [SKIP][62] ([i915#4860])
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-2/igt@gem_fenced_exec_thrash@too-many-fences.html

  * igt@gem_lmem_swapping@heavy-verify-multi-ccs:
    - shard-mtlp:         NOTRUN -> [SKIP][63] ([i915#4613]) +5 other tests skip
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-7/igt@gem_lmem_swapping@heavy-verify-multi-ccs.html

  * igt@gem_lmem_swapping@heavy-verify-multi@lmem0:
    - shard-dg2:          [PASS][64] -> [FAIL][65] ([i915#10378])
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-10/igt@gem_lmem_swapping@heavy-verify-multi@lmem0.html
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-5/igt@gem_lmem_swapping@heavy-verify-multi@lmem0.html

  * igt@gem_lmem_swapping@heavy-verify-random-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][66] ([i915#9643])
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@gem_lmem_swapping@heavy-verify-random-ccs.html

  * igt@gem_lmem_swapping@parallel-random:
    - shard-tglu:         NOTRUN -> [SKIP][67] ([i915#4613])
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-tglu-5/igt@gem_lmem_swapping@parallel-random.html

  * igt@gem_lmem_swapping@verify:
    - shard-rkl:          NOTRUN -> [SKIP][68] ([i915#4613])
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-4/igt@gem_lmem_swapping@verify.html

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

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

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

  * igt@gem_mmap@big-bo:
    - shard-mtlp:         NOTRUN -> [SKIP][72] ([i915#4083]) +4 other tests skip
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-5/igt@gem_mmap@big-bo.html

  * igt@gem_mmap_gtt@basic-read-write-distinct:
    - shard-mtlp:         NOTRUN -> [SKIP][73] ([i915#4077]) +8 other tests skip
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-5/igt@gem_mmap_gtt@basic-read-write-distinct.html

  * igt@gem_mmap_gtt@coherency:
    - shard-dg1:          NOTRUN -> [SKIP][74] ([i915#4077]) +7 other tests skip
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-19/igt@gem_mmap_gtt@coherency.html

  * igt@gem_mmap_wc@write-prefaulted:
    - shard-dg2:          NOTRUN -> [SKIP][75] ([i915#4083]) +5 other tests skip
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@gem_mmap_wc@write-prefaulted.html

  * igt@gem_mmap_wc@write-read:
    - shard-dg1:          NOTRUN -> [SKIP][76] ([i915#4083]) +4 other tests skip
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-17/igt@gem_mmap_wc@write-read.html

  * igt@gem_partial_pwrite_pread@reads-uncached:
    - shard-dg1:          NOTRUN -> [SKIP][77] ([i915#3282]) +2 other tests skip
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-17/igt@gem_partial_pwrite_pread@reads-uncached.html

  * igt@gem_pwrite@basic-self:
    - shard-mtlp:         NOTRUN -> [SKIP][78] ([i915#3282])
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-8/igt@gem_pwrite@basic-self.html

  * igt@gem_pwrite_snooped:
    - shard-rkl:          NOTRUN -> [SKIP][79] ([i915#3282]) +3 other tests skip
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-7/igt@gem_pwrite_snooped.html

  * igt@gem_pxp@display-protected-crc:
    - shard-rkl:          NOTRUN -> [SKIP][80] ([i915#4270]) +2 other tests skip
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-1/igt@gem_pxp@display-protected-crc.html

  * igt@gem_pxp@protected-encrypted-src-copy-not-readible:
    - shard-dg1:          NOTRUN -> [SKIP][81] ([i915#4270]) +2 other tests skip
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-19/igt@gem_pxp@protected-encrypted-src-copy-not-readible.html

  * igt@gem_pxp@reject-modify-context-protection-on:
    - shard-mtlp:         NOTRUN -> [SKIP][82] ([i915#4270]) +1 other test skip
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-3/igt@gem_pxp@reject-modify-context-protection-on.html

  * igt@gem_pxp@verify-pxp-execution-after-suspend-resume:
    - shard-dg2:          NOTRUN -> [SKIP][83] ([i915#4270]) +5 other tests skip
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-5/igt@gem_pxp@verify-pxp-execution-after-suspend-resume.html

  * igt@gem_pxp@verify-pxp-stale-buf-execution:
    - shard-tglu:         NOTRUN -> [SKIP][84] ([i915#4270])
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-tglu-2/igt@gem_pxp@verify-pxp-stale-buf-execution.html

  * igt@gem_readwrite@write-bad-handle:
    - shard-dg2:          NOTRUN -> [SKIP][85] ([i915#3282]) +1 other test skip
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-1/igt@gem_readwrite@write-bad-handle.html

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

  * igt@gem_render_tiled_blits@basic:
    - shard-mtlp:         NOTRUN -> [SKIP][87] ([i915#4079])
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-1/igt@gem_render_tiled_blits@basic.html

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

  * igt@gem_set_tiling_vs_gtt:
    - shard-dg2:          NOTRUN -> [SKIP][89] ([i915#4079])
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-10/igt@gem_set_tiling_vs_gtt.html

  * igt@gem_tiled_partial_pwrite_pread@writes:
    - shard-dg2:          NOTRUN -> [SKIP][90] ([i915#4077]) +12 other tests skip
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@gem_tiled_partial_pwrite_pread@writes.html

  * igt@gem_tiled_pread_basic:
    - shard-dg1:          NOTRUN -> [SKIP][91] ([i915#4079])
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-15/igt@gem_tiled_pread_basic.html

  * igt@gem_userptr_blits@create-destroy-unsync:
    - shard-dg2:          NOTRUN -> [SKIP][92] ([i915#3297]) +1 other test skip
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@gem_userptr_blits@create-destroy-unsync.html
    - shard-rkl:          NOTRUN -> [SKIP][93] ([i915#3297]) +3 other tests skip
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-1/igt@gem_userptr_blits@create-destroy-unsync.html

  * igt@gem_userptr_blits@map-fixed-invalidate:
    - shard-dg1:          NOTRUN -> [SKIP][94] ([i915#3297] / [i915#4880]) +1 other test skip
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-15/igt@gem_userptr_blits@map-fixed-invalidate.html

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

  * igt@gem_userptr_blits@mmap-offset-banned@gtt:
    - shard-mtlp:         NOTRUN -> [SKIP][96] ([i915#3297]) +2 other tests skip
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-2/igt@gem_userptr_blits@mmap-offset-banned@gtt.html

  * igt@gen9_exec_parse@allowed-all:
    - shard-dg2:          NOTRUN -> [SKIP][97] ([i915#2856]) +3 other tests skip
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@gen9_exec_parse@allowed-all.html

  * igt@gen9_exec_parse@allowed-single:
    - shard-glk:          [PASS][98] -> [INCOMPLETE][99] ([i915#5566])
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-glk6/igt@gen9_exec_parse@allowed-single.html
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-glk4/igt@gen9_exec_parse@allowed-single.html

  * igt@gen9_exec_parse@batch-zero-length:
    - shard-mtlp:         NOTRUN -> [SKIP][100] ([i915#2856]) +2 other tests skip
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-2/igt@gen9_exec_parse@batch-zero-length.html

  * igt@gen9_exec_parse@valid-registers:
    - shard-dg1:          NOTRUN -> [SKIP][101] ([i915#2527]) +3 other tests skip
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-15/igt@gen9_exec_parse@valid-registers.html

  * igt@i915_fb_tiling:
    - shard-mtlp:         NOTRUN -> [SKIP][102] ([i915#4881])
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-8/igt@i915_fb_tiling.html

  * igt@i915_module_load@load:
    - shard-mtlp:         NOTRUN -> [SKIP][103] ([i915#6227])
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-2/igt@i915_module_load@load.html
    - shard-dg2:          NOTRUN -> [SKIP][104] ([i915#6227])
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@i915_module_load@load.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-dg2:          NOTRUN -> [WARN][105] ([i915#7356])
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-2/igt@i915_module_load@reload-with-fault-injection.html

  * igt@i915_pm_rpm@gem-mmap-type:
    - shard-dg2:          NOTRUN -> [SKIP][106] ([i915#9980])
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@i915_pm_rpm@gem-mmap-type.html

  * igt@i915_pm_rpm@system-suspend-execbuf:
    - shard-dg2:          [PASS][107] -> [INCOMPLETE][108] ([i915#9142])
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-5/igt@i915_pm_rpm@system-suspend-execbuf.html
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-2/igt@i915_pm_rpm@system-suspend-execbuf.html

  * igt@i915_pm_rps@thresholds-park@gt0:
    - shard-dg1:          NOTRUN -> [SKIP][109] ([i915#8925]) +1 other test skip
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-17/igt@i915_pm_rps@thresholds-park@gt0.html

  * igt@intel_hwmon@hwmon-read:
    - shard-mtlp:         NOTRUN -> [SKIP][110] ([i915#7707])
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-1/igt@intel_hwmon@hwmon-read.html

  * igt@kms_addfb_basic@addfb25-framebuffer-vs-set-tiling:
    - shard-dg2:          NOTRUN -> [SKIP][111] ([i915#4212]) +1 other test skip
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-5/igt@kms_addfb_basic@addfb25-framebuffer-vs-set-tiling.html

  * igt@kms_addfb_basic@addfb25-x-tiled-mismatch-legacy:
    - shard-mtlp:         NOTRUN -> [SKIP][112] ([i915#4212]) +1 other test skip
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-1/igt@kms_addfb_basic@addfb25-x-tiled-mismatch-legacy.html

  * igt@kms_addfb_basic@bo-too-small-due-to-tiling:
    - shard-dg1:          NOTRUN -> [SKIP][113] ([i915#4212]) +3 other tests skip
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-16/igt@kms_addfb_basic@bo-too-small-due-to-tiling.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing:
    - shard-mtlp:         NOTRUN -> [SKIP][114] ([i915#1769] / [i915#3555])
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-5/igt@kms_atomic_transition@plane-all-modeset-transition-fencing.html

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

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
    - shard-snb:          NOTRUN -> [SKIP][116] +75 other tests skip
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-snb2/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip:
    - shard-dg1:          NOTRUN -> [SKIP][117] ([i915#4538] / [i915#5286]) +7 other tests skip
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-16/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip.html

  * igt@kms_big_fb@linear-32bpp-rotate-90:
    - shard-rkl:          NOTRUN -> [SKIP][118] ([i915#3638])
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-5/igt@kms_big_fb@linear-32bpp-rotate-90.html

  * igt@kms_big_fb@linear-8bpp-rotate-270:
    - shard-dg1:          NOTRUN -> [SKIP][119] ([i915#3638]) +2 other tests skip
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-16/igt@kms_big_fb@linear-8bpp-rotate-270.html

  * igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0-async-flip:
    - shard-tglu:         [PASS][120] -> [FAIL][121] ([i915#3743])
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-tglu-8/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0-async-flip.html
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-tglu-6/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-0-async-flip.html

  * igt@kms_big_fb@y-tiled-addfb-size-offset-overflow:
    - shard-dg2:          NOTRUN -> [SKIP][122] ([i915#5190]) +13 other tests skip
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@kms_big_fb@y-tiled-addfb-size-offset-overflow.html

  * igt@kms_big_fb@y-tiled-addfb-size-overflow:
    - shard-mtlp:         NOTRUN -> [SKIP][123] ([i915#6187])
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-7/igt@kms_big_fb@y-tiled-addfb-size-overflow.html

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

  * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip:
    - shard-dg1:          NOTRUN -> [SKIP][125] ([i915#4538]) +2 other tests skip
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-19/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip.html

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

  * igt@kms_chamelium_audio@hdmi-audio-edid:
    - shard-dg1:          NOTRUN -> [SKIP][127] ([i915#7828]) +10 other tests skip
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-19/igt@kms_chamelium_audio@hdmi-audio-edid.html

  * igt@kms_chamelium_edid@dp-mode-timings:
    - shard-mtlp:         NOTRUN -> [SKIP][128] ([i915#7828]) +7 other tests skip
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-8/igt@kms_chamelium_edid@dp-mode-timings.html

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

  * igt@kms_chamelium_frames@hdmi-frame-dump:
    - shard-rkl:          NOTRUN -> [SKIP][130] ([i915#7828]) +3 other tests skip
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-5/igt@kms_chamelium_frames@hdmi-frame-dump.html

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

  * igt@kms_content_protection@atomic:
    - shard-dg1:          NOTRUN -> [SKIP][132] ([i915#7116] / [i915#9424])
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-19/igt@kms_content_protection@atomic.html

  * igt@kms_content_protection@dp-mst-lic-type-0:
    - shard-mtlp:         NOTRUN -> [SKIP][133] ([i915#3299])
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-7/igt@kms_content_protection@dp-mst-lic-type-0.html
    - shard-dg2:          NOTRUN -> [SKIP][134] ([i915#3299])
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-5/igt@kms_content_protection@dp-mst-lic-type-0.html

  * igt@kms_content_protection@legacy:
    - shard-dg2:          NOTRUN -> [SKIP][135] ([i915#7118] / [i915#9424])
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@kms_content_protection@legacy.html

  * igt@kms_content_protection@lic-type-0:
    - shard-dg2:          NOTRUN -> [SKIP][136] ([i915#9424])
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-10/igt@kms_content_protection@lic-type-0.html

  * igt@kms_content_protection@mei-interface:
    - shard-mtlp:         NOTRUN -> [SKIP][137] ([i915#8063] / [i915#9433])
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-8/igt@kms_content_protection@mei-interface.html

  * igt@kms_cursor_crc@cursor-offscreen-32x10:
    - shard-mtlp:         NOTRUN -> [SKIP][138] ([i915#3555] / [i915#8814]) +2 other tests skip
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-7/igt@kms_cursor_crc@cursor-offscreen-32x10.html

  * igt@kms_cursor_crc@cursor-onscreen-128x42:
    - shard-mtlp:         NOTRUN -> [SKIP][139] ([i915#8814])
   [139]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-8/igt@kms_cursor_crc@cursor-onscreen-128x42.html

  * igt@kms_cursor_crc@cursor-onscreen-512x170:
    - shard-dg2:          NOTRUN -> [SKIP][140] ([i915#3359])
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-5/igt@kms_cursor_crc@cursor-onscreen-512x170.html

  * igt@kms_cursor_crc@cursor-random-32x32:
    - shard-dg1:          NOTRUN -> [SKIP][141] ([i915#3555]) +5 other tests skip
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-16/igt@kms_cursor_crc@cursor-random-32x32.html

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

  * igt@kms_cursor_crc@cursor-rapid-movement-512x170:
    - shard-dg1:          NOTRUN -> [SKIP][143] ([i915#3359])
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-19/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic:
    - shard-dg2:          NOTRUN -> [SKIP][144] ([i915#4103] / [i915#4213]) +1 other test skip
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html
    - shard-dg1:          NOTRUN -> [SKIP][145] ([i915#4103] / [i915#4213])
   [145]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-18/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html

  * igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size:
    - shard-mtlp:         NOTRUN -> [SKIP][146] ([i915#9809]) +1 other test skip
   [146]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-3/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size.html

  * igt@kms_dirtyfb@psr-dirtyfb-ioctl:
    - shard-rkl:          NOTRUN -> [SKIP][147] ([i915#9723]) +2 other tests skip
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-5/igt@kms_dirtyfb@psr-dirtyfb-ioctl.html
    - shard-dg2:          NOTRUN -> [SKIP][148] ([i915#9833])
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-10/igt@kms_dirtyfb@psr-dirtyfb-ioctl.html

  * igt@kms_display_modes@extended-mode-basic:
    - shard-dg2:          NOTRUN -> [SKIP][149] ([i915#3555]) +7 other tests skip
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@kms_display_modes@extended-mode-basic.html
    - shard-mtlp:         NOTRUN -> [SKIP][150] ([i915#3555] / [i915#8827])
   [150]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-8/igt@kms_display_modes@extended-mode-basic.html

  * igt@kms_display_modes@mst-extended-mode-negative:
    - shard-dg2:          NOTRUN -> [SKIP][151] ([i915#8588])
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-5/igt@kms_display_modes@mst-extended-mode-negative.html

  * igt@kms_dp_aux_dev:
    - shard-dg2:          [PASS][152] -> [SKIP][153] ([i915#1257])
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-11/igt@kms_dp_aux_dev.html
   [153]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-2/igt@kms_dp_aux_dev.html
    - shard-dg1:          NOTRUN -> [SKIP][154] ([i915#1257])
   [154]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-18/igt@kms_dp_aux_dev.html

  * igt@kms_draw_crc@draw-method-mmap-gtt:
    - shard-dg1:          NOTRUN -> [SKIP][155] ([i915#8812])
   [155]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-19/igt@kms_draw_crc@draw-method-mmap-gtt.html

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

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

  * igt@kms_dsc@dsc-with-bpc-formats:
    - shard-dg2:          NOTRUN -> [SKIP][158] ([i915#3555] / [i915#3840])
   [158]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@kms_dsc@dsc-with-bpc-formats.html
    - shard-rkl:          NOTRUN -> [SKIP][159] ([i915#3555] / [i915#3840])
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-4/igt@kms_dsc@dsc-with-bpc-formats.html

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

  * igt@kms_fbcon_fbt@psr-suspend:
    - shard-dg2:          NOTRUN -> [SKIP][161] ([i915#3469])
   [161]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@kms_fbcon_fbt@psr-suspend.html

  * igt@kms_feature_discovery@display-2x:
    - shard-mtlp:         NOTRUN -> [SKIP][162] ([i915#1839])
   [162]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-2/igt@kms_feature_discovery@display-2x.html
    - shard-dg2:          NOTRUN -> [SKIP][163] ([i915#1839]) +1 other test skip
   [163]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@kms_feature_discovery@display-2x.html

  * igt@kms_feature_discovery@display-4x:
    - shard-dg1:          NOTRUN -> [SKIP][164] ([i915#1839]) +1 other test skip
   [164]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-16/igt@kms_feature_discovery@display-4x.html

  * igt@kms_feature_discovery@dp-mst:
    - shard-dg1:          NOTRUN -> [SKIP][165] ([i915#9337])
   [165]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-18/igt@kms_feature_discovery@dp-mst.html

  * igt@kms_feature_discovery@psr2:
    - shard-dg2:          NOTRUN -> [SKIP][166] ([i915#658])
   [166]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@kms_feature_discovery@psr2.html
    - shard-rkl:          NOTRUN -> [SKIP][167] ([i915#658])
   [167]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-4/igt@kms_feature_discovery@psr2.html

  * igt@kms_fence_pin_leak:
    - shard-dg1:          NOTRUN -> [SKIP][168] ([i915#4881])
   [168]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-17/igt@kms_fence_pin_leak.html

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

  * igt@kms_flip@2x-plain-flip:
    - shard-rkl:          NOTRUN -> [SKIP][170] +20 other tests skip
   [170]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-1/igt@kms_flip@2x-plain-flip.html

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

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

  * igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-downscaling@pipe-a-valid-mode:
    - shard-rkl:          NOTRUN -> [SKIP][173] ([i915#2672]) +1 other test skip
   [173]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-5/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-downscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-upscaling@pipe-a-valid-mode:
    - shard-dg1:          NOTRUN -> [SKIP][174] ([i915#2587] / [i915#2672]) +3 other tests skip
   [174]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-18/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-64bpp-4tile-upscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-downscaling@pipe-a-default-mode:
    - shard-mtlp:         NOTRUN -> [SKIP][175] ([i915#2672] / [i915#3555])
   [175]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-1/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-downscaling@pipe-a-default-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode:
    - shard-dg2:          NOTRUN -> [SKIP][176] ([i915#2672]) +5 other tests skip
   [176]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-1/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling@pipe-a-default-mode:
    - shard-mtlp:         NOTRUN -> [SKIP][177] ([i915#2672])
   [177]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-7/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling@pipe-a-default-mode.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-cpu:
    - shard-snb:          [PASS][178] -> [SKIP][179] +4 other tests skip
   [178]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-snb7/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-cpu.html
   [179]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-snb5/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-blt:
    - shard-mtlp:         NOTRUN -> [SKIP][180] ([i915#1825]) +26 other tests skip
   [180]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-7/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-cur-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-pgflip-blt:
    - shard-dg1:          NOTRUN -> [SKIP][181] +38 other tests skip
   [181]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-18/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-pwrite:
    - shard-tglu:         NOTRUN -> [SKIP][182] +7 other tests skip
   [182]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-tglu-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-render:
    - shard-dg2:          NOTRUN -> [SKIP][183] ([i915#3458]) +15 other tests skip
   [183]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-2/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][184] ([i915#8708]) +24 other tests skip
   [184]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-indfb-draw-mmap-gtt.html

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

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-indfb-plflip-blt:
    - shard-rkl:          NOTRUN -> [SKIP][186] ([i915#1825]) +17 other tests skip
   [186]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-5/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-indfb-plflip-blt.html

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

  * igt@kms_frontbuffer_tracking@pipe-fbc-rte:
    - shard-dg2:          NOTRUN -> [SKIP][188] ([i915#9766])
   [188]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@kms_frontbuffer_tracking@pipe-fbc-rte.html

  * igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-shrfb-draw-blt:
    - shard-rkl:          NOTRUN -> [SKIP][189] ([i915#3023]) +12 other tests skip
   [189]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-1/igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-shrfb-draw-blt.html

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

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-indfb-plflip-blt:
    - shard-dg1:          NOTRUN -> [SKIP][191] ([i915#3458]) +10 other tests skip
   [191]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-16/igt@kms_frontbuffer_tracking@psr-1p-primscrn-indfb-plflip-blt.html

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

  * igt@kms_hdr@bpc-switch:
    - shard-dg1:          NOTRUN -> [SKIP][193] ([i915#3555] / [i915#8228])
   [193]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-16/igt@kms_hdr@bpc-switch.html
    - shard-dg2:          NOTRUN -> [SKIP][194] ([i915#3555] / [i915#8228])
   [194]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-5/igt@kms_hdr@bpc-switch.html

  * igt@kms_invalid_mode@clock-too-high@pipe-a-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][195] ([i915#9457]) +3 other tests skip
   [195]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-4/igt@kms_invalid_mode@clock-too-high@pipe-a-edp-1.html

  * igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
    - shard-dg2:          NOTRUN -> [SKIP][196] ([i915#4816])
   [196]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html
    - shard-rkl:          NOTRUN -> [SKIP][197] ([i915#4816])
   [197]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-4/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html

  * igt@kms_panel_fitting@atomic-fastset:
    - shard-dg2:          NOTRUN -> [SKIP][198] ([i915#6301])
   [198]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-1/igt@kms_panel_fitting@atomic-fastset.html

  * igt@kms_pipe_b_c_ivb@disable-pipe-b-enable-pipe-c:
    - shard-dg2:          NOTRUN -> [SKIP][199] +42 other tests skip
   [199]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-2/igt@kms_pipe_b_c_ivb@disable-pipe-b-enable-pipe-c.html

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

  * igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [FAIL][201] ([i915#8292])
   [201]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-19/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-4.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format@pipe-b-hdmi-a-1:
    - shard-glk:          NOTRUN -> [SKIP][202] +232 other tests skip
   [202]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-glk8/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format@pipe-b-hdmi-a-1.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-25-with-rotation:
    - shard-dg2:          NOTRUN -> [SKIP][203] ([i915#2575] / [i915#9423]) +1 other test skip
   [203]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-rotation.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-25-with-rotation@pipe-a-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [SKIP][204] ([i915#9423]) +7 other tests skip
   [204]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-17/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-rotation@pipe-a-hdmi-a-4.html

  * igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][205] ([i915#9423]) +7 other tests skip
   [205]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-1/igt@kms_plane_scaling@plane-scaler-unity-scaling-with-rotation@pipe-a-hdmi-a-2.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-d-hdmi-a-1:
    - shard-tglu:         NOTRUN -> [SKIP][206] ([i915#5235]) +3 other tests skip
   [206]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-tglu-3/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-d-hdmi-a-1.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-b-dp-4:
    - shard-dg2:          NOTRUN -> [SKIP][207] ([i915#5235] / [i915#9423]) +11 other tests skip
   [207]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-b-dp-4.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-5-upscale-20x20@pipe-b-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][208] ([i915#5235]) +9 other tests skip
   [208]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-3/igt@kms_plane_scaling@planes-downscale-factor-0-5-upscale-20x20@pipe-b-edp-1.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-5@pipe-d-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][209] ([i915#3555] / [i915#5235]) +1 other test skip
   [209]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-5/igt@kms_plane_scaling@planes-downscale-factor-0-5@pipe-d-edp-1.html

  * igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25@pipe-a-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][210] ([i915#5235]) +5 other tests skip
   [210]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-4/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-25@pipe-a-hdmi-a-1.html

  * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-a-hdmi-a-2:
    - shard-dg2:          NOTRUN -> [SKIP][211] ([i915#5235] / [i915#9423] / [i915#9728]) +3 other tests skip
   [211]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-2/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-25@pipe-a-hdmi-a-2.html

  * igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-d-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [SKIP][212] ([i915#5235]) +7 other tests skip
   [212]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-17/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-d-hdmi-a-4.html

  * igt@kms_pm_backlight@fade-with-dpms:
    - shard-dg1:          NOTRUN -> [SKIP][213] ([i915#5354])
   [213]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-19/igt@kms_pm_backlight@fade-with-dpms.html

  * igt@kms_pm_dc@dc3co-vpb-simulation:
    - shard-dg2:          NOTRUN -> [SKIP][214] ([i915#9685]) +1 other test skip
   [214]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-5/igt@kms_pm_dc@dc3co-vpb-simulation.html

  * igt@kms_pm_dc@dc5-dpms-negative:
    - shard-mtlp:         NOTRUN -> [SKIP][215] ([i915#9293])
   [215]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-6/igt@kms_pm_dc@dc5-dpms-negative.html

  * igt@kms_pm_dc@dc6-dpms:
    - shard-dg2:          NOTRUN -> [SKIP][216] ([i915#5978])
   [216]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-5/igt@kms_pm_dc@dc6-dpms.html
    - shard-rkl:          NOTRUN -> [SKIP][217] ([i915#3361])
   [217]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-7/igt@kms_pm_dc@dc6-dpms.html

  * igt@kms_pm_rpm@dpms-mode-unset-non-lpsp:
    - shard-dg2:          [PASS][218] -> [SKIP][219] ([i915#9980])
   [218]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-11/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
   [219]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html

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

  * igt@kms_pm_rpm@modeset-non-lpsp-stress:
    - shard-dg2:          [PASS][221] -> [SKIP][222] ([i915#9519])
   [221]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-6/igt@kms_pm_rpm@modeset-non-lpsp-stress.html
   [222]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-10/igt@kms_pm_rpm@modeset-non-lpsp-stress.html
    - shard-rkl:          [PASS][223] -> [SKIP][224] ([i915#9519])
   [223]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-rkl-1/igt@kms_pm_rpm@modeset-non-lpsp-stress.html
   [224]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-7/igt@kms_pm_rpm@modeset-non-lpsp-stress.html

  * igt@kms_pm_rpm@pc8-residency:
    - shard-mtlp:         NOTRUN -> [SKIP][225] +14 other tests skip
   [225]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-8/igt@kms_pm_rpm@pc8-residency.html

  * igt@kms_prime@basic-modeset-hybrid:
    - shard-dg1:          NOTRUN -> [SKIP][226] ([i915#6524]) +1 other test skip
   [226]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-16/igt@kms_prime@basic-modeset-hybrid.html

  * igt@kms_psr2_sf@fbc-overlay-plane-move-continuous-exceed-fully-sf@psr2-pipe-a-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][227] ([i915#9808]) +2 other tests skip
   [227]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-5/igt@kms_psr2_sf@fbc-overlay-plane-move-continuous-exceed-fully-sf@psr2-pipe-a-edp-1.html

  * igt@kms_psr2_su@frontbuffer-xrgb8888:
    - shard-rkl:          NOTRUN -> [SKIP][228] ([i915#9683])
   [228]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-4/igt@kms_psr2_su@frontbuffer-xrgb8888.html

  * igt@kms_psr2_su@page_flip-p010:
    - shard-dg2:          NOTRUN -> [SKIP][229] ([i915#9683])
   [229]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-10/igt@kms_psr2_su@page_flip-p010.html

  * igt@kms_psr@fbc-psr-cursor-mmap-gtt@edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][230] ([i915#9688]) +7 other tests skip
   [230]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-6/igt@kms_psr@fbc-psr-cursor-mmap-gtt@edp-1.html

  * igt@kms_psr@fbc-psr2-cursor-blt:
    - shard-dg1:          NOTRUN -> [SKIP][231] ([i915#9732]) +17 other tests skip
   [231]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-18/igt@kms_psr@fbc-psr2-cursor-blt.html

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

  * igt@kms_psr@psr-cursor-mmap-cpu:
    - shard-dg2:          NOTRUN -> [SKIP][233] ([i915#9732]) +20 other tests skip
   [233]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-5/igt@kms_psr@psr-cursor-mmap-cpu.html

  * igt@kms_psr@psr-primary-mmap-gtt@edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][234] ([i915#4077] / [i915#9688])
   [234]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-6/igt@kms_psr@psr-primary-mmap-gtt@edp-1.html

  * igt@kms_psr@psr2-cursor-blt:
    - shard-dg2:          NOTRUN -> [SKIP][235] ([i915#9673] / [i915#9732]) +4 other tests skip
   [235]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@kms_psr@psr2-cursor-blt.html

  * igt@kms_psr@psr2-cursor-mmap-gtt:
    - shard-rkl:          NOTRUN -> [SKIP][236] ([i915#9732]) +12 other tests skip
   [236]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-4/igt@kms_psr@psr2-cursor-mmap-gtt.html

  * igt@kms_rotation_crc@primary-rotation-90:
    - shard-mtlp:         NOTRUN -> [SKIP][237] ([i915#4235]) +1 other test skip
   [237]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-3/igt@kms_rotation_crc@primary-rotation-90.html

  * igt@kms_rotation_crc@primary-y-tiled-reflect-x-270:
    - shard-dg2:          NOTRUN -> [SKIP][238] ([i915#4235] / [i915#5190]) +1 other test skip
   [238]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-10/igt@kms_rotation_crc@primary-y-tiled-reflect-x-270.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270:
    - shard-dg1:          NOTRUN -> [SKIP][239] ([i915#5289]) +1 other test skip
   [239]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-13/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-b-hdmi-a-1:
    - shard-tglu:         [PASS][240] -> [FAIL][241] ([i915#9196]) +1 other test fail
   [240]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-tglu-3/igt@kms_universal_plane@cursor-fb-leak@pipe-b-hdmi-a-1.html
   [241]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-tglu-6/igt@kms_universal_plane@cursor-fb-leak@pipe-b-hdmi-a-1.html

  * igt@kms_vrr@flip-basic:
    - shard-mtlp:         NOTRUN -> [SKIP][242] ([i915#3555] / [i915#8808])
   [242]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-8/igt@kms_vrr@flip-basic.html

  * igt@kms_vrr@flip-basic-fastset:
    - shard-dg2:          NOTRUN -> [SKIP][243] ([i915#9906])
   [243]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@kms_vrr@flip-basic-fastset.html

  * igt@kms_vrr@negative-basic:
    - shard-rkl:          NOTRUN -> [SKIP][244] ([i915#3555]) +2 other tests skip
   [244]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-4/igt@kms_vrr@negative-basic.html

  * igt@kms_vrr@seamless-rr-switch-vrr:
    - shard-dg1:          NOTRUN -> [SKIP][245] ([i915#9906]) +1 other test skip
   [245]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-17/igt@kms_vrr@seamless-rr-switch-vrr.html

  * igt@kms_writeback@writeback-fb-id:
    - shard-rkl:          NOTRUN -> [SKIP][246] ([i915#2437])
   [246]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-5/igt@kms_writeback@writeback-fb-id.html

  * igt@kms_writeback@writeback-pixel-formats:
    - shard-dg1:          NOTRUN -> [SKIP][247] ([i915#2437] / [i915#9412])
   [247]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-13/igt@kms_writeback@writeback-pixel-formats.html

  * igt@perf@i915-ref-count:
    - shard-dg2:          NOTRUN -> [SKIP][248] ([i915#5608]) +3 other tests skip
   [248]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@perf@i915-ref-count.html

  * igt@perf_pmu@busy-double-start@bcs0:
    - shard-mtlp:         [PASS][249] -> [FAIL][250] ([i915#4349])
   [249]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-mtlp-5/igt@perf_pmu@busy-double-start@bcs0.html
   [250]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-1/igt@perf_pmu@busy-double-start@bcs0.html

  * igt@perf_pmu@faulting-read@gtt:
    - shard-mtlp:         NOTRUN -> [SKIP][251] ([i915#8440])
   [251]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-2/igt@perf_pmu@faulting-read@gtt.html

  * igt@perf_pmu@pmu-read:
    - shard-dg2:          [PASS][252] -> [SKIP][253] ([i915#5608])
   [252]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-2/igt@perf_pmu@pmu-read.html
   [253]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@perf_pmu@pmu-read.html

  * igt@perf_pmu@rc6@other-idle-gt0:
    - shard-dg2:          NOTRUN -> [SKIP][254] ([i915#8516])
   [254]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-1/igt@perf_pmu@rc6@other-idle-gt0.html
    - shard-dg1:          NOTRUN -> [SKIP][255] ([i915#8516])
   [255]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-15/igt@perf_pmu@rc6@other-idle-gt0.html

  * igt@perf_pmu@rc6@runtime-pm-gt0:
    - shard-dg2:          NOTRUN -> [ABORT][256] ([i915#9853])
   [256]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-1/igt@perf_pmu@rc6@runtime-pm-gt0.html
    - shard-dg1:          NOTRUN -> [ABORT][257] ([i915#9853])
   [257]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-15/igt@perf_pmu@rc6@runtime-pm-gt0.html

  * igt@prime_mmap@test_aperture_limit@test_aperture_limit-smem:
    - shard-dg2:          NOTRUN -> [CRASH][258] ([i915#9351])
   [258]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-2/igt@prime_mmap@test_aperture_limit@test_aperture_limit-smem.html

  * igt@prime_vgem@basic-fence-flip:
    - shard-dg1:          NOTRUN -> [SKIP][259] ([i915#3708])
   [259]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-17/igt@prime_vgem@basic-fence-flip.html

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

  * igt@prime_vgem@basic-gtt:
    - shard-mtlp:         NOTRUN -> [SKIP][261] ([i915#3708] / [i915#4077]) +1 other test skip
   [261]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-7/igt@prime_vgem@basic-gtt.html

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

  * igt@prime_vgem@fence-write-hang:
    - shard-rkl:          NOTRUN -> [SKIP][263] ([i915#3708])
   [263]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-1/igt@prime_vgem@fence-write-hang.html

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

  * igt@syncobj_timeline@invalid-wait-zero-handles:
    - shard-dg2:          NOTRUN -> [FAIL][265] ([i915#9781])
   [265]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@syncobj_timeline@invalid-wait-zero-handles.html
    - shard-rkl:          NOTRUN -> [FAIL][266] ([i915#9781])
   [266]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-4/igt@syncobj_timeline@invalid-wait-zero-handles.html
    - shard-glk:          NOTRUN -> [FAIL][267] ([i915#9781])
   [267]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-glk7/igt@syncobj_timeline@invalid-wait-zero-handles.html

  * igt@syncobj_wait@invalid-wait-zero-handles:
    - shard-dg2:          NOTRUN -> [FAIL][268] ([i915#9779])
   [268]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-5/igt@syncobj_wait@invalid-wait-zero-handles.html
    - shard-dg1:          NOTRUN -> [FAIL][269] ([i915#9779])
   [269]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-16/igt@syncobj_wait@invalid-wait-zero-handles.html
    - shard-glk:          NOTRUN -> [FAIL][270] ([i915#9779])
   [270]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-glk6/igt@syncobj_wait@invalid-wait-zero-handles.html

  * igt@v3d/v3d_perfmon@destroy-valid-perfmon:
    - shard-tglu:         NOTRUN -> [SKIP][271] ([i915#2575])
   [271]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-tglu-9/igt@v3d/v3d_perfmon@destroy-valid-perfmon.html

  * igt@v3d/v3d_submit_csd@bad-bo:
    - shard-mtlp:         NOTRUN -> [SKIP][272] ([i915#2575]) +9 other tests skip
   [272]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-3/igt@v3d/v3d_submit_csd@bad-bo.html

  * igt@v3d/v3d_submit_csd@bad-flag:
    - shard-dg2:          NOTRUN -> [SKIP][273] ([i915#2575]) +46 other tests skip
   [273]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@v3d/v3d_submit_csd@bad-flag.html

  * igt@v3d/v3d_submit_csd@bad-perfmon:
    - shard-dg1:          NOTRUN -> [SKIP][274] ([i915#2575]) +12 other tests skip
   [274]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-19/igt@v3d/v3d_submit_csd@bad-perfmon.html

  * igt@vc4/vc4_label_bo@set-bad-name:
    - shard-dg1:          NOTRUN -> [SKIP][275] ([i915#7711]) +10 other tests skip
   [275]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-13/igt@vc4/vc4_label_bo@set-bad-name.html

  * igt@vc4/vc4_perfmon@get-values-valid-perfmon:
    - shard-rkl:          NOTRUN -> [SKIP][276] ([i915#7711]) +1 other test skip
   [276]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-4/igt@vc4/vc4_perfmon@get-values-valid-perfmon.html

  * igt@vc4/vc4_purgeable_bo@free-purged-bo:
    - shard-mtlp:         NOTRUN -> [SKIP][277] ([i915#7711]) +3 other tests skip
   [277]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-2/igt@vc4/vc4_purgeable_bo@free-purged-bo.html

  * igt@vc4/vc4_wait_seqno@bad-seqno-1ns:
    - shard-dg2:          NOTRUN -> [SKIP][278] ([i915#7711]) +12 other tests skip
   [278]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@vc4/vc4_wait_seqno@bad-seqno-1ns.html

  
#### Possible fixes ####

  * igt@gem_eio@reset-stress:
    - shard-dg1:          [FAIL][279] ([i915#5784]) -> [PASS][280] +1 other test pass
   [279]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg1-15/igt@gem_eio@reset-stress.html
   [280]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-15/igt@gem_eio@reset-stress.html

  * igt@gem_exec_fair@basic-deadline:
    - shard-rkl:          [FAIL][281] ([i915#2846]) -> [PASS][282]
   [281]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-rkl-5/igt@gem_exec_fair@basic-deadline.html
   [282]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-4/igt@gem_exec_fair@basic-deadline.html

  * igt@gem_exec_fair@basic-pace-share@rcs0:
    - shard-rkl:          [FAIL][283] ([i915#2842]) -> [PASS][284]
   [283]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-rkl-4/igt@gem_exec_fair@basic-pace-share@rcs0.html
   [284]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-4/igt@gem_exec_fair@basic-pace-share@rcs0.html
    - shard-tglu:         [FAIL][285] ([i915#2842]) -> [PASS][286]
   [285]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-tglu-9/igt@gem_exec_fair@basic-pace-share@rcs0.html
   [286]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-tglu-3/igt@gem_exec_fair@basic-pace-share@rcs0.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-snb:          [INCOMPLETE][287] ([i915#9849]) -> [PASS][288]
   [287]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-snb6/igt@i915_module_load@reload-with-fault-injection.html
   [288]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-snb7/igt@i915_module_load@reload-with-fault-injection.html
    - shard-tglu:         [INCOMPLETE][289] -> [PASS][290]
   [289]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-tglu-10/igt@i915_module_load@reload-with-fault-injection.html
   [290]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-tglu-8/igt@i915_module_load@reload-with-fault-injection.html
    - shard-mtlp:         [ABORT][291] ([i915#10131] / [i915#9820]) -> [PASS][292]
   [291]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-mtlp-5/igt@i915_module_load@reload-with-fault-injection.html
   [292]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-mtlp-2/igt@i915_module_load@reload-with-fault-injection.html

  * igt@i915_pm_rpm@gem-execbuf-stress@extra-wait-lmem0:
    - shard-dg2:          [INCOMPLETE][293] -> [PASS][294]
   [293]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-10/igt@i915_pm_rpm@gem-execbuf-stress@extra-wait-lmem0.html
   [294]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@i915_pm_rpm@gem-execbuf-stress@extra-wait-lmem0.html
    - shard-dg1:          [ABORT][295] ([i915#10367]) -> [PASS][296]
   [295]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg1-17/igt@i915_pm_rpm@gem-execbuf-stress@extra-wait-lmem0.html
   [296]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-17/igt@i915_pm_rpm@gem-execbuf-stress@extra-wait-lmem0.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
    - shard-tglu:         [FAIL][297] ([i915#3743]) -> [PASS][298] +2 other tests pass
   [297]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-tglu-5/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
   [298]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-tglu-6/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html

  * igt@kms_cursor_legacy@torture-bo@pipe-a:
    - shard-tglu:         [DMESG-WARN][299] ([i915#10166]) -> [PASS][300]
   [299]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-tglu-4/igt@kms_cursor_legacy@torture-bo@pipe-a.html
   [300]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-tglu-6/igt@kms_cursor_legacy@torture-bo@pipe-a.html

  * igt@kms_flip@plain-flip-ts-check@b-hdmi-a1:
    - shard-rkl:          [FAIL][301] -> [PASS][302] +1 other test pass
   [301]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-rkl-5/igt@kms_flip@plain-flip-ts-check@b-hdmi-a1.html
   [302]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-4/igt@kms_flip@plain-flip-ts-check@b-hdmi-a1.html

  * igt@kms_flip@plain-flip-ts-check@b-vga1:
    - shard-snb:          [FAIL][303] ([i915#2122]) -> [PASS][304] +2 other tests pass
   [303]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-snb7/igt@kms_flip@plain-flip-ts-check@b-vga1.html
   [304]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-snb4/igt@kms_flip@plain-flip-ts-check@b-vga1.html

  * igt@kms_pm_rpm@i2c:
    - shard-dg2:          [FAIL][305] ([i915#8717]) -> [PASS][306]
   [305]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-2/igt@kms_pm_rpm@i2c.html
   [306]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-6/igt@kms_pm_rpm@i2c.html

  * igt@kms_pm_rpm@modeset-non-lpsp-stress:
    - shard-dg1:          [ABORT][307] -> [PASS][308]
   [307]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg1-12/igt@kms_pm_rpm@modeset-non-lpsp-stress.html
   [308]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-19/igt@kms_pm_rpm@modeset-non-lpsp-stress.html

  * igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
    - shard-rkl:          [SKIP][309] ([i915#9519]) -> [PASS][310] +1 other test pass
   [309]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-rkl-4/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html
   [310]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-1/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html

  
#### Warnings ####

  * igt@gem_create@create-ext-set-pat:
    - shard-dg2:          [SKIP][311] ([i915#8562]) -> [SKIP][312] ([i915#2575])
   [311]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-6/igt@gem_create@create-ext-set-pat.html
   [312]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@gem_create@create-ext-set-pat.html

  * igt@gem_exec_fair@basic-none:
    - shard-dg2:          [SKIP][313] ([i915#3539] / [i915#4852]) -> [SKIP][314] ([i915#2575])
   [313]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-11/igt@gem_exec_fair@basic-none.html
   [314]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@gem_exec_fair@basic-none.html

  * igt@gem_exec_flush@basic-uc-prw-default:
    - shard-dg2:          [SKIP][315] ([i915#3539]) -> [SKIP][316] ([i915#2575])
   [315]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-2/igt@gem_exec_flush@basic-uc-prw-default.html
   [316]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@gem_exec_flush@basic-uc-prw-default.html

  * igt@gem_exec_reloc@basic-wc-gtt-noreloc:
    - shard-dg2:          [SKIP][317] ([i915#3281]) -> [SKIP][318] ([i915#2575]) +1 other test skip
   [317]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-6/igt@gem_exec_reloc@basic-wc-gtt-noreloc.html
   [318]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@gem_exec_reloc@basic-wc-gtt-noreloc.html

  * igt@gem_exec_schedule@semaphore-power:
    - shard-dg2:          [SKIP][319] ([i915#4537] / [i915#4812]) -> [SKIP][320] ([i915#2575])
   [319]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-10/igt@gem_exec_schedule@semaphore-power.html
   [320]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@gem_exec_schedule@semaphore-power.html

  * igt@gem_mmap@big-bo:
    - shard-dg2:          [SKIP][321] ([i915#4083]) -> [SKIP][322] ([i915#2575])
   [321]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-5/igt@gem_mmap@big-bo.html
   [322]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@gem_mmap@big-bo.html

  * igt@gem_mmap_gtt@big-bo-tiledx:
    - shard-dg2:          [SKIP][323] ([i915#4077]) -> [SKIP][324] ([i915#2575])
   [323]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-6/igt@gem_mmap_gtt@big-bo-tiledx.html
   [324]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@gem_mmap_gtt@big-bo-tiledx.html

  * igt@gem_pread@exhaustion:
    - shard-dg2:          [SKIP][325] ([i915#3282]) -> [SKIP][326] ([i915#2575])
   [325]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-5/igt@gem_pread@exhaustion.html
   [326]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@gem_pread@exhaustion.html

  * igt@gem_pxp@regular-baseline-src-copy-readible:
    - shard-dg2:          [SKIP][327] ([i915#4270]) -> [SKIP][328] ([i915#2575])
   [327]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-10/igt@gem_pxp@regular-baseline-src-copy-readible.html
   [328]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@gem_pxp@regular-baseline-src-copy-readible.html

  * igt@gen9_exec_parse@bb-start-param:
    - shard-dg2:          [SKIP][329] ([i915#2856]) -> [SKIP][330] ([i915#2575])
   [329]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-10/igt@gen9_exec_parse@bb-start-param.html
   [330]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@gen9_exec_parse@bb-start-param.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-dg1:          [INCOMPLETE][331] ([i915#4391] / [i915#4423] / [i915#9820] / [i915#9849]) -> [INCOMPLETE][332] ([i915#9820] / [i915#9849])
   [331]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg1-18/igt@i915_module_load@reload-with-fault-injection.html
   [332]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg1-12/igt@i915_module_load@reload-with-fault-injection.html

  * igt@i915_pm_rc6_residency@rc6-idle@gt0-rcs0:
    - shard-tglu:         [FAIL][333] ([i915#3591]) -> [WARN][334] ([i915#2681])
   [333]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-tglu-2/igt@i915_pm_rc6_residency@rc6-idle@gt0-rcs0.html
   [334]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-tglu-10/igt@i915_pm_rc6_residency@rc6-idle@gt0-rcs0.html

  * igt@kms_addfb_basic@basic-x-tiled-legacy:
    - shard-dg2:          [SKIP][335] ([i915#4212]) -> [SKIP][336] ([i915#2575])
   [335]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-5/igt@kms_addfb_basic@basic-x-tiled-legacy.html
   [336]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@kms_addfb_basic@basic-x-tiled-legacy.html

  * igt@kms_big_fb@y-tiled-32bpp-rotate-0:
    - shard-dg2:          [SKIP][337] ([i915#4538] / [i915#5190]) -> [SKIP][338] ([i915#5190])
   [337]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-6/igt@kms_big_fb@y-tiled-32bpp-rotate-0.html
   [338]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@kms_big_fb@y-tiled-32bpp-rotate-0.html

  * igt@kms_chamelium_audio@hdmi-audio:
    - shard-dg2:          [SKIP][339] ([i915#7828]) -> [SKIP][340] ([i915#2575]) +2 other tests skip
   [339]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-6/igt@kms_chamelium_audio@hdmi-audio.html
   [340]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@kms_chamelium_audio@hdmi-audio.html

  * igt@kms_content_protection@content-type-change:
    - shard-dg2:          [SKIP][341] ([i915#9424]) -> [SKIP][342] ([i915#2575])
   [341]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-10/igt@kms_content_protection@content-type-change.html
   [342]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@kms_content_protection@content-type-change.html

  * igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions:
    - shard-dg2:          [SKIP][343] ([i915#5354]) -> [SKIP][344] ([i915#2575])
   [343]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-2/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions.html
   [344]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions.html

  * igt@kms_dsc@dsc-with-output-formats:
    - shard-dg2:          [SKIP][345] ([i915#3555] / [i915#3840]) -> [SKIP][346]
   [345]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-10/igt@kms_dsc@dsc-with-output-formats.html
   [346]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@kms_dsc@dsc-with-output-formats.html

  * igt@kms_fbcon_fbt@psr:
    - shard-dg2:          [SKIP][347] ([i915#3469]) -> [SKIP][348]
   [347]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-6/igt@kms_fbcon_fbt@psr.html
   [348]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@kms_fbcon_fbt@psr.html

  * igt@kms_flip@2x-nonexisting-fb:
    - shard-dg2:          [SKIP][349] -> [SKIP][350] ([i915#2575]) +1 other test skip
   [349]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-6/igt@kms_flip@2x-nonexisting-fb.html
   [350]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@kms_flip@2x-nonexisting-fb.html

  * igt@kms_frontbuffer_tracking@fbc-2p-rte:
    - shard-dg2:          [SKIP][351] ([i915#5354]) -> [SKIP][352] +7 other tests skip
   [351]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-11/igt@kms_frontbuffer_tracking@fbc-2p-rte.html
   [352]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@kms_frontbuffer_tracking@fbc-2p-rte.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-mmap-gtt:
    - shard-dg2:          [SKIP][353] ([i915#8708]) -> [SKIP][354] +1 other test skip
   [353]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-6/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-mmap-gtt.html
   [354]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-stridechange:
    - shard-dg2:          [SKIP][355] ([i915#3458]) -> [SKIP][356] +3 other tests skip
   [355]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-6/igt@kms_frontbuffer_tracking@fbcpsr-stridechange.html
   [356]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@kms_frontbuffer_tracking@fbcpsr-stridechange.html

  * igt@kms_pm_dc@dc9-dpms:
    - shard-rkl:          [SKIP][357] ([i915#4281]) -> [SKIP][358] ([i915#3361])
   [357]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-rkl-5/igt@kms_pm_dc@dc9-dpms.html
   [358]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-rkl-1/igt@kms_pm_dc@dc9-dpms.html

  * igt@kms_psr@fbc-psr-cursor-mmap-cpu:
    - shard-dg2:          [SKIP][359] ([i915#9732]) -> [SKIP][360] ([i915#9673] / [i915#9732]) +6 other tests skip
   [359]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-10/igt@kms_psr@fbc-psr-cursor-mmap-cpu.html
   [360]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@kms_psr@fbc-psr-cursor-mmap-cpu.html

  * igt@kms_psr@fbc-psr-primary-blt:
    - shard-dg2:          [SKIP][361] ([i915#9673] / [i915#9732]) -> [SKIP][362] ([i915#9732]) +6 other tests skip
   [361]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-11/igt@kms_psr@fbc-psr-primary-blt.html
   [362]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-2/igt@kms_psr@fbc-psr-primary-blt.html

  * igt@kms_psr@fbc-psr-suspend:
    - shard-dg2:          [SKIP][363] ([i915#9732]) -> [SKIP][364] +3 other tests skip
   [363]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-10/igt@kms_psr@fbc-psr-suspend.html
   [364]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@kms_psr@fbc-psr-suspend.html

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-dg2:          [SKIP][365] ([i915#8623]) -> [SKIP][366] ([i915#2575])
   [365]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14416/shard-dg2-5/igt@kms_tiled_display@basic-test-pattern.html
   [366]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_10799/shard-dg2-11/igt@kms_tiled_display@basic-test-pattern.html

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

  [i915#10131]: https://gitlab.freedesktop.org/drm/intel/issues/10131
  [i915#10166]: https://gitlab.freedesktop.org/drm/intel/issues/10166
  [i915#10278]: https://gitlab.freedesktop.org/drm/intel/issues/10278
  [i915#10307]: https://gitlab.freedesktop.org/drm/intel/issues/10307
  [i915#10367]: https://gitlab.freedesktop.org/drm/intel/issues/10367
  [i915#10378]: https://gitlab.freedesktop.org/drm/intel/issues/10378
  [i915#1099]: https://gitlab.freedesktop.org/drm/intel/issues/1099
  [i915#1257]: https://gitlab.freedesktop.org/drm/intel/issues/1257
  [i915#1769]: https://gitlab.freedesktop.org/drm/intel/issues/1769
  [i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825
  [i915#1839]: https://gitlab.freedesktop.org/drm/intel/issues/1839
  [i915#2122]: https://gitlab.freedesktop.org/drm/intel/issues/2122
  [i915#2437]: https://gitlab.freedesktop.org/drm/intel/issues/2437
  [i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527
  [i915#2575]: https://gitlab.freedesktop.org/drm/intel/issues/2575
  [i915#2587]: https://gitlab.freedesktop.org/drm/intel/issues/2587
  [i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
  [i915#2681]: https://gitlab.freedesktop.org/drm/intel/issues/2681
  [i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280
  [i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
  [i915#2846]: https://gitlab.freedesktop.org/drm/intel/issues/2846
  [i915#2856]: https://gitlab.freedesktop.org/drm/intel/issues/2856
  [i915#3023]: https://gitlab.freedesktop.org/drm/intel/issues/3023
  [i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281
  [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
  [i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297
  [i915#3299]: https://gitlab.freedesktop.org/drm/intel/issues/3299
  [i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
  [i915#3361]: https://gitlab.freedesktop.org/drm/intel/issues/3361
  [i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458
  [i915#3469]: https://gitlab.freedesktop.org/drm/intel/issues/3469
  [i915#3539]: https://gitlab.freedesktop.org/drm/intel/issues/3539
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [i915#3591]: https://gitlab.freedesktop.org/drm/intel/issues/3591
  [i915#3637]: https://gitlab.freedesktop.org/drm/intel/issues/3637
  [i915#3638]: https://gitlab.freedesktop.org/drm/intel/issues/3638
  [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
  [i915#3743]: https://gitlab.freedesktop.org/drm/intel/issues/3743
  [i915#3840]: https://gitlab.freedesktop.org/drm/intel/issues/3840
  [i915#4036]: https://gitlab.freedesktop.org/drm/intel/issues/4036
  [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
  [i915#4079]: https://gitlab.freedesktop.org/drm/intel/issues/4079
  [i915#4083]: https://gitlab.freedesktop.org/drm/intel/issues/4083
  [i915#4103]: https://gitlab.freedesktop.org/drm/intel/issues/4103
  [i915#4212]: https://gitlab.freedesktop.org/drm/intel/issues/4212
  [i915#4213]: https://gitlab.freedesktop.org/drm/intel/issues/4213
  [i915#4235]: https://gitlab.freedesktop.org/drm/intel/issues/4235
  [i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
  [i915#4281]: https://gitlab.freedesktop.org/drm/intel/issues/4281
  [i915#4349]: https://gitlab.freedesktop.org/drm/intel/issues/4349
  [i915#4391]: https://gitlab.freedesktop.org/drm/intel/issues/4391
  [i915#4423]: https://gitlab.freedesktop.org/drm/intel/issues/4423
  [i915#4473]: https://gitlab.freedesktop.org/drm/intel/issues/4473
  [i915#4525]: https://gitlab.freedesktop.org/drm/intel/issues/4525
  [i915#4537]: https://gitlab.freedesktop.org/drm/intel/issues/4537
  [i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538
  [i915#4565]: https://gitlab.freedesktop.org/drm/intel/issues/4565
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#4771]: https://gitlab.freedesktop.org/drm/intel/issues/4771
  [i915#4812]: https://gitlab.freedesktop.org/drm/intel/issues/4812
  [i915#4816]: https://gitlab.freedesktop.org/drm/intel/issues/4816
  [i915#4852]: https://gitlab.freedesktop.org/drm/intel/issues/4852
  [i915#4860]: https://gitlab.freedesktop.org/drm/intel/issues/4860
  [i915#4873]: https://gitlab.freedesktop.org/drm/intel/issues/4873
  [i915#4880]: https://gitlab.freedesktop.org/drm/intel/issues/4880
  [i915#4881]: https://gitlab.freedesktop.org/drm/intel/issues/4881
  [i915#5190]: https://gitlab.freedesktop.org/drm/intel/issues/5190
  [i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235
  [i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286
  [i915#5289]: https://gitlab.freedesktop.org/drm/intel/issues/5289
  [i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354
  [i915#5439]: https://gitlab.freedesktop.org/drm/intel/issues/5439
  [i915#5566]: https://gitlab.freedesktop.org/drm/intel/issues/5566
  [i915#5608]: https://gitlab.freedesktop.org/drm/intel/issues/5608
  [i915#5784]: https://gitlab.freedesktop.org/drm/intel/issues/5784
  [i915#5978]: https://gitlab.freedesktop.org/drm/intel/issues/5978
  [i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
  [i915#6187]: https://gitlab.freedesktop.org/drm/intel/issues/6187
  [i915#6227]: https://gitlab.freedesktop.org/drm/intel/issues/6227
  [i915#6230]: https://gitlab.freedesktop.org/drm/intel/issues/6230
  [i915#6268]: https://gitlab.freedesktop.org/drm/intel/issues/6268
  [i915#6301]: https://gitlab.freedesktop.org/drm/intel/issues/6301
  [i915#6524]: https://gitlab.freedesktop.org/drm/intel/issues/6524
  [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
  [i915#7116]: https://gitlab.freedesktop.org/drm/intel/issues/7116
  [i915#7118]: https://gitlab.freedesktop.org/drm/intel/issues/7118
  [i915#7213]: https://gitlab.freedesktop.org/drm/intel/issues/7213
  [i915#7356]: https://gitlab.freedesktop.org/drm/intel/issues/7356
  [i915#7697]: https://gitlab.freedesktop.org/drm/intel/issues/7697
  [i915#7707]: https://gitlab.freedesktop.org/drm/intel/issues/7707
  [i915#7711]: https://gitlab.freedesktop.org/drm/intel/issues/7711
  [i915#7742]: https://gitlab.freedesktop.org/drm/intel/issues/7742
  [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
  [i915#8063]: https://gitlab.freedesktop.org/drm/intel/issues/8063
  [i915#8228]: https://gitlab.freedesktop.org/drm/intel/issues/8228
  [i915#8289]: https://gitlab.freedesktop.org/drm/intel/issues/8289
  [i915#8292]: https://gitlab.freedesktop.org/drm/intel/issues/8292
  [i915#8381]: https://gitlab.freedesktop.org/drm/intel/issues/8381
  [i915#8411]: https://gitlab.freedesktop.org/drm/intel/issues/8411
  [i915#8414]: https://gitlab.freedesktop.org/drm/intel/issues/8414
  [i915#8428]: https://gitlab.freedesktop.org/drm/intel/issues/8428
  [i915#8440]: https://gitlab.freedesktop.org/drm/intel/issues/8440
  [i915#8516]: https://gitlab.freedesktop.org/drm/intel/issues/8516
  [i915#8555]: https://gitlab.freedesktop.org/drm/intel/issues/8555
  [i915#8562]: https://gitlab.freedesktop.org/drm/intel/issues/8562
  [i915#8588]: https://gitlab.freedesktop.org/drm/intel/issues/8588
  [i915#8623]: https://gitlab.freedesktop.org/drm/intel/issues/8623
  [i915#8708]: https://gitlab.freedesktop.org/drm/intel/issues/8708
  [i915#8717]: https://gitlab.freedesktop.org/drm/intel/issues/8717
  [i915#8808]: https://gitlab.freedesktop.org/drm/intel/issues/8808
  [i915#8812]: https://gitlab.freedesktop.org/drm/intel/issues/8812
  [i915#8814]: https://gitlab.freedesktop.org/drm/intel/issues/8814
  [i915#8821]: https://gitlab.freedesktop.org/drm/intel/issues/8821
  [i915#8827]: https://gitlab.freedesktop.org/drm/intel/issues/8827
  [i915#8898]: https://gitlab.freedesktop.org/drm/intel/issues/8898
  [i915#8925]: https://gitlab.freedesktop.org/drm/intel/issues/8925
  [i915#9142]: https://gitlab.freedesktop.org/drm/intel/issues/9142
  [i915#9196]: https://gitlab.freedesktop.org/drm/intel/issues/9196
  [i915#9293]: https://gitlab.freedesktop.org/drm/intel/issues/9293
  [i915#9323]: https://gitlab.freedesktop.org/drm/intel/issues/9323
  [i915#9337]: https://gitlab.freedesktop.org/drm/intel/issues/9337
  [i915#9351]: https://gitlab.freedesktop.org/drm/intel/issues/9351
  [i915#9412]: https://gitlab.freedesktop.org/drm/intel/issues/9412
  [i915#9423]: https://gitlab.freedesktop.org/drm/intel/issues/9423
  [i915#9424]: https://gitlab.freedesktop.org/drm/intel/issues/9424
  [i915#9433]: https://gitlab.freedesktop.org/drm/intel/issues/9433
  [i915#9457]: https://gitlab.freedesktop.org/drm/intel/issues/9457
  [i915#9519]: https://gitlab.freedesktop.org/drm/intel/issues/9519
  [i915#9606]: https://gitlab.freedesktop.org/drm/intel/issues/9606
  [i915#9643]: https://gitlab.freedesktop.org/drm/intel/issues/9643
  [i915#9673]: https://gitlab.freedesktop.org/drm/intel/issues/9673
  [i915#9683]: https://gitlab.freedesktop.org/drm/intel/issues/9683
  [i915#9685]: https://gitlab.freedesktop.org/drm/intel/issues/9685
  [i915#9688]: https://gitlab.freedesktop.org/drm/intel/issues/9688
  [i915#9723]: https://gitlab.freedesktop.org/drm/intel/issues/9723
  [i915#9728]: https://gitlab.freedesktop.org/drm/intel/issues/9728
  [i915#9732]: https://gitlab.freedesktop.org/drm/intel/issues/9732
  [i915#9766]: https://gitlab.freedesktop.org/drm/intel/issues/9766
  [i915#9779]: https://gitlab.freedesktop.org/drm/intel/issues/9779
  [i915#9781]: https://gitlab.freedesktop.org/drm/intel/issues/9781
  [i915#9808]: https://gitlab.freedesktop.org/drm/intel/issues/9808
  [i915#9809]: https://gitlab.freedesktop.org/drm/intel/issues/9809
  [i915#9820]: https://gitlab.freedesktop.org/drm/intel/issues/9820
  [i915#9833]: https://gitlab.freedesktop.org/drm/intel/issues/9833
  [i915#9849]: https://gitlab.freedesktop.org/drm/intel/issues/9849
  [i915#9853]: https://gitlab.freedesktop.org/drm/intel/issues/9853
  [i915#9906]: https://gitlab.freedesktop.org/drm/intel/issues/9906
  [i915#9917]: https://gitlab.freedesktop.org/drm/intel/issues/9917
  [i915#9934]: https://gitlab.freedesktop.org/drm/intel/issues/9934
  [i915#9980]: https://gitlab.freedesktop.org/drm/intel/issues/9980


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

  * CI: CI-20190529 -> None
  * IGT: IGT_7751 -> IGTPW_10799
  * Piglit: piglit_4509 -> None

  CI-20190529: 20190529
  CI_DRM_14416: 3fde6df89bac97416ce1c82b14237a1a67ce3285 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_10799: 10799
  IGT_7751: 86173d01d4d3644237f781dc5f9890bd26c988de @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

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

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

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

* Re: [PATCH i-g-t 2/4] tests/intel/kms_big_joiner: revamp bigjoiner
  2024-03-10 14:27 ` [PATCH i-g-t 2/4] tests/intel/kms_big_joiner: revamp bigjoiner Kunal Joshi
@ 2024-03-14  8:43   ` Nautiyal, Ankit K
  2024-03-18  5:26     ` Joshi, Kunal1
  0 siblings, 1 reply; 22+ messages in thread
From: Nautiyal, Ankit K @ 2024-03-14  8:43 UTC (permalink / raw)
  To: Kunal Joshi, igt-dev; +Cc: Stanislav Lisovskiy, Karthik B S, Bhanuprakash Modem


On 3/10/2024 7:57 PM, Kunal Joshi wrote:
> modify test to support simultaneously testing multiple bigjoiner
> output and ignoring fused off pipes.

I think there are a lot of changes in the patch, changing the basic 
test, removing the 2x test, adding multiple bigjoiner tests in one go.

Imho, this should be broken into smaller patches.

>
> v2: Don't change license (Bhanu)
>      Print the pipe name (Bhanu)
>      Remove unwanted commit (Bhanu)
>      Move combine output logic to igt_fixture (Bhanu)
>      split revamp and force joiner (Bhanu)
>
> v3: Ignored fused pipes (Stan)
>
> Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> Cc: Karthik B S <karthik.b.s@intel.com>
> Cc: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
> Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> ---
>   tests/intel/kms_big_joiner.c | 398 +++++++++++++++++------------------
>   1 file changed, 195 insertions(+), 203 deletions(-)
>
> diff --git a/tests/intel/kms_big_joiner.c b/tests/intel/kms_big_joiner.c
> index 28678b958..d4b0d1100 100644
> --- a/tests/intel/kms_big_joiner.c
> +++ b/tests/intel/kms_big_joiner.c
> @@ -37,184 +37,227 @@
>   #include "igt.h"
>   
>   /**
> - * SUBTEST: invalid-modeset
> + * SUBTEST: invalid-modeset-bigjoiner

I think this can be retained, this doesn't seem necessary.


>    * Description: Verify if the modeset on the adjoining pipe is rejected when
>    *              the pipe is active with a big joiner modeset
>    *
> - * SUBTEST: basic
> + * SUBTEST: basic-bigjoiner

Same as above, also it already has subtests with single joiner, multi 
joiner.


>    * Description: Verify the basic modeset on big joiner mode on all pipes
>    *
> - * SUBTEST: 2x-modeset
> - * Description: Verify simultaneous modeset on 2 big joiner outputs
>    */
>   
>   IGT_TEST_DESCRIPTION("Test big joiner");
>   
> -struct bigjoiner_output {
> -	uint32_t output_id;
> -	drmModeModeInfo mode;
> -};
> +#define INVALID_TEST_OUTPUT 2
>   
>   typedef struct {
>   	int drm_fd;
> -	igt_display_t display;
> -	struct igt_fb fb;
> +	int big_joiner_output_count;
> +	int non_big_joiner_output_count;
> +	int combined_output_count;
> +	int output_count;
>   	int n_pipes;
> -	enum pipe pipe1;
> -	enum pipe pipe2;
> -	struct bigjoiner_output output[2];
> +	int master_pipes;
> +	uint64_t big_joiner_output[IGT_MAX_PIPES];
> +	uint64_t non_big_joiner_output[IGT_MAX_PIPES];
> +	uint64_t combined_output[IGT_MAX_PIPES];
> +	enum pipe pipe_seq[IGT_MAX_PIPES];
> +	igt_display_t display;
>   } data_t;
>   
>   static int max_dotclock;
>   
> -static void test_invalid_modeset(data_t *data)
> +static void set_all_master_pipes_for_platform(data_t *data)
>   {
> -	igt_output_t *output;
> -	igt_display_t *display = &data->display;
> -	int ret;
> -
> -	igt_info("Bigjoiner test on ");
> -	for_each_connected_output(display, output){
> -		enum pipe p = output->pending_pipe;
> -		drmModeModeInfo *mode;
> -		igt_pipe_t *pipe;
> -		igt_plane_t *plane;
> +	enum pipe pipe;
>   
> -		if (p == PIPE_NONE)
> -			continue;
> -
> -		mode = igt_output_get_mode(output);
> -		igt_info("pipe:%s, output:%s, mode:", kmstest_pipe_name(p), igt_output_name(output));
> -		kmstest_dump_mode(mode);
> +	for (pipe = PIPE_A; pipe < IGT_MAX_PIPES; pipe++)
> +		if (data->display.pipes[pipe].enabled) {
> +			igt_info("Found master pipe %s\n", kmstest_pipe_name(pipe));
> +			data->master_pipes |= BIT(pipe);
> +		}
> +}
>   
> -		pipe = &display->pipes[p];
> -		plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
> +static igt_output_t *get_output_by_id_or_assert(data_t *data, uint64_t id)
> +{
> +	igt_output_t *output;
>   
> -		igt_plane_set_fb(plane, &data->fb);
> -		igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
> -		igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
> +	for_each_connected_output(&data->display, output) {
> +		if (output->id == id)
> +			return output;
>   	}
> +	igt_assert_f(false, "Output not found\n");
> +	return NULL;
> +}
>   
> -	igt_assert(!igt_check_bigjoiner_support(display));
> -
> -	/* This commit is expectd to fail as this pipe is being used for big joiner */
> -	ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY |
> -					    DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> -
> -	igt_display_reset(&data->display);
> -	igt_display_commit2(display, COMMIT_ATOMIC);
> +static enum pipe get_next_master_pipe(data_t *data, unsigned int available_pipe_mask)
> +{
> +	if ((data->master_pipes & available_pipe_mask) == 0)
> +		return PIPE_NONE;
>   
> -	igt_assert_lt(ret, 0);
> +	return ffs(data->master_pipes & available_pipe_mask) - 1;
>   }
>   
> -static void test_basic_modeset(data_t *data)
> +static void test_single_joiner(data_t *data, int output_count)
>   {
> +	int i, ret;
> +	enum pipe pipe, master_pipe;
> +	unsigned int available_pipe_mask = BIT(data->n_pipes) - 1;
> +	unsigned int attempt_mask;
> +	igt_output_t *output;
> +	igt_plane_t *primary;
> +	uint64_t *outputs;
> +	igt_fb_t fb;
>   	drmModeModeInfo *mode;
> -	igt_output_t *output, *bigjoiner_output = NULL;
> -	igt_display_t *display = &data->display;
> -	igt_pipe_t *pipe;
> -	igt_plane_t *plane;
>   
> -	igt_display_reset(display);
> +	outputs = data->big_joiner_output;
>   
> -	for_each_connected_output(display, output) {
> -		if (data->output[0].output_id == output->id) {
> -			bigjoiner_output = output;
> -			break;
> +	for (i = 0; i < output_count; i++) {
> +		output = get_output_by_id_or_assert(data, outputs[i]);
> +		for (pipe = 0; pipe < data->n_pipes-1; pipe++) {
> +			igt_display_reset(&data->display);
> +			attempt_mask = BIT(pipe);
> +
> +			master_pipe = get_next_master_pipe(data, available_pipe_mask & attempt_mask);
> +			if (master_pipe == PIPE_NONE)
> +				continue;
> +			igt_info("Using pipe %s as master and %s slave for %s\n", kmstest_pipe_name(pipe), kmstest_pipe_name(pipe + 1), output->name);

In case a pipe is fused off we are ignoring it for master pipe, but 
since we cannot have it as slave also, we need to ignore pipe-1 also as 
master.

I think similar thing is mentioned by Bhanu too in last version.

So we need to change set_all_master_pipes_for_platform accordingly.


> +			igt_output_set_pipe(output, pipe);
> +			mode = igt_output_get_mode(output);
> +			primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
> +			igt_create_pattern_fb(data->drm_fd, mode->hdisplay, mode->vdisplay, DRM_FORMAT_XRGB8888,
> +								  DRM_FORMAT_MOD_LINEAR, &fb);
> +			igt_plane_set_fb(primary, &fb);
> +			ret = igt_display_try_commit2(&data->display, COMMIT_ATOMIC);
> +			igt_assert_f(ret == 0, "Commit should have passed\n");

Do we need try commit here? We can directly use igt_display_commit_atomic.

Same in other places.


>   		}
>   	}
> +}
>   
> -	igt_output_set_pipe(bigjoiner_output, data->pipe1);
> +static void test_multi_joiner(data_t *data, int output_count)
> +{
> +	int i, ret;
> +	unsigned int available_pipe_mask;
> +	enum pipe pipe, master_pipe;
> +	uint64_t *outputs;
> +	igt_output_t *output;
> +	igt_plane_t *primary[output_count];
> +	igt_fb_t fb[output_count];
> +	drmModeModeInfo *mode;
>   
> -	mode = &data->output[0].mode;
> -	igt_output_override_mode(bigjoiner_output, mode);
> +	available_pipe_mask = BIT(data->n_pipes) - 1;
> +	outputs = data->big_joiner_output;
>   
> -	pipe = &display->pipes[data->pipe1];
> -	plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
> +	igt_display_reset(&data->display);
> +	for (i = 0; i < output_count; i++) {
> +		output = get_output_by_id_or_assert(data, outputs[i]);
> +		for (pipe = 0; pipe < data->n_pipes; pipe++) {
> +			unsigned int attempt_mask = BIT(pipe);
>   
> -	igt_plane_set_fb(plane, &data->fb);
> -	igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
> -	igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
> +			master_pipe = get_next_master_pipe(data, available_pipe_mask & attempt_mask);
> +			if (master_pipe == PIPE_NONE)
> +				continue;
>   
> -	igt_display_commit2(display, COMMIT_ATOMIC);
> +			igt_info("Using pipe %s as master %s slave for %s\n", kmstest_pipe_name(pipe), kmstest_pipe_name(pipe + 1), output->name);
> +			igt_output_set_pipe(output, pipe);
> +			mode = igt_output_get_mode(output);
> +			primary[i] = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
> +			igt_create_pattern_fb(data->drm_fd, mode->hdisplay, mode->vdisplay, DRM_FORMAT_XRGB8888,
> +								  DRM_FORMAT_MOD_LINEAR, &fb[i]);
> +			igt_plane_set_fb(primary[i], &fb[i]);
>   
> -	igt_output_set_pipe(bigjoiner_output, PIPE_NONE);
> -	igt_plane_set_fb(plane, NULL);
> -	igt_display_commit2(display, COMMIT_ATOMIC);
> +			available_pipe_mask &= ~BIT(master_pipe);
> +			available_pipe_mask &= ~BIT(master_pipe + 1);
> +			break;
> +		}
> +	}
> +	ret = igt_display_try_commit2(&data->display, COMMIT_ATOMIC);
> +	igt_assert_f(ret == 0, "Commit should have passed\n");
>   }
>   
> -static void test_dual_display(data_t *data)
> +static void test_invalid_modeset_two_joiner(data_t *data,
> +					    bool combined)
>   {
> +	int i, j, ret;
> +	uint64_t *outputs;
> +	igt_output_t *output;
> +	igt_plane_t *primary[INVALID_TEST_OUTPUT];
> +	igt_fb_t fb[INVALID_TEST_OUTPUT];
>   	drmModeModeInfo *mode;
> -	igt_output_t *output, *bigjoiner_output[2];
> -	igt_display_t *display = &data->display;
> -	igt_pipe_t *pipe;
> -	igt_plane_t *plane1, *plane2;
> -	int count = 0;
> -
> -	igt_display_reset(display);
> -
> -	for_each_connected_output(display, output) {
> -		if (data->output[count].output_id == output->id) {
> -			bigjoiner_output[count] = output;
> -			count++;
> -		}
>   
> -		if (count > 1)
> -			break;
> +	outputs = combined ? data->combined_output : data->big_joiner_output;
> +
> +	for (i = 0; i < data->n_pipes-1; i++) {
> +		igt_display_reset(&data->display);
> +		for (j = 0; j < INVALID_TEST_OUTPUT; j++) {
> +			output = get_output_by_id_or_assert(data, outputs[j]);
> +			igt_assert(output);
> +			igt_output_set_pipe(output, data->pipe_seq[i + j]);
> +			mode = igt_output_get_mode(output);
> +			igt_info(" Assigning pipe %s to %s with mode %dx%d@%d%s",
> +				 kmstest_pipe_name(data->pipe_seq[i + j]),
> +				 igt_output_name(output), mode->hdisplay,
> +				 mode->vdisplay, mode->vrefresh,
> +				 j == INVALID_TEST_OUTPUT - 1 ? "\n" : ", ");
> +			primary[j] = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
> +			igt_create_pattern_fb(data->drm_fd, mode->hdisplay, mode->vdisplay, DRM_FORMAT_XRGB8888,
> +								  DRM_FORMAT_MOD_LINEAR, &fb[j]);
> +			igt_plane_set_fb(primary[j], &fb[j]);
> +		}
> +		ret = igt_display_try_commit2(&data->display, COMMIT_ATOMIC);
> +		igt_assert_f(ret != 0, "Commit shouldn't have passed\n");
>   	}
> +}
>   
> -	igt_output_set_pipe(bigjoiner_output[0], data->pipe1);
> -	igt_output_set_pipe(bigjoiner_output[1], data->pipe2);
> -
> -	/* Set up first big joiner output on Pipe A*/
> -	mode = &data->output[0].mode;
> -	igt_output_override_mode(bigjoiner_output[0], mode);
> -
> -	pipe = &display->pipes[data->pipe1];
> -	plane1 = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
> -
> -	igt_plane_set_fb(plane1, &data->fb);
> -	igt_fb_set_size(&data->fb, plane1, mode->hdisplay, mode->vdisplay);
> -	igt_plane_set_size(plane1, mode->hdisplay, mode->vdisplay);
> -
> -	/* Set up second big joiner output on Pipe C*/
> -	mode = &data->output[1].mode;
> -	igt_output_override_mode(bigjoiner_output[1], mode);
> -
> -	pipe = &display->pipes[data->pipe2];
> -	plane2 = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
> -
> -	igt_plane_set_fb(plane2, &data->fb);
> -	igt_fb_set_size(&data->fb, plane2, mode->hdisplay, mode->vdisplay);
> -	igt_plane_set_size(plane2, mode->hdisplay, mode->vdisplay);
> +static void tets_big_joiner_on_last_pipe(data_t *data)

Typo: test


> +{
> +	int i, len, ret;
> +	uint64_t *outputs;
> +	igt_output_t *output;
> +	igt_plane_t *primary;
> +	igt_fb_t fb;
> +	drmModeModeInfo *mode;
>   
> -	igt_display_commit2(display, COMMIT_ATOMIC);
> +	len = data->big_joiner_output_count;
> +	outputs = data->big_joiner_output;
>   
> -	/* Clean up */
> -	igt_output_set_pipe(bigjoiner_output[0], PIPE_NONE);
> -	igt_output_set_pipe(bigjoiner_output[1], PIPE_NONE);
> -	igt_plane_set_fb(plane1, NULL);
> -	igt_plane_set_fb(plane2, NULL);
> -	igt_display_commit2(display, COMMIT_ATOMIC);
> +	for (i = 0; i < len; i++) {
> +		igt_display_reset(&data->display);
> +		output = get_output_by_id_or_assert(data, outputs[i]);
> +		igt_output_set_pipe(output, data->pipe_seq[data->n_pipes - 1]);
> +		mode = igt_output_get_mode(output);
> +		igt_info(" Assigning pipe %s to %s with mode %dx%d@%d\n",
> +				 kmstest_pipe_name(data->pipe_seq[data->n_pipes - 1]),
> +				 igt_output_name(output), mode->hdisplay,
> +				 mode->vdisplay, mode->vrefresh);
> +		primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
> +		igt_create_pattern_fb(data->drm_fd, mode->hdisplay, mode->vdisplay, DRM_FORMAT_XRGB8888,
> +							  DRM_FORMAT_MOD_LINEAR, &fb);
> +		igt_plane_set_fb(primary, &fb);
> +		ret = igt_display_try_commit2(&data->display, COMMIT_ATOMIC);
> +		igt_assert_f(ret != 0, "Commit shouldn't have passed\n");
> +	}
>   }
>   
> +
>   igt_main
>   {
> -	data_t data;
> +	int i, j;
>   	igt_output_t *output;
> -	drmModeModeInfo mode;
> -	int valid_output = 0, i, count = 0, j = 0;
> -	uint16_t width = 0, height = 0;
> -	enum pipe pipe_seq[IGT_MAX_PIPES];
> +	data_t data;
>   
>   	igt_fixture {
> +		data.big_joiner_output_count = 0;
> +		data.non_big_joiner_output_count = 0;
> +		data.combined_output_count = 0;
> +		data.output_count = 0;
> +		j = 0;
> +
>   		data.drm_fd = drm_open_driver_master(DRIVER_INTEL | DRIVER_XE);
>   		kmstest_set_vt_graphics_mode();
> -
>   		igt_display_require(&data.display, data.drm_fd);
> +		set_all_master_pipes_for_platform(&data);
>   		igt_require(data.display.is_atomic);
> -
>   		max_dotclock = igt_get_max_dotclock(data.drm_fd);
>   
>   		for_each_connected_output(&data.display, output) {
> @@ -228,105 +271,54 @@ igt_main
>   			found = bigjoiner_mode_found(data.drm_fd, connector, max_dotclock);
>   
>   			if (found) {
> -				data.output[count].output_id = output->id;
> -				memcpy(&data.output[count].mode, &mode, sizeof(drmModeModeInfo));
> -				count++;
> -
> -				width = max(width, mode.hdisplay);
> -				height = max(height, mode.vdisplay);
> +				data.big_joiner_output[data.big_joiner_output_count++] = output->config.connector->connector_id;
> +				igt_output_override_mode(output, &connector->modes[0]);
> +			} else {
> +				data.non_big_joiner_output[data.non_big_joiner_output_count++] = output->config.connector->connector_id;
>   			}
> -			valid_output++;
> +			data.output_count++;
> +		}
> +		if (data.big_joiner_output_count == 1 && data.non_big_joiner_output_count >= 1) {
> +			data.combined_output[data.combined_output_count++] = data.big_joiner_output[0];
> +			data.combined_output[data.combined_output_count++] = data.non_big_joiner_output[0];
>   		}
> -
>   		data.n_pipes = 0;
>   		for_each_pipe(&data.display, i) {
>   			data.n_pipes++;
> -			pipe_seq[j] = i;
> +			data.pipe_seq[j] = i;
>   			j++;
>   		}
> -
> -		igt_require_f(count > 0, "No output with 5k+ mode (or) clock > max-dot-clock found\n");
> -
> -		igt_create_pattern_fb(data.drm_fd, width, height, DRM_FORMAT_XRGB8888,
> -				      DRM_FORMAT_MOD_LINEAR, &data.fb);
>   	}
>   
>   	igt_describe("Verify the basic modeset on big joiner mode on all pipes");
> -	igt_subtest_with_dynamic("basic") {
> -		for (i = 0; i < data.n_pipes - 1; i++) {
> -			data.pipe1 = pipe_seq[i];
> -			igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe_seq[i]))
> -				test_basic_modeset(&data);
> -		}
> -	}
> +	igt_subtest_with_dynamic("basic-bigjoiner") {
> +			igt_require_f(data.big_joiner_output_count > 0,
> +				      "No bigjoiner output found\n");
> +			igt_require_f(data.n_pipes > 1,
> +				      "Minimum 2 pipes required\n");
> +			igt_dynamic_f("single-joiner")
> +				test_single_joiner(&data, data.big_joiner_output_count);
> +			if (data.big_joiner_output_count > 1)
> +				igt_dynamic_f("multi-joiner")
> +					test_multi_joiner(&data, data.big_joiner_output_count);
>   
> -	igt_describe("Verify if the modeset on the adjoining pipe is rejected "
> -		     "when the pipe is active with a big joiner modeset");
> -	igt_subtest_with_dynamic("invalid-modeset") {
> -		data.pipe1 = pipe_seq[j - 1];
> -
> -		igt_display_reset(&data.display);
> -		for_each_connected_output(&data.display, output) {
> -			if (data.output[0].output_id != output->id)
> -				continue;
> -
> -			mode = data.output[0].mode;
> -			igt_output_set_pipe(output, data.pipe1);
> -			igt_output_override_mode(output, &mode);
> -
> -			igt_dynamic_f("pipe-%s-%s",
> -				      kmstest_pipe_name(data.pipe1),
> -				      igt_output_name(output))
> -				test_invalid_modeset(&data);
> -		}
> -
> -		if(valid_output > 1) {
> -			for (i = 0; i < data.n_pipes - 1; i++) {
> -				igt_output_t *first_output = NULL, *second_output = NULL;
> -
> -				data.pipe1 = pipe_seq[i];
> -				data.pipe2 = pipe_seq[i + 1];
> -
> -				igt_display_reset(&data.display);
> -				for_each_connected_output(&data.display, output) {
> -					if (data.output[0].output_id == output->id) {
> -						first_output = output;
> -						mode = data.output[0].mode;
> -
> -						igt_output_set_pipe(output, data.pipe1);
> -						igt_output_override_mode(output, &mode);
> -					} else if (second_output == NULL) {
> -						second_output = output;
> -						igt_output_set_pipe(output, data.pipe2);
> -
> -						break;
> -					}
> -				}
> -
> -				igt_dynamic_f("pipe-%s-%s-pipe-%s-%s",
> -					      kmstest_pipe_name(data.pipe1),
> -					      igt_output_name(first_output),
> -					      kmstest_pipe_name(data.pipe2),
> -					      igt_output_name(second_output))
> -					test_invalid_modeset(&data);
> -			}
> -		}
>   	}
>   
> -	igt_describe("Verify simultaneous modeset on 2 big joiner outputs");
> -	igt_subtest_with_dynamic("2x-modeset") {
> -		igt_require_f(count > 1, "2 outputs with big joiner modes are required\n");
> -		igt_require_f(data.n_pipes > 3, "Minumum of 4 pipes are required\n");
> -		for (i = 0; (i + 2) < data.n_pipes - 1; i++) {
> -			data.pipe1 = pipe_seq[i];
> -			data.pipe2 = pipe_seq[i + 2];
> -			igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe_seq[i]), kmstest_pipe_name(pipe_seq[i + 2]))
> -				test_dual_display(&data);
> -		}
> +	igt_subtest_with_dynamic("invalid-modeset-bigjoiner") {
> +		igt_require_f(data.big_joiner_output_count > 0, "Non big joiner output not found\n");

I think we just need to check if there are 2 outputs or not.


Regards,

Ankit

> +		igt_require_f(data.n_pipes > 1, "Minimum of 2 pipes are required\n");
> +		if (data.big_joiner_output_count >= 1)
> +			igt_dynamic_f("big_joiner_on_last_pipe")
> +				tets_big_joiner_on_last_pipe(&data);
> +		if (data.big_joiner_output_count > 1)
> +			igt_dynamic_f("invalid_combinations")
> +				test_invalid_modeset_two_joiner(&data, false);
> +		if (data.combined_output_count)
> +			igt_dynamic_f("combined_output")
> +				test_invalid_modeset_two_joiner(&data, true);
>   	}
>   
>   	igt_fixture {
> -		igt_remove_fb(data.drm_fd, &data.fb);
>   		igt_display_fini(&data.display);
>   		drm_close_driver(data.drm_fd);
>   	}

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

* Re: [PATCH i-g-t 1/4] lib/igt_kms: move bigjoiner_mode_found to lib
  2024-03-10 14:27 ` [PATCH i-g-t 1/4] lib/igt_kms: move bigjoiner_mode_found to lib Kunal Joshi
@ 2024-03-15  4:10   ` Nautiyal, Ankit K
  2024-03-18  5:38     ` Joshi, Kunal1
  0 siblings, 1 reply; 22+ messages in thread
From: Nautiyal, Ankit K @ 2024-03-15  4:10 UTC (permalink / raw)
  To: Kunal Joshi, igt-dev; +Cc: Stanislav Lisovskiy, Karthik B S, Bhanuprakash Modem


On 3/10/2024 7:57 PM, Kunal Joshi wrote:
> move bigjoiner_mode_found to lib
>
> Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> Cc: Karthik B S <karthik.b.s@intel.com>
> Cc: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
> ---
>   lib/igt_kms.c                | 25 +++++++++++++++++++++++++
>   lib/igt_kms.h                |  2 ++
>   tests/intel/kms_big_joiner.c | 14 +-------------
>   3 files changed, 28 insertions(+), 13 deletions(-)
>
> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> index e18f6fe59..63c8045c7 100644
> --- a/lib/igt_kms.c
> +++ b/lib/igt_kms.c
> @@ -6143,6 +6143,31 @@ bool igt_bigjoiner_possible(drmModeModeInfo *mode, int max_dotclock)
>   		mode->clock > max_dotclock);
>   }
>   
> +/**
> + * bigjoiner_mode_found:
> + * @connector: libdrm connector
> + * @sort_method: comparator method
> + * @mode: libdrm mode
> + *

This is incorrect.


> + * Bigjoiner will come in to the picture when the
> + * resolution > 5K or clock > max-dot-clock.
> + *
> + * Returns: True if big joiner found in connector modes
> + */
> +bool bigjoiner_mode_found(int drm_fd, drmModeConnector *connector,
> +			  int max_dotclock)
> +{
> +	bool found = false;
> +
> +	igt_sort_connector_modes(connector, sort_drm_modes_by_res_dsc);
> +	found = igt_bigjoiner_possible(&connector->modes[0], max_dotclock);
> +	if (!found) {
> +		igt_sort_connector_modes(connector, sort_drm_modes_by_clk_dsc);
> +		found = igt_bigjoiner_possible(&connector->modes[0], max_dotclock);
> +	}
> +	return found;
> +}
> +
>   /**
>    * igt_check_bigjoiner_support:
>    * @display: a pointer to an #igt_display_t structure
> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
> index b3882808b..bab8487d3 100644
> --- a/lib/igt_kms.h
> +++ b/lib/igt_kms.h
> @@ -1212,6 +1212,8 @@ bool igt_max_bpc_constraint(igt_display_t *display, enum pipe pipe,
>   		igt_output_t *output, int bpc);
>   int igt_get_max_dotclock(int fd);
>   bool igt_bigjoiner_possible(drmModeModeInfo *mode, int max_dotclock);
> +bool bigjoiner_mode_found(int drm_fd, drmModeConnector *connector,
> +			  int max_dotclock);
>   bool igt_check_bigjoiner_support(igt_display_t *display);
>   bool igt_parse_mode_string(const char *mode_string, drmModeModeInfo *mode);
>   bool intel_pipe_output_combo_valid(igt_display_t *display);
> diff --git a/tests/intel/kms_big_joiner.c b/tests/intel/kms_big_joiner.c
> index aba2adfbe..28678b958 100644
> --- a/tests/intel/kms_big_joiner.c
> +++ b/tests/intel/kms_big_joiner.c
> @@ -199,16 +199,6 @@ static void test_dual_display(data_t *data)
>   	igt_display_commit2(display, COMMIT_ATOMIC);
>   }
>   
> -static bool bigjoiner_mode_found(drmModeConnector *connector,
> -				 int (*sort_method)(const void *, const void*),
> -				 drmModeModeInfo *mode)
> -{
> -	igt_sort_connector_modes(connector, sort_method);
> -	*mode = connector->modes[0];
> -
> -	return igt_bigjoiner_possible(mode, max_dotclock);
> -}
> -
>   igt_main
>   {
>   	data_t data;
> @@ -235,9 +225,7 @@ igt_main
>   			 * Bigjoiner will come in to the picture when the
>   			 * resolution > 5K or clock > max-dot-clock.
>   			 */
> -			found = (bigjoiner_mode_found(connector, sort_drm_modes_by_res_dsc, &mode) ||
> -				 bigjoiner_mode_found(connector, sort_drm_modes_by_clk_dsc, &mode)) ?
> -					true : false;
> +			found = bigjoiner_mode_found(data.drm_fd, connector, max_dotclock);


How does this work? Earlier mode was filled by the bigjoiner_mode_found().

Now mode is not getting filled at all.

Regards,

Ankit

>   
>   			if (found) {
>   				data.output[count].output_id = output->id;

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

* Re: [PATCH i-g-t 2/4] tests/intel/kms_big_joiner: revamp bigjoiner
  2024-03-14  8:43   ` Nautiyal, Ankit K
@ 2024-03-18  5:26     ` Joshi, Kunal1
  0 siblings, 0 replies; 22+ messages in thread
From: Joshi, Kunal1 @ 2024-03-18  5:26 UTC (permalink / raw)
  To: Nautiyal, Ankit K, igt-dev
  Cc: Stanislav Lisovskiy, Karthik B S, Bhanuprakash Modem

Hello Ankit,

On 3/14/2024 2:13 PM, Nautiyal, Ankit K wrote:
>
> On 3/10/2024 7:57 PM, Kunal Joshi wrote:
>> modify test to support simultaneously testing multiple bigjoiner
>> output and ignoring fused off pipes.
>
> I think there are a lot of changes in the patch, changing the basic 
> test, removing the 2x test, adding multiple bigjoiner tests in one go.
>
> Imho, this should be broken into smaller patches.
I tried thinking of ways in which this can be divided into smaller patches.
But i think its not feasible since whole test is rewritten again.
>
>>
>> v2: Don't change license (Bhanu)
>>      Print the pipe name (Bhanu)
>>      Remove unwanted commit (Bhanu)
>>      Move combine output logic to igt_fixture (Bhanu)
>>      split revamp and force joiner (Bhanu)
>>
>> v3: Ignored fused pipes (Stan)
>>
>> Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
>> Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>> Cc: Karthik B S <karthik.b.s@intel.com>
>> Cc: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
>> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
>> Signed-off-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
>> ---
>>   tests/intel/kms_big_joiner.c | 398 +++++++++++++++++------------------
>>   1 file changed, 195 insertions(+), 203 deletions(-)
>>
>> diff --git a/tests/intel/kms_big_joiner.c b/tests/intel/kms_big_joiner.c
>> index 28678b958..d4b0d1100 100644
>> --- a/tests/intel/kms_big_joiner.c
>> +++ b/tests/intel/kms_big_joiner.c
>> @@ -37,184 +37,227 @@
>>   #include "igt.h"
>>     /**
>> - * SUBTEST: invalid-modeset
>> + * SUBTEST: invalid-modeset-bigjoiner
>
> I think this can be retained, this doesn't seem necessary.
Ok sure ankit.
>
>
>>    * Description: Verify if the modeset on the adjoining pipe is 
>> rejected when
>>    *              the pipe is active with a big joiner modeset
>>    *
>> - * SUBTEST: basic
>> + * SUBTEST: basic-bigjoiner
>
> Same as above, also it already has subtests with single joiner, multi 
> joiner.
>
>
>>    * Description: Verify the basic modeset on big joiner mode on all 
>> pipes
>>    *
>> - * SUBTEST: 2x-modeset
>> - * Description: Verify simultaneous modeset on 2 big joiner outputs
>>    */
>>     IGT_TEST_DESCRIPTION("Test big joiner");
>>   -struct bigjoiner_output {
>> -    uint32_t output_id;
>> -    drmModeModeInfo mode;
>> -};
>> +#define INVALID_TEST_OUTPUT 2
>>     typedef struct {
>>       int drm_fd;
>> -    igt_display_t display;
>> -    struct igt_fb fb;
>> +    int big_joiner_output_count;
>> +    int non_big_joiner_output_count;
>> +    int combined_output_count;
>> +    int output_count;
>>       int n_pipes;
>> -    enum pipe pipe1;
>> -    enum pipe pipe2;
>> -    struct bigjoiner_output output[2];
>> +    int master_pipes;
>> +    uint64_t big_joiner_output[IGT_MAX_PIPES];
>> +    uint64_t non_big_joiner_output[IGT_MAX_PIPES];
>> +    uint64_t combined_output[IGT_MAX_PIPES];
>> +    enum pipe pipe_seq[IGT_MAX_PIPES];
>> +    igt_display_t display;
>>   } data_t;
>>     static int max_dotclock;
>>   -static void test_invalid_modeset(data_t *data)
>> +static void set_all_master_pipes_for_platform(data_t *data)
>>   {
>> -    igt_output_t *output;
>> -    igt_display_t *display = &data->display;
>> -    int ret;
>> -
>> -    igt_info("Bigjoiner test on ");
>> -    for_each_connected_output(display, output){
>> -        enum pipe p = output->pending_pipe;
>> -        drmModeModeInfo *mode;
>> -        igt_pipe_t *pipe;
>> -        igt_plane_t *plane;
>> +    enum pipe pipe;
>>   -        if (p == PIPE_NONE)
>> -            continue;
>> -
>> -        mode = igt_output_get_mode(output);
>> -        igt_info("pipe:%s, output:%s, mode:", kmstest_pipe_name(p), 
>> igt_output_name(output));
>> -        kmstest_dump_mode(mode);
>> +    for (pipe = PIPE_A; pipe < IGT_MAX_PIPES; pipe++)
>> +        if (data->display.pipes[pipe].enabled) {
>> +            igt_info("Found master pipe %s\n", 
>> kmstest_pipe_name(pipe));
>> +            data->master_pipes |= BIT(pipe);
>> +        }
>> +}
>>   -        pipe = &display->pipes[p];
>> -        plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
>> +static igt_output_t *get_output_by_id_or_assert(data_t *data, 
>> uint64_t id)
>> +{
>> +    igt_output_t *output;
>>   -        igt_plane_set_fb(plane, &data->fb);
>> -        igt_fb_set_size(&data->fb, plane, mode->hdisplay, 
>> mode->vdisplay);
>> -        igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
>> +    for_each_connected_output(&data->display, output) {
>> +        if (output->id == id)
>> +            return output;
>>       }
>> +    igt_assert_f(false, "Output not found\n");
>> +    return NULL;
>> +}
>>   -    igt_assert(!igt_check_bigjoiner_support(display));
>> -
>> -    /* This commit is expectd to fail as this pipe is being used for 
>> big joiner */
>> -    ret = igt_display_try_commit_atomic(display, 
>> DRM_MODE_ATOMIC_TEST_ONLY |
>> -                        DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
>> -
>> -    igt_display_reset(&data->display);
>> -    igt_display_commit2(display, COMMIT_ATOMIC);
>> +static enum pipe get_next_master_pipe(data_t *data, unsigned int 
>> available_pipe_mask)
>> +{
>> +    if ((data->master_pipes & available_pipe_mask) == 0)
>> +        return PIPE_NONE;
>>   -    igt_assert_lt(ret, 0);
>> +    return ffs(data->master_pipes & available_pipe_mask) - 1;
>>   }
>>   -static void test_basic_modeset(data_t *data)
>> +static void test_single_joiner(data_t *data, int output_count)
>>   {
>> +    int i, ret;
>> +    enum pipe pipe, master_pipe;
>> +    unsigned int available_pipe_mask = BIT(data->n_pipes) - 1;
>> +    unsigned int attempt_mask;
>> +    igt_output_t *output;
>> +    igt_plane_t *primary;
>> +    uint64_t *outputs;
>> +    igt_fb_t fb;
>>       drmModeModeInfo *mode;
>> -    igt_output_t *output, *bigjoiner_output = NULL;
>> -    igt_display_t *display = &data->display;
>> -    igt_pipe_t *pipe;
>> -    igt_plane_t *plane;
>>   -    igt_display_reset(display);
>> +    outputs = data->big_joiner_output;
>>   -    for_each_connected_output(display, output) {
>> -        if (data->output[0].output_id == output->id) {
>> -            bigjoiner_output = output;
>> -            break;
>> +    for (i = 0; i < output_count; i++) {
>> +        output = get_output_by_id_or_assert(data, outputs[i]);
>> +        for (pipe = 0; pipe < data->n_pipes-1; pipe++) {
>> +            igt_display_reset(&data->display);
>> +            attempt_mask = BIT(pipe);
>> +
>> +            master_pipe = get_next_master_pipe(data, 
>> available_pipe_mask & attempt_mask);
>> +            if (master_pipe == PIPE_NONE)
>> +                continue;
>> +            igt_info("Using pipe %s as master and %s slave for 
>> %s\n", kmstest_pipe_name(pipe), kmstest_pipe_name(pipe + 1), 
>> output->name);
>
> In case a pipe is fused off we are ignoring it for master pipe, but 
> since we cannot have it as slave also, we need to ignore pipe-1 also 
> as master.
>
> I think similar thing is mentioned by Bhanu too in last version.
>
> So we need to change set_all_master_pipes_for_platform accordingly.
>
Yeah right, will address in next revision.
Thanks :)
>
>> +            igt_output_set_pipe(output, pipe);
>> +            mode = igt_output_get_mode(output);
>> +            primary = igt_output_get_plane_type(output, 
>> DRM_PLANE_TYPE_PRIMARY);
>> +            igt_create_pattern_fb(data->drm_fd, mode->hdisplay, 
>> mode->vdisplay, DRM_FORMAT_XRGB8888,
>> +                                  DRM_FORMAT_MOD_LINEAR, &fb);
>> +            igt_plane_set_fb(primary, &fb);
>> +            ret = igt_display_try_commit2(&data->display, 
>> COMMIT_ATOMIC);
>> +            igt_assert_f(ret == 0, "Commit should have passed\n");
>
> Do we need try commit here? We can directly use 
> igt_display_commit_atomic.
>
> Same in other places.
I can change to commit from try_commit.
>
>
>>           }
>>       }
>> +}
>>   -    igt_output_set_pipe(bigjoiner_output, data->pipe1);
>> +static void test_multi_joiner(data_t *data, int output_count)
>> +{
>> +    int i, ret;
>> +    unsigned int available_pipe_mask;
>> +    enum pipe pipe, master_pipe;
>> +    uint64_t *outputs;
>> +    igt_output_t *output;
>> +    igt_plane_t *primary[output_count];
>> +    igt_fb_t fb[output_count];
>> +    drmModeModeInfo *mode;
>>   -    mode = &data->output[0].mode;
>> -    igt_output_override_mode(bigjoiner_output, mode);
>> +    available_pipe_mask = BIT(data->n_pipes) - 1;
>> +    outputs = data->big_joiner_output;
>>   -    pipe = &display->pipes[data->pipe1];
>> -    plane = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
>> +    igt_display_reset(&data->display);
>> +    for (i = 0; i < output_count; i++) {
>> +        output = get_output_by_id_or_assert(data, outputs[i]);
>> +        for (pipe = 0; pipe < data->n_pipes; pipe++) {
>> +            unsigned int attempt_mask = BIT(pipe);
>>   -    igt_plane_set_fb(plane, &data->fb);
>> -    igt_fb_set_size(&data->fb, plane, mode->hdisplay, mode->vdisplay);
>> -    igt_plane_set_size(plane, mode->hdisplay, mode->vdisplay);
>> +            master_pipe = get_next_master_pipe(data, 
>> available_pipe_mask & attempt_mask);
>> +            if (master_pipe == PIPE_NONE)
>> +                continue;
>>   -    igt_display_commit2(display, COMMIT_ATOMIC);
>> +            igt_info("Using pipe %s as master %s slave for %s\n", 
>> kmstest_pipe_name(pipe), kmstest_pipe_name(pipe + 1), output->name);
>> +            igt_output_set_pipe(output, pipe);
>> +            mode = igt_output_get_mode(output);
>> +            primary[i] = igt_output_get_plane_type(output, 
>> DRM_PLANE_TYPE_PRIMARY);
>> +            igt_create_pattern_fb(data->drm_fd, mode->hdisplay, 
>> mode->vdisplay, DRM_FORMAT_XRGB8888,
>> +                                  DRM_FORMAT_MOD_LINEAR, &fb[i]);
>> +            igt_plane_set_fb(primary[i], &fb[i]);
>>   -    igt_output_set_pipe(bigjoiner_output, PIPE_NONE);
>> -    igt_plane_set_fb(plane, NULL);
>> -    igt_display_commit2(display, COMMIT_ATOMIC);
>> +            available_pipe_mask &= ~BIT(master_pipe);
>> +            available_pipe_mask &= ~BIT(master_pipe + 1);
>> +            break;
>> +        }
>> +    }
>> +    ret = igt_display_try_commit2(&data->display, COMMIT_ATOMIC);
>> +    igt_assert_f(ret == 0, "Commit should have passed\n");
>>   }
>>   -static void test_dual_display(data_t *data)
>> +static void test_invalid_modeset_two_joiner(data_t *data,
>> +                        bool combined)
>>   {
>> +    int i, j, ret;
>> +    uint64_t *outputs;
>> +    igt_output_t *output;
>> +    igt_plane_t *primary[INVALID_TEST_OUTPUT];
>> +    igt_fb_t fb[INVALID_TEST_OUTPUT];
>>       drmModeModeInfo *mode;
>> -    igt_output_t *output, *bigjoiner_output[2];
>> -    igt_display_t *display = &data->display;
>> -    igt_pipe_t *pipe;
>> -    igt_plane_t *plane1, *plane2;
>> -    int count = 0;
>> -
>> -    igt_display_reset(display);
>> -
>> -    for_each_connected_output(display, output) {
>> -        if (data->output[count].output_id == output->id) {
>> -            bigjoiner_output[count] = output;
>> -            count++;
>> -        }
>>   -        if (count > 1)
>> -            break;
>> +    outputs = combined ? data->combined_output : 
>> data->big_joiner_output;
>> +
>> +    for (i = 0; i < data->n_pipes-1; i++) {
>> +        igt_display_reset(&data->display);
>> +        for (j = 0; j < INVALID_TEST_OUTPUT; j++) {
>> +            output = get_output_by_id_or_assert(data, outputs[j]);
>> +            igt_assert(output);
>> +            igt_output_set_pipe(output, data->pipe_seq[i + j]);
>> +            mode = igt_output_get_mode(output);
>> +            igt_info(" Assigning pipe %s to %s with mode %dx%d@%d%s",
>> +                 kmstest_pipe_name(data->pipe_seq[i + j]),
>> +                 igt_output_name(output), mode->hdisplay,
>> +                 mode->vdisplay, mode->vrefresh,
>> +                 j == INVALID_TEST_OUTPUT - 1 ? "\n" : ", ");
>> +            primary[j] = igt_output_get_plane_type(output, 
>> DRM_PLANE_TYPE_PRIMARY);
>> +            igt_create_pattern_fb(data->drm_fd, mode->hdisplay, 
>> mode->vdisplay, DRM_FORMAT_XRGB8888,
>> +                                  DRM_FORMAT_MOD_LINEAR, &fb[j]);
>> +            igt_plane_set_fb(primary[j], &fb[j]);
>> +        }
>> +        ret = igt_display_try_commit2(&data->display, COMMIT_ATOMIC);
>> +        igt_assert_f(ret != 0, "Commit shouldn't have passed\n");
>>       }
>> +}
>>   -    igt_output_set_pipe(bigjoiner_output[0], data->pipe1);
>> -    igt_output_set_pipe(bigjoiner_output[1], data->pipe2);
>> -
>> -    /* Set up first big joiner output on Pipe A*/
>> -    mode = &data->output[0].mode;
>> -    igt_output_override_mode(bigjoiner_output[0], mode);
>> -
>> -    pipe = &display->pipes[data->pipe1];
>> -    plane1 = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
>> -
>> -    igt_plane_set_fb(plane1, &data->fb);
>> -    igt_fb_set_size(&data->fb, plane1, mode->hdisplay, mode->vdisplay);
>> -    igt_plane_set_size(plane1, mode->hdisplay, mode->vdisplay);
>> -
>> -    /* Set up second big joiner output on Pipe C*/
>> -    mode = &data->output[1].mode;
>> -    igt_output_override_mode(bigjoiner_output[1], mode);
>> -
>> -    pipe = &display->pipes[data->pipe2];
>> -    plane2 = igt_pipe_get_plane_type(pipe, DRM_PLANE_TYPE_PRIMARY);
>> -
>> -    igt_plane_set_fb(plane2, &data->fb);
>> -    igt_fb_set_size(&data->fb, plane2, mode->hdisplay, mode->vdisplay);
>> -    igt_plane_set_size(plane2, mode->hdisplay, mode->vdisplay);
>> +static void tets_big_joiner_on_last_pipe(data_t *data)
>
> Typo: test
>
>
>> +{
>> +    int i, len, ret;
>> +    uint64_t *outputs;
>> +    igt_output_t *output;
>> +    igt_plane_t *primary;
>> +    igt_fb_t fb;
>> +    drmModeModeInfo *mode;
>>   -    igt_display_commit2(display, COMMIT_ATOMIC);
>> +    len = data->big_joiner_output_count;
>> +    outputs = data->big_joiner_output;
>>   -    /* Clean up */
>> -    igt_output_set_pipe(bigjoiner_output[0], PIPE_NONE);
>> -    igt_output_set_pipe(bigjoiner_output[1], PIPE_NONE);
>> -    igt_plane_set_fb(plane1, NULL);
>> -    igt_plane_set_fb(plane2, NULL);
>> -    igt_display_commit2(display, COMMIT_ATOMIC);
>> +    for (i = 0; i < len; i++) {
>> +        igt_display_reset(&data->display);
>> +        output = get_output_by_id_or_assert(data, outputs[i]);
>> +        igt_output_set_pipe(output, data->pipe_seq[data->n_pipes - 1]);
>> +        mode = igt_output_get_mode(output);
>> +        igt_info(" Assigning pipe %s to %s with mode %dx%d@%d\n",
>> + kmstest_pipe_name(data->pipe_seq[data->n_pipes - 1]),
>> +                 igt_output_name(output), mode->hdisplay,
>> +                 mode->vdisplay, mode->vrefresh);
>> +        primary = igt_output_get_plane_type(output, 
>> DRM_PLANE_TYPE_PRIMARY);
>> +        igt_create_pattern_fb(data->drm_fd, mode->hdisplay, 
>> mode->vdisplay, DRM_FORMAT_XRGB8888,
>> +                              DRM_FORMAT_MOD_LINEAR, &fb);
>> +        igt_plane_set_fb(primary, &fb);
>> +        ret = igt_display_try_commit2(&data->display, COMMIT_ATOMIC);
>> +        igt_assert_f(ret != 0, "Commit shouldn't have passed\n");
>> +    }
>>   }
>>   +
>>   igt_main
>>   {
>> -    data_t data;
>> +    int i, j;
>>       igt_output_t *output;
>> -    drmModeModeInfo mode;
>> -    int valid_output = 0, i, count = 0, j = 0;
>> -    uint16_t width = 0, height = 0;
>> -    enum pipe pipe_seq[IGT_MAX_PIPES];
>> +    data_t data;
>>         igt_fixture {
>> +        data.big_joiner_output_count = 0;
>> +        data.non_big_joiner_output_count = 0;
>> +        data.combined_output_count = 0;
>> +        data.output_count = 0;
>> +        j = 0;
>> +
>>           data.drm_fd = drm_open_driver_master(DRIVER_INTEL | 
>> DRIVER_XE);
>>           kmstest_set_vt_graphics_mode();
>> -
>>           igt_display_require(&data.display, data.drm_fd);
>> +        set_all_master_pipes_for_platform(&data);
>>           igt_require(data.display.is_atomic);
>> -
>>           max_dotclock = igt_get_max_dotclock(data.drm_fd);
>>             for_each_connected_output(&data.display, output) {
>> @@ -228,105 +271,54 @@ igt_main
>>               found = bigjoiner_mode_found(data.drm_fd, connector, 
>> max_dotclock);
>>                 if (found) {
>> -                data.output[count].output_id = output->id;
>> -                memcpy(&data.output[count].mode, &mode, 
>> sizeof(drmModeModeInfo));
>> -                count++;
>> -
>> -                width = max(width, mode.hdisplay);
>> -                height = max(height, mode.vdisplay);
>> + data.big_joiner_output[data.big_joiner_output_count++] = 
>> output->config.connector->connector_id;
>> +                igt_output_override_mode(output, &connector->modes[0]);
>> +            } else {
>> + data.non_big_joiner_output[data.non_big_joiner_output_count++] = 
>> output->config.connector->connector_id;
>>               }
>> -            valid_output++;
>> +            data.output_count++;
>> +        }
>> +        if (data.big_joiner_output_count == 1 && 
>> data.non_big_joiner_output_count >= 1) {
>> +            data.combined_output[data.combined_output_count++] = 
>> data.big_joiner_output[0];
>> +            data.combined_output[data.combined_output_count++] = 
>> data.non_big_joiner_output[0];
>>           }
>> -
>>           data.n_pipes = 0;
>>           for_each_pipe(&data.display, i) {
>>               data.n_pipes++;
>> -            pipe_seq[j] = i;
>> +            data.pipe_seq[j] = i;
>>               j++;
>>           }
>> -
>> -        igt_require_f(count > 0, "No output with 5k+ mode (or) clock 
>> > max-dot-clock found\n");
>> -
>> -        igt_create_pattern_fb(data.drm_fd, width, height, 
>> DRM_FORMAT_XRGB8888,
>> -                      DRM_FORMAT_MOD_LINEAR, &data.fb);
>>       }
>>         igt_describe("Verify the basic modeset on big joiner mode on 
>> all pipes");
>> -    igt_subtest_with_dynamic("basic") {
>> -        for (i = 0; i < data.n_pipes - 1; i++) {
>> -            data.pipe1 = pipe_seq[i];
>> -            igt_dynamic_f("pipe-%s", kmstest_pipe_name(pipe_seq[i]))
>> -                test_basic_modeset(&data);
>> -        }
>> -    }
>> +    igt_subtest_with_dynamic("basic-bigjoiner") {
>> +            igt_require_f(data.big_joiner_output_count > 0,
>> +                      "No bigjoiner output found\n");
>> +            igt_require_f(data.n_pipes > 1,
>> +                      "Minimum 2 pipes required\n");
>> +            igt_dynamic_f("single-joiner")
>> +                test_single_joiner(&data, 
>> data.big_joiner_output_count);
>> +            if (data.big_joiner_output_count > 1)
>> +                igt_dynamic_f("multi-joiner")
>> +                    test_multi_joiner(&data, 
>> data.big_joiner_output_count);
>>   -    igt_describe("Verify if the modeset on the adjoining pipe is 
>> rejected "
>> -             "when the pipe is active with a big joiner modeset");
>> -    igt_subtest_with_dynamic("invalid-modeset") {
>> -        data.pipe1 = pipe_seq[j - 1];
>> -
>> -        igt_display_reset(&data.display);
>> -        for_each_connected_output(&data.display, output) {
>> -            if (data.output[0].output_id != output->id)
>> -                continue;
>> -
>> -            mode = data.output[0].mode;
>> -            igt_output_set_pipe(output, data.pipe1);
>> -            igt_output_override_mode(output, &mode);
>> -
>> -            igt_dynamic_f("pipe-%s-%s",
>> -                      kmstest_pipe_name(data.pipe1),
>> -                      igt_output_name(output))
>> -                test_invalid_modeset(&data);
>> -        }
>> -
>> -        if(valid_output > 1) {
>> -            for (i = 0; i < data.n_pipes - 1; i++) {
>> -                igt_output_t *first_output = NULL, *second_output = 
>> NULL;
>> -
>> -                data.pipe1 = pipe_seq[i];
>> -                data.pipe2 = pipe_seq[i + 1];
>> -
>> -                igt_display_reset(&data.display);
>> -                for_each_connected_output(&data.display, output) {
>> -                    if (data.output[0].output_id == output->id) {
>> -                        first_output = output;
>> -                        mode = data.output[0].mode;
>> -
>> -                        igt_output_set_pipe(output, data.pipe1);
>> -                        igt_output_override_mode(output, &mode);
>> -                    } else if (second_output == NULL) {
>> -                        second_output = output;
>> -                        igt_output_set_pipe(output, data.pipe2);
>> -
>> -                        break;
>> -                    }
>> -                }
>> -
>> -                igt_dynamic_f("pipe-%s-%s-pipe-%s-%s",
>> -                          kmstest_pipe_name(data.pipe1),
>> -                          igt_output_name(first_output),
>> -                          kmstest_pipe_name(data.pipe2),
>> -                          igt_output_name(second_output))
>> -                    test_invalid_modeset(&data);
>> -            }
>> -        }
>>       }
>>   -    igt_describe("Verify simultaneous modeset on 2 big joiner 
>> outputs");
>> -    igt_subtest_with_dynamic("2x-modeset") {
>> -        igt_require_f(count > 1, "2 outputs with big joiner modes 
>> are required\n");
>> -        igt_require_f(data.n_pipes > 3, "Minumum of 4 pipes are 
>> required\n");
>> -        for (i = 0; (i + 2) < data.n_pipes - 1; i++) {
>> -            data.pipe1 = pipe_seq[i];
>> -            data.pipe2 = pipe_seq[i + 2];
>> -            igt_dynamic_f("pipe-%s-%s", 
>> kmstest_pipe_name(pipe_seq[i]), kmstest_pipe_name(pipe_seq[i + 2]))
>> -                test_dual_display(&data);
>> -        }
>> +    igt_subtest_with_dynamic("invalid-modeset-bigjoiner") {
>> +        igt_require_f(data.big_joiner_output_count > 0, "Non big 
>> joiner output not found\n");
>
> I think we just need to check if there are 2 outputs or not.
Ankit there are two dynamic tests inside invalid-modeset-bigjoiner
last-pipe     (Require 1 output)
two-joiner  (Require 2 output, (either 2 bigjoiner or 1 bigjoiner and 1 
non bigjoiner )
>
>
> Regards,
>
> Ankit
>
>> +        igt_require_f(data.n_pipes > 1, "Minimum of 2 pipes are 
>> required\n");
>> +        if (data.big_joiner_output_count >= 1)
>> +            igt_dynamic_f("big_joiner_on_last_pipe")
>> +                tets_big_joiner_on_last_pipe(&data);
>> +        if (data.big_joiner_output_count > 1)
>> +            igt_dynamic_f("invalid_combinations")
>> +                test_invalid_modeset_two_joiner(&data, false);
>> +        if (data.combined_output_count)
>> +            igt_dynamic_f("combined_output")
>> +                test_invalid_modeset_two_joiner(&data, true);
>>       }
>>         igt_fixture {
>> -        igt_remove_fb(data.drm_fd, &data.fb);
>>           igt_display_fini(&data.display);
>>           drm_close_driver(data.drm_fd);
>>       }
Thanks and Regards
Kunal Joshi

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

* Re: [PATCH i-g-t 1/4] lib/igt_kms: move bigjoiner_mode_found to lib
  2024-03-15  4:10   ` Nautiyal, Ankit K
@ 2024-03-18  5:38     ` Joshi, Kunal1
  2024-03-20 12:29       ` Nautiyal, Ankit K
  0 siblings, 1 reply; 22+ messages in thread
From: Joshi, Kunal1 @ 2024-03-18  5:38 UTC (permalink / raw)
  To: Nautiyal, Ankit K, igt-dev
  Cc: Stanislav Lisovskiy, Karthik B S, Bhanuprakash Modem

Hello Ankit,

On 3/15/2024 9:40 AM, Nautiyal, Ankit K wrote:
>
> On 3/10/2024 7:57 PM, Kunal Joshi wrote:
>> move bigjoiner_mode_found to lib
>>
>> Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
>> Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>> Cc: Karthik B S <karthik.b.s@intel.com>
>> Cc: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
>> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
>> ---
>>   lib/igt_kms.c                | 25 +++++++++++++++++++++++++
>>   lib/igt_kms.h                |  2 ++
>>   tests/intel/kms_big_joiner.c | 14 +-------------
>>   3 files changed, 28 insertions(+), 13 deletions(-)
>>
>> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
>> index e18f6fe59..63c8045c7 100644
>> --- a/lib/igt_kms.c
>> +++ b/lib/igt_kms.c
>> @@ -6143,6 +6143,31 @@ bool igt_bigjoiner_possible(drmModeModeInfo 
>> *mode, int max_dotclock)
>>           mode->clock > max_dotclock);
>>   }
>>   +/**
>> + * bigjoiner_mode_found:
>> + * @connector: libdrm connector
>> + * @sort_method: comparator method
>> + * @mode: libdrm mode
>> + *
>
> This is incorrect.
>
>
>> + * Bigjoiner will come in to the picture when the
>> + * resolution > 5K or clock > max-dot-clock.
>> + *
>> + * Returns: True if big joiner found in connector modes
>> + */
>> +bool bigjoiner_mode_found(int drm_fd, drmModeConnector *connector,
>> +              int max_dotclock)
>> +{
>> +    bool found = false;
>> +
>> +    igt_sort_connector_modes(connector, sort_drm_modes_by_res_dsc);
>> +    found = igt_bigjoiner_possible(&connector->modes[0], max_dotclock);
>> +    if (!found) {
>> +        igt_sort_connector_modes(connector, sort_drm_modes_by_clk_dsc);
>> +        found = igt_bigjoiner_possible(&connector->modes[0], 
>> max_dotclock);
>> +    }
>> +    return found;
>> +}
>> +
>>   /**
>>    * igt_check_bigjoiner_support:
>>    * @display: a pointer to an #igt_display_t structure
>> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
>> index b3882808b..bab8487d3 100644
>> --- a/lib/igt_kms.h
>> +++ b/lib/igt_kms.h
>> @@ -1212,6 +1212,8 @@ bool igt_max_bpc_constraint(igt_display_t 
>> *display, enum pipe pipe,
>>           igt_output_t *output, int bpc);
>>   int igt_get_max_dotclock(int fd);
>>   bool igt_bigjoiner_possible(drmModeModeInfo *mode, int max_dotclock);
>> +bool bigjoiner_mode_found(int drm_fd, drmModeConnector *connector,
>> +              int max_dotclock);
>>   bool igt_check_bigjoiner_support(igt_display_t *display);
>>   bool igt_parse_mode_string(const char *mode_string, drmModeModeInfo 
>> *mode);
>>   bool intel_pipe_output_combo_valid(igt_display_t *display);
>> diff --git a/tests/intel/kms_big_joiner.c b/tests/intel/kms_big_joiner.c
>> index aba2adfbe..28678b958 100644
>> --- a/tests/intel/kms_big_joiner.c
>> +++ b/tests/intel/kms_big_joiner.c
>> @@ -199,16 +199,6 @@ static void test_dual_display(data_t *data)
>>       igt_display_commit2(display, COMMIT_ATOMIC);
>>   }
>>   -static bool bigjoiner_mode_found(drmModeConnector *connector,
>> -                 int (*sort_method)(const void *, const void*),
>> -                 drmModeModeInfo *mode)
>> -{
>> -    igt_sort_connector_modes(connector, sort_method);
>> -    *mode = connector->modes[0];
>> -
>> -    return igt_bigjoiner_possible(mode, max_dotclock);
>> -}
>> -
>>   igt_main
>>   {
>>       data_t data;
>> @@ -235,9 +225,7 @@ igt_main
>>                * Bigjoiner will come in to the picture when the
>>                * resolution > 5K or clock > max-dot-clock.
>>                */
>> -            found = (bigjoiner_mode_found(connector, 
>> sort_drm_modes_by_res_dsc, &mode) ||
>> -                 bigjoiner_mode_found(connector, 
>> sort_drm_modes_by_clk_dsc, &mode)) ?
>> -                    true : false;
>> +            found = bigjoiner_mode_found(data.drm_fd, connector, 
>> max_dotclock);
>
>
> How does this work? Earlier mode was filled by the 
> bigjoiner_mode_found().
Currently it works as we will have the connector modes sorted.
But as you state for better readability will have a mode parameter.
>
> Now mode is not getting filled at all.
>
> Regards,
>
> Ankit
>
>>                 if (found) {
>>                   data.output[count].output_id = output->id;
Thanks and Regards
Kunal Joshi

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

* Re: [PATCH i-g-t 1/4] lib/igt_kms: move bigjoiner_mode_found to lib
  2024-03-18  5:38     ` Joshi, Kunal1
@ 2024-03-20 12:29       ` Nautiyal, Ankit K
  0 siblings, 0 replies; 22+ messages in thread
From: Nautiyal, Ankit K @ 2024-03-20 12:29 UTC (permalink / raw)
  To: Joshi, Kunal1, igt-dev
  Cc: Stanislav Lisovskiy, Karthik B S, Bhanuprakash Modem


On 3/18/2024 11:08 AM, Joshi, Kunal1 wrote:
> Hello Ankit,
>
> On 3/15/2024 9:40 AM, Nautiyal, Ankit K wrote:
>>
>> On 3/10/2024 7:57 PM, Kunal Joshi wrote:
>>> move bigjoiner_mode_found to lib
>>>
>>> Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
>>> Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>>> Cc: Karthik B S <karthik.b.s@intel.com>
>>> Cc: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
>>> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
>>> ---
>>>   lib/igt_kms.c                | 25 +++++++++++++++++++++++++
>>>   lib/igt_kms.h                |  2 ++
>>>   tests/intel/kms_big_joiner.c | 14 +-------------
>>>   3 files changed, 28 insertions(+), 13 deletions(-)
>>>
>>> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
>>> index e18f6fe59..63c8045c7 100644
>>> --- a/lib/igt_kms.c
>>> +++ b/lib/igt_kms.c
>>> @@ -6143,6 +6143,31 @@ bool igt_bigjoiner_possible(drmModeModeInfo 
>>> *mode, int max_dotclock)
>>>           mode->clock > max_dotclock);
>>>   }
>>>   +/**
>>> + * bigjoiner_mode_found:
>>> + * @connector: libdrm connector
>>> + * @sort_method: comparator method
>>> + * @mode: libdrm mode
>>> + *
>>
>> This is incorrect.
>>
>>
>>> + * Bigjoiner will come in to the picture when the
>>> + * resolution > 5K or clock > max-dot-clock.
>>> + *
>>> + * Returns: True if big joiner found in connector modes
>>> + */
>>> +bool bigjoiner_mode_found(int drm_fd, drmModeConnector *connector,
>>> +              int max_dotclock)
>>> +{
>>> +    bool found = false;
>>> +
>>> +    igt_sort_connector_modes(connector, sort_drm_modes_by_res_dsc);
>>> +    found = igt_bigjoiner_possible(&connector->modes[0], 
>>> max_dotclock);
>>> +    if (!found) {
>>> +        igt_sort_connector_modes(connector, 
>>> sort_drm_modes_by_clk_dsc);
>>> +        found = igt_bigjoiner_possible(&connector->modes[0], 
>>> max_dotclock);
>>> +    }
>>> +    return found;
>>> +}
>>> +
>>>   /**
>>>    * igt_check_bigjoiner_support:
>>>    * @display: a pointer to an #igt_display_t structure
>>> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
>>> index b3882808b..bab8487d3 100644
>>> --- a/lib/igt_kms.h
>>> +++ b/lib/igt_kms.h
>>> @@ -1212,6 +1212,8 @@ bool igt_max_bpc_constraint(igt_display_t 
>>> *display, enum pipe pipe,
>>>           igt_output_t *output, int bpc);
>>>   int igt_get_max_dotclock(int fd);
>>>   bool igt_bigjoiner_possible(drmModeModeInfo *mode, int max_dotclock);
>>> +bool bigjoiner_mode_found(int drm_fd, drmModeConnector *connector,
>>> +              int max_dotclock);
>>>   bool igt_check_bigjoiner_support(igt_display_t *display);
>>>   bool igt_parse_mode_string(const char *mode_string, 
>>> drmModeModeInfo *mode);
>>>   bool intel_pipe_output_combo_valid(igt_display_t *display);
>>> diff --git a/tests/intel/kms_big_joiner.c 
>>> b/tests/intel/kms_big_joiner.c
>>> index aba2adfbe..28678b958 100644
>>> --- a/tests/intel/kms_big_joiner.c
>>> +++ b/tests/intel/kms_big_joiner.c
>>> @@ -199,16 +199,6 @@ static void test_dual_display(data_t *data)
>>>       igt_display_commit2(display, COMMIT_ATOMIC);
>>>   }
>>>   -static bool bigjoiner_mode_found(drmModeConnector *connector,
>>> -                 int (*sort_method)(const void *, const void*),
>>> -                 drmModeModeInfo *mode)
>>> -{
>>> -    igt_sort_connector_modes(connector, sort_method);
>>> -    *mode = connector->modes[0];
>>> -
>>> -    return igt_bigjoiner_possible(mode, max_dotclock);
>>> -}
>>> -
>>>   igt_main
>>>   {
>>>       data_t data;
>>> @@ -235,9 +225,7 @@ igt_main
>>>                * Bigjoiner will come in to the picture when the
>>>                * resolution > 5K or clock > max-dot-clock.
>>>                */
>>> -            found = (bigjoiner_mode_found(connector, 
>>> sort_drm_modes_by_res_dsc, &mode) ||
>>> -                 bigjoiner_mode_found(connector, 
>>> sort_drm_modes_by_clk_dsc, &mode)) ?
>>> -                    true : false;
>>> +            found = bigjoiner_mode_found(data.drm_fd, connector, 
>>> max_dotclock);
>>
>>
>> How does this work? Earlier mode was filled by the 
>> bigjoiner_mode_found().
> Currently it works as we will have the connector modes sorted.
> But as you state for better readability will have a mode parameter.

No, I meant that with only this patch we have a variable mode which we 
are not filling now.

Later we are doing  `memcpy(&data.output[count].mode, &mode, 
sizeof(drmModeModeInfo));`  inside the if (found) block.

I think we need to remove the drmModeModeInfo mode and memcpy line.

Regards,

Ankit


>>
>> Now mode is not getting filled at all.
>>
>> Regards,
>>
>> Ankit
>>
>>>                 if (found) {
>>>                   data.output[count].output_id = output->id;
> Thanks and Regards
> Kunal Joshi

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

* Re: [PATCH i-g-t 3/4] lib/igt_kms: add helper to enable/disable force joiner
  2024-03-10 14:27 ` [PATCH i-g-t 3/4] lib/igt_kms: add helper to enable/disable force joiner Kunal Joshi
@ 2024-03-20 12:53   ` Nautiyal, Ankit K
  2024-03-20 13:21     ` Nautiyal, Ankit K
  0 siblings, 1 reply; 22+ messages in thread
From: Nautiyal, Ankit K @ 2024-03-20 12:53 UTC (permalink / raw)
  To: Kunal Joshi, igt-dev; +Cc: Stanislav Lisovskiy, Karthik B S, Bhanuprakash Modem


On 3/10/2024 7:57 PM, Kunal Joshi wrote:
> add helpers to check whether force joiner debugfs exists
> and to enable/disable force joiner for a specific connector.
>
> Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> Cc: Karthik B S <karthik.b.s@intel.com>
> Cc: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
> ---
>   lib/igt_kms.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++
>   lib/igt_kms.h |  2 ++
>   2 files changed, 61 insertions(+)
>
> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> index 63c8045c7..9d0cbd329 100644
> --- a/lib/igt_kms.c
> +++ b/lib/igt_kms.c
> @@ -6168,6 +6168,65 @@ bool bigjoiner_mode_found(int drm_fd, drmModeConnector *connector,
>   	return found;
>   }
>   
> +/**
> + * Checks if the force big joiner is enabled for a specific connector.
> + *
> + * @drmfd The file descriptor of the DRM device.
> + * @connector_name The name of the connector.

I think we dont need documentation for this, as this is straight forward 
and just static function which is called from one place.

> + * Returns:
> + *  true if status equals enable, false otherwise.
> + */
> +static bool igt_check_force_bigjoiner_status(int drmfd, char *connector_name, bool enable)
> +{
> +	char buf[512];
> +	int debugfs_fd, ret;
> +
> +	igt_assert_f(connector_name, "Connector name cannot be NULL\n");
> +	debugfs_fd = igt_debugfs_connector_dir(drmfd, connector_name, O_RDONLY);
> +	igt_assert_f(debugfs_fd >= 0, "Could not open debugfs for connector %s\n", connector_name);
> +	ret = igt_debugfs_simple_read(debugfs_fd, "i915_bigjoiner_force_enable", buf, sizeof(buf));
> +	close(debugfs_fd);
> +	igt_assert_f(ret > 0, "Could not read i915_bigjoiner_force_enable for connector %s\n", connector_name);
> +	return enable ? strstr(buf, "Bigjoiner enable: 1") :
> +					strstr(buf, "Bigjoiner enable: 0");
> +}
> +
> +bool has_force_joiner_debugfs(int drmfd, igt_output_t *output)

Since this helper is expected to be used in other tests, it would be 
good to have documentation for this.

Also, imho, it would be better to use igt_* for helpers, though we seem 
to be not following this strictly.


> +{
> +	char buf[512];
> +	int debugfs_fd, ret;
> +
> +	igt_assert_f(output->name, "Connector name cannot be NULL\n");
> +	debugfs_fd = igt_debugfs_connector_dir(drmfd, output->name, O_RDONLY);
> +	igt_assert_f(debugfs_fd >= 0, "Could not open debugfs for connector %s\n", output->name);

I think we should not assert here, this will fail for platforms that do 
not support bigjoiner. Perhaps returning false will be sufficient.


Regards,

Ankit

> +	ret = igt_debugfs_simple_read(debugfs_fd, "i915_bigjoiner_force_enable", buf, sizeof(buf));
> +	close(debugfs_fd);
> +	return ret >= 0;
> +}
> +
> +/**
> + * Forces the enable/disable state of big joiner for a specific connector.
> + *
> + * @drmfd The file descriptor of the DRM device.
> + * @connector_name The name of the connector.
> + * @enable The desired state of big joiner (true for enable, false for disable).
> + * Returns:
> + *  true on success, false otherwise.
> + */
> +bool igt_force_bigjoiner_enable(int drmfd, char *connector_name, bool enable)
> +{
> +	int debugfs_fd, ret;
> +
> +	igt_assert_f(connector_name, "Connector name cannot be NULL\n");
> +	debugfs_fd = igt_debugfs_connector_dir(drmfd, connector_name, O_DIRECTORY);
> +	igt_assert_f(debugfs_fd >= 0, "Could not open debugfs for connector %s\n", connector_name);
> +	ret = igt_sysfs_write(debugfs_fd, "i915_bigjoiner_force_enable", enable ? "1" : "0", 1);
> +	close(debugfs_fd);
> +	igt_assert_f(ret > 0, "Could not write i915_bigjoiner_force_enable for connector %s\n", connector_name);
> +
> +	return igt_check_force_bigjoiner_status(drmfd, connector_name, enable);
> +}
> +
>   /**
>    * igt_check_bigjoiner_support:
>    * @display: a pointer to an #igt_display_t structure
> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
> index bab8487d3..f13b7fd53 100644
> --- a/lib/igt_kms.h
> +++ b/lib/igt_kms.h
> @@ -1214,6 +1214,8 @@ int igt_get_max_dotclock(int fd);
>   bool igt_bigjoiner_possible(drmModeModeInfo *mode, int max_dotclock);
>   bool bigjoiner_mode_found(int drm_fd, drmModeConnector *connector,
>   			  int max_dotclock);
> +bool has_force_joiner_debugfs(int drmfd, igt_output_t *output);
> +bool igt_force_bigjoiner_enable(int drmfd, char *connector_name, bool enable);
>   bool igt_check_bigjoiner_support(igt_display_t *display);
>   bool igt_parse_mode_string(const char *mode_string, drmModeModeInfo *mode);
>   bool intel_pipe_output_combo_valid(igt_display_t *display);

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

* Re: [PATCH i-g-t 4/4] tests/intel/kms_big_joiner: add tests for force joiner
  2024-03-10 14:27 ` [PATCH i-g-t 4/4] tests/intel/kms_big_joiner: add tests for " Kunal Joshi
@ 2024-03-20 13:17   ` Nautiyal, Ankit K
  0 siblings, 0 replies; 22+ messages in thread
From: Nautiyal, Ankit K @ 2024-03-20 13:17 UTC (permalink / raw)
  To: Kunal Joshi, igt-dev; +Cc: Stanislav Lisovskiy, Karthik B S, Bhanuprakash Modem


On 3/10/2024 7:57 PM, Kunal Joshi wrote:
> add tests for force joiner
>
> Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
> Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> Cc: Karthik B S <karthik.b.s@intel.com>
> Cc: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
> ---
>   tests/intel/kms_big_joiner.c | 101 +++++++++++++++++++++++++++++------
>   1 file changed, 85 insertions(+), 16 deletions(-)
>
> diff --git a/tests/intel/kms_big_joiner.c b/tests/intel/kms_big_joiner.c
> index d4b0d1100..6017b30cd 100644
> --- a/tests/intel/kms_big_joiner.c
> +++ b/tests/intel/kms_big_joiner.c
> @@ -44,13 +44,20 @@
>    * SUBTEST: basic-bigjoiner
>    * Description: Verify the basic modeset on big joiner mode on all pipes
>    *
> + * SUBTEST: invalid-modeset-force-joiner
> + * Description: Verify if the modeset on the adjoining pipe is rejected when
> + *              the pipe is active with a force joiner modeset
> + *
> + * SUBTEST: basic-force-joiner
> + * Description: Verify the basic modeset on force joiner mode on all pipes
>    */
>   
> -IGT_TEST_DESCRIPTION("Test big joiner");
> +IGT_TEST_DESCRIPTION("Test big joiner / force joiner");
>   
>   #define INVALID_TEST_OUTPUT 2
>   
>   typedef struct {
> +	bool force_joiner_supported;
>   	int drm_fd;
>   	int big_joiner_output_count;
>   	int non_big_joiner_output_count;
> @@ -90,6 +97,17 @@ static igt_output_t *get_output_by_id_or_assert(data_t *data, uint64_t id)
>   	return NULL;
>   }
>   
> +static void toggle_force_joiner_on_all_non_big_joiner_outputs(data_t *data, bool toggle)
> +{
> +	int i;
> +	igt_output_t *output;
> +
> +	for (i = 0; i < data->non_big_joiner_output_count; i++) {
> +		output = get_output_by_id_or_assert(data, data->non_big_joiner_output[i]);
> +		igt_force_bigjoiner_enable(data->drm_fd, output->name, toggle);

Perhaps we should check if the force enable was success.


> +	}
> +}
> +
>   static enum pipe get_next_master_pipe(data_t *data, unsigned int available_pipe_mask)
>   {
>   	if ((data->master_pipes & available_pipe_mask) == 0)
> @@ -98,7 +116,7 @@ static enum pipe get_next_master_pipe(data_t *data, unsigned int available_pipe_
>   	return ffs(data->master_pipes & available_pipe_mask) - 1;
>   }
>   
> -static void test_single_joiner(data_t *data, int output_count)
> +static void test_single_joiner(data_t *data, int output_count, bool force_joiner)
>   {
>   	int i, ret;
>   	enum pipe pipe, master_pipe;
> @@ -110,7 +128,7 @@ static void test_single_joiner(data_t *data, int output_count)
>   	igt_fb_t fb;
>   	drmModeModeInfo *mode;
>   
> -	outputs = data->big_joiner_output;
> +	outputs = force_joiner ? data->non_big_joiner_output : data->big_joiner_output;
>   
>   	for (i = 0; i < output_count; i++) {
>   		output = get_output_by_id_or_assert(data, outputs[i]);
> @@ -121,7 +139,8 @@ static void test_single_joiner(data_t *data, int output_count)
>   			master_pipe = get_next_master_pipe(data, available_pipe_mask & attempt_mask);
>   			if (master_pipe == PIPE_NONE)
>   				continue;
> -			igt_info("Using pipe %s as master and %s slave for %s\n", kmstest_pipe_name(pipe), kmstest_pipe_name(pipe + 1), output->name);
> +			igt_info("Using pipe %s as master and %s slave for %s\n", kmstest_pipe_name(pipe),
> +					 kmstest_pipe_name(pipe + 1), output->name);
>   			igt_output_set_pipe(output, pipe);
>   			mode = igt_output_get_mode(output);
>   			primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
> @@ -134,7 +153,7 @@ static void test_single_joiner(data_t *data, int output_count)
>   	}
>   }
>   
> -static void test_multi_joiner(data_t *data, int output_count)
> +static void test_multi_joiner(data_t *data, int output_count, bool force_joiner)

force_joiner is not used in this function.

Also there seem to be an overlap with test_single_joiner, so there seem 
to be some code we can take out as a separate function, without 
compromising readability.


>   {
>   	int i, ret;
>   	unsigned int available_pipe_mask;
> @@ -158,7 +177,8 @@ static void test_multi_joiner(data_t *data, int output_count)
>   			if (master_pipe == PIPE_NONE)
>   				continue;
>   
> -			igt_info("Using pipe %s as master %s slave for %s\n", kmstest_pipe_name(pipe), kmstest_pipe_name(pipe + 1), output->name);
> +			igt_info("Using pipe %s as master %s slave for %s\n", kmstest_pipe_name(pipe),
> +					 kmstest_pipe_name(pipe + 1), output->name);
>   			igt_output_set_pipe(output, pipe);
>   			mode = igt_output_get_mode(output);
>   			primary[i] = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
> @@ -176,7 +196,7 @@ static void test_multi_joiner(data_t *data, int output_count)
>   }
>   
>   static void test_invalid_modeset_two_joiner(data_t *data,
> -					    bool combined)
> +					    bool combined,  bool force_joiner)

Here too force_joiner is not used.


Regards,

Ankit

>   {
>   	int i, j, ret;
>   	uint64_t *outputs;
> @@ -209,7 +229,7 @@ static void test_invalid_modeset_two_joiner(data_t *data,
>   	}
>   }
>   
> -static void tets_big_joiner_on_last_pipe(data_t *data)
> +static void test_joiner_on_last_pipe(data_t *data, bool force_joiner)
>   {
>   	int i, len, ret;
>   	uint64_t *outputs;
> @@ -218,8 +238,8 @@ static void tets_big_joiner_on_last_pipe(data_t *data)
>   	igt_fb_t fb;
>   	drmModeModeInfo *mode;
>   
> -	len = data->big_joiner_output_count;
> -	outputs = data->big_joiner_output;
> +	len = force_joiner ? data->non_big_joiner_output_count : data->big_joiner_output_count;
> +	outputs = force_joiner ? data->non_big_joiner_output : data->big_joiner_output;
>   
>   	for (i = 0; i < len; i++) {
>   		igt_display_reset(&data->display);
> @@ -247,6 +267,7 @@ igt_main
>   	data_t data;
>   
>   	igt_fixture {
> +		data.force_joiner_supported = false;
>   		data.big_joiner_output_count = 0;
>   		data.non_big_joiner_output_count = 0;
>   		data.combined_output_count = 0;
> @@ -274,7 +295,10 @@ igt_main
>   				data.big_joiner_output[data.big_joiner_output_count++] = output->config.connector->connector_id;
>   				igt_output_override_mode(output, &connector->modes[0]);
>   			} else {
> -				data.non_big_joiner_output[data.non_big_joiner_output_count++] = output->config.connector->connector_id;
> +				if (has_force_joiner_debugfs(data.drm_fd, output)) {
> +					data.force_joiner_supported = true;
> +					data.non_big_joiner_output[data.non_big_joiner_output_count++] = output->config.connector->connector_id;
> +				}
>   			}
>   			data.output_count++;
>   		}
> @@ -297,10 +321,10 @@ igt_main
>   			igt_require_f(data.n_pipes > 1,
>   				      "Minimum 2 pipes required\n");
>   			igt_dynamic_f("single-joiner")
> -				test_single_joiner(&data, data.big_joiner_output_count);
> +				test_single_joiner(&data, data.big_joiner_output_count, false);
>   			if (data.big_joiner_output_count > 1)
>   				igt_dynamic_f("multi-joiner")
> -					test_multi_joiner(&data, data.big_joiner_output_count);
> +					test_multi_joiner(&data, data.big_joiner_output_count, false);
>   
>   	}
>   
> @@ -309,13 +333,58 @@ igt_main
>   		igt_require_f(data.n_pipes > 1, "Minimum of 2 pipes are required\n");
>   		if (data.big_joiner_output_count >= 1)
>   			igt_dynamic_f("big_joiner_on_last_pipe")
> -				tets_big_joiner_on_last_pipe(&data);
> +				test_joiner_on_last_pipe(&data, false);
>   		if (data.big_joiner_output_count > 1)
>   			igt_dynamic_f("invalid_combinations")
> -				test_invalid_modeset_two_joiner(&data, false);
> +				test_invalid_modeset_two_joiner(&data, false, false);
>   		if (data.combined_output_count)
>   			igt_dynamic_f("combined_output")
> -				test_invalid_modeset_two_joiner(&data, true);
> +				test_invalid_modeset_two_joiner(&data, true, false);
> +	}
> +
> +	igt_describe("Verify the basic modeset on big joiner mode on all pipes");
> +	igt_subtest_with_dynamic("basic-force-joiner") {
> +			igt_require_f(data.force_joiner_supported,
> +						 "force joiner not supported on this platform or none of the connected output supports it\n");
> +			igt_require_f(data.non_big_joiner_output_count > 0,
> +				      "No non big joiner output found\n");
> +			igt_require_f(data.n_pipes > 1,
> +				      "Minimum 2 pipes required\n");
> +			igt_dynamic_f("single") {
> +				toggle_force_joiner_on_all_non_big_joiner_outputs(&data, true);
> +				test_single_joiner(&data, data.non_big_joiner_output_count, true);
> +				toggle_force_joiner_on_all_non_big_joiner_outputs(&data, false);
> +
> +			}
> +			if (data.non_big_joiner_output_count > 1) {
> +				igt_dynamic_f("multi") {
> +					toggle_force_joiner_on_all_non_big_joiner_outputs(&data, true);
> +					test_multi_joiner(&data, data.non_big_joiner_output_count, true);
> +					toggle_force_joiner_on_all_non_big_joiner_outputs(&data, false);
> +				}
> +			}
> +	}
> +
> +	igt_subtest_with_dynamic("invalid-modeset-force-joiner") {
> +			igt_require_f(data.force_joiner_supported,
> +						 "force joiner not supported on this platform or none of the connected output supports it\n");
> +		igt_require_f(data.non_big_joiner_output_count > 0, "Non big joiner output not found\n");
> +		igt_require_f(data.n_pipes > 1, "Minimum of 2 pipes are required\n");
> +
> +		if (data.non_big_joiner_output_count >= 1) {
> +			igt_dynamic_f("big_joiner_on_last_pipe") {
> +				toggle_force_joiner_on_all_non_big_joiner_outputs(&data, true);
> +				test_joiner_on_last_pipe(&data, true);
> +				toggle_force_joiner_on_all_non_big_joiner_outputs(&data, false);
> +			}
> +		}
> +		if (data.non_big_joiner_output_count > 1) {
> +			igt_dynamic_f("invalid_combinations") {
> +				toggle_force_joiner_on_all_non_big_joiner_outputs(&data, true);
> +				test_invalid_modeset_two_joiner(&data, true, false);
> +				toggle_force_joiner_on_all_non_big_joiner_outputs(&data, false);
> +			}
> +		}
>   	}
>   
>   	igt_fixture {

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

* Re: [PATCH i-g-t 3/4] lib/igt_kms: add helper to enable/disable force joiner
  2024-03-20 12:53   ` Nautiyal, Ankit K
@ 2024-03-20 13:21     ` Nautiyal, Ankit K
  0 siblings, 0 replies; 22+ messages in thread
From: Nautiyal, Ankit K @ 2024-03-20 13:21 UTC (permalink / raw)
  To: Kunal Joshi, igt-dev; +Cc: Stanislav Lisovskiy, Karthik B S, Bhanuprakash Modem


On 3/20/2024 6:23 PM, Nautiyal, Ankit K wrote:
>
> On 3/10/2024 7:57 PM, Kunal Joshi wrote:
>> add helpers to check whether force joiner debugfs exists
>> and to enable/disable force joiner for a specific connector.
>>
>> Cc: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
>> Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
>> Cc: Karthik B S <karthik.b.s@intel.com>
>> Cc: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
>> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com>
>> ---
>>   lib/igt_kms.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++
>>   lib/igt_kms.h |  2 ++
>>   2 files changed, 61 insertions(+)
>>
>> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
>> index 63c8045c7..9d0cbd329 100644
>> --- a/lib/igt_kms.c
>> +++ b/lib/igt_kms.c
>> @@ -6168,6 +6168,65 @@ bool bigjoiner_mode_found(int drm_fd, 
>> drmModeConnector *connector,
>>       return found;
>>   }
>>   +/**
>> + * Checks if the force big joiner is enabled for a specific connector.
>> + *
>> + * @drmfd The file descriptor of the DRM device.
>> + * @connector_name The name of the connector.
>
> I think we dont need documentation for this, as this is straight 
> forward and just static function which is called from one place.


Looking at it again, it seems we dont need this as separate function, 
just simply read and return the status in the caller.

Regards,

Ankit

>
>> + * Returns:
>> + *  true if status equals enable, false otherwise.
>> + */
>> +static bool igt_check_force_bigjoiner_status(int drmfd, char 
>> *connector_name, bool enable)
>> +{
>> +    char buf[512];
>> +    int debugfs_fd, ret;
>> +
>> +    igt_assert_f(connector_name, "Connector name cannot be NULL\n");
>> +    debugfs_fd = igt_debugfs_connector_dir(drmfd, connector_name, 
>> O_RDONLY);
>> +    igt_assert_f(debugfs_fd >= 0, "Could not open debugfs for 
>> connector %s\n", connector_name);
>> +    ret = igt_debugfs_simple_read(debugfs_fd, 
>> "i915_bigjoiner_force_enable", buf, sizeof(buf));
>> +    close(debugfs_fd);
>> +    igt_assert_f(ret > 0, "Could not read 
>> i915_bigjoiner_force_enable for connector %s\n", connector_name);
>> +    return enable ? strstr(buf, "Bigjoiner enable: 1") :
>> +                    strstr(buf, "Bigjoiner enable: 0");
>> +}
>> +
>> +bool has_force_joiner_debugfs(int drmfd, igt_output_t *output)
>
> Since this helper is expected to be used in other tests, it would be 
> good to have documentation for this.
>
> Also, imho, it would be better to use igt_* for helpers, though we 
> seem to be not following this strictly.
>
>
>> +{
>> +    char buf[512];
>> +    int debugfs_fd, ret;
>> +
>> +    igt_assert_f(output->name, "Connector name cannot be NULL\n");
>> +    debugfs_fd = igt_debugfs_connector_dir(drmfd, output->name, 
>> O_RDONLY);
>> +    igt_assert_f(debugfs_fd >= 0, "Could not open debugfs for 
>> connector %s\n", output->name);
>
> I think we should not assert here, this will fail for platforms that 
> do not support bigjoiner. Perhaps returning false will be sufficient.
>
>
> Regards,
>
> Ankit
>
>> +    ret = igt_debugfs_simple_read(debugfs_fd, 
>> "i915_bigjoiner_force_enable", buf, sizeof(buf));
>> +    close(debugfs_fd);
>> +    return ret >= 0;
>> +}
>> +
>> +/**
>> + * Forces the enable/disable state of big joiner for a specific 
>> connector.
>> + *
>> + * @drmfd The file descriptor of the DRM device.
>> + * @connector_name The name of the connector.
>> + * @enable The desired state of big joiner (true for enable, false 
>> for disable).
>> + * Returns:
>> + *  true on success, false otherwise.
>> + */
>> +bool igt_force_bigjoiner_enable(int drmfd, char *connector_name, 
>> bool enable)
>> +{
>> +    int debugfs_fd, ret;
>> +
>> +    igt_assert_f(connector_name, "Connector name cannot be NULL\n");
>> +    debugfs_fd = igt_debugfs_connector_dir(drmfd, connector_name, 
>> O_DIRECTORY);
>> +    igt_assert_f(debugfs_fd >= 0, "Could not open debugfs for 
>> connector %s\n", connector_name);
>> +    ret = igt_sysfs_write(debugfs_fd, "i915_bigjoiner_force_enable", 
>> enable ? "1" : "0", 1);
>> +    close(debugfs_fd);
>> +    igt_assert_f(ret > 0, "Could not write 
>> i915_bigjoiner_force_enable for connector %s\n", connector_name);
>> +
>> +    return igt_check_force_bigjoiner_status(drmfd, connector_name, 
>> enable);
>> +}
>> +
>>   /**
>>    * igt_check_bigjoiner_support:
>>    * @display: a pointer to an #igt_display_t structure
>> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
>> index bab8487d3..f13b7fd53 100644
>> --- a/lib/igt_kms.h
>> +++ b/lib/igt_kms.h
>> @@ -1214,6 +1214,8 @@ int igt_get_max_dotclock(int fd);
>>   bool igt_bigjoiner_possible(drmModeModeInfo *mode, int max_dotclock);
>>   bool bigjoiner_mode_found(int drm_fd, drmModeConnector *connector,
>>                 int max_dotclock);
>> +bool has_force_joiner_debugfs(int drmfd, igt_output_t *output);
>> +bool igt_force_bigjoiner_enable(int drmfd, char *connector_name, 
>> bool enable);
>>   bool igt_check_bigjoiner_support(igt_display_t *display);
>>   bool igt_parse_mode_string(const char *mode_string, drmModeModeInfo 
>> *mode);
>>   bool intel_pipe_output_combo_valid(igt_display_t *display);

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

* [PATCH i-g-t 0/4] revamp big joiner test
@ 2024-03-28  8:39 Kunal Joshi
  0 siblings, 0 replies; 22+ messages in thread
From: Kunal Joshi @ 2024-03-28  8:39 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi

modify test to support multiple big joiner outputs
simultaneously, support for ignoring fused pipes and
addition of subtests for testing force joiner support for
which is added by below in kmd.

drm/i915: Add bigjoiner force enable option to debugfs

Kunal Joshi (4):
  lib/igt_kms: move bigjoiner_mode_found to lib
  tests/intel/kms_big_joiner: revamp bigjoiner
  lib/igt_kms: add helper to enable/disable force joiner
  tests/intel/kms_big_joiner: add tests for force joiner

 lib/igt_kms.c                |  79 ++++++
 lib/igt_kms.h                |   4 +
 tests/intel/kms_big_joiner.c | 477 ++++++++++++++++++++---------------
 3 files changed, 359 insertions(+), 201 deletions(-)

-- 
2.25.1


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

* [PATCH i-g-t 0/4] revamp big joiner test
@ 2024-03-25 16:51 Kunal Joshi
  0 siblings, 0 replies; 22+ messages in thread
From: Kunal Joshi @ 2024-03-25 16:51 UTC (permalink / raw)
  To: igt-dev; +Cc: Pranay Samala

From: Pranay Samala <pranay.samala@intel.com>

modify test to support multiple big joiner outputs
simultaneously, support for ignoring fused pipes and
addition of subtests for testing force joiner support for
which is added by below in kmd.

drm/i915: Add bigjoiner force enable option to debugfs

Kunal Joshi (4):
  lib/igt_kms: move bigjoiner_mode_found to lib
  tests/intel/kms_big_joiner: revamp bigjoiner
  lib/igt_kms: add helper to enable/disable force joiner
  tests/intel/kms_big_joiner: add tests for force joiner

 lib/igt_kms.c                |  79 ++++++
 lib/igt_kms.h                |   4 +
 tests/intel/kms_big_joiner.c | 469 ++++++++++++++++++++---------------
 3 files changed, 350 insertions(+), 202 deletions(-)

-- 
2.34.1


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

* [PATCH i-g-t 0/4] revamp big joiner test
@ 2024-03-21 18:28 Kunal Joshi
  0 siblings, 0 replies; 22+ messages in thread
From: Kunal Joshi @ 2024-03-21 18:28 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi

modify test to support multiple big joiner outputs
simultaneously, support for ignoring fused pipes and
addition of subtests for testing force joiner support for
which is added by below in kmd.

drm/i915: Add bigjoiner force enable option to debugfs

Kunal Joshi (4):
  lib/igt_kms: move bigjoiner_mode_found to lib
  tests/intel/kms_big_joiner: revamp bigjoiner
  lib/igt_kms: add helper to enable/disable force joiner
  tests/intel/kms_big_joiner: add tests for force joiner

 lib/igt_kms.c                |  79 ++++++
 lib/igt_kms.h                |   4 +
 tests/intel/kms_big_joiner.c | 486 ++++++++++++++++++++---------------
 3 files changed, 366 insertions(+), 203 deletions(-)

-- 
2.34.1


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

* [PATCH i-g-t 0/4] revamp big joiner test
@ 2024-03-03 17:22 Kunal Joshi
  0 siblings, 0 replies; 22+ messages in thread
From: Kunal Joshi @ 2024-03-03 17:22 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi

big joiner outputs are statically assigned to pipe,
assign dynamically also add support for forcing
joiner, support for forcing joiner was introduced with
below kmd patch

drm/i915: Add bigjoiner force enable option to debugfs

Kunal Joshi (4):
  lib/igt_kms: move bigjoiner_mode_found to lib
  lib/igt_kms: add helpers to enable/disable force joiner
  tests/intel/kms_big_joiner: revamp kms_big_joiner
  tests/intel-ci/fast-feedback: HAX PATCH DO NOT MERGE

 lib/igt_kms.c                         |  73 ++++
 lib/igt_kms.h                         |   4 +
 tests/intel-ci/fast-feedback.testlist |   5 +
 tests/intel/kms_big_joiner.c          | 504 ++++++++++++++------------
 4 files changed, 351 insertions(+), 235 deletions(-)

-- 
2.25.1


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

* [PATCH i-g-t 0/4] revamp big joiner test
@ 2024-03-01  8:25 Kunal Joshi
  0 siblings, 0 replies; 22+ messages in thread
From: Kunal Joshi @ 2024-03-01  8:25 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi

big joiner outputs are statically assigned to pipe,
assign dynamically also add support for forcing
joiner, support for forcing joiner was introduced with
below kmd patch

drm/i915: Add bigjoiner force enable option to debugfs

Kunal Joshi (3):
  lib/igt_kms: move bigjoiner_mode_found to lib
  lib/igt_kms: add helpers to enable/disable force joiner
  tests/intel/kms_big_joiner: revamp kms_big_joiner
  tests/intel-ci/fast-feedback: HAX PATCH DO NOT MERGE

 lib/igt_kms.c                         |  73 ++++
 lib/igt_kms.h                         |   4 +
 tests/intel-ci/fast-feedback.testlist |   5 +
 tests/intel/kms_big_joiner.c          | 507 ++++++++++++++------------
 4 files changed, 355 insertions(+), 234 deletions(-)

-- 
2.25.1


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

* [PATCH i-g-t 0/4] revamp big joiner test
@ 2024-02-29 18:10 Kunal Joshi
  0 siblings, 0 replies; 22+ messages in thread
From: Kunal Joshi @ 2024-02-29 18:10 UTC (permalink / raw)
  To: igt-dev; +Cc: Kunal Joshi

big joiner outputs are statically assigned to pipe,
assign dynamically also add support for forcing
joiner, support for forcing joiner was introduced with
below kmd patch

drm/i915: Add bigjoiner force enable option to debugfs

Kunal Joshi (4):
  lib/igt_kms: move bigjoiner_mode_found to lib
  lib/igt_kms: add helpers to enable/disable force joiner
  tests/intel/kms_big_joiner: revamp kms_big_joiner
  tests/intel-ci/fast-feedback: HAX PATCH DO NOT MERGE

 lib/igt_kms.c                         |  73 ++++
 lib/igt_kms.h                         |   4 +
 tests/intel-ci/fast-feedback.testlist |   5 +
 tests/intel/kms_big_joiner.c          | 503 ++++++++++++++------------
 4 files changed, 351 insertions(+), 234 deletions(-)

-- 
2.25.1


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

end of thread, other threads:[~2024-03-28  8:28 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-03-10 14:27 [PATCH i-g-t 0/4] revamp big joiner test Kunal Joshi
2024-03-10 14:27 ` [PATCH i-g-t 1/4] lib/igt_kms: move bigjoiner_mode_found to lib Kunal Joshi
2024-03-15  4:10   ` Nautiyal, Ankit K
2024-03-18  5:38     ` Joshi, Kunal1
2024-03-20 12:29       ` Nautiyal, Ankit K
2024-03-10 14:27 ` [PATCH i-g-t 2/4] tests/intel/kms_big_joiner: revamp bigjoiner Kunal Joshi
2024-03-14  8:43   ` Nautiyal, Ankit K
2024-03-18  5:26     ` Joshi, Kunal1
2024-03-10 14:27 ` [PATCH i-g-t 3/4] lib/igt_kms: add helper to enable/disable force joiner Kunal Joshi
2024-03-20 12:53   ` Nautiyal, Ankit K
2024-03-20 13:21     ` Nautiyal, Ankit K
2024-03-10 14:27 ` [PATCH i-g-t 4/4] tests/intel/kms_big_joiner: add tests for " Kunal Joshi
2024-03-20 13:17   ` Nautiyal, Ankit K
2024-03-10 14:48 ` ✓ CI.xeBAT: success for revamp big joiner test (rev7) Patchwork
2024-03-10 14:56 ` ✓ Fi.CI.BAT: " Patchwork
2024-03-10 16:26 ` ✗ Fi.CI.IGT: failure " Patchwork
  -- strict thread matches above, loose matches on Subject: below --
2024-03-28  8:39 [PATCH i-g-t 0/4] revamp big joiner test Kunal Joshi
2024-03-25 16:51 Kunal Joshi
2024-03-21 18:28 Kunal Joshi
2024-03-03 17:22 Kunal Joshi
2024-03-01  8:25 Kunal Joshi
2024-02-29 18:10 Kunal Joshi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.