Convert the ring writeback users that already operate on 32-bit slots to the new typed helper accessors.
These call sites currently use open-coded pointer dereferences for 32-bit rptr and wptr writeback slots. Switch them to the helper wrappers so the slot width is explicit and the remaining 64-bit users are separated more clearly from the 32-bit ones. This is a preparatory cleanup for the later ring writeback type cleanup and the MES reset fix. No functional change is intended. Signed-off-by: Runyu Xiao <[email protected]> --- drivers/gpu/drm/amd/amdgpu/amdgpu_cper.c | 6 +++--- drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 5 +++-- drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 2 +- drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 2 +- drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c | 2 +- drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 6 +++--- drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 10 +++++----- drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c | 5 ++--- drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_0.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_1.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_2.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/jpeg_v5_3_0.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 2 +- drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 11 ++++------- drivers/gpu/drm/amd/amdgpu/si_dma.c | 2 +- drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c | 6 +++--- drivers/gpu/drm/amd/amdgpu/vce_v4_0.c | 6 +++--- drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c | 12 ++++++------ drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c | 12 ++++++------ drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c | 12 ++++++------ drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/vcn_v5_0_1.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/vcn_v5_0_2.c | 4 ++-- 31 files changed, 79 insertions(+), 82 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cper.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cper.c index 004edc28d..a9fa502d6 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cper.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cper.c @@ -500,7 +500,7 @@ void amdgpu_cper_ring_write(struct amdgpu_ring *ring, void *src, int count) mutex_lock(&ring->adev->cper.ring_lock); wptr_old = ring->wptr; - rptr = *ring->rptr_cpu_addr & ring->ptr_mask; + rptr = amdgpu_ring_wb_read32(ring->rptr_cpu_addr) & ring->ptr_mask; while (count) { ent_sz = amdgpu_cper_ring_get_ent_sz(ring, ring->wptr); @@ -528,7 +528,7 @@ void amdgpu_cper_ring_write(struct amdgpu_ring *ring, void *src, int count) rptr += (ent_sz >> 2); rptr &= ring->ptr_mask; - *ring->rptr_cpu_addr = rptr; + amdgpu_ring_wb_write32(ring->rptr_cpu_addr, rptr); pos = rptr; } while (!amdgpu_cper_is_hdr(ring, rptr)); @@ -541,7 +541,7 @@ void amdgpu_cper_ring_write(struct amdgpu_ring *ring, void *src, int count) static u64 amdgpu_cper_ring_get_rptr(struct amdgpu_ring *ring) { - return *(ring->rptr_cpu_addr); + return amdgpu_ring_wb_read32(ring->rptr_cpu_addr); } static u64 amdgpu_cper_ring_get_wptr(struct amdgpu_ring *ring) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c index 80fbbcbe2..b0c44d8a2 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c @@ -320,7 +320,7 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring, amdgpu_ring_get_cpu_addr(ring, ring->cond_exe_offs); /* always set cond_exec_polling to CONTINUE */ - *ring->cond_exe_cpu_addr = 1; + amdgpu_ring_wb_write32(ring->cond_exe_cpu_addr, 1); if (ring->funcs->type != AMDGPU_RING_TYPE_CPER) { r = amdgpu_fence_driver_start_ring(ring, irq_src, irq_type); @@ -341,7 +341,8 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring, ring->ring_size = roundup_pow_of_two(max_dw * 4); ring->count_dw = (ring->ring_size - 4) >> 2; /* ring buffer is empty now */ - ring->wptr = *ring->rptr_cpu_addr = 0; + ring->wptr = 0; + amdgpu_ring_wb_write32(ring->rptr_cpu_addr, 0); } ring->buf_mask = (ring->ring_size / 4) - 1; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h index cdc855285..82c6bc782 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h @@ -503,7 +503,7 @@ bool amdgpu_ring_soft_recovery(struct amdgpu_ring *ring, unsigned int vmid, static inline void amdgpu_ring_set_preempt_cond_exec(struct amdgpu_ring *ring, bool cond_exec) { - *ring->cond_exe_cpu_addr = cond_exec; + amdgpu_ring_wb_write32(ring->cond_exe_cpu_addr, cond_exec); } static inline void amdgpu_ring_clear_ring(struct amdgpu_ring *ring) diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c index 120da838a..e68b1a03f 100644 --- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c +++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c @@ -161,7 +161,7 @@ static uint64_t cik_sdma_ring_get_rptr(struct amdgpu_ring *ring) { u32 rptr; - rptr = *ring->rptr_cpu_addr; + rptr = amdgpu_ring_wb_read32(ring->rptr_cpu_addr); return (rptr & 0x3fffc) >> 2; } diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c index ac90d8e9d..40a99ca6b 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c @@ -2188,7 +2188,7 @@ static int gfx_v6_0_cp_gfx_resume(struct amdgpu_device *adev) static u64 gfx_v6_0_ring_get_rptr(struct amdgpu_ring *ring) { - return *ring->rptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->rptr_cpu_addr); } static u64 gfx_v6_0_ring_get_wptr(struct amdgpu_ring *ring) diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c index 65b8497ad..1a335691b 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c @@ -2586,7 +2586,7 @@ static int gfx_v7_0_cp_gfx_resume(struct amdgpu_device *adev) static u64 gfx_v7_0_ring_get_rptr(struct amdgpu_ring *ring) { - return *ring->rptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->rptr_cpu_addr); } static u64 gfx_v7_0_ring_get_wptr_gfx(struct amdgpu_ring *ring) @@ -2607,7 +2607,7 @@ static void gfx_v7_0_ring_set_wptr_gfx(struct amdgpu_ring *ring) static u64 gfx_v7_0_ring_get_wptr_compute(struct amdgpu_ring *ring) { /* XXX check if swapping is necessary on BE */ - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); } static void gfx_v7_0_ring_set_wptr_compute(struct amdgpu_ring *ring) @@ -2615,7 +2615,7 @@ static void gfx_v7_0_ring_set_wptr_compute(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; /* XXX check if swapping is necessary on BE */ - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c index 130196859..64511ee05 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c @@ -6009,7 +6009,7 @@ static int gfx_v8_0_set_clockgating_state(struct amdgpu_ip_block *ip_block, static u64 gfx_v8_0_ring_get_rptr(struct amdgpu_ring *ring) { - return *ring->rptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->rptr_cpu_addr); } static u64 gfx_v8_0_ring_get_wptr_gfx(struct amdgpu_ring *ring) @@ -6018,7 +6018,7 @@ static u64 gfx_v8_0_ring_get_wptr_gfx(struct amdgpu_ring *ring) if (ring->use_doorbell) /* XXX check if swapping is necessary on BE */ - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32(mmCP_RB0_WPTR); } @@ -6029,7 +6029,7 @@ static void gfx_v8_0_ring_set_wptr_gfx(struct amdgpu_ring *ring) if (ring->use_doorbell) { /* XXX check if swapping is necessary on BE */ - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32(mmCP_RB0_WPTR, lower_32_bits(ring->wptr)); @@ -6220,7 +6220,7 @@ static void gfx_v8_0_ring_emit_vm_flush(struct amdgpu_ring *ring, static u64 gfx_v8_0_ring_get_wptr_compute(struct amdgpu_ring *ring) { - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); } static void gfx_v8_0_ring_set_wptr_compute(struct amdgpu_ring *ring) @@ -6228,7 +6228,7 @@ static void gfx_v8_0_ring_set_wptr_compute(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; /* XXX check if swapping is necessary on BE */ - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c index cffb1e6ba..8f1a2f3ff 100644 --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.c @@ -430,7 +430,7 @@ static uint64_t jpeg_v2_0_dec_ring_get_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(JPEG, 0, mmUVD_JRBC_RB_WPTR); } @@ -447,7 +447,7 @@ static void jpeg_v2_0_dec_ring_set_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(JPEG, 0, mmUVD_JRBC_RB_WPTR, lower_32_bits(ring->wptr)); diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c index 5208312e7..d34670dc9 100644 --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.c @@ -458,7 +458,7 @@ static uint64_t jpeg_v2_5_dec_ring_get_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(JPEG, ring->me, mmUVD_JRBC_RB_WPTR); } @@ -475,7 +475,7 @@ static void jpeg_v2_5_dec_ring_set_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(JPEG, ring->me, mmUVD_JRBC_RB_WPTR, lower_32_bits(ring->wptr)); diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c b/drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c index d0445df39..77a32e2a4 100644 --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c @@ -449,7 +449,7 @@ static uint64_t jpeg_v3_0_dec_ring_get_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(JPEG, 0, mmUVD_JRBC_RB_WPTR); } @@ -466,7 +466,7 @@ static void jpeg_v3_0_dec_ring_set_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(JPEG, 0, mmUVD_JRBC_RB_WPTR, lower_32_bits(ring->wptr)); diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c index 6fd4238a8..4142341bb 100644 --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.c @@ -609,7 +609,7 @@ static uint64_t jpeg_v4_0_dec_ring_get_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(JPEG, 0, regUVD_JRBC_RB_WPTR); } @@ -626,7 +626,7 @@ static void jpeg_v4_0_dec_ring_set_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(JPEG, 0, regUVD_JRBC_RB_WPTR, lower_32_bits(ring->wptr)); diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c index 0c746580d..1f5a9ddd3 100644 --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.c @@ -693,7 +693,7 @@ static uint64_t jpeg_v4_0_3_dec_ring_get_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) - return adev->wb.wb[ring->wptr_offs]; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); return RREG32_SOC15_OFFSET(JPEG, GET_INST(JPEG, ring->me), regUVD_JRBC0_UVD_JRBC_RB_WPTR, jpeg_v4_0_3_core_reg_offset(ring->pipe)); @@ -718,7 +718,7 @@ static void jpeg_v4_0_3_dec_ring_set_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) { - adev->wb.wb[ring->wptr_offs] = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15_OFFSET(JPEG, GET_INST(JPEG, ring->me), regUVD_JRBC0_UVD_JRBC_RB_WPTR, diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c index a43582b9c..ffcf70969 100644 --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c @@ -625,7 +625,7 @@ static uint64_t jpeg_v4_0_5_dec_ring_get_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(JPEG, ring->me, regUVD_JRBC_RB_WPTR); } @@ -642,7 +642,7 @@ static void jpeg_v4_0_5_dec_ring_set_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(JPEG, ring->me, regUVD_JRBC_RB_WPTR, lower_32_bits(ring->wptr)); @@ -870,4 +870,3 @@ const struct amdgpu_ip_block_version jpeg_v4_0_5_ip_block = { .rev = 5, .funcs = &jpeg_v4_0_5_ip_funcs, }; - diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_0.c b/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_0.c index 72a4b2d06..3b7c1144b 100644 --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_0.c +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_0.c @@ -535,7 +535,7 @@ static uint64_t jpeg_v5_0_0_dec_ring_get_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(JPEG, 0, regUVD_JRBC_RB_WPTR); } @@ -552,7 +552,7 @@ static void jpeg_v5_0_0_dec_ring_set_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(JPEG, 0, regUVD_JRBC_RB_WPTR, lower_32_bits(ring->wptr)); diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_1.c b/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_1.c index 250316704..d0e9e792a 100644 --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_1.c +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_1.c @@ -626,7 +626,7 @@ static uint64_t jpeg_v5_0_1_dec_ring_get_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) - return adev->wb.wb[ring->wptr_offs]; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); return RREG32_SOC15_OFFSET(JPEG, GET_INST(JPEG, ring->me), regUVD_JRBC_RB_WPTR, ring->pipe ? jpeg_v5_0_1_core_reg_offset(ring->pipe) : 0); @@ -644,7 +644,7 @@ static void jpeg_v5_0_1_dec_ring_set_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) { - adev->wb.wb[ring->wptr_offs] = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15_OFFSET(JPEG, GET_INST(JPEG, ring->me), diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_2.c b/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_2.c index 7a4ecea6b..6286fdb29 100644 --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_2.c +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v5_0_2.c @@ -469,7 +469,7 @@ static uint64_t jpeg_v5_0_2_dec_ring_get_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) - return adev->wb.wb[ring->wptr_offs]; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); return RREG32_SOC15_OFFSET(JPEG, GET_INST(JPEG, ring->me), regUVD_JRBC_RB_WPTR, ring->pipe ? jpeg_v5_0_2_core_reg_offset(ring->pipe) : 0); @@ -487,7 +487,7 @@ static void jpeg_v5_0_2_dec_ring_set_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) { - adev->wb.wb[ring->wptr_offs] = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15_OFFSET(JPEG, GET_INST(JPEG, ring->me), diff --git a/drivers/gpu/drm/amd/amdgpu/jpeg_v5_3_0.c b/drivers/gpu/drm/amd/amdgpu/jpeg_v5_3_0.c index e7546816b..a1671e9b9 100644 --- a/drivers/gpu/drm/amd/amdgpu/jpeg_v5_3_0.c +++ b/drivers/gpu/drm/amd/amdgpu/jpeg_v5_3_0.c @@ -518,7 +518,7 @@ static uint64_t jpeg_v5_3_0_dec_ring_get_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(JPEG, 0, regUVD_JRBC0_UVD_JRBC_RB_WPTR); } @@ -535,7 +535,7 @@ static void jpeg_v5_3_0_dec_ring_set_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(JPEG, 0, regUVD_JRBC0_UVD_JRBC_RB_WPTR, lower_32_bits(ring->wptr)); diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c index 93ec52c1f..22cb3c262 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c @@ -188,7 +188,7 @@ static int sdma_v2_4_init_microcode(struct amdgpu_device *adev) static uint64_t sdma_v2_4_ring_get_rptr(struct amdgpu_ring *ring) { /* XXX check if swapping is necessary on BE */ - return *ring->rptr_cpu_addr >> 2; + return amdgpu_ring_wb_read32(ring->rptr_cpu_addr) >> 2; } /** diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c index 3fde9be74..321fc87d7 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c @@ -346,7 +346,7 @@ static int sdma_v3_0_init_microcode(struct amdgpu_device *adev) static uint64_t sdma_v3_0_ring_get_rptr(struct amdgpu_ring *ring) { /* XXX check if swapping is necessary on BE */ - return *ring->rptr_cpu_addr >> 2; + return amdgpu_ring_wb_read32(ring->rptr_cpu_addr) >> 2; } /** @@ -363,7 +363,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->wptr_cpu_addr >> 2; + wptr = amdgpu_ring_wb_read32(ring->wptr_cpu_addr) >> 2; } else { wptr = RREG32(mmSDMA0_GFX_RB_WPTR + sdma_offsets[ring->me]) >> 2; } @@ -383,14 +383,11 @@ 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 *)ring->wptr_cpu_addr; /* XXX check if swapping is necessary on BE */ - WRITE_ONCE(*wb, ring->wptr << 2); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, ring->wptr << 2); WDOORBELL32(ring->doorbell_index, ring->wptr << 2); } else if (ring->use_pollmem) { - u32 *wb = (u32 *)ring->wptr_cpu_addr; - - WRITE_ONCE(*wb, ring->wptr << 2); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, ring->wptr << 2); } else { WREG32(mmSDMA0_GFX_RB_WPTR + sdma_offsets[ring->me], ring->wptr << 2); } diff --git a/drivers/gpu/drm/amd/amdgpu/si_dma.c b/drivers/gpu/drm/amd/amdgpu/si_dma.c index 549708075..a4ac288df 100644 --- a/drivers/gpu/drm/amd/amdgpu/si_dma.c +++ b/drivers/gpu/drm/amd/amdgpu/si_dma.c @@ -48,7 +48,7 @@ static void si_dma_set_irq_funcs(struct amdgpu_device *adev); */ static uint64_t si_dma_ring_get_rptr(struct amdgpu_ring *ring) { - return *ring->rptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->rptr_cpu_addr); } /** diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c index df2c83348..6979f6816 100644 --- a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c +++ b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c @@ -118,7 +118,7 @@ static uint64_t uvd_v7_0_enc_ring_get_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); if (ring == &adev->uvd.inst[ring->me].ring_enc[0]) return RREG32_SOC15(UVD, ring->me, mmUVD_RB_WPTR); @@ -153,7 +153,7 @@ static void uvd_v7_0_enc_ring_set_wptr(struct amdgpu_ring *ring) if (ring->use_doorbell) { /* XXX check if swapping is necessary on BE */ - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); return; } @@ -760,7 +760,7 @@ static int uvd_v7_0_mmsch_start(struct amdgpu_device *adev, if (adev->uvd.harvest_config & (1 << i)) continue; WDOORBELL32(adev->uvd.inst[i].ring_enc[0].doorbell_index, 0); - *adev->uvd.inst[i].ring_enc[0].wptr_cpu_addr = 0; + amdgpu_ring_wb_write32(adev->uvd.inst[i].ring_enc[0].wptr_cpu_addr, 0); adev->uvd.inst[i].ring_enc[0].wptr = 0; adev->uvd.inst[i].ring_enc[0].wptr_old = 0; } diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c b/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c index ee445d8ab..afb128312 100644 --- a/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c +++ b/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c @@ -83,7 +83,7 @@ static uint64_t vce_v4_0_ring_get_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); if (ring->me == 0) return RREG32(SOC15_REG_OFFSET(VCE, 0, mmVCE_RB_WPTR)); @@ -106,7 +106,7 @@ static void vce_v4_0_ring_set_wptr(struct amdgpu_ring *ring) if (ring->use_doorbell) { /* XXX check if swapping is necessary on BE */ - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); return; } @@ -177,7 +177,7 @@ static int vce_v4_0_mmsch_start(struct amdgpu_device *adev, WREG32(SOC15_REG_OFFSET(VCE, 0, mmVCE_MMSCH_VF_MAILBOX_RESP), 0); WDOORBELL32(adev->vce.ring[0].doorbell_index, 0); - *adev->vce.ring[0].wptr_cpu_addr = 0; + amdgpu_ring_wb_write32(adev->vce.ring[0].wptr_cpu_addr, 0); adev->vce.ring[0].wptr = 0; adev->vce.ring[0].wptr_old = 0; diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c index 0442bfcfd..830c02af9 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c @@ -1441,7 +1441,7 @@ static uint64_t vcn_v2_0_dec_ring_get_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(UVD, 0, mmUVD_RBC_RB_WPTR); } @@ -1462,7 +1462,7 @@ static void vcn_v2_0_dec_ring_set_wptr(struct amdgpu_ring *ring) lower_32_bits(ring->wptr) | 0x80000000); if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(UVD, 0, mmUVD_RBC_RB_WPTR, lower_32_bits(ring->wptr)); @@ -1670,12 +1670,12 @@ static uint64_t vcn_v2_0_enc_ring_get_wptr(struct amdgpu_ring *ring) if (ring == &adev->vcn.inst->ring_enc[0]) { if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(UVD, 0, mmUVD_RB_WPTR); } else { if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(UVD, 0, mmUVD_RB_WPTR2); } @@ -1694,14 +1694,14 @@ static void vcn_v2_0_enc_ring_set_wptr(struct amdgpu_ring *ring) if (ring == &adev->vcn.inst->ring_enc[0]) { if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(UVD, 0, mmUVD_RB_WPTR, lower_32_bits(ring->wptr)); } } else { if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(UVD, 0, mmUVD_RB_WPTR2, lower_32_bits(ring->wptr)); diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c b/drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c index 8b8184fe6..f55d488dc 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c @@ -1751,7 +1751,7 @@ static uint64_t vcn_v2_5_dec_ring_get_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(VCN, ring->me, mmUVD_RBC_RB_WPTR); } @@ -1768,7 +1768,7 @@ static void vcn_v2_5_dec_ring_set_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(VCN, ring->me, mmUVD_RBC_RB_WPTR, lower_32_bits(ring->wptr)); @@ -1837,12 +1837,12 @@ static uint64_t vcn_v2_5_enc_ring_get_wptr(struct amdgpu_ring *ring) if (ring == &adev->vcn.inst[ring->me].ring_enc[0]) { if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(VCN, ring->me, mmUVD_RB_WPTR); } else { if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(VCN, ring->me, mmUVD_RB_WPTR2); } @@ -1861,14 +1861,14 @@ static void vcn_v2_5_enc_ring_set_wptr(struct amdgpu_ring *ring) if (ring == &adev->vcn.inst[ring->me].ring_enc[0]) { if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(VCN, ring->me, mmUVD_RB_WPTR, lower_32_bits(ring->wptr)); } } else { if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(VCN, ring->me, mmUVD_RB_WPTR2, lower_32_bits(ring->wptr)); diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c index 81bba3ec2..1c589b455 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c @@ -1819,7 +1819,7 @@ static uint64_t vcn_v3_0_dec_ring_get_wptr(struct amdgpu_ring *ring) struct amdgpu_device *adev = ring->adev; if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(VCN, ring->me, mmUVD_RBC_RB_WPTR); } @@ -1845,7 +1845,7 @@ static void vcn_v3_0_dec_ring_set_wptr(struct amdgpu_ring *ring) } if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(VCN, ring->me, mmUVD_RBC_RB_WPTR, lower_32_bits(ring->wptr)); @@ -2099,12 +2099,12 @@ static uint64_t vcn_v3_0_enc_ring_get_wptr(struct amdgpu_ring *ring) if (ring == &adev->vcn.inst[ring->me].ring_enc[0]) { if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(VCN, ring->me, mmUVD_RB_WPTR); } else { if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(VCN, ring->me, mmUVD_RB_WPTR2); } @@ -2123,14 +2123,14 @@ static void vcn_v3_0_enc_ring_set_wptr(struct amdgpu_ring *ring) if (ring == &adev->vcn.inst[ring->me].ring_enc[0]) { if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(VCN, ring->me, mmUVD_RB_WPTR, lower_32_bits(ring->wptr)); } } else { if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(VCN, ring->me, mmUVD_RB_WPTR2, lower_32_bits(ring->wptr)); diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c index ff7269baf..ec4b2372a 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c @@ -1770,7 +1770,7 @@ static uint64_t vcn_v4_0_unified_ring_get_wptr(struct amdgpu_ring *ring) DRM_ERROR("wrong ring id is identified in %s", __func__); if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(VCN, ring->me, regUVD_RB_WPTR); } @@ -1790,7 +1790,7 @@ static void vcn_v4_0_unified_ring_set_wptr(struct amdgpu_ring *ring) DRM_ERROR("wrong ring id is identified in %s", __func__); if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(VCN, ring->me, regUVD_RB_WPTR, lower_32_bits(ring->wptr)); diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c index 7f001c32e..ce33ba358 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c @@ -1580,7 +1580,7 @@ static uint64_t vcn_v4_0_3_unified_ring_get_wptr(struct amdgpu_ring *ring) DRM_ERROR("wrong ring id is identified in %s", __func__); if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(VCN, GET_INST(VCN, ring->me), regUVD_RB_WPTR); @@ -1646,7 +1646,7 @@ static void vcn_v4_0_3_unified_ring_set_wptr(struct amdgpu_ring *ring) DRM_ERROR("wrong ring id is identified in %s", __func__); if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(VCN, GET_INST(VCN, ring->me), regUVD_RB_WPTR, diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c index 1571cc5a1..41d4b5ac6 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c @@ -1434,7 +1434,7 @@ static uint64_t vcn_v4_0_5_unified_ring_get_wptr(struct amdgpu_ring *ring) DRM_ERROR("wrong ring id is identified in %s", __func__); if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(VCN, ring->me, regUVD_RB_WPTR); } @@ -1454,7 +1454,7 @@ static void vcn_v4_0_5_unified_ring_set_wptr(struct amdgpu_ring *ring) DRM_ERROR("wrong ring id is identified in %s", __func__); if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(VCN, ring->me, regUVD_RB_WPTR, lower_32_bits(ring->wptr)); diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c index d5f49fa33..f8c3cd250 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c @@ -1158,7 +1158,7 @@ static uint64_t vcn_v5_0_0_unified_ring_get_wptr(struct amdgpu_ring *ring) DRM_ERROR("wrong ring id is identified in %s", __func__); if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(VCN, ring->me, regUVD_RB_WPTR); } @@ -1178,7 +1178,7 @@ static void vcn_v5_0_0_unified_ring_set_wptr(struct amdgpu_ring *ring) DRM_ERROR("wrong ring id is identified in %s", __func__); if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(VCN, ring->me, regUVD_RB_WPTR, lower_32_bits(ring->wptr)); diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_1.c b/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_1.c index d3db04943..33e63ca12 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_1.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_1.c @@ -1273,7 +1273,7 @@ static uint64_t vcn_v5_0_1_unified_ring_get_wptr(struct amdgpu_ring *ring) DRM_ERROR("wrong ring id is identified in %s", __func__); if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(VCN, GET_INST(VCN, ring->me), regUVD_RB_WPTR); } @@ -1293,7 +1293,7 @@ static void vcn_v5_0_1_unified_ring_set_wptr(struct amdgpu_ring *ring) DRM_ERROR("wrong ring id is identified in %s", __func__); if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(VCN, GET_INST(VCN, ring->me), regUVD_RB_WPTR, diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_2.c b/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_2.c index bbc172db9..6b943a27e 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_2.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_2.c @@ -962,7 +962,7 @@ static uint64_t vcn_v5_0_2_unified_ring_get_wptr(struct amdgpu_ring *ring) DRM_ERROR("wrong ring id is identified in %s", __func__); if (ring->use_doorbell) - return *ring->wptr_cpu_addr; + return amdgpu_ring_wb_read32(ring->wptr_cpu_addr); else return RREG32_SOC15(VCN, GET_INST(VCN, ring->me), regUVD_RB_WPTR); } @@ -982,7 +982,7 @@ static void vcn_v5_0_2_unified_ring_set_wptr(struct amdgpu_ring *ring) DRM_ERROR("wrong ring id is identified in %s", __func__); if (ring->use_doorbell) { - *ring->wptr_cpu_addr = lower_32_bits(ring->wptr); + amdgpu_ring_wb_write32(ring->wptr_cpu_addr, lower_32_bits(ring->wptr)); WDOORBELL32(ring->doorbell_index, lower_32_bits(ring->wptr)); } else { WREG32_SOC15(VCN, GET_INST(VCN, ring->me), regUVD_RB_WPTR, -- 2.34.1
