Merge tag 'amd-drm-next-5.13-2021-03-23' of https://gitlab.freedesktop.org/agd5f...
[sfrench/cifs-2.6.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_fence.c
index 8e0a5650d3838502c2701cf924f001f897cea992..1a4809d9e85022681771065da141736069a12c7b 100644 (file)
@@ -36,8 +36,6 @@
 #include <linux/firmware.h>
 #include <linux/pm_runtime.h>
 
-#include <drm/drm_debugfs.h>
-
 #include "amdgpu.h"
 #include "amdgpu_trace.h"
 
@@ -533,6 +531,8 @@ void amdgpu_fence_driver_fini(struct amdgpu_device *adev)
 
                if (!ring || !ring->fence_drv.initialized)
                        continue;
+               if (!ring->no_scheduler)
+                       drm_sched_fini(&ring->sched);
                r = amdgpu_fence_wait_empty(ring);
                if (r) {
                        /* no need to trigger GPU reset as we are unloading */
@@ -541,8 +541,7 @@ void amdgpu_fence_driver_fini(struct amdgpu_device *adev)
                if (ring->fence_drv.irq_src)
                        amdgpu_irq_put(adev, ring->fence_drv.irq_src,
                                       ring->fence_drv.irq_type);
-               if (!ring->no_scheduler)
-                       drm_sched_fini(&ring->sched);
+
                del_timer_sync(&ring->fence_drv.fallback_timer);
                for (j = 0; j <= ring->fence_drv.num_fences_mask; ++j)
                        dma_fence_put(ring->fence_drv.fences[j]);
@@ -697,11 +696,9 @@ static const struct dma_fence_ops amdgpu_fence_ops = {
  * Fence debugfs
  */
 #if defined(CONFIG_DEBUG_FS)
-static int amdgpu_debugfs_fence_info(struct seq_file *m, void *data)
+static int amdgpu_debugfs_fence_info_show(struct seq_file *m, void *unused)
 {
-       struct drm_info_node *node = (struct drm_info_node *)m->private;
-       struct drm_device *dev = node->minor->dev;
-       struct amdgpu_device *adev = drm_to_adev(dev);
+       struct amdgpu_device *adev = (struct amdgpu_device *)m->private;
        int i;
 
        for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
@@ -746,11 +743,10 @@ static int amdgpu_debugfs_fence_info(struct seq_file *m, void *data)
  *
  * Manually trigger a gpu reset at the next fence wait.
  */
-static int amdgpu_debugfs_gpu_recover(struct seq_file *m, void *data)
+static int gpu_recover_get(void *data, u64 *val)
 {
-       struct drm_info_node *node = (struct drm_info_node *) m->private;
-       struct drm_device *dev = node->minor->dev;
-       struct amdgpu_device *adev = drm_to_adev(dev);
+       struct amdgpu_device *adev = (struct amdgpu_device *)data;
+       struct drm_device *dev = adev_to_drm(adev);
        int r;
 
        r = pm_runtime_get_sync(dev->dev);
@@ -759,8 +755,7 @@ static int amdgpu_debugfs_gpu_recover(struct seq_file *m, void *data)
                return 0;
        }
 
-       seq_printf(m, "gpu recover\n");
-       amdgpu_device_gpu_recover(adev, NULL);
+       *val = amdgpu_device_gpu_recover(adev, NULL);
 
        pm_runtime_mark_last_busy(dev->dev);
        pm_runtime_put_autosuspend(dev->dev);
@@ -768,26 +763,24 @@ static int amdgpu_debugfs_gpu_recover(struct seq_file *m, void *data)
        return 0;
 }
 
-static const struct drm_info_list amdgpu_debugfs_fence_list[] = {
-       {"amdgpu_fence_info", &amdgpu_debugfs_fence_info, 0, NULL},
-       {"amdgpu_gpu_recover", &amdgpu_debugfs_gpu_recover, 0, NULL}
-};
+DEFINE_SHOW_ATTRIBUTE(amdgpu_debugfs_fence_info);
+DEFINE_DEBUGFS_ATTRIBUTE(amdgpu_debugfs_gpu_recover_fops, gpu_recover_get, NULL,
+                        "%lld\n");
 
-static const struct drm_info_list amdgpu_debugfs_fence_list_sriov[] = {
-       {"amdgpu_fence_info", &amdgpu_debugfs_fence_info, 0, NULL},
-};
 #endif
 
-int amdgpu_debugfs_fence_init(struct amdgpu_device *adev)
+void amdgpu_debugfs_fence_init(struct amdgpu_device *adev)
 {
 #if defined(CONFIG_DEBUG_FS)
-       if (amdgpu_sriov_vf(adev))
-               return amdgpu_debugfs_add_files(adev, amdgpu_debugfs_fence_list_sriov,
-                                               ARRAY_SIZE(amdgpu_debugfs_fence_list_sriov));
-       return amdgpu_debugfs_add_files(adev, amdgpu_debugfs_fence_list,
-                                       ARRAY_SIZE(amdgpu_debugfs_fence_list));
-#else
-       return 0;
+       struct drm_minor *minor = adev_to_drm(adev)->primary;
+       struct dentry *root = minor->debugfs_root;
+
+       debugfs_create_file("amdgpu_fence_info", 0444, root, adev,
+                           &amdgpu_debugfs_fence_info_fops);
+
+       if (!amdgpu_sriov_vf(adev))
+               debugfs_create_file("amdgpu_gpu_recover", 0444, root, adev,
+                                   &amdgpu_debugfs_gpu_recover_fops);
 #endif
 }