drm/i915/gt: move remaining debugfs interfaces into gt
The following interfaces: i915_wedged i915_forcewake_user are dependent on gt values. Put them inside gt/ and drop the "i915_" prefix name. This would be the new structure: dri/0/gt | +-- forcewake_user | \-- reset For backwards compatibility with existing igt (and the slight semantic difference between operating on the i915 abi entry points and the deep gt info): dri/0 | +-- i915_wedged | \-- i915_forcewake_user remain at the top level. Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com> Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20211012221738.16029-1-andi@etezian.org
This commit is contained in:
parent
b0179f0d18
commit
82a149a62b
5 changed files with 111 additions and 36 deletions
|
@ -13,6 +13,59 @@
|
||||||
#include "pxp/intel_pxp_debugfs.h"
|
#include "pxp/intel_pxp_debugfs.h"
|
||||||
#include "uc/intel_uc_debugfs.h"
|
#include "uc/intel_uc_debugfs.h"
|
||||||
|
|
||||||
|
int intel_gt_debugfs_reset_show(struct intel_gt *gt, u64 *val)
|
||||||
|
{
|
||||||
|
int ret = intel_gt_terminally_wedged(gt);
|
||||||
|
|
||||||
|
switch (ret) {
|
||||||
|
case -EIO:
|
||||||
|
*val = 1;
|
||||||
|
return 0;
|
||||||
|
case 0:
|
||||||
|
*val = 0;
|
||||||
|
return 0;
|
||||||
|
default:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int intel_gt_debugfs_reset_store(struct intel_gt *gt, u64 val)
|
||||||
|
{
|
||||||
|
/* Flush any previous reset before applying for a new one */
|
||||||
|
wait_event(gt->reset.queue,
|
||||||
|
!test_bit(I915_RESET_BACKOFF, >->reset.flags));
|
||||||
|
|
||||||
|
intel_gt_handle_error(gt, val, I915_ERROR_CAPTURE,
|
||||||
|
"Manually reset engine mask to %llx", val);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* keep the interface clean where the first parameter
|
||||||
|
* is a 'struct intel_gt *' instead of 'void *'
|
||||||
|
*/
|
||||||
|
static int __intel_gt_debugfs_reset_show(void *data, u64 *val)
|
||||||
|
{
|
||||||
|
return intel_gt_debugfs_reset_show(data, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __intel_gt_debugfs_reset_store(void *data, u64 val)
|
||||||
|
{
|
||||||
|
return intel_gt_debugfs_reset_store(data, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_SIMPLE_ATTRIBUTE(reset_fops, __intel_gt_debugfs_reset_show,
|
||||||
|
__intel_gt_debugfs_reset_store, "%llu\n");
|
||||||
|
|
||||||
|
static void gt_debugfs_register(struct intel_gt *gt, struct dentry *root)
|
||||||
|
{
|
||||||
|
static const struct intel_gt_debugfs_file files[] = {
|
||||||
|
{ "reset", &reset_fops, NULL },
|
||||||
|
};
|
||||||
|
|
||||||
|
intel_gt_debugfs_register_files(root, files, ARRAY_SIZE(files), gt);
|
||||||
|
}
|
||||||
|
|
||||||
void intel_gt_debugfs_register(struct intel_gt *gt)
|
void intel_gt_debugfs_register(struct intel_gt *gt)
|
||||||
{
|
{
|
||||||
struct dentry *root;
|
struct dentry *root;
|
||||||
|
@ -24,6 +77,8 @@ void intel_gt_debugfs_register(struct intel_gt *gt)
|
||||||
if (IS_ERR(root))
|
if (IS_ERR(root))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
gt_debugfs_register(gt, root);
|
||||||
|
|
||||||
intel_gt_engines_debugfs_register(gt, root);
|
intel_gt_engines_debugfs_register(gt, root);
|
||||||
intel_gt_pm_debugfs_register(gt, root);
|
intel_gt_pm_debugfs_register(gt, root);
|
||||||
intel_sseu_debugfs_register(gt, root);
|
intel_sseu_debugfs_register(gt, root);
|
||||||
|
|
|
@ -35,4 +35,8 @@ void intel_gt_debugfs_register_files(struct dentry *root,
|
||||||
const struct intel_gt_debugfs_file *files,
|
const struct intel_gt_debugfs_file *files,
|
||||||
unsigned long count, void *data);
|
unsigned long count, void *data);
|
||||||
|
|
||||||
|
/* functions that need to be accessed by the upper level non-gt interfaces */
|
||||||
|
int intel_gt_debugfs_reset_show(struct intel_gt *gt, u64 *val);
|
||||||
|
int intel_gt_debugfs_reset_store(struct intel_gt *gt, u64 val);
|
||||||
|
|
||||||
#endif /* INTEL_GT_DEBUGFS_H */
|
#endif /* INTEL_GT_DEBUGFS_H */
|
||||||
|
|
|
@ -19,6 +19,46 @@
|
||||||
#include "intel_sideband.h"
|
#include "intel_sideband.h"
|
||||||
#include "intel_uncore.h"
|
#include "intel_uncore.h"
|
||||||
|
|
||||||
|
int intel_gt_pm_debugfs_forcewake_user_open(struct intel_gt *gt)
|
||||||
|
{
|
||||||
|
atomic_inc(>->user_wakeref);
|
||||||
|
intel_gt_pm_get(gt);
|
||||||
|
if (GRAPHICS_VER(gt->i915) >= 6)
|
||||||
|
intel_uncore_forcewake_user_get(gt->uncore);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int intel_gt_pm_debugfs_forcewake_user_release(struct intel_gt *gt)
|
||||||
|
{
|
||||||
|
if (GRAPHICS_VER(gt->i915) >= 6)
|
||||||
|
intel_uncore_forcewake_user_put(gt->uncore);
|
||||||
|
intel_gt_pm_put(gt);
|
||||||
|
atomic_dec(>->user_wakeref);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int forcewake_user_open(struct inode *inode, struct file *file)
|
||||||
|
{
|
||||||
|
struct intel_gt *gt = inode->i_private;
|
||||||
|
|
||||||
|
return intel_gt_pm_debugfs_forcewake_user_open(gt);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int forcewake_user_release(struct inode *inode, struct file *file)
|
||||||
|
{
|
||||||
|
struct intel_gt *gt = inode->i_private;
|
||||||
|
|
||||||
|
return intel_gt_pm_debugfs_forcewake_user_release(gt);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct file_operations forcewake_user_fops = {
|
||||||
|
.owner = THIS_MODULE,
|
||||||
|
.open = forcewake_user_open,
|
||||||
|
.release = forcewake_user_release,
|
||||||
|
};
|
||||||
|
|
||||||
static int fw_domains_show(struct seq_file *m, void *data)
|
static int fw_domains_show(struct seq_file *m, void *data)
|
||||||
{
|
{
|
||||||
struct intel_gt *gt = m->private;
|
struct intel_gt *gt = m->private;
|
||||||
|
@ -627,6 +667,7 @@ void intel_gt_pm_debugfs_register(struct intel_gt *gt, struct dentry *root)
|
||||||
{ "drpc", &drpc_fops, NULL },
|
{ "drpc", &drpc_fops, NULL },
|
||||||
{ "frequency", &frequency_fops, NULL },
|
{ "frequency", &frequency_fops, NULL },
|
||||||
{ "forcewake", &fw_domains_fops, NULL },
|
{ "forcewake", &fw_domains_fops, NULL },
|
||||||
|
{ "forcewake_user", &forcewake_user_fops, NULL},
|
||||||
{ "llc", &llc_fops, llc_eval },
|
{ "llc", &llc_fops, llc_eval },
|
||||||
{ "rps_boost", &rps_boost_fops, rps_eval },
|
{ "rps_boost", &rps_boost_fops, rps_eval },
|
||||||
};
|
};
|
||||||
|
|
|
@ -13,4 +13,8 @@ struct drm_printer;
|
||||||
void intel_gt_pm_debugfs_register(struct intel_gt *gt, struct dentry *root);
|
void intel_gt_pm_debugfs_register(struct intel_gt *gt, struct dentry *root);
|
||||||
void intel_gt_pm_frequency_dump(struct intel_gt *gt, struct drm_printer *m);
|
void intel_gt_pm_frequency_dump(struct intel_gt *gt, struct drm_printer *m);
|
||||||
|
|
||||||
|
/* functions that need to be accessed by the upper level non-gt interfaces */
|
||||||
|
int intel_gt_pm_debugfs_forcewake_user_open(struct intel_gt *gt);
|
||||||
|
int intel_gt_pm_debugfs_forcewake_user_release(struct intel_gt *gt);
|
||||||
|
|
||||||
#endif /* INTEL_GT_PM_DEBUGFS_H */
|
#endif /* INTEL_GT_PM_DEBUGFS_H */
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
#include "gt/intel_gt.h"
|
#include "gt/intel_gt.h"
|
||||||
#include "gt/intel_gt_buffer_pool.h"
|
#include "gt/intel_gt_buffer_pool.h"
|
||||||
#include "gt/intel_gt_clock_utils.h"
|
#include "gt/intel_gt_clock_utils.h"
|
||||||
|
#include "gt/intel_gt_debugfs.h"
|
||||||
#include "gt/intel_gt_pm.h"
|
#include "gt/intel_gt_pm.h"
|
||||||
#include "gt/intel_gt_pm_debugfs.h"
|
#include "gt/intel_gt_pm_debugfs.h"
|
||||||
#include "gt/intel_gt_requests.h"
|
#include "gt/intel_gt_requests.h"
|
||||||
|
@ -554,36 +555,18 @@ static int i915_wa_registers(struct seq_file *m, void *unused)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int i915_wedged_get(void *data, u64 *val)
|
||||||
i915_wedged_get(void *data, u64 *val)
|
|
||||||
{
|
|
||||||
struct drm_i915_private *i915 = data;
|
|
||||||
int ret = intel_gt_terminally_wedged(&i915->gt);
|
|
||||||
|
|
||||||
switch (ret) {
|
|
||||||
case -EIO:
|
|
||||||
*val = 1;
|
|
||||||
return 0;
|
|
||||||
case 0:
|
|
||||||
*val = 0;
|
|
||||||
return 0;
|
|
||||||
default:
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
i915_wedged_set(void *data, u64 val)
|
|
||||||
{
|
{
|
||||||
struct drm_i915_private *i915 = data;
|
struct drm_i915_private *i915 = data;
|
||||||
|
|
||||||
/* Flush any previous reset before applying for a new one */
|
return intel_gt_debugfs_reset_show(&i915->gt, val);
|
||||||
wait_event(i915->gt.reset.queue,
|
}
|
||||||
!test_bit(I915_RESET_BACKOFF, &i915->gt.reset.flags));
|
|
||||||
|
|
||||||
intel_gt_handle_error(&i915->gt, val, I915_ERROR_CAPTURE,
|
static int i915_wedged_set(void *data, u64 val)
|
||||||
"Manually set wedged engine mask = %llx", val);
|
{
|
||||||
return 0;
|
struct drm_i915_private *i915 = data;
|
||||||
|
|
||||||
|
return intel_gt_debugfs_reset_store(&i915->gt, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_SIMPLE_ATTRIBUTE(i915_wedged_fops,
|
DEFINE_SIMPLE_ATTRIBUTE(i915_wedged_fops,
|
||||||
|
@ -728,27 +711,15 @@ static int i915_sseu_status(struct seq_file *m, void *unused)
|
||||||
static int i915_forcewake_open(struct inode *inode, struct file *file)
|
static int i915_forcewake_open(struct inode *inode, struct file *file)
|
||||||
{
|
{
|
||||||
struct drm_i915_private *i915 = inode->i_private;
|
struct drm_i915_private *i915 = inode->i_private;
|
||||||
struct intel_gt *gt = &i915->gt;
|
|
||||||
|
|
||||||
atomic_inc(>->user_wakeref);
|
return intel_gt_pm_debugfs_forcewake_user_open(&i915->gt);
|
||||||
intel_gt_pm_get(gt);
|
|
||||||
if (GRAPHICS_VER(i915) >= 6)
|
|
||||||
intel_uncore_forcewake_user_get(gt->uncore);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int i915_forcewake_release(struct inode *inode, struct file *file)
|
static int i915_forcewake_release(struct inode *inode, struct file *file)
|
||||||
{
|
{
|
||||||
struct drm_i915_private *i915 = inode->i_private;
|
struct drm_i915_private *i915 = inode->i_private;
|
||||||
struct intel_gt *gt = &i915->gt;
|
|
||||||
|
|
||||||
if (GRAPHICS_VER(i915) >= 6)
|
return intel_gt_pm_debugfs_forcewake_user_release(&i915->gt);
|
||||||
intel_uncore_forcewake_user_put(&i915->uncore);
|
|
||||||
intel_gt_pm_put(gt);
|
|
||||||
atomic_dec(>->user_wakeref);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct file_operations i915_forcewake_fops = {
|
static const struct file_operations i915_forcewake_fops = {
|
||||||
|
|
Loading…
Add table
Reference in a new issue