diff options
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c index b1de44f22824..b7d69ab9a94a 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | |||
@@ -641,10 +641,11 @@ static void sdma_v3_0_enable(struct amdgpu_device *adev, bool enable) | |||
641 | static int sdma_v3_0_gfx_resume(struct amdgpu_device *adev) | 641 | static int sdma_v3_0_gfx_resume(struct amdgpu_device *adev) |
642 | { | 642 | { |
643 | struct amdgpu_ring *ring; | 643 | struct amdgpu_ring *ring; |
644 | u32 rb_cntl, ib_cntl; | 644 | u32 rb_cntl, ib_cntl, wptr_poll_cntl; |
645 | u32 rb_bufsz; | 645 | u32 rb_bufsz; |
646 | u32 wb_offset; | 646 | u32 wb_offset; |
647 | u32 doorbell; | 647 | u32 doorbell; |
648 | u64 wptr_gpu_addr; | ||
648 | int i, j, r; | 649 | int i, j, r; |
649 | 650 | ||
650 | for (i = 0; i < adev->sdma.num_instances; i++) { | 651 | for (i = 0; i < adev->sdma.num_instances; i++) { |
@@ -707,6 +708,20 @@ static int sdma_v3_0_gfx_resume(struct amdgpu_device *adev) | |||
707 | } | 708 | } |
708 | WREG32(mmSDMA0_GFX_DOORBELL + sdma_offsets[i], doorbell); | 709 | WREG32(mmSDMA0_GFX_DOORBELL + sdma_offsets[i], doorbell); |
709 | 710 | ||
711 | /* setup the wptr shadow polling */ | ||
712 | wptr_gpu_addr = adev->wb.gpu_addr + (ring->wptr_offs * 4); | ||
713 | |||
714 | WREG32(mmSDMA0_GFX_RB_WPTR_POLL_ADDR_LO + sdma_offsets[i], | ||
715 | lower_32_bits(wptr_gpu_addr)); | ||
716 | WREG32(mmSDMA0_GFX_RB_WPTR_POLL_ADDR_HI + sdma_offsets[i], | ||
717 | upper_32_bits(wptr_gpu_addr)); | ||
718 | wptr_poll_cntl = RREG32(mmSDMA0_GFX_RB_WPTR_POLL_CNTL + sdma_offsets[i]); | ||
719 | if (amdgpu_sriov_vf(adev)) | ||
720 | wptr_poll_cntl = REG_SET_FIELD(wptr_poll_cntl, SDMA0_GFX_RB_WPTR_POLL_CNTL, F32_POLL_ENABLE, 1); | ||
721 | else | ||
722 | wptr_poll_cntl = REG_SET_FIELD(wptr_poll_cntl, SDMA0_GFX_RB_WPTR_POLL_CNTL, F32_POLL_ENABLE, 0); | ||
723 | WREG32(mmSDMA0_GFX_RB_WPTR_POLL_CNTL + sdma_offsets[i], wptr_poll_cntl); | ||
724 | |||
710 | /* enable DMA RB */ | 725 | /* enable DMA RB */ |
711 | rb_cntl = REG_SET_FIELD(rb_cntl, SDMA0_GFX_RB_CNTL, RB_ENABLE, 1); | 726 | rb_cntl = REG_SET_FIELD(rb_cntl, SDMA0_GFX_RB_CNTL, RB_ENABLE, 1); |
712 | WREG32(mmSDMA0_GFX_RB_CNTL + sdma_offsets[i], rb_cntl); | 727 | WREG32(mmSDMA0_GFX_RB_CNTL + sdma_offsets[i], rb_cntl); |