mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-25 00:52:45 -04:00
drm/amdgpu: use ring structure to access rptr/wptr v2
Use ring structure to access the cpu/gpu address of rptr/wptr. v2: merge gfx10/sdma5/sdma5.2 patches Signed-off-by: Jack Xiao <Jack.Xiao@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -350,7 +350,7 @@ out:
|
||||
static uint64_t sdma_v3_0_ring_get_rptr(struct amdgpu_ring *ring)
|
||||
{
|
||||
/* XXX check if swapping is necessary on BE */
|
||||
return ring->adev->wb.wb[ring->rptr_offs] >> 2;
|
||||
return *ring->rptr_cpu_addr >> 2;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -367,7 +367,7 @@ static uint64_t sdma_v3_0_ring_get_wptr(struct amdgpu_ring *ring)
|
||||
|
||||
if (ring->use_doorbell || ring->use_pollmem) {
|
||||
/* XXX check if swapping is necessary on BE */
|
||||
wptr = ring->adev->wb.wb[ring->wptr_offs] >> 2;
|
||||
wptr = *ring->wptr_cpu_addr >> 2;
|
||||
} else {
|
||||
wptr = RREG32(mmSDMA0_GFX_RB_WPTR + sdma_offsets[ring->me]) >> 2;
|
||||
}
|
||||
@@ -387,12 +387,12 @@ static void sdma_v3_0_ring_set_wptr(struct amdgpu_ring *ring)
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
|
||||
if (ring->use_doorbell) {
|
||||
u32 *wb = (u32 *)&adev->wb.wb[ring->wptr_offs];
|
||||
u32 *wb = (u32 *)ring->wptr_cpu_addr;
|
||||
/* XXX check if swapping is necessary on BE */
|
||||
WRITE_ONCE(*wb, ring->wptr << 2);
|
||||
WDOORBELL32(ring->doorbell_index, ring->wptr << 2);
|
||||
} else if (ring->use_pollmem) {
|
||||
u32 *wb = (u32 *)&adev->wb.wb[ring->wptr_offs];
|
||||
u32 *wb = (u32 *)ring->wptr_cpu_addr;
|
||||
|
||||
WRITE_ONCE(*wb, ring->wptr << 2);
|
||||
} else {
|
||||
@@ -649,7 +649,6 @@ static int sdma_v3_0_gfx_resume(struct amdgpu_device *adev)
|
||||
struct amdgpu_ring *ring;
|
||||
u32 rb_cntl, ib_cntl, wptr_poll_cntl;
|
||||
u32 rb_bufsz;
|
||||
u32 wb_offset;
|
||||
u32 doorbell;
|
||||
u64 wptr_gpu_addr;
|
||||
int i, j, r;
|
||||
@@ -657,7 +656,6 @@ static int sdma_v3_0_gfx_resume(struct amdgpu_device *adev)
|
||||
for (i = 0; i < adev->sdma.num_instances; i++) {
|
||||
ring = &adev->sdma.instance[i].ring;
|
||||
amdgpu_ring_clear_ring(ring);
|
||||
wb_offset = (ring->rptr_offs * 4);
|
||||
|
||||
mutex_lock(&adev->srbm_mutex);
|
||||
for (j = 0; j < 16; j++) {
|
||||
@@ -694,9 +692,9 @@ static int sdma_v3_0_gfx_resume(struct amdgpu_device *adev)
|
||||
|
||||
/* set the wb address whether it's enabled or not */
|
||||
WREG32(mmSDMA0_GFX_RB_RPTR_ADDR_HI + sdma_offsets[i],
|
||||
upper_32_bits(adev->wb.gpu_addr + wb_offset) & 0xFFFFFFFF);
|
||||
upper_32_bits(ring->rptr_gpu_addr) & 0xFFFFFFFF);
|
||||
WREG32(mmSDMA0_GFX_RB_RPTR_ADDR_LO + sdma_offsets[i],
|
||||
lower_32_bits(adev->wb.gpu_addr + wb_offset) & 0xFFFFFFFC);
|
||||
lower_32_bits(ring->rptr_gpu_addr) & 0xFFFFFFFC);
|
||||
|
||||
rb_cntl = REG_SET_FIELD(rb_cntl, SDMA0_GFX_RB_CNTL, RPTR_WRITEBACK_ENABLE, 1);
|
||||
|
||||
@@ -715,7 +713,7 @@ static int sdma_v3_0_gfx_resume(struct amdgpu_device *adev)
|
||||
WREG32(mmSDMA0_GFX_DOORBELL + sdma_offsets[i], doorbell);
|
||||
|
||||
/* setup the wptr shadow polling */
|
||||
wptr_gpu_addr = adev->wb.gpu_addr + (ring->wptr_offs * 4);
|
||||
wptr_gpu_addr = ring->wptr_gpu_addr;
|
||||
|
||||
WREG32(mmSDMA0_GFX_RB_WPTR_POLL_ADDR_LO + sdma_offsets[i],
|
||||
lower_32_bits(wptr_gpu_addr));
|
||||
|
||||
Reference in New Issue
Block a user