drm/amdgpu/sdma3: correct wptr initialization for sdma
authorYintian Tao <yttao@amd.com>
Fri, 12 May 2017 06:55:56 +0000 (14:55 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 24 May 2017 22:18:15 +0000 (18:18 -0400)
If doorbell is used for wptr update, we also need to use it
to initialize wptr to 0.

Signed-off-by: Yintian Tao <yttao@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c

index a69e5d4e1d2ac0d5cdf2180d71550ad4ee5c4b8e..1d766ae98dc8d90c85cead54b966bef91c000f87 100644 (file)
@@ -643,8 +643,9 @@ static int sdma_v3_0_gfx_resume(struct amdgpu_device *adev)
                WREG32(mmSDMA0_GFX_RB_CNTL + sdma_offsets[i], rb_cntl);
 
                /* Initialize the ring buffer's read and write pointers */
+               ring->wptr = 0;
                WREG32(mmSDMA0_GFX_RB_RPTR + sdma_offsets[i], 0);
-               WREG32(mmSDMA0_GFX_RB_WPTR + sdma_offsets[i], 0);
+               sdma_v3_0_ring_set_wptr(ring);
                WREG32(mmSDMA0_GFX_IB_RPTR + sdma_offsets[i], 0);
                WREG32(mmSDMA0_GFX_IB_OFFSET + sdma_offsets[i], 0);
 
@@ -659,9 +660,6 @@ static int sdma_v3_0_gfx_resume(struct amdgpu_device *adev)
                WREG32(mmSDMA0_GFX_RB_BASE + sdma_offsets[i], ring->gpu_addr >> 8);
                WREG32(mmSDMA0_GFX_RB_BASE_HI + sdma_offsets[i], ring->gpu_addr >> 40);
 
-               ring->wptr = 0;
-               WREG32(mmSDMA0_GFX_RB_WPTR + sdma_offsets[i], lower_32_bits(ring->wptr) << 2);
-
                doorbell = RREG32(mmSDMA0_GFX_DOORBELL + sdma_offsets[i]);
 
                if (ring->use_doorbell) {