|
@@ -711,14 +711,17 @@ static int sdma_v3_0_gfx_resume(struct amdgpu_device *adev)
|
|
WREG32(mmSDMA0_GFX_RB_WPTR_POLL_ADDR_HI + sdma_offsets[i],
|
|
WREG32(mmSDMA0_GFX_RB_WPTR_POLL_ADDR_HI + sdma_offsets[i],
|
|
upper_32_bits(wptr_gpu_addr));
|
|
upper_32_bits(wptr_gpu_addr));
|
|
wptr_poll_cntl = RREG32(mmSDMA0_GFX_RB_WPTR_POLL_CNTL + sdma_offsets[i]);
|
|
wptr_poll_cntl = RREG32(mmSDMA0_GFX_RB_WPTR_POLL_CNTL + sdma_offsets[i]);
|
|
- if (ring->use_pollmem)
|
|
|
|
|
|
+ if (ring->use_pollmem) {
|
|
|
|
+ /*wptr polling is not enogh fast, directly clean the wptr register */
|
|
|
|
+ WREG32(mmSDMA0_GFX_RB_WPTR + sdma_offsets[i], 0);
|
|
wptr_poll_cntl = REG_SET_FIELD(wptr_poll_cntl,
|
|
wptr_poll_cntl = REG_SET_FIELD(wptr_poll_cntl,
|
|
SDMA0_GFX_RB_WPTR_POLL_CNTL,
|
|
SDMA0_GFX_RB_WPTR_POLL_CNTL,
|
|
ENABLE, 1);
|
|
ENABLE, 1);
|
|
- else
|
|
|
|
|
|
+ } else {
|
|
wptr_poll_cntl = REG_SET_FIELD(wptr_poll_cntl,
|
|
wptr_poll_cntl = REG_SET_FIELD(wptr_poll_cntl,
|
|
SDMA0_GFX_RB_WPTR_POLL_CNTL,
|
|
SDMA0_GFX_RB_WPTR_POLL_CNTL,
|
|
ENABLE, 0);
|
|
ENABLE, 0);
|
|
|
|
+ }
|
|
WREG32(mmSDMA0_GFX_RB_WPTR_POLL_CNTL + sdma_offsets[i], wptr_poll_cntl);
|
|
WREG32(mmSDMA0_GFX_RB_WPTR_POLL_CNTL + sdma_offsets[i], wptr_poll_cntl);
|
|
|
|
|
|
/* enable DMA RB */
|
|
/* enable DMA RB */
|