Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH i-g-t] tests/kms_display_modes: Add negative test for extended display
  2023-03-22 17:30 [igt-dev] [PATCH i-g-t] tests/kms_display_modes: Add negative test for extended display Mohammed Thasleem
@ 2022-04-22 16:38 ` Mohammed Thasleem
  2023-04-06 16:39   ` Kamil Konieczny
  2023-04-11 17:32   ` Mohammed Thasleem
  2023-03-22 18:08 ` [igt-dev] ✗ Fi.CI.BUILD: failure for " Patchwork
                   ` (4 subsequent siblings)
  5 siblings, 2 replies; 12+ messages in thread
From: Mohammed Thasleem @ 2022-04-22 16:38 UTC (permalink / raw)
  To: igt-dev

Added negative test to validte ENOSPC and EINVAL when two 4k moniters
connected through MST.

v2: Rebased on tip.

Signed-off-by: Mohammed Thasleem <mohammed.thasleem@intel.com>
---
 tests/kms_display_modes.c | 165 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 165 insertions(+)

diff --git a/tests/kms_display_modes.c b/tests/kms_display_modes.c
index d69c7b931..b23ff79ee 100644
--- a/tests/kms_display_modes.c
+++ b/tests/kms_display_modes.c
@@ -26,6 +26,11 @@
 
 #include "igt.h"
 
+#define HDISPLAY_2K	2560
+#define VDISPLAY_2K	1440
+#define HDISPLAY_4K	3840
+#define VDISPLAY_4K	2160
+
 IGT_TEST_DESCRIPTION("Test Display Modes");
 
 typedef struct {
@@ -34,6 +39,90 @@ typedef struct {
 	int n_pipes;
 } data_t;
 
+static drmModeModeInfo *get_highres_mode(igt_output_t *output)
+{
+	drmModeConnector *connector = output->config.connector;
+	drmModeModeInfo *highest_mode = NULL;
+
+	igt_sort_connector_modes(connector, sort_drm_modes_by_clk_dsc);
+
+	highest_mode = &connector->modes[0];
+
+	return highest_mode;
+}
+
+static drmModeModeInfo *get_2k_mode(igt_output_t *output)
+{
+	drmModeModeInfo *required_mode = NULL;
+	drmModeConnector *connector = output->config.connector;
+	int j;
+
+	for (j = 0; j < connector->count_modes; j++) {
+
+		if (connector->modes[j].vdisplay == VDISPLAY_2K &&
+		    connector->modes[j].hdisplay == HDISPLAY_2K) {
+			required_mode = &connector->modes[j];
+			break;
+		}
+	}
+
+	return required_mode;
+}
+
+static int parse_path_blob(char *blob_data)
+{
+	int connector_id;
+	char *encoder;
+
+	encoder = strtok(blob_data, ":");
+	igt_assert_f(!strcmp(encoder, "mst"), "PATH connector property expected to have 'mst'\n");
+
+	connector_id = atoi(strtok(NULL, "-"));
+
+	return connector_id;
+}
+
+static bool output_is_dp_mst(data_t *data, igt_output_t *output, int i)
+{
+	drmModePropertyBlobPtr path_blob = NULL;
+	uint64_t path_blob_id;
+	drmModeConnector *connector = output->config.connector;
+	struct kmstest_connector_config config;
+	const char *encoder;
+	int connector_id;
+	static int prev_connector_id;
+
+	kmstest_get_connector_config(data->drm_fd, output->config.connector->connector_id,
+				     -1, &config);
+	encoder = kmstest_encoder_type_str(config.encoder->encoder_type);
+
+	if (strcmp(encoder, "DP MST"))
+		return false;
+
+	igt_assert(kmstest_get_property(data->drm_fd, connector->connector_id,
+		   DRM_MODE_OBJECT_CONNECTOR, "PATH", NULL,
+		   &path_blob_id, NULL));
+
+	igt_assert(path_blob = drmModeGetPropertyBlob(data->drm_fd, path_blob_id));
+
+	connector_id = parse_path_blob((char *) path_blob->data);
+
+	/*
+	 * Discarding outputs of other DP MST topology.
+	 * Testing only on outputs on the topology we got previously
+	 */
+	if (i == 0) {
+		prev_connector_id = connector_id;
+	} else {
+		if (connector_id != prev_connector_id)
+			return false;
+	}
+
+	drmModeFreePropertyBlob(path_blob);
+
+	return true;
+}
+
 static void run_extendedmode_basic(data_t *data,
 				   enum pipe pipe1, igt_output_t *output1,
 				   enum pipe pipe2, igt_output_t *output2)
@@ -173,8 +262,69 @@ static void run_extendedmode_test(data_t *data) {
 	}
 }
 
+static void run_extendedmode_negative(data_t *data, int pipe1, int pipe2)
+{
+	struct igt_fb fbs[2];
+	drmModeModeInfo *mode_mst[2];
+	igt_output_t *output, *mst_output[2];
+	igt_display_t *display = &data->display;
+	igt_plane_t *plane[2];
+	int count = 0, dp_mst_outputs = 0, ret;
+
+	igt_display_reset(display);
+
+	for_each_connected_output(display, output) {
+		mst_output[count++] = output;
+		if (output_is_dp_mst(data, output, dp_mst_outputs))
+			dp_mst_outputs++;
+
+		if (dp_mst_outputs > 1)
+			break;
+	}
+
+	igt_assert_f(dp_mst_outputs > 1, "MST not found more then one\n");
+
+	igt_output_set_pipe(mst_output[0], pipe1);
+	igt_output_set_pipe(mst_output[1], pipe2);
+
+	mode_mst[0] = get_2k_mode(mst_output[0]);
+	mode_mst[1] = get_highres_mode(mst_output[1]);
+
+	igt_create_color_fb(data->drm_fd, mode_mst[0]->hdisplay, mode_mst[0]->vdisplay,
+			    DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR, 1, 0, 0, &fbs[0]);
+	igt_create_color_fb(data->drm_fd, mode_mst[1]->hdisplay, mode_mst[1]->vdisplay,
+			    DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR, 0, 0, 1, &fbs[1]);
+
+	plane[0] = igt_pipe_get_plane_type(&display->pipes[pipe1], DRM_PLANE_TYPE_PRIMARY);
+	plane[1] = igt_pipe_get_plane_type(&display->pipes[pipe2], DRM_PLANE_TYPE_PRIMARY);
+
+	igt_plane_set_fb(plane[0], &fbs[0]);
+	igt_fb_set_size(&fbs[0], plane[0], mode_mst[0]->hdisplay, mode_mst[0]->vdisplay);
+	igt_plane_set_size(plane[0], mode_mst[0]->hdisplay, mode_mst[0]->vdisplay);
+
+	igt_plane_set_fb(plane[1], &fbs[1]);
+	igt_fb_set_size(&fbs[1], plane[1], mode_mst[1]->hdisplay, mode_mst[1]->vdisplay);
+	igt_plane_set_size(plane[1], mode_mst[1]->hdisplay, mode_mst[1]->vdisplay);
+
+	if (mode_mst[0]->hdisplay >= HDISPLAY_2K && mode_mst[0]->vdisplay >= VDISPLAY_2K) {
+		mode_mst[0]->hdisplay = HDISPLAY_4K;
+		mode_mst[0]->vdisplay = VDISPLAY_4K;
+		igt_output_override_mode(mst_output[0], mode_mst[0]);
+	}
+
+	if (mode_mst[1]->hdisplay >= HDISPLAY_4K && mode_mst[1]->vdisplay >= VDISPLAY_4K) {
+		mode_mst[0]->hdisplay = HDISPLAY_4K;
+		mode_mst[0]->vdisplay = VDISPLAY_4K;
+		igt_output_override_mode(mst_output[1], mode_mst[1]);
+	}
+	ret = igt_display_try_commit2(display, COMMIT_ATOMIC);
+	igt_assert(ret != 0 && dp_mst_outputs > 1 && (ENOSPC || EINVAL));
+
+}
+
 igt_main
 {
+	enum pipe pipe1, pipe2;
 	data_t data;
 
 	igt_fixture {
@@ -188,6 +338,21 @@ igt_main
 	igt_subtest_with_dynamic("extended-mode-basic")
 		run_extendedmode_test(&data);
 
+	igt_describe("Negative test for validating display extended mode with a pair of connected "
+		     "4k displays");
+	igt_subtest_with_dynamic("extended-mode-negative") {
+		for_each_pipe(&data.display, pipe1) {
+			for_each_pipe(&data.display, pipe2) {
+				if (pipe1 == pipe2)
+					continue;
+
+				igt_dynamic_f("pipe-%s%s", kmstest_pipe_name(pipe1),
+					      kmstest_pipe_name(pipe2))
+					run_extendedmode_negative(&data, pipe1, pipe2);
+			}
+		}
+	}
+
 	igt_fixture {
 		igt_display_fini(&data.display);
 	}
-- 
2.25.1

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

* [igt-dev] [PATCH i-g-t] tests/kms_display_modes: Add negative test for extended display
@ 2023-03-22 17:30 Mohammed Thasleem
  2022-04-22 16:38 ` Mohammed Thasleem
                   ` (5 more replies)
  0 siblings, 6 replies; 12+ messages in thread
From: Mohammed Thasleem @ 2023-03-22 17:30 UTC (permalink / raw)
  To: igt-dev

Added negative test to validte ENOSPC and EINVAL when two 4k moniters
connected through MST.

Signed-off-by: Mohammed Thasleem <mohammed.thasleem@intel.com>
---
 tests/kms_display_modes.c | 159 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 159 insertions(+)

diff --git a/tests/kms_display_modes.c b/tests/kms_display_modes.c
index e4191811e..c5a2aa47e 100644
--- a/tests/kms_display_modes.c
+++ b/tests/kms_display_modes.c
@@ -26,6 +26,11 @@
 
 #include "igt.h"
 
+#define HDISPLAY_2K     2560
+#define VDISPLAY_2K     1440
+#define HDISPLAY_4K     3840
+#define VDISPLAY_4K     2160
+
 IGT_TEST_DESCRIPTION("Test Display Modes");
 
 typedef struct {
@@ -34,6 +39,90 @@ typedef struct {
 	int n_pipes;
 } data_t;
 
+static drmModeModeInfo *get_highres_mode(igt_output_t *output)
+{
+	drmModeConnector *connector = output->config.connector;
+	drmModeModeInfo *highest_mode = NULL;
+
+	igt_sort_connector_modes(connector, sort_drm_modes_by_clk_dsc);
+
+	highest_mode = &connector->modes[0];
+
+	return highest_mode;
+}
+
+static drmModeModeInfo *get_2k_mode(igt_output_t *output)
+{
+	drmModeModeInfo *required_mode = NULL;
+	drmModeConnector *connector = output->config.connector;
+	int j;
+
+	for (j = 0; j < connector->count_modes; j++) {
+
+		if (connector->modes[j].vdisplay == VDISPLAY_2K &&
+		    connector->modes[j].hdisplay == HDISPLAY_2K) {
+			required_mode = &connector->modes[j];
+			break;
+		}
+	}
+
+	return required_mode;
+}
+
+static int parse_path_blob(char *blob_data)
+{
+	int connector_id;
+	char *encoder;
+
+	encoder = strtok(blob_data, ":");
+	igt_assert_f(!strcmp(encoder, "mst"), "PATH connector property expected to have 'mst'\n");
+
+	connector_id = atoi(strtok(NULL, "-"));
+
+	return connector_id;
+}
+
+static bool output_is_dp_mst(data_t *data, igt_output_t *output, int i)
+{
+	drmModePropertyBlobPtr path_blob = NULL;
+	uint64_t path_blob_id;
+	drmModeConnector *connector = output->config.connector;
+	struct kmstest_connector_config config;
+	const char *encoder;
+	int connector_id;
+	static int prev_connector_id;
+
+	kmstest_get_connector_config(data->drm_fd, output->config.connector->connector_id,
+				     -1, &config);
+	encoder = kmstest_encoder_type_str(config.encoder->encoder_type);
+
+	if (strcmp(encoder, "DP MST"))
+		return false;
+
+	igt_assert(kmstest_get_property(data->drm_fd, connector->connector_id,
+		   DRM_MODE_OBJECT_CONNECTOR, "PATH", NULL,
+		   &path_blob_id, NULL));
+
+	igt_assert(path_blob = drmModeGetPropertyBlob(data->drm_fd, path_blob_id));
+
+	connector_id = parse_path_blob((char *) path_blob->data);
+
+	/*
+	 * Discarding outputs of other DP MST topology.
+	 * Testing only on outputs on the topology we got previously
+	 */
+	if (i == 0) {
+		prev_connector_id = connector_id;
+	} else {
+		if (connector_id != prev_connector_id)
+			return false;
+	}
+
+	drmModeFreePropertyBlob(path_blob);
+
+	return true;
+}
+
 static void run_extendedmode_basic(data_t *data, int pipe1, int pipe2)
 {
 	struct igt_fb fb, fbs[2];
@@ -129,6 +218,66 @@ static void run_extendedmode_basic(data_t *data, int pipe1, int pipe2)
 	igt_assert_crc_equal(&crc[1], &ref_crc[1]);
 }
 
+static void run_extendedmode_negative(data_t *data, int pipe1, int pipe2)
+{
+	struct igt_fb fbs[2];
+	drmModeModeInfo *mode_mst[2];
+	igt_output_t *output, *mst_output[2];
+	igt_display_t *display = &data->display;
+	igt_plane_t *plane[2];
+	int count = 0, dp_mst_outputs = 0, ret;
+
+	igt_display_reset(display);
+
+	for_each_connected_output(display, output) {
+		mst_output[count++] = output;
+		if (output_is_dp_mst(data, output, dp_mst_outputs))
+			dp_mst_outputs++;
+
+		if (dp_mst_outputs > 1)
+			break;
+	}
+
+	igt_assert_f(dp_mst_outputs > 1, "MST not found more then one\n");
+
+	igt_output_set_pipe(mst_output[0], pipe1);
+	igt_output_set_pipe(mst_output[1], pipe2);
+
+	mode_mst[0] = get_2k_mode(mst_output[0]);
+	mode_mst[1] = get_highres_mode(mst_output[1]);
+
+	igt_create_color_fb(data->drm_fd, mode_mst[0]->hdisplay, mode_mst[0]->vdisplay,
+			    DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR, 1, 0, 0, &fbs[0]);
+	igt_create_color_fb(data->drm_fd, mode_mst[1]->hdisplay, mode_mst[1]->vdisplay,
+			    DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR, 0, 0, 1, &fbs[1]);
+
+	plane[0] = igt_pipe_get_plane_type(&display->pipes[pipe1], DRM_PLANE_TYPE_PRIMARY);
+	plane[1] = igt_pipe_get_plane_type(&display->pipes[pipe2], DRM_PLANE_TYPE_PRIMARY);
+
+	igt_plane_set_fb(plane[0], &fbs[0]);
+	igt_fb_set_size(&fbs[0], plane[0], mode_mst[0]->hdisplay, mode_mst[0]->vdisplay);
+	igt_plane_set_size(plane[0], mode_mst[0]->hdisplay, mode_mst[0]->vdisplay);
+
+	igt_plane_set_fb(plane[1], &fbs[1]);
+	igt_fb_set_size(&fbs[1], plane[1], mode_mst[1]->hdisplay, mode_mst[1]->vdisplay);
+	igt_plane_set_size(plane[1], mode_mst[1]->hdisplay, mode_mst[1]->vdisplay);
+
+	if (mode_mst[0]->hdisplay >= HDISPLAY_2K && mode_mst[0]->vdisplay >= VDISPLAY_2K) {
+		mode_mst[0]->hdisplay = HDISPLAY_4K;
+		mode_mst[0]->vdisplay = VDISPLAY_4K;
+		igt_output_override_mode(mst_output[0], mode_mst[0]);
+	}
+
+	if (mode_mst[1]->hdisplay >= HDISPLAY_4K && mode_mst[1]->vdisplay >= VDISPLAY_4K) {
+		mode_mst[0]->hdisplay = HDISPLAY_4K;
+		mode_mst[0]->vdisplay = VDISPLAY_4K;
+		igt_output_override_mode(mst_output[1], mode_mst[1]);
+	}
+	ret = igt_display_try_commit2(display, COMMIT_ATOMIC);
+	igt_assert(ret != 0 && dp_mst_outputs > 1 && (ENOSPC || EINVAL));
+
+}
+
 igt_main
 {
 	data_t data;
@@ -167,6 +316,16 @@ igt_main
 		}
 	}
 
+	igt_describe("Negative test for validating display extended mode with a pair of connected "
+		     "4k displays");
+	igt_subtest_with_dynamic("extended-mode-negative") {
+		for (i = 0; i < data.n_pipes - 1; i++) {
+			igt_dynamic_f("pipe-%s%s", kmstest_pipe_name(pipe[i]),
+					kmstest_pipe_name(pipe[i+1]));
+			run_extendedmode_negative(&data, pipe[i], pipe[i+1]);
+		}
+	}
+
 	igt_fixture {
 		igt_display_fini(&data.display);
 	}
-- 
2.25.1

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

* [igt-dev] ✗ Fi.CI.BUILD: failure for tests/kms_display_modes: Add negative test for extended display
  2023-03-22 17:30 [igt-dev] [PATCH i-g-t] tests/kms_display_modes: Add negative test for extended display Mohammed Thasleem
  2022-04-22 16:38 ` Mohammed Thasleem
