drm/amdgpu: gmc handle ras resume
authorxinhui pan <xinhui.pan@amd.com>
Thu, 9 May 2019 00:26:02 +0000 (08:26 +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/gmc_v9_0.c

index 1e1ef46..94d67b7 100644 (file)
@@ -686,8 +686,25 @@ static int gmc_v9_0_ecc_late_init(void *handle)
                return 0;
        }
        /* handle resume path. */
-       if (*ras_if)
+       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__UMC);
+                               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)