All of lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH i-g-t] tests/kms_hdr: Test cleanup
@ 2022-03-08 10:58 Swati Sharma
  2022-03-08 18:51 ` [igt-dev] ✗ Fi.CI.BAT: failure for tests/kms_hdr: Test cleanup (rev4) Patchwork
  0 siblings, 1 reply; 4+ messages in thread
From: Swati Sharma @ 2022-03-08 10:58 UTC (permalink / raw)
  To: igt-dev

Test is updated with
    *Dynamic subtests
    *Subtests renaming
    *Removal of valid_test check
    *Code indentation
    *Addition of igt_display_reset()
    *Restricting tests for #pipes=1 at one stage early

v2: -removal of redundant igt_display_reset() (Bhanu)
    -removal of igt_info (Bhanu)

Signed-off-by: Swati Sharma <swati2.sharma@intel.com>
Reviewed-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>
---
 tests/kms_hdr.c | 431 ++++++++++++++++++++++--------------------------
 1 file changed, 197 insertions(+), 234 deletions(-)

diff --git a/tests/kms_hdr.c b/tests/kms_hdr.c
index 35e25f4d..247eb658 100644
--- a/tests/kms_hdr.c
+++ b/tests/kms_hdr.c
@@ -173,106 +173,75 @@ static void prepare_test(data_t *data, igt_output_t *output, enum pipe pipe)
 	data->h = data->mode->vdisplay;
 }
 
-static bool igt_pipe_is_free(igt_display_t *display, enum pipe pipe)
-{
-	int i;
-
-	for (i = 0; i < display->n_outputs; i++)
-		if (display->outputs[i].pending_pipe == pipe)
-			return false;
-
-	return true;
-}
-
-static void test_bpc_switch_on_output(data_t *data, igt_output_t *output,
+static void test_bpc_switch_on_output(data_t *data, enum pipe pipe,
+				      igt_output_t *output,
 				      uint32_t flags)
 {
 	igt_display_t *display = &data->display;
 	igt_crc_t ref_crc, new_crc;
-	enum pipe pipe;
 	igt_fb_t afb;
 	int afb_id, ret;
 
-	for_each_pipe(display, pipe) {
-		if (!igt_pipe_connector_valid(pipe, output))
-			continue;
-		/*
-		 * If previous subtest of connector failed, pipe
-		 * attached to that connector is not released.
-		 * Because of that we have to choose the non
-		 * attached pipe for this subtest.
-		 */
-		if (!igt_pipe_is_free(display, pipe))
-			continue;
-
-		prepare_test(data, output, pipe);
-
-		/* 10-bit formats are slow, so limit the size. */
-		afb_id = igt_create_fb(data->fd, 512, 512, DRM_FORMAT_XRGB2101010, 0, &afb);
-		igt_assert(afb_id);
+	prepare_test(data, output, pipe);
 
-		draw_hdr_pattern(&afb);
-
-		/* Plane may be required to fit fullscreen. Check it here and allow
-		 * smaller plane size in following tests.
-		 */
-		igt_plane_set_fb(data->primary, &afb);
-		igt_plane_set_size(data->primary, data->w, data->h);
-		ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY, NULL);
-		if (!ret) {
-			data->w = afb.width;
-			data->h = afb.height;
-		}
+	/* 10-bit formats are slow, so limit the size. */
+	afb_id = igt_create_fb(data->fd, 512, 512, DRM_FORMAT_XRGB2101010, 0, &afb);
+	igt_assert(afb_id);
 
-		/* Start in 8bpc. */
-		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
-		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-		/*
-		 * i915 driver doesn't expose max bpc as debugfs entry,
-		 * so limiting assert only for amd driver.
-		 */
-		if (is_amdgpu_device(data->fd))
-			assert_output_bpc(data, 8);
-
-		/*
-		 * amdgpu requires a primary plane when the CRTC is enabled.
-		 * However, some older Intel hardware (hsw) have scaling
-		 * requirements that are not met by the plane, so remove it
-		 * for non-AMD devices.
-		 */
-		if (!is_amdgpu_device(data->fd))
-			igt_plane_set_fb(data->primary, NULL);
+	draw_hdr_pattern(&afb);
 
-		/* Switch to 10bpc. */
-		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 10);
-		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-		if (is_amdgpu_device(data->fd))
-			assert_output_bpc(data, 10);
-
-		/* Verify that the CRC are equal after DPMS or suspend. */
-		igt_pipe_crc_collect_crc(data->pipe_crc, &ref_crc);
-		test_cycle_flags(data, flags);
-		igt_pipe_crc_collect_crc(data->pipe_crc, &new_crc);
-
-		/* Drop back to 8bpc. */
-		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
-		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-		if (is_amdgpu_device(data->fd))
-			assert_output_bpc(data, 8);
-
-		/* CRC capture is clamped to 8bpc, so capture should match. */
-		igt_assert_crc_equal(&ref_crc, &new_crc);
+	/* Plane may be required to fit fullscreen. Check it here and allow
+	 * smaller plane size in following tests.
+	 */
+	igt_plane_set_fb(data->primary, &afb);
+	igt_plane_set_size(data->primary, data->w, data->h);
+	ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY, NULL);
+	if (!ret) {
+		data->w = afb.width;
+		data->h = afb.height;
+	}
 
-		test_fini(data);
-		igt_remove_fb(data->fd, &afb);
+	/* Start in 8bpc. */
+	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
+	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	/*
+	 * i915 driver doesn't expose max bpc as debugfs entry,
+	 * so limiting assert only for amd driver.
+	 */
+	if (is_amdgpu_device(data->fd))
+		assert_output_bpc(data, 8);
 
-		/*
-		 * Testing a output with a pipe is enough for HDR
-		 * testing. No ROI in testing the connector with other
-		 * pipes. So break the loop on pipe.
-		 */
-		break;
-	}
+	/*
+	 * amdgpu requires a primary plane when the CRTC is enabled.
+	 * However, some older Intel hardware (hsw) have scaling
+	 * requirements that are not met by the plane, so remove it
+	 * for non-AMD devices.
+	 */
+	if (!is_amdgpu_device(data->fd))
+		igt_plane_set_fb(data->primary, NULL);
+
+	/* Switch to 10bpc. */
+	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 10);
+	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	if (is_amdgpu_device(data->fd))
+		assert_output_bpc(data, 10);
+
+	/* Verify that the CRC are equal after DPMS or suspend. */
+	igt_pipe_crc_collect_crc(data->pipe_crc, &ref_crc);
+	test_cycle_flags(data, flags);
+	igt_pipe_crc_collect_crc(data->pipe_crc, &new_crc);
+
+	/* Drop back to 8bpc. */
+	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
+	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	if (is_amdgpu_device(data->fd))
+		assert_output_bpc(data, 8);
+
+	/* CRC capture is clamped to 8bpc, so capture should match. */
+	igt_assert_crc_equal(&ref_crc, &new_crc);
+
+	test_fini(data);
+	igt_remove_fb(data->fd, &afb);
 }
 
 /* Returns true if an output supports max bpc property. */
@@ -282,21 +251,27 @@ static bool has_max_bpc(igt_output_t *output)
 	       igt_output_get_prop(output, IGT_CONNECTOR_MAX_BPC);
 }
 
-static void test_bpc_switch(data_t *data, uint32_t flags)
+static void test_bpc_switch(data_t *data, const char *test_name, uint32_t flags)
 {
+	igt_display_t *display = &data->display;
 	igt_output_t *output;
-	int valid_tests = 0;
 
-	for_each_connected_output(&data->display, output) {
+	for_each_connected_output(display, output) {
+		enum pipe pipe;
+
 		if (!has_max_bpc(output))
 			continue;
 
-		igt_info("BPC switch test execution on %s\n", output->name);
-		test_bpc_switch_on_output(data, output, flags);
-		valid_tests++;
+		for_each_pipe(display, pipe) {
+			if (igt_pipe_connector_valid(pipe, output)) {
+				 igt_dynamic_f("%s-%s-pipe-%s",
+					        test_name, output->name, kmstest_pipe_name(pipe))
+					test_bpc_switch_on_output(data, pipe, output, flags);
+			/* One pipe is enough */
+				break;
+			}
+		}
 	}
-
-	igt_require_f(valid_tests, "No connector found with max_bpc connector property\n");
 }
 
 static bool cta_block(const char *edid_ext)
@@ -426,68 +401,58 @@ static void fill_hdr_output_metadata_st2048(struct hdr_output_metadata *meta)
 	meta->hdmi_metadata_type1.max_cll = 500;   /* 500 nits */
 }
 
-static void test_static_toggle(data_t *data, igt_output_t *output,
+static void test_static_toggle(data_t *data, enum pipe pipe,
+			       igt_output_t *output,
 			       uint32_t flags)
 {
 	igt_display_t *display = &data->display;
 	struct hdr_output_metadata hdr;
 	igt_crc_t ref_crc, new_crc;
-	enum pipe pipe;
 	igt_fb_t afb;
 	int afb_id;
 
-	for_each_pipe(display, pipe) {
-		if (!igt_pipe_connector_valid(pipe, output))
-			continue;
+	prepare_test(data, output, pipe);
 
-		if (!igt_pipe_is_free(display, pipe))
-			continue;
+	/* 10-bit formats are slow, so limit the size. */
+	afb_id = igt_create_fb(data->fd, 512, 512, DRM_FORMAT_XRGB2101010, 0, &afb);
+	igt_assert(afb_id);
 
-		prepare_test(data, output, pipe);
+	draw_hdr_pattern(&afb);
 
-		/* 10-bit formats are slow, so limit the size. */
-		afb_id = igt_create_fb(data->fd, 512, 512, DRM_FORMAT_XRGB2101010, 0, &afb);
-		igt_assert(afb_id);
+	fill_hdr_output_metadata_st2048(&hdr);
 
-		draw_hdr_pattern(&afb);
+	/* Start with no metadata. */
+	igt_plane_set_fb(data->primary, &afb);
+	igt_plane_set_size(data->primary, data->w, data->h);
+	set_hdr_output_metadata(data, NULL);
+	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
+	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	if (is_amdgpu_device(data->fd))
+		assert_output_bpc(data, 8);
 
-		fill_hdr_output_metadata_st2048(&hdr);
+	/* Apply HDR metadata and 10bpc. We expect a modeset for entering. */
+	set_hdr_output_metadata(data, &hdr);
+	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 10);
+	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	if (is_amdgpu_device(data->fd))
+		assert_output_bpc(data, 10);
 
-		/* Start with no metadata. */
-		igt_plane_set_fb(data->primary, &afb);
-		igt_plane_set_size(data->primary, data->w, data->h);
-		set_hdr_output_metadata(data, NULL);
-		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
-		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-		if (is_amdgpu_device(data->fd))
-			assert_output_bpc(data, 8);
+	/* Verify that the CRC are equal after DPMS or suspend. */
+	igt_pipe_crc_collect_crc(data->pipe_crc, &ref_crc);
+	test_cycle_flags(data, flags);
+	igt_pipe_crc_collect_crc(data->pipe_crc, &new_crc);
 
-		/* Apply HDR metadata and 10bpc. We expect a modeset for entering. */
-		set_hdr_output_metadata(data, &hdr);
-		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 10);
-		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-		if (is_amdgpu_device(data->fd))
-			assert_output_bpc(data, 10);
+	/* Disable HDR metadata and drop back to 8bpc. We expect a modeset for exiting. */
+	set_hdr_output_metadata(data, NULL);
+	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
+	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	if (is_amdgpu_device(data->fd))
+		assert_output_bpc(data, 8);
 
-		/* Verify that the CRC are equal after DPMS or suspend. */
-		igt_pipe_crc_collect_crc(data->pipe_crc, &ref_crc);
-		test_cycle_flags(data, flags);
-		igt_pipe_crc_collect_crc(data->pipe_crc, &new_crc);
+	igt_assert_crc_equal(&ref_crc, &new_crc);
 
-		/* Disable HDR metadata and drop back to 8bpc. We expect a modeset for exiting. */
-		set_hdr_output_metadata(data, NULL);
-		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
-		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-		if (is_amdgpu_device(data->fd))
-			assert_output_bpc(data, 8);
-
-		igt_assert_crc_equal(&ref_crc, &new_crc);
-
-		test_fini(data);
-		igt_remove_fb(data->fd, &afb);
-
-		break;
-	}
+	test_fini(data);
+	igt_remove_fb(data->fd, &afb);
 }
 
 /* Fills some test values for HDR metadata targeting SDR. */
@@ -520,88 +485,77 @@ static void fill_hdr_output_metadata_sdr(struct hdr_output_metadata *meta)
 	meta->hdmi_metadata_type1.max_cll = 0;
 }
 
-static void test_static_swap(data_t *data, igt_output_t *output)
+static void test_static_swap(data_t *data, enum pipe pipe, igt_output_t *output)
 {
 	igt_display_t *display = &data->display;
 	igt_crc_t ref_crc, new_crc;
-	enum pipe pipe;
 	igt_fb_t afb;
 	int afb_id;
 	struct hdr_output_metadata hdr;
 
-	for_each_pipe(display, pipe) {
-		if (!igt_pipe_connector_valid(pipe, output))
-			continue;
-
-		if (!igt_pipe_is_free(display, pipe))
-			continue;
-
-		prepare_test(data, output, pipe);
-
-		/* 10-bit formats are slow, so limit the size. */
-		afb_id = igt_create_fb(data->fd, 512, 512, DRM_FORMAT_XRGB2101010, 0, &afb);
-		igt_assert(afb_id);
-
-		draw_hdr_pattern(&afb);
-
-		/* Start in SDR. */
-		igt_plane_set_fb(data->primary, &afb);
-		igt_plane_set_size(data->primary, data->w, data->h);
-		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
+	prepare_test(data, output, pipe);
+
+	/* 10-bit formats are slow, so limit the size. */
+	afb_id = igt_create_fb(data->fd, 512, 512, DRM_FORMAT_XRGB2101010, 0, &afb);
+	igt_assert(afb_id);
+
+	draw_hdr_pattern(&afb);
+
+	/* Start in SDR. */
+	igt_plane_set_fb(data->primary, &afb);
+	igt_plane_set_size(data->primary, data->w, data->h);
+	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
+	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	if (is_amdgpu_device(data->fd))
+		assert_output_bpc(data, 8);
+
+	/* Enter HDR, a modeset is allowed here. */
+	fill_hdr_output_metadata_st2048(&hdr);
+	set_hdr_output_metadata(data, &hdr);
+	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 10);
+	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	if (is_amdgpu_device(data->fd))
+		assert_output_bpc(data, 10);
+
+	igt_pipe_crc_collect_crc(data->pipe_crc, &ref_crc);
+
+	/* Change the mastering information, no modeset allowed
+	 * for amd driver, whereas a modeset is required for i915
+	 * driver. */
+	hdr.hdmi_metadata_type1.max_display_mastering_luminance = 200;
+	hdr.hdmi_metadata_type1.max_fall = 200;
+	hdr.hdmi_metadata_type1.max_cll = 100;
+
+	set_hdr_output_metadata(data, &hdr);
+	if (is_amdgpu_device(data->fd))
+		igt_display_commit_atomic(display, 0, NULL);
+	else
 		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-		if (is_amdgpu_device(data->fd))
-			assert_output_bpc(data, 8);
 
-		/* Enter HDR, a modeset is allowed here. */
-		fill_hdr_output_metadata_st2048(&hdr);
-		set_hdr_output_metadata(data, &hdr);
-		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 10);
+	/* Enter SDR via metadata, no modeset allowed for
+	 * amd driver, whereas a modeset is required for
+	 * i915 driver. */
+	fill_hdr_output_metadata_sdr(&hdr);
+	set_hdr_output_metadata(data, &hdr);
+	if (is_amdgpu_device(data->fd))
+		igt_display_commit_atomic(display, 0, NULL);
+	else
 		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-		if (is_amdgpu_device(data->fd))
-			assert_output_bpc(data, 10);
-
-		igt_pipe_crc_collect_crc(data->pipe_crc, &ref_crc);
-
-		/* Change the mastering information, no modeset allowed
-		 * for amd driver, whereas a modeset is required for i915
-		 * driver. */
-		hdr.hdmi_metadata_type1.max_display_mastering_luminance = 200;
-		hdr.hdmi_metadata_type1.max_fall = 200;
-		hdr.hdmi_metadata_type1.max_cll = 100;
-
-		set_hdr_output_metadata(data, &hdr);
-		if (is_amdgpu_device(data->fd))
-			igt_display_commit_atomic(display, 0, NULL);
-		else
-			igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-
-		/* Enter SDR via metadata, no modeset allowed for
-		 * amd driver, whereas a modeset is required for
-		 * i915 driver. */
-		fill_hdr_output_metadata_sdr(&hdr);
-		set_hdr_output_metadata(data, &hdr);
-		if (is_amdgpu_device(data->fd))
-			igt_display_commit_atomic(display, 0, NULL);
-		else
-			igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-
-		igt_pipe_crc_collect_crc(data->pipe_crc, &new_crc);
-
-		/* Exit SDR and enter 8bpc, cleanup. */
-		set_hdr_output_metadata(data, NULL);
-		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
-		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-		if (is_amdgpu_device(data->fd))
-			assert_output_bpc(data, 8);
 
-		/* Verify that the CRC didn't change while cycling metadata. */
-		igt_assert_crc_equal(&ref_crc, &new_crc);
+	igt_pipe_crc_collect_crc(data->pipe_crc, &new_crc);
 
-		test_fini(data);
-		igt_remove_fb(data->fd, &afb);
+	/* Exit SDR and enter 8bpc, cleanup. */
+	set_hdr_output_metadata(data, NULL);
+	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
+	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	if (is_amdgpu_device(data->fd))
+		assert_output_bpc(data, 8);
 
-		break;
-	}
+	/* Verify that the CRC didn't change while cycling metadata. */
+	igt_assert_crc_equal(&ref_crc, &new_crc);
+
+	test_fini(data);
+	igt_remove_fb(data->fd, &afb);
 }
 
 /* Returns true if an output supports HDR metadata property. */
@@ -612,34 +566,36 @@ static bool has_hdr(igt_output_t *output)
 
 static void test_hdr(data_t *data, const char *test_name, uint32_t flags)
 {
+	igt_display_t *display = &data->display;
 	igt_output_t *output;
-	int valid_tests = 0;
 
-	for_each_connected_output(&data->display, output) {
+	for_each_connected_output(display, output) {
+		enum pipe pipe;
+
 		/* To test HDR, 10 bpc is required, so we need to
 		 * set MAX_BPC property to 10bpc prior to setting
 		 * HDR metadata property. Therefore, checking.
 		 */
-		if (!has_max_bpc(output) || !has_hdr(output)) {
-			igt_info("%s connector not found with HDR metadata/max_bpc connector property\n", output->name);
+		if (!has_max_bpc(output) || !has_hdr(output))
 			continue;
-		}
 
-		if (!is_panel_hdr(data, output)) {
-			igt_info("Panel attached via %s connector is non-HDR\n", output->name);
+		if (!is_panel_hdr(data, output))
 			continue;
-		}
-
-		igt_info("HDR %s test execution on %s\n", test_name, output->name);
-		if (flags & TEST_NONE || flags & TEST_DPMS || flags & TEST_SUSPEND)
-			test_static_toggle(data, output, flags);
-		if (flags & TEST_SWAP)
-			test_static_swap(data, output);
 
-		valid_tests++;
+		for_each_pipe(display, pipe) {
+			if (igt_pipe_connector_valid(pipe, output)) {
+				igt_dynamic_f("%s-%s-pipe-%s",
+					      test_name, output->name, kmstest_pipe_name(pipe)) {
+					if (flags & TEST_NONE || flags & TEST_DPMS || flags & TEST_SUSPEND)
+						test_static_toggle(data, pipe, output, flags);
+					if (flags & TEST_SWAP)
+						test_static_swap(data, pipe, output);
+				}
+			/* One pipe is enough */
+				break;
+			}
+		}
 	}
-
-	igt_require_f(valid_tests, "No connector found with HDR metadata/max_bpc connector property (or) panel is non-HDR\n");
 }
 
 igt_main
@@ -658,21 +614,28 @@ igt_main
 	}
 
 	igt_describe("Tests switching between different display output bpc modes");
-	igt_subtest("bpc-switch") test_bpc_switch(&data, TEST_NONE);
+	igt_subtest_with_dynamic("bpc-switch")
+		test_bpc_switch(&data, "bpc-switch", TEST_NONE);
 	igt_describe("Tests bpc switch with dpms");
-	igt_subtest("bpc-switch-dpms") test_bpc_switch(&data, TEST_DPMS);
+	igt_subtest_with_dynamic("bpc-switch-dpms")
+		test_bpc_switch(&data, "bpc-switch-dpms", TEST_DPMS);
 	igt_describe("Tests bpc switch with suspend");
-	igt_subtest("bpc-switch-suspend") test_bpc_switch(&data, TEST_SUSPEND);
+	igt_subtest_with_dynamic("bpc-switch-suspend")
+		test_bpc_switch(&data, "bpc-switch-suspend", TEST_SUSPEND);
 
 	igt_describe("Tests entering and exiting HDR mode");
-	igt_subtest("static-toggle") test_hdr(&data, "static-toggle", TEST_NONE);
+	igt_subtest_with_dynamic("static-toggle")
+		test_hdr(&data, "static-toggle", TEST_NONE);
 	igt_describe("Tests static toggle with dpms");
-	igt_subtest("static-toggle-dpms") test_hdr(&data, "static-toggle-dpms", TEST_DPMS);
+	igt_subtest_with_dynamic("static-toggle-dpms")
+		test_hdr(&data, "static-toggle-dpms", TEST_DPMS);
 	igt_describe("Tests static toggle with suspend");
-	igt_subtest("static-toggle-suspend") test_hdr(&data, "static-toggle-suspend", TEST_SUSPEND);
+	igt_subtest_with_dynamic("static-toggle-suspend")
+		test_hdr(&data, "static-toggle-suspend", TEST_SUSPEND);
 
 	igt_describe("Tests swapping static HDR metadata");
-	igt_subtest("static-swap") test_hdr(&data, "static-swap", TEST_SWAP);
+	igt_subtest_with_dynamic("static-swap")
+		test_hdr(&data, "static-swap", TEST_SWAP);
 
 	igt_fixture {
 		igt_display_fini(&data.display);
-- 
2.25.1

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

* [igt-dev] ✗ Fi.CI.BAT: failure for tests/kms_hdr: Test cleanup (rev4)
  2022-03-08 10:58 [igt-dev] [PATCH i-g-t] tests/kms_hdr: Test cleanup Swati Sharma
@ 2022-03-08 18:51 ` Patchwork
  0 siblings, 0 replies; 4+ messages in thread
