drm/amdgpu: gfx handle ras resume
authorxinhui pan <xinhui.pan@amd.com>
Thu, 9 May 2019 00:58:56 +0000 (08:58 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 24 May 2019 17:20:51 +0000 (12:20 -0500)
During S3/S4 bootloader will re-init ras state behind us.
Resume might fail or raise a gpu reset.

Signed-off-by: xinhui pan <xinhui.pan@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: James Zhu <James.Zhu@amd.com>
Tested-by: James Zhu <James.Zhu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c

index d07f3dd..7d7d287 100644 (file)
@@ -3813,8 +3813,26 @@ static int gfx_v9_0_ecc_late_init(void *handle)
        if (r)
                return r;
 
-       if (*ras_if)
+       /* handle resume path. */
+       if (*ras_if) {
+               /* resend ras TA enable cmd during resume.
+                * prepare to handle failure.
+                */
+               ih_info.head = **ras_if;
+               r = amdgpu_ras_feature_enable_on_boot(adev, *ras_if, 1);
+               if (r) {
+                       if (r == -EAGAIN) {
+                               /* request a gpu reset. will run again. */
+                               amdgpu_ras_request_reset_on_boot(adev,
+                                               AMDGPU_RAS_BLOCK__GFX);
+                               return 0;
+                       }
+                       /* fail to enable ras, cleanup all. */
+                       goto irq;
+               }
+               /* enable successfully. continue. */
                goto resume;
+       }
 
        *ras_if = kmalloc(sizeof(**ras_if), GFP_KERNEL);
        if (!*ras_if)