From: Peter Senna Tschudin <peter.senna@linux.intel.com>
To: igt-dev@lists.freedesktop.org
Cc: Peter Senna Tschudin <peter.senna@linux.intel.com>,
marcin.bernatowicz@intel.com, kamil.konieczny@linux.intel.com,
katarzyna.piecielska@intel.com, zbigniew.kempczynski@intel.com,
ewelina.musial@intel.com
Subject: [PATCH i-g-t 5/5] tests/intel/xe_debugfs: Add Xe-specific debugfs test
Date: Thu, 22 May 2025 13:00:48 +0200 [thread overview]
Message-ID: <20250522110126.628720-6-peter.senna@linux.intel.com> (raw)
In-Reply-To: <20250522110126.628720-1-peter.senna@linux.intel.com>
xe_debugfs is a test specific to Xe GPUs. It is intended to complement
the existing generic debugfs tests:
- core_debugfs
- core_debugfs_display_on_off
Additionally, this test has been updated to use the igt_dir
infrastructure, resulting in simpler code.
Cc: marcin.bernatowicz@intel.com
Cc: kamil.konieczny@linux.intel.com
Cc: katarzyna.piecielska@intel.com
Cc: zbigniew.kempczynski@intel.com
Cc: ewelina.musial@intel.com
Signed-off-by: Peter Senna Tschudin <peter.senna@linux.intel.com>
---
tests/intel-ci/xe-fast-feedback.testlist | 2 +
tests/intel/xe_debugfs.c | 208 +++++++++++++++++++++++
tests/meson.build | 1 +
3 files changed, 211 insertions(+)
create mode 100644 tests/intel/xe_debugfs.c
diff --git a/tests/intel-ci/xe-fast-feedback.testlist b/tests/intel-ci/xe-fast-feedback.testlist
index 0a02667d7..8a1841ba6 100644
--- a/tests/intel-ci/xe-fast-feedback.testlist
+++ b/tests/intel-ci/xe-fast-feedback.testlist
@@ -75,6 +75,8 @@ igt@xe_create@create-execqueues-noleak
igt@xe_create@create-execqueues-leak
igt@xe_create@create-invalid-mbz
igt@xe_create@create-massive-size
+igt@xe_debugfs@xe-base
+igt@xe_debugfs@xe-forcewake
igt@xe_dma_buf_sync@export-dma-buf-once-write-sync
igt@xe_dma_buf_sync@export-dma-buf-once-read-sync
igt@xe_dma_buf_sync@export-dma-buf-once-read-write-sync
diff --git a/tests/intel/xe_debugfs.c b/tests/intel/xe_debugfs.c
new file mode 100644
index 000000000..f2d0b5aa9
--- /dev/null
+++ b/tests/intel/xe_debugfs.c
@@ -0,0 +1,208 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2025 Intel Corporation
+ */
+
+#include <dirent.h>
+#include <fcntl.h>
+
+#include "igt.h"
+#include "igt_debugfs.h"
+#include "igt_dir.h"
+#include "igt_sysfs.h"
+#include "xe/xe_query.h"
+
+
+struct {
+ bool warn_on_not_hit;
+} opt = { 0 };
+
+/**
+ * TEST: Xe debugfs test
+ * Description: Xe-specific debugfs tests. These are complementary to the
+ * core_debugfs and core_debugfs_display_on_off tests.
+ *
+ * Category: Core
+ * Mega feature: General Core features
+ * Sub-category: uapi
+ * Functionality: debugfs
+ * Feature: core
+ * Test category: uapi
+ *
+ */
+
+IGT_TEST_DESCRIPTION("Read entries from debugfs, and sysfs paths.");
+
+static int xe_validate_entries(igt_dir_t *igt_dir,
+ const char * const str_val[], int str_cnt)
+{
+ igt_dir_file_list_t *file_list_entry;
+
+ if (!igt_dir)
+ return -1;
+
+ igt_dir_scan_dirfd(igt_dir, -1);
+
+ for (int i = 0; i < str_cnt; i++) {
+ int hit = 0;
+
+ igt_list_for_each_entry(file_list_entry,
+ &igt_dir->file_list_head, link) {
+ if (strcmp(file_list_entry->relative_path,
+ str_val[i]) == 0) {
+ hit = 1;
+ break;
+ }
+ }
+
+ if (!hit && opt.warn_on_not_hit)
+ igt_warn("no test for: %s\n", str_val[i]);
+ }
+
+ return 0;
+}
+
+/**
+ * SUBTEST: xe-base
+ * Description: Check if various debugfs devnodes exist and test reading them
+ */
+static void
+xe_test_base(int fd, struct drm_xe_query_config *config, igt_dir_t *igt_dir)
+{
+ uint16_t devid = intel_get_drm_devid(fd);
+ static const char * const expected_files[] = {
+ "gt0",
+ "gt1",
+ "stolen_mm",
+ "gtt_mm",
+ "vram0_mm",
+ "forcewake_all",
+ "info",
+ "gem_names",
+ "clients",
+ "name"
+ };
+ char reference[4096];
+ int val = 0;
+
+ igt_assert(config);
+ sprintf(reference, "devid 0x%llx",
+ config->info[DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID] & 0xffff);
+ igt_assert(igt_debugfs_search(fd, "info", reference));
+
+ sprintf(reference, "revid %lld",
+ config->info[DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID] >> 16);
+ igt_assert(igt_debugfs_search(fd, "info", reference));
+
+ sprintf(reference, "is_dgfx %s", config->info[DRM_XE_QUERY_CONFIG_FLAGS] &
+ DRM_XE_QUERY_CONFIG_FLAG_HAS_VRAM ? "yes" : "no");
+
+ igt_assert(igt_debugfs_search(fd, "info", reference));
+
+ if (intel_gen(devid) < 20) {
+ switch (config->info[DRM_XE_QUERY_CONFIG_VA_BITS]) {
+ case 48:
+ val = 3;
+ break;
+ case 57:
+ val = 4;
+ break;
+ }
+
+ sprintf(reference, "vm_max_level %d", val);
+ igt_assert(igt_debugfs_search(fd, "info", reference));
+ }
+
+ snprintf(reference, sizeof(reference), "tile_count %d", xe_sysfs_get_num_tiles(fd));
+ igt_assert(igt_debugfs_search(fd, "info", reference));
+
+ igt_assert(igt_debugfs_exists(fd, "gt0", O_RDONLY));
+
+ igt_assert(igt_debugfs_exists(fd, "gtt_mm", O_RDONLY));
+ igt_debugfs_dump(fd, "gtt_mm");
+
+ if (config->info[DRM_XE_QUERY_CONFIG_FLAGS] & DRM_XE_QUERY_CONFIG_FLAG_HAS_VRAM) {
+ igt_assert(igt_debugfs_exists(fd, "vram0_mm", O_RDONLY));
+ igt_debugfs_dump(fd, "vram0_mm");
+ }
+
+ if (igt_debugfs_exists(fd, "stolen_mm", O_RDONLY))
+ igt_debugfs_dump(fd, "stolen_mm");
+
+ igt_assert(igt_debugfs_exists(fd, "clients", O_RDONLY));
+ igt_debugfs_dump(fd, "clients");
+
+ igt_assert(igt_debugfs_exists(fd, "gem_names", O_RDONLY));
+ igt_debugfs_dump(fd, "gem_names");
+
+ xe_validate_entries(igt_dir, expected_files,
+ ARRAY_SIZE(expected_files));
+}
+
+/**
+ * SUBTEST: xe-forcewake
+ * Description: Check forcewake debugfs devnode
+ */
+static void
+xe_test_forcewake(int fd)
+{
+ int handle = igt_debugfs_open(fd, "forcewake_all", O_WRONLY);
+
+ igt_assert_neq(handle, -1);
+ close(handle);
+}
+
+const char *help_str =
+ " -w\t--warn-not-hit Produce warnings if it founds a devfs node without tests";
+
+struct option long_options[] = {
+ { "--warn-not-hit", no_argument, NULL, 'w'},
+ { 0, 0, 0, 0 }
+};
+
+static int opt_handler(int option, int option_index, void *input)
+{
+ switch (option) {
+ case 'w':
+ opt.warn_on_not_hit = true;
+ break;
+ default:
+ return IGT_OPT_HANDLER_ERROR;
+ }
+
+ return IGT_OPT_HANDLER_SUCCESS;
+}
+
+igt_main_args("", long_options, help_str, opt_handler, NULL)
+{
+ int debugfs = -1;
+ int fd = -1;
+ igt_dir_t *igt_dir = NULL;
+
+ igt_fixture {
+ fd = drm_open_driver_master(DRIVER_XE);
+ __igt_debugfs_dump(fd, "info", IGT_LOG_INFO);
+ debugfs = igt_debugfs_dir(fd);
+
+ igt_dir = igt_dir_create(debugfs);
+ igt_require(igt_dir != NULL);
+
+ kmstest_set_vt_graphics_mode();
+ }
+
+ igt_describe("Check if various debugfs devnodes exist and test reading them.");
+ igt_subtest("xe-base") {
+ xe_test_base(fd, xe_config(fd), igt_dir);
+ }
+
+ igt_describe("Check forcewake debugfs devnode");
+ igt_subtest("xe-forcewake") {
+ xe_test_forcewake(fd);
+ }
+
+ igt_fixture {
+ igt_dir_destroy(igt_dir);
+ close(debugfs);
+ drm_close_driver(fd);
+ }
+}
diff --git a/tests/meson.build b/tests/meson.build
index 212a4c3b8..50b2ff563 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -282,6 +282,7 @@ intel_xe_progs = [
'xe_compute_preempt',
'xe_copy_basic',
'xe_configfs',
+ 'xe_debugfs',
'xe_dma_buf_sync',
'xe_drm_fdinfo',
'xe_eu_stall',
--
2.43.0
next prev parent reply other threads:[~2025-05-22 11:02 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-22 11:00 [PATCH i-g-t 0/5] Replace intel_sysfs_debugfs Peter Senna Tschudin
2025-05-22 11:00 ` [PATCH i-g-t 1/5] Remove tests/intel/intel_sysfs_debugfs Peter Senna Tschudin
2025-06-12 17:51 ` Kamil Konieczny
2025-05-22 11:00 ` [PATCH i-g-t 2/5] lib/igt_dir: Directory processing and flexible file handling Peter Senna Tschudin
2025-05-22 11:00 ` [PATCH i-g-t 3/5] Add tests: core_debugfs and core_debugfs_display_on_off Peter Senna Tschudin
2025-06-12 18:17 ` Kamil Konieczny
2025-05-22 11:00 ` [PATCH i-g-t 4/5] tests/core_sysfs: Add GPU-agnostic sysfs testing Peter Senna Tschudin
2025-05-22 11:00 ` Peter Senna Tschudin [this message]
2025-05-22 14:43 ` ✓ i915.CI.BAT: success for Replace intel_sysfs_debugfs (rev2) Patchwork
2025-05-22 14:51 ` ✓ Xe.CI.BAT: " Patchwork
2025-05-22 17:44 ` ✗ i915.CI.Full: failure " Patchwork
2025-05-23 7:53 ` Peter Senna Tschudin
2025-05-23 3:40 ` ✗ Xe.CI.Full: " Patchwork
2025-05-23 7:52 ` Peter Senna Tschudin
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=20250522110126.628720-6-peter.senna@linux.intel.com \
--to=peter.senna@linux.intel.com \
--cc=ewelina.musial@intel.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=kamil.konieczny@linux.intel.com \
--cc=katarzyna.piecielska@intel.com \
--cc=marcin.bernatowicz@intel.com \
--cc=zbigniew.kempczynski@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 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.