]> Git Repo - linux.git/blobdiff - drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
Merge tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64...
[linux.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_debugfs.c
index 2d125b8b15ee1962f2569087c0b8d006512fca52..a6667a2ca0db3997f9a37de68d3a6fac19048824 100644 (file)
@@ -35,6 +35,7 @@
 #include "amdgpu_dm_debugfs.h"
 #include "amdgpu_ras.h"
 #include "amdgpu_rap.h"
+#include "amdgpu_fw_attestation.h"
 
 /**
  * amdgpu_debugfs_add_files - Add simple debugfs entries
@@ -169,14 +170,14 @@ static void amdgpu_debugfs_autodump_init(struct amdgpu_device *adev)
  *
  * Bit 62:  Indicates a GRBM bank switch is needed
  * Bit 61:  Indicates a SRBM bank switch is needed (implies bit 62 is
- *                     zero)
+ *         zero)
  * Bits 24..33: The SE or ME selector if needed
  * Bits 34..43: The SH (or SA) or PIPE selector if needed
  * Bits 44..53: The INSTANCE (or CU/WGP) or QUEUE selector if needed
  *
  * Bit 23:  Indicates that the PM power gating lock should be held
- *                     This is necessary to read registers that might be
- *                     unreliable during a power gating transistion.
+ *         This is necessary to read registers that might be
+ *         unreliable during a power gating transistion.
  *
  * The lower bits are the BYTE offset of the register to read.  This
  * allows reading multiple registers in a single call and having
@@ -299,7 +300,7 @@ end:
        return result;
 }
 
-/**
+/*
  * amdgpu_debugfs_regs_read - Callback for reading MMIO registers
  */
 static ssize_t amdgpu_debugfs_regs_read(struct file *f, char __user *buf,
@@ -308,7 +309,7 @@ static ssize_t amdgpu_debugfs_regs_read(struct file *f, char __user *buf,
        return amdgpu_debugfs_process_reg_op(true, f, buf, size, pos);
 }
 
-/**
+/*
  * amdgpu_debugfs_regs_write - Callback for writing MMIO registers
  */
 static ssize_t amdgpu_debugfs_regs_write(struct file *f, const char __user *buf,
@@ -864,7 +865,7 @@ static ssize_t amdgpu_debugfs_wave_read(struct file *f, char __user *buf,
 {
        struct amdgpu_device *adev = f->f_inode->i_private;
        int r, x;
-       ssize_t result=0;
+       ssize_t result = 0;
        uint32_t offset, se, sh, cu, wave, simd, data[32];
 
        if (size & 3 || *pos & 3)
@@ -1210,7 +1211,7 @@ static const char *debugfs_regs_names[] = {
 
 /**
  * amdgpu_debugfs_regs_init -  Initialize debugfs entries that provide
- *                                                             register access.
+ *                             register access.
  *
  * @adev: The device to attach the debugfs entries to
  */
@@ -1319,6 +1320,7 @@ static int amdgpu_debugfs_evict_gtt(struct seq_file *m, void *data)
        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 ttm_resource_manager *man;
        int r;
 
        r = pm_runtime_get_sync(dev->dev);
@@ -1327,7 +1329,9 @@ static int amdgpu_debugfs_evict_gtt(struct seq_file *m, void *data)
                return r;
        }
 
-       seq_printf(m, "(%d)\n", ttm_bo_evict_mm(&adev->mman.bdev, TTM_PL_TT));
+       man = ttm_manager_type(&adev->mman.bdev, TTM_PL_TT);
+       r = ttm_resource_manager_evict_all(&adev->mman.bdev, man);
+       seq_printf(m, "(%d)\n", r);
 
        pm_runtime_mark_last_busy(dev->dev);
        pm_runtime_put_autosuspend(dev->dev);
@@ -1335,11 +1339,41 @@ static int amdgpu_debugfs_evict_gtt(struct seq_file *m, void *data)
        return 0;
 }
 
+static int amdgpu_debugfs_vm_info(struct seq_file *m, void *data)
+{
+       struct drm_info_node *node = (struct drm_info_node *)m->private;
+       struct drm_device *dev = node->minor->dev;
+       struct drm_file *file;
+       int r;
+
+       r = mutex_lock_interruptible(&dev->filelist_mutex);
+       if (r)
+               return r;
+
+       list_for_each_entry(file, &dev->filelist, lhead) {
+               struct amdgpu_fpriv *fpriv = file->driver_priv;
+               struct amdgpu_vm *vm = &fpriv->vm;
+
+               seq_printf(m, "pid:%d\tProcess:%s ----------\n",
+                               vm->task_info.pid, vm->task_info.process_name);
+               r = amdgpu_bo_reserve(vm->root.base.bo, true);
+               if (r)
+                       break;
+               amdgpu_debugfs_vm_bo_info(vm, m);
+               amdgpu_bo_unreserve(vm->root.base.bo);
+       }
+
+       mutex_unlock(&dev->filelist_mutex);
+
+       return r;
+}
+
 static const struct drm_info_list amdgpu_debugfs_list[] = {
        {"amdgpu_vbios", amdgpu_debugfs_get_vbios_dump},
        {"amdgpu_test_ib", &amdgpu_debugfs_test_ib},
        {"amdgpu_evict_vram", &amdgpu_debugfs_evict_vram},
        {"amdgpu_evict_gtt", &amdgpu_debugfs_evict_gtt},
+       {"amdgpu_vm_info", &amdgpu_debugfs_vm_info},
 };
 
 static void amdgpu_ib_preempt_fences_swap(struct amdgpu_ring *ring,
@@ -1635,6 +1669,8 @@ int amdgpu_debugfs_init(struct amdgpu_device *adev)
 
        amdgpu_rap_debugfs_init(adev);
 
+       amdgpu_fw_attestation_debugfs_init(adev);
+
        return amdgpu_debugfs_add_files(adev, amdgpu_debugfs_list,
                                        ARRAY_SIZE(amdgpu_debugfs_list));
 }
This page took 0.036879 seconds and 4 git commands to generate.