From: Patchwork @ 2022-03-08 18:51 UTC (permalink / raw)
  To: Sharma, Swati2; +Cc: igt-dev

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

== Series Details ==

Series: tests/kms_hdr: Test cleanup (rev4)
URL   : https://patchwork.freedesktop.org/series/99526/
State : failure

== Summary ==

Series 99526 revision 4 was fully merged or fully failed: no git log



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

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

* Re: [igt-dev] [PATCH i-g-t] tests/kms_hdr: Test cleanup
  2022-01-31  9:09 [igt-dev] [PATCH i-g-t] tests/kms_hdr: Test cleanup Swati Sharma
@ 2022-02-11  9:44 ` Modem, Bhanuprakash
  0 siblings, 0 replies; 4+ messages in thread
From: Modem, Bhanuprakash @ 2022-02-11  9:44 UTC (permalink / raw)
  To: Swati Sharma, igt-dev

On Mon-31-01-2022 02:39 pm, Swati Sharma wrote:
> Test is updated with
>      *Dynamic subtests
>      *Subtests renaming
>      *Removal of valid_test check
>      *Code indentation
>      *Addition of igt_display_reset()
>      *Restricting tests to #pipes=1 at one stage early
> 
> Signed-off-by: Swati Sharma <swati2.sharma@intel.com>
> ---
>   tests/kms_hdr.c | 432 +++++++++++++++++++++++-------------------------
>   1 file changed, 204 insertions(+), 228 deletions(-)
> 
> diff --git a/tests/kms_hdr.c b/tests/kms_hdr.c
> index 35e25f4d..552b44c9 100644
> --- a/tests/kms_hdr.c
> +++ b/tests/kms_hdr.c
> @@ -173,106 +173,75 @@ static void prepare_test(data_t *data, igt_output_t *output, enum pipe pipe)
>   	data->h = data->mode->vdisplay;
>   }
>   
> -static bool igt_pipe_is_free(igt_display_t *display, enum pipe pipe)
> -{
> -	int i;
> -
> -	for (i = 0; i < display->n_outputs; i++)
> -		if (display->outputs[i].pending_pipe == pipe)
> -			return false;
> -
> -	return true;
> -}
> -
> -static void test_bpc_switch_on_output(data_t *data, igt_output_t *output,
> +static void test_bpc_switch_on_output(data_t *data, enum pipe pipe,
> +				      igt_output_t *output,
>   				      uint32_t flags)
>   {
>   	igt_display_t *display = &data->display;
>   	igt_crc_t ref_crc, new_crc;
> -	enum pipe pipe;
>   	igt_fb_t afb;
>   	int afb_id, ret;
>   
> -	for_each_pipe(display, pipe) {
> -		if (!igt_pipe_connector_valid(pipe, output))
> -			continue;
> -		/*
> -		 * If previous subtest of connector failed, pipe
> -		 * attached to that connector is not released.
> -		 * Because of that we have to choose the non
> -		 * attached pipe for this subtest.
> -		 */
> -		if (!igt_pipe_is_free(display, pipe))
> -			continue;
> -
> -		prepare_test(data, output, pipe);
> -
> -		/* 10-bit formats are slow, so limit the size. */
> -		afb_id = igt_create_fb(data->fd, 512, 512, DRM_FORMAT_XRGB2101010, 0, &afb);
> -		igt_assert(afb_id);
> -
> -		draw_hdr_pattern(&afb);
> -
> -		/* Plane may be required to fit fullscreen. Check it here and allow
> -		 * smaller plane size in following tests.
> -		 */
> -		igt_plane_set_fb(data->primary, &afb);
> -		igt_plane_set_size(data->primary, data->w, data->h);
> -		ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY, NULL);
> -		if (!ret) {
> -			data->w = afb.width;
> -			data->h = afb.height;
> -		}
> -
> -		/* Start in 8bpc. */
> -		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
> -		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> -		/*
> -		 * i915 driver doesn't expose max bpc as debugfs entry,
> -		 * so limiting assert only for amd driver.
> -		 */
> -		if (is_amdgpu_device(data->fd))
> -			assert_output_bpc(data, 8);
> -
> -		/*
> -		 * amdgpu requires a primary plane when the CRTC is enabled.
> -		 * However, some older Intel hardware (hsw) have scaling
> -		 * requirements that are not met by the plane, so remove it
> -		 * for non-AMD devices.
> -		 */
> -		if (!is_amdgpu_device(data->fd))
> -			igt_plane_set_fb(data->primary, NULL);
> -
> -		/* Switch to 10bpc. */
> -		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 10);
> -		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> -		if (is_amdgpu_device(data->fd))
> -			assert_output_bpc(data, 10);
> +	prepare_test(data, output, pipe);
>   
> -		/* Verify that the CRC are equal after DPMS or suspend. */
> -		igt_pipe_crc_collect_crc(data->pipe_crc, &ref_crc);
> -		test_cycle_flags(data, flags);
> -		igt_pipe_crc_collect_crc(data->pipe_crc, &new_crc);
> +	/* 10-bit formats are slow, so limit the size. */
> +	afb_id = igt_create_fb(data->fd, 512, 512, DRM_FORMAT_XRGB2101010, 0, &afb);
> +	igt_assert(afb_id);
>   
> -		/* Drop back to 8bpc. */
> -		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
> -		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> -		if (is_amdgpu_device(data->fd))
> -			assert_output_bpc(data, 8);
> +	draw_hdr_pattern(&afb);
>   
> -		/* CRC capture is clamped to 8bpc, so capture should match. */
> -		igt_assert_crc_equal(&ref_crc, &new_crc);
> +	/* Plane may be required to fit fullscreen. Check it here and allow
> +	 * smaller plane size in following tests.
> +	 */
> +	igt_plane_set_fb(data->primary, &afb);
> +	igt_plane_set_size(data->primary, data->w, data->h);
> +	ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY, NULL);
> +	if (!ret) {
> +		data->w = afb.width;
> +		data->h = afb.height;
> +	}
>   
> -		test_fini(data);
> -		igt_remove_fb(data->fd, &afb);
> +	/* Start in 8bpc. */
> +	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
> +	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> +	/*
> +	 * i915 driver doesn't expose max bpc as debugfs entry,
> +	 * so limiting assert only for amd driver.
> +	 */
> +	if (is_amdgpu_device(data->fd))
> +		assert_output_bpc(data, 8);
>   
> -		/*
> -		 * Testing a output with a pipe is enough for HDR
> -		 * testing. No ROI in testing the connector with other
> -		 * pipes. So break the loop on pipe.
> -		 */
> -		break;
> -	}
> +	/*
> +	 * amdgpu requires a primary plane when the CRTC is enabled.
> +	 * However, some older Intel hardware (hsw) have scaling
> +	 * requirements that are not met by the plane, so remove it
> +	 * for non-AMD devices.
> +	 */
> +	if (!is_amdgpu_device(data->fd))
> +		igt_plane_set_fb(data->primary, NULL);
> +
> +	/* Switch to 10bpc. */
> +	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 10);
> +	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> +	if (is_amdgpu_device(data->fd))
> +		assert_output_bpc(data, 10);
> +
> +	/* Verify that the CRC are equal after DPMS or suspend. */
> +	igt_pipe_crc_collect_crc(data->pipe_crc, &ref_crc);
> +	test_cycle_flags(data, flags);
> +	igt_pipe_crc_collect_crc(data->pipe_crc, &new_crc);
> +
> +	/* Drop back to 8bpc. */
> +	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
> +	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> +	if (is_amdgpu_device(data->fd))
> +		assert_output_bpc(data, 8);
> +
> +	/* CRC capture is clamped to 8bpc, so capture should match. */
> +	igt_assert_crc_equal(&ref_crc, &new_crc);
> +
> +	test_fini(data);
> +	igt_remove_fb(data->fd, &afb);
>   }
>   
>   /* Returns true if an output supports max bpc property. */
> @@ -282,21 +251,32 @@ static bool has_max_bpc(igt_output_t *output)
>   	       igt_output_get_prop(output, IGT_CONNECTOR_MAX_BPC);
>   }
>   
> -static void test_bpc_switch(data_t *data, uint32_t flags)
> +static void test_bpc_switch(data_t *data, const char *test_name, uint32_t flags)
>   {
> +	igt_display_t *display = &data->display;
>   	igt_output_t *output;
> -	int valid_tests = 0;
>   
> -	for_each_connected_output(&data->display, output) {
> -		if (!has_max_bpc(output))
> +	for_each_connected_output(display, output) {
> +		enum pipe pipe;
> +
> +		if (!has_max_bpc(output)) {
> +			igt_info("%s connector not found with max_bpc connector property\n", output->name);
>   			continue;
> +		}
>   
> -		igt_info("BPC switch test execution on %s\n", output->name);
> -		test_bpc_switch_on_output(data, output, flags);
> -		valid_tests++;
> -	}
> +		for_each_pipe(display, pipe) {
> +			if (igt_pipe_connector_valid(pipe, output)) {
> +				 igt_dynamic_f("%s-%s-pipe-%s",
> +					        test_name, output->name, kmstest_pipe_name(pipe))
> +					test_bpc_switch_on_output(data, pipe, output, flags);
> +
> +			igt_display_reset(display);

I think igt_display_reset is redundent, b'coz it is already there in 
prepare_test().

This is applicable for test_hdr() too.

>   
> -	igt_require_f(valid_tests, "No connector found with max_bpc connector property\n");
> +			/* One pipe is enough */

Please fix the indentation.

> +				break;
> +			}
> +		}
> +	}
>   }
>   
>   static bool cta_block(const char *edid_ext)
> @@ -426,68 +406,58 @@ static void fill_hdr_output_metadata_st2048(struct hdr_output_metadata *meta)
>   	meta->hdmi_metadata_type1.max_cll = 500;   /* 500 nits */
>   }
>   
> -static void test_static_toggle(data_t *data, igt_output_t *output,
> +static void test_static_toggle(data_t *data, enum pipe pipe,
> +			       igt_output_t *output,
>   			       uint32_t flags)
>   {
>   	igt_display_t *display = &data->display;
>   	struct hdr_output_metadata hdr;
>   	igt_crc_t ref_crc, new_crc;
> -	enum pipe pipe;
>   	igt_fb_t afb;
>   	int afb_id;
>   
> -	for_each_pipe(display, pipe) {
> -		if (!igt_pipe_connector_valid(pipe, output))
> -			continue;
> -
> -		if (!igt_pipe_is_free(display, pipe))
> -			continue;
> -
> -		prepare_test(data, output, pipe);
> -
> -		/* 10-bit formats are slow, so limit the size. */
> -		afb_id = igt_create_fb(data->fd, 512, 512, DRM_FORMAT_XRGB2101010, 0, &afb);
> -		igt_assert(afb_id);
> +	prepare_test(data, output, pipe);
>   
> -		draw_hdr_pattern(&afb);
> +	/* 10-bit formats are slow, so limit the size. */
> +	afb_id = igt_create_fb(data->fd, 512, 512, DRM_FORMAT_XRGB2101010, 0, &afb);
> +	igt_assert(afb_id);
>   
> -		fill_hdr_output_metadata_st2048(&hdr);
> +	draw_hdr_pattern(&afb);
>   
> -		/* Start with no metadata. */
> -		igt_plane_set_fb(data->primary, &afb);
> -		igt_plane_set_size(data->primary, data->w, data->h);
> -		set_hdr_output_metadata(data, NULL);
> -		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
> -		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> -		if (is_amdgpu_device(data->fd))
> -			assert_output_bpc(data, 8);
> +	fill_hdr_output_metadata_st2048(&hdr);
>   
> -		/* Apply HDR metadata and 10bpc. We expect a modeset for entering. */
> -		set_hdr_output_metadata(data, &hdr);
> -		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 10);
> -		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> -		if (is_amdgpu_device(data->fd))
> -			assert_output_bpc(data, 10);
> +	/* Start with no metadata. */
> +	igt_plane_set_fb(data->primary, &afb);
> +	igt_plane_set_size(data->primary, data->w, data->h);
> +	set_hdr_output_metadata(data, NULL);
> +	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
> +	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> +	if (is_amdgpu_device(data->fd))
> +		assert_output_bpc(data, 8);
>   
> -		/* Verify that the CRC are equal after DPMS or suspend. */
> -		igt_pipe_crc_collect_crc(data->pipe_crc, &ref_crc);
> -		test_cycle_flags(data, flags);
> -		igt_pipe_crc_collect_crc(data->pipe_crc, &new_crc);
> +	/* Apply HDR metadata and 10bpc. We expect a modeset for entering. */
> +	set_hdr_output_metadata(data, &hdr);
> +	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 10);
> +	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> +	if (is_amdgpu_device(data->fd))
> +		assert_output_bpc(data, 10);
>   
> -		/* Disable HDR metadata and drop back to 8bpc. We expect a modeset for exiting. */
> -		set_hdr_output_metadata(data, NULL);
> -		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
> -		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> -		if (is_amdgpu_device(data->fd))
> -			assert_output_bpc(data, 8);
> +	/* Verify that the CRC are equal after DPMS or suspend. */
> +	igt_pipe_crc_collect_crc(data->pipe_crc, &ref_crc);
> +	test_cycle_flags(data, flags);
> +	igt_pipe_crc_collect_crc(data->pipe_crc, &new_crc);
>   
> -		igt_assert_crc_equal(&ref_crc, &new_crc);
> +	/* Disable HDR metadata and drop back to 8bpc. We expect a modeset for exiting. */
> +	set_hdr_output_metadata(data, NULL);
> +	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
> +	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> +	if (is_amdgpu_device(data->fd))
> +		assert_output_bpc(data, 8);
>   
> -		test_fini(data);
> -		igt_remove_fb(data->fd, &afb);
> +	igt_assert_crc_equal(&ref_crc, &new_crc);
>   
> -		break;
> -	}
> +	test_fini(data);
> +	igt_remove_fb(data->fd, &afb);
>   }
>   
>   /* Fills some test values for HDR metadata targeting SDR. */
> @@ -520,88 +490,78 @@ static void fill_hdr_output_metadata_sdr(struct hdr_output_metadata *meta)
>   	meta->hdmi_metadata_type1.max_cll = 0;
>   }
>   
> -static void test_static_swap(data_t *data, igt_output_t *output)
> +static void test_static_swap(data_t *data, enum pipe pipe, igt_output_t *output)
>   {
>   	igt_display_t *display = &data->display;
>   	igt_crc_t ref_crc, new_crc;
> -	enum pipe pipe;
>   	igt_fb_t afb;
>   	int afb_id;
>   	struct hdr_output_metadata hdr;
>   
> -	for_each_pipe(display, pipe) {
> -		if (!igt_pipe_connector_valid(pipe, output))
> -			continue;
> -
> -		if (!igt_pipe_is_free(display, pipe))
> -			continue;
> -
> -		prepare_test(data, output, pipe);
> -
> -		/* 10-bit formats are slow, so limit the size. */
> -		afb_id = igt_create_fb(data->fd, 512, 512, DRM_FORMAT_XRGB2101010, 0, &afb);
> -		igt_assert(afb_id);
> -
> -		draw_hdr_pattern(&afb);
> -
> -		/* Start in SDR. */
> -		igt_plane_set_fb(data->primary, &afb);
> -		igt_plane_set_size(data->primary, data->w, data->h);
> -		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
> +	prepare_test(data, output, pipe);
> +
> +	/* 10-bit formats are slow, so limit the size. */
> +	afb_id = igt_create_fb(data->fd, 512, 512, DRM_FORMAT_XRGB2101010, 0, &afb);
> +	igt_assert(afb_id);
> +
> +	draw_hdr_pattern(&afb);
> +
> +	/* Start in SDR. */
> +	igt_plane_set_fb(data->primary, &afb);
> +	igt_plane_set_size(data->primary, data->w, data->h);
> +	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
> +	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> +	if (is_amdgpu_device(data->fd))
> +		assert_output_bpc(data, 8);
> +
> +	/* Enter HDR, a modeset is allowed here. */
> +	fill_hdr_output_metadata_st2048(&hdr);
> +	set_hdr_output_metadata(data, &hdr);
> +	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 10);
> +	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> +	if (is_amdgpu_device(data->fd))
> +		assert_output_bpc(data, 10);
> +
> +	igt_pipe_crc_collect_crc(data->pipe_crc, &ref_crc);
> +
> +	/* Change the mastering information, no modeset allowed
> +	 * for amd driver, whereas a modeset is required for i915
> +	 * driver. */
> +	hdr.hdmi_metadata_type1.max_display_mastering_luminance = 200;
> +	hdr.hdmi_metadata_type1.max_fall = 200;
> +	hdr.hdmi_metadata_type1.max_cll = 100;
> +
> +	set_hdr_output_metadata(data, &hdr);
> +	if (is_amdgpu_device(data->fd))
> +		igt_display_commit_atomic(display, 0, NULL);
> +	else
>   		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> -		if (is_amdgpu_device(data->fd))
> -			assert_output_bpc(data, 8);
>   
> -		/* Enter HDR, a modeset is allowed here. */
> -		fill_hdr_output_metadata_st2048(&hdr);
> -		set_hdr_output_metadata(data, &hdr);
> -		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 10);
> -		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> -		if (is_amdgpu_device(data->fd))
> -			assert_output_bpc(data, 10);
> -
> -		igt_pipe_crc_collect_crc(data->pipe_crc, &ref_crc);
> -
> -		/* Change the mastering information, no modeset allowed
> -		 * for amd driver, whereas a modeset is required for i915
> -		 * driver. */
> -		hdr.hdmi_metadata_type1.max_display_mastering_luminance = 200;
> -		hdr.hdmi_metadata_type1.max_fall = 200;
> -		hdr.hdmi_metadata_type1.max_cll = 100;
> -
> -		set_hdr_output_metadata(data, &hdr);
> -		if (is_amdgpu_device(data->fd))
> -			igt_display_commit_atomic(display, 0, NULL);
> -		else
> -			igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> -
> -		/* Enter SDR via metadata, no modeset allowed for
> -		 * amd driver, whereas a modeset is required for
> -		 * i915 driver. */
> -		fill_hdr_output_metadata_sdr(&hdr);
> -		set_hdr_output_metadata(data, &hdr);
> -		if (is_amdgpu_device(data->fd))
> -			igt_display_commit_atomic(display, 0, NULL);
> -		else
> -			igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> -
> -		igt_pipe_crc_collect_crc(data->pipe_crc, &new_crc);
> -
> -		/* Exit SDR and enter 8bpc, cleanup. */
> -		set_hdr_output_metadata(data, NULL);
> -		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
> +	/* Enter SDR via metadata, no modeset allowed for
> +	 * amd driver, whereas a modeset is required for
> +	 * i915 driver. */
> +	fill_hdr_output_metadata_sdr(&hdr);
> +	set_hdr_output_metadata(data, &hdr);
> +	if (is_amdgpu_device(data->fd))
> +		igt_display_commit_atomic(display, 0, NULL);
> +	else
>   		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> -		if (is_amdgpu_device(data->fd))
> -			assert_output_bpc(data, 8);
>   
> -		/* Verify that the CRC didn't change while cycling metadata. */
> -		igt_assert_crc_equal(&ref_crc, &new_crc);
> +	igt_pipe_crc_collect_crc(data->pipe_crc, &new_crc);
>   
> -		test_fini(data);
> -		igt_remove_fb(data->fd, &afb);
> +	/* Exit SDR and enter 8bpc, cleanup. */
> +	set_hdr_output_metadata(data, NULL);
> +	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
> +	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> +	if (is_amdgpu_device(data->fd))
> +		assert_output_bpc(data, 8);
> +
> +	/* Verify that the CRC didn't change while cycling metadata. */
> +	igt_assert_crc_equal(&ref_crc, &new_crc);
> +
> +	test_fini(data);
> +	igt_remove_fb(data->fd, &afb);
>   
> -		break;
> -	}
>   }
>   
>   /* Returns true if an output supports HDR metadata property. */
> @@ -612,10 +572,12 @@ static bool has_hdr(igt_output_t *output)
>   
>   static void test_hdr(data_t *data, const char *test_name, uint32_t flags)
>   {
> +	igt_display_t *display = &data->display;
>   	igt_output_t *output;
> -	int valid_tests = 0;
>   
> -	for_each_connected_output(&data->display, output) {
> +	for_each_connected_output(display, output) {
> +		enum pipe pipe;
> +
>   		/* To test HDR, 10 bpc is required, so we need to
>   		 * set MAX_BPC property to 10bpc prior to setting
>   		 * HDR metadata property. Therefore, checking.
> @@ -630,16 +592,23 @@ static void test_hdr(data_t *data, const char *test_name, uint32_t flags)
>   			continue;
>   		}
>   
> -		igt_info("HDR %s test execution on %s\n", test_name, output->name);
> -		if (flags & TEST_NONE || flags & TEST_DPMS || flags & TEST_SUSPEND)
> -			test_static_toggle(data, output, flags);
> -		if (flags & TEST_SWAP)
> -			test_static_swap(data, output);
> +		for_each_pipe(display, pipe) {
> +			if (igt_pipe_connector_valid(pipe, output)) {
> +				igt_dynamic_f("%s-%s-pipe-%s",
> +					      test_name, output->name, kmstest_pipe_name(pipe)) {
> +					if (flags & TEST_NONE || flags & TEST_DPMS || flags & TEST_SUSPEND)
> +						test_static_toggle(data, pipe, output, flags);
> +					if (flags & TEST_SWAP)
> +						test_static_swap(data, pipe, output);
> +				}
>   
> -		valid_tests++;
> -	}
> +			igt_display_reset(display);

Please check above comments.

>   
> -	igt_require_f(valid_tests, "No connector found with HDR metadata/max_bpc connector property (or) panel is non-HDR\n");
> +			/* One pipe is enough */
> +				break;
> +			}
> +		}
> +	}
>   }
>   
>   igt_main
> @@ -658,21 +627,28 @@ igt_main
>   	}
>   
>   	igt_describe("Tests switching between different display output bpc modes");
> -	igt_subtest("bpc-switch") test_bpc_switch(&data, TEST_NONE);
> +	igt_subtest_with_dynamic("bpc-switch")
> +		test_bpc_switch(&data, "bpc-switch", TEST_NONE);
>   	igt_describe("Tests bpc switch with dpms");
> -	igt_subtest("bpc-switch-dpms") test_bpc_switch(&data, TEST_DPMS);
> +	igt_subtest_with_dynamic("bpc-switch-dpms")
> +		test_bpc_switch(&data, "bpc-switch-dpms", TEST_DPMS);
>   	igt_describe("Tests bpc switch with suspend");
> -	igt_subtest("bpc-switch-suspend") test_bpc_switch(&data, TEST_SUSPEND);
> +	igt_subtest_with_dynamic("bpc-switch-suspend")
> +		test_bpc_switch(&data, "bpc-switch-suspend", TEST_SUSPEND);
>   
>   	igt_describe("Tests entering and exiting HDR mode");
> -	igt_subtest("static-toggle") test_hdr(&data, "static-toggle", TEST_NONE);
> +	igt_subtest_with_dynamic("static-toggle")
> +		test_hdr(&data, "static-toggle", TEST_NONE);
>   	igt_describe("Tests static toggle with dpms");
> -	igt_subtest("static-toggle-dpms") test_hdr(&data, "static-toggle-dpms", TEST_DPMS);
> +	igt_subtest_with_dynamic("static-toggle-dpms")
> +		test_hdr(&data, "static-toggle-dpms", TEST_DPMS);
>   	igt_describe("Tests static toggle with suspend");
> -	igt_subtest("static-toggle-suspend") test_hdr(&data, "static-toggle-suspend", TEST_SUSPEND);
> +	igt_subtest_with_dynamic("static-toggle-suspend")
> +		test_hdr(&data, "static-toggle-suspend", TEST_SUSPEND);
>   
>   	igt_describe("Tests swapping static HDR metadata");
> -	igt_subtest("static-swap") test_hdr(&data, "static-swap", TEST_SWAP);
> +	igt_subtest_with_dynamic("static-swap")
> +		test_hdr(&data, "static-swap", TEST_SWAP);
>

With above changes, this patch is
Reviewed-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>

-Bhanu

>   	igt_fixture {
>   		igt_display_fini(&data.display);

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

* [igt-dev] [PATCH i-g-t] tests/kms_hdr: Test cleanup
@ 2022-01-31  9:09 Swati Sharma
  2022-02-11  9:44 ` Modem, Bhanuprakash
  0 siblings, 1 reply; 4+ messages in thread
