]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
drm/i915/uc: Move uC debugfs to its own folder under GT
authorDaniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Thu, 26 Mar 2020 18:11:20 +0000 (11:11 -0700)
committerChris Wilson <chris@chris-wilson.co.uk>
Thu, 26 Mar 2020 21:23:03 +0000 (21:23 +0000)
uC is a component of the GT, so it makes sense for the uC debugfs files
to be in the GT folder. A subfolder has been used to keep the same
structure we have for the code.

v2: use intel_* prefix (Jani), rebase on new gt_debugfs_register_files,
    fix permissions for writable debugfs files.

v3: Rename files (Michal), remove blank line (Jani), fix sparse warns.

Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Andi Shyti <andi.shyti@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Tony Ye <tony.ye@intel.com>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Reviewed-by: Andi Shyti <andi.shyti@intel.com> #v2
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20200326181121.16869-6-daniele.ceraolospurio@intel.com
13 files changed:
drivers/gpu/drm/i915/Makefile
drivers/gpu/drm/i915/gt/debugfs_gt.c
drivers/gpu/drm/i915/gt/uc/intel_guc.h
drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.c [new file with mode: 0644]
drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.h [new file with mode: 0644]
drivers/gpu/drm/i915/gt/uc/intel_guc_log.c
drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.c [new file with mode: 0644]
drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.h [new file with mode: 0644]
drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.c [new file with mode: 0644]
drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.h [new file with mode: 0644]
drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.c [new file with mode: 0644]
drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.h [new file with mode: 0644]
drivers/gpu/drm/i915/i915_debugfs.c

index 99cd3d25f81643a52478fce01a4c504081de5364..2fce8b0040f39a619090837827cc5af0c7430a66 100644 (file)
@@ -167,14 +167,18 @@ i915-y += \
 
 # general-purpose microcontroller (GuC) support
 i915-y += gt/uc/intel_uc.o \
+         gt/uc/intel_uc_debugfs.o \
          gt/uc/intel_uc_fw.o \
          gt/uc/intel_guc.o \
          gt/uc/intel_guc_ads.o \
          gt/uc/intel_guc_ct.o \
+         gt/uc/intel_guc_debugfs.o \
          gt/uc/intel_guc_fw.o \
          gt/uc/intel_guc_log.o \
+         gt/uc/intel_guc_log_debugfs.o \
          gt/uc/intel_guc_submission.o \
          gt/uc/intel_huc.o \
+         gt/uc/intel_huc_debugfs.o \
          gt/uc/intel_huc_fw.o
 
 # modesetting core code
index de73b63d6ba786accc2aac480270464a997f4d32..1de5fbaa1cf9cfb1883e759b0842f5ec7410e1ad 100644 (file)
@@ -9,6 +9,7 @@
 #include "debugfs_engines.h"
 #include "debugfs_gt.h"
 #include "debugfs_gt_pm.h"
+#include "uc/intel_uc_debugfs.h"
 #include "i915_drv.h"
 
 void debugfs_gt_register(struct intel_gt *gt)
@@ -24,6 +25,8 @@ void debugfs_gt_register(struct intel_gt *gt)
 
        debugfs_engines_register(gt, root);
        debugfs_gt_pm_register(gt, root);
