[RFC v2 i-g-t 3/5] Add tests: core_debugfs and core_debugfs_display_on_off
Peter Senna Tschudin
peter.senna at linux.intel.com
Tue May 20 19:29:47 UTC 2025
Introduces two GPU-agnostic tests, core_debugfs and
core_debugfs_display_on_off. These tests are designed to function with
any GPU, not limited to i915 and Xe.
core_debugfs: Attempts to open every file in debugfs associated with the
GPU.
core_debugfs_display_on_off: Powers on all available displays before
reading debugfs files, and then powers off all displays before reading
the files again.
Cc: marcin.bernatowicz at intel.com
Cc: himanshu.girotra at intel.com
Cc: aditya.chauhan at intel.com
Cc: pravalika.gurram at intel.com
Cc: sai.gowtham.ch at intel.com
Cc: ramadevi.gandi at intel.com
Cc: lucas.demarchi at intel.com
Cc: rodrigo.vivi at intel.com
Cc: kamil.konieczny at linux.intel.com
Cc: katarzyna.piecielska at intel.com
Cc: zbigniew.kempczynski at intel.com
Signed-off-by: Peter Senna Tschudin <peter.senna at linux.intel.com>
---
tests/core_debugfs.c | 54 +++++++++
tests/core_debugfs_display_on_off.c | 171 ++++++++++++++++++++++++++++
tests/meson.build | 2 +
3 files changed, 227 insertions(+)
create mode 100644 tests/core_debugfs.c
create mode 100644 tests/core_debugfs_display_on_off.c
diff --git a/tests/core_debugfs.c b/tests/core_debugfs.c
new file mode 100644
index 000000000..a2f9a8dac
--- /dev/null
+++ b/tests/core_debugfs.c
@@ -0,0 +1,54 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2025 Intel Corporation
+ */
+
+#include "igt.h"
+#include "igt_debugfs.h"
+#include "igt_dir.h"
+
+/**
+ * TEST: debugfs test
+ * Description: Read entries from debugfs
+ * Category: Core
+ * Mega feature: General Core features
+ * Sub-category: uapi
+ * Functionality: debugfs
+ * Feature: core
+ * Test category: uapi
+ *
+ * SUBTEST: debugfs-read-all-entries
+ * Description: Read all entries from debugfs path validating debugfs entries
+ */
+
+IGT_TEST_DESCRIPTION("Read entries from debugfs");
+
+igt_main
+{
+ int debugfs = -1;
+ int fd = -1;
+ igt_dir_t *igt_dir = NULL;
+
+ igt_fixture {
+ fd = drm_open_driver_master(DRIVER_ANY);
+ debugfs = igt_debugfs_dir(fd);
+ igt_require(debugfs >= 0);
+
+ igt_dir = igt_dir_create(debugfs);
+ igt_require(igt_dir != NULL);
+
+ kmstest_set_vt_graphics_mode();
+ }
+
+ igt_describe("Read all entries from debugfs path.");
+ igt_subtest("debugfs-read-all-entries") {
+ igt_dir_scan_dirfd(igt_dir, -1);
+ igt_dir_process_files(igt_dir, NULL, NULL);
+ }
+
+ igt_fixture {
+ igt_dir_destroy(igt_dir);
+ close(debugfs);
+ drm_close_driver(fd);
+ }
+}
diff --git a/tests/core_debugfs_display_on_off.c b/tests/core_debugfs_display_on_off.c
new file mode 100644
index 000000000..7f2ebc66a
--- /dev/null
+++ b/tests/core_debugfs_display_on_off.c
@@ -0,0 +1,171 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2025 Intel Corporation
+ */
+
+#include "igt.h"
+#include "igt_debugfs.h"
+#include "igt_dir.h"
+
+/**
+ * TEST: debugfs display on/off test
+ * Description: Read entries from debugfs, and sysfs paths.
+ * Category: Core
+ * Mega feature: General Core features
+ * Sub-category: uapi
+ * Functionality: debugfs
+ * Feature: core
+ * Test category: uapi
+ *
+ * SUBTEST: debugfs-read-all-entries-display-off
+ * Description: Read all debugfs entries with display off.
+ *
+ * SUBTEST: debugfs-read-all-entries-display-on
+ * Description: Read all debugfs entries with display on.
+ */
+
+/** bool igt_kms_all_displays_on: Try to turn on all displays
+ * @fd: file descriptor for the drm device
+ *
+ * Returns: void
+ */
+static void igt_display_all_on(igt_display_t *display)
+{
+ struct igt_fb fb[IGT_MAX_PIPES];
+ enum pipe pipe;
+ int ret;
+
+ /* try to light all pipes */
+retry:
+ for_each_pipe(display, pipe) {
+ igt_output_t *output;
+
+ for_each_valid_output_on_pipe(display, pipe, output) {
+ igt_plane_t *primary;
+ drmModeModeInfo *mode;
+
+ if (output->pending_pipe != PIPE_NONE)
+ continue;
+
+ igt_output_set_pipe(output, pipe);
+ primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
+ mode = igt_output_get_mode(output);
+ igt_create_pattern_fb(display->drm_fd,
+ mode->hdisplay, mode->vdisplay,
+ DRM_FORMAT_XRGB8888,
+ DRM_FORMAT_MOD_LINEAR, &fb[pipe]);
+
+ /* Set a valid fb as some debugfs like to
+ * inspect it on a active pipe
+ */
+ igt_plane_set_fb(primary, &fb[pipe]);
+ break;
+ }
+ }
+
+ if (display->is_atomic)
+ ret = igt_display_try_commit_atomic(display,
+ DRM_MODE_ATOMIC_TEST_ONLY |
+ DRM_MODE_ATOMIC_ALLOW_MODESET,
+ NULL);
+ else
+ ret = igt_display_try_commit2(display, COMMIT_LEGACY);
+
+ if (ret) {
+ igt_output_t *output;
+ bool found = igt_override_all_active_output_modes_to_fit_bw(display);
+
+ igt_require_f(found, "No valid mode combo found.\n");
+
+ for_each_connected_output(display, output)
+ igt_output_set_pipe(output, PIPE_NONE);
+
+ goto retry;
+ }
+
+ igt_display_commit2(display, display->is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY);
+}
+
+/** bool igt_kms_all_displays_off: Try to turn off all displays
+ * @fd: file descriptor for the drm device
+ *
+ * Returns: void
+ */
+static void igt_display_all_off(igt_display_t *display)
+{
+ enum pipe pipe;
+ igt_output_t *output;
+ igt_plane_t *plane;
+
+ for_each_connected_output(display, output)
+ igt_output_set_pipe(output, PIPE_NONE);
+
+ for_each_pipe(display, pipe)
+ for_each_plane_on_pipe(display, pipe, plane)
+ igt_plane_set_fb(plane, NULL);
+
+ igt_display_commit2(display, display->is_atomic ? COMMIT_ATOMIC : COMMIT_LEGACY);
+}
+
+static void kms_tests(int fd, igt_dir_t *igt_dir)
+{
+ igt_display_t *display;
+ char test_name[64];
+
+ display = calloc(1, sizeof(*display));
+
+ igt_fixture
+ igt_display_require(display, fd);
+
+ snprintf(test_name, sizeof(test_name),
+ "debugfs-read-all-entries-display-on");
+
+ igt_subtest(test_name) {
+ /* try to light all pipes */
+ igt_display_all_on(display);
+
+ igt_dir_scan_dirfd(igt_dir, -1);
+ igt_dir_process_files(igt_dir, NULL, NULL);
+ }
+
+ snprintf(test_name, sizeof(test_name),
+ "debugfs-read-all-entries-display-off");
+
+ igt_subtest(test_name) {
+ igt_display_all_off(display);
+
+ igt_dir_scan_dirfd(igt_dir, -1);
+ igt_dir_process_files(igt_dir, NULL, NULL);
+ }
+
+ igt_fixture
+ igt_display_fini(display);
+}
+
+IGT_TEST_DESCRIPTION("Read entries from debugfs with display on/off.");
+
+igt_main
+{
+ int debugfs = -1;
+ int fd = -1;
+ igt_dir_t *igt_dir = NULL;
+
+ igt_fixture {
+ fd = drm_open_driver_master(DRIVER_ANY);
+ debugfs = igt_debugfs_dir(fd);
+ igt_require(debugfs >= 0);
+
+ igt_dir = igt_dir_create(debugfs);
+ igt_require(igt_dir != NULL);
+
+ kmstest_set_vt_graphics_mode();
+ }
+
+ igt_subtest_group
+ kms_tests(fd, igt_dir);
+
+ igt_fixture {
+ close(debugfs);
+ drm_close_driver(fd);
+ }
+}
diff --git a/tests/meson.build b/tests/meson.build
index 335d82e9d..c7a689ab3 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -1,5 +1,7 @@
test_progs = [
'core_auth',
+ 'core_debugfs',
+ 'core_debugfs_display_on_off',
'core_getclient',
'core_getstats',
'core_getversion',
--
2.43.0
More information about the igt-dev
mailing list