Initialize the cpu/gpu address of rptr/wptr/fence.

Signed-off-by: Jack Xiao <jack.x...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 37 ++++++++++++++++++++----
 1 file changed, 32 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
index 13ea8ebc421c..ff63ecc861bc 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
@@ -150,6 +150,12 @@ void amdgpu_ring_undo(struct amdgpu_ring *ring)
                ring->funcs->end_use(ring);
 }
 
+#define amdgpu_ring_get_gpu_addr(ring, offset) \
+       (ring->adev->wb.gpu_addr + offset * 4)
+
+#define amdgpu_ring_get_cpu_addr(ring, offset) \
+       (&ring->adev->wb.wb[offset])
+
 /**
  * amdgpu_ring_init - init driver ring struct.
  *
@@ -217,17 +223,38 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct 
amdgpu_ring *ring,
                        "(%d) ring trail_fence_offs wb alloc failed\n", r);
                return r;
        }
-       ring->trail_fence_gpu_addr =
-               adev->wb.gpu_addr + (ring->trail_fence_offs * 4);
-       ring->trail_fence_cpu_addr = &adev->wb.wb[ring->trail_fence_offs];
 
        r = amdgpu_device_wb_get(adev, &ring->cond_exe_offs);
        if (r) {
                dev_err(adev->dev, "(%d) ring cond_exec_polling wb alloc 
failed\n", r);
                return r;
        }
-       ring->cond_exe_gpu_addr = adev->wb.gpu_addr + (ring->cond_exe_offs * 4);
-       ring->cond_exe_cpu_addr = &adev->wb.wb[ring->cond_exe_offs];
+
+       ring->fence_gpu_addr =
+               amdgpu_ring_get_gpu_addr(ring, ring->fence_offs);
+       ring->fence_cpu_addr =
+               amdgpu_ring_get_cpu_addr(ring, ring->fence_offs);
+
+       ring->rptr_gpu_addr =
+               amdgpu_ring_get_gpu_addr(ring, ring->rptr_offs);
+       ring->rptr_cpu_addr =
+               amdgpu_ring_get_cpu_addr(ring, ring->rptr_offs);
+
+       ring->wptr_gpu_addr =
+               amdgpu_ring_get_gpu_addr(ring, ring->wptr_offs);
+       ring->wptr_cpu_addr =
+               amdgpu_ring_get_cpu_addr(ring, ring->wptr_offs);
+
+       ring->trail_fence_gpu_addr =
+               amdgpu_ring_get_gpu_addr(ring, ring->trail_fence_offs);
+       ring->trail_fence_cpu_addr =
+               amdgpu_ring_get_cpu_addr(ring, ring->trail_fence_offs);
+
+       ring->cond_exe_gpu_addr =
+               amdgpu_ring_get_gpu_addr(ring, ring->cond_exe_offs);
+       ring->cond_exe_cpu_addr =
+               amdgpu_ring_get_cpu_addr(ring, ring->cond_exe_offs);
+
        /* always set cond_exec_polling to CONTINUE */
        *ring->cond_exe_cpu_addr = 1;
 
-- 
2.26.2

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to