drm/amdgpu/virt: don't check VALID bit for FLR completion message
authorPixel Ding <Pixel.Ding@amd.com>
Thu, 23 Feb 2017 03:10:33 +0000 (11:10 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 28 Apr 2017 21:32:40 +0000 (17:32 -0400)
The interrupt after FLR is missed sometimes due to hardware reason, so
guest driver get the notification of FLR completion via polling
message. Then host doesn't write VALID bit to avoid sending interrupt,
otherwise the completion will be handled twice.

So there's a valid message without VALID bit for FLR completion,
driver should handle it without checking.

Signed-off-by: Pixel Ding <Pixel.Ding@amd.com>
Reviewed-by: Xiangliang Yu <Xiangliang.Yu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/mxgpu_vi.c

index 70a3dd13cb02db3170e9f8a50ada744e8753b3c3..7bdc51b02326118938884d6d33ef036456822563 100644 (file)
@@ -368,9 +368,12 @@ static int xgpu_vi_mailbox_rcv_msg(struct amdgpu_device *adev,
        u32 reg;
        u32 mask = REG_FIELD_MASK(MAILBOX_CONTROL, RCV_MSG_VALID);
 
-       reg = RREG32_NO_KIQ(mmMAILBOX_CONTROL);
-       if (!(reg & mask))
-               return -ENOENT;
+       /* workaround: host driver doesn't set VALID for CMPL now */
+       if (event != IDH_FLR_NOTIFICATION_CMPL) {
+               reg = RREG32_NO_KIQ(mmMAILBOX_CONTROL);
+               if (!(reg & mask))
+                       return -ENOENT;
+       }
 
        reg = RREG32_NO_KIQ(mmMAILBOX_MSGBUF_RCV_DW0);
        if (reg != event)