Re: [PATCH i-g-t v3] tests/xe_debugfs: add uc debugfs validation and read tests

Kamil Konieczny <[email protected]> Fri, 24 Jul 2026 10:51:01 +0200
Newsgroups org.freedesktop.lists.igt-dev
Message-ID <[email protected]>
Hi Sobin,
On 2026-07-17 at 07:52:48 +0000, Sobin Thomas wrote:

I have only a nit about subject, please use 'intel/' in prefix,
also imho you could make it shorter:

[PATCH i-g-t v3] tests/intel/xe_debugfs: add uc debugfs validation


Regards,
Kamil

> Add coverage for GT-specific debugfs entries by introducing a new
> gt-dir subtest that validates the presence of required files in the
> GT debugfs hierarchy. The test currently verifies the existence of
> the following debugfs nodes:
> 
>   - uc/gsc_info
>   - uc/huc_info
>   - uc/guc_info
>   - uc/guc_pc
> 
> These additions improve validation of Xe GT debugfs interfaces and
> provide basic functional coverage for the GSC information debugfs node.
> 
> v2: Add support for guc and huc info (Daniele)
> v3: Added checks for the device nodes.
> 
> Signed-off-by: Sobin Thomas <[email protected]>
> ---
>  tests/intel/xe_debugfs.c | 120 ++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 119 insertions(+), 1 deletion(-)
> 
> diff --git a/tests/intel/xe_debugfs.c b/tests/intel/xe_debugfs.c
> index da482157e..e7d89ec9d 100644
> --- a/tests/intel/xe_debugfs.c
> +++ b/tests/intel/xe_debugfs.c
> @@ -451,6 +451,32 @@ skip:
>  	igt_skip("Failed to open debugfs directory\n");
>  }
>  
> +/**
> + * SUBTEST: gt-dir
> + * Description: Check required debugfs devnodes exist in the GT debugfs directory
> + */
> +static void test_gt_dir(struct xe_device *xe_dev, unsigned int gt)
> +{
> +	const struct check_entry expected_files[] = {
> +		{ "uc/gsc_info", O_RDONLY },
> +		{ "uc/huc_info", O_RDONLY },
> +		{ "uc/guc_info", O_RDONLY },
> +		{ "uc/guc_pc", O_RDONLY },
> +	};
> +	int debugfs_fd = igt_debugfs_gt_dir(xe_dev->fd, gt);
> +	int missing_count;
> +
> +	igt_skip_on_f(debugfs_fd < 0, "Failed to open debugfs directory\n");
> +
> +	missing_count = debugfs_validate_entries(xe_dev, debugfs_fd, expected_files,
> +						 ARRAY_SIZE(expected_files));
> +
> +	close(debugfs_fd);
> +
> +	igt_fail_on_f(missing_count > 0, "Found %d missing debugfs files (see warnings above)\n",
> +		      missing_count);
> +}
> +
>  /**
>   * SUBTEST: tile-dir
>   * Description: Check required debugfs devnodes exist in the tile debugfs directory
> @@ -595,6 +621,71 @@ static void check_gt_reg_sr(int fd, int gt)
>  	igt_assert_eq(problems, 0);
>  }
>  
> +static void test_uc_info_read(struct xe_device *xe_dev, unsigned int gt, const char *node,
> +			      bool mandatory)
> +{
> +	int debugfs_fd = igt_debugfs_gt_dir(xe_dev->fd, gt);
> +	char *buf;
> +
> +	debugfs_fd = igt_debugfs_gt_dir(xe_dev->fd, gt);
> +	igt_skip_on_f(debugfs_fd < 0, "Failed to open debugfs directory\n");
> +
> +	if (faccessat(debugfs_fd, node, F_OK, 0) < 0) {
> +		close(debugfs_fd);
> +		igt_fail_on_f(mandatory,
> +			      "Mandatory debugfs node %s is missing on GT-%u\n",
> +			      node, gt);
> +
> +		igt_skip("%s debugfs node not present on GT-%u\n",
> +			 node, gt);
> +	}
> +	buf = igt_sysfs_get(debugfs_fd, node);
> +
> +	igt_info("Successfully read %s: %zu bytes\n%s\n", node, strlen(buf), buf);
> +
> +	close(debugfs_fd);
> +	igt_assert_f(buf, "Failed to read %s debugfs file\n", node);
> +	igt_assert_f(buf[0] != '\0', "%s debugfs file is empty\n", node);
> +	free(buf);
> +}
> +
> +/**
> + * SUBTEST: gsc-info-read
> + * Description: Check GSC info debugfs devnode contents
> + */
> +static void test_gsc_info_read(struct xe_device *xe_dev, unsigned int gt)
> +{
> +	test_uc_info_read(xe_dev, gt, "uc/gsc_info", false);
> +}
> +
> +/**
> + * SUBTEST: huc-info-read
> + * Description: Check HUC info debugfs devnode contents
> + */
> +static void test_huc_info_read(struct xe_device *xe_dev, unsigned int gt)
> +{
> +	test_uc_info_read(xe_dev, gt, "uc/huc_info", false);
> +}
> +
> +/**
> + * SUBTEST: guc-pc-read
> + * Description: Read the guc pc info from the debugfs node contents
> + */
> +
> +static void test_guc_pc_info(struct xe_device *xe_dev, unsigned int gt)
> +{
> +	test_uc_info_read(xe_dev, gt, "uc/guc_pc", true);
> +}
> +
> +/**
> + * SUBTEST: guc-info-read
> + * Description: Check GUC info debugfs devnode contents
> + */
> +static void test_guc_info_read(struct xe_device *xe_dev, unsigned int gt)
> +{
> +	test_uc_info_read(xe_dev, gt, "uc/guc_info", true);
> +}
> +
>  const char *help_str =
>  	"  --warn-not-hit|--w\tWarn about devfs nodes that have no tests";
>  
> @@ -619,8 +710,9 @@ static int opt_handler(int option, int option_index, void *input)
>  int igt_main_args("", long_options, help_str, opt_handler, NULL)
>  {
>  	struct xe_device *xe_dev;
> +	unsigned int gt;
>  	unsigned int t;
> -	int fd = -1, gt;
> +	int fd = -1;
>  
>  	igt_fixture() {
>  		fd = drm_open_driver_master(DRIVER_XE);
> @@ -633,6 +725,12 @@ int igt_main_args("", long_options, help_str, opt_handler, NULL)
>  	igt_subtest("root-dir")
>  		test_root_dir(xe_dev);
>  
> +	igt_describe("Check required debugfs devnodes exist in the GT debugfs directory.");
> +	igt_subtest_with_dynamic("gt-dir")
> +		xe_for_each_gt(fd, gt)
> +			igt_dynamic_f("gt-%u", gt)
> +				test_gt_dir(xe_dev, gt);
> +
>  	igt_describe("Check required debugfs devnodes exist in the tile debugfs directory.");
>  	igt_subtest_with_dynamic("tile-dir")
>  			xe_for_each_tile(fd, t)
> @@ -648,6 +746,26 @@ int igt_main_args("", long_options, help_str, opt_handler, NULL)
>  			igt_dynamic_f("gt%d", gt)
>  				check_gt_reg_sr(fd, gt);
>  
> +	igt_describe("Check GSC info debugfs devnode contents.");
> +	igt_subtest_with_dynamic("gsc-info-read")
> +		xe_for_each_gt(fd, gt)
> +			igt_dynamic_f("gt-%u", gt)
> +				test_gsc_info_read(xe_dev, gt);
> +	igt_describe("Read GuC information from debugfs.");
> +	igt_subtest("guc-info-read")
> +		xe_for_each_gt(fd, gt)
> +			test_guc_info_read(xe_dev, gt);
> +
> +	igt_describe("Read HuC information from debugfs.");
> +	igt_subtest("huc-info-read")
> +		xe_for_each_gt(fd, gt)
> +			test_huc_info_read(xe_dev, gt);
> +
> +	igt_describe("Read guc pc information from debugfs.");
> +	igt_subtest("guc-pc-read")
> +		xe_for_each_gt(fd, gt)
> +			test_guc_pc_info(xe_dev, gt);
> +
>  	igt_fixture() {
>  		drm_close_driver(fd);
>  	}
> -- 
> 2.52.0
>