drm/amd/amdgpu: Fix srbm_indexing in init/inactive hqd code
authorTom St Denis <tom.stdenis@amd.com>
Tue, 4 Apr 2017 14:24:19 +0000 (10:24 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 6 Apr 2017 17:26:50 +0000 (13:26 -0400)
Signed-off-by: Tom St Denis <tom.stdenis@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c

index 14a6fbd..cf2a4d7 100644 (file)
@@ -5462,6 +5462,7 @@ static void gfx_v8_0_inactive_hqd(struct amdgpu_device *adev,
 {
        int i;
 
+       mutex_lock(&adev->srbm_mutex);
        vi_srbm_select(adev, ring->me, ring->pipe, ring->queue, 0);
        if (RREG32(mmCP_HQD_ACTIVE) & CP_HQD_ACTIVE__ACTIVE_MASK) {
                WREG32_FIELD(CP_HQD_DEQUEUE_REQUEST, DEQUEUE_REQ, 2);
@@ -5471,6 +5472,8 @@ static void gfx_v8_0_inactive_hqd(struct amdgpu_device *adev,
                        udelay(1);
                }
        }
+       vi_srbm_select(adev, 0, 0, 0, 0);
+       mutex_unlock(&adev->srbm_mutex);
 }
 
 static int gfx_v8_0_pre_soft_reset(void *handle)
@@ -5576,11 +5579,13 @@ static int gfx_v8_0_soft_reset(void *handle)
 static void gfx_v8_0_init_hqd(struct amdgpu_device *adev,
                              struct amdgpu_ring *ring)
 {
+       mutex_lock(&adev->srbm_mutex);
        vi_srbm_select(adev, ring->me, ring->pipe, ring->queue, 0);
        WREG32(mmCP_HQD_DEQUEUE_REQUEST, 0);
        WREG32(mmCP_HQD_PQ_RPTR, 0);
        WREG32(mmCP_HQD_PQ_WPTR, 0);
        vi_srbm_select(adev, 0, 0, 0, 0);
+       mutex_unlock(&adev->srbm_mutex);
 }
 
 static int gfx_v8_0_post_soft_reset(void *handle)