@ 2023-03-22 18:08 ` Patchwork
  2023-04-04 11:11 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_display_modes: Add negative test for extended display (rev2) Patchwork
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2023-03-22 18:08 UTC (permalink / raw)
  To: Mohammed Thasleem; +Cc: igt-dev

== Series Details ==

Series: tests/kms_display_modes: Add negative test for extended display
URL   : https://patchwork.freedesktop.org/series/115522/
State : failure

== Summary ==

Applying: tests/kms_display_modes: Add negative test for extended display
Using index info to reconstruct a base tree...
M	tests/kms_display_modes.c
Falling back to patching base and 3-way merge...
Auto-merging tests/kms_display_modes.c
CONFLICT (content): Merge conflict in tests/kms_display_modes.c
Patch failed at 0001 tests/kms_display_modes: Add negative test for extended display
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".


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

* [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_display_modes: Add negative test for extended display (rev2)
  2023-03-22 17:30 [igt-dev] [PATCH i-g-t] tests/kms_display_modes: Add negative test for extended display Mohammed Thasleem
  2022-04-22 16:38 ` Mohammed Thasleem
  2023-03-22 18:08 ` [igt-dev] ✗ Fi.CI.BUILD: failure for " Patchwork
@ 2023-04-04 11:11 ` Patchwork
  2023-04-04 17:48 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2023-04-04 11:11 UTC (permalink / raw)
  To: Mohammed Thasleem; +Cc: igt-dev

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

== Series Details ==

Series: tests/kms_display_modes: Add negative test for extended display (rev2)
URL   : https://patchwork.freedesktop.org/series/115522/
State : success

== Summary ==

CI Bug Log - changes from IGT_7234 -> IGTPW_8749
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (37 -> 36)
------------------------------

  Missing    (1): fi-snb-2520m 

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

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

### IGT changes ###

