From: Jeevan B <jeevan.b@intel.com>
To: igt-dev@lists.freedesktop.org
Cc: karthik.b.s@intel.com, Jeevan B <jeevan.b@intel.com>
Subject: [PATCH i-g-t 3/3] tests/intel/kms_joiner: Add a new test to validate non-joiner mode
Date: Tue, 11 Feb 2025 00:06:11 +0530 [thread overview]
Message-ID: <20250210183611.1326980-4-jeevan.b@intel.com> (raw)
In-Reply-To: <20250210183611.1326980-1-jeevan.b@intel.com>
We need to ensure that the system does not enable a joiner for modes
that do not require it. This test runs on all pipes and validates
that the highest available resolution and refresh rate within the
max dot clock limit is selected. The test then forces a modeset and
flip on the given pipe and checks the status using the joiner check.
If the joiner is mistakenly enabled for a non-joiner mode, the test
should fail.
v2: Fix nonjoiner_mode_found to find the required case.
Remove clk sort and minor fixes.
v3: Rename nonjoiner to non_joiner and minor modifications.
v4: Add joiner check.
v5: Rename test name and function name, Update test description,
update non_joiner_mode_found logic.
v6: Update commit message and rename test, function name.
Signed-off-by: Jeevan B <jeevan.b@intel.com>
---
tests/intel/kms_joiner.c | 58 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 58 insertions(+)
diff --git a/tests/intel/kms_joiner.c b/tests/intel/kms_joiner.c
index 086cfeb71..7b8cc87a7 100644
--- a/tests/intel/kms_joiner.c
+++ b/tests/intel/kms_joiner.c
@@ -74,6 +74,10 @@
*
* SUBTEST: switch-modeset-ultra-joiner-big-joiner
* Description: Verify switching between ultra joiner and big joiner modeset.
+ *
+ * SUBTEST: basic-max-non-joiner
+ * Description: Validate non-joiner mode functionality by enabling corner-case display modes
+ * that vary across different platforms.
*/
IGT_TEST_DESCRIPTION("Test joiner / force joiner");
@@ -85,6 +89,7 @@ typedef struct {
int ultra_joiner_output_count;
int non_big_joiner_output_count;
int non_ultra_joiner_output_count;
+ int non_joiner_output_count;
int mixed_output_count;
int output_count;
int n_pipes;
@@ -94,6 +99,7 @@ typedef struct {
igt_output_t *non_big_joiner_output[IGT_MAX_PIPES];
igt_output_t *non_ultra_joiner_output[IGT_MAX_PIPES];
igt_output_t *mixed_output[IGT_MAX_PIPES];
+ igt_output_t *non_joiner_output[IGT_MAX_PIPES];
enum pipe pipe_seq[IGT_MAX_PIPES];
igt_display_t display;
} data_t;
@@ -491,6 +497,42 @@ static void test_ultra_joiner(data_t *data, bool invalid_pipe, bool two_display,
}
}
+static void test_basic_max_non_joiner(data_t *data)
+{
+ int count;
+ enum pipe pipe;
+ igt_output_t **outputs, *output;
+ igt_fb_t fb;
+ igt_plane_t *primary;
+ drmModeModeInfo *mode;
+
+ count = data->non_joiner_output_count;
+ outputs = data->non_joiner_output;
+ igt_display_reset(&data->display);
+
+ for (int i = 0; i < count; i++) {
+ output = outputs[i];
+ mode = igt_output_get_mode(output);
+ for (pipe = 0; pipe < data->n_pipes - 1; pipe++) {
+ igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe), output->name) {
+ igt_output_set_pipe(output, pipe);
+ primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
+ igt_create_pattern_fb(data->drm_fd, mode->hdisplay, mode->vdisplay,
+ DRM_FORMAT_XRGB8888,
+ DRM_FORMAT_MOD_LINEAR, &fb);
+ igt_plane_set_fb(primary, &fb);
+ igt_display_commit2(&data->display, COMMIT_ATOMIC);
+ igt_assert_f(!igt_is_joiner_enabled_for_pipe(data->drm_fd, pipe),
+ "Joiner enabled on pipe %c", 'A' + pipe);
+
+ igt_display_reset(&data->display);
+ igt_plane_set_fb(primary, NULL);
+ igt_remove_fb(data->drm_fd, &fb);
+ }
+ }
+ }
+}
+
igt_main
{
bool ultra_joiner_supported, is_dgfx;
@@ -505,6 +547,7 @@ igt_main
data.ultra_joiner_output_count = 0;
data.non_big_joiner_output_count = 0;
data.non_ultra_joiner_output_count = 0;
+ data.non_joiner_output_count = 0;
data.mixed_output_count = 0;
data.output_count = 0;
j = 0;
@@ -523,6 +566,7 @@ igt_main
for_each_connected_output(&data.display, output) {
bool ultrajoiner_found = false, bigjoiner_found = false, force_joiner_supported = false;
+ bool non_joiner_found = false;
drmModeConnector *connector = output->config.connector;
/*
@@ -533,6 +577,7 @@ igt_main
*/
bigjoiner_found = bigjoiner_mode_found(data.drm_fd, connector, max_dotclock, &mode);
ultrajoiner_found = ultrajoiner_mode_found(data.drm_fd, connector, max_dotclock, &mode);
+ non_joiner_found = non_joiner_mode_found(data.drm_fd, connector, max_dotclock, &mode);
if (igt_has_force_joiner_debugfs(data.drm_fd, output->name))
force_joiner_supported = true;
@@ -548,6 +593,9 @@ igt_main
else if (force_joiner_supported)
data.non_big_joiner_output[data.non_big_joiner_output_count++] = output;
+ if (non_joiner_found)
+ data.non_joiner_output[data.non_joiner_output_count++] = output;
+
data.output_count++;
}
if (data.big_joiner_output_count == 1 && data.non_big_joiner_output_count >= 1) {
@@ -713,6 +761,16 @@ igt_main
}
}
+ igt_describe("Verify the basic modeset on the maximum non-joiner mode across "
+ "all pipes");
+ igt_subtest_with_dynamic("basic-max-non-joiner") {
+ igt_require_f(data.n_pipes >= 1,
+ "At least one pipe is required.\n");
+ igt_require_f(data.non_joiner_output_count > 0,
+ "No suitable non-joiner mode found\n");
+ test_basic_max_non_joiner(&data);
+ }
+
igt_fixture {
igt_display_fini(&data.display);
drm_close_driver(data.drm_fd);
--
2.25.1
next prev parent reply other threads:[~2025-02-10 18:20 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-10 18:36 [PATCH i-g-t 0/3] tests/intel/kms_joiner: Add a new test to validate non-joiner mode Jeevan B
2025-02-10 18:36 ` [PATCH i-g-t 1/3] lib/igt_kms: Add lib changes to check if joiner is enabled for a pipe Jeevan B
2025-02-10 18:36 ` [PATCH i-g-t 2/3] lib/igt_kms: Add support to check joiner mode limit Jeevan B
2025-02-10 18:36 ` Jeevan B [this message]
2025-02-10 23:33 ` ✓ i915.CI.BAT: success for tests/intel/kms_joiner: Add a new test to validate non-joiner mode (rev6) Patchwork
2025-02-10 23:48 ` ✓ Xe.CI.BAT: " Patchwork
2025-02-11 7:35 ` ✗ i915.CI.Full: failure " Patchwork
2025-02-11 10:41 ` ✗ Xe.CI.Full: " Patchwork
-- strict thread matches above, loose matches on Subject: below --
2025-02-12 7:36 [PATCH i-g-t 0/3] tests/intel/kms_joiner: Add a new test to validate non-joiner mode Jeevan B
2025-02-12 7:36 ` [PATCH i-g-t 3/3] " Jeevan B
2025-02-12 10:50 ` Karthik B S
2025-02-04 18:27 [PATCH i-g-t 0/3] " Jeevan B
2025-02-04 18:27 ` [PATCH i-g-t 3/3] " Jeevan B
2025-02-07 8:25 ` Karthik B S
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250210183611.1326980-4-jeevan.b@intel.com \
--to=jeevan.b@intel.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=karthik.b.s@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox