drm/amdgpu: return IH ring drain finished if ring is empty
authorPhilip Yang <Philip.Yang@amd.com>
Sun, 18 Apr 2021 02:37:21 +0000 (22:37 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 29 Apr 2021 03:36:05 +0000 (23:36 -0400)
Sometimes IH do not setup ring wptr overflow flag after wptr exceed
rptr. As a workaround, if IH rptr equals to wptr, ring is empty,
return true to indicate IH ring checkpoint is processed, IH ring drain
is finished.

Signed-off-by: Philip Yang <Philip.Yang@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c

index faaa6aa..a36e191 100644 (file)
@@ -175,7 +175,9 @@ static bool amdgpu_ih_has_checkpoint_processed(struct amdgpu_device *adev,
                cur_rptr += ih->ptr_mask + 1;
        *prev_rptr = cur_rptr;
 
-       return cur_rptr >= checkpoint_wptr;
+       /* check ring is empty to workaround missing wptr overflow flag */
+       return cur_rptr >= checkpoint_wptr ||
+              (cur_rptr & ih->ptr_mask) == amdgpu_ih_get_wptr(adev, ih);
 }
 
 /**