Merge tag 'amd-drm-next-5.18-2022-02-25' of https://gitlab.freedesktop.org/agd5f...
authorDave Airlie <airlied@redhat.com>
Tue, 1 Mar 2022 06:19:02 +0000 (16:19 +1000)
committerDave Airlie <airlied@redhat.com>
Tue, 1 Mar 2022 06:19:02 +0000 (16:19 +1000)
amd-drm-next-5.18-2022-02-25:

amdgpu:
- Raven2 suspend/resume fix
- SDMA 5.2.6 updates
- VCN 3.1.2 updates
- SMU 13.0.5 updates
- DCN 3.1.5 updates
- Virtual display fixes
- SMU code cleanup
- Harvest fixes
- Expose benchmark tests via debugfs
- Drop no longer relevant gart aperture tests
- More RAS restructuring
- W=1 fixes
- PSR rework
- DP/VGA adapter fixes
- DP MST fixes
- GPUVM eviction fix
- GPU reset debugfs register dumping support
- Misc display fixes
- SR-IOV fix
- Aldebaran mGPU fix
- Add module parameter to disable XGMI for testing

amdkfd:
- IH ring overflow logging fixes
- CRIU fixes
- Misc fixes

Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Alex Deucher <alexander.deucher@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220225183535.5907-1-alexander.deucher@amd.com
1  2 
drivers/gpu/drm/amd/amdgpu/amdgpu.h
drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.h
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c

index 8685784f24a928647717d063c4ce1c81d484e81f,d990ebfd2afc8a9036ac85be5e803c8bf28dbb55..37ff8cf5bbede3a8d9ac6107308eaada5e31fa79
@@@ -1101,7 -1094,11 +1094,13 @@@ struct amdgpu_device 
  
        struct ip_discovery_top         *ip_top;
  
 +      struct amdgpu_reset_domain      *reset_domain;
++
+       struct mutex                    benchmark_mutex;
+       /* reset dump register */
+       uint32_t                        *reset_dump_reg_list;
+       int                             num_regs;
  };
  
  static inline struct amdgpu_device *drm_to_adev(struct drm_device *ddev)