From: Swati Sharma @ 2022-01-31  9:09 UTC (permalink / raw)
  To: igt-dev

Test is updated with
    *Dynamic subtests
    *Subtests renaming
    *Removal of valid_test check
    *Code indentation
    *Addition of igt_display_reset()
    *Restricting tests to #pipes=1 at one stage early

Signed-off-by: Swati Sharma <swati2.sharma@intel.com>
---
 tests/kms_hdr.c | 432 +++++++++++++++++++++++-------------------------
 1 file changed, 204 insertions(+), 228 deletions(-)

diff --git a/tests/kms_hdr.c b/tests/kms_hdr.c
index 35e25f4d..552b44c9 100644
--- a/tests/kms_hdr.c
+++ b/tests/kms_hdr.c
@@ -173,106 +173,75 @@ static void prepare_test(data_t *data, igt_output_t *output, enum pipe pipe)
 	data->h = data->mode->vdisplay;
 }
 
-static bool igt_pipe_is_free(igt_display_t *display, enum pipe pipe)
-{
-	int i;
-
-	for (i = 0; i < display->n_outputs; i++)
-		if (display->outputs[i].pending_pipe == pipe)
-			return false;
-
-	return true;
-}
-
-static void test_bpc_switch_on_output(data_t *data, igt_output_t *output,
+static void test_bpc_switch_on_output(data_t *data, enum pipe pipe,
+				      igt_output_t *output,
 				      uint32_t flags)
 {
 	igt_display_t *display = &data->display;
 	igt_crc_t ref_crc, new_crc;
-	enum pipe pipe;
 	igt_fb_t afb;
 	int afb_id, ret;
 
-	for_each_pipe(display, pipe) {
-		if (!igt_pipe_connector_valid(pipe, output))
-			continue;
-		/*
-		 * If previous subtest of connector failed, pipe
-		 * attached to that connector is not released.
-		 * Because of that we have to choose the non
-		 * attached pipe for this subtest.
-		 */
-		if (!igt_pipe_is_free(display, pipe))
-			continue;
-
-		prepare_test(data, output, pipe);
-
-		/* 10-bit formats are slow, so limit the size. */
-		afb_id = igt_create_fb(data->fd, 512, 512, DRM_FORMAT_XRGB2101010, 0, &afb);
-		igt_assert(afb_id);
-
-		draw_hdr_pattern(&afb);
-
-		/* Plane may be required to fit fullscreen. Check it here and allow
-		 * smaller plane size in following tests.
-		 */
-		igt_plane_set_fb(data->primary, &afb);
-		igt_plane_set_size(data->primary, data->w, data->h);
-		ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY, NULL);
-		if (!ret) {
-			data->w = afb.width;
-			data->h = afb.height;
-		}
-
-		/* Start in 8bpc. */
-		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
-		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-		/*
-		 * i915 driver doesn't expose max bpc as debugfs entry,
-		 * so limiting assert only for amd driver.
-		 */
-		if (is_amdgpu_device(data->fd))
-			assert_output_bpc(data, 8);
-
-		/*
-		 * amdgpu requires a primary plane when the CRTC is enabled.
-		 * However, some older Intel hardware (hsw) have scaling
-		 * requirements that are not met by the plane, so remove it
-		 * for non-AMD devices.
-		 */
-		if (!is_amdgpu_device(data->fd))
-			igt_plane_set_fb(data->primary, NULL);
-
-		/* Switch to 10bpc. */
-		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 10);
-		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-		if (is_amdgpu_device(data->fd))
-			assert_output_bpc(data, 10);
+	prepare_test(data, output, pipe);
 
-		/* Verify that the CRC are equal after DPMS or suspend. */
-		igt_pipe_crc_collect_crc(data->pipe_crc, &ref_crc);
-		test_cycle_flags(data, flags);
-		igt_pipe_crc_collect_crc(data->pipe_crc, &new_crc);
+	/* 10-bit formats are slow, so limit the size. */
+	afb_id = igt_create_fb(data->fd, 512, 512, DRM_FORMAT_XRGB2101010, 0, &afb);
+	igt_assert(afb_id);
 
-		/* Drop back to 8bpc. */
-		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
-		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-		if (is_amdgpu_device(data->fd))
-			assert_output_bpc(data, 8);
+	draw_hdr_pattern(&afb);
 
-		/* CRC capture is clamped to 8bpc, so capture should match. */
-		igt_assert_crc_equal(&ref_crc, &new_crc);
+	/* Plane may be required to fit fullscreen. Check it here and allow
+	 * smaller plane size in following tests.
+	 */
+	igt_plane_set_fb(data->primary, &afb);
+	igt_plane_set_size(data->primary, data->w, data->h);
+	ret = igt_display_try_commit_atomic(display, DRM_MODE_ATOMIC_TEST_ONLY, NULL);
+	if (!ret) {
+		data->w = afb.width;
+		data->h = afb.height;
+	}
 
-		test_fini(data);
-		igt_remove_fb(data->fd, &afb);
+	/* Start in 8bpc. */
+	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
+	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	/*
+	 * i915 driver doesn't expose max bpc as debugfs entry,
+	 * so limiting assert only for amd driver.
+	 */
+	if (is_amdgpu_device(data->fd))
+		assert_output_bpc(data, 8);
 
-		/*
-		 * Testing a output with a pipe is enough for HDR
-		 * testing. No ROI in testing the connector with other
-		 * pipes. So break the loop on pipe.
-		 */
-		break;
-	}
+	/*
+	 * amdgpu requires a primary plane when the CRTC is enabled.
+	 * However, some older Intel hardware (hsw) have scaling
+	 * requirements that are not met by the plane, so remove it
+	 * for non-AMD devices.
+	 */
+	if (!is_amdgpu_device(data->fd))
+		igt_plane_set_fb(data->primary, NULL);
+
+	/* Switch to 10bpc. */
+	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 10);
+	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	if (is_amdgpu_device(data->fd))
+		assert_output_bpc(data, 10);
+
+	/* Verify that the CRC are equal after DPMS or suspend. */
+	igt_pipe_crc_collect_crc(data->pipe_crc, &ref_crc);
+	test_cycle_flags(data, flags);
+	igt_pipe_crc_collect_crc(data->pipe_crc, &new_crc);
+
+	/* Drop back to 8bpc. */
+	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
+	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	if (is_amdgpu_device(data->fd))
+		assert_output_bpc(data, 8);
+
+	/* CRC capture is clamped to 8bpc, so capture should match. */
+	igt_assert_crc_equal(&ref_crc, &new_crc);
+
+	test_fini(data);
+	igt_remove_fb(data->fd, &afb);
 }
 
 /* Returns true if an output supports max bpc property. */
