xref: /linux/drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.c (revision a1ff5a7d78a036d6c2178ee5acd6ba4946243800)
1 // SPDX-License-Identifier: MIT
2 /*
3  * Copyright © 2023-2024 Intel Corporation
4  */
5 
6 #include <linux/debugfs.h>
7 
8 #include <drm/drm_debugfs.h>
9 
10 #include "xe_gt_debugfs.h"
11 #include "xe_gt_sriov_vf.h"
12 #include "xe_gt_sriov_vf_debugfs.h"
13 #include "xe_gt_types.h"
14 #include "xe_sriov.h"
15 
16 /*
17  *      /sys/kernel/debug/dri/0/
18  *      ├── gt0
19  *      │   ├── vf
20  *      │   │   ├── self_config
21  *      │   │   ├── abi_versions
22  *      │   │   ├── runtime_regs
23  */
24 
25 static const struct drm_info_list vf_info[] = {
26 	{
27 		"self_config",
28 		.show = xe_gt_debugfs_simple_show,
29 		.data = xe_gt_sriov_vf_print_config,
30 	},
31 	{
32 		"abi_versions",
33 		.show = xe_gt_debugfs_simple_show,
34 		.data = xe_gt_sriov_vf_print_version,
35 	},
36 #if defined(CONFIG_DRM_XE_DEBUG) || defined(CONFIG_DRM_XE_DEBUG_SRIOV)
37 	{
38 		"runtime_regs",
39 		.show = xe_gt_debugfs_simple_show,
40 		.data = xe_gt_sriov_vf_print_runtime,
41 	},
42 #endif
43 };
44 
45 /**
46  * xe_gt_sriov_vf_debugfs_register - Register SR-IOV VF specific entries in GT debugfs.
47  * @gt: the &xe_gt to register
48  * @root: the &dentry that represents the GT directory
49  *
50  * Register SR-IOV VF entries that are GT related and must be shown under GT debugfs.
51  */
xe_gt_sriov_vf_debugfs_register(struct xe_gt * gt,struct dentry * root)52 void xe_gt_sriov_vf_debugfs_register(struct xe_gt *gt, struct dentry *root)
53 {
54 	struct xe_device *xe = gt_to_xe(gt);
55 	struct drm_minor *minor = xe->drm.primary;
56 	struct dentry *vfdentry;
57 
58 	xe_assert(xe, IS_SRIOV_VF(xe));
59 	xe_assert(xe, root->d_inode->i_private == gt);
60 
61 	/*
62 	 *      /sys/kernel/debug/dri/0/
63 	 *      ├── gt0
64 	 *      │   ├── vf
65 	 */
66 	vfdentry = debugfs_create_dir("vf", root);
67 	if (IS_ERR(vfdentry))
68 		return;
69 	vfdentry->d_inode->i_private = gt;
70 
71 	drm_debugfs_create_files(vf_info, ARRAY_SIZE(vf_info), vfdentry, minor);
72 }
73