All of lore.kernel.org
 help / color / mirror / Atom feed
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, himanshu.girotra@intel.com,
	aditya.chauhan@intel.com, pravalika.gurram@intel.com,
	sai.gowtham.ch@intel.com, ramadevi.gandi@intel.com,
	lucas.demarchi@intel.com, rodrigo.vivi@intel.com,
	kamil.konieczny@linux.intel.com, katarzyna.piecielska@intel.com,
	zbigniew.kempczynski@intel.com
Subject: [RFC v2 i-g-t 5/5] tests/intel/xe_debugfs: Add Xe-specific debugfs testing
Date: Tue, 20 May 2025 21:29:49 +0200	[thread overview]
Message-ID: <20250520192951.411614-6-peter.senna@linux.intel.com> (raw)
In-Reply-To: <20250520192951.411614-1-peter.senna@linux.intel.com>

Introduces xe_debugfs, a test designed specifically for Xe GPUs. This test
complements the generic debugfs tests:
- core_debugfs
- core_debugfs_display_on_off

Cc: marcin.bernatowicz@intel.com
Cc: himanshu.girotra@intel.com
Cc: aditya.chauhan@intel.com
Cc: pravalika.gurram@intel.com
Cc: sai.gowtham.ch@intel.com
Cc: ramadevi.gandi@intel.com
Cc: lucas.demarchi@intel.com
Cc: rodrigo.vivi@intel.com
Cc: kamil.konieczny@linux.intel.com
Cc: katarzyna.piecielska@intel.com
Cc: zbigniew.kempczynski@intel.com
Signed-off-by: Peter Senna Tschudin <peter.senna@linux.intel.com>
---
 tests/intel/xe_debugfs.c | 212 +++++++++++++++++++++++++++++++++++++++
 tests/meson.build        |   1 +
 2 files changed, 213 insertions(+)
 create mode 100644 tests/intel/xe_debugfs.c

diff --git a/tests/intel/xe_debugfs.c b/tests/intel/xe_debugfs.c
new file mode 100644
index 000000000..b4eef81d1
--- /dev/null
+++ b/tests/intel/xe_debugfs.c
@@ -0,0 +1,212 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2025 Intel Corporation
+ */
+
+#include <dirent.h>
+#include <fcntl.h>
+
+#include "igt.h"
+#include "igt_debugfs.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(int fd, const char *add_path,
+			       const char * const str_val[], int str_cnt)
+{
+	int i;
+	int hit;
+	int found = 0;
+	int not_found = 0;
+	DIR *dir;
+	struct dirent *de;
+	char path[PATH_MAX];
+
+	if (!igt_debugfs_path(fd, path, sizeof(path)))
+		return -1;
+
+	strcat(path, add_path);
+	dir = opendir(path);
+	if (!dir)
+		return -1;
+
+	while ((de = readdir(dir))) {
+		if (de->d_name[0] == '.')
+			continue;
+		hit = 0;
+		for (i = 0; i < str_cnt; i++) {
+			if (!strcmp(str_val[i], de->d_name)) {
+				hit = 1;
+				break;
+			}
+		}
+		if (hit) {
+			found++;
+		} else if (opt.warn_on_not_hit) {
+			not_found++;
+			igt_warn("no test for: %s/%s\n", path, de->d_name);
+		}
+	}
+	closedir(dir);
+	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)
+{
+	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(fd, "", 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_fixture {
+		fd = drm_open_driver_master(DRIVER_XE);
+		__igt_debugfs_dump(fd, "info", IGT_LOG_INFO);
+		debugfs = igt_debugfs_dir(fd);
+
+		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_describe("Check forcewake debugfs devnode");
+	igt_subtest("xe-forcewake") {
+		xe_test_forcewake(fd);
+	}
+
+	igt_fixture {
+		close(debugfs);
+		drm_close_driver(fd);
+	}
+}
diff --git a/tests/meson.build b/tests/meson.build
index eac77fb81..97d60f9f6 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -281,6 +281,7 @@ intel_xe_progs = [
 	'xe_compute',
 	'xe_compute_preempt',
 	'xe_copy_basic',
+	'xe_debugfs',
 	'xe_dma_buf_sync',
 	'xe_drm_fdinfo',
 	'xe_eu_stall',
-- 
2.43.0


      parent reply	other threads:[~2025-05-20 19:30 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-14 17:51 [RFC i-g-t 0/5] Replace intel_sysfs_debugfs Peter Senna Tschudin
2025-05-14 17:51 ` [RFC i-g-t 1/5] Remove tests/intel/intel_sysfs_debugfs Peter Senna Tschudin
2025-05-14 17:51 ` [RFC i-g-t 2/5] lib/igt_dir_explorer: Add function to recursively read all files in a directory Peter Senna Tschudin
2025-05-15  8:51   ` Zbigniew Kempczyński
2025-05-15  9:04     ` Peter Senna Tschudin
2025-05-16  5:35       ` Zbigniew Kempczyński
2025-05-15 16:40     ` Peter Senna Tschudin
2025-05-16  5:46       ` Zbigniew Kempczyński
2025-05-14 17:51 ` [RFC i-g-t 3/5] Add tests: core_debugfs and core_debugfs_display_on_off Peter Senna Tschudin
2025-05-14 17:51 ` [RFC i-g-t 4/5] tests/core_sysfs: Add GPU-agnostic sysfs testing Peter Senna Tschudin
2025-05-14 17:51 ` [RFC i-g-t 5/5] tests/intel/xe_debugfs: Add Xe-specific debugfs testing Peter Senna Tschudin
2025-05-14 19:24 ` ✗ Xe.CI.BAT: failure for Replace intel_sysfs_debugfs Patchwork
2025-05-14 19:44 ` ✗ i915.CI.BAT: " Patchwork
2025-05-15  2:40 ` ✗ Xe.CI.Full: " Patchwork
2025-05-20 19:29 ` [RFC v2 i-g-t 0/5] " Peter Senna Tschudin
2025-05-20 19:29   ` [RFC v2 i-g-t 1/5] Remove tests/intel/intel_sysfs_debugfs Peter Senna Tschudin
2025-05-20 19:29   ` [RFC v2 i-g-t 2/5] lib/igt_dir: Directory processing and flexible file handling Peter Senna Tschudin
2025-05-20 19:29   ` [RFC v2 i-g-t 3/5] Add tests: core_debugfs and core_debugfs_display_on_off Peter Senna Tschudin
2025-05-20 19:29   ` [RFC v2 i-g-t 4/5] tests/core_sysfs: Add GPU-agnostic sysfs testing Peter Senna Tschudin
2025-05-20 19:29   ` Peter Senna Tschudin [this message]

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=20250520192951.411614-6-peter.senna@linux.intel.com \
    --to=peter.senna@linux.intel.com \
    --cc=aditya.chauhan@intel.com \
    --cc=himanshu.girotra@intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    --cc=kamil.konieczny@linux.intel.com \
    --cc=katarzyna.piecielska@intel.com \
    --cc=lucas.demarchi@intel.com \
    --cc=marcin.bernatowicz@intel.com \
    --cc=pravalika.gurram@intel.com \
    --cc=ramadevi.gandi@intel.com \
    --cc=rodrigo.vivi@intel.com \
    --cc=sai.gowtham.ch@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.