@@ -282,21 +251,32 @@ static bool has_max_bpc(igt_output_t *output)
 	       igt_output_get_prop(output, IGT_CONNECTOR_MAX_BPC);
 }
 
-static void test_bpc_switch(data_t *data, uint32_t flags)
+static void test_bpc_switch(data_t *data, const char *test_name, uint32_t flags)
 {
+	igt_display_t *display = &data->display;
 	igt_output_t *output;
-	int valid_tests = 0;
 
-	for_each_connected_output(&data->display, output) {
-		if (!has_max_bpc(output))
+	for_each_connected_output(display, output) {
+		enum pipe pipe;
+
+		if (!has_max_bpc(output)) {
+			igt_info("%s connector not found with max_bpc connector property\n", output->name);
 			continue;
+		}
 
-		igt_info("BPC switch test execution on %s\n", output->name);
-		test_bpc_switch_on_output(data, output, flags);
-		valid_tests++;
-	}
+		for_each_pipe(display, pipe) {
+			if (igt_pipe_connector_valid(pipe, output)) {
+				 igt_dynamic_f("%s-%s-pipe-%s",
+					        test_name, output->name, kmstest_pipe_name(pipe))
+					test_bpc_switch_on_output(data, pipe, output, flags);
+
+			igt_display_reset(display);
 
-	igt_require_f(valid_tests, "No connector found with max_bpc connector property\n");
+			/* One pipe is enough */
+				break;
+			}
+		}
+	}
 }
 
 static bool cta_block(const char *edid_ext)