+
+       intel_uc_debugfs_register(&gt->uc, root);
 }
 
 void intel_gt_debugfs_register_files(struct dentry *root,
@@ -31,9 +34,10 @@ void intel_gt_debugfs_register_files(struct dentry *root,
                                     unsigned long count, void *data)
 {
        while (count--) {
+               umode_t mode = files->fops->write ? 0644 : 0444;
                if (!files->eval || files->eval(data))
                        debugfs_create_file(files->name,
-                                           0444, root, data,
+                                           mode, root, data,
                                            files->fops);
 
                files++;
index a5d7a86be4cfdb48c5edf9c7a0fe07a21e7dc9a7..e84ab67b317d76aff9cbb676bcf948493b4a2510 100644 (file)
@@ -74,6 +74,11 @@ struct intel_guc {
        struct mutex send_mutex;
 };
 
+static inline struct intel_guc *log_to_guc(struct intel_guc_log *log)
+{
+       return container_of(log, struct intel_guc, log);
+}
+
 static
 inline int intel_guc_send(struct intel_guc *guc, const u32 *action, u32 len)
 {
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.c
new file mode 100644 (file)
index 0000000..fe7cb7b
--- /dev/null
@@ -0,0 +1,42 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2020 Intel Corporation
+ */
+
+#include <drm/drm_print.h>
+
+#include "gt/debugfs_gt.h"
+#include "intel_guc.h"
+#include "intel_guc_debugfs.h"
+#include "intel_guc_log_debugfs.h"
+
+static int guc_info_show(struct seq_file *m, void *data)
+{
+       struct intel_guc *guc = m->private;
+       struct drm_printer p = drm_seq_file_printer(m);
+
+       if (!intel_guc_is_supported(guc))
+               return -ENODEV;
+
+       intel_guc_load_status(guc, &p);
+       drm_puts(&p, "\n");
+       intel_guc_log_info(&guc->log, &p);
+
+       /* Add more as required ... */
+
+       return 0;
+}
+DEFINE_GT_DEBUGFS_ATTRIBUTE(guc_info);
+
+void intel_guc_debugfs_register(struct intel_guc *guc, struct dentry *root)
+{
+       static const struct debugfs_gt_file files[] = {
+               { "guc_info", &guc_info_fops, NULL },
+       };
+
+       if (!intel_guc_is_supported(guc))
+               return;
+
+       intel_gt_debugfs_register_files(root, files, ARRAY_SIZE(files), guc);
+       intel_guc_log_debugfs_register(&guc->log, root);
+}
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.h b/drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.h
new file mode 100644 (file)
index 0000000..424c266
--- /dev/null
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2020 Intel Corporation
+ */
+
+#ifndef DEBUGFS_GUC_H
+#define DEBUGFS_GUC_H
+
+struct intel_guc;
+struct dentry;
+
+void intel_guc_debugfs_register(struct intel_guc *guc, struct dentry *root);
+
+#endif /* DEBUGFS_GUC_H */
index 8cdd6dc3df58ed28510c5539a4879e02fec69b01..5b11a6d8e27fd55acea0de39d5493088bc66ed72 100644 (file)
@@ -55,11 +55,6 @@ static int guc_action_control_log(struct intel_guc *guc, bool enable,
        return intel_guc_send(guc, action, ARRAY_SIZE(action));
 }
 
-static inline struct intel_guc *log_to_guc(struct intel_guc_log *log)
-{
-       return container_of(log, struct intel_guc, log);
-}
-
 static void guc_log_enable_flush_events(struct intel_guc_log *log)
 {
        intel_guc_enable_msg(log_to_guc(log),
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.c
new file mode 100644 (file)
index 0000000..129e0cf
--- /dev/null
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2020 Intel Corporation
+ */
+
+#include <linux/fs.h>
+#include <drm/drm_print.h>
+
+#include "gt/debugfs_gt.h"
+#include "intel_guc.h"
+#include "intel_guc_log.h"
+#include "intel_guc_log_debugfs.h"
+
+static int guc_log_dump_show(struct seq_file *m, void *data)
+{
+       struct drm_printer p = drm_seq_file_printer(m);
+
+       return intel_guc_log_dump(m->private, &p, false);
+}
+DEFINE_GT_DEBUGFS_ATTRIBUTE(guc_log_dump);
+
+static int guc_load_err_log_dump_show(struct seq_file *m, void *data)
+{
+       struct drm_printer p = drm_seq_file_printer(m);
+
+       return intel_guc_log_dump(m->private, &p, true);
+}
+DEFINE_GT_DEBUGFS_ATTRIBUTE(guc_load_err_log_dump);
+
+static int guc_log_level_get(void *data, u64 *val)
+{
+       struct intel_guc_log *log = data;
+
+       if (!intel_guc_is_used(log_to_guc(log)))
+               return -ENODEV;
+
+       *val = intel_guc_log_get_level(log);
+
+       return 0;
+}
+
+static int guc_log_level_set(void *data, u64 val)
+{
+       struct intel_guc_log *log = data;
+
+       if (!intel_guc_is_used(log_to_guc(log)))
+               return -ENODEV;
+
+       return intel_guc_log_set_level(log, val);
+}
+
+DEFINE_SIMPLE_ATTRIBUTE(guc_log_level_fops,
+                       guc_log_level_get, guc_log_level_set,
+                       "%lld\n");
+
+static int guc_log_relay_open(struct inode *inode, struct file *file)
+{
+       struct intel_guc_log *log = inode->i_private;
+
+       if (!intel_guc_is_ready(log_to_guc(log)))
+               return -ENODEV;
+
+       file->private_data = log;
+
+       return intel_guc_log_relay_open(log);
+}
+
+static ssize_t
+guc_log_relay_write(struct file *filp,
+                   const char __user *ubuf,
+                   size_t cnt,
+                   loff_t *ppos)
+{
+       struct intel_guc_log *log = filp->private_data;
+       int val;
+       int ret;
+
+       ret = kstrtoint_from_user(ubuf, cnt, 0, &val);
+       if (ret < 0)
+               return ret;
+
+       /*
+        * Enable and start the guc log relay on value of 1.
+        * Flush log relay for any other value.
+        */
+       if (val == 1)
+               ret = intel_guc_log_relay_start(log);
+       else
+               intel_guc_log_relay_flush(log);
+
+       return ret ?: cnt;
+}
+
+static int guc_log_relay_release(struct inode *inode, struct file *file)
+{
+       struct intel_guc_log *log = inode->i_private;
+
+       intel_guc_log_relay_close(log);
+       return 0;
+}
+
+static const struct file_operations guc_log_relay_fops = {
+       .owner = THIS_MODULE,
+       .open = guc_log_relay_open,
+       .write = guc_log_relay_write,
+       .release = guc_log_relay_release,
+};
+
+void intel_guc_log_debugfs_register(struct intel_guc_log *log,
+                                   struct dentry *root)
+{
+       static const struct debugfs_gt_file files[] = {
+               { "guc_log_dump", &guc_log_dump_fops, NULL },
+               { "guc_load_err_log_dump", &guc_load_err_log_dump_fops, NULL },
+               { "guc_log_level", &guc_log_level_fops, NULL },
+               { "guc_log_relay", &guc_log_relay_fops, NULL },
+       };
+
+       if (!intel_guc_is_supported(log_to_guc(log)))
+               return;
+
+       intel_gt_debugfs_register_files(root, files, ARRAY_SIZE(files), log);
+}
+
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.h b/drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.h
new file mode 100644 (file)
index 0000000..e8900e3
--- /dev/null
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2020 Intel Corporation
+ */
+
+#ifndef DEBUGFS_GUC_LOG_H
+#define DEBUGFS_GUC_LOG_H
+
+struct intel_guc_log;
+struct dentry;
+
+void intel_guc_log_debugfs_register(struct intel_guc_log *log,
+                                   struct dentry *root);
+
+#endif /* DEBUGFS_GUC_LOG_H */
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.c b/drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.c
new file mode 100644 (file)
index 0000000..5733c15
--- /dev/null
@@ -0,0 +1,36 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2020 Intel Corporation
+ */
+
+#include <drm/drm_print.h>
+
+#include "gt/debugfs_gt.h"
+#include "intel_huc.h"
+#include "intel_huc_debugfs.h"
+
+static int huc_info_show(struct seq_file *m, void *data)
+{
+       struct intel_huc *huc = m->private;
+       struct drm_printer p = drm_seq_file_printer(m);
+
+       if (!intel_huc_is_supported(huc))
+               return -ENODEV;
+
+       intel_huc_load_status(huc, &p);
+
+       return 0;
+}
+DEFINE_GT_DEBUGFS_ATTRIBUTE(huc_info);
+
+void intel_huc_debugfs_register(struct intel_huc *huc, struct dentry *root)
+{
+       static const struct debugfs_gt_file files[] = {
+               { "huc_info", &huc_info_fops, NULL },
+       };
+
+       if (!intel_huc_is_supported(huc))
+               return;
+
+       intel_gt_debugfs_register_files(root, files, ARRAY_SIZE(files), huc);
+}
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.h b/drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.h
new file mode 100644 (file)
index 0000000..be79e99
--- /dev/null
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2020 Intel Corporation
+ */
+
+#ifndef DEBUGFS_HUC_H
+#define DEBUGFS_HUC_H
+
+struct intel_huc;
+struct dentry;
+
+void intel_huc_debugfs_register(struct intel_huc *huc, struct dentry *root);
+
+#endif /* DEBUGFS_HUC_H */
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.c b/drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.c
new file mode 100644 (file)
index 0000000..9d16b78
--- /dev/null
@@ -0,0 +1,30 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2020 Intel Corporation
+ */
+
+#include <linux/debugfs.h>
+
+#include "intel_guc_debugfs.h"
+#include "intel_huc_debugfs.h"
+#include "intel_uc.h"
+#include "intel_uc_debugfs.h"
+
+void intel_uc_debugfs_register(struct intel_uc *uc, struct dentry *gt_root)
+{
+       struct dentry *root;
+
+       if (!gt_root)
+               return;
+
+       /* GuC and HuC go always in pair, no need to check both */
+       if (!intel_uc_supports_guc(uc))
+               return;
+
+       root = debugfs_create_dir("uc", gt_root);
+       if (IS_ERR(root))
+               return;
+
+       intel_guc_debugfs_register(&uc->guc, root);
+       intel_huc_debugfs_register(&uc->huc, root);
+}
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.h b/drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.h
new file mode 100644 (file)
index 0000000..010ce25
--- /dev/null
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2020 Intel Corporation
+ */
+
+#ifndef DEBUGFS_UC_H
+#define DEBUGFS_UC_H
+
+struct intel_uc;
+struct dentry;
+
+void intel_uc_debugfs_register(struct intel_uc *uc, struct dentry *gt_root);
+
+#endif /* DEBUGFS_UC_H */
index 56504be2a6ec5543451563591b44a6071bd60bde..e60a5750ea44250620694c89fe922b9c4c85b964 100644 (file)
@@ -37,7 +37,6 @@
 #include "gt/intel_reset.h"
 #include "gt/intel_rc6.h"
 #include "gt/intel_rps.h"
-#include "gt/uc/intel_guc_submission.h"
 
 #include "i915_debugfs.h"
 #include "i915_debugfs_params.h"
@@ -1251,136 +1250,6 @@ static int i915_llc(struct seq_file *m, void *data)
        return 0;
 }
 
-static int i915_huc_info(struct seq_file *m, void *data)
-{
-       struct drm_i915_private *dev_priv = node_to_i915(m->private);
-       struct intel_huc *huc = &dev_priv->gt.uc.huc;
-       struct drm_printer p = drm_seq_file_printer(m);
-
-       if (!intel_huc_is_supported(huc))
-               return -ENODEV;
-
-       intel_huc_load_status(huc, &p);
-
-       return 0;
-}
-
-static int i915_guc_info(struct seq_file *m, void *data)
-{
-       struct drm_i915_private *dev_priv = node_to_i915(m->private);
-       struct intel_guc *guc = &dev_priv->gt.uc.guc;
-       struct drm_printer p = drm_seq_file_printer(m);
-
-       if (!intel_guc_is_supported(guc))
-               return -ENODEV;
-
-       intel_guc_load_status(guc, &p);
-       drm_puts(&p, "\n");
-       intel_guc_log_info(&guc->log, &p);
-
-       /* Add more as required ... */
-
-       return 0;
-}
-
-static int i915_guc_log_dump(struct seq_file *m, void *data)
-{
-       struct drm_info_node *node = m->private;
-       struct drm_i915_private *dev_priv = node_to_i915(node);
-       struct intel_guc *guc = &dev_priv->gt.uc.guc;
-       bool dump_load_err = !!node->info_ent->data;
-       struct drm_printer p = drm_seq_file_printer(m);
-
-       if (!intel_guc_is_supported(guc))
-               return -ENODEV;
-
-       return intel_guc_log_dump(&guc->log, &p, dump_load_err);
-}
-
-static int i915_guc_log_level_get(void *data, u64 *val)
-{
-       struct drm_i915_private *dev_priv = data;
-       struct intel_uc *uc = &dev_priv->gt.uc;
-
-       if (!intel_uc_uses_guc(uc))
-               return -ENODEV;
-
-       *val = intel_guc_log_get_level(&uc->guc.log);
-
-       return 0;
-}
-
-static int i915_guc_log_level_set(void *data, u64 val)
-{
-       struct drm_i915_private *dev_priv = data;
-       struct intel_uc *uc = &dev_priv->gt.uc;
-
-       if (!intel_uc_uses_guc(uc))
-               return -ENODEV;
-
-       return intel_guc_log_set_level(&uc->guc.log, val);
-}
-
-DEFINE_SIMPLE_ATTRIBUTE(i915_guc_log_level_fops,
-                       i915_guc_log_level_get, i915_guc_log_level_set,
-                       "%lld\n");
-
-static int i915_guc_log_relay_open(struct inode *inode, struct file *file)
-{
-       struct drm_i915_private *i915 = inode->i_private;
-       struct intel_guc *guc = &i915->gt.uc.guc;
-       struct intel_guc_log *log = &guc->log;
-
-       if (!intel_guc_is_ready(guc))
-               return -ENODEV;
-
-       file->private_data = log;
-
-       return intel_guc_log_relay_open(log);
-}
-
-static ssize_t
-i915_guc_log_relay_write(struct file *filp,
-                        const char __user *ubuf,
-                        size_t cnt,
-                        loff_t *ppos)
-{
-       struct intel_guc_log *log = filp->private_data;
-       int val;
-       int ret;
-
-       ret = kstrtoint_from_user(ubuf, cnt, 0, &val);
-       if (ret < 0)
-               return ret;
-
-       /*
-        * Enable and start the guc log relay on value of 1.
-        * Flush log relay for any other value.
-        */
-       if (val == 1)
-               ret = intel_guc_log_relay_start(log);
-       else
-               intel_guc_log_relay_flush(log);
-
-       return ret ?: cnt;
-}
-
-static int i915_guc_log_relay_release(struct inode *inode, struct file *file)
-{
-       struct drm_i915_private *i915 = inode->i_private;
-       struct intel_guc *guc = &i915->gt.uc.guc;
-
-       intel_guc_log_relay_close(&guc->log);
-       return 0;
-}
-
-static const struct file_operations i915_guc_log_relay_fops = {
-       .owner = THIS_MODULE,
-       .open = i915_guc_log_relay_open,
-       .write = i915_guc_log_relay_write,
-       .release = i915_guc_log_relay_release,
-};
-
 static int i915_runtime_pm_status(struct seq_file *m, void *unused)
 {
        struct drm_i915_private *dev_priv = node_to_i915(m->private);
@@ -1989,10 +1858,6 @@ static const struct drm_info_list i915_debugfs_list[] = {
        {"i915_gem_objects", i915_gem_object_info, 0},
        {"i915_gem_fence_regs", i915_gem_fence_regs_info, 0},
        {"i915_gem_interrupt", i915_interrupt_info, 0},
-       {"i915_guc_info", i915_guc_info, 0},
-       {"i915_guc_log_dump", i915_guc_log_dump, 0},
-       {"i915_guc_load_err_log_dump", i915_guc_log_dump, 0, (void *)1},
-       {"i915_huc_info", i915_huc_info, 0},
        {"i915_frequency_info", i915_frequency_info, 0},
        {"i915_ring_freq_table", i915_ring_freq_table, 0},
        {"i915_context_status", i915_context_status, 0},
@@ -2020,8 +1885,6 @@ static const struct i915_debugfs_files {
        {"i915_error_state", &i915_error_state_fops},
        {"i915_gpu_info", &i915_gpu_info_fops},
 #endif
-       {"i915_guc_log_level", &i915_guc_log_level_fops},
-       {"i915_guc_log_relay", &i915_guc_log_relay_fops},
 };
 
 int i915_debugfs_register(struct drm_i915_private *dev_priv)