Register dump call on NV ASIC reset on AMD GPU reset

Signed-off-by: Somalapuram Amaranath <amaranath.somalapu...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/nv.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/nv.c b/drivers/gpu/drm/amd/amdgpu/nv.c
index 2ec1ffb36b1f..b5701772597f 100644
--- a/drivers/gpu/drm/amd/amdgpu/nv.c
+++ b/drivers/gpu/drm/amd/amdgpu/nv.c
@@ -529,10 +529,34 @@ nv_asic_reset_method(struct amdgpu_device *adev)
        }
 }
 
+static void amdgpu_reset_dumps(struct amdgpu_device *adev)
+{
+       int r = 0, i;
+
+       /* original raven doesn't have full asic reset */
+       if ((adev->apu_flags & AMD_APU_IS_RAVEN) &&
+               !(adev->apu_flags & AMD_APU_IS_RAVEN2))
+               return;
+       for (i = 0; i < adev->num_ip_blocks; i++) {
+               if (!adev->ip_blocks[i].status.valid)
+                       continue;
+               if (!adev->ip_blocks[i].version->funcs->reset_reg_dumps)
+                       continue;
+               r = adev->ip_blocks[i].version->funcs->reset_reg_dumps(adev);
+
+               if (r)
+                       DRM_ERROR("reset_reg_dumps of IP block <%s> failed 
%d\n",
+                                       
adev->ip_blocks[i].version->funcs->name, r);
+       }
+
+       dump_stack();
+}
+
 static int nv_asic_reset(struct amdgpu_device *adev)
 {
        int ret = 0;
 
+       amdgpu_reset_dumps(adev);
        switch (nv_asic_reset_method(adev)) {
        case AMD_RESET_METHOD_PCI:
                dev_info(adev->dev, "PCI reset\n");
-- 
2.25.1

Reply via email to