@@ -426,68 +406,58 @@ static void fill_hdr_output_metadata_st2048(struct hdr_output_metadata *meta)
 	meta->hdmi_metadata_type1.max_cll = 500;   /* 500 nits */
 }
 
-static void test_static_toggle(data_t *data, igt_output_t *output,
+static void test_static_toggle(data_t *data, enum pipe pipe,
+			       igt_output_t *output,
 			       uint32_t flags)
 {
 	igt_display_t *display = &data->display;
 	struct hdr_output_metadata hdr;
 	igt_crc_t ref_crc, new_crc;
-	enum pipe pipe;
 	igt_fb_t afb;
 	int afb_id;
 
-	for_each_pipe(display, pipe) {
-		if (!igt_pipe_connector_valid(pipe, output))
-			continue;
-
-		if (!igt_pipe_is_free(display, pipe))
-			continue;
-
-		prepare_test(data, output, pipe);
-
-		/* 10-bit formats are slow, so limit the size. */
-		afb_id = igt_create_fb(data->fd, 512, 512, DRM_FORMAT_XRGB2101010, 0, &afb);
-		igt_assert(afb_id);
+	prepare_test(data, output, pipe);
 
-		draw_hdr_pattern(&afb);
+	/* 10-bit formats are slow, so limit the size. */
+	afb_id = igt_create_fb(data->fd, 512, 512, DRM_FORMAT_XRGB2101010, 0, &afb);
+	igt_assert(afb_id);
 
-		fill_hdr_output_metadata_st2048(&hdr);
+	draw_hdr_pattern(&afb);
 
-		/* Start with no metadata. */
-		igt_plane_set_fb(data->primary, &afb);
-		igt_plane_set_size(data->primary, data->w, data->h);
-		set_hdr_output_metadata(data, NULL);
-		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
-		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-		if (is_amdgpu_device(data->fd))
-			assert_output_bpc(data, 8);
+	fill_hdr_output_metadata_st2048(&hdr);
 
-		/* Apply HDR metadata and 10bpc. We expect a modeset for entering. */
-		set_hdr_output_metadata(data, &hdr);
-		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 10);
-		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-		if (is_amdgpu_device(data->fd))
-			assert_output_bpc(data, 10);
+	/* Start with no metadata. */
+	igt_plane_set_fb(data->primary, &afb);
+	igt_plane_set_size(data->primary, data->w, data->h);
+	set_hdr_output_metadata(data, NULL);
+	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
+	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	if (is_amdgpu_device(data->fd))
+		assert_output_bpc(data, 8);
 
-		/* Verify that the CRC are equal after DPMS or suspend. */
-		igt_pipe_crc_collect_crc(data->pipe_crc, &ref_crc);
-		test_cycle_flags(data, flags);
-		igt_pipe_crc_collect_crc(data->pipe_crc, &new_crc);
+	/* Apply HDR metadata and 10bpc. We expect a modeset for entering. */
+	set_hdr_output_metadata(data, &hdr);
+	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 10);
+	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	if (is_amdgpu_device(data->fd))
+		assert_output_bpc(data, 10);
 
-		/* Disable HDR metadata and drop back to 8bpc. We expect a modeset for exiting. */
-		set_hdr_output_metadata(data, NULL);
-		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
-		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-		if (is_amdgpu_device(data->fd))
-			assert_output_bpc(data, 8);
+	/* Verify that the CRC are equal after DPMS or suspend. */
+	igt_pipe_crc_collect_crc(data->pipe_crc, &ref_crc);
+	test_cycle_flags(data, flags);
+	igt_pipe_crc_collect_crc(data->pipe_crc, &new_crc);
 
-		igt_assert_crc_equal(&ref_crc, &new_crc);
+	/* Disable HDR metadata and drop back to 8bpc. We expect a modeset for exiting. */
+	set_hdr_output_metadata(data, NULL);
+	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
+	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	if (is_amdgpu_device(data->fd))
+		assert_output_bpc(data, 8);
 
-		test_fini(data);
-		igt_remove_fb(data->fd, &afb);
+	igt_assert_crc_equal(&ref_crc, &new_crc);
 
-		break;
-	}
+	test_fini(data);
+	igt_remove_fb(data->fd, &afb);
 }
 
 /* Fills some test values for HDR metadata targeting SDR. */
