mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 20:51:44 +00:00
accel/ivpu: Add debugfs files for testing device reset
Add new debugfs files to validate device recovery functionality. Signed-off-by: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com> Reviewed-by: Jacek Lawrynowicz <jacek.lawrynowicz@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230524074847.866711-4-stanislaw.gruszka@linux.intel.com
This commit is contained in:
parent
d4e4257afa
commit
8f7fb1e21e
@ -77,11 +77,31 @@ static int last_bootmode_show(struct seq_file *s, void *v)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int reset_counter_show(struct seq_file *s, void *v)
|
||||||
|
{
|
||||||
|
struct drm_info_node *node = (struct drm_info_node *)s->private;
|
||||||
|
struct ivpu_device *vdev = to_ivpu_device(node->minor->dev);
|
||||||
|
|
||||||
|
seq_printf(s, "%d\n", atomic_read(&vdev->pm->reset_counter));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int reset_pending_show(struct seq_file *s, void *v)
|
||||||
|
{
|
||||||
|
struct drm_info_node *node = (struct drm_info_node *)s->private;
|
||||||
|
struct ivpu_device *vdev = to_ivpu_device(node->minor->dev);
|
||||||
|
|
||||||
|
seq_printf(s, "%d\n", atomic_read(&vdev->pm->in_reset));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static const struct drm_info_list vdev_debugfs_list[] = {
|
static const struct drm_info_list vdev_debugfs_list[] = {
|
||||||
{"bo_list", bo_list_show, 0},
|
{"bo_list", bo_list_show, 0},
|
||||||
{"fw_trace_capability", fw_trace_capability_show, 0},
|
{"fw_trace_capability", fw_trace_capability_show, 0},
|
||||||
{"fw_trace_config", fw_trace_config_show, 0},
|
{"fw_trace_config", fw_trace_config_show, 0},
|
||||||
{"last_bootmode", last_bootmode_show, 0},
|
{"last_bootmode", last_bootmode_show, 0},
|
||||||
|
{"reset_counter", reset_counter_show, 0},
|
||||||
|
{"reset_pending", reset_pending_show, 0},
|
||||||
};
|
};
|
||||||
|
|
||||||
static int fw_log_show(struct seq_file *s, void *v)
|
static int fw_log_show(struct seq_file *s, void *v)
|
||||||
@ -216,6 +236,24 @@ ivpu_reset_engine_fn(struct file *file, const char __user *user_buf, size_t size
|
|||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ssize_t
|
||||||
|
ivpu_force_recovery_fn(struct file *file, const char __user *user_buf, size_t size, loff_t *pos)
|
||||||
|
{
|
||||||
|
struct ivpu_device *vdev = file->private_data;
|
||||||
|
|
||||||
|
if (!size)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
ivpu_pm_schedule_recovery(vdev);
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct file_operations ivpu_force_recovery_fops = {
|
||||||
|
.owner = THIS_MODULE,
|
||||||
|
.open = simple_open,
|
||||||
|
.write = ivpu_force_recovery_fn,
|
||||||
|
};
|
||||||
|
|
||||||
static const struct file_operations ivpu_reset_engine_fops = {
|
static const struct file_operations ivpu_reset_engine_fops = {
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
.open = simple_open,
|
.open = simple_open,
|
||||||
@ -229,6 +267,9 @@ void ivpu_debugfs_init(struct drm_minor *minor)
|
|||||||
drm_debugfs_create_files(vdev_debugfs_list, ARRAY_SIZE(vdev_debugfs_list),
|
drm_debugfs_create_files(vdev_debugfs_list, ARRAY_SIZE(vdev_debugfs_list),
|
||||||
minor->debugfs_root, minor);
|
minor->debugfs_root, minor);
|
||||||
|
|
||||||
|
debugfs_create_file("force_recovery", 0200, minor->debugfs_root, vdev,
|
||||||
|
&ivpu_force_recovery_fops);
|
||||||
|
|
||||||
debugfs_create_file("fw_log", 0644, minor->debugfs_root, vdev,
|
debugfs_create_file("fw_log", 0644, minor->debugfs_root, vdev,
|
||||||
&fw_log_fops);
|
&fw_log_fops);
|
||||||
debugfs_create_file("fw_trace_destination_mask", 0200, minor->debugfs_root, vdev,
|
debugfs_create_file("fw_trace_destination_mask", 0200, minor->debugfs_root, vdev,
|
||||||
|
@ -259,6 +259,7 @@ void ivpu_pm_reset_prepare_cb(struct pci_dev *pdev)
|
|||||||
pm_runtime_get_sync(vdev->drm.dev);
|
pm_runtime_get_sync(vdev->drm.dev);
|
||||||
|
|
||||||
ivpu_dbg(vdev, PM, "Pre-reset..\n");
|
ivpu_dbg(vdev, PM, "Pre-reset..\n");
|
||||||
|
atomic_inc(&vdev->pm->reset_counter);
|
||||||
atomic_set(&vdev->pm->in_reset, 1);
|
atomic_set(&vdev->pm->in_reset, 1);
|
||||||
ivpu_shutdown(vdev);
|
ivpu_shutdown(vdev);
|
||||||
ivpu_pm_prepare_cold_boot(vdev);
|
ivpu_pm_prepare_cold_boot(vdev);
|
||||||
|
@ -14,6 +14,7 @@ struct ivpu_pm_info {
|
|||||||
struct ivpu_device *vdev;
|
struct ivpu_device *vdev;
|
||||||
struct work_struct recovery_work;
|
struct work_struct recovery_work;
|
||||||
atomic_t in_reset;
|
atomic_t in_reset;
|
||||||
|
atomic_t reset_counter;
|
||||||
bool is_warmboot;
|
bool is_warmboot;
|
||||||
u32 suspend_reschedule_counter;
|
u32 suspend_reschedule_counter;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user