[RFC] [PATCH v1 1/2] tests/intel/kms_pm_vrsr: Add test to check primary panel
Mohammed Thasleem
mohammed.thasleem at intel.com
Mon Jun 23 19:12:29 UTC 2025
This test detect primary connected panel and does the flip on it.
Signed-off-by: Mohammed Thasleem <mohammed.thasleem at intel.com>
---
tests/intel/kms_pm_vrsr.c | 132 ++++++++++++++++++++++++++++++++++++++
tests/meson.build | 1 +
2 files changed, 133 insertions(+)
create mode 100644 tests/intel/kms_pm_vrsr.c
diff --git a/tests/intel/kms_pm_vrsr.c b/tests/intel/kms_pm_vrsr.c
new file mode 100644
index 000000000..671621a66
--- /dev/null
+++ b/tests/intel/kms_pm_vrsr.c
@@ -0,0 +1,132 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2025 Intel Corporation
+ */
+
+/**
+ * TEST: kms pm vrsr
+ * Category: Display
+ * Description: Tests to validate vram self refresh along with display flips.
+ * Driver requirement: xe
+ * Mega feature: Display Power Management
+ */
+
+#include <fcntl.h>
+
+#include "igt.h"
+#include "igt_sysfs.h"
+
+/**
+ * SUBTEST: vram-self-refresh
+ * Description: This test validates display flips with vram self refresh
+ *
+ */
+
+IGT_TEST_DESCRIPTION("This test validates display flips with vram self refresh.");
+
+bool kms_poll_saved_state;
+
+typedef struct {
+ int fd_xe;
+ int debugfs_fd;
+ uint32_t devid;
+ char *debugfs_dump;
+ igt_display_t display;
+ struct igt_fb fb_white;
+ drmModeModeInfo *mode;
+ igt_output_t *output;
+} device_t;
+
+static void vram_self_refresh(device_t *device);
+
+static void display_fini(device_t *device)
+{
+ igt_display_fini(&device->display);
+}
+
+static void setup_primary(device_t *device)
+{
+ igt_plane_t *primary;
+
+ primary = igt_output_get_plane_type(device->output,
+ DRM_PLANE_TYPE_PRIMARY);
+ igt_plane_set_fb(primary, NULL);
+ igt_create_color_fb(device->fd_xe,
+ device->mode->hdisplay, device->mode->vdisplay,
+ DRM_FORMAT_XRGB8888,
+ DRM_FORMAT_MOD_LINEAR,
+ 1.0, 1.0, 1.0,
+ &device->fb_white);
+ igt_plane_set_fb(primary, &device->fb_white);
+ igt_display_commit(&device->display);
+}
+
+static void detect_primary_output(device_t *device)
+{
+ igt_display_t *display = &device->display;
+ igt_output_t *output;
+ enum pipe pipe;
+
+ for_each_pipe_with_valid_output(display, pipe, output) {
+ drmModeConnectorPtr c = output->config.connector;
+
+ if (c->connection != DRM_MODE_CONNECTED)
+ continue;
+
+ igt_display_reset(display);
+ igt_output_set_pipe(output, pipe);
+
+ if (!intel_pipe_output_combo_valid(display))
+ continue;
+
+ device->output = output;
+ device->mode = igt_output_get_mode(output);
+
+ break;
+ }
+}
+static void cleanup(device_t *device)
+{
+ igt_plane_t *primary;
+
+ primary = igt_output_get_plane_type(device->output,
+ DRM_PLANE_TYPE_PRIMARY);
+ igt_plane_set_fb(primary, NULL);
+ igt_display_commit(&device->display);
+ igt_remove_fb(device->fd_xe, &device->fb_white);
+}
+
+
+static void vram_self_refresh(device_t *device)
+{
+ detect_primary_output(device);
+ setup_primary(device);
+ cleanup(device);
+}
+
+igt_main
+{
+ device_t device = {};
+
+ igt_fixture {
+ device.fd_xe = drm_open_driver_master(DRIVER_INTEL | DRIVER_XE);
+ device.debugfs_fd = igt_debugfs_dir(device.fd_xe);
+ igt_require(device.debugfs_fd != -1);
+ kmstest_set_vt_graphics_mode();
+ device.devid = intel_get_drm_devid(device.fd_xe);
+ igt_display_require(&device.display, device.fd_xe);
+ }
+
+ igt_describe("This test validates display flips with vram self refresh");
+ igt_subtest("vram-self-refresh") {
+ vram_self_refresh(&device);
+ }
+
+ igt_fixture {
+ close(device.debugfs_fd);
+ display_fini(&device);
+ drm_close_driver(device.fd_xe);
+ }
+
+ igt_exit();
+}
diff --git a/tests/meson.build b/tests/meson.build
index 55bcf57ec..3b8edfe89 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -265,6 +265,7 @@ intel_kms_progs = [
'kms_pm_dc',
'kms_pm_lpsp',
'kms_pm_rpm',
+ 'kms_pm_vrsr',
'kms_psr',
'kms_psr2_sf',
'kms_psr2_su',
--
2.25.1
More information about the igt-dev
mailing list