@@ -520,88 +490,78 @@ static void fill_hdr_output_metadata_sdr(struct hdr_output_metadata *meta)
 	meta->hdmi_metadata_type1.max_cll = 0;
 }
 
-static void test_static_swap(data_t *data, igt_output_t *output)
+static void test_static_swap(data_t *data, enum pipe pipe, igt_output_t *output)
 {
 	igt_display_t *display = &data->display;
 	igt_crc_t ref_crc, new_crc;
-	enum pipe pipe;
 	igt_fb_t afb;
 	int afb_id;
 	struct hdr_output_metadata hdr;
 
-	for_each_pipe(display, pipe) {
-		if (!igt_pipe_connector_valid(pipe, output))
-			continue;
-
-		if (!igt_pipe_is_free(display, pipe))
-			continue;
-
-		prepare_test(data, output, pipe);
-
-		/* 10-bit formats are slow, so limit the size. */
-		afb_id = igt_create_fb(data->fd, 512, 512, DRM_FORMAT_XRGB2101010, 0, &afb);
-		igt_assert(afb_id);
-
-		draw_hdr_pattern(&afb);
-
-		/* Start in SDR. */
-		igt_plane_set_fb(data->primary, &afb);
-		igt_plane_set_size(data->primary, data->w, data->h);
-		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
+	prepare_test(data, output, pipe);
+
+	/* 10-bit formats are slow, so limit the size. */
+	afb_id = igt_create_fb(data->fd, 512, 512, DRM_FORMAT_XRGB2101010, 0, &afb);
+	igt_assert(afb_id);
+
+	draw_hdr_pattern(&afb);
+
+	/* Start in SDR. */
+	igt_plane_set_fb(data->primary, &afb);
+	igt_plane_set_size(data->primary, data->w, data->h);
+	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
+	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	if (is_amdgpu_device(data->fd))
+		assert_output_bpc(data, 8);
+
+	/* Enter HDR, a modeset is allowed here. */
+	fill_hdr_output_metadata_st2048(&hdr);
+	set_hdr_output_metadata(data, &hdr);
+	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 10);
+	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	if (is_amdgpu_device(data->fd))
+		assert_output_bpc(data, 10);
+
+	igt_pipe_crc_collect_crc(data->pipe_crc, &ref_crc);
+
+	/* Change the mastering information, no modeset allowed
+	 * for amd driver, whereas a modeset is required for i915
+	 * driver. */
+	hdr.hdmi_metadata_type1.max_display_mastering_luminance = 200;
+	hdr.hdmi_metadata_type1.max_fall = 200;
+	hdr.hdmi_metadata_type1.max_cll = 100;
+
+	set_hdr_output_metadata(data, &hdr);
+	if (is_amdgpu_device(data->fd))
+		igt_display_commit_atomic(display, 0, NULL);
+	else
 		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-		if (is_amdgpu_device(data->fd))
-			assert_output_bpc(data, 8);
 
-		/* Enter HDR, a modeset is allowed here. */
-		fill_hdr_output_metadata_st2048(&hdr);
-		set_hdr_output_metadata(data, &hdr);
-		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 10);
-		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-		if (is_amdgpu_device(data->fd))
-			assert_output_bpc(data, 10);
-
-		igt_pipe_crc_collect_crc(data->pipe_crc, &ref_crc);
-
-		/* Change the mastering information, no modeset allowed
-		 * for amd driver, whereas a modeset is required for i915
-		 * driver. */
-		hdr.hdmi_metadata_type1.max_display_mastering_luminance = 200;
-		hdr.hdmi_metadata_type1.max_fall = 200;
-		hdr.hdmi_metadata_type1.max_cll = 100;
-
-		set_hdr_output_metadata(data, &hdr);
-		if (is_amdgpu_device(data->fd))
-			igt_display_commit_atomic(display, 0, NULL);
-		else
-			igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-
-		/* Enter SDR via metadata, no modeset allowed for
-		 * amd driver, whereas a modeset is required for
-		 * i915 driver. */
-		fill_hdr_output_metadata_sdr(&hdr);
-		set_hdr_output_metadata(data, &hdr);
-		if (is_amdgpu_device(data->fd))
-			igt_display_commit_atomic(display, 0, NULL);
-		else
-			igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-
-		igt_pipe_crc_collect_crc(data->pipe_crc, &new_crc);
-
-		/* Exit SDR and enter 8bpc, cleanup. */
-		set_hdr_output_metadata(data, NULL);
-		igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
+	/* Enter SDR via metadata, no modeset allowed for
+	 * amd driver, whereas a modeset is required for
+	 * i915 driver. */
+	fill_hdr_output_metadata_sdr(&hdr);
+	set_hdr_output_metadata(data, &hdr);
+	if (is_amdgpu_device(data->fd))
+		igt_display_commit_atomic(display, 0, NULL);
+	else
 		igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
