Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH i-g-t 2/2] tests/i915/kms_dsc: Enable validation for VDSC output formats
  2023-05-03 11:40 [igt-dev] [PATCH i-g-t 0/2] Enable VDSC output formats validation Swati Sharma
@ 2023-05-03 11:40 ` Swati Sharma
  2023-05-04  5:40   ` Modem, Bhanuprakash
  0 siblings, 1 reply; 8+ messages in thread
From: Swati Sharma @ 2023-05-03 11:40 UTC (permalink / raw)
  To: igt-dev

Existing i-g-t is extended to enable validation for VDSC output
formats. Output format is selected as per driver policy.For ex:
If a mode is supported in both RGB and YCbCr420 output formats
by the sink, i915 driver policy is to try RGB first and fall
back to YCbCr420, if mode cannot be shown using RGB.

To test DSC output format, a debugfs entry is created to force
this output format. However, before setting debugfs entry, we
have checked capability i.e. output format is supported by both
platform and sink.

Also, each mode doesn't support all output formats; so if both
sink and platform support an output format, we will do a try
commit with each mode till we get a successful commit.

v2: -used is_dsc_ycbcr420_supported() (Ankit)
    -handled try-commit correctly (Ankit)
    -instead of flag use enum for output formats (Ankit)
v3: -instead of global count, pass count as para (Ankit)
    -print output format (Ankit)
v4: -optimized while loop (Jouni)
    -used only try commit (Jouni)
    -fixed get_next_mode() (Jouni)
v5: -made generic test to validate all output formats (Jani N)
v6: -fixed assert (Jouni)
    -if mode == NULL output_format debugfs reset didn't happen, fixed
v7: -indentation fixes (Kamil)
v8: -rebase
    -removed pipe_output_combo_valid() (Bhanu)

Signed-off-by: Swati Sharma <swati2.sharma@intel.com>
Reviewed-by: Jouni Högander <jouni.hogander@intel.com> (v5)
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
 lib/igt_kms.c               |  18 +++++
 lib/igt_kms.h               |   1 +
 tests/i915/kms_dsc.c        | 136 +++++++++++++++++++++++++-----------
 tests/i915/kms_dsc_helper.c |  36 ++++++++++
 tests/i915/kms_dsc_helper.h |   4 ++
 5 files changed, 156 insertions(+), 39 deletions(-)

diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index e085e234..c5484148 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -967,6 +967,24 @@ const char *kmstest_scaling_filter_str(int filter)
 	return find_type_name(scaling_filter_names, filter);
 }
 
