File Index
Files and directories
Sign in
FILE

intel_gt_debugfs.c

File preview with syntax highlighting.

linux-6.19.14/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c C
  1// SPDX-License-Identifier: MIT
  2/*
  3 * Copyright © 2019 Intel Corporation
  4 */
  5
  6#include <linux/debugfs.h>
  7
  8#include <drm/drm_print.h>
  9
 10#include "i915_drv.h"
 11#include "intel_gt.h"
 12#include "intel_gt_debugfs.h"
 13#include "intel_gt_engines_debugfs.h"
 14#include "intel_gt_mcr.h"
 15#include "intel_gt_pm_debugfs.h"
 16#include "intel_sseu_debugfs.h"
 17#include "uc/intel_uc_debugfs.h"
 18
 19int intel_gt_debugfs_reset_show(struct intel_gt *gt, u64 *val)
 20{
 21	int ret = intel_gt_terminally_wedged(gt);
 22
 23	switch (ret) {
 24	case -EIO:
 25		*val = 1;
 26		return 0;
 27	case 0:
 28		*val = 0;
 29		return 0;
 30	default:
 31		return ret;
 32	}
 33}
 34
 35void intel_gt_debugfs_reset_store(struct intel_gt *gt, u64 val)
 36{
 37	/* Flush any previous reset before applying for a new one */
 38	wait_event(gt->reset.queue,
 39		   !test_bit(I915_RESET_BACKOFF, &gt->reset.flags));
 40
 41	intel_gt_handle_error(gt, val, I915_ERROR_CAPTURE,
 42			      "Manually reset engine mask to %llx", val);
 43}
 44
 45/*
 46 * keep the interface clean where the first parameter
 47 * is a 'struct intel_gt *' instead of 'void *'
 48 */
 49static int __intel_gt_debugfs_reset_show(void *data, u64 *val)
 50{
 51	return intel_gt_debugfs_reset_show(data, val);
 52}
 53
 54static int __intel_gt_debugfs_reset_store(void *data, u64 val)
 55{
 56	intel_gt_debugfs_reset_store(data, val);
 57
 58	return 0;
 59}
 60
 61DEFINE_SIMPLE_ATTRIBUTE(reset_fops, __intel_gt_debugfs_reset_show,
 62			__intel_gt_debugfs_reset_store, "%llu\n");
 63
 64static int steering_show(struct seq_file *m, void *data)
 65{
 66	struct drm_printer p = drm_seq_file_printer(m);
 67	struct intel_gt *gt = m->private;
 68
 69	intel_gt_mcr_report_steering(&p, gt, true);
 70
 71	return 0;
 72}
 73DEFINE_INTEL_GT_DEBUGFS_ATTRIBUTE(steering);
 74
 75static void gt_debugfs_register(struct intel_gt *gt, struct dentry *root)
 76{
 77	static const struct intel_gt_debugfs_file files[] = {
 78		{ "reset", &reset_fops, NULL },
 79		{ "steering", &steering_fops },
 80	};
 81
 82	intel_gt_debugfs_register_files(root, files, ARRAY_SIZE(files), gt);
 83}
 84
 85void intel_gt_debugfs_register(struct intel_gt *gt)
 86{
 87	struct dentry *debugfs_root = gt->i915->drm.debugfs_root;
 88	struct dentry *root;
 89	char gtname[4];
 90
 91	if (!debugfs_root)
 92		return;
 93
 94	snprintf(gtname, sizeof(gtname), "gt%u", gt->info.id);
 95	root = debugfs_create_dir(gtname, debugfs_root);
 96	if (IS_ERR(root))
 97		return;
 98
 99	gt_debugfs_register(gt, root);
100
101	intel_gt_engines_debugfs_register(gt, root);
102	intel_gt_pm_debugfs_register(gt, root);
103	intel_sseu_debugfs_register(gt, root);
104
105	intel_uc_debugfs_register(&gt->uc, root);
106}
107
108void intel_gt_debugfs_register_files(struct dentry *root,
109				     const struct intel_gt_debugfs_file *files,
110				     unsigned long count, void *data)
111{
112	while (count--) {
113		umode_t mode = files->fops->write ? 0644 : 0444;
114
115		if (!files->eval || files->eval(data))
116			debugfs_create_file(files->name,
117					    mode, root, data,
118					    files->fops);
119
120		files++;
121	}
122}
~/ Read-only file preview.