-		if (is_amdgpu_device(data->fd))
-			assert_output_bpc(data, 8);
 
-		/* Verify that the CRC didn't change while cycling metadata. */
-		igt_assert_crc_equal(&ref_crc, &new_crc);
+	igt_pipe_crc_collect_crc(data->pipe_crc, &new_crc);
 
-		test_fini(data);
-		igt_remove_fb(data->fd, &afb);
+	/* Exit SDR and enter 8bpc, cleanup. */
+	set_hdr_output_metadata(data, NULL);
+	igt_output_set_prop_value(data->output, IGT_CONNECTOR_MAX_BPC, 8);
+	igt_display_commit_atomic(display, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	if (is_amdgpu_device(data->fd))
+		assert_output_bpc(data, 8);
+
+	/* Verify that the CRC didn't change while cycling metadata. */
+	igt_assert_crc_equal(&ref_crc, &new_crc);
+
+	test_fini(data);
+	igt_remove_fb(data->fd, &afb);
 
-		break;
-	}
 }
 
 /* Returns true if an output supports HDR metadata property. */
@@ -612,10 +572,12 @@ static bool has_hdr(igt_output_t *output)
 
 static void test_hdr(data_t *data, const char *test_name, uint32_t flags)
 {
+	igt_display_t *display = &data->display;
 	igt_output_t *output;
-	int valid_tests = 0;
 
-	for_each_connected_output(&data->display, output) {
+	for_each_connected_output(display, output) {
+		enum pipe pipe;
+
 		/* To test HDR, 10 bpc is required, so we need to
 		 * set MAX_BPC property to 10bpc prior to setting
 		 * HDR metadata property. Therefore, checking.
@@ -630,16 +592,23 @@ static void test_hdr(data_t *data, const char *test_name, uint32_t flags)
 			continue;
 		}
 
-		igt_info("HDR %s test execution on %s\n", test_name, output->name);
-		if (flags & TEST_NONE || flags & TEST_DPMS || flags & TEST_SUSPEND)
-			test_static_toggle(data, output, flags);
-		if (flags & TEST_SWAP)
-			test_static_swap(data, output);
+		for_each_pipe(display, pipe) {
+			if (igt_pipe_connector_valid(pipe, output)) {
+				igt_dynamic_f("%s-%s-pipe-%s",
+					      test_name, output->name, kmstest_pipe_name(pipe)) {
+					if (flags & TEST_NONE || flags & TEST_DPMS || flags & TEST_SUSPEND)
+						test_static_toggle(data, pipe, output, flags);
+					if (flags & TEST_SWAP)
+						test_static_swap(data, pipe, output);
+				}
 
-		valid_tests++;
-	}
+			igt_display_reset(display);
 
-	igt_require_f(valid_tests, "No connector found with HDR metadata/max_bpc connector property (or) panel is non-HDR\n");
+			/* One pipe is enough */
+				break;
+			}
+		}
+	}
 }
 
 igt_main
