aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
index ca53b3fba422..572ca63cf676 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
@@ -296,13 +296,12 @@ static uint64_t sdma_v4_0_ring_get_wptr(struct amdgpu_ring *ring)
296 DRM_DEBUG("wptr/doorbell before shift == 0x%016llx\n", wptr); 296 DRM_DEBUG("wptr/doorbell before shift == 0x%016llx\n", wptr);
297 } else { 297 } else {
298 u32 lowbit, highbit; 298 u32 lowbit, highbit;
299 int me = (ring == &adev->sdma.instance[0].ring) ? 0 : 1;
300 299
301 lowbit = RREG32(sdma_v4_0_get_reg_offset(adev, me, mmSDMA0_GFX_RB_WPTR)) >> 2; 300 lowbit = RREG32(sdma_v4_0_get_reg_offset(adev, ring->me, mmSDMA0_GFX_RB_WPTR)) >> 2;
302 highbit = RREG32(sdma_v4_0_get_reg_offset(adev, me, mmSDMA0_GFX_RB_WPTR_HI)) >> 2; 301 highbit = RREG32(sdma_v4_0_get_reg_offset(adev, ring->me, mmSDMA0_GFX_RB_WPTR_HI)) >> 2;
303 302
304 DRM_DEBUG("wptr [%i]high== 0x%08x low==0x%08x\n", 303 DRM_DEBUG("wptr [%i]high== 0x%08x low==0x%08x\n",
305 me, highbit, lowbit); 304 ring->me, highbit, lowbit);
306 wptr = highbit; 305 wptr = highbit;
307 wptr = wptr << 32; 306 wptr = wptr << 32;
308 wptr |= lowbit; 307 wptr |= lowbit;
@@ -339,17 +338,15 @@ static void sdma_v4_0_ring_set_wptr(struct amdgpu_ring *ring)
339 ring->doorbell_index, ring->wptr << 2); 338 ring->doorbell_index, ring->wptr << 2);
340 WDOORBELL64(ring->doorbell_index, ring->wptr << 2); 339 WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
341 } else { 340 } else {
342 int me = (ring == &ring->adev->sdma.instance[0].ring) ? 0 : 1;
343
344 DRM_DEBUG("Not using doorbell -- " 341 DRM_DEBUG("Not using doorbell -- "
345 "mmSDMA%i_GFX_RB_WPTR == 0x%08x " 342 "mmSDMA%i_GFX_RB_WPTR == 0x%08x "
346 "mmSDMA%i_GFX_RB_WPTR_HI == 0x%08x\n", 343 "mmSDMA%i_GFX_RB_WPTR_HI == 0x%08x\n",
347 me, 344 ring->me,
348 lower_32_bits(ring->wptr << 2), 345 lower_32_bits(ring->wptr << 2),
349 me, 346 ring->me,
350 upper_32_bits(ring->wptr << 2)); 347 upper_32_bits(ring->wptr << 2));
351 WREG32(sdma_v4_0_get_reg_offset(adev, me, mmSDMA0_GFX_RB_WPTR), lower_32_bits(ring->wptr << 2)); 348 WREG32(sdma_v4_0_get_reg_offset(adev, ring->me, mmSDMA0_GFX_RB_WPTR), lower_32_bits(ring->wptr << 2));
352 WREG32(sdma_v4_0_get_reg_offset(adev, me, mmSDMA0_GFX_RB_WPTR_HI), upper_32_bits(ring->wptr << 2)); 349 WREG32(sdma_v4_0_get_reg_offset(adev, ring->me, mmSDMA0_GFX_RB_WPTR_HI), upper_32_bits(ring->wptr << 2));
353 } 350 }
354} 351}
355 352
@@ -430,7 +427,7 @@ static void sdma_v4_0_ring_emit_hdp_flush(struct amdgpu_ring *ring)
430 u32 ref_and_mask = 0; 427 u32 ref_and_mask = 0;
431 const struct nbio_hdp_flush_reg *nbio_hf_reg = adev->nbio_funcs->hdp_flush_reg; 428 const struct nbio_hdp_flush_reg *nbio_hf_reg = adev->nbio_funcs->hdp_flush_reg;
432 429
433 if (ring == &ring->adev->sdma.instance[0].ring) 430 if (ring->me == 0)
434 ref_and_mask = nbio_hf_reg->ref_and_mask_sdma0; 431 ref_and_mask = nbio_hf_reg->ref_and_mask_sdma0;
435 else 432 else
436 ref_and_mask = nbio_hf_reg->ref_and_mask_sdma1; 433 ref_and_mask = nbio_hf_reg->ref_and_mask_sdma1;
@@ -1651,8 +1648,10 @@ static void sdma_v4_0_set_ring_funcs(struct amdgpu_device *adev)
1651{ 1648{
1652 int i; 1649 int i;
1653 1650
1654 for (i = 0; i < adev->sdma.num_instances; i++) 1651 for (i = 0; i < adev->sdma.num_instances; i++) {
1655 adev->sdma.instance[i].ring.funcs = &sdma_v4_0_ring_funcs; 1652 adev->sdma.instance[i].ring.funcs = &sdma_v4_0_ring_funcs;
1653 adev->sdma.instance[i].ring.me = i;
1654 }
1656} 1655}
1657 1656
1658static const struct amdgpu_irq_src_funcs sdma_v4_0_trap_irq_funcs = { 1657static const struct amdgpu_irq_src_funcs sdma_v4_0_trap_irq_funcs = {