index ae0c83237608823ea1132bb57ca21e2bf6cab568,9eb9b440bd438319014c8eae7ec1be8eac0e336e..426b63e4f1f6c985988829bbaef538b009b13f82
@@@ -1619,6 -1638,86 +1640,86 @@@ DEFINE_DEBUGFS_ATTRIBUTE(fops_ib_preemp
  DEFINE_DEBUGFS_ATTRIBUTE(fops_sclk_set, NULL,
                        amdgpu_debugfs_sclk_set, "%llu\n");
  
 -      ret = down_read_killable(&adev->reset_sem);
+ static ssize_t amdgpu_reset_dump_register_list_read(struct file *f,
+                               char __user *buf, size_t size, loff_t *pos)
+ {
+       struct amdgpu_device *adev = (struct amdgpu_device *)file_inode(f)->i_private;
+       char reg_offset[12];
+       int i, ret, len = 0;
+       if (*pos)
+               return 0;
+       memset(reg_offset, 0, 12);
 -              up_read(&adev->reset_sem);
++      ret = down_read_killable(&adev->reset_domain->sem);
+       if (ret)
+               return ret;
+       for (i = 0; i < adev->num_regs; i++) {
+               sprintf(reg_offset, "0x%x\n", adev->reset_dump_reg_list[i]);
 -              ret = down_read_killable(&adev->reset_sem);
++              up_read(&adev->reset_domain->sem);
+               if (copy_to_user(buf + len, reg_offset, strlen(reg_offset)))
+                       return -EFAULT;
+               len += strlen(reg_offset);
 -      up_read(&adev->reset_sem);
++              ret = down_read_killable(&adev->reset_domain->sem);
+               if (ret)
+                       return ret;
+       }
 -      ret = down_write_killable(&adev->reset_sem);
++      up_read(&adev->reset_domain->sem);
+       *pos += len;
+       return len;
+ }
+ static ssize_t amdgpu_reset_dump_register_list_write(struct file *f,
+                       const char __user *buf, size_t size, loff_t *pos)
+ {
+       struct amdgpu_device *adev = (struct amdgpu_device *)file_inode(f)->i_private;
+       char reg_offset[11];
+       uint32_t *tmp;
+       int ret, i = 0, len = 0;
+       do {
+               memset(reg_offset, 0, 11);
+               if (copy_from_user(reg_offset, buf + len,
+                                       min(10, ((int)size-len)))) {
+                       ret = -EFAULT;
+                       goto error_free;
+               }
+               tmp = krealloc_array(tmp, i + 1, sizeof(uint32_t), GFP_KERNEL);
+               if (sscanf(reg_offset, "%X %n", &tmp[i], &ret) != 1) {
+                       ret = -EINVAL;
+                       goto error_free;
+               }
+               len += ret;
+               i++;
+       } while (len < size);
 -      up_write(&adev->reset_sem);
++      ret = down_write_killable(&adev->reset_domain->sem);
+       if (ret)
+               goto error_free;
+       swap(adev->reset_dump_reg_list, tmp);
+       adev->num_regs = i;
++      up_write(&adev->reset_domain->sem);
+       ret = size;
+ error_free:
+       kfree(tmp);
+       return ret;
+ }
+ static const struct file_operations amdgpu_reset_dump_register_list = {
+       .owner = THIS_MODULE,
+       .read = amdgpu_reset_dump_register_list_read,
+       .write = amdgpu_reset_dump_register_list_write,
+       .llseek = default_llseek
+ };
  int amdgpu_debugfs_init(struct amdgpu_device *adev)
  {
        struct dentry *root = adev_to_drm(adev)->primary->debugfs_root;
index ca8e76771ea17a05795681f316c775403a7b2423,6113ddc765a744ff6609a39a4ac3dc1a98a267f2..ca854626a108278fbc55047c04da69c3175dbc7f
@@@ -4723,6 -4643,22 +4716,22 @@@ int amdgpu_device_pre_asic_reset(struc
        return r;
  }
  
 -      lockdep_assert_held(&adev->reset_sem);
+ static int amdgpu_reset_reg_dumps(struct amdgpu_device *adev)
+ {
+       uint32_t reg_value;
+       int i;
++      lockdep_assert_held(&adev->reset_domain->sem);
+       dump_stack();
+       for (i = 0; i < adev->num_regs; i++) {
+               reg_value = RREG32(adev->reset_dump_reg_list[i]);
+               trace_amdgpu_reset_reg_dumps(adev->reset_dump_reg_list[i], reg_value);
+       }
+       return 0;
+ }
  int amdgpu_do_asic_reset(struct list_head *device_list_handle,
                         struct amdgpu_reset_context *reset_context)
  {
index 0e8c5e6b2a5b87ce9d7e62a9995b2eafdad36ce0,77f9d94743a1699bc79572c79325319e11017c34..777210811311e8f84ac9694655f2606accae8e5d
@@@ -853,12 -857,12 +853,12 @@@ static int psr_capability_show(struct s
        if (!(link->connector_signal & SIGNAL_TYPE_EDP))
                return -ENODEV;
  
-       seq_printf(m, "Sink support: %s", str_yes_no(link->dpcd_caps.psr_caps.psr_version != 0));
-       if (link->dpcd_caps.psr_caps.psr_version)
-               seq_printf(m, " [0x%02x]", link->dpcd_caps.psr_caps.psr_version);
 -      seq_printf(m, "Sink support: %s", yesno(link->dpcd_caps.psr_info.psr_version != 0));
++      seq_printf(m, "Sink support: %s", str_yes_no(link->dpcd_caps.psr_info.psr_version != 0));
+       if (link->dpcd_caps.psr_info.psr_version)
+               seq_printf(m, " [0x%02x]", link->dpcd_caps.psr_info.psr_version);
        seq_puts(m, "\n");
  
 -      seq_printf(m, "Driver support: %s", yesno(link->psr_settings.psr_feature_enabled));
 +      seq_printf(m, "Driver support: %s", str_yes_no(link->psr_settings.psr_feature_enabled));
        if (link->psr_settings.psr_version)
                seq_printf(m, " [0x%02x]", link->psr_settings.psr_version);
        seq_puts(m, "\n");