@@ -658,21 +627,28 @@ igt_main
 	}
 
 	igt_describe("Tests switching between different display output bpc modes");
-	igt_subtest("bpc-switch") test_bpc_switch(&data, TEST_NONE);
+	igt_subtest_with_dynamic("bpc-switch")
+		test_bpc_switch(&data, "bpc-switch", TEST_NONE);
 	igt_describe("Tests bpc switch with dpms");
-	igt_subtest("bpc-switch-dpms") test_bpc_switch(&data, TEST_DPMS);
+	igt_subtest_with_dynamic("bpc-switch-dpms")
+		test_bpc_switch(&data, "bpc-switch-dpms", TEST_DPMS);
 	igt_describe("Tests bpc switch with suspend");
-	igt_subtest("bpc-switch-suspend") test_bpc_switch(&data, TEST_SUSPEND);
+	igt_subtest_with_dynamic("bpc-switch-suspend")
+		test_bpc_switch(&data, "bpc-switch-suspend", TEST_SUSPEND);
 
 	igt_describe("Tests entering and exiting HDR mode");
-	igt_subtest("static-toggle") test_hdr(&data, "static-toggle", TEST_NONE);
+	igt_subtest_with_dynamic("static-toggle")
+		test_hdr(&data, "static-toggle", TEST_NONE);
 	igt_describe("Tests static toggle with dpms");
-	igt_subtest("static-toggle-dpms") test_hdr(&data, "static-toggle-dpms", TEST_DPMS);
+	igt_subtest_with_dynamic("static-toggle-dpms")
+		test_hdr(&data, "static-toggle-dpms", TEST_DPMS);
 	igt_describe("Tests static toggle with suspend");
-	igt_subtest("static-toggle-suspend") test_hdr(&data, "static-toggle-suspend", TEST_SUSPEND);
+	igt_subtest_with_dynamic("static-toggle-suspend")
+		test_hdr(&data, "static-toggle-suspend", TEST_SUSPEND);
 
 	igt_describe("Tests swapping static HDR metadata");
-	igt_subtest("static-swap") test_hdr(&data, "static-swap", TEST_SWAP);
+	igt_subtest_with_dynamic("static-swap")
+		test_hdr(&data, "static-swap", TEST_SWAP);
 
 	igt_fixture {
 		igt_display_fini(&data.display);
-- 
2.25.1

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

end of thread, other threads:[~2022-03-08 18:51 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-08 10:58 [igt-dev] [PATCH i-g-t] tests/kms_hdr: Test cleanup Swati Sharma
2022-03-08 18:51 ` [igt-dev] ✗ Fi.CI.BAT: failure for tests/kms_hdr: Test cleanup (rev4) Patchwork
  -- strict thread matches above, loose matches on Subject: below --
2022-01-31  9:09 [igt-dev] [PATCH i-g-t] tests/kms_hdr: Test cleanup Swati Sharma
2022-02-11  9:44 ` Modem, Bhanuprakash

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