#### Issues hit ####

  * igt@i915_selftest@live@reset:
    - bat-rpls-2:         [PASS][1] -> [ABORT][2] ([i915#4983] / [i915#7913] / [i915#7981])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7234/bat-rpls-2/igt@i915_selftest@live@reset.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/bat-rpls-2/igt@i915_selftest@live@reset.html

  * igt@kms_chamelium_hpd@common-hpd-after-suspend:
    - bat-adln-1:         NOTRUN -> [SKIP][3] ([i915#7828])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/bat-adln-1/igt@kms_chamelium_hpd@common-hpd-after-suspend.html
    - bat-rpls-1:         NOTRUN -> [SKIP][4] ([i915#7828])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/bat-rpls-1/igt@kms_chamelium_hpd@common-hpd-after-suspend.html

  * igt@kms_pipe_crc_basic@suspend-read-crc:
    - bat-rpls-1:         NOTRUN -> [SKIP][5] ([i915#1845])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/bat-rpls-1/igt@kms_pipe_crc_basic@suspend-read-crc.html

  
#### Possible fixes ####

  * igt@dmabuf@all-tests@dma_fence:
    - bat-adln-1:         [DMESG-FAIL][6] ([i915#8143]) -> [PASS][7]
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7234/bat-adln-1/igt@dmabuf@all-tests@dma_fence.html
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/bat-adln-1/igt@dmabuf@all-tests@dma_fence.html

  * igt@dmabuf@all-tests@sanitycheck:
    - bat-adln-1:         [ABORT][8] ([i915#8058] / [i915#8144]) -> [PASS][9]
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7234/bat-adln-1/igt@dmabuf@all-tests@sanitycheck.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/bat-adln-1/igt@dmabuf@all-tests@sanitycheck.html

  * igt@gem_exec_suspend@basic-s3@smem:
    - bat-rpls-1:         [ABORT][10] ([i915#6687] / [i915#7978]) -> [PASS][11]
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7234/bat-rpls-1/igt@gem_exec_suspend@basic-s3@smem.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/bat-rpls-1/igt@gem_exec_suspend@basic-s3@smem.html

  * igt@kms_pipe_crc_basic@nonblocking-crc@pipe-c-dp-1:
    - bat-dg2-8:          [FAIL][12] ([i915#7932]) -> [PASS][13]
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7234/bat-dg2-8/igt@kms_pipe_crc_basic@nonblocking-crc@pipe-c-dp-1.html
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/bat-dg2-8/igt@kms_pipe_crc_basic@nonblocking-crc@pipe-c-dp-1.html

  
#### Warnings ####

  * igt@i915_selftest@live@slpc:
    - bat-rpls-1:         [DMESG-FAIL][14] ([i915#6997]) -> [DMESG-FAIL][15] ([i915#6367] / [i915#7996])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7234/bat-rpls-1/igt@i915_selftest@live@slpc.html
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/bat-rpls-1/igt@i915_selftest@live@slpc.html

  
  [i915#1845]: https://gitlab.freedesktop.org/drm/intel/issues/1845
  [i915#4983]: https://gitlab.freedesktop.org/drm/intel/issues/4983
  [i915#6367]: https://gitlab.freedesktop.org/drm/intel/issues/6367
  [i915#6687]: https://gitlab.freedesktop.org/drm/intel/issues/6687
  [i915#6997]: https://gitlab.freedesktop.org/drm/intel/issues/6997
  [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
  [i915#7913]: https://gitlab.freedesktop.org/drm/intel/issues/7913
  [i915#7932]: https://gitlab.freedesktop.org/drm/intel/issues/7932
  [i915#7978]: https://gitlab.freedesktop.org/drm/intel/issues/7978
  [i915#7981]: https://gitlab.freedesktop.org/drm/intel/issues/7981
  [i915#7996]: https://gitlab.freedesktop.org/drm/intel/issues/7996
  [i915#8058]: https://gitlab.freedesktop.org/drm/intel/issues/8058
  [i915#8143]: https://gitlab.freedesktop.org/drm/intel/issues/8143
  [i915#8144]: https://gitlab.freedesktop.org/drm/intel/issues/8144


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

  * CI: CI-20190529 -> None
  * IGT: IGT_7234 -> IGTPW_8749

  CI-20190529: 20190529
  CI_DRM_12963: 9ce564e0e7b78a777aade183f3deed30b5b83336 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_8749: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/index.html
  IGT_7234: 70802fb59c65164f3587e71376ebed1ed5e91fd1 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git


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

+igt@kms_display_modes@extended-mode-negative

== Logs ==

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

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

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

* [igt-dev] ✓ Fi.CI.IGT: success for tests/kms_display_modes: Add negative test for extended display (rev2)
  2023-03-22 17:30 [igt-dev] [PATCH i-g-t] tests/kms_display_modes: Add negative test for extended display Mohammed Thasleem
                   ` (2 preceding siblings ...)
  2023-04-04 11:11 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_display_modes: Add negative test for extended display (rev2) Patchwork
@ 2023-04-04 17:48 ` Patchwork
  2023-04-11 20:09 ` [igt-dev] ✗ Fi.CI.BAT: failure for tests/kms_display_modes: Add negative test for extended display (rev3) Patchwork
  2023-04-12  8:00 ` [igt-dev] ✗ Fi.CI.BAT: failure for tests/kms_display_modes: Add negative test for extended display (rev4) Patchwork
  5 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2023-04-04 17:48 UTC (permalink / raw)
  To: Mohammed Thasleem; +Cc: igt-dev

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

== Series Details ==

Series: tests/kms_display_modes: Add negative test for extended display (rev2)
URL   : https://patchwork.freedesktop.org/series/115522/
State : success

== Summary ==

CI Bug Log - changes from IGT_7234_full -> IGTPW_8749_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (7 -> 7)
------------------------------

  No changes in participating hosts

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

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

### IGT changes ###

#### Possible regressions ####

  * {igt@kms_display_modes@extended-mode-negative@pipe-ab} (NEW):
    - {shard-rkl}:        NOTRUN -> [FAIL][1] +1 similar issue
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-rkl-7/igt@kms_display_modes@extended-mode-negative@pipe-ab.html

  * {igt@kms_display_modes@extended-mode-negative@pipe-ac} (NEW):
    - shard-glk:          NOTRUN -> [FAIL][2] +5 similar issues
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-glk8/igt@kms_display_modes@extended-mode-negative@pipe-ac.html

  * {igt@kms_display_modes@extended-mode-negative@pipe-ba} (NEW):
    - shard-apl:          NOTRUN -> [FAIL][3] +5 similar issues
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-apl3/igt@kms_display_modes@extended-mode-negative@pipe-ba.html
    - shard-snb:          NOTRUN -> [FAIL][4] +1 similar issue
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-snb4/igt@kms_display_modes@extended-mode-negative@pipe-ba.html

  * {igt@kms_display_modes@extended-mode-negative@pipe-ca} (NEW):
    - {shard-dg1}:        NOTRUN -> [FAIL][5] +11 similar issues
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-dg1-14/igt@kms_display_modes@extended-mode-negative@pipe-ca.html

  
New tests
---------

  New tests have been introduced between IGT_7234_full and IGTPW_8749_full:

### New IGT tests (13) ###

  * igt@kms_display_modes@extended-mode-negative:
    - Statuses :
    - Exec time: [None] s

  * igt@kms_display_modes@extended-mode-negative@pipe-ab:
    - Statuses : 5 fail(s)
    - Exec time: [0.0] s

  * igt@kms_display_modes@extended-mode-negative@pipe-ac:
    - Statuses : 3 fail(s)
    - Exec time: [0.0] s

  * igt@kms_display_modes@extended-mode-negative@pipe-ad:
    - Statuses : 1 fail(s)
    - Exec time: [0.0] s

  * igt@kms_display_modes@extended-mode-negative@pipe-ba:
    - Statuses : 5 fail(s)
    - Exec time: [0.0] s

  * igt@kms_display_modes@extended-mode-negative@pipe-bc:
    - Statuses : 3 fail(s)
    - Exec time: [0.0] s

  * igt@kms_display_modes@extended-mode-negative@pipe-bd:
    - Statuses : 1 fail(s)
    - Exec time: [0.0] s

  * igt@kms_display_modes@extended-mode-negative@pipe-ca:
    - Statuses : 3 fail(s)
    - Exec time: [0.0] s

  * igt@kms_display_modes@extended-mode-negative@pipe-cb:
    - Statuses : 3 fail(s)
    - Exec time: [0.0] s

  * igt@kms_display_modes@extended-mode-negative@pipe-cd:
    - Statuses : 1 fail(s)
    - Exec time: [0.0] s

  * igt@kms_display_modes@extended-mode-negative@pipe-da:
    - Statuses : 1 fail(s)
    - Exec time: [0.0] s

  * igt@kms_display_modes@extended-mode-negative@pipe-db:
    - Statuses : 1 fail(s)
    - Exec time: [0.0] s

  * igt@kms_display_modes@extended-mode-negative@pipe-dc:
    - Statuses : 1 fail(s)
    - Exec time: [0.0] s

  

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_exec_fair@basic-deadline:
    - shard-glk:          [PASS][6] -> [FAIL][7] ([i915#2846])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7234/shard-glk1/igt@gem_exec_fair@basic-deadline.html
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-glk9/igt@gem_exec_fair@basic-deadline.html

  * igt@gem_exec_fair@basic-pace-share@rcs0:
    - shard-apl:          [PASS][8] -> [FAIL][9] ([i915#2842])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7234/shard-apl2/igt@gem_exec_fair@basic-pace-share@rcs0.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-apl6/igt@gem_exec_fair@basic-pace-share@rcs0.html

  * igt@gem_lmem_swapping@heavy-verify-random-ccs:
    - shard-apl:          NOTRUN -> [SKIP][10] ([fdo#109271] / [i915#4613])
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-apl1/igt@gem_lmem_swapping@heavy-verify-random-ccs.html

  * igt@i915_selftest@perf@engine_cs:
    - shard-snb:          [PASS][11] -> [ABORT][12] ([i915#4528])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7234/shard-snb2/igt@i915_selftest@perf@engine_cs.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-snb7/igt@i915_selftest@perf@engine_cs.html

  * igt@kms_ccs@pipe-b-crc-sprite-planes-basic-y_tiled_gen12_mc_ccs:
    - shard-apl:          NOTRUN -> [SKIP][13] ([fdo#109271] / [i915#3886]) +3 similar issues
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-apl2/igt@kms_ccs@pipe-b-crc-sprite-planes-basic-y_tiled_gen12_mc_ccs.html

  * igt@kms_ccs@pipe-c-ccs-on-another-bo-y_tiled_ccs:
    - shard-apl:          NOTRUN -> [SKIP][14] ([fdo#109271]) +47 similar issues
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-apl1/igt@kms_ccs@pipe-c-ccs-on-another-bo-y_tiled_ccs.html

  * igt@kms_content_protection@atomic@pipe-a-dp-1:
    - shard-apl:          NOTRUN -> [TIMEOUT][15] ([i915#7173])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-apl1/igt@kms_content_protection@atomic@pipe-a-dp-1.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size:
    - shard-glk:          [PASS][16] -> [FAIL][17] ([i915#2346])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7234/shard-glk9/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-glk8/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions-varying-size.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@a-dp1:
    - shard-apl:          [PASS][18] -> [FAIL][19] ([i915#79])
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7234/shard-apl4/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-dp1.html
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-apl3/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-dp1.html

  * igt@kms_frontbuffer_tracking@fbc-modesetfrombusy:
    - shard-glk:          [PASS][20] -> [FAIL][21] ([i915#7810])
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7234/shard-glk5/igt@kms_frontbuffer_tracking@fbc-modesetfrombusy.html
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-glk6/igt@kms_frontbuffer_tracking@fbc-modesetfrombusy.html

  
#### Possible fixes ####

  * igt@drm_fdinfo@most-busy-idle-check-all@rcs0:
    - {shard-rkl}:        [FAIL][22] ([i915#7742]) -> [PASS][23]
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7234/shard-rkl-6/igt@drm_fdinfo@most-busy-idle-check-all@rcs0.html
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-rkl-4/igt@drm_fdinfo@most-busy-idle-check-all@rcs0.html

  * igt@gem_exec_fair@basic-none@vecs0:
    - {shard-rkl}:        [FAIL][24] ([i915#2842]) -> [PASS][25] +2 similar issues
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7234/shard-rkl-1/igt@gem_exec_fair@basic-none@vecs0.html
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-rkl-7/igt@gem_exec_fair@basic-none@vecs0.html

  * igt@gem_exec_fair@basic-pace-share@rcs0:
    - {shard-tglu}:       [FAIL][26] ([i915#2842]) -> [PASS][27]
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7234/shard-tglu-8/igt@gem_exec_fair@basic-pace-share@rcs0.html
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-tglu-6/igt@gem_exec_fair@basic-pace-share@rcs0.html

  * igt@gem_exec_fair@basic-pace@vcs0:
    - shard-glk:          [FAIL][28] ([i915#2842]) -> [PASS][29] +1 similar issue
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7234/shard-glk5/igt@gem_exec_fair@basic-pace@vcs0.html
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-glk9/igt@gem_exec_fair@basic-pace@vcs0.html

  * igt@gem_exec_suspend@basic-s4-devices@smem:
    - {shard-tglu}:       [ABORT][30] ([i915#7975]) -> [PASS][31]
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7234/shard-tglu-10/igt@gem_exec_suspend@basic-s4-devices@smem.html
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-tglu-6/igt@gem_exec_suspend@basic-s4-devices@smem.html

  * igt@i915_pm_lpsp@kms-lpsp@kms-lpsp-hdmi-a:
    - {shard-rkl}:        [SKIP][32] ([i915#1937]) -> [PASS][33]
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7234/shard-rkl-3/igt@i915_pm_lpsp@kms-lpsp@kms-lpsp-hdmi-a.html
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-rkl-7/igt@i915_pm_lpsp@kms-lpsp@kms-lpsp-hdmi-a.html

  * igt@kms_cursor_legacy@single-move@pipe-b:
    - {shard-rkl}:        [INCOMPLETE][34] ([i915#8011]) -> [PASS][35] +1 similar issue
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7234/shard-rkl-7/igt@kms_cursor_legacy@single-move@pipe-b.html
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-rkl-4/igt@kms_cursor_legacy@single-move@pipe-b.html

  * igt@kms_flip@2x-plain-flip-fb-recreate-interruptible@bc-hdmi-a1-hdmi-a2:
    - shard-glk:          [FAIL][36] ([i915#2122]) -> [PASS][37]
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7234/shard-glk5/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible@bc-hdmi-a1-hdmi-a2.html
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/shard-glk2/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible@bc-hdmi-a1-hdmi-a2.html

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

  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109274]: https://bugs.freedesktop.org/show_bug.cgi?id=109274
  [fdo#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280
  [fdo#109283]: https://bugs.freedesktop.org/show_bug.cgi?id=109283
  [fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
  [fdo#109302]: https://bugs.freedesktop.org/show_bug.cgi?id=109302
  [fdo#109315]: https://bugs.freedesktop.org/show_bug.cgi?id=109315
  [fdo#110189]: https://bugs.freedesktop.org/show_bug.cgi?id=110189
  [fdo#110723]: https://bugs.freedesktop.org/show_bug.cgi?id=110723
  [fdo#111068]: https://bugs.freedesktop.org/show_bug.cgi?id=111068
  [fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615
  [fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
  [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
  [fdo#112283]: https://bugs.freedesktop.org/show_bug.cgi?id=112283
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#1257]: https://gitlab.freedesktop.org/drm/intel/issues/1257
  [i915#1397]: https://gitlab.freedesktop.org/drm/intel/issues/1397
  [i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825
  [i915#1839]: https://gitlab.freedesktop.org/drm/intel/issues/1839
  [i915#1937]: https://gitlab.freedesktop.org/drm/intel/issues/1937
  [i915#2122]: https://gitlab.freedesktop.org/drm/intel/issues/2122
  [i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346
  [i915#2433]: https://gitlab.freedesktop.org/drm/intel/issues/2433
  [i915#2434]: https://gitlab.freedesktop.org/drm/intel/issues/2434
  [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#2705]: https://gitlab.freedesktop.org/drm/intel/issues/2705
  [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#315]: https://gitlab.freedesktop.org/drm/intel/issues/315
  [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#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#3638]: https://gitlab.freedesktop.org/drm/intel/issues/3638
  [i915#3689]: https://gitlab.freedesktop.org/drm/intel/issues/3689
  [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
  [i915#3734]: https://gitlab.freedesktop.org/drm/intel/issues/3734
  [i915#3742]: https://gitlab.freedesktop.org/drm/intel/issues/3742
  [i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886
  [i915#3938]: https://gitlab.freedesktop.org/drm/intel/issues/3938
  [i915#4036]: https://gitlab.freedesktop.org/drm/intel/issues/4036
  [i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070
  [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#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
  [i915#4528]: https://gitlab.freedesktop.org/drm/intel/issues/4528
  [i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538
  [i915#4579]: https://gitlab.freedesktop.org/drm/intel/issues/4579
  [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#4833]: https://gitlab.freedesktop.org/drm/intel/issues/4833
  [i915#4852]: https://gitlab.freedesktop.org/drm/intel/issues/4852
  [i915#4859]: https://gitlab.freedesktop.org/drm/intel/issues/4859
  [i915#4873]: https://gitlab.freedesktop.org/drm/intel/issues/4873
  [i915#4879]: https://gitlab.freedesktop.org/drm/intel/issues/4879
  [i915#4880]: https://gitlab.freedesktop.org/drm/intel/issues/4880
  [i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176
  [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#5325]: https://gitlab.freedesktop.org/drm/intel/issues/5325
  [i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354
  [i915#5439]: https://gitlab.freedesktop.org/drm/intel/issues/5439
  [i915#5461]: https://gitlab.freedesktop.org/drm/intel/issues/5461
  [i915#5563]: https://gitlab.freedesktop.org/drm/intel/issues/5563
  [i915#5784]: https://gitlab.freedesktop.org/drm/intel/issues/5784
  [i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
  [i915#6334]: https://gitlab.freedesktop.org/drm/intel/issues/6334
  [i915#6433]: https://gitlab.freedesktop.org/drm/intel/issues/6433
  [i915#6524]: https://gitlab.freedesktop.org/drm/intel/issues/6524
  [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
  [i915#6953]: https://gitlab.freedesktop.org/drm/intel/issues/6953
  [i915#7116]: https://gitlab.freedesktop.org/drm/intel/issues/7116
  [i915#7173]: https://gitlab.freedesktop.org/drm/intel/issues/7173
  [i915#7561]: https://gitlab.freedesktop.org/drm/intel/issues/7561
  [i915#7697]: https://gitlab.freedesktop.org/drm/intel/issues/7697
  [i915#7711]: https://gitlab.freedesktop.org/drm/intel/issues/7711
  [i915#7742]: https://gitlab.freedesktop.org/drm/intel/issues/7742
  [i915#7810]: https://gitlab.freedesktop.org/drm/intel/issues/7810
  [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
  [i915#79]: https://gitlab.freedesktop.org/drm/intel/issues/79
  [i915#7975]: https://gitlab.freedesktop.org/drm/intel/issues/7975
  [i915#8011]: https://gitlab.freedesktop.org/drm/intel/issues/8011
  [i915#8150]: https://gitlab.freedesktop.org/drm/intel/issues/8150
  [i915#8155]: https://gitlab.freedesktop.org/drm/intel/issues/8155
  [i915#8211]: https://gitlab.freedesktop.org/drm/intel/issues/8211
  [i915#8308]: https://gitlab.freedesktop.org/drm/intel/issues/8308


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

  * CI: CI-20190529 -> None
  * IGT: IGT_7234 -> IGTPW_8749

  CI-20190529: 20190529
  CI_DRM_12963: 9ce564e0e7b78a777aade183f3deed30b5b83336 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_8749: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8749/index.html
  IGT_7234: 70802fb59c65164f3587e71376ebed1ed5e91fd1 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git

== Logs ==

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

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

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

* Re: [igt-dev] [PATCH i-g-t] tests/kms_display_modes: Add negative test for extended display
  2022-04-22 16:38 ` Mohammed Thasleem
@ 2023-04-06 16:39   ` Kamil Konieczny
  2023-04-11 17:32   ` Mohammed Thasleem
  1 sibling, 0 replies; 12+ messages in thread
From: Kamil Konieczny @ 2023-04-06 16:39 UTC (permalink / raw)
  To: igt-dev

Hi,

On 2022-04-22 at 22:08:07 +0530, Mohammed Thasleem wrote:
> Added negative test to validte ENOSPC and EINVAL when two 4k moniters
> connected through MST.

Could you describe a little more how you test it ? Maybe here
or in comments in code or in igt_describe().

> 
> v2: Rebased on tip.
> 
> Signed-off-by: Mohammed Thasleem <mohammed.thasleem@intel.com>
> ---
>  tests/kms_display_modes.c | 165 ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 165 insertions(+)
> 
> diff --git a/tests/kms_display_modes.c b/tests/kms_display_modes.c
> index d69c7b931..b23ff79ee 100644
> --- a/tests/kms_display_modes.c
> +++ b/tests/kms_display_modes.c
> @@ -26,6 +26,11 @@
>  
>  #include "igt.h"
>  
> +#define HDISPLAY_2K	2560
> +#define VDISPLAY_2K	1440

Put newline here.

> +#define HDISPLAY_4K	3840
> +#define VDISPLAY_4K	2160
> +

What about putting 8K here ?

>  IGT_TEST_DESCRIPTION("Test Display Modes");
>  
>  typedef struct {
> @@ -34,6 +39,90 @@ typedef struct {
>  	int n_pipes;
>  } data_t;
>  
> +static drmModeModeInfo *get_highres_mode(igt_output_t *output)
> +{
> +	drmModeConnector *connector = output->config.connector;
> +	drmModeModeInfo *highest_mode = NULL;
> +
> +	igt_sort_connector_modes(connector, sort_drm_modes_by_clk_dsc);
> +
> +	highest_mode = &connector->modes[0];
> +
> +	return highest_mode;
> +}
> +
> +static drmModeModeInfo *get_2k_mode(igt_output_t *output)
> +{
> +	drmModeModeInfo *required_mode = NULL;
> +	drmModeConnector *connector = output->config.connector;
> +	int j;
> +
> +	for (j = 0; j < connector->count_modes; j++) {
> +
> +		if (connector->modes[j].vdisplay == VDISPLAY_2K &&
> +		    connector->modes[j].hdisplay == HDISPLAY_2K) {
> +			required_mode = &connector->modes[j];
> +			break;
> +		}
> +	}
> +
> +	return required_mode;
> +}
> +
> +static int parse_path_blob(char *blob_data)
> +{
> +	int connector_id;
> +	char *encoder;
> +
> +	encoder = strtok(blob_data, ":");
> +	igt_assert_f(!strcmp(encoder, "mst"), "PATH connector property expected to have 'mst'\n");
> +
> +	connector_id = atoi(strtok(NULL, "-"));
> +
> +	return connector_id;
> +}
> +
> +static bool output_is_dp_mst(data_t *data, igt_output_t *output, int i)
> +{
> +	drmModePropertyBlobPtr path_blob = NULL;
> +	uint64_t path_blob_id;
> +	drmModeConnector *connector = output->config.connector;
> +	struct kmstest_connector_config config;
> +	const char *encoder;
> +	int connector_id;
> +	static int prev_connector_id;
> +
> +	kmstest_get_connector_config(data->drm_fd, output->config.connector->connector_id,
> +				     -1, &config);
> +	encoder = kmstest_encoder_type_str(config.encoder->encoder_type);
> +
> +	if (strcmp(encoder, "DP MST"))
> +		return false;
> +
> +	igt_assert(kmstest_get_property(data->drm_fd, connector->connector_id,
> +		   DRM_MODE_OBJECT_CONNECTOR, "PATH", NULL,
> +		   &path_blob_id, NULL));
> +
> +	igt_assert(path_blob = drmModeGetPropertyBlob(data->drm_fd, path_blob_id));
> +
> +	connector_id = parse_path_blob((char *) path_blob->data);
> +
> +	/*
> +	 * Discarding outputs of other DP MST topology.
> +	 * Testing only on outputs on the topology we got previously
> +	 */
> +	if (i == 0) {
> +		prev_connector_id = connector_id;
> +	} else {
> +		if (connector_id != prev_connector_id)

You should free blob before return, so maybe do this check
just before return ?

> +			return false;
> +	}
> +
> +	drmModeFreePropertyBlob(path_blob);
> +
> +	return true;

imho here:
	return connector_id != prev_connector_id ? false : true;

> +}
> +
>  static void run_extendedmode_basic(data_t *data,
>  				   enum pipe pipe1, igt_output_t *output1,
>  				   enum pipe pipe2, igt_output_t *output2)
> @@ -173,8 +262,69 @@ static void run_extendedmode_test(data_t *data) {
>  	}
>  }
>  
> +static void run_extendedmode_negative(data_t *data, int pipe1, int pipe2)
> +{
> +	struct igt_fb fbs[2];
> +	drmModeModeInfo *mode_mst[2];
> +	igt_output_t *output, *mst_output[2];
> +	igt_display_t *display = &data->display;
> +	igt_plane_t *plane[2];
> +	int count = 0, dp_mst_outputs = 0, ret;
> +
> +	igt_display_reset(display);
> +
> +	for_each_connected_output(display, output) {
> +		mst_output[count++] = output;
> +		if (output_is_dp_mst(data, output, dp_mst_outputs))
> +			dp_mst_outputs++;
> +
> +		if (dp_mst_outputs > 1)
> +			break;
> +	}
> +
> +	igt_assert_f(dp_mst_outputs > 1, "MST not found more then one\n");

Why not igt_require_f here ? You could also write out how many MST
outputs was found.

> +
> +	igt_output_set_pipe(mst_output[0], pipe1);
> +	igt_output_set_pipe(mst_output[1], pipe2);
> +
> +	mode_mst[0] = get_2k_mode(mst_output[0]);
> +	mode_mst[1] = get_highres_mode(mst_output[1]);
> +
> +	igt_create_color_fb(data->drm_fd, mode_mst[0]->hdisplay, mode_mst[0]->vdisplay,
> +			    DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR, 1, 0, 0, &fbs[0]);
> +	igt_create_color_fb(data->drm_fd, mode_mst[1]->hdisplay, mode_mst[1]->vdisplay,
> +			    DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR, 0, 0, 1, &fbs[1]);
> +
> +	plane[0] = igt_pipe_get_plane_type(&display->pipes[pipe1], DRM_PLANE_TYPE_PRIMARY);
> +	plane[1] = igt_pipe_get_plane_type(&display->pipes[pipe2], DRM_PLANE_TYPE_PRIMARY);
> +
> +	igt_plane_set_fb(plane[0], &fbs[0]);
> +	igt_fb_set_size(&fbs[0], plane[0], mode_mst[0]->hdisplay, mode_mst[0]->vdisplay);
> +	igt_plane_set_size(plane[0], mode_mst[0]->hdisplay, mode_mst[0]->vdisplay);
> +
> +	igt_plane_set_fb(plane[1], &fbs[1]);
> +	igt_fb_set_size(&fbs[1], plane[1], mode_mst[1]->hdisplay, mode_mst[1]->vdisplay);
> +	igt_plane_set_size(plane[1], mode_mst[1]->hdisplay, mode_mst[1]->vdisplay);
> +
> +	if (mode_mst[0]->hdisplay >= HDISPLAY_2K && mode_mst[0]->vdisplay >= VDISPLAY_2K) {
> +		mode_mst[0]->hdisplay = HDISPLAY_4K;
> +		mode_mst[0]->vdisplay = VDISPLAY_4K;
> +		igt_output_override_mode(mst_output[0], mode_mst[0]);
> +	}
> +
> +	if (mode_mst[1]->hdisplay >= HDISPLAY_4K && mode_mst[1]->vdisplay >= VDISPLAY_4K) {
> +		mode_mst[0]->hdisplay = HDISPLAY_4K;
------------------------ ^
> +		mode_mst[0]->vdisplay = VDISPLAY_4K;
------------------------ ^
> +		igt_output_override_mode(mst_output[1], mode_mst[1]);
--------------------------------------------------- ^ ---------- ^
This changes mode_mst[0] but override for 1 ?

> +	}
> +	ret = igt_display_try_commit2(display, COMMIT_ATOMIC);
> +	igt_assert(ret != 0 && dp_mst_outputs > 1 && (ENOSPC || EINVAL));
------------------ ^ --------- ^ -------------------- ^
dp_mst_output was checked before, so this should be imho

	igt_assert(ret == ENOSPC || ret == EINVAL);

> +
> +}
> +
>  igt_main
>  {
> +	enum pipe pipe1, pipe2;
>  	data_t data;
>  
>  	igt_fixture {
> @@ -188,6 +338,21 @@ igt_main
>  	igt_subtest_with_dynamic("extended-mode-basic")
>  		run_extendedmode_test(&data);
>  
> +	igt_describe("Negative test for validating display extended mode with a pair of connected "
> +		     "4k displays");

What exactly negative test tries to check ? Setting 4k on 2k ?
Or setting 8k on 4k ? Maybe you should write here about MST
in that case please also write out what is MST (describe this
shortcut). You can also put longer description in comments.

> +	igt_subtest_with_dynamic("extended-mode-negative") {
> +		for_each_pipe(&data.display, pipe1) {
> +			for_each_pipe(&data.display, pipe2) {
> +				if (pipe1 == pipe2)
> +					continue;
> +
> +				igt_dynamic_f("pipe-%s%s", kmstest_pipe_name(pipe1),
----------------------------------------------------- ^
Consider pipe-%s-%s

I hope someone from KMS team will also review it,

Regards,
Kamil

> +					      kmstest_pipe_name(pipe2))
> +					run_extendedmode_negative(&data, pipe1, pipe2);
> +			}
> +		}
> +	}
> +
>  	igt_fixture {
>  		igt_display_fini(&data.display);
>  	}
> -- 
> 2.25.1
> 

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

* [igt-dev] [PATCH i-g-t] tests/kms_display_modes: Add negative test for extended display
  2022-04-22 16:38 ` Mohammed Thasleem
  2023-04-06 16:39   ` Kamil Konieczny
@ 2023-04-11 17:32   ` Mohammed Thasleem
  2023-04-14 11:41     ` B, Jeevan
  1 sibling, 1 reply; 12+ messages in thread
From: Mohammed Thasleem @ 2023-04-11 17:32 UTC (permalink / raw)
  To: igt-dev

Added negative test to validte ENOSPC when two 2k-4k or 4k-4k
moniters connected through MST.
This test added to prvode bandwidth issue in MST config.

Example:
  When two monitors connected through MST, the second monitor
  also tries to use the same mode. So two such modes may not
  fit into the link bandwidth. So, iterate through connected
  outputs & modes and find a combination of modes those fit
  into the link BW.

v2: Rebased on tip.
v3: Code cleanup and updated description.

Signed-off-by: Mohammed Thasleem <mohammed.thasleem@intel.com>
---
 tests/kms_display_modes.c | 161 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 161 insertions(+)

diff --git a/tests/kms_display_modes.c b/tests/kms_display_modes.c
index d69c7b931..1fe1be1ac 100644
--- a/tests/kms_display_modes.c
+++ b/tests/kms_display_modes.c
@@ -26,14 +26,107 @@
 
 #include "igt.h"
 
+#define HDISPLAY_2K	2560
+#define VDISPLAY_2K	1440
+
+#define HDISPLAY_4K	3840
+#define VDISPLAY_4K	2160
+
 IGT_TEST_DESCRIPTION("Test Display Modes");
 
 typedef struct {
 	int drm_fd;
 	igt_display_t display;
+	drmModeModeInfo mode_mst[2];
+	igt_output_t *mst_output[2];
 	int n_pipes;
 } data_t;
 
+static drmModeModeInfo *get_highres_mode(igt_output_t *output)
+{
+	drmModeConnector *connector = output->config.connector;
+	drmModeModeInfo *highest_mode = NULL;
+
+	igt_sort_connector_modes(connector, sort_drm_modes_by_res_dsc);
+
+	highest_mode = &connector->modes[0];
+
+	return highest_mode;
+}
+
+static drmModeModeInfo *get_mode(igt_output_t *output)
+{
+	drmModeModeInfo *required_mode = NULL;
+	drmModeConnector *connector = output->config.connector;
+	int j;
+
+	igt_sort_connector_modes(connector, sort_drm_modes_by_res_dsc);
+	for (j = 0; j < connector->count_modes; j++) {
+
+		if (connector->modes[j].vdisplay <= VDISPLAY_4K &&
+		    connector->modes[j].hdisplay <= HDISPLAY_4K) {
+			required_mode = &connector->modes[j];
+			break;
+		}
+	}
+
+	return required_mode;
+}
+
+static int parse_path_blob(char *blob_data)
+{
+	int connector_id;
+	char *encoder;
+
+	encoder = strtok(blob_data, ":");
+	igt_assert_f(!strcmp(encoder, "mst"), "PATH connector property expected to have 'mst'\n");
+
+	connector_id = atoi(strtok(NULL, "-"));
+
+	return connector_id;
+}
+
+static bool output_is_dp_mst(data_t *data, igt_output_t *output, int i)
+{
+	drmModePropertyBlobPtr path_blob = NULL;
+	uint64_t path_blob_id;
+	drmModeConnector *connector = output->config.connector;
+	struct kmstest_connector_config config;
+	const char *encoder;
+	int connector_id;
+	static int prev_connector_id;
+
+	kmstest_get_connector_config(data->drm_fd, output->config.connector->connector_id,
+				     -1, &config);
+	encoder = kmstest_encoder_type_str(config.encoder->encoder_type);
+
+	if (strcmp(encoder, "DP MST"))
+		return false;
+
+	igt_assert(kmstest_get_property(data->drm_fd, connector->connector_id,
+		   DRM_MODE_OBJECT_CONNECTOR, "PATH", NULL,
+		   &path_blob_id, NULL));
+
+	igt_assert(path_blob = drmModeGetPropertyBlob(data->drm_fd, path_blob_id));
+
+	connector_id = parse_path_blob((char *) path_blob->data);
+
+	drmModeFreePropertyBlob(path_blob);
+
+	/*
+	 * Discarding outputs of other DP MST topology.
+	 * Testing only on outputs on the topology we got previously
+	 */
+	if (i == 0) {
+		prev_connector_id = connector_id;
+	} else {
+		if (connector_id != prev_connector_id)
+			return false;
+	}
+
+	return true;
+}
+
 static void run_extendedmode_basic(data_t *data,
 				   enum pipe pipe1, igt_output_t *output1,
 				   enum pipe pipe2, igt_output_t *output2)
@@ -173,8 +266,46 @@ static void run_extendedmode_test(data_t *data) {
 	}
 }
 
+static void run_extendedmode_negative(data_t *data, int pipe1, int pipe2)
+{
+	struct igt_fb fbs[2];
+	igt_display_t *display = &data->display;
+	igt_plane_t *plane[2];
+	int ret;
+
+	igt_display_reset(display);
+
+	igt_output_set_pipe(data->mst_output[0], pipe1);
+	igt_output_set_pipe(data->mst_output[1], pipe2);
+
+	igt_create_color_fb(data->drm_fd, data->mode_mst[0].hdisplay, data->mode_mst[0].vdisplay,
+			    DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR, 1, 0, 0, &fbs[0]);
+	igt_create_color_fb(data->drm_fd, data->mode_mst[1].hdisplay, data->mode_mst[1].vdisplay,
+			    DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR, 0, 0, 1, &fbs[1]);
+
+	plane[0] = igt_pipe_get_plane_type(&display->pipes[pipe1], DRM_PLANE_TYPE_PRIMARY);
+	plane[1] = igt_pipe_get_plane_type(&display->pipes[pipe2], DRM_PLANE_TYPE_PRIMARY);
+
+	igt_plane_set_fb(plane[0], &fbs[0]);
+	igt_fb_set_size(&fbs[0], plane[0], data->mode_mst[0].hdisplay, data->mode_mst[0].vdisplay);
+	igt_plane_set_size(plane[0], data->mode_mst[0].hdisplay, data->mode_mst[0].vdisplay);
+
+	igt_plane_set_fb(plane[1], &fbs[1]);
+	igt_fb_set_size(&fbs[1], plane[1], data->mode_mst[1].hdisplay, data->mode_mst[1].vdisplay);
+	igt_plane_set_size(plane[1], data->mode_mst[1].hdisplay, data->mode_mst[1].vdisplay);
+
+	igt_output_override_mode(data->mst_output[0], &data->mode_mst[0]);
+	igt_output_override_mode(data->mst_output[1], &data->mode_mst[1]);
+
+	ret = igt_display_try_commit2(display, COMMIT_ATOMIC);
+	igt_assert(ret != 0 && errno == ENOSPC);
+}
+
 igt_main
 {
+	int dp_mst_outputs = 0, count = 0;
+	enum pipe pipe1, pipe2;
+	igt_output_t *output;
 	data_t data;
 
 	igt_fixture {
@@ -182,12 +313,42 @@ igt_main
 		kmstest_set_vt_graphics_mode();
 		igt_display_require(&data.display, data.drm_fd);
 		igt_display_require_output(&data.display);
+
+		for_each_connected_output(&data.display, output) {
+			data.mst_output[count++] = output;
+			if (output_is_dp_mst(&data, output, dp_mst_outputs))
+				dp_mst_outputs++;
+		}
 	}
 
 	igt_describe("Test for validating display extended mode with a pair of connected displays");
 	igt_subtest_with_dynamic("extended-mode-basic")
 		run_extendedmode_test(&data);
 
+	igt_describe("Negative test for validating display extended mode with a pair of connected "
+		     "2k-4k or 4k-4k displays");
+	igt_subtest_with_dynamic("mst-extended-mode-negative") {
+		igt_require_f(dp_mst_outputs > 1, "MST not found more then one\n");
+
+		 memcpy(&data.mode_mst[0], get_mode(data.mst_output[0]), sizeof(drmModeModeInfo));
+		 memcpy(&data.mode_mst[1], get_highres_mode(data.mst_output[1]),
+				 sizeof(drmModeModeInfo));
+
+		igt_require_f((data.mode_mst[1].hdisplay >= HDISPLAY_4K &&
+			       data.mode_mst[1].vdisplay >= VDISPLAY_4K), "4k panel not found\n");
+
+		for_each_pipe(&data.display, pipe1) {
+			for_each_pipe(&data.display, pipe2) {
+				if (pipe1 == pipe2)
+					continue;
+
+				igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe1),
+					      kmstest_pipe_name(pipe2))
+					run_extendedmode_negative(&data, pipe1, pipe2);
+			}
+		}
+	}
+
 	igt_fixture {
 		igt_display_fini(&data.display);
 	}
-- 
2.25.1

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

* [igt-dev] ✗ Fi.CI.BAT: failure for tests/kms_display_modes: Add negative test for extended display (rev3)
  2023-03-22 17:30 [igt-dev] [PATCH i-g-t] tests/kms_display_modes: Add negative test for extended display Mohammed Thasleem
                   ` (3 preceding siblings ...)
  2023-04-04 17:48 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
@ 2023-04-11 20:09 ` Patchwork
  2023-04-12  8:00 ` [igt-dev] ✗ Fi.CI.BAT: failure for tests/kms_display_modes: Add negative test for extended display (rev4) Patchwork
  5 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2023-04-11 20:09 UTC (permalink / raw)
  To: Mohammed Thasleem; +Cc: igt-dev

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

== Series Details ==

Series: tests/kms_display_modes: Add negative test for extended display (rev3)
URL   : https://patchwork.freedesktop.org/series/115522/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_12993 -> IGTPW_8781
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with IGTPW_8781 absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_8781, please notify your bug team 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_8781/index.html

Participating hosts (37 -> 36)
------------------------------

  Missing    (1): fi-snb-2520m 

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@kms_busy@basic@flip:
    - fi-apl-guc:         [PASS][1] -> [ABORT][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12993/fi-apl-guc/igt@kms_busy@basic@flip.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8781/fi-apl-guc/igt@kms_busy@basic@flip.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@i915_selftest@live@gt_heartbeat:
    - fi-kbl-soraka:      [PASS][3] -> [DMESG-FAIL][4] ([i915#5334] / [i915#7872])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12993/fi-kbl-soraka/igt@i915_selftest@live@gt_heartbeat.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8781/fi-kbl-soraka/igt@i915_selftest@live@gt_heartbeat.html

  * igt@i915_selftest@live@gt_lrc:
    - bat-adln-1:         [PASS][5] -> [INCOMPLETE][6] ([i915#4983] / [i915#7609])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12993/bat-adln-1/igt@i915_selftest@live@gt_lrc.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8781/bat-adln-1/igt@i915_selftest@live@gt_lrc.html

  * igt@i915_selftest@live@hangcheck:
    - fi-ivb-3770:        [PASS][7] -> [ABORT][8] ([i915#7913])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12993/fi-ivb-3770/igt@i915_selftest@live@hangcheck.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8781/fi-ivb-3770/igt@i915_selftest@live@hangcheck.html
    - bat-rplp-1:         [PASS][9] -> [INCOMPLETE][10] ([i915#4983] / [i915#7913])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12993/bat-rplp-1/igt@i915_selftest@live@hangcheck.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8781/bat-rplp-1/igt@i915_selftest@live@hangcheck.html

  * igt@i915_selftest@live@reset:
    - bat-rpls-2:         [PASS][11] -> [ABORT][12] ([i915#4983] / [i915#7913])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12993/bat-rpls-2/igt@i915_selftest@live@reset.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8781/bat-rpls-2/igt@i915_selftest@live@reset.html

  * igt@i915_suspend@basic-s3-without-i915:
    - bat-dg2-8:          NOTRUN -> [SKIP][13] ([i915#6645])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8781/bat-dg2-8/igt@i915_suspend@basic-s3-without-i915.html

  * igt@kms_chamelium_hpd@common-hpd-after-suspend:
    - bat-dg2-8:          NOTRUN -> [SKIP][14] ([i915#7828])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8781/bat-dg2-8/igt@kms_chamelium_hpd@common-hpd-after-suspend.html

  * igt@kms_pipe_crc_basic@read-crc:
    - bat-adlp-9:         NOTRUN -> [SKIP][15] ([i915#3546]) +1 similar issue
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8781/bat-adlp-9/igt@kms_pipe_crc_basic@read-crc.html

  
#### Possible fixes ####

  * igt@i915_selftest@live@hangcheck:
    - bat-dg2-8:          [ABORT][16] ([i915#7913] / [i915#7979]) -> [PASS][17]
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12993/bat-dg2-8/igt@i915_selftest@live@hangcheck.html
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8781/bat-dg2-8/igt@i915_selftest@live@hangcheck.html

  * igt@kms_pipe_crc_basic@nonblocking-crc@pipe-c-dp-1:
    - bat-dg2-8:          [FAIL][18] ([i915#7932]) -> [PASS][19]
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_12993/bat-dg2-8/igt@kms_pipe_crc_basic@nonblocking-crc@pipe-c-dp-1.html
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8781/bat-dg2-8/igt@kms_pipe_crc_basic@nonblocking-crc@pipe-c-dp-1.html

  
  [i915#3546]: https://gitlab.freedesktop.org/drm/intel/issues/3546
  [i915#4983]: https://gitlab.freedesktop.org/drm/intel/issues/4983
  [i915#5334]: https://gitlab.freedesktop.org/drm/intel/issues/5334
  [i915#6645]: https://gitlab.freedesktop.org/drm/intel/issues/6645
  [i915#7609]: https://gitlab.freedesktop.org/drm/intel/issues/7609
  [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
  [i915#7872]: https://gitlab.freedesktop.org/drm/intel/issues/7872
  [i915#7913]: https://gitlab.freedesktop.org/drm/intel/issues/7913
  [i915#7932]: https://gitlab.freedesktop.org/drm/intel/issues/7932
  [i915#7979]: https://gitlab.freedesktop.org/drm/intel/issues/7979


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

  * CI: CI-20190529 -> None
  * IGT: IGT_7250 -> IGTPW_8781

  CI-20190529: 20190529
  CI_DRM_12993: 3f6d1a580787c3aa8c9c7f174bdce5b055d6d724 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_8781: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8781/index.html
  IGT_7250: 2da179d399d83a6859a89176d83b7ec1d71fe27a @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git


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

+igt@kms_display_modes@mst-extended-mode-negative
-igt@kms_color@ctm-signed

== Logs ==

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

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

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

* [igt-dev] ✗ Fi.CI.BAT: failure for tests/kms_display_modes: Add negative test for extended display (rev4)
  2023-03-22 17:30 [igt-dev] [PATCH i-g-t] tests/kms_display_modes: Add negative test for extended display Mohammed Thasleem
                   ` (4 preceding siblings ...)
  2023-04-11 20:09 ` [igt-dev] ✗ Fi.CI.BAT: failure for tests/kms_display_modes: Add negative test for extended display (rev3) Patchwork
@ 2023-04-12  8:00 ` Patchwork
  5 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2023-04-12  8:00 UTC (permalink / raw)
  To: Mohammed Thasleem; +Cc: igt-dev

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

== Series Details ==

Series: tests/kms_display_modes: Add negative test for extended display (rev4)
URL   : https://patchwork.freedesktop.org/series/115522/
State : failure

== Summary ==

CI Bug Log - changes from IGT_7251 -> IGTPW_8785
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with IGTPW_8785 absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_8785, please notify your bug team 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_8785/index.html

Participating hosts (36 -> 36)
------------------------------

  Additional (1): fi-kbl-soraka 
  Missing    (1): fi-snb-2520m 

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@i915_suspend@basic-s2idle-without-i915:
    - fi-ilk-650:         [PASS][1] -> [ABORT][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7251/fi-ilk-650/igt@i915_suspend@basic-s2idle-without-i915.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8785/fi-ilk-650/igt@i915_suspend@basic-s2idle-without-i915.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_exec_suspend@basic-s3@smem:
    - bat-rpls-1:         NOTRUN -> [ABORT][3] ([i915#6687] / [i915#7978])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8785/bat-rpls-1/igt@gem_exec_suspend@basic-s3@smem.html

  * igt@gem_huc_copy@huc-copy:
    - fi-kbl-soraka:      NOTRUN -> [SKIP][4] ([fdo#109271] / [i915#2190])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8785/fi-kbl-soraka/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@basic:
    - fi-kbl-soraka:      NOTRUN -> [SKIP][5] ([fdo#109271] / [i915#4613]) +3 similar issues
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8785/fi-kbl-soraka/igt@gem_lmem_swapping@basic.html

  * igt@i915_selftest@live@gt_pm:
    - fi-kbl-soraka:      NOTRUN -> [DMESG-FAIL][6] ([i915#1886])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8785/fi-kbl-soraka/igt@i915_selftest@live@gt_pm.html

  * igt@kms_chamelium_frames@hdmi-crc-fast:
    - fi-kbl-soraka:      NOTRUN -> [SKIP][7] ([fdo#109271]) +16 similar issues
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8785/fi-kbl-soraka/igt@kms_chamelium_frames@hdmi-crc-fast.html

  * igt@kms_pipe_crc_basic@nonblocking-crc@pipe-d-dp-1:
    - bat-dg2-8:          [PASS][8] -> [FAIL][9] ([i915#7932])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7251/bat-dg2-8/igt@kms_pipe_crc_basic@nonblocking-crc@pipe-d-dp-1.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8785/bat-dg2-8/igt@kms_pipe_crc_basic@nonblocking-crc@pipe-d-dp-1.html

  
#### Possible fixes ####

  * igt@i915_selftest@live@gt_lrc:
    - bat-rpls-1:         [INCOMPLETE][10] ([i915#4983]) -> [PASS][11]
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7251/bat-rpls-1/igt@i915_selftest@live@gt_lrc.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8785/bat-rpls-1/igt@i915_selftest@live@gt_lrc.html

  * igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence@pipe-d-dp-1:
    - bat-dg2-8:          [FAIL][12] ([i915#7932]) -> [PASS][13]
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7251/bat-dg2-8/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence@pipe-d-dp-1.html
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8785/bat-dg2-8/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence@pipe-d-dp-1.html

  
#### Warnings ####

  * igt@i915_selftest@live@slpc:
    - bat-rpls-2:         [DMESG-FAIL][14] ([i915#6367] / [i915#7913] / [i915#7996]) -> [DMESG-FAIL][15] ([i915#6997] / [i915#7913])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_7251/bat-rpls-2/igt@i915_selftest@live@slpc.html
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8785/bat-rpls-2/igt@i915_selftest@live@slpc.html

  
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [i915#1886]: https://gitlab.freedesktop.org/drm/intel/issues/1886
  [i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#4983]: https://gitlab.freedesktop.org/drm/intel/issues/4983
  [i915#6367]: https://gitlab.freedesktop.org/drm/intel/issues/6367
  [i915#6687]: https://gitlab.freedesktop.org/drm/intel/issues/6687
  [i915#6997]: https://gitlab.freedesktop.org/drm/intel/issues/6997
  [i915#7913]: https://gitlab.freedesktop.org/drm/intel/issues/7913
  [i915#7932]: https://gitlab.freedesktop.org/drm/intel/issues/7932
  [i915#7978]: https://gitlab.freedesktop.org/drm/intel/issues/7978
  [i915#7996]: https://gitlab.freedesktop.org/drm/intel/issues/7996


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

  * CI: CI-20190529 -> None
  * IGT: IGT_7251 -> IGTPW_8785

  CI-20190529: 20190529
  CI_DRM_12993: 3f6d1a580787c3aa8c9c7f174bdce5b055d6d724 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_8785: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8785/index.html
  IGT_7251: 55fa959aad79b3771350a801c1c2dbd4e5034102 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git


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

+igt@kms_display_modes@mst-extended-mode-negative

== Logs ==

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

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

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

* Re: [igt-dev] [PATCH i-g-t] tests/kms_display_modes: Add negative test for extended display
  2023-04-11 17:32   ` Mohammed Thasleem
@ 2023-04-14 11:41     ` B, Jeevan
  0 siblings, 0 replies; 12+ messages in thread
From: B, Jeevan @ 2023-04-14 11:41 UTC (permalink / raw)
  To: Thasleem, Mohammed, igt-dev@lists.freedesktop.org

> -----Original Message-----
> From: igt-dev <igt-dev-bounces@lists.freedesktop.org> On Behalf Of
> Mohammed Thasleem
> Sent: Tuesday, April 11, 2023 11:03 PM
> To: igt-dev@lists.freedesktop.org
> Subject: [igt-dev] [PATCH i-g-t] tests/kms_display_modes: Add negative test for
> extended display
> 
> Added negative test to validte ENOSPC when two 2k-4k or 4k-4k moniters
> connected through MST.
> This test added to prvode bandwidth issue in MST config.
> 
> Example:
>   When two monitors connected through MST, the second monitor
>   also tries to use the same mode. So two such modes may not
>   fit into the link bandwidth. So, iterate through connected
>   outputs & modes and find a combination of modes those fit
>   into the link BW.
> 
> v2: Rebased on tip.
> v3: Code cleanup and updated description.
> 
> Signed-off-by: Mohammed Thasleem <mohammed.thasleem@intel.com>
> ---
>  tests/kms_display_modes.c | 161
> ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 161 insertions(+)
> 
> diff --git a/tests/kms_display_modes.c b/tests/kms_display_modes.c index
> d69c7b931..1fe1be1ac 100644
> --- a/tests/kms_display_modes.c
> +++ b/tests/kms_display_modes.c
> @@ -26,14 +26,107 @@
> 
>  #include "igt.h"
> 
> +#define HDISPLAY_2K	2560
> +#define VDISPLAY_2K	1440
> +
> +#define HDISPLAY_4K	3840
> +#define VDISPLAY_4K	2160
> +
>  IGT_TEST_DESCRIPTION("Test Display Modes");
> 
>  typedef struct {
>  	int drm_fd;
>  	igt_display_t display;
> +	drmModeModeInfo mode_mst[2];
> +	igt_output_t *mst_output[2];
>  	int n_pipes;
>  } data_t;
> 

Add comments to describe the function. 
> +static drmModeModeInfo *get_highres_mode(igt_output_t *output) {
> +	drmModeConnector *connector = output->config.connector;
> +	drmModeModeInfo *highest_mode = NULL;
> +
> +	igt_sort_connector_modes(connector, sort_drm_modes_by_res_dsc);
> +
> +	highest_mode = &connector->modes[0];
> +
> +	return highest_mode;
> +}
> +
Same here, Also check for formatting of code its not consistent.  
> +static drmModeModeInfo *get_mode(igt_output_t *output) {
> +	drmModeModeInfo *required_mode = NULL;
> +	drmModeConnector *connector = output->config.connector;
> +	int j;
> +
> +	igt_sort_connector_modes(connector, sort_drm_modes_by_res_dsc);
> +	for (j = 0; j < connector->count_modes; j++) {
> +
> +		if (connector->modes[j].vdisplay <= VDISPLAY_4K &&
> +		    connector->modes[j].hdisplay <= HDISPLAY_4K) {
> +			required_mode = &connector->modes[j];
> +			break;
> +		}
> +	}
> +
> +	return required_mode;
> +}
> +

Error handling is not done if blob property is not found. 
> +static int parse_path_blob(char *blob_data) {
> +	int connector_id;
> +	char *encoder;
> +
> +	encoder = strtok(blob_data, ":");
> +	igt_assert_f(!strcmp(encoder, "mst"), "PATH connector property
> +expected to have 'mst'\n");
> +
> +	connector_id = atoi(strtok(NULL, "-"));
> +
> +	return connector_id;
> +}
> +
> +static bool output_is_dp_mst(data_t *data, igt_output_t *output, int i)
> +{
> +	drmModePropertyBlobPtr path_blob = NULL;
> +	uint64_t path_blob_id;
> +	drmModeConnector *connector = output->config.connector;
> +	struct kmstest_connector_config config;
> +	const char *encoder;
> +	int connector_id;
> +	static int prev_connector_id;
> +
> +	kmstest_get_connector_config(data->drm_fd, output-
> >config.connector->connector_id,
> +				     -1, &config);
> +	encoder = kmstest_encoder_type_str(config.encoder->encoder_type);
> +
> +	if (strcmp(encoder, "DP MST"))
> +		return false;
> +
> +	igt_assert(kmstest_get_property(data->drm_fd, connector-
> >connector_id,
> +		   DRM_MODE_OBJECT_CONNECTOR, "PATH", NULL,
> +		   &path_blob_id, NULL));
> +
> +	igt_assert(path_blob = drmModeGetPropertyBlob(data->drm_fd,
> +path_blob_id));
> +
> +	connector_id = parse_path_blob((char *) path_blob->data);
> +
> +	drmModeFreePropertyBlob(path_blob);
> +
> +	/*
> +	 * Discarding outputs of other DP MST topology.
> +	 * Testing only on outputs on the topology we got previously
> +	 */
> +	if (i == 0) {
> +		prev_connector_id = connector_id;
> +	} else {
> +		if (connector_id != prev_connector_id)
> +			return false;
> +	}
> +
> +	return true;
> +}
> +
>  static void run_extendedmode_basic(data_t *data,
>  				   enum pipe pipe1, igt_output_t *output1,
>  				   enum pipe pipe2, igt_output_t *output2) @@
> -173,8 +266,46 @@ static void run_extendedmode_test(data_t *data) {
>  	}
>  }
> 
> +static void run_extendedmode_negative(data_t *data, int pipe1, int
> +pipe2) {
> +	struct igt_fb fbs[2];
> +	igt_display_t *display = &data->display;
> +	igt_plane_t *plane[2];
> +	int ret;
> +
> +	igt_display_reset(display);
> +
> +	igt_output_set_pipe(data->mst_output[0], pipe1);
> +	igt_output_set_pipe(data->mst_output[1], pipe2);
> +
> +	igt_create_color_fb(data->drm_fd, data->mode_mst[0].hdisplay, data-
> >mode_mst[0].vdisplay,
> +			    DRM_FORMAT_XRGB8888,
> DRM_FORMAT_MOD_LINEAR, 1, 0, 0, &fbs[0]);
> +	igt_create_color_fb(data->drm_fd, data->mode_mst[1].hdisplay, data-
> >mode_mst[1].vdisplay,
> +			    DRM_FORMAT_XRGB8888,
> DRM_FORMAT_MOD_LINEAR, 0, 0, 1, &fbs[1]);
> +
> +	plane[0] = igt_pipe_get_plane_type(&display->pipes[pipe1],
> DRM_PLANE_TYPE_PRIMARY);
> +	plane[1] = igt_pipe_get_plane_type(&display->pipes[pipe2],
> +DRM_PLANE_TYPE_PRIMARY);
> +
> +	igt_plane_set_fb(plane[0], &fbs[0]);
> +	igt_fb_set_size(&fbs[0], plane[0], data->mode_mst[0].hdisplay, data-
> >mode_mst[0].vdisplay);
> +	igt_plane_set_size(plane[0], data->mode_mst[0].hdisplay,
> +data->mode_mst[0].vdisplay);
> +
> +	igt_plane_set_fb(plane[1], &fbs[1]);
> +	igt_fb_set_size(&fbs[1], plane[1], data->mode_mst[1].hdisplay, data-
> >mode_mst[1].vdisplay);
> +	igt_plane_set_size(plane[1], data->mode_mst[1].hdisplay,
> +data->mode_mst[1].vdisplay);
> +
> +	igt_output_override_mode(data->mst_output[0], &data-
> >mode_mst[0]);
> +	igt_output_override_mode(data->mst_output[1], &data-
> >mode_mst[1]);
> +
> +	ret = igt_display_try_commit2(display, COMMIT_ATOMIC);
> +	igt_assert(ret != 0 && errno == ENOSPC); }
> +
>  igt_main
>  {
> +	int dp_mst_outputs = 0, count = 0;
> +	enum pipe pipe1, pipe2;
> +	igt_output_t *output;
>  	data_t data;
> 
>  	igt_fixture {
> @@ -182,12 +313,42 @@ igt_main
>  		kmstest_set_vt_graphics_mode();
>  		igt_display_require(&data.display, data.drm_fd);
>  		igt_display_require_output(&data.display);
> +
> +		for_each_connected_output(&data.display, output) {
> +			data.mst_output[count++] = output;
> +			if (output_is_dp_mst(&data, output, dp_mst_outputs))
> +				dp_mst_outputs++;
> +		}
>  	}
> 
>  	igt_describe("Test for validating display extended mode with a pair of
> connected displays");
>  	igt_subtest_with_dynamic("extended-mode-basic")
>  		run_extendedmode_test(&data);
> 
> +	igt_describe("Negative test for validating display extended mode with a
> pair of connected "
> +		     "2k-4k or 4k-4k displays");
> +	igt_subtest_with_dynamic("mst-extended-mode-negative") {
> +		igt_require_f(dp_mst_outputs > 1, "MST not found more then
> one\n");
> +
> +		 memcpy(&data.mode_mst[0], get_mode(data.mst_output[0]),
> sizeof(drmModeModeInfo));
> +		 memcpy(&data.mode_mst[1],
> get_highres_mode(data.mst_output[1]),
> +				 sizeof(drmModeModeInfo));
> +
> +		igt_require_f((data.mode_mst[1].hdisplay >= HDISPLAY_4K &&
> +			       data.mode_mst[1].vdisplay >= VDISPLAY_4K), "4k
> panel not
> +found\n");
> +
> +		for_each_pipe(&data.display, pipe1) {
> +			for_each_pipe(&data.display, pipe2) {
> +				if (pipe1 == pipe2)
> +					continue;
> +
> +				igt_dynamic_f("pipe-%s-%s",
> kmstest_pipe_name(pipe1),
> +					      kmstest_pipe_name(pipe2))
> +					run_extendedmode_negative(&data,
> pipe1, pipe2);
> +			}
> +		}
> +	}
> +
>  	igt_fixture {
>  		igt_display_fini(&data.display);
>  	}
> --
> 2.25.1

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

* [igt-dev] [PATCH i-g-t] tests/kms_display_modes: Add negative test for extended display
@ 2023-04-18  9:01 Mohammed Thasleem
  2023-04-19  7:17 ` B, Jeevan
  0 siblings, 1 reply; 12+ messages in thread
From: Mohammed Thasleem @ 2023-04-18  9:01 UTC (permalink / raw)
  To: igt-dev

Added negative test to validte ENOSPC when two 2k-4k or 4k-4k
moniters connected through MST.
This test added to prvode bandwidth issue in MST config.

Example:
  When two monitors connected through MST, the second monitor
  also tries to use the same mode. So two such modes may not
  fit into the link bandwidth. So, iterate through connected
  outputs & modes and find a combination of modes those fit
  into the link BW.

v2: Rebased on tip.
v3: -Code cleanup and updated description.
    -Free path_blob before call return. (Kamil)
v4: Updated code formatting and function description. (Jeevan)

Signed-off-by: Mohammed Thasleem <mohammed.thasleem@intel.com>
---
 tests/kms_display_modes.c | 161 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 161 insertions(+)

diff --git a/tests/kms_display_modes.c b/tests/kms_display_modes.c
index d69c7b931..e9b2b22bf 100644
--- a/tests/kms_display_modes.c
+++ b/tests/kms_display_modes.c
@@ -26,14 +26,107 @@
 
 #include "igt.h"
 
+#define HDISPLAY_2K	2560
+#define VDISPLAY_2K	1440
+
+#define HDISPLAY_4K	3840
+#define VDISPLAY_4K	2160
+
 IGT_TEST_DESCRIPTION("Test Display Modes");
 
 typedef struct {
 	int drm_fd;
 	igt_display_t display;
+	drmModeModeInfo mode_mst[2];
+	igt_output_t *mst_output[2];
 	int n_pipes;
 } data_t;
 
+/*Get higher mode supported by panel*/
+static drmModeModeInfo *get_highres_mode(igt_output_t *output)
+{
+	drmModeConnector *connector = output->config.connector;
+	drmModeModeInfo *highest_mode = NULL;
+
+	igt_sort_connector_modes(connector, sort_drm_modes_by_res_dsc);
+	highest_mode = &connector->modes[0];
+
+	return highest_mode;
+}
+
+/*Get the 4k or less then 4k mode of connected panel*/
+static drmModeModeInfo *get_mode(igt_output_t *output)
+{
+	int j;
+	drmModeModeInfo *required_mode = NULL;
+	drmModeConnector *connector = output->config.connector;
+
+	igt_sort_connector_modes(connector, sort_drm_modes_by_res_dsc);
+	for (j = 0; j < connector->count_modes; j++) {
+		if (connector->modes[j].vdisplay <= VDISPLAY_4K &&
+		    connector->modes[j].hdisplay <= HDISPLAY_4K) {
+			required_mode = &connector->modes[j];
+			break;
+		}
+	}
+
+	return required_mode;
+}
+
+static int parse_path_blob(char *blob_data)
+{
+	int connector_id;
+	char *encoder;
+
+	encoder = strtok(blob_data, ":");
+	igt_assert_f(!strcmp(encoder, "mst"), "PATH connector property expected to have 'mst'\n");
+
+	connector_id = atoi(strtok(NULL, "-"));
+
+	return connector_id;
+}
+
+static bool output_is_dp_mst(data_t *data, igt_output_t *output, int i)
+{
+	drmModePropertyBlobPtr path_blob = NULL;
+	uint64_t path_blob_id;
+	drmModeConnector *connector = output->config.connector;
+	struct kmstest_connector_config config;
+	const char *encoder;
+	int connector_id;
+	static int prev_connector_id;
+
+	kmstest_get_connector_config(data->drm_fd, output->config.connector->connector_id,
+				     -1, &config);
+	encoder = kmstest_encoder_type_str(config.encoder->encoder_type);
+
+	if (strcmp(encoder, "DP MST"))
+		return false;
+
+	igt_assert(kmstest_get_property(data->drm_fd, connector->connector_id,
+		   DRM_MODE_OBJECT_CONNECTOR, "PATH", NULL,
+		   &path_blob_id, NULL));
+
+	igt_assert(path_blob = drmModeGetPropertyBlob(data->drm_fd, path_blob_id));
+
+	connector_id = parse_path_blob((char *) path_blob->data);
+
+	drmModeFreePropertyBlob(path_blob);
+
+	/*
+	 * Discarding outputs of other DP MST topology.
+	 * Testing only on outputs on the topology we got previously
+	 */
+	if (i == 0) {
+		prev_connector_id = connector_id;
+	} else {
+		if (connector_id != prev_connector_id)
+			return false;
+	}
+
+	return true;
+}
+
 static void run_extendedmode_basic(data_t *data,
 				   enum pipe pipe1, igt_output_t *output1,
 				   enum pipe pipe2, igt_output_t *output2)
@@ -173,8 +266,46 @@ static void run_extendedmode_test(data_t *data) {
 	}
 }
 
+static void run_extendedmode_negative(data_t *data, int pipe1, int pipe2)
+{
+	struct igt_fb fbs[2];
+	igt_display_t *display = &data->display;
+	igt_plane_t *plane[2];
+	int ret;
+
+	igt_display_reset(display);
+
+	igt_output_set_pipe(data->mst_output[0], pipe1);
+	igt_output_set_pipe(data->mst_output[1], pipe2);
+
+	igt_create_color_fb(data->drm_fd, data->mode_mst[0].hdisplay, data->mode_mst[0].vdisplay,
+			    DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR, 1, 0, 0, &fbs[0]);
+	igt_create_color_fb(data->drm_fd, data->mode_mst[1].hdisplay, data->mode_mst[1].vdisplay,
+			    DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR, 0, 0, 1, &fbs[1]);
+
+	plane[0] = igt_pipe_get_plane_type(&display->pipes[pipe1], DRM_PLANE_TYPE_PRIMARY);
+	plane[1] = igt_pipe_get_plane_type(&display->pipes[pipe2], DRM_PLANE_TYPE_PRIMARY);
+
+	igt_plane_set_fb(plane[0], &fbs[0]);
+	igt_fb_set_size(&fbs[0], plane[0], data->mode_mst[0].hdisplay, data->mode_mst[0].vdisplay);
+	igt_plane_set_size(plane[0], data->mode_mst[0].hdisplay, data->mode_mst[0].vdisplay);
+
+	igt_plane_set_fb(plane[1], &fbs[1]);
+	igt_fb_set_size(&fbs[1], plane[1], data->mode_mst[1].hdisplay, data->mode_mst[1].vdisplay);
+	igt_plane_set_size(plane[1], data->mode_mst[1].hdisplay, data->mode_mst[1].vdisplay);
+
+	igt_output_override_mode(data->mst_output[0], &data->mode_mst[0]);
+	igt_output_override_mode(data->mst_output[1], &data->mode_mst[1]);
+
+	ret = igt_display_try_commit2(display, COMMIT_ATOMIC);
+	igt_assert(ret != 0 && errno == ENOSPC);
+}
+
 igt_main
 {
+	int dp_mst_outputs = 0, count = 0;
+	enum pipe pipe1, pipe2;
+	igt_output_t *output;
 	data_t data;
 
 	igt_fixture {
@@ -182,12 +313,42 @@ igt_main
 		kmstest_set_vt_graphics_mode();
 		igt_display_require(&data.display, data.drm_fd);
 		igt_display_require_output(&data.display);
+
+		for_each_connected_output(&data.display, output) {
+			data.mst_output[count++] = output;
+			if (output_is_dp_mst(&data, output, dp_mst_outputs))
+				dp_mst_outputs++;
+		}
 	}
 
 	igt_describe("Test for validating display extended mode with a pair of connected displays");
 	igt_subtest_with_dynamic("extended-mode-basic")
 		run_extendedmode_test(&data);
 
+	igt_describe("Negative test for validating display extended mode with a pair of connected "
+		     "2k-4k or 4k-4k displays");
+	igt_subtest_with_dynamic("mst-extended-mode-negative") {
+		igt_require_f(dp_mst_outputs > 1, "MST not found more then one\n");
+
+		 memcpy(&data.mode_mst[0], get_mode(data.mst_output[0]), sizeof(drmModeModeInfo));
+		 memcpy(&data.mode_mst[1], get_highres_mode(data.mst_output[1]),
+				 sizeof(drmModeModeInfo));
+
+		igt_require_f((data.mode_mst[1].hdisplay >= HDISPLAY_4K &&
+			       data.mode_mst[1].vdisplay >= VDISPLAY_4K), "4k panel not found\n");
+
+		for_each_pipe(&data.display, pipe1) {
+			for_each_pipe(&data.display, pipe2) {
+				if (pipe1 == pipe2)
+					continue;
+
+				igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe1),
+					      kmstest_pipe_name(pipe2))
+					run_extendedmode_negative(&data, pipe1, pipe2);
+			}
+		}
+	}
+
 	igt_fixture {
 		igt_display_fini(&data.display);
 	}
-- 
2.25.1

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

* Re: [igt-dev] [PATCH i-g-t] tests/kms_display_modes: Add negative test for extended display
  2023-04-18  9:01 [igt-dev] [PATCH i-g-t] tests/kms_display_modes: Add negative test for extended display Mohammed Thasleem
@ 2023-04-19  7:17 ` B, Jeevan
  0 siblings, 0 replies; 12+ messages in thread
From: B, Jeevan @ 2023-04-19  7:17 UTC (permalink / raw)
  To: Thasleem, Mohammed, igt-dev@lists.freedesktop.org



> -----Original Message-----
> From: igt-dev <igt-dev-bounces@lists.freedesktop.org> On Behalf Of
> Mohammed Thasleem
> Sent: Tuesday, April 18, 2023 2:31 PM
> To: igt-dev@lists.freedesktop.org
> Subject: [igt-dev] [PATCH i-g-t] tests/kms_display_modes: Add negative test for
> extended display
> 
> Added negative test to validte ENOSPC when two 2k-4k or 4k-4k moniters
> connected through MST.
> This test added to prvode bandwidth issue in MST config.
> 
> Example:
>   When two monitors connected through MST, the second monitor
>   also tries to use the same mode. So two such modes may not
>   fit into the link bandwidth. So, iterate through connected
>   outputs & modes and find a combination of modes those fit
>   into the link BW.
> 
> v2: Rebased on tip.
> v3: -Code cleanup and updated description.
>     -Free path_blob before call return. (Kamil)
> v4: Updated code formatting and function description. (Jeevan)
> 
> Signed-off-by: Mohammed Thasleem <mohammed.thasleem@intel.com>
LGTM
Reviewed-by: Jeevan B <jeevan.b@intel.com>
> ---
>  tests/kms_display_modes.c | 161
> ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 161 insertions(+)
> 
> diff --git a/tests/kms_display_modes.c b/tests/kms_display_modes.c index
> d69c7b931..e9b2b22bf 100644
> --- a/tests/kms_display_modes.c
> +++ b/tests/kms_display_modes.c
> @@ -26,14 +26,107 @@
> 
>  #include "igt.h"
> 
> +#define HDISPLAY_2K	2560
> +#define VDISPLAY_2K	1440
> +
> +#define HDISPLAY_4K	3840
> +#define VDISPLAY_4K	2160
> +
>  IGT_TEST_DESCRIPTION("Test Display Modes");
> 
>  typedef struct {
>  	int drm_fd;
>  	igt_display_t display;
> +	drmModeModeInfo mode_mst[2];
> +	igt_output_t *mst_output[2];
>  	int n_pipes;
>  } data_t;
> 
> +/*Get higher mode supported by panel*/
> +static drmModeModeInfo *get_highres_mode(igt_output_t *output) {
> +	drmModeConnector *connector = output->config.connector;
> +	drmModeModeInfo *highest_mode = NULL;
> +
> +	igt_sort_connector_modes(connector, sort_drm_modes_by_res_dsc);
> +	highest_mode = &connector->modes[0];
> +
> +	return highest_mode;
> +}
> +
> +/*Get the 4k or less then 4k mode of connected panel*/ static
> +drmModeModeInfo *get_mode(igt_output_t *output) {
> +	int j;
> +	drmModeModeInfo *required_mode = NULL;
> +	drmModeConnector *connector = output->config.connector;
> +
> +	igt_sort_connector_modes(connector, sort_drm_modes_by_res_dsc);
> +	for (j = 0; j < connector->count_modes; j++) {
> +		if (connector->modes[j].vdisplay <= VDISPLAY_4K &&
> +		    connector->modes[j].hdisplay <= HDISPLAY_4K) {
> +			required_mode = &connector->modes[j];
> +			break;
> +		}
> +	}
> +
> +	return required_mode;
> +}
> +
> +static int parse_path_blob(char *blob_data) {
> +	int connector_id;
> +	char *encoder;
> +
> +	encoder = strtok(blob_data, ":");
> +	igt_assert_f(!strcmp(encoder, "mst"), "PATH connector property
> +expected to have 'mst'\n");
> +
> +	connector_id = atoi(strtok(NULL, "-"));
> +
> +	return connector_id;
> +}
> +
> +static bool output_is_dp_mst(data_t *data, igt_output_t *output, int i)
> +{
> +	drmModePropertyBlobPtr path_blob = NULL;
> +	uint64_t path_blob_id;
> +	drmModeConnector *connector = output->config.connector;
> +	struct kmstest_connector_config config;
> +	const char *encoder;
> +	int connector_id;
> +	static int prev_connector_id;
> +
> +	kmstest_get_connector_config(data->drm_fd, output-
> >config.connector->connector_id,
> +				     -1, &config);
> +	encoder = kmstest_encoder_type_str(config.encoder->encoder_type);
> +
> +	if (strcmp(encoder, "DP MST"))
> +		return false;
> +
> +	igt_assert(kmstest_get_property(data->drm_fd, connector-
> >connector_id,
> +		   DRM_MODE_OBJECT_CONNECTOR, "PATH", NULL,
> +		   &path_blob_id, NULL));
> +
> +	igt_assert(path_blob = drmModeGetPropertyBlob(data->drm_fd,
> +path_blob_id));
> +
> +	connector_id = parse_path_blob((char *) path_blob->data);
> +
> +	drmModeFreePropertyBlob(path_blob);
> +
> +	/*
> +	 * Discarding outputs of other DP MST topology.
> +	 * Testing only on outputs on the topology we got previously
> +	 */
> +	if (i == 0) {
> +		prev_connector_id = connector_id;
> +	} else {
> +		if (connector_id != prev_connector_id)
> +			return false;
> +	}
> +
> +	return true;
> +}
> +
>  static void run_extendedmode_basic(data_t *data,
>  				   enum pipe pipe1, igt_output_t *output1,
>  				   enum pipe pipe2, igt_output_t *output2) @@
> -173,8 +266,46 @@ static void run_extendedmode_test(data_t *data) {
>  	}
>  }
> 
> +static void run_extendedmode_negative(data_t *data, int pipe1, int
> +pipe2) {
> +	struct igt_fb fbs[2];
> +	igt_display_t *display = &data->display;
> +	igt_plane_t *plane[2];
> +	int ret;
> +
> +	igt_display_reset(display);
> +
> +	igt_output_set_pipe(data->mst_output[0], pipe1);
> +	igt_output_set_pipe(data->mst_output[1], pipe2);
> +
> +	igt_create_color_fb(data->drm_fd, data->mode_mst[0].hdisplay, data-
> >mode_mst[0].vdisplay,
> +			    DRM_FORMAT_XRGB8888,
> DRM_FORMAT_MOD_LINEAR, 1, 0, 0, &fbs[0]);
> +	igt_create_color_fb(data->drm_fd, data->mode_mst[1].hdisplay, data-
> >mode_mst[1].vdisplay,
> +			    DRM_FORMAT_XRGB8888,
> DRM_FORMAT_MOD_LINEAR, 0, 0, 1, &fbs[1]);
> +
> +	plane[0] = igt_pipe_get_plane_type(&display->pipes[pipe1],
> DRM_PLANE_TYPE_PRIMARY);
> +	plane[1] = igt_pipe_get_plane_type(&display->pipes[pipe2],
> +DRM_PLANE_TYPE_PRIMARY);
> +
> +	igt_plane_set_fb(plane[0], &fbs[0]);
> +	igt_fb_set_size(&fbs[0], plane[0], data->mode_mst[0].hdisplay, data-
> >mode_mst[0].vdisplay);
> +	igt_plane_set_size(plane[0], data->mode_mst[0].hdisplay,
> +data->mode_mst[0].vdisplay);
> +
> +	igt_plane_set_fb(plane[1], &fbs[1]);
> +	igt_fb_set_size(&fbs[1], plane[1], data->mode_mst[1].hdisplay, data-
> >mode_mst[1].vdisplay);
> +	igt_plane_set_size(plane[1], data->mode_mst[1].hdisplay,
> +data->mode_mst[1].vdisplay);
> +
> +	igt_output_override_mode(data->mst_output[0], &data-
> >mode_mst[0]);
> +	igt_output_override_mode(data->mst_output[1], &data-
> >mode_mst[1]);
> +
> +	ret = igt_display_try_commit2(display, COMMIT_ATOMIC);
> +	igt_assert(ret != 0 && errno == ENOSPC); }
> +
>  igt_main
>  {
> +	int dp_mst_outputs = 0, count = 0;
> +	enum pipe pipe1, pipe2;
> +	igt_output_t *output;
>  	data_t data;
> 
>  	igt_fixture {
> @@ -182,12 +313,42 @@ igt_main
>  		kmstest_set_vt_graphics_mode();
>  		igt_display_require(&data.display, data.drm_fd);
>  		igt_display_require_output(&data.display);
> +
> +		for_each_connected_output(&data.display, output) {
> +			data.mst_output[count++] = output;
> +			if (output_is_dp_mst(&data, output, dp_mst_outputs))
> +				dp_mst_outputs++;
> +		}
>  	}
> 
>  	igt_describe("Test for validating display extended mode with a pair of
> connected displays");
>  	igt_subtest_with_dynamic("extended-mode-basic")
>  		run_extendedmode_test(&data);
> 
> +	igt_describe("Negative test for validating display extended mode with a
> pair of connected "
> +		     "2k-4k or 4k-4k displays");
> +	igt_subtest_with_dynamic("mst-extended-mode-negative") {
> +		igt_require_f(dp_mst_outputs > 1, "MST not found more then
> one\n");
> +
> +		 memcpy(&data.mode_mst[0], get_mode(data.mst_output[0]),
> sizeof(drmModeModeInfo));
> +		 memcpy(&data.mode_mst[1],
> get_highres_mode(data.mst_output[1]),
> +				 sizeof(drmModeModeInfo));
> +
> +		igt_require_f((data.mode_mst[1].hdisplay >= HDISPLAY_4K &&
> +			       data.mode_mst[1].vdisplay >= VDISPLAY_4K), "4k
> panel not
> +found\n");
> +
> +		for_each_pipe(&data.display, pipe1) {
> +			for_each_pipe(&data.display, pipe2) {
> +				if (pipe1 == pipe2)
> +					continue;
> +
> +				igt_dynamic_f("pipe-%s-%s",
> kmstest_pipe_name(pipe1),
> +					      kmstest_pipe_name(pipe2))
> +					run_extendedmode_negative(&data,
> pipe1, pipe2);
> +			}
> +		}
> +	}
> +
>  	igt_fixture {
>  		igt_display_fini(&data.display);
>  	}
> --
> 2.25.1

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

end of thread, other threads:[~2023-04-19  7:18 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-22 17:30 [igt-dev] [PATCH i-g-t] tests/kms_display_modes: Add negative test for extended display Mohammed Thasleem
2022-04-22 16:38 ` Mohammed Thasleem
2023-04-06 16:39   ` Kamil Konieczny
2023-04-11 17:32   ` Mohammed Thasleem
2023-04-14 11:41     ` B, Jeevan
2023-03-22 18:08 ` [igt-dev] ✗ Fi.CI.BUILD: failure for " Patchwork
2023-04-04 11:11 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_display_modes: Add negative test for extended display (rev2) Patchwork
2023-04-04 17:48 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2023-04-11 20:09 ` [igt-dev] ✗ Fi.CI.BAT: failure for tests/kms_display_modes: Add negative test for extended display (rev3) Patchwork
2023-04-12  8:00 ` [igt-dev] ✗ Fi.CI.BAT: failure for tests/kms_display_modes: Add negative test for extended display (rev4) Patchwork
  -- strict thread matches above, loose matches on Subject: below --
2023-04-18  9:01 [igt-dev] [PATCH i-g-t] tests/kms_display_modes: Add negative test for extended display Mohammed Thasleem
2023-04-19  7:17 ` B, Jeevan

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