drm/amdgpu: expose benchmarks via debugfs
authorAlex Deucher <alexander.deucher@amd.com>
Fri, 18 Feb 2022 21:41:27 +0000 (16:41 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 23 Feb 2022 19:02:50 +0000 (14:02 -0500)
They provide a nice smoke test of transfer performance
using SDMA.  Allow the user to run these at runtime
rather than only at init time.

v2: fix permissions (Alex)

Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c

index db8a8710333e02968a05c7223475a4188eeab160..9ec4d32257634a90458817a30dfb6f97dc7bcf58 100644 (file)
@@ -1362,6 +1362,25 @@ static int amdgpu_debugfs_evict_gtt(void *data, u64 *val)
        return 0;
 }
 
+static int amdgpu_debugfs_benchmark(void *data, u64 val)
+{
+       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);
+       if (r < 0) {
+               pm_runtime_put_autosuspend(dev->dev);
+               return r;
+       }
+
+       r = amdgpu_benchmark(adev, val);
+
+       pm_runtime_mark_last_busy(dev->dev);
+       pm_runtime_put_autosuspend(dev->dev);
+
+       return r;
+}
 
 static int amdgpu_debugfs_vm_info_show(struct seq_file *m, void *unused)
 {
@@ -1398,6 +1417,8 @@ DEFINE_DEBUGFS_ATTRIBUTE(amdgpu_evict_vram_fops, amdgpu_debugfs_evict_vram,
                         NULL, "%lld\n");
 DEFINE_DEBUGFS_ATTRIBUTE(amdgpu_evict_gtt_fops, amdgpu_debugfs_evict_gtt,
                         NULL, "%lld\n");
+DEFINE_DEBUGFS_ATTRIBUTE(amdgpu_benchmark_fops, NULL, amdgpu_debugfs_benchmark,
+                        "%lld\n");
 
 static void amdgpu_ib_preempt_fences_swap(struct amdgpu_ring *ring,
                                          struct dma_fence **fences)
@@ -1683,6 +1704,8 @@ int amdgpu_debugfs_init(struct amdgpu_device *adev)
                            &amdgpu_debugfs_test_ib_fops);
        debugfs_create_file("amdgpu_vm_info", 0444, root, adev,
                            &amdgpu_debugfs_vm_info_fops);
+       debugfs_create_file("amdgpu_benchmark", 0200, root, adev,
+                           &amdgpu_benchmark_fops);
 
        adev->debugfs_vbios_blob.data = adev->bios;
        adev->debugfs_vbios_blob.size = adev->bios_size;