drm/amdgpu: dump ip state before reset for each ip
authorSunil Khatri <sunil.khatri@amd.com>
Tue, 16 Apr 2024 11:26:23 +0000 (16:56 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 26 Apr 2024 21:22:39 +0000 (17:22 -0400)
Invoke the dump_ip_state function for each ip before
the asic resets and save the register values for
debugging via devcoredump.

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

index f3b7cb18fd460d948284bcededd71ec325739133..f8a34db5d9e361b34e806262344fd660358e15d8 100644 (file)
@@ -5353,6 +5353,7 @@ int amdgpu_do_asic_reset(struct list_head *device_list_handle,
        struct amdgpu_device *tmp_adev = NULL;
        bool need_full_reset, skip_hw_reset, vram_lost = false;
        int r = 0;
+       uint32_t i;
 
        /* Try reset handler method first */
        tmp_adev = list_first_entry(device_list_handle, struct amdgpu_device,
@@ -5361,6 +5362,12 @@ int amdgpu_do_asic_reset(struct list_head *device_list_handle,
        if (!test_bit(AMDGPU_SKIP_COREDUMP, &reset_context->flags))
                amdgpu_reset_reg_dumps(tmp_adev);
 
+       /* Trigger ip dump before we reset the asic */
+       for (i = 0; i < tmp_adev->num_ip_blocks; i++)
+               if (tmp_adev->ip_blocks[i].version->funcs->dump_ip_state)
+                       tmp_adev->ip_blocks[i].version->funcs->dump_ip_state(
+                               (void *)tmp_adev);
+
        reset_context->reset_device_list = device_list_handle;
        r = amdgpu_reset_perform_reset(tmp_adev, reset_context);
        /* If reset handler not implemented, continue; otherwise return */