+static const struct type_name dsc_output_format_names[] = {
+	{ DSC_FORMAT_RGB, "RGB" },
+	{ DSC_FORMAT_YCBCR420, "YCBCR420" },
+	{ DSC_FORMAT_YCBCR444, "YCBCR444" },
+	{}
+};
+
+/**
+ * kmstest_dsc_output_format_str:
+ * @output_format: DSC_FORMAT_* output format value
+ *
+ * Returns: A string representing the output format @output format.
+ */
+const char *kmstest_dsc_output_format_str(int output_format)
+{
+	return find_type_name(dsc_output_format_names, output_format);
+}
+
 static const struct type_name connector_type_names[] = {
 	{ DRM_MODE_CONNECTOR_Unknown, "Unknown" },
 	{ DRM_MODE_CONNECTOR_VGA, "VGA" },
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 41e041b6..1b6988c1 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -118,6 +118,7 @@ const char *kmstest_encoder_type_str(int type);
 const char *kmstest_connector_status_str(int status);
 const char *kmstest_connector_type_str(int type);
 const char *kmstest_scaling_filter_str(int filter);
+const char *kmstest_dsc_output_format_str(int output_format);
 
 void kmstest_dump_mode(drmModeModeInfo *mode);
 #define MAX_HDISPLAY_PER_PIPE 5120
diff --git a/tests/i915/kms_dsc.c b/tests/i915/kms_dsc.c
index c4dfc925..d441c356 100644
--- a/tests/i915/kms_dsc.c
+++ b/tests/i915/kms_dsc.c
@@ -36,7 +36,8 @@ IGT_TEST_DESCRIPTION("Test to validate display stream compression");
 
 enum dsc_test_type {
 	TEST_DSC_BASIC,
-	TEST_DSC_BPC
+	TEST_DSC_BPC,
+	TEST_DSC_OUTPUT_FORMAT,
 };
 
 typedef struct {
@@ -44,6 +45,7 @@ typedef struct {
 	uint32_t devid;
 	igt_display_t display;
 	struct igt_fb fb_test_pattern;
+	enum dsc_output_format output_format;
 	unsigned int plane_format;
 	igt_output_t *output;
 	int input_bpc;
@@ -51,7 +53,8 @@ typedef struct {
 	enum pipe pipe;
 } data_t;
 
-static int format_list[] =  {DRM_FORMAT_XYUV8888, DRM_FORMAT_XRGB2101010, DRM_FORMAT_XRGB16161616F, DRM_FORMAT_YUYV};
+static int output_format_list[] = {DSC_FORMAT_YCBCR420, DSC_FORMAT_YCBCR444};
+static int format_list[] = {DRM_FORMAT_XYUV8888, DRM_FORMAT_XRGB2101010, DRM_FORMAT_XRGB16161616F, DRM_FORMAT_YUYV};
 static uint32_t bpc_list[] = {12, 10, 8};
 
 static inline void manual(const char *expected)
@@ -71,24 +74,26 @@ static drmModeModeInfo *get_highres_mode(igt_output_t *output)
 	return highest_mode;
 }
 
-static bool pipe_output_combo_valid(data_t *data)
+static drmModeModeInfo *get_next_mode(igt_output_t *output, int index)
 {
-	igt_output_t *output = data->output;
-	drmModeModeInfo *mode;
-	bool ret = true;
-
-	igt_display_reset(&data->display);
-	mode = get_highres_mode(output);
+	drmModeConnector *connector = output->config.connector;
+	drmModeModeInfo *next_mode = NULL;
 
-	igt_output_set_pipe(output, data->pipe);
-	igt_output_override_mode(output, mode);
+	if (index < connector->count_modes)
+		next_mode = &connector->modes[index];
 
-	if (!i915_pipe_output_combo_valid(&data->display))
-		ret = false;
+	return next_mode;
+}
 
-	igt_output_set_pipe(output, PIPE_NONE);
+static void test_reset(data_t *data)
+{
+	igt_debug("Reset input BPC\n");
+	data->input_bpc = 0;
+	force_dsc_enable_bpc(data->drm_fd, data->output, data->input_bpc);
 
-	return ret;
+	igt_debug("Reset DSC output format\n");
+	data->output_format = DSC_FORMAT_RGB;
+	force_dsc_output_format(data->drm_fd, data->output, data->output_format);
 }
 
 static void test_cleanup(data_t *data)
@@ -106,7 +111,9 @@ static void test_cleanup(data_t *data)
 /* re-probe connectors and do a modeset with DSC */
 static void update_display(data_t *data, enum dsc_test_type test_type)
 {
+	int ret;
 	bool enabled;
+	int index = 0;
 	igt_plane_t *primary;
 	drmModeModeInfo *mode;
 	igt_output_t *output = data->output;
@@ -125,26 +132,57 @@ static void update_display(data_t *data, enum dsc_test_type test_type)
 		force_dsc_enable_bpc(data->drm_fd, data->output, data->input_bpc);
 	}
 
-	igt_output_set_pipe(output, data->pipe);
-
-	mode = get_highres_mode(output);
-	igt_require(mode != NULL);
-	igt_output_override_mode(output, mode);
+	if (test_type == TEST_DSC_OUTPUT_FORMAT) {
+		igt_debug("Trying to set DSC %s output format\n",
+			   kmstest_dsc_output_format_str(data->output_format));
+		force_dsc_output_format(data->drm_fd, data->output, data->output_format);
+	}
 
+	igt_output_set_pipe(output, data->pipe);
 	primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
 
 	igt_skip_on(!igt_plane_has_format_mod(primary, data->plane_format,
 		    DRM_FORMAT_MOD_LINEAR));
 
-	igt_create_pattern_fb(data->drm_fd,
-			      mode->hdisplay,
-			      mode->vdisplay,
-			      data->plane_format,
-			      DRM_FORMAT_MOD_LINEAR,
-			      &data->fb_test_pattern);
+	do {
+		if (data->output_format == DSC_FORMAT_RGB)
+			mode = get_highres_mode(output);
+		else
+			mode = get_next_mode(output, index++);
 
-	igt_plane_set_fb(primary, &data->fb_test_pattern);
-	igt_display_commit(display);
+		if (mode == NULL)
+			goto reset;
+
+		igt_output_override_mode(output, mode);
+
+		if (!i915_pipe_output_combo_valid(display)) {
+			if (data->output_format == DSC_FORMAT_RGB) {
+				igt_info("No valid pipe/output/mode found.\n");
+
+				mode = NULL;
+				goto reset;
+			} else {
+				continue;
+			}
+		}
+
+		igt_create_pattern_fb(data->drm_fd,
+				      mode->hdisplay,
+				      mode->vdisplay,
+				      data->plane_format,
+				      DRM_FORMAT_MOD_LINEAR,
+				      &data->fb_test_pattern);
+		igt_plane_set_fb(primary, &data->fb_test_pattern);
+
+		ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+		if (data->output_format == DSC_FORMAT_RGB || ret == 0)
+			break;
+
+		igt_remove_fb(data->drm_fd, &data->fb_test_pattern);
+	} while (1);
+
+	if (ret != 0)
+		goto reset;
 
 	/* until we have CRC check support, manually check if RGB test
 	 * pattern has no corruption.
@@ -159,20 +197,22 @@ static void update_display(data_t *data, enum dsc_test_type test_type)
 				enabled ? "ON" : "OFF");
 
 	restore_force_dsc_en();
-	igt_debug("Reset compression BPC\n");
-	data->input_bpc = 0;
-	force_dsc_enable_bpc(data->drm_fd, data->output, data->input_bpc);
 
 	igt_assert_f(enabled,
 		     "Default DSC enable failed on connector: %s pipe: %s\n",
 		     output->name,
 		     kmstest_pipe_name(data->pipe));
 
+reset:
+	test_reset(data);
+
 	test_cleanup(data);
+	igt_skip_on(mode == NULL);
+	igt_assert_eq(ret, 0);
 }
 
 static void test_dsc(data_t *data, enum dsc_test_type test_type, int bpc,
-		     unsigned int plane_format)
+		     unsigned int plane_format, enum dsc_output_format output_format)
 {
 	igt_display_t *display = &data->display;
 	igt_output_t *output;
@@ -180,6 +220,7 @@ static void test_dsc(data_t *data, enum dsc_test_type test_type, int bpc,
 	enum pipe pipe;
 
 	for_each_pipe_with_valid_output(display, pipe, output) {
+		data->output_format = output_format;
 		data->plane_format = plane_format;
 		data->input_bpc = bpc;
 		data->output = output;
@@ -188,17 +229,21 @@ static void test_dsc(data_t *data, enum dsc_test_type test_type, int bpc,
 		if (!check_dsc_on_connector(data->drm_fd, data->output))
 			continue;
 
-		if (!check_gen11_dp_constraint(data->drm_fd, data->output, data->pipe))
+		if (!is_dsc_output_format_supported(data->drm_fd, data->disp_ver,
+						    data->output, data->output_format))
 			continue;
 
-		if (!check_gen11_bpc_constraint(data->drm_fd, data->output, data->input_bpc))
+		if (!check_gen11_dp_constraint(data->drm_fd, data->output, data->pipe))
 			continue;
 
-		if (!pipe_output_combo_valid(data))
+		if (!check_gen11_bpc_constraint(data->drm_fd, data->output, data->input_bpc))
 			continue;
 
 		if (test_type == TEST_DSC_BPC)
 			snprintf(name, sizeof(name), "-%dbpc-%s", data->input_bpc, igt_format_str(data->plane_format));
+		else if (test_type == TEST_DSC_OUTPUT_FORMAT)
+			snprintf(name, sizeof(name), "-%s-%s", kmstest_dsc_output_format_str(data->output_format),
+							       igt_format_str(data->plane_format));
 		else
 			snprintf(name, sizeof(name), "-%s", igt_format_str(data->plane_format));
 
@@ -226,14 +271,16 @@ igt_main
 		     "by a connector by forcing DSC on all connectors that support it "
 		     "with default parameters");
 	igt_subtest_with_dynamic("dsc-basic")
-			test_dsc(&data, TEST_DSC_BASIC, 0, DRM_FORMAT_XRGB8888);
+			test_dsc(&data, TEST_DSC_BASIC, 0,
+				 DRM_FORMAT_XRGB8888, DSC_FORMAT_RGB);
 
 	igt_describe("Tests basic display stream compression functionality if supported "
 		     "by a connector by forcing DSC on all connectors that support it "
 		     "with default parameters and creating fb with diff formats");
 	igt_subtest_with_dynamic("dsc-with-formats") {
 		for (int k = 0; k < ARRAY_SIZE(format_list); k++)
-			test_dsc(&data, TEST_DSC_BASIC, 0, format_list[k]);
+			test_dsc(&data, TEST_DSC_BASIC, 0,
+				 format_list[k], DSC_FORMAT_RGB);
 	}
 
 	igt_describe("Tests basic display stream compression functionality if supported "
@@ -241,7 +288,8 @@ igt_main
 		     "with certain input BPC for the connector");
 	igt_subtest_with_dynamic("dsc-with-bpc") {
 		for (int j = 0; j < ARRAY_SIZE(bpc_list); j++)
-			test_dsc(&data, TEST_DSC_BPC, bpc_list[j], DRM_FORMAT_XRGB8888);
+			test_dsc(&data, TEST_DSC_BPC, bpc_list[j],
+				 DRM_FORMAT_XRGB8888, DSC_FORMAT_RGB);
 	}
 
 	igt_describe("Tests basic display stream compression functionality if supported "
@@ -250,11 +298,21 @@ igt_main
 	igt_subtest_with_dynamic("dsc-with-bpc-formats") {
 		for (int j = 0; j < ARRAY_SIZE(bpc_list); j++) {
 			for (int k = 0; k < ARRAY_SIZE(format_list); k++) {
-				test_dsc(&data, TEST_DSC_BPC, bpc_list[j], format_list[k]);
+				test_dsc(&data, TEST_DSC_BPC, bpc_list[j],
+				format_list[k], DSC_FORMAT_RGB);
 			}
 		}
 	}
 
+	igt_describe("Tests basic display stream compression functionality if supported "
+		     "by a connector by forcing DSC and output format on all connectors "
+		     "that support it");
+	igt_subtest_with_dynamic("dsc-with-output-formats") {
+		for (int k = 0; k < ARRAY_SIZE(output_format_list); k++)
+			test_dsc(&data, TEST_DSC_OUTPUT_FORMAT, 0, DRM_FORMAT_XRGB8888,
+				 output_format_list[k]);
+	}
+
 	igt_fixture {
 		igt_display_fini(&data.display);
 		close(data.drm_fd);
diff --git a/tests/i915/kms_dsc_helper.c b/tests/i915/kms_dsc_helper.c
index e2c278c7..02d1a484 100644
--- a/tests/i915/kms_dsc_helper.c
+++ b/tests/i915/kms_dsc_helper.c
@@ -97,3 +97,39 @@ bool check_gen11_bpc_constraint(int drmfd, igt_output_t *output, int input_bpc)
 
 	return true;
 }
+
+void force_dsc_output_format(int drmfd, igt_output_t *output,
+			     enum dsc_output_format output_format)
+{
+	int ret;
+
+	igt_debug("Forcing DSC %s output format on %s\n",
+		  kmstest_dsc_output_format_str(output_format), output->name);
+	ret = igt_force_dsc_output_format(drmfd, output->name, output_format);
+	igt_assert_f(ret == 0, "forcing dsc output format debugfs_write failed\n");
+}
+
+/* YCbCr420 DSC is supported on display version 14+ with DSC1.2a */
+static bool is_dsc_output_format_supported_by_platform(int disp_ver, enum dsc_output_format output_format)
+{
+	if (disp_ver < 14 && output_format == DSC_FORMAT_YCBCR420) {
+		igt_debug("Output format DSC YCBCR420 not supported on D13 and older platforms\n");
+		return false;
+	}
+
+	return true;
+}
+
+bool is_dsc_output_format_supported(int drmfd, int disp_ver, igt_output_t *output,
+				    enum dsc_output_format output_format)
+{
+	if (!(igt_is_dsc_output_format_supported_by_sink(drmfd, output->name, output_format)) &&
+	     (is_dsc_output_format_supported_by_platform(disp_ver, output_format))) {
+		    igt_debug("DSC %s output format not supported on connector %s\n",
+			       kmstest_dsc_output_format_str(output_format),
+			       output->name);
+			return false;
+		}
+
+	return true;
+}
diff --git a/tests/i915/kms_dsc_helper.h b/tests/i915/kms_dsc_helper.h
index b3828dcd..198f5afa 100644
--- a/tests/i915/kms_dsc_helper.h
+++ b/tests/i915/kms_dsc_helper.h
@@ -29,5 +29,9 @@ void kms_dsc_exit_handler(int sig);
 bool check_dsc_on_connector(int drmfd, igt_output_t *output);
 bool check_gen11_dp_constraint(int drmfd, igt_output_t *output, enum pipe pipe);
 bool check_gen11_bpc_constraint(int drmfd, igt_output_t *output, int input_bpc);
+void force_dsc_output_format(int drmfd, igt_output_t *output,
+			     enum dsc_output_format output_format);
+bool is_dsc_output_format_supported(int disp_ver, int drmfd, igt_output_t *output,
+				    enum dsc_output_format output_format);
 
 #endif
-- 
2.25.1

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

* Re: [igt-dev] [PATCH i-g-t 2/2] tests/i915/kms_dsc: Enable validation for VDSC output formats
  2023-05-03 11:40 ` [igt-dev] [PATCH i-g-t 2/2] tests/i915/kms_dsc: Enable validation for VDSC output formats Swati Sharma
@ 2023-05-04  5:40   ` Modem, Bhanuprakash
  2023-05-04  6:21     ` Sharma, Swati2
  0 siblings, 1 reply; 8+ messages in thread
From: Modem, Bhanuprakash @ 2023-05-04  5:40 UTC (permalink / raw)
  To: Swati Sharma, igt-dev

Hi Swati,

On Wed-03-05-2023 05:10 pm, Swati Sharma wrote:
> Existing i-g-t is extended to enable validation for VDSC output
> formats. Output format is selected as per driver policy.For ex:
> If a mode is supported in both RGB and YCbCr420 output formats
> by the sink, i915 driver policy is to try RGB first and fall
> back to YCbCr420, if mode cannot be shown using RGB.
> 
> To test DSC output format, a debugfs entry is created to force
> this output format. However, before setting debugfs entry, we
> have checked capability i.e. output format is supported by both
> platform and sink.
> 
> Also, each mode doesn't support all output formats; so if both
> sink and platform support an output format, we will do a try
> commit with each mode till we get a successful commit.
> 
> v2: -used is_dsc_ycbcr420_supported() (Ankit)
>      -handled try-commit correctly (Ankit)
>      -instead of flag use enum for output formats (Ankit)
> v3: -instead of global count, pass count as para (Ankit)
>      -print output format (Ankit)
> v4: -optimized while loop (Jouni)
>      -used only try commit (Jouni)
>      -fixed get_next_mode() (Jouni)
> v5: -made generic test to validate all output formats (Jani N)
> v6: -fixed assert (Jouni)
>      -if mode == NULL output_format debugfs reset didn't happen, fixed
> v7: -indentation fixes (Kamil)
> v8: -rebase
>      -removed pipe_output_combo_valid() (Bhanu)
> 
> Signed-off-by: Swati Sharma <swati2.sharma@intel.com>
> Reviewed-by: Jouni Högander <jouni.hogander@intel.com> (v5)
> Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
> ---
>   lib/igt_kms.c               |  18 +++++
>   lib/igt_kms.h               |   1 +
>   tests/i915/kms_dsc.c        | 136 +++++++++++++++++++++++++-----------
>   tests/i915/kms_dsc_helper.c |  36 ++++++++++
>   tests/i915/kms_dsc_helper.h |   4 ++
>   5 files changed, 156 insertions(+), 39 deletions(-)
> 
> diff --git a/lib/igt_kms.c b/lib/igt_kms.c
> index e085e234..c5484148 100644
> --- a/lib/igt_kms.c
> +++ b/lib/igt_kms.c
> @@ -967,6 +967,24 @@ const char *kmstest_scaling_filter_str(int filter)
>   	return find_type_name(scaling_filter_names, filter);
>   }
>   
> +static const struct type_name dsc_output_format_names[] = {
> +	{ DSC_FORMAT_RGB, "RGB" },
> +	{ DSC_FORMAT_YCBCR420, "YCBCR420" },
> +	{ DSC_FORMAT_YCBCR444, "YCBCR444" },
> +	{}
> +};
> +
> +/**
> + * kmstest_dsc_output_format_str:
> + * @output_format: DSC_FORMAT_* output format value
> + *
> + * Returns: A string representing the output format @output format.
> + */
> +const char *kmstest_dsc_output_format_str(int output_format)
> +{
> +	return find_type_name(dsc_output_format_names, output_format);
> +}
> +
>   static const struct type_name connector_type_names[] = {
>   	{ DRM_MODE_CONNECTOR_Unknown, "Unknown" },
>   	{ DRM_MODE_CONNECTOR_VGA, "VGA" },
> diff --git a/lib/igt_kms.h b/lib/igt_kms.h
> index 41e041b6..1b6988c1 100644
> --- a/lib/igt_kms.h
> +++ b/lib/igt_kms.h
> @@ -118,6 +118,7 @@ const char *kmstest_encoder_type_str(int type);
>   const char *kmstest_connector_status_str(int status);
>   const char *kmstest_connector_type_str(int type);
>   const char *kmstest_scaling_filter_str(int filter);
> +const char *kmstest_dsc_output_format_str(int output_format);
>   
>   void kmstest_dump_mode(drmModeModeInfo *mode);
>   #define MAX_HDISPLAY_PER_PIPE 5120
> diff --git a/tests/i915/kms_dsc.c b/tests/i915/kms_dsc.c
> index c4dfc925..d441c356 100644
> --- a/tests/i915/kms_dsc.c
> +++ b/tests/i915/kms_dsc.c
> @@ -36,7 +36,8 @@ IGT_TEST_DESCRIPTION("Test to validate display stream compression");
>   
>   enum dsc_test_type {
>   	TEST_DSC_BASIC,
> -	TEST_DSC_BPC
> +	TEST_DSC_BPC,
> +	TEST_DSC_OUTPUT_FORMAT,
>   };
>   
>   typedef struct {
> @@ -44,6 +45,7 @@ typedef struct {
>   	uint32_t devid;
>   	igt_display_t display;
>   	struct igt_fb fb_test_pattern;
> +	enum dsc_output_format output_format;
>   	unsigned int plane_format;
>   	igt_output_t *output;
>   	int input_bpc;
> @@ -51,7 +53,8 @@ typedef struct {
>   	enum pipe pipe;
>   } data_t;
>   
> -static int format_list[] =  {DRM_FORMAT_XYUV8888, DRM_FORMAT_XRGB2101010, DRM_FORMAT_XRGB16161616F, DRM_FORMAT_YUYV};
> +static int output_format_list[] = {DSC_FORMAT_YCBCR420, DSC_FORMAT_YCBCR444};
> +static int format_list[] = {DRM_FORMAT_XYUV8888, DRM_FORMAT_XRGB2101010, DRM_FORMAT_XRGB16161616F, DRM_FORMAT_YUYV};
>   static uint32_t bpc_list[] = {12, 10, 8};
>   
>   static inline void manual(const char *expected)
> @@ -71,24 +74,26 @@ static drmModeModeInfo *get_highres_mode(igt_output_t *output)
>   	return highest_mode;
>   }
>   
> -static bool pipe_output_combo_valid(data_t *data)
> +static drmModeModeInfo *get_next_mode(igt_output_t *output, int index)
>   {
> -	igt_output_t *output = data->output;
> -	drmModeModeInfo *mode;
> -	bool ret = true;
> -
> -	igt_display_reset(&data->display);
> -	mode = get_highres_mode(output);
> +	drmModeConnector *connector = output->config.connector;
> +	drmModeModeInfo *next_mode = NULL;
>   
> -	igt_output_set_pipe(output, data->pipe);
> -	igt_output_override_mode(output, mode);
> +	if (index < connector->count_modes)
> +		next_mode = &connector->modes[index];
>   
> -	if (!i915_pipe_output_combo_valid(&data->display))
> -		ret = false;
> +	return next_mode;
> +}
>   
> -	igt_output_set_pipe(output, PIPE_NONE);
> +static void test_reset(data_t *data)
> +{
> +	igt_debug("Reset input BPC\n");
> +	data->input_bpc = 0;
> +	force_dsc_enable_bpc(data->drm_fd, data->output, data->input_bpc);
>   
> -	return ret;
> +	igt_debug("Reset DSC output format\n");
> +	data->output_format = DSC_FORMAT_RGB;
> +	force_dsc_output_format(data->drm_fd, data->output, data->output_format);
>   }
>   
>   static void test_cleanup(data_t *data)
> @@ -106,7 +111,9 @@ static void test_cleanup(data_t *data)
>   /* re-probe connectors and do a modeset with DSC */
>   static void update_display(data_t *data, enum dsc_test_type test_type)
>   {
> +	int ret;
>   	bool enabled;
> +	int index = 0;
>   	igt_plane_t *primary;
>   	drmModeModeInfo *mode;
>   	igt_output_t *output = data->output;
> @@ -125,26 +132,57 @@ static void update_display(data_t *data, enum dsc_test_type test_type)
>   		force_dsc_enable_bpc(data->drm_fd, data->output, data->input_bpc);
>   	}
>   
> -	igt_output_set_pipe(output, data->pipe);
> -
> -	mode = get_highres_mode(output);
> -	igt_require(mode != NULL);
> -	igt_output_override_mode(output, mode);
> +	if (test_type == TEST_DSC_OUTPUT_FORMAT) {
> +		igt_debug("Trying to set DSC %s output format\n",
> +			   kmstest_dsc_output_format_str(data->output_format));
> +		force_dsc_output_format(data->drm_fd, data->output, data->output_format);
> +	}
>   
> +	igt_output_set_pipe(output, data->pipe);
>   	primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
>   
>   	igt_skip_on(!igt_plane_has_format_mod(primary, data->plane_format,
>   		    DRM_FORMAT_MOD_LINEAR));
>   
> -	igt_create_pattern_fb(data->drm_fd,
> -			      mode->hdisplay,
> -			      mode->vdisplay,
> -			      data->plane_format,
> -			      DRM_FORMAT_MOD_LINEAR,
> -			      &data->fb_test_pattern);
> +	do {
> +		if (data->output_format == DSC_FORMAT_RGB)
> +			mode = get_highres_mode(output);
> +		else
> +			mode = get_next_mode(output, index++);
>   
> -	igt_plane_set_fb(primary, &data->fb_test_pattern);
> -	igt_display_commit(display);
> +		if (mode == NULL)
> +			goto reset;
> +
> +		igt_output_override_mode(output, mode);
> +
> +		if (!i915_pipe_output_combo_valid(display)) {
> +			if (data->output_format == DSC_FORMAT_RGB) {
> +				igt_info("No valid pipe/output/mode found.\n");
> +
> +				mode = NULL;
> +				goto reset;
> +			} else {
> +				continue;
> +			}
> +		}
> +
> +		igt_create_pattern_fb(data->drm_fd,
> +				      mode->hdisplay,
> +				      mode->vdisplay,
> +				      data->plane_format,
> +				      DRM_FORMAT_MOD_LINEAR,
> +				      &data->fb_test_pattern);
> +		igt_plane_set_fb(primary, &data->fb_test_pattern);
> +
> +		ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> +		if (data->output_format == DSC_FORMAT_RGB || ret == 0)
> +			break;
> +
> +		igt_remove_fb(data->drm_fd, &data->fb_test_pattern);
> +	} while (1);

It is already well takencare, but still while(1) (an infinite loop) 
looks bit dangerous to me.

How about using "while (index < connector->count_modes)"?

Still this patch LGTM
Reviewed-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>

- Bhanu

> +
> +	if (ret != 0)
> +		goto reset;
>   
>   	/* until we have CRC check support, manually check if RGB test
>   	 * pattern has no corruption.
> @@ -159,20 +197,22 @@ static void update_display(data_t *data, enum dsc_test_type test_type)
>   				enabled ? "ON" : "OFF");
>   
>   	restore_force_dsc_en();
> -	igt_debug("Reset compression BPC\n");
> -	data->input_bpc = 0;
> -	force_dsc_enable_bpc(data->drm_fd, data->output, data->input_bpc);
>   
>   	igt_assert_f(enabled,
>   		     "Default DSC enable failed on connector: %s pipe: %s\n",
>   		     output->name,
>   		     kmstest_pipe_name(data->pipe));
>   
> +reset:
> +	test_reset(data);
> +
>   	test_cleanup(data);
> +	igt_skip_on(mode == NULL);
> +	igt_assert_eq(ret, 0);
>   }
>   
>   static void test_dsc(data_t *data, enum dsc_test_type test_type, int bpc,
> -		     unsigned int plane_format)
> +		     unsigned int plane_format, enum dsc_output_format output_format)
>   {
>   	igt_display_t *display = &data->display;
>   	igt_output_t *output;
> @@ -180,6 +220,7 @@ static void test_dsc(data_t *data, enum dsc_test_type test_type, int bpc,
>   	enum pipe pipe;
>   
>   	for_each_pipe_with_valid_output(display, pipe, output) {
> +		data->output_format = output_format;
>   		data->plane_format = plane_format;
>   		data->input_bpc = bpc;
>   		data->output = output;
> @@ -188,17 +229,21 @@ static void test_dsc(data_t *data, enum dsc_test_type test_type, int bpc,
>   		if (!check_dsc_on_connector(data->drm_fd, data->output))
>   			continue;
>   
> -		if (!check_gen11_dp_constraint(data->drm_fd, data->output, data->pipe))
> +		if (!is_dsc_output_format_supported(data->drm_fd, data->disp_ver,
> +						    data->output, data->output_format))
>   			continue;
>   
> -		if (!check_gen11_bpc_constraint(data->drm_fd, data->output, data->input_bpc))
> +		if (!check_gen11_dp_constraint(data->drm_fd, data->output, data->pipe))
>   			continue;
>   
> -		if (!pipe_output_combo_valid(data))
> +		if (!check_gen11_bpc_constraint(data->drm_fd, data->output, data->input_bpc))
>   			continue;
>   
>   		if (test_type == TEST_DSC_BPC)
>   			snprintf(name, sizeof(name), "-%dbpc-%s", data->input_bpc, igt_format_str(data->plane_format));
> +		else if (test_type == TEST_DSC_OUTPUT_FORMAT)
> +			snprintf(name, sizeof(name), "-%s-%s", kmstest_dsc_output_format_str(data->output_format),
> +							       igt_format_str(data->plane_format));
>   		else
>   			snprintf(name, sizeof(name), "-%s", igt_format_str(data->plane_format));
>   
> @@ -226,14 +271,16 @@ igt_main
>   		     "by a connector by forcing DSC on all connectors that support it "
>   		     "with default parameters");
>   	igt_subtest_with_dynamic("dsc-basic")
> -			test_dsc(&data, TEST_DSC_BASIC, 0, DRM_FORMAT_XRGB8888);
> +			test_dsc(&data, TEST_DSC_BASIC, 0,
> +				 DRM_FORMAT_XRGB8888, DSC_FORMAT_RGB);
>   
>   	igt_describe("Tests basic display stream compression functionality if supported "
>   		     "by a connector by forcing DSC on all connectors that support it "
>   		     "with default parameters and creating fb with diff formats");
>   	igt_subtest_with_dynamic("dsc-with-formats") {
>   		for (int k = 0; k < ARRAY_SIZE(format_list); k++)
> -			test_dsc(&data, TEST_DSC_BASIC, 0, format_list[k]);
> +			test_dsc(&data, TEST_DSC_BASIC, 0,
> +				 format_list[k], DSC_FORMAT_RGB);
>   	}
>   
>   	igt_describe("Tests basic display stream compression functionality if supported "
> @@ -241,7 +288,8 @@ igt_main
>   		     "with certain input BPC for the connector");
>   	igt_subtest_with_dynamic("dsc-with-bpc") {
>   		for (int j = 0; j < ARRAY_SIZE(bpc_list); j++)
> -			test_dsc(&data, TEST_DSC_BPC, bpc_list[j], DRM_FORMAT_XRGB8888);
> +			test_dsc(&data, TEST_DSC_BPC, bpc_list[j],
> +				 DRM_FORMAT_XRGB8888, DSC_FORMAT_RGB);
>   	}
>   
>   	igt_describe("Tests basic display stream compression functionality if supported "
> @@ -250,11 +298,21 @@ igt_main
>   	igt_subtest_with_dynamic("dsc-with-bpc-formats") {
>   		for (int j = 0; j < ARRAY_SIZE(bpc_list); j++) {
>   			for (int k = 0; k < ARRAY_SIZE(format_list); k++) {
> -				test_dsc(&data, TEST_DSC_BPC, bpc_list[j], format_list[k]);
> +				test_dsc(&data, TEST_DSC_BPC, bpc_list[j],
> +				format_list[k], DSC_FORMAT_RGB);
>   			}
>   		}
>   	}
>   
> +	igt_describe("Tests basic display stream compression functionality if supported "
> +		     "by a connector by forcing DSC and output format on all connectors "
> +		     "that support it");
> +	igt_subtest_with_dynamic("dsc-with-output-formats") {
> +		for (int k = 0; k < ARRAY_SIZE(output_format_list); k++)
> +			test_dsc(&data, TEST_DSC_OUTPUT_FORMAT, 0, DRM_FORMAT_XRGB8888,
> +				 output_format_list[k]);
> +	}
> +
>   	igt_fixture {
>   		igt_display_fini(&data.display);
>   		close(data.drm_fd);
> diff --git a/tests/i915/kms_dsc_helper.c b/tests/i915/kms_dsc_helper.c
> index e2c278c7..02d1a484 100644
> --- a/tests/i915/kms_dsc_helper.c
> +++ b/tests/i915/kms_dsc_helper.c
> @@ -97,3 +97,39 @@ bool check_gen11_bpc_constraint(int drmfd, igt_output_t *output, int input_bpc)
>   
>   	return true;
>   }
> +
> +void force_dsc_output_format(int drmfd, igt_output_t *output,
> +			     enum dsc_output_format output_format)
> +{
> +	int ret;
> +
> +	igt_debug("Forcing DSC %s output format on %s\n",
> +		  kmstest_dsc_output_format_str(output_format), output->name);
> +	ret = igt_force_dsc_output_format(drmfd, output->name, output_format);
> +	igt_assert_f(ret == 0, "forcing dsc output format debugfs_write failed\n");
> +}
> +
> +/* YCbCr420 DSC is supported on display version 14+ with DSC1.2a */
> +static bool is_dsc_output_format_supported_by_platform(int disp_ver, enum dsc_output_format output_format)
> +{
> +	if (disp_ver < 14 && output_format == DSC_FORMAT_YCBCR420) {
> +		igt_debug("Output format DSC YCBCR420 not supported on D13 and older platforms\n");
> +		return false;
> +	}
> +
> +	return true;
> +}
> +
> +bool is_dsc_output_format_supported(int drmfd, int disp_ver, igt_output_t *output,
> +				    enum dsc_output_format output_format)
> +{
> +	if (!(igt_is_dsc_output_format_supported_by_sink(drmfd, output->name, output_format)) &&
> +	     (is_dsc_output_format_supported_by_platform(disp_ver, output_format))) {
> +		    igt_debug("DSC %s output format not supported on connector %s\n",
> +			       kmstest_dsc_output_format_str(output_format),
> +			       output->name);
> +			return false;
> +		}
> +
> +	return true;
> +}
> diff --git a/tests/i915/kms_dsc_helper.h b/tests/i915/kms_dsc_helper.h
> index b3828dcd..198f5afa 100644
> --- a/tests/i915/kms_dsc_helper.h
> +++ b/tests/i915/kms_dsc_helper.h
> @@ -29,5 +29,9 @@ void kms_dsc_exit_handler(int sig);
>   bool check_dsc_on_connector(int drmfd, igt_output_t *output);
>   bool check_gen11_dp_constraint(int drmfd, igt_output_t *output, enum pipe pipe);
>   bool check_gen11_bpc_constraint(int drmfd, igt_output_t *output, int input_bpc);
> +void force_dsc_output_format(int drmfd, igt_output_t *output,
> +			     enum dsc_output_format output_format);
> +bool is_dsc_output_format_supported(int disp_ver, int drmfd, igt_output_t *output,
> +				    enum dsc_output_format output_format);
>   
>   #endif

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

* Re: [igt-dev] [PATCH i-g-t 2/2] tests/i915/kms_dsc: Enable validation for VDSC output formats
  2023-05-04  5:40   ` Modem, Bhanuprakash
@ 2023-05-04  6:21     ` Sharma, Swati2
  0 siblings, 0 replies; 8+ messages in thread
From: Sharma, Swati2 @ 2023-05-04  6:21 UTC (permalink / raw)
  To: Modem, Bhanuprakash, igt-dev

Thanks Bhanu! Will make this change.

On 04-May-23 11:10 AM, Modem, Bhanuprakash wrote:
> It is already well takencare, but still while(1) (an infinite loop) 
> looks bit dangerous to me.
> 
> How about using "while (index < connector->count_modes)"?
> 
> Still this patch LGTM
> Reviewed-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>

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

* [igt-dev] [PATCH i-g-t 0/2] Enable VDSC output formats validation
@ 2023-05-04 10:52 Swati Sharma
  2023-05-04 10:52 ` [igt-dev] [PATCH i-g-t 1/2] lib/dsc: Add helpers for VDSC output format debugfs entry Swati Sharma
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Swati Sharma @ 2023-05-04 10:52 UTC (permalink / raw)
  To: igt-dev

Initial, dsc generic changes are merged. Now, this series contains
only dsc o/p format validation related patches.

Swati Sharma (2):
  lib/dsc: Add helpers for VDSC output format debugfs entry
  tests/i915/kms_dsc: Enable validation for VDSC output formats

 lib/igt_dsc.c               |  49 +++++++++++++
 lib/igt_dsc.h               |   5 ++
 lib/igt_kms.c               |  18 +++++
 lib/igt_kms.h               |   7 ++
 tests/i915/kms_dsc.c        | 137 ++++++++++++++++++++++++++----------
 tests/i915/kms_dsc_helper.c |  36 ++++++++++
 tests/i915/kms_dsc_helper.h |   4 ++
 7 files changed, 217 insertions(+), 39 deletions(-)

-- 
2.25.1

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

* [igt-dev] [PATCH i-g-t 1/2] lib/dsc: Add helpers for VDSC output format debugfs entry
  2023-05-04 10:52 [igt-dev] [PATCH i-g-t 0/2] Enable VDSC output formats validation Swati Sharma
@ 2023-05-04 10:52 ` Swati Sharma
  2023-05-04 10:52 ` [igt-dev] [PATCH i-g-t 2/2] tests/i915/kms_dsc: Enable validation for VDSC output formats Swati Sharma
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 8+ messages in thread
From: Swati Sharma @ 2023-05-04 10:52 UTC (permalink / raw)
  To: igt-dev

Helper functions are added for VDSC output format debugfs entry.

Signed-off-by: Swati Sharma <swati2.sharma@intel.com>
Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
---
 lib/igt_dsc.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
 lib/igt_dsc.h |  5 +++++
 lib/igt_kms.h |  6 ++++++
 3 files changed, 60 insertions(+)

diff --git a/lib/igt_dsc.c b/lib/igt_dsc.c
index 64dd6b29..9e1ab9b1 100644
--- a/lib/igt_dsc.c
+++ b/lib/igt_dsc.c
@@ -134,3 +134,52 @@ int igt_get_dsc_debugfs_fd(int drmfd, char *connector_name)
 
 	return openat(igt_debugfs_dir(drmfd), file_name, O_WRONLY);
 }
+
+/*
+ * igt_is_dsc_output_format_supported_by_sink:
+ * @drmfd: A drm file descriptor
+ * @connector_name: Name of the libdrm connector we're going to use
+ * @output_format: Output format
+ *
+ * Returns: True if DSC output format is supported for the given connector,
+ * false otherwise.
+ */
+bool igt_is_dsc_output_format_supported_by_sink(int drmfd, char *connector_name,
+						enum dsc_output_format output_format)
+{
+	const char *check_str = "OUTPUTFORMATNOTFOUND";
+
+	switch (output_format) {
+	case DSC_FORMAT_RGB:
+		check_str = "RGB: yes";
+		break;
+	case DSC_FORMAT_YCBCR420:
+		check_str = "YCBCR420: yes";
+		break;
+	case DSC_FORMAT_YCBCR444:
+		check_str = "YCBCR444: yes";
+		break;
+	default:
+		break;
+	}
+
+	return check_dsc_debugfs(drmfd, connector_name, check_str);
+}
+
+/*
+ * igt_force_dsc_output_format:
+ * @drmfd: A drm file descriptor
+ * @connector_name: Name of the libdrm connector we're going to use
+ * @output_format: Output format
+ *
+ * Returns: 0 on success or negative error code, in case of failure.
+ */
+int igt_force_dsc_output_format(int drmfd, char *connector_name,
+				enum dsc_output_format output_format)
+{
+	char buf[20] = {0};
+
+	sprintf(buf, "%d", output_format);
+
+	return write_dsc_debugfs(drmfd, connector_name, "i915_dsc_output_format", buf);
+}
diff --git a/lib/igt_dsc.h b/lib/igt_dsc.h
index 291c2cde..9608aad4 100644
--- a/lib/igt_dsc.h
+++ b/lib/igt_dsc.h
@@ -7,6 +7,7 @@
 #define IGT_DSC_H
 
 #include "igt_fb.h"
+#include "igt_kms.h"
 
 bool igt_is_dsc_supported(int drmfd, char *connector_name);
 bool igt_is_fec_supported(int drmfd, char *connector_name);
@@ -15,5 +16,9 @@ bool igt_is_force_dsc_enabled(int drmfd, char *connector_name);
 int igt_force_dsc_enable(int drmfd, char *connector_name);
 int igt_force_dsc_enable_bpc(int drmfd, char *connector_name, int bpc);
 int igt_get_dsc_debugfs_fd(int drmfd, char *connector_name);
+bool igt_is_dsc_output_format_supported_by_sink(int drmfd, char *connector_name,
+						enum dsc_output_format output_format);
+int igt_force_dsc_output_format(int drmfd, char *connector_name,
+				enum dsc_output_format output_format);
 
 #endif
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 483b4165..41e041b6 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -108,6 +108,12 @@ enum igt_custom_edid_type {
  */
 #define kmstest_port_name(port) ((port) + 'A')
 
+enum dsc_output_format {
+	DSC_FORMAT_RGB = 0,
+	DSC_FORMAT_YCBCR420,
+	DSC_FORMAT_YCBCR444,
+};
+
 const char *kmstest_encoder_type_str(int type);
 const char *kmstest_connector_status_str(int status);
 const char *kmstest_connector_type_str(int type);
-- 
2.25.1

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

* [igt-dev] [PATCH i-g-t 2/2] tests/i915/kms_dsc: Enable validation for VDSC output formats
  2023-05-04 10:52 [igt-dev] [PATCH i-g-t 0/2] Enable VDSC output formats validation Swati Sharma
  2023-05-04 10:52 ` [igt-dev] [PATCH i-g-t 1/2] lib/dsc: Add helpers for VDSC output format debugfs entry Swati Sharma
@ 2023-05-04 10:52 ` Swati Sharma
  2023-05-04 14:05 ` [igt-dev] ✓ Fi.CI.BAT: success for Enable VDSC output formats validation (rev7) Patchwork
  2023-05-04 17:02 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
  3 siblings, 0 replies; 8+ messages in thread
From: Swati Sharma @ 2023-05-04 10:52 UTC (permalink / raw)
  To: igt-dev

Existing i-g-t is extended to enable validation for VDSC output
formats. Output format is selected as per driver policy.For ex:
If a mode is supported in both RGB and YCbCr420 output formats
by the sink, i915 driver policy is to try RGB first and fall
back to YCbCr420, if mode cannot be shown using RGB.

To test DSC output format, a debugfs entry is created to force
this output format. However, before setting debugfs entry, we
have checked capability i.e. output format is supported by both
platform and sink.

Also, each mode doesn't support all output formats; so if both
sink and platform support an output format, we will do a try
commit with each mode till we get a successful commit.

v2: -used is_dsc_ycbcr420_supported() (Ankit)
    -handled try-commit correctly (Ankit)
    -instead of flag use enum for output formats (Ankit)
v3: -instead of global count, pass count as para (Ankit)
    -print output format (Ankit)
v4: -optimized while loop (Jouni)
    -used only try commit (Jouni)
    -fixed get_next_mode() (Jouni)
v5: -made generic test to validate all output formats (Jani N)
v6: -fixed assert (Jouni)
    -if mode == NULL output_format debugfs reset didn't happen, fixed
v7: -indentation fixes (Kamil)
v8: -rebase
    -removed pipe_output_combo_valid() (Bhanu)
v9: -use while (index < connector->count_modes) instead of
     while (1) (Bhanu)

Signed-off-by: Swati Sharma <swati2.sharma@intel.com>
Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Reviewed-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
---
 lib/igt_kms.c               |  18 +++++
 lib/igt_kms.h               |   1 +
 tests/i915/kms_dsc.c        | 137 ++++++++++++++++++++++++++----------
 tests/i915/kms_dsc_helper.c |  36 ++++++++++
 tests/i915/kms_dsc_helper.h |   4 ++
 5 files changed, 157 insertions(+), 39 deletions(-)

diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index e085e234..c5484148 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -967,6 +967,24 @@ const char *kmstest_scaling_filter_str(int filter)
 	return find_type_name(scaling_filter_names, filter);
 }
 
+static const struct type_name dsc_output_format_names[] = {
+	{ DSC_FORMAT_RGB, "RGB" },
+	{ DSC_FORMAT_YCBCR420, "YCBCR420" },
+	{ DSC_FORMAT_YCBCR444, "YCBCR444" },
+	{}
+};
+
+/**
+ * kmstest_dsc_output_format_str:
+ * @output_format: DSC_FORMAT_* output format value
+ *
+ * Returns: A string representing the output format @output format.
+ */
+const char *kmstest_dsc_output_format_str(int output_format)
+{
+	return find_type_name(dsc_output_format_names, output_format);
+}
+
 static const struct type_name connector_type_names[] = {
 	{ DRM_MODE_CONNECTOR_Unknown, "Unknown" },
 	{ DRM_MODE_CONNECTOR_VGA, "VGA" },
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 41e041b6..1b6988c1 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -118,6 +118,7 @@ const char *kmstest_encoder_type_str(int type);
 const char *kmstest_connector_status_str(int status);
 const char *kmstest_connector_type_str(int type);
 const char *kmstest_scaling_filter_str(int filter);
+const char *kmstest_dsc_output_format_str(int output_format);
 
 void kmstest_dump_mode(drmModeModeInfo *mode);
 #define MAX_HDISPLAY_PER_PIPE 5120
diff --git a/tests/i915/kms_dsc.c b/tests/i915/kms_dsc.c
index c4dfc925..3ce28f84 100644
--- a/tests/i915/kms_dsc.c
+++ b/tests/i915/kms_dsc.c
@@ -36,7 +36,8 @@ IGT_TEST_DESCRIPTION("Test to validate display stream compression");
 
 enum dsc_test_type {
 	TEST_DSC_BASIC,
-	TEST_DSC_BPC
+	TEST_DSC_BPC,
+	TEST_DSC_OUTPUT_FORMAT,
 };
 
 typedef struct {
@@ -44,6 +45,7 @@ typedef struct {
 	uint32_t devid;
 	igt_display_t display;
 	struct igt_fb fb_test_pattern;
+	enum dsc_output_format output_format;
 	unsigned int plane_format;
 	igt_output_t *output;
 	int input_bpc;
@@ -51,7 +53,8 @@ typedef struct {
 	enum pipe pipe;
 } data_t;
 
-static int format_list[] =  {DRM_FORMAT_XYUV8888, DRM_FORMAT_XRGB2101010, DRM_FORMAT_XRGB16161616F, DRM_FORMAT_YUYV};
+static int output_format_list[] = {DSC_FORMAT_YCBCR420, DSC_FORMAT_YCBCR444};
+static int format_list[] = {DRM_FORMAT_XYUV8888, DRM_FORMAT_XRGB2101010, DRM_FORMAT_XRGB16161616F, DRM_FORMAT_YUYV};
 static uint32_t bpc_list[] = {12, 10, 8};
 
 static inline void manual(const char *expected)
@@ -71,24 +74,26 @@ static drmModeModeInfo *get_highres_mode(igt_output_t *output)
 	return highest_mode;
 }
 
-static bool pipe_output_combo_valid(data_t *data)
+static drmModeModeInfo *get_next_mode(igt_output_t *output, int index)
 {
-	igt_output_t *output = data->output;
-	drmModeModeInfo *mode;
-	bool ret = true;
-
-	igt_display_reset(&data->display);
-	mode = get_highres_mode(output);
+	drmModeConnector *connector = output->config.connector;
+	drmModeModeInfo *next_mode = NULL;
 
-	igt_output_set_pipe(output, data->pipe);
-	igt_output_override_mode(output, mode);
+	if (index < connector->count_modes)
+		next_mode = &connector->modes[index];
 
-	if (!i915_pipe_output_combo_valid(&data->display))
-		ret = false;
+	return next_mode;
+}
 
-	igt_output_set_pipe(output, PIPE_NONE);
+static void test_reset(data_t *data)
+{
+	igt_debug("Reset input BPC\n");
+	data->input_bpc = 0;
+	force_dsc_enable_bpc(data->drm_fd, data->output, data->input_bpc);
 
-	return ret;
+	igt_debug("Reset DSC output format\n");
+	data->output_format = DSC_FORMAT_RGB;
+	force_dsc_output_format(data->drm_fd, data->output, data->output_format);
 }
 
 static void test_cleanup(data_t *data)
@@ -106,11 +111,14 @@ static void test_cleanup(data_t *data)
 /* re-probe connectors and do a modeset with DSC */
 static void update_display(data_t *data, enum dsc_test_type test_type)
 {
+	int ret;
 	bool enabled;
+	int index = 0;
 	igt_plane_t *primary;
 	drmModeModeInfo *mode;
 	igt_output_t *output = data->output;
 	igt_display_t *display = &data->display;
+	drmModeConnector *connector = output->config.connector;
 
 	/* sanitize the state before starting the subtest */
 	igt_display_reset(display);
@@ -125,26 +133,57 @@ static void update_display(data_t *data, enum dsc_test_type test_type)
 		force_dsc_enable_bpc(data->drm_fd, data->output, data->input_bpc);
 	}
 
-	igt_output_set_pipe(output, data->pipe);
-
-	mode = get_highres_mode(output);
-	igt_require(mode != NULL);
-	igt_output_override_mode(output, mode);
+	if (test_type == TEST_DSC_OUTPUT_FORMAT) {
+		igt_debug("Trying to set DSC %s output format\n",
+			   kmstest_dsc_output_format_str(data->output_format));
+		force_dsc_output_format(data->drm_fd, data->output, data->output_format);
+	}
 
+	igt_output_set_pipe(output, data->pipe);
 	primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
 
 	igt_skip_on(!igt_plane_has_format_mod(primary, data->plane_format,
 		    DRM_FORMAT_MOD_LINEAR));
 
-	igt_create_pattern_fb(data->drm_fd,
-			      mode->hdisplay,
-			      mode->vdisplay,
-			      data->plane_format,
-			      DRM_FORMAT_MOD_LINEAR,
-			      &data->fb_test_pattern);
+	do {
+		if (data->output_format == DSC_FORMAT_RGB)
+			mode = get_highres_mode(output);
+		else
+			mode = get_next_mode(output, index++);
+
+		if (mode == NULL)
+			goto reset;
 
-	igt_plane_set_fb(primary, &data->fb_test_pattern);
-	igt_display_commit(display);
+		igt_output_override_mode(output, mode);
+
+		if (!i915_pipe_output_combo_valid(display)) {
+			if (data->output_format == DSC_FORMAT_RGB) {
+				igt_info("No valid pipe/output/mode found.\n");
+
+				mode = NULL;
+				goto reset;
+			} else {
+				continue;
+			}
+		}
+
+		igt_create_pattern_fb(data->drm_fd,
+				      mode->hdisplay,
+				      mode->vdisplay,
+				      data->plane_format,
+				      DRM_FORMAT_MOD_LINEAR,
+				      &data->fb_test_pattern);
+		igt_plane_set_fb(primary, &data->fb_test_pattern);
+
+		ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+		if (data->output_format == DSC_FORMAT_RGB || ret == 0)
+			break;
+
+		igt_remove_fb(data->drm_fd, &data->fb_test_pattern);
+	} while (index < connector->count_modes);
+
+	if (ret != 0)
+		goto reset;
 
 	/* until we have CRC check support, manually check if RGB test
 	 * pattern has no corruption.
@@ -159,20 +198,22 @@ static void update_display(data_t *data, enum dsc_test_type test_type)
 				enabled ? "ON" : "OFF");
 
 	restore_force_dsc_en();
-	igt_debug("Reset compression BPC\n");
-	data->input_bpc = 0;
-	force_dsc_enable_bpc(data->drm_fd, data->output, data->input_bpc);
 
 	igt_assert_f(enabled,
 		     "Default DSC enable failed on connector: %s pipe: %s\n",
 		     output->name,
 		     kmstest_pipe_name(data->pipe));
 
+reset:
+	test_reset(data);
+
 	test_cleanup(data);
+	igt_skip_on(mode == NULL);
+	igt_assert_eq(ret, 0);
 }
 
 static void test_dsc(data_t *data, enum dsc_test_type test_type, int bpc,
-		     unsigned int plane_format)
+		     unsigned int plane_format, enum dsc_output_format output_format)
 {
 	igt_display_t *display = &data->display;
 	igt_output_t *output;
@@ -180,6 +221,7 @@ static void test_dsc(data_t *data, enum dsc_test_type test_type, int bpc,
 	enum pipe pipe;
 
 	for_each_pipe_with_valid_output(display, pipe, output) {
+		data->output_format = output_format;
 		data->plane_format = plane_format;
 		data->input_bpc = bpc;
 		data->output = output;
@@ -188,17 +230,21 @@ static void test_dsc(data_t *data, enum dsc_test_type test_type, int bpc,
 		if (!check_dsc_on_connector(data->drm_fd, data->output))
 			continue;
 
-		if (!check_gen11_dp_constraint(data->drm_fd, data->output, data->pipe))
+		if (!is_dsc_output_format_supported(data->drm_fd, data->disp_ver,
+						    data->output, data->output_format))
 			continue;
 
-		if (!check_gen11_bpc_constraint(data->drm_fd, data->output, data->input_bpc))
+		if (!check_gen11_dp_constraint(data->drm_fd, data->output, data->pipe))
 			continue;
 
-		if (!pipe_output_combo_valid(data))
+		if (!check_gen11_bpc_constraint(data->drm_fd, data->output, data->input_bpc))
 			continue;
 
 		if (test_type == TEST_DSC_BPC)
 			snprintf(name, sizeof(name), "-%dbpc-%s", data->input_bpc, igt_format_str(data->plane_format));
+		else if (test_type == TEST_DSC_OUTPUT_FORMAT)
+			snprintf(name, sizeof(name), "-%s-%s", kmstest_dsc_output_format_str(data->output_format),
+							       igt_format_str(data->plane_format));
 		else
 			snprintf(name, sizeof(name), "-%s", igt_format_str(data->plane_format));
 
@@ -226,14 +272,16 @@ igt_main
 		     "by a connector by forcing DSC on all connectors that support it "
 		     "with default parameters");
 	igt_subtest_with_dynamic("dsc-basic")
-			test_dsc(&data, TEST_DSC_BASIC, 0, DRM_FORMAT_XRGB8888);
+			test_dsc(&data, TEST_DSC_BASIC, 0,
+				 DRM_FORMAT_XRGB8888, DSC_FORMAT_RGB);
 
 	igt_describe("Tests basic display stream compression functionality if supported "
 		     "by a connector by forcing DSC on all connectors that support it "
 		     "with default parameters and creating fb with diff formats");
 	igt_subtest_with_dynamic("dsc-with-formats") {
 		for (int k = 0; k < ARRAY_SIZE(format_list); k++)
-			test_dsc(&data, TEST_DSC_BASIC, 0, format_list[k]);
+			test_dsc(&data, TEST_DSC_BASIC, 0,
+				 format_list[k], DSC_FORMAT_RGB);
 	}
 
 	igt_describe("Tests basic display stream compression functionality if supported "
@@ -241,7 +289,8 @@ igt_main
 		     "with certain input BPC for the connector");
 	igt_subtest_with_dynamic("dsc-with-bpc") {
 		for (int j = 0; j < ARRAY_SIZE(bpc_list); j++)
-			test_dsc(&data, TEST_DSC_BPC, bpc_list[j], DRM_FORMAT_XRGB8888);
+			test_dsc(&data, TEST_DSC_BPC, bpc_list[j],
+				 DRM_FORMAT_XRGB8888, DSC_FORMAT_RGB);
 	}
 
 	igt_describe("Tests basic display stream compression functionality if supported "
@@ -250,11 +299,21 @@ igt_main
 	igt_subtest_with_dynamic("dsc-with-bpc-formats") {
 		for (int j = 0; j < ARRAY_SIZE(bpc_list); j++) {
 			for (int k = 0; k < ARRAY_SIZE(format_list); k++) {
-				test_dsc(&data, TEST_DSC_BPC, bpc_list[j], format_list[k]);
+				test_dsc(&data, TEST_DSC_BPC, bpc_list[j],
+				format_list[k], DSC_FORMAT_RGB);
 			}
 		}
 	}
 
+	igt_describe("Tests basic display stream compression functionality if supported "
+		     "by a connector by forcing DSC and output format on all connectors "
+		     "that support it");
+	igt_subtest_with_dynamic("dsc-with-output-formats") {
+		for (int k = 0; k < ARRAY_SIZE(output_format_list); k++)
+			test_dsc(&data, TEST_DSC_OUTPUT_FORMAT, 0, DRM_FORMAT_XRGB8888,
+				 output_format_list[k]);
+	}
+
 	igt_fixture {
 		igt_display_fini(&data.display);
 		close(data.drm_fd);
diff --git a/tests/i915/kms_dsc_helper.c b/tests/i915/kms_dsc_helper.c
index e2c278c7..02d1a484 100644
--- a/tests/i915/kms_dsc_helper.c
+++ b/tests/i915/kms_dsc_helper.c
@@ -97,3 +97,39 @@ bool check_gen11_bpc_constraint(int drmfd, igt_output_t *output, int input_bpc)
 
 	return true;
 }
+
+void force_dsc_output_format(int drmfd, igt_output_t *output,
+			     enum dsc_output_format output_format)
+{
+	int ret;
+
+	igt_debug("Forcing DSC %s output format on %s\n",
+		  kmstest_dsc_output_format_str(output_format), output->name);
+	ret = igt_force_dsc_output_format(drmfd, output->name, output_format);
+	igt_assert_f(ret == 0, "forcing dsc output format debugfs_write failed\n");
+}
+
+/* YCbCr420 DSC is supported on display version 14+ with DSC1.2a */
+static bool is_dsc_output_format_supported_by_platform(int disp_ver, enum dsc_output_format output_format)
+{
+	if (disp_ver < 14 && output_format == DSC_FORMAT_YCBCR420) {
+		igt_debug("Output format DSC YCBCR420 not supported on D13 and older platforms\n");
+		return false;
+	}
+
+	return true;
+}
+
+bool is_dsc_output_format_supported(int drmfd, int disp_ver, igt_output_t *output,
+				    enum dsc_output_format output_format)
+{
+	if (!(igt_is_dsc_output_format_supported_by_sink(drmfd, output->name, output_format)) &&
+	     (is_dsc_output_format_supported_by_platform(disp_ver, output_format))) {
+		    igt_debug("DSC %s output format not supported on connector %s\n",
+			       kmstest_dsc_output_format_str(output_format),
+			       output->name);
+			return false;
+		}
+
+	return true;
+}
diff --git a/tests/i915/kms_dsc_helper.h b/tests/i915/kms_dsc_helper.h
index b3828dcd..198f5afa 100644
--- a/tests/i915/kms_dsc_helper.h
+++ b/tests/i915/kms_dsc_helper.h
@@ -29,5 +29,9 @@ void kms_dsc_exit_handler(int sig);
 bool check_dsc_on_connector(int drmfd, igt_output_t *output);
 bool check_gen11_dp_constraint(int drmfd, igt_output_t *output, enum pipe pipe);
 bool check_gen11_bpc_constraint(int drmfd, igt_output_t *output, int input_bpc);
+void force_dsc_output_format(int drmfd, igt_output_t *output,
+			     enum dsc_output_format output_format);
+bool is_dsc_output_format_supported(int disp_ver, int drmfd, igt_output_t *output,
+				    enum dsc_output_format output_format);
 
 #endif
-- 
2.25.1

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

* [igt-dev] ✓ Fi.CI.BAT: success for Enable VDSC output formats validation (rev7)
  2023-05-04 10:52 [igt-dev] [PATCH i-g-t 0/2] Enable VDSC output formats validation Swati Sharma
  2023-05-04 10:52 ` [igt-dev] [PATCH i-g-t 1/2] lib/dsc: Add helpers for VDSC output format debugfs entry Swati Sharma
  2023-05-04 10:52 ` [igt-dev] [PATCH i-g-t 2/2] tests/i915/kms_dsc: Enable validation for VDSC output formats Swati Sharma
@ 2023-05-04 14:05 ` Patchwork
  2023-05-04 17:02 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
  3 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2023-05-04 14:05 UTC (permalink / raw)
  To: Swati Sharma; +Cc: igt-dev

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

== Series Details ==

Series: Enable VDSC output formats validation (rev7)
URL   : https://patchwork.freedesktop.org/series/113253/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_13108 -> IGTPW_8909
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (40 -> 38)
------------------------------

  Missing    (2): fi-snb-2520m bat-mtlp-6 

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

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

### IGT changes ###

#### Suppressed ####

  The following results come from untrusted machines, tests, or statuses.
  They do not affect the overall result.

  * igt@i915_pm_rpm@basic-rte:
    - {bat-mtlp-8}:       [PASS][1] -> [TIMEOUT][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13108/bat-mtlp-8/igt@i915_pm_rpm@basic-rte.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/bat-mtlp-8/igt@i915_pm_rpm@basic-rte.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@i915_selftest@live@gt_heartbeat:
    - fi-apl-guc:         [PASS][3] -> [DMESG-FAIL][4] ([i915#5334])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13108/fi-apl-guc/igt@i915_selftest@live@gt_heartbeat.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/fi-apl-guc/igt@i915_selftest@live@gt_heartbeat.html

  * igt@i915_selftest@live@slpc:
    - bat-rpls-2:         NOTRUN -> [DMESG-WARN][5] ([i915#6367])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/bat-rpls-2/igt@i915_selftest@live@slpc.html

  * igt@kms_chamelium_hpd@common-hpd-after-suspend:
    - fi-bsw-nick:        NOTRUN -> [SKIP][6] ([fdo#109271]) +1 similar issue
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/fi-bsw-nick/igt@kms_chamelium_hpd@common-hpd-after-suspend.html
    - bat-rpls-1:         NOTRUN -> [SKIP][7] ([i915#7828])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/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][8] ([i915#1845])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/bat-rpls-1/igt@kms_pipe_crc_basic@suspend-read-crc.html

  
#### Possible fixes ####

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

  * igt@i915_selftest@live@execlists:
    - fi-bsw-nick:        [ABORT][11] ([i915#7911] / [i915#7913]) -> [PASS][12]
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13108/fi-bsw-nick/igt@i915_selftest@live@execlists.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/fi-bsw-nick/igt@i915_selftest@live@execlists.html

  * igt@i915_selftest@live@migrate:
    - bat-atsm-1:         [DMESG-FAIL][13] ([i915#7699] / [i915#7913]) -> [PASS][14]
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13108/bat-atsm-1/igt@i915_selftest@live@migrate.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/bat-atsm-1/igt@i915_selftest@live@migrate.html

  * igt@i915_selftest@live@mman:
    - bat-rpls-2:         [TIMEOUT][15] ([i915#6794] / [i915#7392]) -> [PASS][16]
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13108/bat-rpls-2/igt@i915_selftest@live@mman.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/bat-rpls-2/igt@i915_selftest@live@mman.html

  * igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence@pipe-d-dp-1:
    - bat-dg2-8:          [FAIL][17] ([i915#7932]) -> [PASS][18]
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13108/bat-dg2-8/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence@pipe-d-dp-1.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/bat-dg2-8/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence@pipe-d-dp-1.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
  [i915#1845]: https://gitlab.freedesktop.org/drm/intel/issues/1845
  [i915#5334]: https://gitlab.freedesktop.org/drm/intel/issues/5334
  [i915#6367]: https://gitlab.freedesktop.org/drm/intel/issues/6367
  [i915#6687]: https://gitlab.freedesktop.org/drm/intel/issues/6687
  [i915#6794]: https://gitlab.freedesktop.org/drm/intel/issues/6794
  [i915#7392]: https://gitlab.freedesktop.org/drm/intel/issues/7392
  [i915#7699]: https://gitlab.freedesktop.org/drm/intel/issues/7699
  [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
  [i915#7911]: https://gitlab.freedesktop.org/drm/intel/issues/7911
  [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#8407]: https://gitlab.freedesktop.org/drm/intel/issues/8407


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

  * CI: CI-20190529 -> None
  * IGT: IGT_7277 -> IGTPW_8909

  CI-20190529: 20190529
  CI_DRM_13108: 3ddac02bdbb0e147d2fd025029955aca7c2798a9 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_8909: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/index.html
  IGT_7277: 1cb3507f3ff28d11bd5cfabcde576fe78ddab571 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git


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

+igt@kms_dsc@dsc-with-output-formats

== Logs ==

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

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

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

* [igt-dev] ✓ Fi.CI.IGT: success for Enable VDSC output formats validation (rev7)
  2023-05-04 10:52 [igt-dev] [PATCH i-g-t 0/2] Enable VDSC output formats validation Swati Sharma
                   ` (2 preceding siblings ...)
  2023-05-04 14:05 ` [igt-dev] ✓ Fi.CI.BAT: success for Enable VDSC output formats validation (rev7) Patchwork
@ 2023-05-04 17:02 ` Patchwork
  3 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2023-05-04 17:02 UTC (permalink / raw)
  To: Swati Sharma; +Cc: igt-dev

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

== Series Details ==

Series: Enable VDSC output formats validation (rev7)
URL   : https://patchwork.freedesktop.org/series/113253/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_13108_full -> IGTPW_8909_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

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

  Missing    (1): shard-rkl0 

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@kms_dsc@dsc-with-output-formats (NEW):
    - {shard-rkl}:        NOTRUN -> [SKIP][1]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-rkl-6/igt@kms_dsc@dsc-with-output-formats.html
    - {shard-dg1}:        NOTRUN -> [SKIP][2]
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-dg1-17/igt@kms_dsc@dsc-with-output-formats.html
    - {shard-tglu}:       NOTRUN -> [SKIP][3]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-tglu-10/igt@kms_dsc@dsc-with-output-formats.html

  
New tests
---------

  New tests have been introduced between CI_DRM_13108_full and IGTPW_8909_full:

### New IGT tests (1) ###

  * igt@kms_dsc@dsc-with-output-formats:
    - Statuses : 6 skip(s)
    - Exec time: [0.0] s

  

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

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

### IGT changes ###

#### Issues hit ####

  * igt@core_hotunplug@unbind-rebind:
    - shard-snb:          [PASS][4] -> [ABORT][5] ([i915#4528] / [i915#8213])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13108/shard-snb5/igt@core_hotunplug@unbind-rebind.html
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-snb5/igt@core_hotunplug@unbind-rebind.html

  * igt@gem_busy@close-race:
    - shard-glk:          [PASS][6] -> [ABORT][7] ([i915#6016])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13108/shard-glk1/igt@gem_busy@close-race.html
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-glk9/igt@gem_busy@close-race.html

  * igt@gem_exec_fair@basic-pace@vcs0:
    - shard-glk:          [PASS][8] -> [FAIL][9] ([i915#2842]) +2 similar issues
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13108/shard-glk7/igt@gem_exec_fair@basic-pace@vcs0.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-glk1/igt@gem_exec_fair@basic-pace@vcs0.html

  * igt@gem_exec_suspend@basic-s3@smem:
    - shard-apl:          [PASS][10] -> [ABORT][11] ([i915#8213])
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13108/shard-apl7/igt@gem_exec_suspend@basic-s3@smem.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-apl2/igt@gem_exec_suspend@basic-s3@smem.html

  * igt@gem_lmem_swapping@verify-random-ccs:
    - shard-glk:          NOTRUN -> [SKIP][12] ([fdo#109271] / [i915#4613]) +2 similar issues
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-glk6/igt@gem_lmem_swapping@verify-random-ccs.html

  * igt@kms_atomic@plane-primary-overlay-mutable-zpos:
    - shard-glk:          NOTRUN -> [SKIP][13] ([fdo#109271]) +84 similar issues
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-glk5/igt@kms_atomic@plane-primary-overlay-mutable-zpos.html

  * igt@kms_ccs@pipe-c-bad-pixel-format-y_tiled_gen12_rc_ccs_cc:
    - shard-glk:          NOTRUN -> [SKIP][14] ([fdo#109271] / [i915#3886]) +3 similar issues
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-glk2/igt@kms_ccs@pipe-c-bad-pixel-format-y_tiled_gen12_rc_ccs_cc.html

  * igt@kms_content_protection@atomic:
    - shard-snb:          NOTRUN -> [SKIP][15] ([fdo#109271]) +81 similar issues
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-snb5/igt@kms_content_protection@atomic.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions:
    - shard-glk:          [PASS][16] -> [FAIL][17] ([i915#2346]) +1 similar issue
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13108/shard-glk2/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-glk5/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html

  * igt@kms_dsc@dsc-with-output-formats (NEW):
    - shard-apl:          NOTRUN -> [SKIP][18] ([fdo#109271])
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-apl4/igt@kms_dsc@dsc-with-output-formats.html

  * igt@kms_psr2_sf@overlay-primary-update-sf-dmg-area:
    - shard-glk:          NOTRUN -> [SKIP][19] ([fdo#109271] / [i915#658])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-glk2/igt@kms_psr2_sf@overlay-primary-update-sf-dmg-area.html

  
#### Possible fixes ####

  * igt@gem_eio@reset-stress:
    - shard-snb:          [TIMEOUT][20] ([i915#3063]) -> [PASS][21]
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13108/shard-snb7/igt@gem_eio@reset-stress.html
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-snb1/igt@gem_eio@reset-stress.html

  * igt@gem_exec_fair@basic-none@vecs0:
    - {shard-rkl}:        [FAIL][22] ([i915#2842]) -> [PASS][23]
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13108/shard-rkl-4/igt@gem_exec_fair@basic-none@vecs0.html
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-rkl-3/igt@gem_exec_fair@basic-none@vecs0.html

  * igt@i915_module_load@reload-no-display:
    - shard-snb:          [ABORT][24] ([i915#4528] / [i915#8393]) -> [PASS][25]
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13108/shard-snb4/igt@i915_module_load@reload-no-display.html
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-snb5/igt@i915_module_load@reload-no-display.html

  * igt@i915_pm_lpsp@kms-lpsp@kms-lpsp-hdmi-a:
    - {shard-rkl}:        [SKIP][26] ([i915#1937]) -> [PASS][27]
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13108/shard-rkl-1/igt@i915_pm_lpsp@kms-lpsp@kms-lpsp-hdmi-a.html
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-rkl-7/igt@i915_pm_lpsp@kms-lpsp@kms-lpsp-hdmi-a.html

  * igt@i915_pm_rps@waitboost:
    - {shard-dg1}:        [FAIL][28] ([i915#8229]) -> [PASS][29]
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13108/shard-dg1-18/igt@i915_pm_rps@waitboost.html
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-dg1-12/igt@i915_pm_rps@waitboost.html

  * igt@kms_cursor_legacy@single-bo@pipe-b:
    - {shard-rkl}:        [INCOMPLETE][30] ([i915#8011]) -> [PASS][31]
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13108/shard-rkl-7/igt@kms_cursor_legacy@single-bo@pipe-b.html
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-rkl-4/igt@kms_cursor_legacy@single-bo@pipe-b.html

  * igt@kms_vblank@pipe-c-accuracy-idle:
    - shard-glk:          [FAIL][32] ([i915#43]) -> [PASS][33]
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13108/shard-glk3/igt@kms_vblank@pipe-c-accuracy-idle.html
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-glk4/igt@kms_vblank@pipe-c-accuracy-idle.html

  * igt@perf@stress-open-close@0-rcs0:
    - shard-glk:          [ABORT][34] ([i915#5213] / [i915#7941]) -> [PASS][35]
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13108/shard-glk1/igt@perf@stress-open-close@0-rcs0.html
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-glk3/igt@perf@stress-open-close@0-rcs0.html

  * igt@perf_pmu@idle@rcs0:
    - {shard-rkl}:        [FAIL][36] ([i915#4349]) -> [PASS][37]
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13108/shard-rkl-4/igt@perf_pmu@idle@rcs0.html
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/shard-rkl-1/igt@perf_pmu@idle@rcs0.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#109280]: https://bugs.freedesktop.org/show_bug.cgi?id=109280
  [fdo#109285]: https://bugs.freedesktop.org/show_bug.cgi?id=109285
  [fdo#109289]: https://bugs.freedesktop.org/show_bug.cgi?id=109289
  [fdo#109295]: https://bugs.freedesktop.org/show_bug.cgi?id=109295
  [fdo#109300]: https://bugs.freedesktop.org/show_bug.cgi?id=109300
  [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#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614
  [fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615
  [fdo#111656]: https://bugs.freedesktop.org/show_bug.cgi?id=111656
  [fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
  [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#1397]: https://gitlab.freedesktop.org/drm/intel/issues/1397
  [i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825
  [i915#1937]: https://gitlab.freedesktop.org/drm/intel/issues/1937
  [i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346
  [i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527
  [i915#2575]: https://gitlab.freedesktop.org/drm/intel/issues/2575
  [i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
  [i915#2681]: https://gitlab.freedesktop.org/drm/intel/issues/2681
  [i915#2705]: https://gitlab.freedesktop.org/drm/intel/issues/2705
  [i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280
  [i915#284]: https://gitlab.freedesktop.org/drm/intel/issues/284
  [i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
  [i915#3023]: https://gitlab.freedesktop.org/drm/intel/issues/3023
  [i915#3063]: https://gitlab.freedesktop.org/drm/intel/issues/3063
  [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#3299]: https://gitlab.freedesktop.org/drm/intel/issues/3299
  [i915#3301]: https://gitlab.freedesktop.org/drm/intel/issues/3301
  [i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
  [i915#3361]: https://gitlab.freedesktop.org/drm/intel/issues/3361
  [i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458
  [i915#3469]: https://gitlab.freedesktop.org/drm/intel/issues/3469
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [i915#3591]: https://gitlab.freedesktop.org/drm/intel/issues/3591
  [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#3743]: https://gitlab.freedesktop.org/drm/intel/issues/3743
  [i915#3804]: https://gitlab.freedesktop.org/drm/intel/issues/3804
  [i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886
  [i915#3955]: https://gitlab.freedesktop.org/drm/intel/issues/3955
  [i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070
  [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
  [i915#4078]: https://gitlab.freedesktop.org/drm/intel/issues/4078
  [i915#4098]: https://gitlab.freedesktop.org/drm/intel/issues/4098
  [i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
  [i915#43]: https://gitlab.freedesktop.org/drm/intel/issues/43
  [i915#4349]: https://gitlab.freedesktop.org/drm/intel/issues/4349
  [i915#4525]: https://gitlab.freedesktop.org/drm/intel/issues/4525
  [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#4816]: https://gitlab.freedesktop.org/drm/intel/issues/4816
  [i915#4833]: https://gitlab.freedesktop.org/drm/intel/issues/4833
  [i915#4860]: https://gitlab.freedesktop.org/drm/intel/issues/4860
  [i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176
  [i915#5213]: https://gitlab.freedesktop.org/drm/intel/issues/5213
  [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#533]: https://gitlab.freedesktop.org/drm/intel/issues/533
  [i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354
  [i915#5784]: https://gitlab.freedesktop.org/drm/intel/issues/5784
  [i915#6016]: https://gitlab.freedesktop.org/drm/intel/issues/6016
  [i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
  [i915#6301]: https://gitlab.freedesktop.org/drm/intel/issues/6301
  [i915#6433]: https://gitlab.freedesktop.org/drm/intel/issues/6433
  [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
  [i915#6768]: https://gitlab.freedesktop.org/drm/intel/issues/6768
  [i915#7116]: https://gitlab.freedesktop.org/drm/intel/issues/7116
  [i915#7118]: https://gitlab.freedesktop.org/drm/intel/issues/7118
  [i915#7711]: https://gitlab.freedesktop.org/drm/intel/issues/7711
  [i915#7742]: https://gitlab.freedesktop.org/drm/intel/issues/7742
  [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
  [i915#7941]: https://gitlab.freedesktop.org/drm/intel/issues/7941
  [i915#8011]: https://gitlab.freedesktop.org/drm/intel/issues/8011
  [i915#8213]: https://gitlab.freedesktop.org/drm/intel/issues/8213
  [i915#8229]: https://gitlab.freedesktop.org/drm/intel/issues/8229
  [i915#8292]: https://gitlab.freedesktop.org/drm/intel/issues/8292
  [i915#8381]: https://gitlab.freedesktop.org/drm/intel/issues/8381
  [i915#8393]: https://gitlab.freedesktop.org/drm/intel/issues/8393


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

  * CI: CI-20190529 -> None
  * IGT: IGT_7277 -> IGTPW_8909
  * Piglit: piglit_4509 -> None

  CI-20190529: 20190529
  CI_DRM_13108: 3ddac02bdbb0e147d2fd025029955aca7c2798a9 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_8909: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_8909/index.html
  IGT_7277: 1cb3507f3ff28d11bd5cfabcde576fe78ddab571 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

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

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

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

end of thread, other threads:[~2023-05-04 17:02 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-04 10:52 [igt-dev] [PATCH i-g-t 0/2] Enable VDSC output formats validation Swati Sharma
2023-05-04 10:52 ` [igt-dev] [PATCH i-g-t 1/2] lib/dsc: Add helpers for VDSC output format debugfs entry Swati Sharma
2023-05-04 10:52 ` [igt-dev] [PATCH i-g-t 2/2] tests/i915/kms_dsc: Enable validation for VDSC output formats Swati Sharma
2023-05-04 14:05 ` [igt-dev] ✓ Fi.CI.BAT: success for Enable VDSC output formats validation (rev7) Patchwork
2023-05-04 17:02 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
  -- strict thread matches above, loose matches on Subject: below --
2023-05-03 11:40 [igt-dev] [PATCH i-g-t 0/2] Enable VDSC output formats validation Swati Sharma
2023-05-03 11:40 ` [igt-dev] [PATCH i-g-t 2/2] tests/i915/kms_dsc: Enable validation for VDSC output formats Swati Sharma
2023-05-04  5:40   ` Modem, Bhanuprakash
2023-05-04  6:21     ` Sharma, Swati2

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