All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeevan B <jeevan.b@intel.com>
To: igt-dev@lists.freedesktop.org
Cc: Jeevan B <jeevan.b@intel.com>
Subject: [PATCH i-g-t v2 3/3] tests/kms_setmode: Use public igt_display helper APIs
Date: Tue, 23 Jun 2026 13:39:26 +0530	[thread overview]
Message-ID: <20260623080927.3216500-4-jeevan.b@intel.com> (raw)
In-Reply-To: <20260623080927.3216500-1-jeevan.b@intel.com>

Replace all direct access to igt_display_t internals with public
helper APIs to maintain proper encapsulation and improve forward
compatibility with IGT. This refactoring updates code to use
igt_display and igt_crtc accessors, adjusts function signatures
to pass objects instead of indices, and removes reliance on internal
struct fields, ensuring cleaner, more robust, and idiomatic
usage without changing functionality.

Signed-off-by: Jeevan B <jeevan.b@intel.com>
---
 tests/kms_setmode.c | 68 ++++++++++++++++++++++++++++-----------------
 1 file changed, 43 insertions(+), 25 deletions(-)

diff --git a/tests/kms_setmode.c b/tests/kms_setmode.c
index 419f5b518..1d5c4dfb0 100644
--- a/tests/kms_setmode.c
+++ b/tests/kms_setmode.c
@@ -334,12 +334,14 @@ static int get_encoder_idx(drmModeRes *resources, drmModeEncoder *encoder)
 }
 
 static void get_crtc_config_str(struct crtc_config *crtc, char *buf,
-				size_t buf_size)
+				size_t buf_size, igt_display_t *disp)
 {
-	igt_crtc_t *igt_crtc = &display.crtcs[crtc->crtc_idx];
+	igt_crtc_t *igt_crtc = igt_crtc_for_crtc_index(disp, crtc->crtc_idx);
 	int pos;
 	int i;
 
+	igt_assert(igt_crtc);
+
 	pos = snprintf(buf, buf_size,
 		       "CRTC[%d] [Pipe %s] Mode: %s@%dHz Connectors: ",
 		       igt_crtc->crtc_id, kmstest_pipe_name(igt_crtc->pipe),
@@ -374,7 +376,6 @@ static void setup_crtcs(const struct test_config *tconf,
 	/* Fetch resources locally only for encoder clone validity checks */
 	resources = drmModeGetResources(drm_fd);
 	igt_assert(resources);
-
 	encoder_usage_count = calloc(resources->count_encoders,
 				     sizeof(*encoder_usage_count));
 	igt_assert(encoder_usage_count);
@@ -409,15 +410,16 @@ static void setup_crtcs(const struct test_config *tconf,
 			igt_output_t *output;
 			drmModeConnector *connector;
 			drmModeEncoder *encoder;
-			igt_crtc_t *igt_crtc;
+			igt_crtc_t *crtc_obj;
 
 			crtc->cconfs[j] = cconf[i + j];
 			output = cconf[i + j].output;
 			connector = output->config.connector;
-			igt_crtc = &disp->crtcs[crtc->crtc_idx];
+			crtc_obj = igt_crtc_for_crtc_index(disp, crtc->crtc_idx);
+			igt_assert(crtc_obj);
 
 			/* Check CRTC/output compatibility using IGT helper */
-			config_valid &= igt_crtc_connector_valid(igt_crtc, output);
+			config_valid &= igt_crtc_connector_valid(crtc_obj, output);
 
 			/* Intel connectors have only a single encoder */
 			if (connector->count_encoders == 1) {
@@ -491,7 +493,7 @@ static void cleanup_crtcs(struct crtc_config *crtcs, int crtc_count)
 #define frame_time(km) (1000.0 * (km)->htotal * (km)->vtotal / (km)->clock)
 #define line_time(km) (1000.0 * (km)->htotal / (km)->clock)
 
-static bool check_timings(int crtc_idx, const drmModeModeInfo *kmode)
+static bool check_timings(igt_crtc_t *crtc, const drmModeModeInfo *kmode)
 {
 #define CALIBRATE_TS_STEPS 120 /* ~2s has to be less than 128! */
 	drmVBlank wait;
@@ -503,10 +505,9 @@ static bool check_timings(int crtc_idx, const drmModeModeInfo *kmode)
 	double mean;
 	double stddev;
 	int n;
-	int pipe_crtc_index = display.crtcs[crtc_idx].crtc_index;
 
 	memset(&wait, 0, sizeof(wait));
-	wait.request.type = kmstest_get_vbl_flag(pipe_crtc_index);
+	wait.request.type = igt_crtc_get_vbl_flag(crtc);
 	wait.request.type |= DRM_VBLANK_RELATIVE | DRM_VBLANK_NEXTONMISS;
 	do_or_die(drmWaitVBlank(drm_fd, &wait));
 
@@ -516,7 +517,7 @@ static bool check_timings(int crtc_idx, const drmModeModeInfo *kmode)
 	last_timestamp += wait.reply.tval_usec;
 
 	memset(&wait, 0, sizeof(wait));
-	wait.request.type = kmstest_get_vbl_flag(pipe_crtc_index);
+	wait.request.type = igt_crtc_get_vbl_flag(crtc);
 	wait.request.type |= DRM_VBLANK_ABSOLUTE | DRM_VBLANK_EVENT;
 	wait.request.sequence = last_seq;
 	for (n = 0; n < CALIBRATE_TS_STEPS; n++) {
@@ -526,7 +527,7 @@ static bool check_timings(int crtc_idx, const drmModeModeInfo *kmode)
 		do_or_die(drmWaitVBlank(drm_fd, &wait));
 
 		/* Double check that haven't already missed the vblank */
-		check.request.type = kmstest_get_vbl_flag(pipe_crtc_index);
+		check.request.type = igt_crtc_get_vbl_flag(crtc);
 		check.request.type |= DRM_VBLANK_RELATIVE;
 		do_or_die(drmWaitVBlank(drm_fd, &check));
 
@@ -649,7 +650,7 @@ retry:
 	}
 
 	for (i = 0; i < crtc_count; i++) {
-		get_crtc_config_str(&crtcs[i], str_buf[i], sizeof(str_buf[i]));
+		get_crtc_config_str(&crtcs[i], str_buf[i], sizeof(str_buf[i]), tconf->display);
 		crtc_strs[i] = &str_buf[i][0];
 	}
 
@@ -661,12 +662,13 @@ retry:
 
 	for (i = 0; i < crtc_count; i++) {
 		igt_plane_t *primary;
-		igt_crtc_t *igt_crtc;
+		igt_crtc_t *crtc_obj;
 		bool invalid_clone;
 		int j;
 
 		crtc = &crtcs[i];
-		igt_crtc = &display.crtcs[crtc->crtc_idx];
+		crtc_obj = igt_crtc_for_crtc_index(tconf->display, crtc->crtc_idx);
+		igt_assert(crtc_obj);
 
 		/* Treat this as expected failure for invalid tests.*/
 		invalid_clone = (tconf->flags & TEST_INVALID) &&
@@ -686,11 +688,11 @@ retry:
 		for (j = 0; j < crtc->connector_count; j++) {
 			igt_output_t *output = crtc->cconfs[j].output;
 
-			igt_output_set_crtc(output, igt_crtc);
+			igt_output_set_crtc(output, crtc_obj);
 			igt_output_override_mode(output, &crtc->mode);
 		}
 
-		primary = igt_crtc_get_plane_type(igt_crtc, DRM_PLANE_TYPE_PRIMARY);
+		primary = igt_crtc_get_plane_type(crtc_obj, DRM_PLANE_TYPE_PRIMARY);
 		igt_plane_set_fb(primary, &crtc->fb_info);
 	}
 
@@ -698,8 +700,13 @@ retry:
 					    DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
 
 	if (is_intel_device(drm_fd) && ret == 0) {
-		for (i = 0; i < crtc_count; i++)
-			intel_drrs_disable(&display.crtcs[crtcs[i].crtc_idx]);
+		for (i = 0; i < crtc_count; i++) {
+			igt_crtc_t *crtc_obj = igt_crtc_for_crtc_index(tconf->display,
+							       crtcs[i].crtc_idx);
+
+			igt_assert(crtc_obj);
+			intel_drrs_disable(crtc_obj);
+		}
 	}
 
 	if (ret < 0) {
@@ -721,9 +728,12 @@ retry:
 
 	if (ret == 0 && tconf->flags & TEST_TIMINGS) {
 		bool status = false;
+		igt_crtc_t *crtc_obj = igt_crtc_for_crtc_index(tconf->display,
+						       crtcs[0].crtc_idx);
+		igt_assert(crtc_obj);
 
 		for (int attempt = 1; attempt <= 2; attempt++) {
-			status = check_timings(crtcs[0].crtc_idx, &crtcs[0].mode);
+			status = check_timings(crtc_obj, &crtcs[0].mode);
 			if (status)
 				break;
 			igt_info("Timing check failed on attempt %d, retrying...\n", attempt);
@@ -736,13 +746,16 @@ retry:
 }
 
 static int get_test_name_str(struct crtc_config *crtc, char *buf,
-				size_t buf_size)
+				size_t buf_size, igt_display_t *disp)
 {
+	igt_crtc_t *crtc_obj = igt_crtc_for_crtc_index(disp, crtc->crtc_idx);
 	int pos;
 	int i;
 
+	igt_assert(crtc_obj);
+
 	pos = snprintf(buf, buf_size, "pipe-%s-",
-		       kmstest_pipe_name(display.crtcs[crtc->crtc_idx].pipe));
+		       kmstest_pipe_name(crtc_obj->pipe));
 
 	for (i = 0; i < crtc->connector_count; i++) {
 		drmModeConnector *connector = crtc->cconfs[i].output->config.connector;
@@ -774,7 +787,9 @@ static void test_one_combination(const struct test_config *tconf,
 		for (i = 0; i < crtc_count; i++) {
 			if (i > 0)
 				pos += snprintf(&test_name[pos], ARRAY_SIZE(test_name) - pos, "-");
-			pos += get_test_name_str(&crtcs[i], &test_name[pos], ARRAY_SIZE(test_name) - pos);
+			pos += get_test_name_str(&crtcs[i], &test_name[pos],
+						 ARRAY_SIZE(test_name) - pos,
+						 tconf->display);
 		}
 
 		if (!is_intel_device(drm_fd))
@@ -783,7 +798,8 @@ static void test_one_combination(const struct test_config *tconf,
 		for (i = 0; i < crtc_count; i++) {
 			struct crtc_config *crtc = &crtcs[i];
 			char conn_name[64], prev_conn_name[64];
-			int n_valid_crtcs = get_crtc_count(tconf->display->n_crtcs, extended);
+			int n_valid_crtcs = get_crtc_count(igt_display_n_crtcs(tconf->display),
+							  extended);
 
 			snprintf(conn_name, sizeof(conn_name), "%s",
 				 igt_output_name(crtc->cconfs->output));
@@ -933,7 +949,8 @@ static void test_combinations(const struct test_config *tconf,
 	struct combination_set crtc_combs;
 	struct connector_config *cconfs;
 	int i;
-	int crtc_count = get_crtc_count(tconf->display->n_crtcs, extended);
+	int crtc_count = get_crtc_count(igt_display_n_crtcs(tconf->display),
+					  extended);
 
 	igt_assert(tconf->display);
 
@@ -986,7 +1003,8 @@ free_cconfs:
 static void run_test(const struct test_config *tconf)
 {
 	int connector_num;
-	int crtc_count = get_crtc_count(tconf->display->n_crtcs, extended);
+	int crtc_count = get_crtc_count(igt_display_n_crtcs(tconf->display),
+					  extended);
 
 	connector_num = tconf->flags & TEST_CLONE ? 2 : 1;
 	for (; connector_num <= crtc_count; connector_num++)
-- 
2.43.0


  parent reply	other threads:[~2026-06-23  8:11 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-23  8:09 [PATCH i-g-t v2 0/3] tests/kms_setmode: Convert to igt_display atomic API Jeevan B
2026-06-23  8:09 ` [PATCH i-g-t v2 1/3] tests/kms_setmode: Drop invalid-clone-single-crtc-stealing subtest Jeevan B
2026-06-23  8:09 ` [PATCH i-g-t v2 2/3] tests/kms_setmode: Convert modeset path to atomic API Jeevan B
2026-06-23  8:26   ` Jani Nikula
2026-06-23  8:09 ` Jeevan B [this message]
2026-06-23  8:31   ` [PATCH i-g-t v2 3/3] tests/kms_setmode: Use public igt_display helper APIs Jani Nikula
2026-06-23 13:26 ` ✓ i915.CI.BAT: success for tests/kms_setmode: Convert to igt_display atomic API (rev2) Patchwork

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=20260623080927.3216500-4-jeevan.b@intel.com \
    --to=jeevan.b@intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    /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 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.