Re: [PATCH i-g-t] tests/intel/xe_debugfs: add uc debugfs validation and read tests
Daniele Ceraolo Spurio <[email protected]> Thu, 30 Jul 2026 13:47:07 -0700
| Newsgroups | org.freedesktop.lists.igt-dev |
|---|---|
| Message-ID | <[email protected]> |
On 7/29/2026 12:41 AM, Sobin Thomas wrote: > Add coverage for GT-specific uc debugfs entries by introducing a new > uc-info-read 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. > v4: Consolidated the calls into single test_uc_info_read subtest > v5: Fixed mandatory and optional logs and access check > is done using igt_sysfs_has_attr. (Daniele) > Fixed subject nits. (Kamil) > > Signed-off-by: Sobin Thomas <[email protected]> Reviewed-by: Daniele Ceraolo Spurio <[email protected]> Daniele > --- > tests/intel/xe_debugfs.c | 71 +++++++++++++++++++++++++++++++++++++++- > 1 file changed, 70 insertions(+), 1 deletion(-) > > diff --git a/tests/intel/xe_debugfs.c b/tests/intel/xe_debugfs.c > index da482157e..5c045b04f 100644 > --- a/tests/intel/xe_debugfs.c > +++ b/tests/intel/xe_debugfs.c > @@ -16,6 +16,18 @@ struct { > bool warn_on_not_hit; > } opt = { 0 }; > > +struct uc_info_node { > + const char *node; > + bool mandatory; > +}; > + > +static const struct uc_info_node uc_info_nodes[] = { > + { "uc/gsc_info", false }, > + { "uc/huc_info", false }, > + { "uc/guc_info", true }, > + { "uc/guc_pc", true }, > +}; > + > /** > * TEST: Xe debugfs test > * Description: Xe-specific debugfs tests. These are complementary to the > @@ -595,6 +607,56 @@ static void check_gt_reg_sr(int fd, int gt) > igt_assert_eq(problems, 0); > } > > +/** > + * SUBTEST: uc-info-read > + * Description: This is for reading the uc device nodes. > + */ > +static void test_uc_info_read(struct xe_device *xe_dev, unsigned int gt) > +{ > + int debugfs_fd = igt_debugfs_gt_dir(xe_dev->fd, gt); > + int i; > + int fail_count = 0; > + > + igt_skip_on_f(debugfs_fd < 0, "Failed to open debugfs directory\n"); > + > + for (i = 0; i < ARRAY_SIZE(uc_info_nodes); i++) { > + const char *node = uc_info_nodes[i].node; > + bool mandatory = uc_info_nodes[i].mandatory; > + char *buf; > + > + if (!igt_sysfs_has_attr(debugfs_fd, node)) { > + if (mandatory) > + fail_count++; > + igt_info("%s debugfs node not present on GT-%u\n", node, gt); > + continue; > + } > + buf = igt_sysfs_get(debugfs_fd, node); > + if (!buf) { > + if (mandatory) > + fail_count++; > + > + igt_info("Failed to read %s %s debugfs file on GT-%u\n", > + mandatory ? "mandatory" : "optional", node, gt); > + continue; > + } > + > + if (buf[0] == '\0') { > + free(buf); > + if (mandatory) > + fail_count++; > + igt_info("%s %s debugfs file is empty on GT-%u\n", > + mandatory ? "mandatory" : "optional", node, gt); > + continue; > + } > + igt_info("GT-%u: successfully read %s (%zu bytes)\n", gt, node, strlen(buf)); > + free(buf); > + } > + close(debugfs_fd); > + igt_fail_on_f(fail_count > 0, > + "%d mandatory debugfs node(s) failed (missing/unreadable/empty) on GT-%u\n", > + fail_count, gt); > +} > + > const char *help_str = > " --warn-not-hit|--w\tWarn about devfs nodes that have no tests"; > > @@ -619,8 +681,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; > + int fd = -1; > + unsigned int gt; > unsigned int t; > - int fd = -1, gt; > > igt_fixture() { > fd = drm_open_driver_master(DRIVER_XE); > @@ -648,6 +711,12 @@ 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("Verify that uC debugfs info nodes are present and readable."); > + igt_subtest_with_dynamic("uc-info-read") > + xe_for_each_gt(fd, gt) > + igt_dynamic_f("gt%d", gt) > + test_uc_info_read(xe_dev, gt); > + > igt_fixture() { > drm_close_driver(fd); > }