[PATCH i-g-t v4 1/1] tests/intel/kms_joiner: switch modeset from uj to bj and vice-versa

Santhosh Reddy Guddati santhosh.reddy.guddati at intel.com
Fri Oct 4 07:48:54 UTC 2024


Add a subtest to validate switching from ultra joiner to big joiner
and vice-versa.

v2: Add new subtests for switching without force joiner (Karthik)
v3: start with uj to bj switch, if not available switch to force mode
v4: check for uj, bj support before starting dynamic tests (karthik)
    call reset_connectors after forcing to uj

Signed-off-by: Santhosh Reddy Guddati <santhosh.reddy.guddati at intel.com>
---
 tests/intel/kms_joiner.c | 45 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/tests/intel/kms_joiner.c b/tests/intel/kms_joiner.c
index 508e82ce3..1f66c4d8b 100644
--- a/tests/intel/kms_joiner.c
+++ b/tests/intel/kms_joiner.c
@@ -71,6 +71,9 @@
  * SUBTEST: invalid-modeset-force-ultra-joiner
  * Description: Verify if the modeset on the other pipes are rejected when
  *              the pipe A is active with force ultra joiner modeset.
+ *
+ * SUBTEST: switch-modeset-big-joiner-ultra-joiner
+ * Description: Verify modeset switch between ultra joiner and big joiner.
  */
 IGT_TEST_DESCRIPTION("Test joiner / force joiner");
 
@@ -507,6 +510,48 @@ igt_main
 				test_ultra_joiner(&data, false, false, false);
 	}
 
+	igt_describe("Verify modeset switch between joiner and ultra joiner");
+	igt_subtest_with_dynamic("switch-modeset-big-joiner-ultra-joiner") {
+		igt_require_f(data.big_joiner_output_count > 0 || data.non_big_joiner_output_count > 0,
+			      "No big joiner or force joiner output found\n");
+		igt_require_f(data.ultra_joiner_output_count > 0 || data.non_ultra_joiner_output_count > 0,
+			      "No ultra joiner or force joiner output found\n");
+		igt_require_f(data.n_pipes > 3,"Minimum 4 pipes required\n");
+
+		igt_dynamic_f("ultra_joiner_to_big_joiner") {
+			if (data.ultra_joiner_output_count > 0) {
+				test_ultra_joiner(&data, false, false, false);
+			} else {
+				enable_force_joiner_on_all_non_ultra_joiner_outputs(&data);
+				test_ultra_joiner(&data, false, false, true);
+				igt_reset_connectors();
+			}
+			if (data.big_joiner_output_count > 0) {
+				test_single_joiner(&data, data.big_joiner_output_count, false);
+			} else {
+				enable_force_joiner_on_all_non_big_joiner_outputs(&data);
+				test_single_joiner(&data, data.non_big_joiner_output_count, true);
+			}
+			igt_reset_connectors();
+		}
+
+		igt_dynamic_f("big_joiner_to_ultra_joiner") {
+			if (data.big_joiner_output_count > 0) {
+				test_single_joiner(&data, data.big_joiner_output_count, false);
+			} else {
+				enable_force_joiner_on_all_non_big_joiner_outputs(&data);
+				test_single_joiner(&data, data.non_big_joiner_output_count, true);
+			}
+			if (data.ultra_joiner_output_count > 0) {
+				test_ultra_joiner(&data, false, false, false);
+			} else {
+				enable_force_joiner_on_all_non_ultra_joiner_outputs(&data);
+				test_ultra_joiner(&data, false, false, true);
+			}
+			igt_reset_connectors();
+		}
+	}
+
 	igt_describe("Verify if the modeset on the adjoining pipe is rejected "
 		     "when the pipe is active with a big joiner modeset");
 	igt_subtest_with_dynamic("invalid-modeset-big-joiner") {
-- 
2.34.1



More information about the igt-dev mailing list