[PATCH i-g-t 6/6] tests/intel/kms_cdclk: Add get_max_cdclk_freq()

Swati Sharma swati2.sharma at intel.com
Mon Dec 30 19:03:15 UTC 2024


Replace hardcoded max cdclk freq with one computed from debugfs.
Also, add same condition for all_outputs subtest.

Signed-off-by: Swati Sharma <swati2.sharma at intel.com>
---
 tests/intel/kms_cdclk.c | 34 +++++++++++++++++++++++++++++++---
 1 file changed, 31 insertions(+), 3 deletions(-)

diff --git a/tests/intel/kms_cdclk.c b/tests/intel/kms_cdclk.c
index fcbfa3f37..2ea805b94 100644
--- a/tests/intel/kms_cdclk.c
+++ b/tests/intel/kms_cdclk.c
@@ -53,7 +53,6 @@ IGT_TEST_DESCRIPTION("Test cdclk features : crawling and squashing");
 #define HDISPLAY_4K	3840
 #define VDISPLAY_4K	2160
 #define VREFRESH	60
-#define MAX_CDCLK_4K	307200
 
 /* Test flags */
 enum {
@@ -104,6 +103,34 @@ static int get_current_cdclk_freq(int debugfs_fd)
 	return cdclk_freq_current;
 }
 
+static int get_max_cdclk_freq(int debugfs_fd)
+{
+	int cdclk_freq_max;
+	char buf[1024];
+	char *start_loc;
+	int res;
+
+	/*
+	 * Display specific clock frequency info is moved to i915_cdclk_info,
+	 * On older kernels if this debugfs is not found, fallback to read from
+	 * i915_frequency_info.
+	 *
+	 * FIXME: As of now, XE debugfs is still using i915 namespace, once the
+	 * Kernel changes are landed, update this to use the XE specific debugfs.
+	 */
+	res = igt_debugfs_simple_read(debugfs_fd, "i915_cdclk_info",
+				      buf, sizeof(buf));
+	if (res <= 0)
+		res = igt_debugfs_simple_read(debugfs_fd, "i915_frequency_info",
+					      buf, sizeof(buf));
+	igt_require(res > 0);
+
+	igt_assert(start_loc = strstr(buf, "Max CD clock frequency: "));
+	igt_assert_eq(sscanf(start_loc, "Max CD clock frequency: %d", &cdclk_freq_max), 1);
+
+	return cdclk_freq_max;
+}
+
 static __u64 get_mode_data_rate(drmModeModeInfo *mode)
 {
 	__u64 data_rate = (__u64)mode->hdisplay * (__u64)mode->vdisplay * (__u64)mode->vrefresh;
@@ -250,7 +277,7 @@ static void test_mode_transition(data_t *data, enum pipe pipe, igt_output_t *out
 	igt_info("CD clock frequency %d -> %d\n", cdclk_ref, cdclk_new);
 
 	/* cdclk should bump */
-	if (cdclk_new != MAX_CDCLK_4K)
+	if (cdclk_new != get_max_cdclk_freq(debugfs_fd))
 		igt_assert_lt(cdclk_ref, cdclk_new);
 
 	/* cleanup */
@@ -348,7 +375,8 @@ static void test_mode_transition_on_all_outputs(data_t *data)
 	igt_info("CD clock frequency %d -> %d\n", cdclk_ref, cdclk_new);
 
 	/* cdclk should bump */
-	igt_assert_lt(cdclk_ref, cdclk_new);
+	if (cdclk_new != get_max_cdclk_freq(debugfs_fd))
+		igt_assert_lt(cdclk_ref, cdclk_new);
 
 	do_cleanup_display(display);
 	igt_remove_fb(data->drm_fd, &fb);
-- 
2.25.1



More information about the igt-dev mailing list