* [PATCH] drm/amdgpu: remove is_mes_queue flag
@ 2025-03-12 17:56 Alex Deucher
2025-03-18 13:15 ` Alex Deucher
0 siblings, 1 reply; 3+ messages in thread
From: Alex Deucher @ 2025-03-12 17:56 UTC (permalink / raw)
To: amd-gfx; +Cc: Alex Deucher
This was leftover from MES bring up when we had MES
user queues in the kernel. It's no longer used so
remove it.
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 4 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 112 ++++++---------
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 14 --
drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c | 22 +--
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 2 +-
drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 84 +++---------
drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c | 143 ++++---------------
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 67 ++-------
drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c | 4 -
drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c | 4 -
drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c | 4 -
drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c | 166 +++++++----------------
drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c | 83 ++++--------
drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c | 83 ++++--------
drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c | 164 +++++++---------------
15 files changed, 259 insertions(+), 697 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
index eac96a3d8c6c3..6efa0c5717dcf 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
@@ -163,12 +163,12 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned int num_ibs,
init_shadow = false;
}
- if (!ring->sched.ready && !ring->is_mes_queue) {
+ if (!ring->sched.ready) {
dev_err(adev->dev, "couldn't schedule ib on ring <%s>\n", ring->name);
return -EINVAL;
}
- if (vm && !job->vmid && !ring->is_mes_queue) {
+ if (vm && !job->vmid) {
dev_err(adev->dev, "VM IB without ID\n");
return -EINVAL;
}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
index d55c8b7fdb596..ba8f2785865af 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
@@ -187,14 +187,10 @@ void amdgpu_ring_undo(struct amdgpu_ring *ring)
}
#define amdgpu_ring_get_gpu_addr(ring, offset) \
- (ring->is_mes_queue ? \
- (ring->mes_ctx->meta_data_gpu_addr + offset) : \
- (ring->adev->wb.gpu_addr + offset * 4))
+ (ring->adev->wb.gpu_addr + offset * 4)
#define amdgpu_ring_get_cpu_addr(ring, offset) \
- (ring->is_mes_queue ? \
- (void *)((uint8_t *)(ring->mes_ctx->meta_data_ptr) + offset) : \
- (&ring->adev->wb.wb[offset]))
+ (&ring->adev->wb.wb[offset])
/**
* amdgpu_ring_init - init driver ring struct.
@@ -243,57 +239,42 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
ring->sched_score = sched_score;
ring->vmid_wait = dma_fence_get_stub();
- if (!ring->is_mes_queue) {
- ring->idx = adev->num_rings++;
- adev->rings[ring->idx] = ring;
- }
+ ring->idx = adev->num_rings++;
+ adev->rings[ring->idx] = ring;
r = amdgpu_fence_driver_init_ring(ring);
if (r)
return r;
}
- if (ring->is_mes_queue) {
- ring->rptr_offs = amdgpu_mes_ctx_get_offs(ring,
- AMDGPU_MES_CTX_RPTR_OFFS);
- ring->wptr_offs = amdgpu_mes_ctx_get_offs(ring,
- AMDGPU_MES_CTX_WPTR_OFFS);
- ring->fence_offs = amdgpu_mes_ctx_get_offs(ring,
- AMDGPU_MES_CTX_FENCE_OFFS);
- ring->trail_fence_offs = amdgpu_mes_ctx_get_offs(ring,
- AMDGPU_MES_CTX_TRAIL_FENCE_OFFS);
- ring->cond_exe_offs = amdgpu_mes_ctx_get_offs(ring,
- AMDGPU_MES_CTX_COND_EXE_OFFS);
- } else {
- r = amdgpu_device_wb_get(adev, &ring->rptr_offs);
- if (r) {
- dev_err(adev->dev, "(%d) ring rptr_offs wb alloc failed\n", r);
- return r;
- }
+ r = amdgpu_device_wb_get(adev, &ring->rptr_offs);
+ if (r) {
+ dev_err(adev->dev, "(%d) ring rptr_offs wb alloc failed\n", r);
+ return r;
+ }
- r = amdgpu_device_wb_get(adev, &ring->wptr_offs);
- if (r) {
- dev_err(adev->dev, "(%d) ring wptr_offs wb alloc failed\n", r);
- return r;
- }
+ r = amdgpu_device_wb_get(adev, &ring->wptr_offs);
+ if (r) {
+ dev_err(adev->dev, "(%d) ring wptr_offs wb alloc failed\n", r);
+ return r;
+ }
- r = amdgpu_device_wb_get(adev, &ring->fence_offs);
- if (r) {
- dev_err(adev->dev, "(%d) ring fence_offs wb alloc failed\n", r);
- return r;
- }
+ r = amdgpu_device_wb_get(adev, &ring->fence_offs);
+ if (r) {
+ dev_err(adev->dev, "(%d) ring fence_offs wb alloc failed\n", r);
+ return r;
+ }
- r = amdgpu_device_wb_get(adev, &ring->trail_fence_offs);
- if (r) {
- dev_err(adev->dev, "(%d) ring trail_fence_offs wb alloc failed\n", r);
- return r;
- }
+ r = amdgpu_device_wb_get(adev, &ring->trail_fence_offs);
+ if (r) {
+ dev_err(adev->dev, "(%d) ring trail_fence_offs wb alloc failed\n", r);
+ return r;
+ }
- 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;
- }
+ 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->fence_gpu_addr =
@@ -353,18 +334,7 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
ring->cached_rptr = 0;
/* Allocate ring buffer */
- if (ring->is_mes_queue) {
- int offset = 0;
-
- BUG_ON(ring->ring_size > PAGE_SIZE*4);
-
- offset = amdgpu_mes_ctx_get_offs(ring,
- AMDGPU_MES_CTX_RING_OFFS);
- ring->gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
- ring->ring = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
- amdgpu_ring_clear_ring(ring);
-
- } else if (ring->ring_obj == NULL) {
+ if (ring->ring_obj == NULL) {
r = amdgpu_bo_create_kernel(adev, ring->ring_size + ring->funcs->extra_dw, PAGE_SIZE,
AMDGPU_GEM_DOMAIN_GTT,
&ring->ring_obj,
@@ -401,32 +371,26 @@ void amdgpu_ring_fini(struct amdgpu_ring *ring)
{
/* Not to finish a ring which is not initialized */
- if (!(ring->adev) ||
- (!ring->is_mes_queue && !(ring->adev->rings[ring->idx])))
+ if (!(ring->adev) || !(ring->adev->rings[ring->idx]))
return;
ring->sched.ready = false;
- if (!ring->is_mes_queue) {
- amdgpu_device_wb_free(ring->adev, ring->rptr_offs);
- amdgpu_device_wb_free(ring->adev, ring->wptr_offs);
+ amdgpu_device_wb_free(ring->adev, ring->rptr_offs);
+ amdgpu_device_wb_free(ring->adev, ring->wptr_offs);
- amdgpu_device_wb_free(ring->adev, ring->cond_exe_offs);
- amdgpu_device_wb_free(ring->adev, ring->fence_offs);
+ amdgpu_device_wb_free(ring->adev, ring->cond_exe_offs);
+ amdgpu_device_wb_free(ring->adev, ring->fence_offs);
- amdgpu_bo_free_kernel(&ring->ring_obj,
- &ring->gpu_addr,
- (void **)&ring->ring);
- } else {
- kfree(ring->fence_drv.fences);
- }
+ amdgpu_bo_free_kernel(&ring->ring_obj,
+ &ring->gpu_addr,
+ (void **)&ring->ring);
dma_fence_put(ring->vmid_wait);
ring->vmid_wait = NULL;
ring->me = 0;
- if (!ring->is_mes_queue)
- ring->adev->rings[ring->idx] = NULL;
+ ring->adev->rings[ring->idx] = NULL;
}
/**
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
index d93d3047553b3..bea3747f9550b 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
@@ -306,11 +306,6 @@ struct amdgpu_ring {
unsigned num_hw_submission;
atomic_t *sched_score;
- /* used for mes */
- bool is_mes_queue;
- uint32_t hw_queue_id;
- struct amdgpu_mes_ctx_data *mes_ctx;
-
bool is_sw_ring;
unsigned int entry_index;
/* store the cached rptr to restore after reset */
@@ -440,15 +435,6 @@ static inline void amdgpu_ring_patch_cond_exec(struct amdgpu_ring *ring,
ring->ring[offset] = cur - offset;
}
-#define amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset) \
- (ring->is_mes_queue && ring->mes_ctx ? \
- (ring->mes_ctx->meta_data_gpu_addr + offset) : 0)
-
-#define amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset) \
- (ring->is_mes_queue && ring->mes_ctx ? \
- (void *)((uint8_t *)(ring->mes_ctx->meta_data_ptr) + offset) : \
- NULL)
-
int amdgpu_ring_test_helper(struct amdgpu_ring *ring);
void amdgpu_debugfs_ring_init(struct amdgpu_device *adev,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
index 3a4cef8960185..03c4c012a1508 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
@@ -76,22 +76,14 @@ uint64_t amdgpu_sdma_get_csa_mc_addr(struct amdgpu_ring *ring,
if (amdgpu_sriov_vf(adev) || vmid == 0 || !adev->gfx.mcbp)
return 0;
- if (ring->is_mes_queue) {
- uint32_t offset = 0;
+ r = amdgpu_sdma_get_index_from_ring(ring, &index);
- offset = offsetof(struct amdgpu_mes_ctx_meta_data,
- sdma[ring->idx].sdma_meta_data);
- csa_mc_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
- } else {
- r = amdgpu_sdma_get_index_from_ring(ring, &index);
-
- if (r || index > 31)
- csa_mc_addr = 0;
- else
- csa_mc_addr = amdgpu_csa_vaddr(adev) +
- AMDGPU_CSA_SDMA_OFFSET +
- index * AMDGPU_CSA_SDMA_SIZE;
- }
+ if (r || index > 31)
+ csa_mc_addr = 0;
+ else
+ csa_mc_addr = amdgpu_csa_vaddr(adev) +
+ AMDGPU_CSA_SDMA_OFFSET +
+ index * AMDGPU_CSA_SDMA_SIZE;
return csa_mc_addr;
}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index ef4fe2df8398c..ea18484d1d7a7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -702,7 +702,7 @@ int amdgpu_vm_flush(struct amdgpu_ring *ring, struct amdgpu_job *job,
if (spm_update_needed && adev->gfx.rlc.funcs->update_spm_vmid)
adev->gfx.rlc.funcs->update_spm_vmid(adev, ring, job->vmid);
- if (!ring->is_mes_queue && ring->funcs->emit_gds_switch &&
+ if (ring->funcs->emit_gds_switch &&
gds_switch_needed) {
amdgpu_ring_emit_gds_switch(ring, job->vmid, job->gds_base,
job->gds_size, job->gws_base,
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
index 2cf663d25881d..719c4aa90a0e0 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
@@ -582,33 +582,18 @@ static int gfx_v11_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
memset(&ib, 0, sizeof(ib));
- if (ring->is_mes_queue) {
- uint32_t padding, offset;
-
- offset = amdgpu_mes_ctx_get_offs(ring, AMDGPU_MES_CTX_IB_OFFS);
- padding = amdgpu_mes_ctx_get_offs(ring,
- AMDGPU_MES_CTX_PADDING_OFFS);
-
- ib.gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
- ib.ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
-
- gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, padding);
- cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, padding);
- *cpu_ptr = cpu_to_le32(0xCAFEDEAD);
- } else {
- r = amdgpu_device_wb_get(adev, &index);
- if (r)
- return r;
+ r = amdgpu_device_wb_get(adev, &index);
+ if (r)
+ return r;
- gpu_addr = adev->wb.gpu_addr + (index * 4);
- adev->wb.wb[index] = cpu_to_le32(0xCAFEDEAD);
- cpu_ptr = &adev->wb.wb[index];
+ gpu_addr = adev->wb.gpu_addr + (index * 4);
+ adev->wb.wb[index] = cpu_to_le32(0xCAFEDEAD);
+ cpu_ptr = &adev->wb.wb[index];
- r = amdgpu_ib_get(adev, NULL, 20, AMDGPU_IB_POOL_DIRECT, &ib);
- if (r) {
- DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
- goto err1;
- }
+ r = amdgpu_ib_get(adev, NULL, 20, AMDGPU_IB_POOL_DIRECT, &ib);
+ if (r) {
+ DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
+ goto err1;
}
ib.ptr[0] = PACKET3(PACKET3_WRITE_DATA, 3);
@@ -635,12 +620,10 @@ static int gfx_v11_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
else
r = -EINVAL;
err2:
- if (!ring->is_mes_queue)
- amdgpu_ib_free(&ib, NULL);
+ amdgpu_ib_free(&ib, NULL);
dma_fence_put(f);
err1:
- if (!ring->is_mes_queue)
- amdgpu_device_wb_free(adev, index);
+ amdgpu_device_wb_free(adev, index);
return r;
}
@@ -5760,10 +5743,6 @@ static void gfx_v11_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
(!amdgpu_sriov_vf(ring->adev) && flags & AMDGPU_IB_PREEMPTED) ? true : false);
}
- if (ring->is_mes_queue)
- /* inherit vmid from mqd */
- control |= 0x400000;
-
amdgpu_ring_write(ring, header);
BUG_ON(ib->gpu_addr & 0x3); /* Dword align */
amdgpu_ring_write(ring,
@@ -5783,10 +5762,6 @@ static void gfx_v11_0_ring_emit_ib_compute(struct amdgpu_ring *ring,
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
u32 control = INDIRECT_BUFFER_VALID | ib->length_dw | (vmid << 24);
- if (ring->is_mes_queue)
- /* inherit vmid from mqd */
- control |= 0x40000000;
-
/* Currently, there is a high possibility to get wave ID mismatch
* between ME and GDS, leading to a hw deadlock, because ME generates
* different wave IDs than the GDS expects. This situation happens
@@ -5844,8 +5819,7 @@ static void gfx_v11_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr,
amdgpu_ring_write(ring, upper_32_bits(addr));
amdgpu_ring_write(ring, lower_32_bits(seq));
amdgpu_ring_write(ring, upper_32_bits(seq));
- amdgpu_ring_write(ring, ring->is_mes_queue ?
- (ring->hw_queue_id | AMDGPU_FENCE_MES_QUEUE_FLAG) : 0);
+ amdgpu_ring_write(ring, 0);
}
static void gfx_v11_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
@@ -5873,10 +5847,7 @@ static void gfx_v11_0_ring_invalidate_tlbs(struct amdgpu_ring *ring,
static void gfx_v11_0_ring_emit_vm_flush(struct amdgpu_ring *ring,
unsigned vmid, uint64_t pd_addr)
{
- if (ring->is_mes_queue)
- gfx_v11_0_ring_invalidate_tlbs(ring, 0, 0, false, 0);
- else
- amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr);
+ amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr);
/* compute doesn't have PFP */
if (ring->funcs->type == AMDGPU_RING_TYPE_GFX) {
@@ -6105,28 +6076,13 @@ static void gfx_v11_0_ring_emit_de_meta(struct amdgpu_ring *ring, bool resume)
void *de_payload_cpu_addr;
int cnt;
- if (ring->is_mes_queue) {
- offset = offsetof(struct amdgpu_mes_ctx_meta_data,
- gfx[0].gfx_meta_data) +
- offsetof(struct v10_gfx_meta_data, de_payload);
- de_payload_gpu_addr =
- amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
- de_payload_cpu_addr =
- amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
-
- offset = offsetof(struct amdgpu_mes_ctx_meta_data,
- gfx[0].gds_backup) +
- offsetof(struct v10_gfx_meta_data, de_payload);
- gds_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
- } else {
- offset = offsetof(struct v10_gfx_meta_data, de_payload);
- de_payload_gpu_addr = amdgpu_csa_vaddr(ring->adev) + offset;
- de_payload_cpu_addr = adev->virt.csa_cpu_addr + offset;
+ offset = offsetof(struct v10_gfx_meta_data, de_payload);
+ de_payload_gpu_addr = amdgpu_csa_vaddr(ring->adev) + offset;
+ de_payload_cpu_addr = adev->virt.csa_cpu_addr + offset;
- gds_addr = ALIGN(amdgpu_csa_vaddr(ring->adev) +
- AMDGPU_CSA_SIZE - adev->gds.gds_size,
- PAGE_SIZE);
- }
+ gds_addr = ALIGN(amdgpu_csa_vaddr(ring->adev) +
+ AMDGPU_CSA_SIZE - adev->gds.gds_size,
+ PAGE_SIZE);
de_payload.gds_backup_addrlo = lower_32_bits(gds_addr);
de_payload.gds_backup_addrhi = upper_32_bits(gds_addr);
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
index 60d8630a05c82..9db2becab68fe 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
@@ -477,33 +477,18 @@ static int gfx_v12_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
memset(&ib, 0, sizeof(ib));
- if (ring->is_mes_queue) {
- uint32_t padding, offset;
-
- offset = amdgpu_mes_ctx_get_offs(ring, AMDGPU_MES_CTX_IB_OFFS);
- padding = amdgpu_mes_ctx_get_offs(ring,
- AMDGPU_MES_CTX_PADDING_OFFS);
-
- ib.gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
- ib.ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
-
- gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, padding);
- cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, padding);
- *cpu_ptr = cpu_to_le32(0xCAFEDEAD);
- } else {
- r = amdgpu_device_wb_get(adev, &index);
- if (r)
- return r;
+ r = amdgpu_device_wb_get(adev, &index);
+ if (r)
+ return r;
- gpu_addr = adev->wb.gpu_addr + (index * 4);
- adev->wb.wb[index] = cpu_to_le32(0xCAFEDEAD);
- cpu_ptr = &adev->wb.wb[index];
+ gpu_addr = adev->wb.gpu_addr + (index * 4);
+ adev->wb.wb[index] = cpu_to_le32(0xCAFEDEAD);
+ cpu_ptr = &adev->wb.wb[index];
- r = amdgpu_ib_get(adev, NULL, 16, AMDGPU_IB_POOL_DIRECT, &ib);
- if (r) {
- dev_err(adev->dev, "amdgpu: failed to get ib (%ld).\n", r);
- goto err1;
- }
+ r = amdgpu_ib_get(adev, NULL, 16, AMDGPU_IB_POOL_DIRECT, &ib);
+ if (r) {
+ dev_err(adev->dev, "amdgpu: failed to get ib (%ld).\n", r);
+ goto err1;
}
ib.ptr[0] = PACKET3(PACKET3_WRITE_DATA, 3);
@@ -530,12 +515,10 @@ static int gfx_v12_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
else
r = -EINVAL;
err2:
- if (!ring->is_mes_queue)
- amdgpu_ib_free(&ib, NULL);
+ amdgpu_ib_free(&ib, NULL);
dma_fence_put(f);
err1:
- if (!ring->is_mes_queue)
- amdgpu_device_wb_free(adev, index);
+ amdgpu_device_wb_free(adev, index);
return r;
}
@@ -4283,45 +4266,17 @@ static u64 gfx_v12_0_ring_get_wptr_gfx(struct amdgpu_ring *ring)
static void gfx_v12_0_ring_set_wptr_gfx(struct amdgpu_ring *ring)
{
struct amdgpu_device *adev = ring->adev;
- uint32_t *wptr_saved;
- uint32_t *is_queue_unmap;
- uint64_t aggregated_db_index;
- uint32_t mqd_size = adev->mqds[AMDGPU_HW_IP_GFX].mqd_size;
- uint64_t wptr_tmp;
-
- if (ring->is_mes_queue) {
- wptr_saved = (uint32_t *)(ring->mqd_ptr + mqd_size);
- is_queue_unmap = (uint32_t *)(ring->mqd_ptr + mqd_size +
- sizeof(uint32_t));
- aggregated_db_index =
- amdgpu_mes_get_aggregated_doorbell_index(adev,
- ring->hw_prio);
-
- wptr_tmp = ring->wptr & ring->buf_mask;
- atomic64_set((atomic64_t *)ring->wptr_cpu_addr, wptr_tmp);
- *wptr_saved = wptr_tmp;
- /* assume doorbell always being used by mes mapped queue */
- if (*is_queue_unmap) {
- WDOORBELL64(aggregated_db_index, wptr_tmp);
- WDOORBELL64(ring->doorbell_index, wptr_tmp);
- } else {
- WDOORBELL64(ring->doorbell_index, wptr_tmp);
- if (*is_queue_unmap)
- WDOORBELL64(aggregated_db_index, wptr_tmp);
- }
+ if (ring->use_doorbell) {
+ /* XXX check if swapping is necessary on BE */
+ atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
+ ring->wptr);
+ WDOORBELL64(ring->doorbell_index, ring->wptr);
} else {
- if (ring->use_doorbell) {
- /* XXX check if swapping is necessary on BE */
- atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
- ring->wptr);
- WDOORBELL64(ring->doorbell_index, ring->wptr);
- } else {
- WREG32_SOC15(GC, 0, regCP_RB0_WPTR,
- lower_32_bits(ring->wptr));
- WREG32_SOC15(GC, 0, regCP_RB0_WPTR_HI,
- upper_32_bits(ring->wptr));
- }
+ WREG32_SOC15(GC, 0, regCP_RB0_WPTR,
+ lower_32_bits(ring->wptr));
+ WREG32_SOC15(GC, 0, regCP_RB0_WPTR_HI,
+ upper_32_bits(ring->wptr));
}
}
@@ -4346,42 +4301,14 @@ static u64 gfx_v12_0_ring_get_wptr_compute(struct amdgpu_ring *ring)
static void gfx_v12_0_ring_set_wptr_compute(struct amdgpu_ring *ring)
{
struct amdgpu_device *adev = ring->adev;
- uint32_t *wptr_saved;
- uint32_t *is_queue_unmap;
- uint64_t aggregated_db_index;
- uint32_t mqd_size = adev->mqds[AMDGPU_HW_IP_COMPUTE].mqd_size;
- uint64_t wptr_tmp;
-
- if (ring->is_mes_queue) {
- wptr_saved = (uint32_t *)(ring->mqd_ptr + mqd_size);
- is_queue_unmap = (uint32_t *)(ring->mqd_ptr + mqd_size +
- sizeof(uint32_t));
- aggregated_db_index =
- amdgpu_mes_get_aggregated_doorbell_index(adev,
- ring->hw_prio);
-
- wptr_tmp = ring->wptr & ring->buf_mask;
- atomic64_set((atomic64_t *)ring->wptr_cpu_addr, wptr_tmp);
- *wptr_saved = wptr_tmp;
- /* assume doorbell always used by mes mapped queue */
- if (*is_queue_unmap) {
- WDOORBELL64(aggregated_db_index, wptr_tmp);
- WDOORBELL64(ring->doorbell_index, wptr_tmp);
- } else {
- WDOORBELL64(ring->doorbell_index, wptr_tmp);
- if (*is_queue_unmap)
- WDOORBELL64(aggregated_db_index, wptr_tmp);
- }
+ /* XXX check if swapping is necessary on BE */
+ if (ring->use_doorbell) {
+ atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
+ ring->wptr);
+ WDOORBELL64(ring->doorbell_index, ring->wptr);
} else {
- /* XXX check if swapping is necessary on BE */
- if (ring->use_doorbell) {
- atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
- ring->wptr);
- WDOORBELL64(ring->doorbell_index, ring->wptr);
- } else {
- BUG(); /* only DOORBELL method supported on gfx12 now */
- }
+ BUG(); /* only DOORBELL method supported on gfx12 now */
}
}
@@ -4428,10 +4355,6 @@ static void gfx_v12_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
control |= ib->length_dw | (vmid << 24);
- if (ring->is_mes_queue)
- /* inherit vmid from mqd */
- control |= 0x400000;
-
amdgpu_ring_write(ring, header);
BUG_ON(ib->gpu_addr & 0x3); /* Dword align */
amdgpu_ring_write(ring,
@@ -4451,10 +4374,6 @@ static void gfx_v12_0_ring_emit_ib_compute(struct amdgpu_ring *ring,
unsigned vmid = AMDGPU_JOB_GET_VMID(job);
u32 control = INDIRECT_BUFFER_VALID | ib->length_dw | (vmid << 24);
- if (ring->is_mes_queue)
- /* inherit vmid from mqd */
- control |= 0x40000000;
-
amdgpu_ring_write(ring, PACKET3(PACKET3_INDIRECT_BUFFER, 2));
BUG_ON(ib->gpu_addr & 0x3); /* Dword align */
amdgpu_ring_write(ring,
@@ -4494,8 +4413,7 @@ static void gfx_v12_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr,
amdgpu_ring_write(ring, upper_32_bits(addr));
amdgpu_ring_write(ring, lower_32_bits(seq));
amdgpu_ring_write(ring, upper_32_bits(seq));
- amdgpu_ring_write(ring, ring->is_mes_queue ?
- (ring->hw_queue_id | AMDGPU_FENCE_MES_QUEUE_FLAG) : 0);
+ amdgpu_ring_write(ring, 0);
}
static void gfx_v12_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
@@ -4523,10 +4441,7 @@ static void gfx_v12_0_ring_invalidate_tlbs(struct amdgpu_ring *ring,
static void gfx_v12_0_ring_emit_vm_flush(struct amdgpu_ring *ring,
unsigned vmid, uint64_t pd_addr)
{
- if (ring->is_mes_queue)
- gfx_v12_0_ring_invalidate_tlbs(ring, 0, 0, false, 0);
- else
- amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr);
+ amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr);
/* compute doesn't have PFP */
if (ring->funcs->type == AMDGPU_RING_TYPE_GFX) {
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
index 734f2dd986290..f4dfa1418b740 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
@@ -5472,16 +5472,8 @@ static void gfx_v9_0_ring_patch_ce_meta(struct amdgpu_ring *ring,
payload_size = sizeof(struct v9_ce_ib_state);
- if (ring->is_mes_queue) {
- payload_offset = offsetof(struct amdgpu_mes_ctx_meta_data,
- gfx[0].gfx_meta_data) +
- offsetof(struct v9_gfx_meta_data, ce_payload);
- ce_payload_cpu_addr =
- amdgpu_mes_ctx_get_offs_cpu_addr(ring, payload_offset);
- } else {
- payload_offset = offsetof(struct v9_gfx_meta_data, ce_payload);
- ce_payload_cpu_addr = adev->virt.csa_cpu_addr + payload_offset;
- }
+ payload_offset = offsetof(struct v9_gfx_meta_data, ce_payload);
+ ce_payload_cpu_addr = adev->virt.csa_cpu_addr + payload_offset;
if (offset + (payload_size >> 2) <= ring->buf_mask + 1) {
memcpy((void *)&ring->ring[offset], ce_payload_cpu_addr, payload_size);
@@ -5504,16 +5496,8 @@ static void gfx_v9_0_ring_patch_de_meta(struct amdgpu_ring *ring,
payload_size = sizeof(struct v9_de_ib_state);
- if (ring->is_mes_queue) {
- payload_offset = offsetof(struct amdgpu_mes_ctx_meta_data,
- gfx[0].gfx_meta_data) +
- offsetof(struct v9_gfx_meta_data, de_payload);
- de_payload_cpu_addr =
- amdgpu_mes_ctx_get_offs_cpu_addr(ring, payload_offset);
- } else {
- payload_offset = offsetof(struct v9_gfx_meta_data, de_payload);
- de_payload_cpu_addr = adev->virt.csa_cpu_addr + payload_offset;
- }
+ payload_offset = offsetof(struct v9_gfx_meta_data, de_payload);
+ de_payload_cpu_addr = adev->virt.csa_cpu_addr + payload_offset;
((struct v9_de_ib_state *)de_payload_cpu_addr)->ib_completion_status =
IB_COMPLETION_STATUS_PREEMPTED;
@@ -5703,19 +5687,9 @@ static void gfx_v9_0_ring_emit_ce_meta(struct amdgpu_ring *ring, bool resume)
cnt = (sizeof(ce_payload) >> 2) + 4 - 2;
- if (ring->is_mes_queue) {
- offset = offsetof(struct amdgpu_mes_ctx_meta_data,
- gfx[0].gfx_meta_data) +
- offsetof(struct v9_gfx_meta_data, ce_payload);
- ce_payload_gpu_addr =
- amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
- ce_payload_cpu_addr =
- amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
- } else {
- offset = offsetof(struct v9_gfx_meta_data, ce_payload);
- ce_payload_gpu_addr = amdgpu_csa_vaddr(ring->adev) + offset;
- ce_payload_cpu_addr = adev->virt.csa_cpu_addr + offset;
- }
+ offset = offsetof(struct v9_gfx_meta_data, ce_payload);
+ ce_payload_gpu_addr = amdgpu_csa_vaddr(ring->adev) + offset;
+ ce_payload_cpu_addr = adev->virt.csa_cpu_addr + offset;
amdgpu_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, cnt));
amdgpu_ring_write(ring, (WRITE_DATA_ENGINE_SEL(2) |
@@ -5801,28 +5775,13 @@ static void gfx_v9_0_ring_emit_de_meta(struct amdgpu_ring *ring, bool resume, bo
void *de_payload_cpu_addr;
int cnt;
- if (ring->is_mes_queue) {
- offset = offsetof(struct amdgpu_mes_ctx_meta_data,
- gfx[0].gfx_meta_data) +
- offsetof(struct v9_gfx_meta_data, de_payload);
- de_payload_gpu_addr =
- amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
- de_payload_cpu_addr =
- amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
-
- offset = offsetof(struct amdgpu_mes_ctx_meta_data,
- gfx[0].gds_backup) +
- offsetof(struct v9_gfx_meta_data, de_payload);
- gds_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
- } else {
- offset = offsetof(struct v9_gfx_meta_data, de_payload);
- de_payload_gpu_addr = amdgpu_csa_vaddr(ring->adev) + offset;
- de_payload_cpu_addr = adev->virt.csa_cpu_addr + offset;
+ offset = offsetof(struct v9_gfx_meta_data, de_payload);
+ de_payload_gpu_addr = amdgpu_csa_vaddr(ring->adev) + offset;
+ de_payload_cpu_addr = adev->virt.csa_cpu_addr + offset;
- gds_addr = ALIGN(amdgpu_csa_vaddr(ring->adev) +
- AMDGPU_CSA_SIZE - adev->gds.gds_size,
- PAGE_SIZE);
- }
+ gds_addr = ALIGN(amdgpu_csa_vaddr(ring->adev) +
+ AMDGPU_CSA_SIZE - adev->gds.gds_size,
+ PAGE_SIZE);
if (usegds) {
de_payload.gds_backup_addrlo = lower_32_bits(gds_addr);
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
index 95d894a231fcf..8ae4c031162bc 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
@@ -428,10 +428,6 @@ static void gmc_v10_0_emit_pasid_mapping(struct amdgpu_ring *ring, unsigned int
struct amdgpu_device *adev = ring->adev;
uint32_t reg;
- /* MES fw manages IH_VMID_x_LUT updating */
- if (ring->is_mes_queue)
- return;
-
if (ring->vm_hub == AMDGPU_GFXHUB(0))
reg = SOC15_REG_OFFSET(OSSSYS, 0, mmIH_VMID_0_LUT) + vmid;
else
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
index ad099f136f84e..5c91d4445418c 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
@@ -393,10 +393,6 @@ static void gmc_v11_0_emit_pasid_mapping(struct amdgpu_ring *ring, unsigned int
struct amdgpu_device *adev = ring->adev;
uint32_t reg;
- /* MES fw manages IH_VMID_x_LUT updating */
- if (ring->is_mes_queue)
- return;
-
if (ring->vm_hub == AMDGPU_GFXHUB(0))
reg = SOC15_REG_OFFSET(OSSSYS, 0, regIH_VMID_0_LUT) + vmid;
else
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c
index bf8d01da88154..0a1946c824118 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c
@@ -413,10 +413,6 @@ static void gmc_v12_0_emit_pasid_mapping(struct amdgpu_ring *ring, unsigned vmid
struct amdgpu_device *adev = ring->adev;
uint32_t reg;
- /* MES fw manages IH_VMID_x_LUT updating */
- if (ring->is_mes_queue)
- return;
-
if (ring->vm_hub == AMDGPU_GFXHUB(0))
reg = SOC15_REG_OFFSET(OSSSYS, 0, regIH_VMID_0_LUT) + vmid;
else
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
index 44a401870509f..712392671a3cf 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
@@ -369,67 +369,36 @@ static uint64_t sdma_v5_0_ring_get_wptr(struct amdgpu_ring *ring)
static void sdma_v5_0_ring_set_wptr(struct amdgpu_ring *ring)
{
struct amdgpu_device *adev = ring->adev;
- uint32_t *wptr_saved;
- uint32_t *is_queue_unmap;
- uint64_t aggregated_db_index;
- uint32_t mqd_size = adev->mqds[AMDGPU_HW_IP_DMA].mqd_size;
DRM_DEBUG("Setting write pointer\n");
- if (ring->is_mes_queue) {
- wptr_saved = (uint32_t *)(ring->mqd_ptr + mqd_size);
- is_queue_unmap = (uint32_t *)(ring->mqd_ptr + mqd_size +
- sizeof(uint32_t));
- aggregated_db_index =
- amdgpu_mes_get_aggregated_doorbell_index(adev,
- AMDGPU_MES_PRIORITY_LEVEL_NORMAL);
-
+ if (ring->use_doorbell) {
+ DRM_DEBUG("Using doorbell -- "
+ "wptr_offs == 0x%08x "
+ "lower_32_bits(ring->wptr) << 2 == 0x%08x "
+ "upper_32_bits(ring->wptr) << 2 == 0x%08x\n",
+ ring->wptr_offs,
+ lower_32_bits(ring->wptr << 2),
+ upper_32_bits(ring->wptr << 2));
+ /* XXX check if swapping is necessary on BE */
atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
ring->wptr << 2);
- *wptr_saved = ring->wptr << 2;
- if (*is_queue_unmap) {
- WDOORBELL64(aggregated_db_index, ring->wptr << 2);
- DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
- ring->doorbell_index, ring->wptr << 2);
- WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
- } else {
- DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
- ring->doorbell_index, ring->wptr << 2);
- WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
-
- if (*is_queue_unmap)
- WDOORBELL64(aggregated_db_index,
- ring->wptr << 2);
- }
+ DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
+ ring->doorbell_index, ring->wptr << 2);
+ WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
} else {
- if (ring->use_doorbell) {
- DRM_DEBUG("Using doorbell -- "
- "wptr_offs == 0x%08x "
- "lower_32_bits(ring->wptr) << 2 == 0x%08x "
- "upper_32_bits(ring->wptr) << 2 == 0x%08x\n",
- ring->wptr_offs,
- lower_32_bits(ring->wptr << 2),
- upper_32_bits(ring->wptr << 2));
- /* XXX check if swapping is necessary on BE */
- atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
- ring->wptr << 2);
- DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
- ring->doorbell_index, ring->wptr << 2);
- WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
- } else {
- DRM_DEBUG("Not using doorbell -- "
- "mmSDMA%i_GFX_RB_WPTR == 0x%08x "
- "mmSDMA%i_GFX_RB_WPTR_HI == 0x%08x\n",
- ring->me,
- lower_32_bits(ring->wptr << 2),
- ring->me,
- upper_32_bits(ring->wptr << 2));
- WREG32_SOC15_IP(GC, sdma_v5_0_get_reg_offset(adev,
- ring->me, mmSDMA0_GFX_RB_WPTR),
- lower_32_bits(ring->wptr << 2));
- WREG32_SOC15_IP(GC, sdma_v5_0_get_reg_offset(adev,
- ring->me, mmSDMA0_GFX_RB_WPTR_HI),
- upper_32_bits(ring->wptr << 2));
- }
+ DRM_DEBUG("Not using doorbell -- "
+ "mmSDMA%i_GFX_RB_WPTR == 0x%08x "
+ "mmSDMA%i_GFX_RB_WPTR_HI == 0x%08x\n",
+ ring->me,
+ lower_32_bits(ring->wptr << 2),
+ ring->me,
+ upper_32_bits(ring->wptr << 2));
+ WREG32_SOC15_IP(GC, sdma_v5_0_get_reg_offset(adev,
+ ring->me, mmSDMA0_GFX_RB_WPTR),
+ lower_32_bits(ring->wptr << 2));
+ WREG32_SOC15_IP(GC, sdma_v5_0_get_reg_offset(adev,
+ ring->me, mmSDMA0_GFX_RB_WPTR_HI),
+ upper_32_bits(ring->wptr << 2));
}
}
@@ -575,11 +544,9 @@ static void sdma_v5_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 se
}
if (flags & AMDGPU_FENCE_FLAG_INT) {
- uint32_t ctx = ring->is_mes_queue ?
- (ring->hw_queue_id | AMDGPU_FENCE_MES_QUEUE_FLAG) : 0;
/* generate an interrupt */
amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_TRAP));
- amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(ctx));
+ amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(0));
}
}
@@ -1046,33 +1013,22 @@ static int sdma_v5_0_ring_test_ring(struct amdgpu_ring *ring)
int r;
u32 tmp;
u64 gpu_addr;
- volatile uint32_t *cpu_ptr = NULL;
tmp = 0xCAFEDEAD;
- if (ring->is_mes_queue) {
- uint32_t offset = 0;
- offset = amdgpu_mes_ctx_get_offs(ring,
- AMDGPU_MES_CTX_PADDING_OFFS);
- gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
- cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
- *cpu_ptr = tmp;
- } else {
- r = amdgpu_device_wb_get(adev, &index);
- if (r) {
- dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
- return r;
- }
-
- gpu_addr = adev->wb.gpu_addr + (index * 4);
- adev->wb.wb[index] = cpu_to_le32(tmp);
+ r = amdgpu_device_wb_get(adev, &index);
+ if (r) {
+ dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
+ return r;
}
+ gpu_addr = adev->wb.gpu_addr + (index * 4);
+ adev->wb.wb[index] = cpu_to_le32(tmp);
+
r = amdgpu_ring_alloc(ring, 20);
if (r) {
DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r);
- if (!ring->is_mes_queue)
- amdgpu_device_wb_free(adev, index);
+ amdgpu_device_wb_free(adev, index);
return r;
}
@@ -1085,10 +1041,7 @@ static int sdma_v5_0_ring_test_ring(struct amdgpu_ring *ring)
amdgpu_ring_commit(ring);
for (i = 0; i < adev->usec_timeout; i++) {
- if (ring->is_mes_queue)
- tmp = le32_to_cpu(*cpu_ptr);
- else
- tmp = le32_to_cpu(adev->wb.wb[index]);
+ tmp = le32_to_cpu(adev->wb.wb[index]);
if (tmp == 0xDEADBEEF)
break;
if (amdgpu_emu_mode == 1)
@@ -1100,8 +1053,7 @@ static int sdma_v5_0_ring_test_ring(struct amdgpu_ring *ring)
if (i >= adev->usec_timeout)
r = -ETIMEDOUT;
- if (!ring->is_mes_queue)
- amdgpu_device_wb_free(adev, index);
+ amdgpu_device_wb_free(adev, index);
return r;
}
@@ -1124,38 +1076,24 @@ static int sdma_v5_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
long r;
u32 tmp = 0;
u64 gpu_addr;
- volatile uint32_t *cpu_ptr = NULL;
tmp = 0xCAFEDEAD;
memset(&ib, 0, sizeof(ib));
- if (ring->is_mes_queue) {
- uint32_t offset = 0;
- offset = amdgpu_mes_ctx_get_offs(ring, AMDGPU_MES_CTX_IB_OFFS);
- ib.gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
- ib.ptr = (void *)amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
-
- offset = amdgpu_mes_ctx_get_offs(ring,
- AMDGPU_MES_CTX_PADDING_OFFS);
- gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
- cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
- *cpu_ptr = tmp;
- } else {
- r = amdgpu_device_wb_get(adev, &index);
- if (r) {
- dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
- return r;
- }
+ r = amdgpu_device_wb_get(adev, &index);
+ if (r) {
+ dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
+ return r;
+ }
- gpu_addr = adev->wb.gpu_addr + (index * 4);
- adev->wb.wb[index] = cpu_to_le32(tmp);
+ gpu_addr = adev->wb.gpu_addr + (index * 4);
+ adev->wb.wb[index] = cpu_to_le32(tmp);
- r = amdgpu_ib_get(adev, NULL, 256,
- AMDGPU_IB_POOL_DIRECT, &ib);
- if (r) {
- DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
- goto err0;
- }
+ r = amdgpu_ib_get(adev, NULL, 256,
+ AMDGPU_IB_POOL_DIRECT, &ib);
+ if (r) {
+ DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
+ goto err0;
}
ib.ptr[0] = SDMA_PKT_HEADER_OP(SDMA_OP_WRITE) |
@@ -1183,10 +1121,7 @@ static int sdma_v5_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
goto err1;
}
- if (ring->is_mes_queue)
- tmp = le32_to_cpu(*cpu_ptr);
- else
- tmp = le32_to_cpu(adev->wb.wb[index]);
+ tmp = le32_to_cpu(adev->wb.wb[index]);
if (tmp == 0xDEADBEEF)
r = 0;
@@ -1197,8 +1132,7 @@ static int sdma_v5_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
amdgpu_ib_free(&ib, NULL);
dma_fence_put(f);
err0:
- if (!ring->is_mes_queue)
- amdgpu_device_wb_free(adev, index);
+ amdgpu_device_wb_free(adev, index);
return r;
}
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c b/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
index cb2a3e5592855..2c0bf2fc6d380 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
@@ -394,11 +394,9 @@ static void sdma_v5_2_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 se
}
if ((flags & AMDGPU_FENCE_FLAG_INT)) {
- uint32_t ctx = ring->is_mes_queue ?
- (ring->hw_queue_id | AMDGPU_FENCE_MES_QUEUE_FLAG) : 0;
/* generate an interrupt */
amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_TRAP));
- amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(ctx));
+ amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(0));
}
}
@@ -903,33 +901,22 @@ static int sdma_v5_2_ring_test_ring(struct amdgpu_ring *ring)
int r;
u32 tmp;
u64 gpu_addr;
- volatile uint32_t *cpu_ptr = NULL;
tmp = 0xCAFEDEAD;
- if (ring->is_mes_queue) {
- uint32_t offset = 0;
- offset = amdgpu_mes_ctx_get_offs(ring,
- AMDGPU_MES_CTX_PADDING_OFFS);
- gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
- cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
- *cpu_ptr = tmp;
- } else {
- r = amdgpu_device_wb_get(adev, &index);
- if (r) {
- dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
- return r;
- }
-
- gpu_addr = adev->wb.gpu_addr + (index * 4);
- adev->wb.wb[index] = cpu_to_le32(tmp);
+ r = amdgpu_device_wb_get(adev, &index);
+ if (r) {
+ dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
+ return r;
}
+ gpu_addr = adev->wb.gpu_addr + (index * 4);
+ adev->wb.wb[index] = cpu_to_le32(tmp);
+
r = amdgpu_ring_alloc(ring, 20);
if (r) {
DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r);
- if (!ring->is_mes_queue)
- amdgpu_device_wb_free(adev, index);
+ amdgpu_device_wb_free(adev, index);
return r;
}
@@ -942,10 +929,7 @@ static int sdma_v5_2_ring_test_ring(struct amdgpu_ring *ring)
amdgpu_ring_commit(ring);
for (i = 0; i < adev->usec_timeout; i++) {
- if (ring->is_mes_queue)
- tmp = le32_to_cpu(*cpu_ptr);
- else
- tmp = le32_to_cpu(adev->wb.wb[index]);
+ tmp = le32_to_cpu(adev->wb.wb[index]);
if (tmp == 0xDEADBEEF)
break;
if (amdgpu_emu_mode == 1)
@@ -957,8 +941,7 @@ static int sdma_v5_2_ring_test_ring(struct amdgpu_ring *ring)
if (i >= adev->usec_timeout)
r = -ETIMEDOUT;
- if (!ring->is_mes_queue)
- amdgpu_device_wb_free(adev, index);
+ amdgpu_device_wb_free(adev, index);
return r;
}
@@ -981,37 +964,23 @@ static int sdma_v5_2_ring_test_ib(struct amdgpu_ring *ring, long timeout)
long r;
u32 tmp = 0;
u64 gpu_addr;
- volatile uint32_t *cpu_ptr = NULL;
tmp = 0xCAFEDEAD;
memset(&ib, 0, sizeof(ib));
- if (ring->is_mes_queue) {
- uint32_t offset = 0;
- offset = amdgpu_mes_ctx_get_offs(ring, AMDGPU_MES_CTX_IB_OFFS);
- ib.gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
- ib.ptr = (void *)amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
-
- offset = amdgpu_mes_ctx_get_offs(ring,
- AMDGPU_MES_CTX_PADDING_OFFS);
- gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
- cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
- *cpu_ptr = tmp;
- } else {
- r = amdgpu_device_wb_get(adev, &index);
- if (r) {
- dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
- return r;
- }
+ r = amdgpu_device_wb_get(adev, &index);
+ if (r) {
+ dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
+ return r;
+ }
- gpu_addr = adev->wb.gpu_addr + (index * 4);
- adev->wb.wb[index] = cpu_to_le32(tmp);
+ gpu_addr = adev->wb.gpu_addr + (index * 4);
+ adev->wb.wb[index] = cpu_to_le32(tmp);
- r = amdgpu_ib_get(adev, NULL, 256, AMDGPU_IB_POOL_DIRECT, &ib);
- if (r) {
- DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
- goto err0;
- }
+ r = amdgpu_ib_get(adev, NULL, 256, AMDGPU_IB_POOL_DIRECT, &ib);
+ if (r) {
+ DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
+ goto err0;
}
ib.ptr[0] = SDMA_PKT_HEADER_OP(SDMA_OP_WRITE) |
@@ -1039,10 +1008,7 @@ static int sdma_v5_2_ring_test_ib(struct amdgpu_ring *ring, long timeout)
goto err1;
}
- if (ring->is_mes_queue)
- tmp = le32_to_cpu(*cpu_ptr);
- else
- tmp = le32_to_cpu(adev->wb.wb[index]);
+ tmp = le32_to_cpu(adev->wb.wb[index]);
if (tmp == 0xDEADBEEF)
r = 0;
@@ -1053,8 +1019,7 @@ static int sdma_v5_2_ring_test_ib(struct amdgpu_ring *ring, long timeout)
amdgpu_ib_free(&ib, NULL);
dma_fence_put(f);
err0:
- if (!ring->is_mes_queue)
- amdgpu_device_wb_free(adev, index);
+ amdgpu_device_wb_free(adev, index);
return r;
}
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
index f1a02ce844e0f..d0f7874730f06 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
@@ -377,11 +377,9 @@ static void sdma_v6_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 se
}
if (flags & AMDGPU_FENCE_FLAG_INT) {
- uint32_t ctx = ring->is_mes_queue ?
- (ring->hw_queue_id | AMDGPU_FENCE_MES_QUEUE_FLAG) : 0;
/* generate an interrupt */
amdgpu_ring_write(ring, SDMA_PKT_COPY_LINEAR_HEADER_OP(SDMA_OP_TRAP));
- amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(ctx));
+ amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(0));
}
}
@@ -921,33 +919,22 @@ static int sdma_v6_0_ring_test_ring(struct amdgpu_ring *ring)
int r;
u32 tmp;
u64 gpu_addr;
- volatile uint32_t *cpu_ptr = NULL;
tmp = 0xCAFEDEAD;
- if (ring->is_mes_queue) {
- uint32_t offset = 0;
- offset = amdgpu_mes_ctx_get_offs(ring,
- AMDGPU_MES_CTX_PADDING_OFFS);
- gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
- cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
- *cpu_ptr = tmp;
- } else {
- r = amdgpu_device_wb_get(adev, &index);
- if (r) {
- dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
- return r;
- }
-
- gpu_addr = adev->wb.gpu_addr + (index * 4);
- adev->wb.wb[index] = cpu_to_le32(tmp);
+ r = amdgpu_device_wb_get(adev, &index);
+ if (r) {
+ dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
+ return r;
}
+ gpu_addr = adev->wb.gpu_addr + (index * 4);
+ adev->wb.wb[index] = cpu_to_le32(tmp);
+
r = amdgpu_ring_alloc(ring, 5);
if (r) {
DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r);
- if (!ring->is_mes_queue)
- amdgpu_device_wb_free(adev, index);
+ amdgpu_device_wb_free(adev, index);
return r;
}
@@ -960,10 +947,7 @@ static int sdma_v6_0_ring_test_ring(struct amdgpu_ring *ring)
amdgpu_ring_commit(ring);
for (i = 0; i < adev->usec_timeout; i++) {
- if (ring->is_mes_queue)
- tmp = le32_to_cpu(*cpu_ptr);
- else
- tmp = le32_to_cpu(adev->wb.wb[index]);
+ tmp = le32_to_cpu(adev->wb.wb[index]);
if (tmp == 0xDEADBEEF)
break;
if (amdgpu_emu_mode == 1)
@@ -975,8 +959,7 @@ static int sdma_v6_0_ring_test_ring(struct amdgpu_ring *ring)
if (i >= adev->usec_timeout)
r = -ETIMEDOUT;
- if (!ring->is_mes_queue)
- amdgpu_device_wb_free(adev, index);
+ amdgpu_device_wb_free(adev, index);
return r;
}
@@ -999,37 +982,23 @@ static int sdma_v6_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
long r;
u32 tmp = 0;
u64 gpu_addr;
- volatile uint32_t *cpu_ptr = NULL;
tmp = 0xCAFEDEAD;
memset(&ib, 0, sizeof(ib));
- if (ring->is_mes_queue) {
- uint32_t offset = 0;
- offset = amdgpu_mes_ctx_get_offs(ring, AMDGPU_MES_CTX_IB_OFFS);
- ib.gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
- ib.ptr = (void *)amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
-
- offset = amdgpu_mes_ctx_get_offs(ring,
- AMDGPU_MES_CTX_PADDING_OFFS);
- gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
- cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
- *cpu_ptr = tmp;
- } else {
- r = amdgpu_device_wb_get(adev, &index);
- if (r) {
- dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
- return r;
- }
+ r = amdgpu_device_wb_get(adev, &index);
+ if (r) {
+ dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
+ return r;
+ }
- gpu_addr = adev->wb.gpu_addr + (index * 4);
- adev->wb.wb[index] = cpu_to_le32(tmp);
+ gpu_addr = adev->wb.gpu_addr + (index * 4);
+ adev->wb.wb[index] = cpu_to_le32(tmp);
- r = amdgpu_ib_get(adev, NULL, 256, AMDGPU_IB_POOL_DIRECT, &ib);
- if (r) {
- DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
- goto err0;
- }
+ r = amdgpu_ib_get(adev, NULL, 256, AMDGPU_IB_POOL_DIRECT, &ib);
+ if (r) {
+ DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
+ goto err0;
}
ib.ptr[0] = SDMA_PKT_COPY_LINEAR_HEADER_OP(SDMA_OP_WRITE) |
@@ -1057,10 +1026,7 @@ static int sdma_v6_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
goto err1;
}
- if (ring->is_mes_queue)
- tmp = le32_to_cpu(*cpu_ptr);
- else
- tmp = le32_to_cpu(adev->wb.wb[index]);
+ tmp = le32_to_cpu(adev->wb.wb[index]);
if (tmp == 0xDEADBEEF)
r = 0;
@@ -1071,8 +1037,7 @@ static int sdma_v6_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
amdgpu_ib_free(&ib, NULL);
dma_fence_put(f);
err0:
- if (!ring->is_mes_queue)
- amdgpu_device_wb_free(adev, index);
+ amdgpu_device_wb_free(adev, index);
return r;
}
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
index f10de8e2fcae2..7a788da2ef5d7 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
@@ -205,66 +205,39 @@ static uint64_t sdma_v7_0_ring_get_wptr(struct amdgpu_ring *ring)
static void sdma_v7_0_ring_set_wptr(struct amdgpu_ring *ring)
{
struct amdgpu_device *adev = ring->adev;
- uint32_t *wptr_saved;
- uint32_t *is_queue_unmap;
- uint64_t aggregated_db_index;
- uint32_t mqd_size = adev->mqds[AMDGPU_HW_IP_DMA].mqd_size;
DRM_DEBUG("Setting write pointer\n");
- if (ring->is_mes_queue) {
- wptr_saved = (uint32_t *)(ring->mqd_ptr + mqd_size);
- is_queue_unmap = (uint32_t *)(ring->mqd_ptr + mqd_size +
- sizeof(uint32_t));
- aggregated_db_index =
- amdgpu_mes_get_aggregated_doorbell_index(adev,
- ring->hw_prio);
-
+ if (ring->use_doorbell) {
+ DRM_DEBUG("Using doorbell -- "
+ "wptr_offs == 0x%08x "
+ "lower_32_bits(ring->wptr) << 2 == 0x%08x "
+ "upper_32_bits(ring->wptr) << 2 == 0x%08x\n",
+ ring->wptr_offs,
+ lower_32_bits(ring->wptr << 2),
+ upper_32_bits(ring->wptr << 2));
+ /* XXX check if swapping is necessary on BE */
atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
ring->wptr << 2);
- *wptr_saved = ring->wptr << 2;
- if (*is_queue_unmap) {
- WDOORBELL64(aggregated_db_index, ring->wptr << 2);
- DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
- ring->doorbell_index, ring->wptr << 2);
- WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
- } else {
- DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
- ring->doorbell_index, ring->wptr << 2);
- WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
- }
+ DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
+ ring->doorbell_index, ring->wptr << 2);
+ WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
} else {
- if (ring->use_doorbell) {
- DRM_DEBUG("Using doorbell -- "
- "wptr_offs == 0x%08x "
- "lower_32_bits(ring->wptr) << 2 == 0x%08x "
- "upper_32_bits(ring->wptr) << 2 == 0x%08x\n",
- ring->wptr_offs,
- lower_32_bits(ring->wptr << 2),
- upper_32_bits(ring->wptr << 2));
- /* XXX check if swapping is necessary on BE */
- atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
- ring->wptr << 2);
- DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
- ring->doorbell_index, ring->wptr << 2);
- WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
- } else {
- DRM_DEBUG("Not using doorbell -- "
- "regSDMA%i_GFX_RB_WPTR == 0x%08x "
- "regSDMA%i_GFX_RB_WPTR_HI == 0x%08x\n",
- ring->me,
- lower_32_bits(ring->wptr << 2),
- ring->me,
- upper_32_bits(ring->wptr << 2));
- WREG32_SOC15_IP(GC, sdma_v7_0_get_reg_offset(adev,
- ring->me,
- regSDMA0_QUEUE0_RB_WPTR),
- lower_32_bits(ring->wptr << 2));
- WREG32_SOC15_IP(GC, sdma_v7_0_get_reg_offset(adev,
- ring->me,
- regSDMA0_QUEUE0_RB_WPTR_HI),
- upper_32_bits(ring->wptr << 2));
- }
+ DRM_DEBUG("Not using doorbell -- "
+ "regSDMA%i_GFX_RB_WPTR == 0x%08x "
+ "regSDMA%i_GFX_RB_WPTR_HI == 0x%08x\n",
+ ring->me,
+ lower_32_bits(ring->wptr << 2),
+ ring->me,
+ upper_32_bits(ring->wptr << 2));
+ WREG32_SOC15_IP(GC, sdma_v7_0_get_reg_offset(adev,
+ ring->me,
+ regSDMA0_QUEUE0_RB_WPTR),
+ lower_32_bits(ring->wptr << 2));
+ WREG32_SOC15_IP(GC, sdma_v7_0_get_reg_offset(adev,
+ ring->me,
+ regSDMA0_QUEUE0_RB_WPTR_HI),
+ upper_32_bits(ring->wptr << 2));
}
}
@@ -408,11 +381,9 @@ static void sdma_v7_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 se
}
if (flags & AMDGPU_FENCE_FLAG_INT) {
- uint32_t ctx = ring->is_mes_queue ?
- (ring->hw_queue_id | AMDGPU_FENCE_MES_QUEUE_FLAG) : 0;
/* generate an interrupt */
amdgpu_ring_write(ring, SDMA_PKT_COPY_LINEAR_HEADER_OP(SDMA_OP_TRAP));
- amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(ctx));
+ amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(0));
}
}
@@ -965,33 +936,22 @@ static int sdma_v7_0_ring_test_ring(struct amdgpu_ring *ring)
int r;
u32 tmp;
u64 gpu_addr;
- volatile uint32_t *cpu_ptr = NULL;
tmp = 0xCAFEDEAD;
- if (ring->is_mes_queue) {
- uint32_t offset = 0;
- offset = amdgpu_mes_ctx_get_offs(ring,
- AMDGPU_MES_CTX_PADDING_OFFS);
- gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
- cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
- *cpu_ptr = tmp;
- } else {
- r = amdgpu_device_wb_get(adev, &index);
- if (r) {
- dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
- return r;
- }
-
- gpu_addr = adev->wb.gpu_addr + (index * 4);
- adev->wb.wb[index] = cpu_to_le32(tmp);
+ r = amdgpu_device_wb_get(adev, &index);
+ if (r) {
+ dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
+ return r;
}
+ gpu_addr = adev->wb.gpu_addr + (index * 4);
+ adev->wb.wb[index] = cpu_to_le32(tmp);
+
r = amdgpu_ring_alloc(ring, 5);
if (r) {
DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r);
- if (!ring->is_mes_queue)
- amdgpu_device_wb_free(adev, index);
+ amdgpu_device_wb_free(adev, index);
return r;
}
@@ -1004,10 +964,7 @@ static int sdma_v7_0_ring_test_ring(struct amdgpu_ring *ring)
amdgpu_ring_commit(ring);
for (i = 0; i < adev->usec_timeout; i++) {
- if (ring->is_mes_queue)
- tmp = le32_to_cpu(*cpu_ptr);
- else
- tmp = le32_to_cpu(adev->wb.wb[index]);
+ tmp = le32_to_cpu(adev->wb.wb[index]);
if (tmp == 0xDEADBEEF)
break;
if (amdgpu_emu_mode == 1)
@@ -1019,8 +976,7 @@ static int sdma_v7_0_ring_test_ring(struct amdgpu_ring *ring)
if (i >= adev->usec_timeout)
r = -ETIMEDOUT;
- if (!ring->is_mes_queue)
- amdgpu_device_wb_free(adev, index);
+ amdgpu_device_wb_free(adev, index);
return r;
}
@@ -1043,37 +999,23 @@ static int sdma_v7_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
long r;
u32 tmp = 0;
u64 gpu_addr;
- volatile uint32_t *cpu_ptr = NULL;
tmp = 0xCAFEDEAD;
memset(&ib, 0, sizeof(ib));
- if (ring->is_mes_queue) {
- uint32_t offset = 0;
- offset = amdgpu_mes_ctx_get_offs(ring, AMDGPU_MES_CTX_IB_OFFS);
- ib.gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
- ib.ptr = (void *)amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
-
- offset = amdgpu_mes_ctx_get_offs(ring,
- AMDGPU_MES_CTX_PADDING_OFFS);
- gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
- cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
- *cpu_ptr = tmp;
- } else {
- r = amdgpu_device_wb_get(adev, &index);
- if (r) {
- dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
- return r;
- }
+ r = amdgpu_device_wb_get(adev, &index);
+ if (r) {
+ dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
+ return r;
+ }
- gpu_addr = adev->wb.gpu_addr + (index * 4);
- adev->wb.wb[index] = cpu_to_le32(tmp);
+ gpu_addr = adev->wb.gpu_addr + (index * 4);
+ adev->wb.wb[index] = cpu_to_le32(tmp);
- r = amdgpu_ib_get(adev, NULL, 256, AMDGPU_IB_POOL_DIRECT, &ib);
- if (r) {
- DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
- goto err0;
- }
+ r = amdgpu_ib_get(adev, NULL, 256, AMDGPU_IB_POOL_DIRECT, &ib);
+ if (r) {
+ DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
+ goto err0;
}
ib.ptr[0] = SDMA_PKT_COPY_LINEAR_HEADER_OP(SDMA_OP_WRITE) |
@@ -1101,10 +1043,7 @@ static int sdma_v7_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
goto err1;
}
- if (ring->is_mes_queue)
- tmp = le32_to_cpu(*cpu_ptr);
- else
- tmp = le32_to_cpu(adev->wb.wb[index]);
+ tmp = le32_to_cpu(adev->wb.wb[index]);
if (tmp == 0xDEADBEEF)
r = 0;
@@ -1115,8 +1054,7 @@ static int sdma_v7_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
amdgpu_ib_free(&ib, NULL);
dma_fence_put(f);
err0:
- if (!ring->is_mes_queue)
- amdgpu_device_wb_free(adev, index);
+ amdgpu_device_wb_free(adev, index);
return r;
}
--
2.48.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] drm/amdgpu: remove is_mes_queue flag
2025-03-12 17:56 [PATCH] drm/amdgpu: remove is_mes_queue flag Alex Deucher
@ 2025-03-18 13:15 ` Alex Deucher
2025-03-19 15:27 ` Christian König
0 siblings, 1 reply; 3+ messages in thread
From: Alex Deucher @ 2025-03-18 13:15 UTC (permalink / raw)
To: Alex Deucher; +Cc: amd-gfx
Ping?
On Wed, Mar 12, 2025 at 1:57 PM Alex Deucher <alexander.deucher@amd.com> wrote:
>
> This was leftover from MES bring up when we had MES
> user queues in the kernel. It's no longer used so
> remove it.
>
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 4 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 112 ++++++---------
> drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 14 --
> drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c | 22 +--
> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 2 +-
> drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 84 +++---------
> drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c | 143 ++++---------------
> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 67 ++-------
> drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c | 4 -
> drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c | 4 -
> drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c | 4 -
> drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c | 166 +++++++----------------
> drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c | 83 ++++--------
> drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c | 83 ++++--------
> drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c | 164 +++++++---------------
> 15 files changed, 259 insertions(+), 697 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
> index eac96a3d8c6c3..6efa0c5717dcf 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
> @@ -163,12 +163,12 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned int num_ibs,
> init_shadow = false;
> }
>
> - if (!ring->sched.ready && !ring->is_mes_queue) {
> + if (!ring->sched.ready) {
> dev_err(adev->dev, "couldn't schedule ib on ring <%s>\n", ring->name);
> return -EINVAL;
> }
>
> - if (vm && !job->vmid && !ring->is_mes_queue) {
> + if (vm && !job->vmid) {
> dev_err(adev->dev, "VM IB without ID\n");
> return -EINVAL;
> }
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
> index d55c8b7fdb596..ba8f2785865af 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
> @@ -187,14 +187,10 @@ void amdgpu_ring_undo(struct amdgpu_ring *ring)
> }
>
> #define amdgpu_ring_get_gpu_addr(ring, offset) \
> - (ring->is_mes_queue ? \
> - (ring->mes_ctx->meta_data_gpu_addr + offset) : \
> - (ring->adev->wb.gpu_addr + offset * 4))
> + (ring->adev->wb.gpu_addr + offset * 4)
>
> #define amdgpu_ring_get_cpu_addr(ring, offset) \
> - (ring->is_mes_queue ? \
> - (void *)((uint8_t *)(ring->mes_ctx->meta_data_ptr) + offset) : \
> - (&ring->adev->wb.wb[offset]))
> + (&ring->adev->wb.wb[offset])
>
> /**
> * amdgpu_ring_init - init driver ring struct.
> @@ -243,57 +239,42 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
> ring->sched_score = sched_score;
> ring->vmid_wait = dma_fence_get_stub();
>
> - if (!ring->is_mes_queue) {
> - ring->idx = adev->num_rings++;
> - adev->rings[ring->idx] = ring;
> - }
> + ring->idx = adev->num_rings++;
> + adev->rings[ring->idx] = ring;
>
> r = amdgpu_fence_driver_init_ring(ring);
> if (r)
> return r;
> }
>
> - if (ring->is_mes_queue) {
> - ring->rptr_offs = amdgpu_mes_ctx_get_offs(ring,
> - AMDGPU_MES_CTX_RPTR_OFFS);
> - ring->wptr_offs = amdgpu_mes_ctx_get_offs(ring,
> - AMDGPU_MES_CTX_WPTR_OFFS);
> - ring->fence_offs = amdgpu_mes_ctx_get_offs(ring,
> - AMDGPU_MES_CTX_FENCE_OFFS);
> - ring->trail_fence_offs = amdgpu_mes_ctx_get_offs(ring,
> - AMDGPU_MES_CTX_TRAIL_FENCE_OFFS);
> - ring->cond_exe_offs = amdgpu_mes_ctx_get_offs(ring,
> - AMDGPU_MES_CTX_COND_EXE_OFFS);
> - } else {
> - r = amdgpu_device_wb_get(adev, &ring->rptr_offs);
> - if (r) {
> - dev_err(adev->dev, "(%d) ring rptr_offs wb alloc failed\n", r);
> - return r;
> - }
> + r = amdgpu_device_wb_get(adev, &ring->rptr_offs);
> + if (r) {
> + dev_err(adev->dev, "(%d) ring rptr_offs wb alloc failed\n", r);
> + return r;
> + }
>
> - r = amdgpu_device_wb_get(adev, &ring->wptr_offs);
> - if (r) {
> - dev_err(adev->dev, "(%d) ring wptr_offs wb alloc failed\n", r);
> - return r;
> - }
> + r = amdgpu_device_wb_get(adev, &ring->wptr_offs);
> + if (r) {
> + dev_err(adev->dev, "(%d) ring wptr_offs wb alloc failed\n", r);
> + return r;
> + }
>
> - r = amdgpu_device_wb_get(adev, &ring->fence_offs);
> - if (r) {
> - dev_err(adev->dev, "(%d) ring fence_offs wb alloc failed\n", r);
> - return r;
> - }
> + r = amdgpu_device_wb_get(adev, &ring->fence_offs);
> + if (r) {
> + dev_err(adev->dev, "(%d) ring fence_offs wb alloc failed\n", r);
> + return r;
> + }
>
> - r = amdgpu_device_wb_get(adev, &ring->trail_fence_offs);
> - if (r) {
> - dev_err(adev->dev, "(%d) ring trail_fence_offs wb alloc failed\n", r);
> - return r;
> - }
> + r = amdgpu_device_wb_get(adev, &ring->trail_fence_offs);
> + if (r) {
> + dev_err(adev->dev, "(%d) ring trail_fence_offs wb alloc failed\n", r);
> + return r;
> + }
>
> - 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;
> - }
> + 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->fence_gpu_addr =
> @@ -353,18 +334,7 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
> ring->cached_rptr = 0;
>
> /* Allocate ring buffer */
> - if (ring->is_mes_queue) {
> - int offset = 0;
> -
> - BUG_ON(ring->ring_size > PAGE_SIZE*4);
> -
> - offset = amdgpu_mes_ctx_get_offs(ring,
> - AMDGPU_MES_CTX_RING_OFFS);
> - ring->gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
> - ring->ring = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
> - amdgpu_ring_clear_ring(ring);
> -
> - } else if (ring->ring_obj == NULL) {
> + if (ring->ring_obj == NULL) {
> r = amdgpu_bo_create_kernel(adev, ring->ring_size + ring->funcs->extra_dw, PAGE_SIZE,
> AMDGPU_GEM_DOMAIN_GTT,
> &ring->ring_obj,
> @@ -401,32 +371,26 @@ void amdgpu_ring_fini(struct amdgpu_ring *ring)
> {
>
> /* Not to finish a ring which is not initialized */
> - if (!(ring->adev) ||
> - (!ring->is_mes_queue && !(ring->adev->rings[ring->idx])))
> + if (!(ring->adev) || !(ring->adev->rings[ring->idx]))
> return;
>
> ring->sched.ready = false;
>
> - if (!ring->is_mes_queue) {
> - amdgpu_device_wb_free(ring->adev, ring->rptr_offs);
> - amdgpu_device_wb_free(ring->adev, ring->wptr_offs);
> + amdgpu_device_wb_free(ring->adev, ring->rptr_offs);
> + amdgpu_device_wb_free(ring->adev, ring->wptr_offs);
>
> - amdgpu_device_wb_free(ring->adev, ring->cond_exe_offs);
> - amdgpu_device_wb_free(ring->adev, ring->fence_offs);
> + amdgpu_device_wb_free(ring->adev, ring->cond_exe_offs);
> + amdgpu_device_wb_free(ring->adev, ring->fence_offs);
>
> - amdgpu_bo_free_kernel(&ring->ring_obj,
> - &ring->gpu_addr,
> - (void **)&ring->ring);
> - } else {
> - kfree(ring->fence_drv.fences);
> - }
> + amdgpu_bo_free_kernel(&ring->ring_obj,
> + &ring->gpu_addr,
> + (void **)&ring->ring);
>
> dma_fence_put(ring->vmid_wait);
> ring->vmid_wait = NULL;
> ring->me = 0;
>
> - if (!ring->is_mes_queue)
> - ring->adev->rings[ring->idx] = NULL;
> + ring->adev->rings[ring->idx] = NULL;
> }
>
> /**
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
> index d93d3047553b3..bea3747f9550b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
> @@ -306,11 +306,6 @@ struct amdgpu_ring {
> unsigned num_hw_submission;
> atomic_t *sched_score;
>
> - /* used for mes */
> - bool is_mes_queue;
> - uint32_t hw_queue_id;
> - struct amdgpu_mes_ctx_data *mes_ctx;
> -
> bool is_sw_ring;
> unsigned int entry_index;
> /* store the cached rptr to restore after reset */
> @@ -440,15 +435,6 @@ static inline void amdgpu_ring_patch_cond_exec(struct amdgpu_ring *ring,
> ring->ring[offset] = cur - offset;
> }
>
> -#define amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset) \
> - (ring->is_mes_queue && ring->mes_ctx ? \
> - (ring->mes_ctx->meta_data_gpu_addr + offset) : 0)
> -
> -#define amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset) \
> - (ring->is_mes_queue && ring->mes_ctx ? \
> - (void *)((uint8_t *)(ring->mes_ctx->meta_data_ptr) + offset) : \
> - NULL)
> -
> int amdgpu_ring_test_helper(struct amdgpu_ring *ring);
>
> void amdgpu_debugfs_ring_init(struct amdgpu_device *adev,
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
> index 3a4cef8960185..03c4c012a1508 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
> @@ -76,22 +76,14 @@ uint64_t amdgpu_sdma_get_csa_mc_addr(struct amdgpu_ring *ring,
> if (amdgpu_sriov_vf(adev) || vmid == 0 || !adev->gfx.mcbp)
> return 0;
>
> - if (ring->is_mes_queue) {
> - uint32_t offset = 0;
> + r = amdgpu_sdma_get_index_from_ring(ring, &index);
>
> - offset = offsetof(struct amdgpu_mes_ctx_meta_data,
> - sdma[ring->idx].sdma_meta_data);
> - csa_mc_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
> - } else {
> - r = amdgpu_sdma_get_index_from_ring(ring, &index);
> -
> - if (r || index > 31)
> - csa_mc_addr = 0;
> - else
> - csa_mc_addr = amdgpu_csa_vaddr(adev) +
> - AMDGPU_CSA_SDMA_OFFSET +
> - index * AMDGPU_CSA_SDMA_SIZE;
> - }
> + if (r || index > 31)
> + csa_mc_addr = 0;
> + else
> + csa_mc_addr = amdgpu_csa_vaddr(adev) +
> + AMDGPU_CSA_SDMA_OFFSET +
> + index * AMDGPU_CSA_SDMA_SIZE;
>
> return csa_mc_addr;
> }
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> index ef4fe2df8398c..ea18484d1d7a7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
> @@ -702,7 +702,7 @@ int amdgpu_vm_flush(struct amdgpu_ring *ring, struct amdgpu_job *job,
> if (spm_update_needed && adev->gfx.rlc.funcs->update_spm_vmid)
> adev->gfx.rlc.funcs->update_spm_vmid(adev, ring, job->vmid);
>
> - if (!ring->is_mes_queue && ring->funcs->emit_gds_switch &&
> + if (ring->funcs->emit_gds_switch &&
> gds_switch_needed) {
> amdgpu_ring_emit_gds_switch(ring, job->vmid, job->gds_base,
> job->gds_size, job->gws_base,
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
> index 2cf663d25881d..719c4aa90a0e0 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
> @@ -582,33 +582,18 @@ static int gfx_v11_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
>
> memset(&ib, 0, sizeof(ib));
>
> - if (ring->is_mes_queue) {
> - uint32_t padding, offset;
> -
> - offset = amdgpu_mes_ctx_get_offs(ring, AMDGPU_MES_CTX_IB_OFFS);
> - padding = amdgpu_mes_ctx_get_offs(ring,
> - AMDGPU_MES_CTX_PADDING_OFFS);
> -
> - ib.gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
> - ib.ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
> -
> - gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, padding);
> - cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, padding);
> - *cpu_ptr = cpu_to_le32(0xCAFEDEAD);
> - } else {
> - r = amdgpu_device_wb_get(adev, &index);
> - if (r)
> - return r;
> + r = amdgpu_device_wb_get(adev, &index);
> + if (r)
> + return r;
>
> - gpu_addr = adev->wb.gpu_addr + (index * 4);
> - adev->wb.wb[index] = cpu_to_le32(0xCAFEDEAD);
> - cpu_ptr = &adev->wb.wb[index];
> + gpu_addr = adev->wb.gpu_addr + (index * 4);
> + adev->wb.wb[index] = cpu_to_le32(0xCAFEDEAD);
> + cpu_ptr = &adev->wb.wb[index];
>
> - r = amdgpu_ib_get(adev, NULL, 20, AMDGPU_IB_POOL_DIRECT, &ib);
> - if (r) {
> - DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
> - goto err1;
> - }
> + r = amdgpu_ib_get(adev, NULL, 20, AMDGPU_IB_POOL_DIRECT, &ib);
> + if (r) {
> + DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
> + goto err1;
> }
>
> ib.ptr[0] = PACKET3(PACKET3_WRITE_DATA, 3);
> @@ -635,12 +620,10 @@ static int gfx_v11_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
> else
> r = -EINVAL;
> err2:
> - if (!ring->is_mes_queue)
> - amdgpu_ib_free(&ib, NULL);
> + amdgpu_ib_free(&ib, NULL);
> dma_fence_put(f);
> err1:
> - if (!ring->is_mes_queue)
> - amdgpu_device_wb_free(adev, index);
> + amdgpu_device_wb_free(adev, index);
> return r;
> }
>
> @@ -5760,10 +5743,6 @@ static void gfx_v11_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
> (!amdgpu_sriov_vf(ring->adev) && flags & AMDGPU_IB_PREEMPTED) ? true : false);
> }
>
> - if (ring->is_mes_queue)
> - /* inherit vmid from mqd */
> - control |= 0x400000;
> -
> amdgpu_ring_write(ring, header);
> BUG_ON(ib->gpu_addr & 0x3); /* Dword align */
> amdgpu_ring_write(ring,
> @@ -5783,10 +5762,6 @@ static void gfx_v11_0_ring_emit_ib_compute(struct amdgpu_ring *ring,
> unsigned vmid = AMDGPU_JOB_GET_VMID(job);
> u32 control = INDIRECT_BUFFER_VALID | ib->length_dw | (vmid << 24);
>
> - if (ring->is_mes_queue)
> - /* inherit vmid from mqd */
> - control |= 0x40000000;
> -
> /* Currently, there is a high possibility to get wave ID mismatch
> * between ME and GDS, leading to a hw deadlock, because ME generates
> * different wave IDs than the GDS expects. This situation happens
> @@ -5844,8 +5819,7 @@ static void gfx_v11_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr,
> amdgpu_ring_write(ring, upper_32_bits(addr));
> amdgpu_ring_write(ring, lower_32_bits(seq));
> amdgpu_ring_write(ring, upper_32_bits(seq));
> - amdgpu_ring_write(ring, ring->is_mes_queue ?
> - (ring->hw_queue_id | AMDGPU_FENCE_MES_QUEUE_FLAG) : 0);
> + amdgpu_ring_write(ring, 0);
> }
>
> static void gfx_v11_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
> @@ -5873,10 +5847,7 @@ static void gfx_v11_0_ring_invalidate_tlbs(struct amdgpu_ring *ring,
> static void gfx_v11_0_ring_emit_vm_flush(struct amdgpu_ring *ring,
> unsigned vmid, uint64_t pd_addr)
> {
> - if (ring->is_mes_queue)
> - gfx_v11_0_ring_invalidate_tlbs(ring, 0, 0, false, 0);
> - else
> - amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr);
> + amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr);
>
> /* compute doesn't have PFP */
> if (ring->funcs->type == AMDGPU_RING_TYPE_GFX) {
> @@ -6105,28 +6076,13 @@ static void gfx_v11_0_ring_emit_de_meta(struct amdgpu_ring *ring, bool resume)
> void *de_payload_cpu_addr;
> int cnt;
>
> - if (ring->is_mes_queue) {
> - offset = offsetof(struct amdgpu_mes_ctx_meta_data,
> - gfx[0].gfx_meta_data) +
> - offsetof(struct v10_gfx_meta_data, de_payload);
> - de_payload_gpu_addr =
> - amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
> - de_payload_cpu_addr =
> - amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
> -
> - offset = offsetof(struct amdgpu_mes_ctx_meta_data,
> - gfx[0].gds_backup) +
> - offsetof(struct v10_gfx_meta_data, de_payload);
> - gds_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
> - } else {
> - offset = offsetof(struct v10_gfx_meta_data, de_payload);
> - de_payload_gpu_addr = amdgpu_csa_vaddr(ring->adev) + offset;
> - de_payload_cpu_addr = adev->virt.csa_cpu_addr + offset;
> + offset = offsetof(struct v10_gfx_meta_data, de_payload);
> + de_payload_gpu_addr = amdgpu_csa_vaddr(ring->adev) + offset;
> + de_payload_cpu_addr = adev->virt.csa_cpu_addr + offset;
>
> - gds_addr = ALIGN(amdgpu_csa_vaddr(ring->adev) +
> - AMDGPU_CSA_SIZE - adev->gds.gds_size,
> - PAGE_SIZE);
> - }
> + gds_addr = ALIGN(amdgpu_csa_vaddr(ring->adev) +
> + AMDGPU_CSA_SIZE - adev->gds.gds_size,
> + PAGE_SIZE);
>
> de_payload.gds_backup_addrlo = lower_32_bits(gds_addr);
> de_payload.gds_backup_addrhi = upper_32_bits(gds_addr);
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
> index 60d8630a05c82..9db2becab68fe 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
> @@ -477,33 +477,18 @@ static int gfx_v12_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
>
> memset(&ib, 0, sizeof(ib));
>
> - if (ring->is_mes_queue) {
> - uint32_t padding, offset;
> -
> - offset = amdgpu_mes_ctx_get_offs(ring, AMDGPU_MES_CTX_IB_OFFS);
> - padding = amdgpu_mes_ctx_get_offs(ring,
> - AMDGPU_MES_CTX_PADDING_OFFS);
> -
> - ib.gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
> - ib.ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
> -
> - gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, padding);
> - cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, padding);
> - *cpu_ptr = cpu_to_le32(0xCAFEDEAD);
> - } else {
> - r = amdgpu_device_wb_get(adev, &index);
> - if (r)
> - return r;
> + r = amdgpu_device_wb_get(adev, &index);
> + if (r)
> + return r;
>
> - gpu_addr = adev->wb.gpu_addr + (index * 4);
> - adev->wb.wb[index] = cpu_to_le32(0xCAFEDEAD);
> - cpu_ptr = &adev->wb.wb[index];
> + gpu_addr = adev->wb.gpu_addr + (index * 4);
> + adev->wb.wb[index] = cpu_to_le32(0xCAFEDEAD);
> + cpu_ptr = &adev->wb.wb[index];
>
> - r = amdgpu_ib_get(adev, NULL, 16, AMDGPU_IB_POOL_DIRECT, &ib);
> - if (r) {
> - dev_err(adev->dev, "amdgpu: failed to get ib (%ld).\n", r);
> - goto err1;
> - }
> + r = amdgpu_ib_get(adev, NULL, 16, AMDGPU_IB_POOL_DIRECT, &ib);
> + if (r) {
> + dev_err(adev->dev, "amdgpu: failed to get ib (%ld).\n", r);
> + goto err1;
> }
>
> ib.ptr[0] = PACKET3(PACKET3_WRITE_DATA, 3);
> @@ -530,12 +515,10 @@ static int gfx_v12_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
> else
> r = -EINVAL;
> err2:
> - if (!ring->is_mes_queue)
> - amdgpu_ib_free(&ib, NULL);
> + amdgpu_ib_free(&ib, NULL);
> dma_fence_put(f);
> err1:
> - if (!ring->is_mes_queue)
> - amdgpu_device_wb_free(adev, index);
> + amdgpu_device_wb_free(adev, index);
> return r;
> }
>
> @@ -4283,45 +4266,17 @@ static u64 gfx_v12_0_ring_get_wptr_gfx(struct amdgpu_ring *ring)
> static void gfx_v12_0_ring_set_wptr_gfx(struct amdgpu_ring *ring)
> {
> struct amdgpu_device *adev = ring->adev;
> - uint32_t *wptr_saved;
> - uint32_t *is_queue_unmap;
> - uint64_t aggregated_db_index;
> - uint32_t mqd_size = adev->mqds[AMDGPU_HW_IP_GFX].mqd_size;
> - uint64_t wptr_tmp;
> -
> - if (ring->is_mes_queue) {
> - wptr_saved = (uint32_t *)(ring->mqd_ptr + mqd_size);
> - is_queue_unmap = (uint32_t *)(ring->mqd_ptr + mqd_size +
> - sizeof(uint32_t));
> - aggregated_db_index =
> - amdgpu_mes_get_aggregated_doorbell_index(adev,
> - ring->hw_prio);
> -
> - wptr_tmp = ring->wptr & ring->buf_mask;
> - atomic64_set((atomic64_t *)ring->wptr_cpu_addr, wptr_tmp);
> - *wptr_saved = wptr_tmp;
> - /* assume doorbell always being used by mes mapped queue */
> - if (*is_queue_unmap) {
> - WDOORBELL64(aggregated_db_index, wptr_tmp);
> - WDOORBELL64(ring->doorbell_index, wptr_tmp);
> - } else {
> - WDOORBELL64(ring->doorbell_index, wptr_tmp);
>
> - if (*is_queue_unmap)
> - WDOORBELL64(aggregated_db_index, wptr_tmp);
> - }
> + if (ring->use_doorbell) {
> + /* XXX check if swapping is necessary on BE */
> + atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
> + ring->wptr);
> + WDOORBELL64(ring->doorbell_index, ring->wptr);
> } else {
> - if (ring->use_doorbell) {
> - /* XXX check if swapping is necessary on BE */
> - atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
> - ring->wptr);
> - WDOORBELL64(ring->doorbell_index, ring->wptr);
> - } else {
> - WREG32_SOC15(GC, 0, regCP_RB0_WPTR,
> - lower_32_bits(ring->wptr));
> - WREG32_SOC15(GC, 0, regCP_RB0_WPTR_HI,
> - upper_32_bits(ring->wptr));
> - }
> + WREG32_SOC15(GC, 0, regCP_RB0_WPTR,
> + lower_32_bits(ring->wptr));
> + WREG32_SOC15(GC, 0, regCP_RB0_WPTR_HI,
> + upper_32_bits(ring->wptr));
> }
> }
>
> @@ -4346,42 +4301,14 @@ static u64 gfx_v12_0_ring_get_wptr_compute(struct amdgpu_ring *ring)
> static void gfx_v12_0_ring_set_wptr_compute(struct amdgpu_ring *ring)
> {
> struct amdgpu_device *adev = ring->adev;
> - uint32_t *wptr_saved;
> - uint32_t *is_queue_unmap;
> - uint64_t aggregated_db_index;
> - uint32_t mqd_size = adev->mqds[AMDGPU_HW_IP_COMPUTE].mqd_size;
> - uint64_t wptr_tmp;
> -
> - if (ring->is_mes_queue) {
> - wptr_saved = (uint32_t *)(ring->mqd_ptr + mqd_size);
> - is_queue_unmap = (uint32_t *)(ring->mqd_ptr + mqd_size +
> - sizeof(uint32_t));
> - aggregated_db_index =
> - amdgpu_mes_get_aggregated_doorbell_index(adev,
> - ring->hw_prio);
> -
> - wptr_tmp = ring->wptr & ring->buf_mask;
> - atomic64_set((atomic64_t *)ring->wptr_cpu_addr, wptr_tmp);
> - *wptr_saved = wptr_tmp;
> - /* assume doorbell always used by mes mapped queue */
> - if (*is_queue_unmap) {
> - WDOORBELL64(aggregated_db_index, wptr_tmp);
> - WDOORBELL64(ring->doorbell_index, wptr_tmp);
> - } else {
> - WDOORBELL64(ring->doorbell_index, wptr_tmp);
>
> - if (*is_queue_unmap)
> - WDOORBELL64(aggregated_db_index, wptr_tmp);
> - }
> + /* XXX check if swapping is necessary on BE */
> + if (ring->use_doorbell) {
> + atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
> + ring->wptr);
> + WDOORBELL64(ring->doorbell_index, ring->wptr);
> } else {
> - /* XXX check if swapping is necessary on BE */
> - if (ring->use_doorbell) {
> - atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
> - ring->wptr);
> - WDOORBELL64(ring->doorbell_index, ring->wptr);
> - } else {
> - BUG(); /* only DOORBELL method supported on gfx12 now */
> - }
> + BUG(); /* only DOORBELL method supported on gfx12 now */
> }
> }
>
> @@ -4428,10 +4355,6 @@ static void gfx_v12_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
>
> control |= ib->length_dw | (vmid << 24);
>
> - if (ring->is_mes_queue)
> - /* inherit vmid from mqd */
> - control |= 0x400000;
> -
> amdgpu_ring_write(ring, header);
> BUG_ON(ib->gpu_addr & 0x3); /* Dword align */
> amdgpu_ring_write(ring,
> @@ -4451,10 +4374,6 @@ static void gfx_v12_0_ring_emit_ib_compute(struct amdgpu_ring *ring,
> unsigned vmid = AMDGPU_JOB_GET_VMID(job);
> u32 control = INDIRECT_BUFFER_VALID | ib->length_dw | (vmid << 24);
>
> - if (ring->is_mes_queue)
> - /* inherit vmid from mqd */
> - control |= 0x40000000;
> -
> amdgpu_ring_write(ring, PACKET3(PACKET3_INDIRECT_BUFFER, 2));
> BUG_ON(ib->gpu_addr & 0x3); /* Dword align */
> amdgpu_ring_write(ring,
> @@ -4494,8 +4413,7 @@ static void gfx_v12_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr,
> amdgpu_ring_write(ring, upper_32_bits(addr));
> amdgpu_ring_write(ring, lower_32_bits(seq));
> amdgpu_ring_write(ring, upper_32_bits(seq));
> - amdgpu_ring_write(ring, ring->is_mes_queue ?
> - (ring->hw_queue_id | AMDGPU_FENCE_MES_QUEUE_FLAG) : 0);
> + amdgpu_ring_write(ring, 0);
> }
>
> static void gfx_v12_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
> @@ -4523,10 +4441,7 @@ static void gfx_v12_0_ring_invalidate_tlbs(struct amdgpu_ring *ring,
> static void gfx_v12_0_ring_emit_vm_flush(struct amdgpu_ring *ring,
> unsigned vmid, uint64_t pd_addr)
> {
> - if (ring->is_mes_queue)
> - gfx_v12_0_ring_invalidate_tlbs(ring, 0, 0, false, 0);
> - else
> - amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr);
> + amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr);
>
> /* compute doesn't have PFP */
> if (ring->funcs->type == AMDGPU_RING_TYPE_GFX) {
> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> index 734f2dd986290..f4dfa1418b740 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
> @@ -5472,16 +5472,8 @@ static void gfx_v9_0_ring_patch_ce_meta(struct amdgpu_ring *ring,
>
> payload_size = sizeof(struct v9_ce_ib_state);
>
> - if (ring->is_mes_queue) {
> - payload_offset = offsetof(struct amdgpu_mes_ctx_meta_data,
> - gfx[0].gfx_meta_data) +
> - offsetof(struct v9_gfx_meta_data, ce_payload);
> - ce_payload_cpu_addr =
> - amdgpu_mes_ctx_get_offs_cpu_addr(ring, payload_offset);
> - } else {
> - payload_offset = offsetof(struct v9_gfx_meta_data, ce_payload);
> - ce_payload_cpu_addr = adev->virt.csa_cpu_addr + payload_offset;
> - }
> + payload_offset = offsetof(struct v9_gfx_meta_data, ce_payload);
> + ce_payload_cpu_addr = adev->virt.csa_cpu_addr + payload_offset;
>
> if (offset + (payload_size >> 2) <= ring->buf_mask + 1) {
> memcpy((void *)&ring->ring[offset], ce_payload_cpu_addr, payload_size);
> @@ -5504,16 +5496,8 @@ static void gfx_v9_0_ring_patch_de_meta(struct amdgpu_ring *ring,
>
> payload_size = sizeof(struct v9_de_ib_state);
>
> - if (ring->is_mes_queue) {
> - payload_offset = offsetof(struct amdgpu_mes_ctx_meta_data,
> - gfx[0].gfx_meta_data) +
> - offsetof(struct v9_gfx_meta_data, de_payload);
> - de_payload_cpu_addr =
> - amdgpu_mes_ctx_get_offs_cpu_addr(ring, payload_offset);
> - } else {
> - payload_offset = offsetof(struct v9_gfx_meta_data, de_payload);
> - de_payload_cpu_addr = adev->virt.csa_cpu_addr + payload_offset;
> - }
> + payload_offset = offsetof(struct v9_gfx_meta_data, de_payload);
> + de_payload_cpu_addr = adev->virt.csa_cpu_addr + payload_offset;
>
> ((struct v9_de_ib_state *)de_payload_cpu_addr)->ib_completion_status =
> IB_COMPLETION_STATUS_PREEMPTED;
> @@ -5703,19 +5687,9 @@ static void gfx_v9_0_ring_emit_ce_meta(struct amdgpu_ring *ring, bool resume)
>
> cnt = (sizeof(ce_payload) >> 2) + 4 - 2;
>
> - if (ring->is_mes_queue) {
> - offset = offsetof(struct amdgpu_mes_ctx_meta_data,
> - gfx[0].gfx_meta_data) +
> - offsetof(struct v9_gfx_meta_data, ce_payload);
> - ce_payload_gpu_addr =
> - amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
> - ce_payload_cpu_addr =
> - amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
> - } else {
> - offset = offsetof(struct v9_gfx_meta_data, ce_payload);
> - ce_payload_gpu_addr = amdgpu_csa_vaddr(ring->adev) + offset;
> - ce_payload_cpu_addr = adev->virt.csa_cpu_addr + offset;
> - }
> + offset = offsetof(struct v9_gfx_meta_data, ce_payload);
> + ce_payload_gpu_addr = amdgpu_csa_vaddr(ring->adev) + offset;
> + ce_payload_cpu_addr = adev->virt.csa_cpu_addr + offset;
>
> amdgpu_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, cnt));
> amdgpu_ring_write(ring, (WRITE_DATA_ENGINE_SEL(2) |
> @@ -5801,28 +5775,13 @@ static void gfx_v9_0_ring_emit_de_meta(struct amdgpu_ring *ring, bool resume, bo
> void *de_payload_cpu_addr;
> int cnt;
>
> - if (ring->is_mes_queue) {
> - offset = offsetof(struct amdgpu_mes_ctx_meta_data,
> - gfx[0].gfx_meta_data) +
> - offsetof(struct v9_gfx_meta_data, de_payload);
> - de_payload_gpu_addr =
> - amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
> - de_payload_cpu_addr =
> - amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
> -
> - offset = offsetof(struct amdgpu_mes_ctx_meta_data,
> - gfx[0].gds_backup) +
> - offsetof(struct v9_gfx_meta_data, de_payload);
> - gds_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
> - } else {
> - offset = offsetof(struct v9_gfx_meta_data, de_payload);
> - de_payload_gpu_addr = amdgpu_csa_vaddr(ring->adev) + offset;
> - de_payload_cpu_addr = adev->virt.csa_cpu_addr + offset;
> + offset = offsetof(struct v9_gfx_meta_data, de_payload);
> + de_payload_gpu_addr = amdgpu_csa_vaddr(ring->adev) + offset;
> + de_payload_cpu_addr = adev->virt.csa_cpu_addr + offset;
>
> - gds_addr = ALIGN(amdgpu_csa_vaddr(ring->adev) +
> - AMDGPU_CSA_SIZE - adev->gds.gds_size,
> - PAGE_SIZE);
> - }
> + gds_addr = ALIGN(amdgpu_csa_vaddr(ring->adev) +
> + AMDGPU_CSA_SIZE - adev->gds.gds_size,
> + PAGE_SIZE);
>
> if (usegds) {
> de_payload.gds_backup_addrlo = lower_32_bits(gds_addr);
> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
> index 95d894a231fcf..8ae4c031162bc 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
> @@ -428,10 +428,6 @@ static void gmc_v10_0_emit_pasid_mapping(struct amdgpu_ring *ring, unsigned int
> struct amdgpu_device *adev = ring->adev;
> uint32_t reg;
>
> - /* MES fw manages IH_VMID_x_LUT updating */
> - if (ring->is_mes_queue)
> - return;
> -
> if (ring->vm_hub == AMDGPU_GFXHUB(0))
> reg = SOC15_REG_OFFSET(OSSSYS, 0, mmIH_VMID_0_LUT) + vmid;
> else
> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
> index ad099f136f84e..5c91d4445418c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
> @@ -393,10 +393,6 @@ static void gmc_v11_0_emit_pasid_mapping(struct amdgpu_ring *ring, unsigned int
> struct amdgpu_device *adev = ring->adev;
> uint32_t reg;
>
> - /* MES fw manages IH_VMID_x_LUT updating */
> - if (ring->is_mes_queue)
> - return;
> -
> if (ring->vm_hub == AMDGPU_GFXHUB(0))
> reg = SOC15_REG_OFFSET(OSSSYS, 0, regIH_VMID_0_LUT) + vmid;
> else
> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c
> index bf8d01da88154..0a1946c824118 100644
> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c
> @@ -413,10 +413,6 @@ static void gmc_v12_0_emit_pasid_mapping(struct amdgpu_ring *ring, unsigned vmid
> struct amdgpu_device *adev = ring->adev;
> uint32_t reg;
>
> - /* MES fw manages IH_VMID_x_LUT updating */
> - if (ring->is_mes_queue)
> - return;
> -
> if (ring->vm_hub == AMDGPU_GFXHUB(0))
> reg = SOC15_REG_OFFSET(OSSSYS, 0, regIH_VMID_0_LUT) + vmid;
> else
> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
> index 44a401870509f..712392671a3cf 100644
> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
> @@ -369,67 +369,36 @@ static uint64_t sdma_v5_0_ring_get_wptr(struct amdgpu_ring *ring)
> static void sdma_v5_0_ring_set_wptr(struct amdgpu_ring *ring)
> {
> struct amdgpu_device *adev = ring->adev;
> - uint32_t *wptr_saved;
> - uint32_t *is_queue_unmap;
> - uint64_t aggregated_db_index;
> - uint32_t mqd_size = adev->mqds[AMDGPU_HW_IP_DMA].mqd_size;
>
> DRM_DEBUG("Setting write pointer\n");
> - if (ring->is_mes_queue) {
> - wptr_saved = (uint32_t *)(ring->mqd_ptr + mqd_size);
> - is_queue_unmap = (uint32_t *)(ring->mqd_ptr + mqd_size +
> - sizeof(uint32_t));
> - aggregated_db_index =
> - amdgpu_mes_get_aggregated_doorbell_index(adev,
> - AMDGPU_MES_PRIORITY_LEVEL_NORMAL);
> -
> + if (ring->use_doorbell) {
> + DRM_DEBUG("Using doorbell -- "
> + "wptr_offs == 0x%08x "
> + "lower_32_bits(ring->wptr) << 2 == 0x%08x "
> + "upper_32_bits(ring->wptr) << 2 == 0x%08x\n",
> + ring->wptr_offs,
> + lower_32_bits(ring->wptr << 2),
> + upper_32_bits(ring->wptr << 2));
> + /* XXX check if swapping is necessary on BE */
> atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
> ring->wptr << 2);
> - *wptr_saved = ring->wptr << 2;
> - if (*is_queue_unmap) {
> - WDOORBELL64(aggregated_db_index, ring->wptr << 2);
> - DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
> - ring->doorbell_index, ring->wptr << 2);
> - WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
> - } else {
> - DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
> - ring->doorbell_index, ring->wptr << 2);
> - WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
> -
> - if (*is_queue_unmap)
> - WDOORBELL64(aggregated_db_index,
> - ring->wptr << 2);
> - }
> + DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
> + ring->doorbell_index, ring->wptr << 2);
> + WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
> } else {
> - if (ring->use_doorbell) {
> - DRM_DEBUG("Using doorbell -- "
> - "wptr_offs == 0x%08x "
> - "lower_32_bits(ring->wptr) << 2 == 0x%08x "
> - "upper_32_bits(ring->wptr) << 2 == 0x%08x\n",
> - ring->wptr_offs,
> - lower_32_bits(ring->wptr << 2),
> - upper_32_bits(ring->wptr << 2));
> - /* XXX check if swapping is necessary on BE */
> - atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
> - ring->wptr << 2);
> - DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
> - ring->doorbell_index, ring->wptr << 2);
> - WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
> - } else {
> - DRM_DEBUG("Not using doorbell -- "
> - "mmSDMA%i_GFX_RB_WPTR == 0x%08x "
> - "mmSDMA%i_GFX_RB_WPTR_HI == 0x%08x\n",
> - ring->me,
> - lower_32_bits(ring->wptr << 2),
> - ring->me,
> - upper_32_bits(ring->wptr << 2));
> - WREG32_SOC15_IP(GC, sdma_v5_0_get_reg_offset(adev,
> - ring->me, mmSDMA0_GFX_RB_WPTR),
> - lower_32_bits(ring->wptr << 2));
> - WREG32_SOC15_IP(GC, sdma_v5_0_get_reg_offset(adev,
> - ring->me, mmSDMA0_GFX_RB_WPTR_HI),
> - upper_32_bits(ring->wptr << 2));
> - }
> + DRM_DEBUG("Not using doorbell -- "
> + "mmSDMA%i_GFX_RB_WPTR == 0x%08x "
> + "mmSDMA%i_GFX_RB_WPTR_HI == 0x%08x\n",
> + ring->me,
> + lower_32_bits(ring->wptr << 2),
> + ring->me,
> + upper_32_bits(ring->wptr << 2));
> + WREG32_SOC15_IP(GC, sdma_v5_0_get_reg_offset(adev,
> + ring->me, mmSDMA0_GFX_RB_WPTR),
> + lower_32_bits(ring->wptr << 2));
> + WREG32_SOC15_IP(GC, sdma_v5_0_get_reg_offset(adev,
> + ring->me, mmSDMA0_GFX_RB_WPTR_HI),
> + upper_32_bits(ring->wptr << 2));
> }
> }
>
> @@ -575,11 +544,9 @@ static void sdma_v5_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 se
> }
>
> if (flags & AMDGPU_FENCE_FLAG_INT) {
> - uint32_t ctx = ring->is_mes_queue ?
> - (ring->hw_queue_id | AMDGPU_FENCE_MES_QUEUE_FLAG) : 0;
> /* generate an interrupt */
> amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_TRAP));
> - amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(ctx));
> + amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(0));
> }
> }
>
> @@ -1046,33 +1013,22 @@ static int sdma_v5_0_ring_test_ring(struct amdgpu_ring *ring)
> int r;
> u32 tmp;
> u64 gpu_addr;
> - volatile uint32_t *cpu_ptr = NULL;
>
> tmp = 0xCAFEDEAD;
>
> - if (ring->is_mes_queue) {
> - uint32_t offset = 0;
> - offset = amdgpu_mes_ctx_get_offs(ring,
> - AMDGPU_MES_CTX_PADDING_OFFS);
> - gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
> - cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
> - *cpu_ptr = tmp;
> - } else {
> - r = amdgpu_device_wb_get(adev, &index);
> - if (r) {
> - dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
> - return r;
> - }
> -
> - gpu_addr = adev->wb.gpu_addr + (index * 4);
> - adev->wb.wb[index] = cpu_to_le32(tmp);
> + r = amdgpu_device_wb_get(adev, &index);
> + if (r) {
> + dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
> + return r;
> }
>
> + gpu_addr = adev->wb.gpu_addr + (index * 4);
> + adev->wb.wb[index] = cpu_to_le32(tmp);
> +
> r = amdgpu_ring_alloc(ring, 20);
> if (r) {
> DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r);
> - if (!ring->is_mes_queue)
> - amdgpu_device_wb_free(adev, index);
> + amdgpu_device_wb_free(adev, index);
> return r;
> }
>
> @@ -1085,10 +1041,7 @@ static int sdma_v5_0_ring_test_ring(struct amdgpu_ring *ring)
> amdgpu_ring_commit(ring);
>
> for (i = 0; i < adev->usec_timeout; i++) {
> - if (ring->is_mes_queue)
> - tmp = le32_to_cpu(*cpu_ptr);
> - else
> - tmp = le32_to_cpu(adev->wb.wb[index]);
> + tmp = le32_to_cpu(adev->wb.wb[index]);
> if (tmp == 0xDEADBEEF)
> break;
> if (amdgpu_emu_mode == 1)
> @@ -1100,8 +1053,7 @@ static int sdma_v5_0_ring_test_ring(struct amdgpu_ring *ring)
> if (i >= adev->usec_timeout)
> r = -ETIMEDOUT;
>
> - if (!ring->is_mes_queue)
> - amdgpu_device_wb_free(adev, index);
> + amdgpu_device_wb_free(adev, index);
>
> return r;
> }
> @@ -1124,38 +1076,24 @@ static int sdma_v5_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
> long r;
> u32 tmp = 0;
> u64 gpu_addr;
> - volatile uint32_t *cpu_ptr = NULL;
>
> tmp = 0xCAFEDEAD;
> memset(&ib, 0, sizeof(ib));
>
> - if (ring->is_mes_queue) {
> - uint32_t offset = 0;
> - offset = amdgpu_mes_ctx_get_offs(ring, AMDGPU_MES_CTX_IB_OFFS);
> - ib.gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
> - ib.ptr = (void *)amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
> -
> - offset = amdgpu_mes_ctx_get_offs(ring,
> - AMDGPU_MES_CTX_PADDING_OFFS);
> - gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
> - cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
> - *cpu_ptr = tmp;
> - } else {
> - r = amdgpu_device_wb_get(adev, &index);
> - if (r) {
> - dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
> - return r;
> - }
> + r = amdgpu_device_wb_get(adev, &index);
> + if (r) {
> + dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
> + return r;
> + }
>
> - gpu_addr = adev->wb.gpu_addr + (index * 4);
> - adev->wb.wb[index] = cpu_to_le32(tmp);
> + gpu_addr = adev->wb.gpu_addr + (index * 4);
> + adev->wb.wb[index] = cpu_to_le32(tmp);
>
> - r = amdgpu_ib_get(adev, NULL, 256,
> - AMDGPU_IB_POOL_DIRECT, &ib);
> - if (r) {
> - DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
> - goto err0;
> - }
> + r = amdgpu_ib_get(adev, NULL, 256,
> + AMDGPU_IB_POOL_DIRECT, &ib);
> + if (r) {
> + DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
> + goto err0;
> }
>
> ib.ptr[0] = SDMA_PKT_HEADER_OP(SDMA_OP_WRITE) |
> @@ -1183,10 +1121,7 @@ static int sdma_v5_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
> goto err1;
> }
>
> - if (ring->is_mes_queue)
> - tmp = le32_to_cpu(*cpu_ptr);
> - else
> - tmp = le32_to_cpu(adev->wb.wb[index]);
> + tmp = le32_to_cpu(adev->wb.wb[index]);
>
> if (tmp == 0xDEADBEEF)
> r = 0;
> @@ -1197,8 +1132,7 @@ static int sdma_v5_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
> amdgpu_ib_free(&ib, NULL);
> dma_fence_put(f);
> err0:
> - if (!ring->is_mes_queue)
> - amdgpu_device_wb_free(adev, index);
> + amdgpu_device_wb_free(adev, index);
> return r;
> }
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c b/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
> index cb2a3e5592855..2c0bf2fc6d380 100644
> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
> @@ -394,11 +394,9 @@ static void sdma_v5_2_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 se
> }
>
> if ((flags & AMDGPU_FENCE_FLAG_INT)) {
> - uint32_t ctx = ring->is_mes_queue ?
> - (ring->hw_queue_id | AMDGPU_FENCE_MES_QUEUE_FLAG) : 0;
> /* generate an interrupt */
> amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_TRAP));
> - amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(ctx));
> + amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(0));
> }
> }
>
> @@ -903,33 +901,22 @@ static int sdma_v5_2_ring_test_ring(struct amdgpu_ring *ring)
> int r;
> u32 tmp;
> u64 gpu_addr;
> - volatile uint32_t *cpu_ptr = NULL;
>
> tmp = 0xCAFEDEAD;
>
> - if (ring->is_mes_queue) {
> - uint32_t offset = 0;
> - offset = amdgpu_mes_ctx_get_offs(ring,
> - AMDGPU_MES_CTX_PADDING_OFFS);
> - gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
> - cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
> - *cpu_ptr = tmp;
> - } else {
> - r = amdgpu_device_wb_get(adev, &index);
> - if (r) {
> - dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
> - return r;
> - }
> -
> - gpu_addr = adev->wb.gpu_addr + (index * 4);
> - adev->wb.wb[index] = cpu_to_le32(tmp);
> + r = amdgpu_device_wb_get(adev, &index);
> + if (r) {
> + dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
> + return r;
> }
>
> + gpu_addr = adev->wb.gpu_addr + (index * 4);
> + adev->wb.wb[index] = cpu_to_le32(tmp);
> +
> r = amdgpu_ring_alloc(ring, 20);
> if (r) {
> DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r);
> - if (!ring->is_mes_queue)
> - amdgpu_device_wb_free(adev, index);
> + amdgpu_device_wb_free(adev, index);
> return r;
> }
>
> @@ -942,10 +929,7 @@ static int sdma_v5_2_ring_test_ring(struct amdgpu_ring *ring)
> amdgpu_ring_commit(ring);
>
> for (i = 0; i < adev->usec_timeout; i++) {
> - if (ring->is_mes_queue)
> - tmp = le32_to_cpu(*cpu_ptr);
> - else
> - tmp = le32_to_cpu(adev->wb.wb[index]);
> + tmp = le32_to_cpu(adev->wb.wb[index]);
> if (tmp == 0xDEADBEEF)
> break;
> if (amdgpu_emu_mode == 1)
> @@ -957,8 +941,7 @@ static int sdma_v5_2_ring_test_ring(struct amdgpu_ring *ring)
> if (i >= adev->usec_timeout)
> r = -ETIMEDOUT;
>
> - if (!ring->is_mes_queue)
> - amdgpu_device_wb_free(adev, index);
> + amdgpu_device_wb_free(adev, index);
>
> return r;
> }
> @@ -981,37 +964,23 @@ static int sdma_v5_2_ring_test_ib(struct amdgpu_ring *ring, long timeout)
> long r;
> u32 tmp = 0;
> u64 gpu_addr;
> - volatile uint32_t *cpu_ptr = NULL;
>
> tmp = 0xCAFEDEAD;
> memset(&ib, 0, sizeof(ib));
>
> - if (ring->is_mes_queue) {
> - uint32_t offset = 0;
> - offset = amdgpu_mes_ctx_get_offs(ring, AMDGPU_MES_CTX_IB_OFFS);
> - ib.gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
> - ib.ptr = (void *)amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
> -
> - offset = amdgpu_mes_ctx_get_offs(ring,
> - AMDGPU_MES_CTX_PADDING_OFFS);
> - gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
> - cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
> - *cpu_ptr = tmp;
> - } else {
> - r = amdgpu_device_wb_get(adev, &index);
> - if (r) {
> - dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
> - return r;
> - }
> + r = amdgpu_device_wb_get(adev, &index);
> + if (r) {
> + dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
> + return r;
> + }
>
> - gpu_addr = adev->wb.gpu_addr + (index * 4);
> - adev->wb.wb[index] = cpu_to_le32(tmp);
> + gpu_addr = adev->wb.gpu_addr + (index * 4);
> + adev->wb.wb[index] = cpu_to_le32(tmp);
>
> - r = amdgpu_ib_get(adev, NULL, 256, AMDGPU_IB_POOL_DIRECT, &ib);
> - if (r) {
> - DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
> - goto err0;
> - }
> + r = amdgpu_ib_get(adev, NULL, 256, AMDGPU_IB_POOL_DIRECT, &ib);
> + if (r) {
> + DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
> + goto err0;
> }
>
> ib.ptr[0] = SDMA_PKT_HEADER_OP(SDMA_OP_WRITE) |
> @@ -1039,10 +1008,7 @@ static int sdma_v5_2_ring_test_ib(struct amdgpu_ring *ring, long timeout)
> goto err1;
> }
>
> - if (ring->is_mes_queue)
> - tmp = le32_to_cpu(*cpu_ptr);
> - else
> - tmp = le32_to_cpu(adev->wb.wb[index]);
> + tmp = le32_to_cpu(adev->wb.wb[index]);
>
> if (tmp == 0xDEADBEEF)
> r = 0;
> @@ -1053,8 +1019,7 @@ static int sdma_v5_2_ring_test_ib(struct amdgpu_ring *ring, long timeout)
> amdgpu_ib_free(&ib, NULL);
> dma_fence_put(f);
> err0:
> - if (!ring->is_mes_queue)
> - amdgpu_device_wb_free(adev, index);
> + amdgpu_device_wb_free(adev, index);
> return r;
> }
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
> index f1a02ce844e0f..d0f7874730f06 100644
> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
> @@ -377,11 +377,9 @@ static void sdma_v6_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 se
> }
>
> if (flags & AMDGPU_FENCE_FLAG_INT) {
> - uint32_t ctx = ring->is_mes_queue ?
> - (ring->hw_queue_id | AMDGPU_FENCE_MES_QUEUE_FLAG) : 0;
> /* generate an interrupt */
> amdgpu_ring_write(ring, SDMA_PKT_COPY_LINEAR_HEADER_OP(SDMA_OP_TRAP));
> - amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(ctx));
> + amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(0));
> }
> }
>
> @@ -921,33 +919,22 @@ static int sdma_v6_0_ring_test_ring(struct amdgpu_ring *ring)
> int r;
> u32 tmp;
> u64 gpu_addr;
> - volatile uint32_t *cpu_ptr = NULL;
>
> tmp = 0xCAFEDEAD;
>
> - if (ring->is_mes_queue) {
> - uint32_t offset = 0;
> - offset = amdgpu_mes_ctx_get_offs(ring,
> - AMDGPU_MES_CTX_PADDING_OFFS);
> - gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
> - cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
> - *cpu_ptr = tmp;
> - } else {
> - r = amdgpu_device_wb_get(adev, &index);
> - if (r) {
> - dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
> - return r;
> - }
> -
> - gpu_addr = adev->wb.gpu_addr + (index * 4);
> - adev->wb.wb[index] = cpu_to_le32(tmp);
> + r = amdgpu_device_wb_get(adev, &index);
> + if (r) {
> + dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
> + return r;
> }
>
> + gpu_addr = adev->wb.gpu_addr + (index * 4);
> + adev->wb.wb[index] = cpu_to_le32(tmp);
> +
> r = amdgpu_ring_alloc(ring, 5);
> if (r) {
> DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r);
> - if (!ring->is_mes_queue)
> - amdgpu_device_wb_free(adev, index);
> + amdgpu_device_wb_free(adev, index);
> return r;
> }
>
> @@ -960,10 +947,7 @@ static int sdma_v6_0_ring_test_ring(struct amdgpu_ring *ring)
> amdgpu_ring_commit(ring);
>
> for (i = 0; i < adev->usec_timeout; i++) {
> - if (ring->is_mes_queue)
> - tmp = le32_to_cpu(*cpu_ptr);
> - else
> - tmp = le32_to_cpu(adev->wb.wb[index]);
> + tmp = le32_to_cpu(adev->wb.wb[index]);
> if (tmp == 0xDEADBEEF)
> break;
> if (amdgpu_emu_mode == 1)
> @@ -975,8 +959,7 @@ static int sdma_v6_0_ring_test_ring(struct amdgpu_ring *ring)
> if (i >= adev->usec_timeout)
> r = -ETIMEDOUT;
>
> - if (!ring->is_mes_queue)
> - amdgpu_device_wb_free(adev, index);
> + amdgpu_device_wb_free(adev, index);
>
> return r;
> }
> @@ -999,37 +982,23 @@ static int sdma_v6_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
> long r;
> u32 tmp = 0;
> u64 gpu_addr;
> - volatile uint32_t *cpu_ptr = NULL;
>
> tmp = 0xCAFEDEAD;
> memset(&ib, 0, sizeof(ib));
>
> - if (ring->is_mes_queue) {
> - uint32_t offset = 0;
> - offset = amdgpu_mes_ctx_get_offs(ring, AMDGPU_MES_CTX_IB_OFFS);
> - ib.gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
> - ib.ptr = (void *)amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
> -
> - offset = amdgpu_mes_ctx_get_offs(ring,
> - AMDGPU_MES_CTX_PADDING_OFFS);
> - gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
> - cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
> - *cpu_ptr = tmp;
> - } else {
> - r = amdgpu_device_wb_get(adev, &index);
> - if (r) {
> - dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
> - return r;
> - }
> + r = amdgpu_device_wb_get(adev, &index);
> + if (r) {
> + dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
> + return r;
> + }
>
> - gpu_addr = adev->wb.gpu_addr + (index * 4);
> - adev->wb.wb[index] = cpu_to_le32(tmp);
> + gpu_addr = adev->wb.gpu_addr + (index * 4);
> + adev->wb.wb[index] = cpu_to_le32(tmp);
>
> - r = amdgpu_ib_get(adev, NULL, 256, AMDGPU_IB_POOL_DIRECT, &ib);
> - if (r) {
> - DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
> - goto err0;
> - }
> + r = amdgpu_ib_get(adev, NULL, 256, AMDGPU_IB_POOL_DIRECT, &ib);
> + if (r) {
> + DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
> + goto err0;
> }
>
> ib.ptr[0] = SDMA_PKT_COPY_LINEAR_HEADER_OP(SDMA_OP_WRITE) |
> @@ -1057,10 +1026,7 @@ static int sdma_v6_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
> goto err1;
> }
>
> - if (ring->is_mes_queue)
> - tmp = le32_to_cpu(*cpu_ptr);
> - else
> - tmp = le32_to_cpu(adev->wb.wb[index]);
> + tmp = le32_to_cpu(adev->wb.wb[index]);
>
> if (tmp == 0xDEADBEEF)
> r = 0;
> @@ -1071,8 +1037,7 @@ static int sdma_v6_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
> amdgpu_ib_free(&ib, NULL);
> dma_fence_put(f);
> err0:
> - if (!ring->is_mes_queue)
> - amdgpu_device_wb_free(adev, index);
> + amdgpu_device_wb_free(adev, index);
> return r;
> }
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
> index f10de8e2fcae2..7a788da2ef5d7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
> @@ -205,66 +205,39 @@ static uint64_t sdma_v7_0_ring_get_wptr(struct amdgpu_ring *ring)
> static void sdma_v7_0_ring_set_wptr(struct amdgpu_ring *ring)
> {
> struct amdgpu_device *adev = ring->adev;
> - uint32_t *wptr_saved;
> - uint32_t *is_queue_unmap;
> - uint64_t aggregated_db_index;
> - uint32_t mqd_size = adev->mqds[AMDGPU_HW_IP_DMA].mqd_size;
>
> DRM_DEBUG("Setting write pointer\n");
>
> - if (ring->is_mes_queue) {
> - wptr_saved = (uint32_t *)(ring->mqd_ptr + mqd_size);
> - is_queue_unmap = (uint32_t *)(ring->mqd_ptr + mqd_size +
> - sizeof(uint32_t));
> - aggregated_db_index =
> - amdgpu_mes_get_aggregated_doorbell_index(adev,
> - ring->hw_prio);
> -
> + if (ring->use_doorbell) {
> + DRM_DEBUG("Using doorbell -- "
> + "wptr_offs == 0x%08x "
> + "lower_32_bits(ring->wptr) << 2 == 0x%08x "
> + "upper_32_bits(ring->wptr) << 2 == 0x%08x\n",
> + ring->wptr_offs,
> + lower_32_bits(ring->wptr << 2),
> + upper_32_bits(ring->wptr << 2));
> + /* XXX check if swapping is necessary on BE */
> atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
> ring->wptr << 2);
> - *wptr_saved = ring->wptr << 2;
> - if (*is_queue_unmap) {
> - WDOORBELL64(aggregated_db_index, ring->wptr << 2);
> - DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
> - ring->doorbell_index, ring->wptr << 2);
> - WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
> - } else {
> - DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
> - ring->doorbell_index, ring->wptr << 2);
> - WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
> - }
> + DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
> + ring->doorbell_index, ring->wptr << 2);
> + WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
> } else {
> - if (ring->use_doorbell) {
> - DRM_DEBUG("Using doorbell -- "
> - "wptr_offs == 0x%08x "
> - "lower_32_bits(ring->wptr) << 2 == 0x%08x "
> - "upper_32_bits(ring->wptr) << 2 == 0x%08x\n",
> - ring->wptr_offs,
> - lower_32_bits(ring->wptr << 2),
> - upper_32_bits(ring->wptr << 2));
> - /* XXX check if swapping is necessary on BE */
> - atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
> - ring->wptr << 2);
> - DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
> - ring->doorbell_index, ring->wptr << 2);
> - WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
> - } else {
> - DRM_DEBUG("Not using doorbell -- "
> - "regSDMA%i_GFX_RB_WPTR == 0x%08x "
> - "regSDMA%i_GFX_RB_WPTR_HI == 0x%08x\n",
> - ring->me,
> - lower_32_bits(ring->wptr << 2),
> - ring->me,
> - upper_32_bits(ring->wptr << 2));
> - WREG32_SOC15_IP(GC, sdma_v7_0_get_reg_offset(adev,
> - ring->me,
> - regSDMA0_QUEUE0_RB_WPTR),
> - lower_32_bits(ring->wptr << 2));
> - WREG32_SOC15_IP(GC, sdma_v7_0_get_reg_offset(adev,
> - ring->me,
> - regSDMA0_QUEUE0_RB_WPTR_HI),
> - upper_32_bits(ring->wptr << 2));
> - }
> + DRM_DEBUG("Not using doorbell -- "
> + "regSDMA%i_GFX_RB_WPTR == 0x%08x "
> + "regSDMA%i_GFX_RB_WPTR_HI == 0x%08x\n",
> + ring->me,
> + lower_32_bits(ring->wptr << 2),
> + ring->me,
> + upper_32_bits(ring->wptr << 2));
> + WREG32_SOC15_IP(GC, sdma_v7_0_get_reg_offset(adev,
> + ring->me,
> + regSDMA0_QUEUE0_RB_WPTR),
> + lower_32_bits(ring->wptr << 2));
> + WREG32_SOC15_IP(GC, sdma_v7_0_get_reg_offset(adev,
> + ring->me,
> + regSDMA0_QUEUE0_RB_WPTR_HI),
> + upper_32_bits(ring->wptr << 2));
> }
> }
>
> @@ -408,11 +381,9 @@ static void sdma_v7_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 se
> }
>
> if (flags & AMDGPU_FENCE_FLAG_INT) {
> - uint32_t ctx = ring->is_mes_queue ?
> - (ring->hw_queue_id | AMDGPU_FENCE_MES_QUEUE_FLAG) : 0;
> /* generate an interrupt */
> amdgpu_ring_write(ring, SDMA_PKT_COPY_LINEAR_HEADER_OP(SDMA_OP_TRAP));
> - amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(ctx));
> + amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(0));
> }
> }
>
> @@ -965,33 +936,22 @@ static int sdma_v7_0_ring_test_ring(struct amdgpu_ring *ring)
> int r;
> u32 tmp;
> u64 gpu_addr;
> - volatile uint32_t *cpu_ptr = NULL;
>
> tmp = 0xCAFEDEAD;
>
> - if (ring->is_mes_queue) {
> - uint32_t offset = 0;
> - offset = amdgpu_mes_ctx_get_offs(ring,
> - AMDGPU_MES_CTX_PADDING_OFFS);
> - gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
> - cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
> - *cpu_ptr = tmp;
> - } else {
> - r = amdgpu_device_wb_get(adev, &index);
> - if (r) {
> - dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
> - return r;
> - }
> -
> - gpu_addr = adev->wb.gpu_addr + (index * 4);
> - adev->wb.wb[index] = cpu_to_le32(tmp);
> + r = amdgpu_device_wb_get(adev, &index);
> + if (r) {
> + dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
> + return r;
> }
>
> + gpu_addr = adev->wb.gpu_addr + (index * 4);
> + adev->wb.wb[index] = cpu_to_le32(tmp);
> +
> r = amdgpu_ring_alloc(ring, 5);
> if (r) {
> DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r);
> - if (!ring->is_mes_queue)
> - amdgpu_device_wb_free(adev, index);
> + amdgpu_device_wb_free(adev, index);
> return r;
> }
>
> @@ -1004,10 +964,7 @@ static int sdma_v7_0_ring_test_ring(struct amdgpu_ring *ring)
> amdgpu_ring_commit(ring);
>
> for (i = 0; i < adev->usec_timeout; i++) {
> - if (ring->is_mes_queue)
> - tmp = le32_to_cpu(*cpu_ptr);
> - else
> - tmp = le32_to_cpu(adev->wb.wb[index]);
> + tmp = le32_to_cpu(adev->wb.wb[index]);
> if (tmp == 0xDEADBEEF)
> break;
> if (amdgpu_emu_mode == 1)
> @@ -1019,8 +976,7 @@ static int sdma_v7_0_ring_test_ring(struct amdgpu_ring *ring)
> if (i >= adev->usec_timeout)
> r = -ETIMEDOUT;
>
> - if (!ring->is_mes_queue)
> - amdgpu_device_wb_free(adev, index);
> + amdgpu_device_wb_free(adev, index);
>
> return r;
> }
> @@ -1043,37 +999,23 @@ static int sdma_v7_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
> long r;
> u32 tmp = 0;
> u64 gpu_addr;
> - volatile uint32_t *cpu_ptr = NULL;
>
> tmp = 0xCAFEDEAD;
> memset(&ib, 0, sizeof(ib));
>
> - if (ring->is_mes_queue) {
> - uint32_t offset = 0;
> - offset = amdgpu_mes_ctx_get_offs(ring, AMDGPU_MES_CTX_IB_OFFS);
> - ib.gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
> - ib.ptr = (void *)amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
> -
> - offset = amdgpu_mes_ctx_get_offs(ring,
> - AMDGPU_MES_CTX_PADDING_OFFS);
> - gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
> - cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
> - *cpu_ptr = tmp;
> - } else {
> - r = amdgpu_device_wb_get(adev, &index);
> - if (r) {
> - dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
> - return r;
> - }
> + r = amdgpu_device_wb_get(adev, &index);
> + if (r) {
> + dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
> + return r;
> + }
>
> - gpu_addr = adev->wb.gpu_addr + (index * 4);
> - adev->wb.wb[index] = cpu_to_le32(tmp);
> + gpu_addr = adev->wb.gpu_addr + (index * 4);
> + adev->wb.wb[index] = cpu_to_le32(tmp);
>
> - r = amdgpu_ib_get(adev, NULL, 256, AMDGPU_IB_POOL_DIRECT, &ib);
> - if (r) {
> - DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
> - goto err0;
> - }
> + r = amdgpu_ib_get(adev, NULL, 256, AMDGPU_IB_POOL_DIRECT, &ib);
> + if (r) {
> + DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
> + goto err0;
> }
>
> ib.ptr[0] = SDMA_PKT_COPY_LINEAR_HEADER_OP(SDMA_OP_WRITE) |
> @@ -1101,10 +1043,7 @@ static int sdma_v7_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
> goto err1;
> }
>
> - if (ring->is_mes_queue)
> - tmp = le32_to_cpu(*cpu_ptr);
> - else
> - tmp = le32_to_cpu(adev->wb.wb[index]);
> + tmp = le32_to_cpu(adev->wb.wb[index]);
>
> if (tmp == 0xDEADBEEF)
> r = 0;
> @@ -1115,8 +1054,7 @@ static int sdma_v7_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
> amdgpu_ib_free(&ib, NULL);
> dma_fence_put(f);
> err0:
> - if (!ring->is_mes_queue)
> - amdgpu_device_wb_free(adev, index);
> + amdgpu_device_wb_free(adev, index);
> return r;
> }
>
> --
> 2.48.1
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] drm/amdgpu: remove is_mes_queue flag
2025-03-18 13:15 ` Alex Deucher
@ 2025-03-19 15:27 ` Christian König
0 siblings, 0 replies; 3+ messages in thread
From: Christian König @ 2025-03-19 15:27 UTC (permalink / raw)
To: Alex Deucher, Alex Deucher; +Cc: amd-gfx
Sorry missed that one, Acked-by: Christian König <christian.koenig@amd.com>
Regards,
Christian.
Am 18.03.25 um 14:15 schrieb Alex Deucher:
> Ping?
>
> On Wed, Mar 12, 2025 at 1:57 PM Alex Deucher <alexander.deucher@amd.com> wrote:
>> This was leftover from MES bring up when we had MES
>> user queues in the kernel. It's no longer used so
>> remove it.
>>
>> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
>> ---
>> drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 4 +-
>> drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 112 ++++++---------
>> drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 14 --
>> drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c | 22 +--
>> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 2 +-
>> drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 84 +++---------
>> drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c | 143 ++++---------------
>> drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 67 ++-------
>> drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c | 4 -
>> drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c | 4 -
>> drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c | 4 -
>> drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c | 166 +++++++----------------
>> drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c | 83 ++++--------
>> drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c | 83 ++++--------
>> drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c | 164 +++++++---------------
>> 15 files changed, 259 insertions(+), 697 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
>> index eac96a3d8c6c3..6efa0c5717dcf 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
>> @@ -163,12 +163,12 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned int num_ibs,
>> init_shadow = false;
>> }
>>
>> - if (!ring->sched.ready && !ring->is_mes_queue) {
>> + if (!ring->sched.ready) {
>> dev_err(adev->dev, "couldn't schedule ib on ring <%s>\n", ring->name);
>> return -EINVAL;
>> }
>>
>> - if (vm && !job->vmid && !ring->is_mes_queue) {
>> + if (vm && !job->vmid) {
>> dev_err(adev->dev, "VM IB without ID\n");
>> return -EINVAL;
>> }
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
>> index d55c8b7fdb596..ba8f2785865af 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
>> @@ -187,14 +187,10 @@ void amdgpu_ring_undo(struct amdgpu_ring *ring)
>> }
>>
>> #define amdgpu_ring_get_gpu_addr(ring, offset) \
>> - (ring->is_mes_queue ? \
>> - (ring->mes_ctx->meta_data_gpu_addr + offset) : \
>> - (ring->adev->wb.gpu_addr + offset * 4))
>> + (ring->adev->wb.gpu_addr + offset * 4)
>>
>> #define amdgpu_ring_get_cpu_addr(ring, offset) \
>> - (ring->is_mes_queue ? \
>> - (void *)((uint8_t *)(ring->mes_ctx->meta_data_ptr) + offset) : \
>> - (&ring->adev->wb.wb[offset]))
>> + (&ring->adev->wb.wb[offset])
>>
>> /**
>> * amdgpu_ring_init - init driver ring struct.
>> @@ -243,57 +239,42 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
>> ring->sched_score = sched_score;
>> ring->vmid_wait = dma_fence_get_stub();
>>
>> - if (!ring->is_mes_queue) {
>> - ring->idx = adev->num_rings++;
>> - adev->rings[ring->idx] = ring;
>> - }
>> + ring->idx = adev->num_rings++;
>> + adev->rings[ring->idx] = ring;
>>
>> r = amdgpu_fence_driver_init_ring(ring);
>> if (r)
>> return r;
>> }
>>
>> - if (ring->is_mes_queue) {
>> - ring->rptr_offs = amdgpu_mes_ctx_get_offs(ring,
>> - AMDGPU_MES_CTX_RPTR_OFFS);
>> - ring->wptr_offs = amdgpu_mes_ctx_get_offs(ring,
>> - AMDGPU_MES_CTX_WPTR_OFFS);
>> - ring->fence_offs = amdgpu_mes_ctx_get_offs(ring,
>> - AMDGPU_MES_CTX_FENCE_OFFS);
>> - ring->trail_fence_offs = amdgpu_mes_ctx_get_offs(ring,
>> - AMDGPU_MES_CTX_TRAIL_FENCE_OFFS);
>> - ring->cond_exe_offs = amdgpu_mes_ctx_get_offs(ring,
>> - AMDGPU_MES_CTX_COND_EXE_OFFS);
>> - } else {
>> - r = amdgpu_device_wb_get(adev, &ring->rptr_offs);
>> - if (r) {
>> - dev_err(adev->dev, "(%d) ring rptr_offs wb alloc failed\n", r);
>> - return r;
>> - }
>> + r = amdgpu_device_wb_get(adev, &ring->rptr_offs);
>> + if (r) {
>> + dev_err(adev->dev, "(%d) ring rptr_offs wb alloc failed\n", r);
>> + return r;
>> + }
>>
>> - r = amdgpu_device_wb_get(adev, &ring->wptr_offs);
>> - if (r) {
>> - dev_err(adev->dev, "(%d) ring wptr_offs wb alloc failed\n", r);
>> - return r;
>> - }
>> + r = amdgpu_device_wb_get(adev, &ring->wptr_offs);
>> + if (r) {
>> + dev_err(adev->dev, "(%d) ring wptr_offs wb alloc failed\n", r);
>> + return r;
>> + }
>>
>> - r = amdgpu_device_wb_get(adev, &ring->fence_offs);
>> - if (r) {
>> - dev_err(adev->dev, "(%d) ring fence_offs wb alloc failed\n", r);
>> - return r;
>> - }
>> + r = amdgpu_device_wb_get(adev, &ring->fence_offs);
>> + if (r) {
>> + dev_err(adev->dev, "(%d) ring fence_offs wb alloc failed\n", r);
>> + return r;
>> + }
>>
>> - r = amdgpu_device_wb_get(adev, &ring->trail_fence_offs);
>> - if (r) {
>> - dev_err(adev->dev, "(%d) ring trail_fence_offs wb alloc failed\n", r);
>> - return r;
>> - }
>> + r = amdgpu_device_wb_get(adev, &ring->trail_fence_offs);
>> + if (r) {
>> + dev_err(adev->dev, "(%d) ring trail_fence_offs wb alloc failed\n", r);
>> + return r;
>> + }
>>
>> - 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;
>> - }
>> + 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->fence_gpu_addr =
>> @@ -353,18 +334,7 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
>> ring->cached_rptr = 0;
>>
>> /* Allocate ring buffer */
>> - if (ring->is_mes_queue) {
>> - int offset = 0;
>> -
>> - BUG_ON(ring->ring_size > PAGE_SIZE*4);
>> -
>> - offset = amdgpu_mes_ctx_get_offs(ring,
>> - AMDGPU_MES_CTX_RING_OFFS);
>> - ring->gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
>> - ring->ring = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
>> - amdgpu_ring_clear_ring(ring);
>> -
>> - } else if (ring->ring_obj == NULL) {
>> + if (ring->ring_obj == NULL) {
>> r = amdgpu_bo_create_kernel(adev, ring->ring_size + ring->funcs->extra_dw, PAGE_SIZE,
>> AMDGPU_GEM_DOMAIN_GTT,
>> &ring->ring_obj,
>> @@ -401,32 +371,26 @@ void amdgpu_ring_fini(struct amdgpu_ring *ring)
>> {
>>
>> /* Not to finish a ring which is not initialized */
>> - if (!(ring->adev) ||
>> - (!ring->is_mes_queue && !(ring->adev->rings[ring->idx])))
>> + if (!(ring->adev) || !(ring->adev->rings[ring->idx]))
>> return;
>>
>> ring->sched.ready = false;
>>
>> - if (!ring->is_mes_queue) {
>> - amdgpu_device_wb_free(ring->adev, ring->rptr_offs);
>> - amdgpu_device_wb_free(ring->adev, ring->wptr_offs);
>> + amdgpu_device_wb_free(ring->adev, ring->rptr_offs);
>> + amdgpu_device_wb_free(ring->adev, ring->wptr_offs);
>>
>> - amdgpu_device_wb_free(ring->adev, ring->cond_exe_offs);
>> - amdgpu_device_wb_free(ring->adev, ring->fence_offs);
>> + amdgpu_device_wb_free(ring->adev, ring->cond_exe_offs);
>> + amdgpu_device_wb_free(ring->adev, ring->fence_offs);
>>
>> - amdgpu_bo_free_kernel(&ring->ring_obj,
>> - &ring->gpu_addr,
>> - (void **)&ring->ring);
>> - } else {
>> - kfree(ring->fence_drv.fences);
>> - }
>> + amdgpu_bo_free_kernel(&ring->ring_obj,
>> + &ring->gpu_addr,
>> + (void **)&ring->ring);
>>
>> dma_fence_put(ring->vmid_wait);
>> ring->vmid_wait = NULL;
>> ring->me = 0;
>>
>> - if (!ring->is_mes_queue)
>> - ring->adev->rings[ring->idx] = NULL;
>> + ring->adev->rings[ring->idx] = NULL;
>> }
>>
>> /**
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
>> index d93d3047553b3..bea3747f9550b 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h
>> @@ -306,11 +306,6 @@ struct amdgpu_ring {
>> unsigned num_hw_submission;
>> atomic_t *sched_score;
>>
>> - /* used for mes */
>> - bool is_mes_queue;
>> - uint32_t hw_queue_id;
>> - struct amdgpu_mes_ctx_data *mes_ctx;
>> -
>> bool is_sw_ring;
>> unsigned int entry_index;
>> /* store the cached rptr to restore after reset */
>> @@ -440,15 +435,6 @@ static inline void amdgpu_ring_patch_cond_exec(struct amdgpu_ring *ring,
>> ring->ring[offset] = cur - offset;
>> }
>>
>> -#define amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset) \
>> - (ring->is_mes_queue && ring->mes_ctx ? \
>> - (ring->mes_ctx->meta_data_gpu_addr + offset) : 0)
>> -
>> -#define amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset) \
>> - (ring->is_mes_queue && ring->mes_ctx ? \
>> - (void *)((uint8_t *)(ring->mes_ctx->meta_data_ptr) + offset) : \
>> - NULL)
>> -
>> int amdgpu_ring_test_helper(struct amdgpu_ring *ring);
>>
>> void amdgpu_debugfs_ring_init(struct amdgpu_device *adev,
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
>> index 3a4cef8960185..03c4c012a1508 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c
>> @@ -76,22 +76,14 @@ uint64_t amdgpu_sdma_get_csa_mc_addr(struct amdgpu_ring *ring,
>> if (amdgpu_sriov_vf(adev) || vmid == 0 || !adev->gfx.mcbp)
>> return 0;
>>
>> - if (ring->is_mes_queue) {
>> - uint32_t offset = 0;
>> + r = amdgpu_sdma_get_index_from_ring(ring, &index);
>>
>> - offset = offsetof(struct amdgpu_mes_ctx_meta_data,
>> - sdma[ring->idx].sdma_meta_data);
>> - csa_mc_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
>> - } else {
>> - r = amdgpu_sdma_get_index_from_ring(ring, &index);
>> -
>> - if (r || index > 31)
>> - csa_mc_addr = 0;
>> - else
>> - csa_mc_addr = amdgpu_csa_vaddr(adev) +
>> - AMDGPU_CSA_SDMA_OFFSET +
>> - index * AMDGPU_CSA_SDMA_SIZE;
>> - }
>> + if (r || index > 31)
>> + csa_mc_addr = 0;
>> + else
>> + csa_mc_addr = amdgpu_csa_vaddr(adev) +
>> + AMDGPU_CSA_SDMA_OFFSET +
>> + index * AMDGPU_CSA_SDMA_SIZE;
>>
>> return csa_mc_addr;
>> }
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>> index ef4fe2df8398c..ea18484d1d7a7 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>> @@ -702,7 +702,7 @@ int amdgpu_vm_flush(struct amdgpu_ring *ring, struct amdgpu_job *job,
>> if (spm_update_needed && adev->gfx.rlc.funcs->update_spm_vmid)
>> adev->gfx.rlc.funcs->update_spm_vmid(adev, ring, job->vmid);
>>
>> - if (!ring->is_mes_queue && ring->funcs->emit_gds_switch &&
>> + if (ring->funcs->emit_gds_switch &&
>> gds_switch_needed) {
>> amdgpu_ring_emit_gds_switch(ring, job->vmid, job->gds_base,
>> job->gds_size, job->gws_base,
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
>> index 2cf663d25881d..719c4aa90a0e0 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c
>> @@ -582,33 +582,18 @@ static int gfx_v11_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
>>
>> memset(&ib, 0, sizeof(ib));
>>
>> - if (ring->is_mes_queue) {
>> - uint32_t padding, offset;
>> -
>> - offset = amdgpu_mes_ctx_get_offs(ring, AMDGPU_MES_CTX_IB_OFFS);
>> - padding = amdgpu_mes_ctx_get_offs(ring,
>> - AMDGPU_MES_CTX_PADDING_OFFS);
>> -
>> - ib.gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
>> - ib.ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
>> -
>> - gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, padding);
>> - cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, padding);
>> - *cpu_ptr = cpu_to_le32(0xCAFEDEAD);
>> - } else {
>> - r = amdgpu_device_wb_get(adev, &index);
>> - if (r)
>> - return r;
>> + r = amdgpu_device_wb_get(adev, &index);
>> + if (r)
>> + return r;
>>
>> - gpu_addr = adev->wb.gpu_addr + (index * 4);
>> - adev->wb.wb[index] = cpu_to_le32(0xCAFEDEAD);
>> - cpu_ptr = &adev->wb.wb[index];
>> + gpu_addr = adev->wb.gpu_addr + (index * 4);
>> + adev->wb.wb[index] = cpu_to_le32(0xCAFEDEAD);
>> + cpu_ptr = &adev->wb.wb[index];
>>
>> - r = amdgpu_ib_get(adev, NULL, 20, AMDGPU_IB_POOL_DIRECT, &ib);
>> - if (r) {
>> - DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
>> - goto err1;
>> - }
>> + r = amdgpu_ib_get(adev, NULL, 20, AMDGPU_IB_POOL_DIRECT, &ib);
>> + if (r) {
>> + DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
>> + goto err1;
>> }
>>
>> ib.ptr[0] = PACKET3(PACKET3_WRITE_DATA, 3);
>> @@ -635,12 +620,10 @@ static int gfx_v11_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
>> else
>> r = -EINVAL;
>> err2:
>> - if (!ring->is_mes_queue)
>> - amdgpu_ib_free(&ib, NULL);
>> + amdgpu_ib_free(&ib, NULL);
>> dma_fence_put(f);
>> err1:
>> - if (!ring->is_mes_queue)
>> - amdgpu_device_wb_free(adev, index);
>> + amdgpu_device_wb_free(adev, index);
>> return r;
>> }
>>
>> @@ -5760,10 +5743,6 @@ static void gfx_v11_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
>> (!amdgpu_sriov_vf(ring->adev) && flags & AMDGPU_IB_PREEMPTED) ? true : false);
>> }
>>
>> - if (ring->is_mes_queue)
>> - /* inherit vmid from mqd */
>> - control |= 0x400000;
>> -
>> amdgpu_ring_write(ring, header);
>> BUG_ON(ib->gpu_addr & 0x3); /* Dword align */
>> amdgpu_ring_write(ring,
>> @@ -5783,10 +5762,6 @@ static void gfx_v11_0_ring_emit_ib_compute(struct amdgpu_ring *ring,
>> unsigned vmid = AMDGPU_JOB_GET_VMID(job);
>> u32 control = INDIRECT_BUFFER_VALID | ib->length_dw | (vmid << 24);
>>
>> - if (ring->is_mes_queue)
>> - /* inherit vmid from mqd */
>> - control |= 0x40000000;
>> -
>> /* Currently, there is a high possibility to get wave ID mismatch
>> * between ME and GDS, leading to a hw deadlock, because ME generates
>> * different wave IDs than the GDS expects. This situation happens
>> @@ -5844,8 +5819,7 @@ static void gfx_v11_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr,
>> amdgpu_ring_write(ring, upper_32_bits(addr));
>> amdgpu_ring_write(ring, lower_32_bits(seq));
>> amdgpu_ring_write(ring, upper_32_bits(seq));
>> - amdgpu_ring_write(ring, ring->is_mes_queue ?
>> - (ring->hw_queue_id | AMDGPU_FENCE_MES_QUEUE_FLAG) : 0);
>> + amdgpu_ring_write(ring, 0);
>> }
>>
>> static void gfx_v11_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
>> @@ -5873,10 +5847,7 @@ static void gfx_v11_0_ring_invalidate_tlbs(struct amdgpu_ring *ring,
>> static void gfx_v11_0_ring_emit_vm_flush(struct amdgpu_ring *ring,
>> unsigned vmid, uint64_t pd_addr)
>> {
>> - if (ring->is_mes_queue)
>> - gfx_v11_0_ring_invalidate_tlbs(ring, 0, 0, false, 0);
>> - else
>> - amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr);
>> + amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr);
>>
>> /* compute doesn't have PFP */
>> if (ring->funcs->type == AMDGPU_RING_TYPE_GFX) {
>> @@ -6105,28 +6076,13 @@ static void gfx_v11_0_ring_emit_de_meta(struct amdgpu_ring *ring, bool resume)
>> void *de_payload_cpu_addr;
>> int cnt;
>>
>> - if (ring->is_mes_queue) {
>> - offset = offsetof(struct amdgpu_mes_ctx_meta_data,
>> - gfx[0].gfx_meta_data) +
>> - offsetof(struct v10_gfx_meta_data, de_payload);
>> - de_payload_gpu_addr =
>> - amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
>> - de_payload_cpu_addr =
>> - amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
>> -
>> - offset = offsetof(struct amdgpu_mes_ctx_meta_data,
>> - gfx[0].gds_backup) +
>> - offsetof(struct v10_gfx_meta_data, de_payload);
>> - gds_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
>> - } else {
>> - offset = offsetof(struct v10_gfx_meta_data, de_payload);
>> - de_payload_gpu_addr = amdgpu_csa_vaddr(ring->adev) + offset;
>> - de_payload_cpu_addr = adev->virt.csa_cpu_addr + offset;
>> + offset = offsetof(struct v10_gfx_meta_data, de_payload);
>> + de_payload_gpu_addr = amdgpu_csa_vaddr(ring->adev) + offset;
>> + de_payload_cpu_addr = adev->virt.csa_cpu_addr + offset;
>>
>> - gds_addr = ALIGN(amdgpu_csa_vaddr(ring->adev) +
>> - AMDGPU_CSA_SIZE - adev->gds.gds_size,
>> - PAGE_SIZE);
>> - }
>> + gds_addr = ALIGN(amdgpu_csa_vaddr(ring->adev) +
>> + AMDGPU_CSA_SIZE - adev->gds.gds_size,
>> + PAGE_SIZE);
>>
>> de_payload.gds_backup_addrlo = lower_32_bits(gds_addr);
>> de_payload.gds_backup_addrhi = upper_32_bits(gds_addr);
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
>> index 60d8630a05c82..9db2becab68fe 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v12_0.c
>> @@ -477,33 +477,18 @@ static int gfx_v12_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
>>
>> memset(&ib, 0, sizeof(ib));
>>
>> - if (ring->is_mes_queue) {
>> - uint32_t padding, offset;
>> -
>> - offset = amdgpu_mes_ctx_get_offs(ring, AMDGPU_MES_CTX_IB_OFFS);
>> - padding = amdgpu_mes_ctx_get_offs(ring,
>> - AMDGPU_MES_CTX_PADDING_OFFS);
>> -
>> - ib.gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
>> - ib.ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
>> -
>> - gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, padding);
>> - cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, padding);
>> - *cpu_ptr = cpu_to_le32(0xCAFEDEAD);
>> - } else {
>> - r = amdgpu_device_wb_get(adev, &index);
>> - if (r)
>> - return r;
>> + r = amdgpu_device_wb_get(adev, &index);
>> + if (r)
>> + return r;
>>
>> - gpu_addr = adev->wb.gpu_addr + (index * 4);
>> - adev->wb.wb[index] = cpu_to_le32(0xCAFEDEAD);
>> - cpu_ptr = &adev->wb.wb[index];
>> + gpu_addr = adev->wb.gpu_addr + (index * 4);
>> + adev->wb.wb[index] = cpu_to_le32(0xCAFEDEAD);
>> + cpu_ptr = &adev->wb.wb[index];
>>
>> - r = amdgpu_ib_get(adev, NULL, 16, AMDGPU_IB_POOL_DIRECT, &ib);
>> - if (r) {
>> - dev_err(adev->dev, "amdgpu: failed to get ib (%ld).\n", r);
>> - goto err1;
>> - }
>> + r = amdgpu_ib_get(adev, NULL, 16, AMDGPU_IB_POOL_DIRECT, &ib);
>> + if (r) {
>> + dev_err(adev->dev, "amdgpu: failed to get ib (%ld).\n", r);
>> + goto err1;
>> }
>>
>> ib.ptr[0] = PACKET3(PACKET3_WRITE_DATA, 3);
>> @@ -530,12 +515,10 @@ static int gfx_v12_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
>> else
>> r = -EINVAL;
>> err2:
>> - if (!ring->is_mes_queue)
>> - amdgpu_ib_free(&ib, NULL);
>> + amdgpu_ib_free(&ib, NULL);
>> dma_fence_put(f);
>> err1:
>> - if (!ring->is_mes_queue)
>> - amdgpu_device_wb_free(adev, index);
>> + amdgpu_device_wb_free(adev, index);
>> return r;
>> }
>>
>> @@ -4283,45 +4266,17 @@ static u64 gfx_v12_0_ring_get_wptr_gfx(struct amdgpu_ring *ring)
>> static void gfx_v12_0_ring_set_wptr_gfx(struct amdgpu_ring *ring)
>> {
>> struct amdgpu_device *adev = ring->adev;
>> - uint32_t *wptr_saved;
>> - uint32_t *is_queue_unmap;
>> - uint64_t aggregated_db_index;
>> - uint32_t mqd_size = adev->mqds[AMDGPU_HW_IP_GFX].mqd_size;
>> - uint64_t wptr_tmp;
>> -
>> - if (ring->is_mes_queue) {
>> - wptr_saved = (uint32_t *)(ring->mqd_ptr + mqd_size);
>> - is_queue_unmap = (uint32_t *)(ring->mqd_ptr + mqd_size +
>> - sizeof(uint32_t));
>> - aggregated_db_index =
>> - amdgpu_mes_get_aggregated_doorbell_index(adev,
>> - ring->hw_prio);
>> -
>> - wptr_tmp = ring->wptr & ring->buf_mask;
>> - atomic64_set((atomic64_t *)ring->wptr_cpu_addr, wptr_tmp);
>> - *wptr_saved = wptr_tmp;
>> - /* assume doorbell always being used by mes mapped queue */
>> - if (*is_queue_unmap) {
>> - WDOORBELL64(aggregated_db_index, wptr_tmp);
>> - WDOORBELL64(ring->doorbell_index, wptr_tmp);
>> - } else {
>> - WDOORBELL64(ring->doorbell_index, wptr_tmp);
>>
>> - if (*is_queue_unmap)
>> - WDOORBELL64(aggregated_db_index, wptr_tmp);
>> - }
>> + if (ring->use_doorbell) {
>> + /* XXX check if swapping is necessary on BE */
>> + atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
>> + ring->wptr);
>> + WDOORBELL64(ring->doorbell_index, ring->wptr);
>> } else {
>> - if (ring->use_doorbell) {
>> - /* XXX check if swapping is necessary on BE */
>> - atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
>> - ring->wptr);
>> - WDOORBELL64(ring->doorbell_index, ring->wptr);
>> - } else {
>> - WREG32_SOC15(GC, 0, regCP_RB0_WPTR,
>> - lower_32_bits(ring->wptr));
>> - WREG32_SOC15(GC, 0, regCP_RB0_WPTR_HI,
>> - upper_32_bits(ring->wptr));
>> - }
>> + WREG32_SOC15(GC, 0, regCP_RB0_WPTR,
>> + lower_32_bits(ring->wptr));
>> + WREG32_SOC15(GC, 0, regCP_RB0_WPTR_HI,
>> + upper_32_bits(ring->wptr));
>> }
>> }
>>
>> @@ -4346,42 +4301,14 @@ static u64 gfx_v12_0_ring_get_wptr_compute(struct amdgpu_ring *ring)
>> static void gfx_v12_0_ring_set_wptr_compute(struct amdgpu_ring *ring)
>> {
>> struct amdgpu_device *adev = ring->adev;
>> - uint32_t *wptr_saved;
>> - uint32_t *is_queue_unmap;
>> - uint64_t aggregated_db_index;
>> - uint32_t mqd_size = adev->mqds[AMDGPU_HW_IP_COMPUTE].mqd_size;
>> - uint64_t wptr_tmp;
>> -
>> - if (ring->is_mes_queue) {
>> - wptr_saved = (uint32_t *)(ring->mqd_ptr + mqd_size);
>> - is_queue_unmap = (uint32_t *)(ring->mqd_ptr + mqd_size +
>> - sizeof(uint32_t));
>> - aggregated_db_index =
>> - amdgpu_mes_get_aggregated_doorbell_index(adev,
>> - ring->hw_prio);
>> -
>> - wptr_tmp = ring->wptr & ring->buf_mask;
>> - atomic64_set((atomic64_t *)ring->wptr_cpu_addr, wptr_tmp);
>> - *wptr_saved = wptr_tmp;
>> - /* assume doorbell always used by mes mapped queue */
>> - if (*is_queue_unmap) {
>> - WDOORBELL64(aggregated_db_index, wptr_tmp);
>> - WDOORBELL64(ring->doorbell_index, wptr_tmp);
>> - } else {
>> - WDOORBELL64(ring->doorbell_index, wptr_tmp);
>>
>> - if (*is_queue_unmap)
>> - WDOORBELL64(aggregated_db_index, wptr_tmp);
>> - }
>> + /* XXX check if swapping is necessary on BE */
>> + if (ring->use_doorbell) {
>> + atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
>> + ring->wptr);
>> + WDOORBELL64(ring->doorbell_index, ring->wptr);
>> } else {
>> - /* XXX check if swapping is necessary on BE */
>> - if (ring->use_doorbell) {
>> - atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
>> - ring->wptr);
>> - WDOORBELL64(ring->doorbell_index, ring->wptr);
>> - } else {
>> - BUG(); /* only DOORBELL method supported on gfx12 now */
>> - }
>> + BUG(); /* only DOORBELL method supported on gfx12 now */
>> }
>> }
>>
>> @@ -4428,10 +4355,6 @@ static void gfx_v12_0_ring_emit_ib_gfx(struct amdgpu_ring *ring,
>>
>> control |= ib->length_dw | (vmid << 24);
>>
>> - if (ring->is_mes_queue)
>> - /* inherit vmid from mqd */
>> - control |= 0x400000;
>> -
>> amdgpu_ring_write(ring, header);
>> BUG_ON(ib->gpu_addr & 0x3); /* Dword align */
>> amdgpu_ring_write(ring,
>> @@ -4451,10 +4374,6 @@ static void gfx_v12_0_ring_emit_ib_compute(struct amdgpu_ring *ring,
>> unsigned vmid = AMDGPU_JOB_GET_VMID(job);
>> u32 control = INDIRECT_BUFFER_VALID | ib->length_dw | (vmid << 24);
>>
>> - if (ring->is_mes_queue)
>> - /* inherit vmid from mqd */
>> - control |= 0x40000000;
>> -
>> amdgpu_ring_write(ring, PACKET3(PACKET3_INDIRECT_BUFFER, 2));
>> BUG_ON(ib->gpu_addr & 0x3); /* Dword align */
>> amdgpu_ring_write(ring,
>> @@ -4494,8 +4413,7 @@ static void gfx_v12_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr,
>> amdgpu_ring_write(ring, upper_32_bits(addr));
>> amdgpu_ring_write(ring, lower_32_bits(seq));
>> amdgpu_ring_write(ring, upper_32_bits(seq));
>> - amdgpu_ring_write(ring, ring->is_mes_queue ?
>> - (ring->hw_queue_id | AMDGPU_FENCE_MES_QUEUE_FLAG) : 0);
>> + amdgpu_ring_write(ring, 0);
>> }
>>
>> static void gfx_v12_0_ring_emit_pipeline_sync(struct amdgpu_ring *ring)
>> @@ -4523,10 +4441,7 @@ static void gfx_v12_0_ring_invalidate_tlbs(struct amdgpu_ring *ring,
>> static void gfx_v12_0_ring_emit_vm_flush(struct amdgpu_ring *ring,
>> unsigned vmid, uint64_t pd_addr)
>> {
>> - if (ring->is_mes_queue)
>> - gfx_v12_0_ring_invalidate_tlbs(ring, 0, 0, false, 0);
>> - else
>> - amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr);
>> + amdgpu_gmc_emit_flush_gpu_tlb(ring, vmid, pd_addr);
>>
>> /* compute doesn't have PFP */
>> if (ring->funcs->type == AMDGPU_RING_TYPE_GFX) {
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
>> index 734f2dd986290..f4dfa1418b740 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
>> @@ -5472,16 +5472,8 @@ static void gfx_v9_0_ring_patch_ce_meta(struct amdgpu_ring *ring,
>>
>> payload_size = sizeof(struct v9_ce_ib_state);
>>
>> - if (ring->is_mes_queue) {
>> - payload_offset = offsetof(struct amdgpu_mes_ctx_meta_data,
>> - gfx[0].gfx_meta_data) +
>> - offsetof(struct v9_gfx_meta_data, ce_payload);
>> - ce_payload_cpu_addr =
>> - amdgpu_mes_ctx_get_offs_cpu_addr(ring, payload_offset);
>> - } else {
>> - payload_offset = offsetof(struct v9_gfx_meta_data, ce_payload);
>> - ce_payload_cpu_addr = adev->virt.csa_cpu_addr + payload_offset;
>> - }
>> + payload_offset = offsetof(struct v9_gfx_meta_data, ce_payload);
>> + ce_payload_cpu_addr = adev->virt.csa_cpu_addr + payload_offset;
>>
>> if (offset + (payload_size >> 2) <= ring->buf_mask + 1) {
>> memcpy((void *)&ring->ring[offset], ce_payload_cpu_addr, payload_size);
>> @@ -5504,16 +5496,8 @@ static void gfx_v9_0_ring_patch_de_meta(struct amdgpu_ring *ring,
>>
>> payload_size = sizeof(struct v9_de_ib_state);
>>
>> - if (ring->is_mes_queue) {
>> - payload_offset = offsetof(struct amdgpu_mes_ctx_meta_data,
>> - gfx[0].gfx_meta_data) +
>> - offsetof(struct v9_gfx_meta_data, de_payload);
>> - de_payload_cpu_addr =
>> - amdgpu_mes_ctx_get_offs_cpu_addr(ring, payload_offset);
>> - } else {
>> - payload_offset = offsetof(struct v9_gfx_meta_data, de_payload);
>> - de_payload_cpu_addr = adev->virt.csa_cpu_addr + payload_offset;
>> - }
>> + payload_offset = offsetof(struct v9_gfx_meta_data, de_payload);
>> + de_payload_cpu_addr = adev->virt.csa_cpu_addr + payload_offset;
>>
>> ((struct v9_de_ib_state *)de_payload_cpu_addr)->ib_completion_status =
>> IB_COMPLETION_STATUS_PREEMPTED;
>> @@ -5703,19 +5687,9 @@ static void gfx_v9_0_ring_emit_ce_meta(struct amdgpu_ring *ring, bool resume)
>>
>> cnt = (sizeof(ce_payload) >> 2) + 4 - 2;
>>
>> - if (ring->is_mes_queue) {
>> - offset = offsetof(struct amdgpu_mes_ctx_meta_data,
>> - gfx[0].gfx_meta_data) +
>> - offsetof(struct v9_gfx_meta_data, ce_payload);
>> - ce_payload_gpu_addr =
>> - amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
>> - ce_payload_cpu_addr =
>> - amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
>> - } else {
>> - offset = offsetof(struct v9_gfx_meta_data, ce_payload);
>> - ce_payload_gpu_addr = amdgpu_csa_vaddr(ring->adev) + offset;
>> - ce_payload_cpu_addr = adev->virt.csa_cpu_addr + offset;
>> - }
>> + offset = offsetof(struct v9_gfx_meta_data, ce_payload);
>> + ce_payload_gpu_addr = amdgpu_csa_vaddr(ring->adev) + offset;
>> + ce_payload_cpu_addr = adev->virt.csa_cpu_addr + offset;
>>
>> amdgpu_ring_write(ring, PACKET3(PACKET3_WRITE_DATA, cnt));
>> amdgpu_ring_write(ring, (WRITE_DATA_ENGINE_SEL(2) |
>> @@ -5801,28 +5775,13 @@ static void gfx_v9_0_ring_emit_de_meta(struct amdgpu_ring *ring, bool resume, bo
>> void *de_payload_cpu_addr;
>> int cnt;
>>
>> - if (ring->is_mes_queue) {
>> - offset = offsetof(struct amdgpu_mes_ctx_meta_data,
>> - gfx[0].gfx_meta_data) +
>> - offsetof(struct v9_gfx_meta_data, de_payload);
>> - de_payload_gpu_addr =
>> - amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
>> - de_payload_cpu_addr =
>> - amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
>> -
>> - offset = offsetof(struct amdgpu_mes_ctx_meta_data,
>> - gfx[0].gds_backup) +
>> - offsetof(struct v9_gfx_meta_data, de_payload);
>> - gds_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
>> - } else {
>> - offset = offsetof(struct v9_gfx_meta_data, de_payload);
>> - de_payload_gpu_addr = amdgpu_csa_vaddr(ring->adev) + offset;
>> - de_payload_cpu_addr = adev->virt.csa_cpu_addr + offset;
>> + offset = offsetof(struct v9_gfx_meta_data, de_payload);
>> + de_payload_gpu_addr = amdgpu_csa_vaddr(ring->adev) + offset;
>> + de_payload_cpu_addr = adev->virt.csa_cpu_addr + offset;
>>
>> - gds_addr = ALIGN(amdgpu_csa_vaddr(ring->adev) +
>> - AMDGPU_CSA_SIZE - adev->gds.gds_size,
>> - PAGE_SIZE);
>> - }
>> + gds_addr = ALIGN(amdgpu_csa_vaddr(ring->adev) +
>> + AMDGPU_CSA_SIZE - adev->gds.gds_size,
>> + PAGE_SIZE);
>>
>> if (usegds) {
>> de_payload.gds_backup_addrlo = lower_32_bits(gds_addr);
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
>> index 95d894a231fcf..8ae4c031162bc 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c
>> @@ -428,10 +428,6 @@ static void gmc_v10_0_emit_pasid_mapping(struct amdgpu_ring *ring, unsigned int
>> struct amdgpu_device *adev = ring->adev;
>> uint32_t reg;
>>
>> - /* MES fw manages IH_VMID_x_LUT updating */
>> - if (ring->is_mes_queue)
>> - return;
>> -
>> if (ring->vm_hub == AMDGPU_GFXHUB(0))
>> reg = SOC15_REG_OFFSET(OSSSYS, 0, mmIH_VMID_0_LUT) + vmid;
>> else
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
>> index ad099f136f84e..5c91d4445418c 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c
>> @@ -393,10 +393,6 @@ static void gmc_v11_0_emit_pasid_mapping(struct amdgpu_ring *ring, unsigned int
>> struct amdgpu_device *adev = ring->adev;
>> uint32_t reg;
>>
>> - /* MES fw manages IH_VMID_x_LUT updating */
>> - if (ring->is_mes_queue)
>> - return;
>> -
>> if (ring->vm_hub == AMDGPU_GFXHUB(0))
>> reg = SOC15_REG_OFFSET(OSSSYS, 0, regIH_VMID_0_LUT) + vmid;
>> else
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c
>> index bf8d01da88154..0a1946c824118 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v12_0.c
>> @@ -413,10 +413,6 @@ static void gmc_v12_0_emit_pasid_mapping(struct amdgpu_ring *ring, unsigned vmid
>> struct amdgpu_device *adev = ring->adev;
>> uint32_t reg;
>>
>> - /* MES fw manages IH_VMID_x_LUT updating */
>> - if (ring->is_mes_queue)
>> - return;
>> -
>> if (ring->vm_hub == AMDGPU_GFXHUB(0))
>> reg = SOC15_REG_OFFSET(OSSSYS, 0, regIH_VMID_0_LUT) + vmid;
>> else
>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
>> index 44a401870509f..712392671a3cf 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
>> @@ -369,67 +369,36 @@ static uint64_t sdma_v5_0_ring_get_wptr(struct amdgpu_ring *ring)
>> static void sdma_v5_0_ring_set_wptr(struct amdgpu_ring *ring)
>> {
>> struct amdgpu_device *adev = ring->adev;
>> - uint32_t *wptr_saved;
>> - uint32_t *is_queue_unmap;
>> - uint64_t aggregated_db_index;
>> - uint32_t mqd_size = adev->mqds[AMDGPU_HW_IP_DMA].mqd_size;
>>
>> DRM_DEBUG("Setting write pointer\n");
>> - if (ring->is_mes_queue) {
>> - wptr_saved = (uint32_t *)(ring->mqd_ptr + mqd_size);
>> - is_queue_unmap = (uint32_t *)(ring->mqd_ptr + mqd_size +
>> - sizeof(uint32_t));
>> - aggregated_db_index =
>> - amdgpu_mes_get_aggregated_doorbell_index(adev,
>> - AMDGPU_MES_PRIORITY_LEVEL_NORMAL);
>> -
>> + if (ring->use_doorbell) {
>> + DRM_DEBUG("Using doorbell -- "
>> + "wptr_offs == 0x%08x "
>> + "lower_32_bits(ring->wptr) << 2 == 0x%08x "
>> + "upper_32_bits(ring->wptr) << 2 == 0x%08x\n",
>> + ring->wptr_offs,
>> + lower_32_bits(ring->wptr << 2),
>> + upper_32_bits(ring->wptr << 2));
>> + /* XXX check if swapping is necessary on BE */
>> atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
>> ring->wptr << 2);
>> - *wptr_saved = ring->wptr << 2;
>> - if (*is_queue_unmap) {
>> - WDOORBELL64(aggregated_db_index, ring->wptr << 2);
>> - DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
>> - ring->doorbell_index, ring->wptr << 2);
>> - WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
>> - } else {
>> - DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
>> - ring->doorbell_index, ring->wptr << 2);
>> - WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
>> -
>> - if (*is_queue_unmap)
>> - WDOORBELL64(aggregated_db_index,
>> - ring->wptr << 2);
>> - }
>> + DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
>> + ring->doorbell_index, ring->wptr << 2);
>> + WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
>> } else {
>> - if (ring->use_doorbell) {
>> - DRM_DEBUG("Using doorbell -- "
>> - "wptr_offs == 0x%08x "
>> - "lower_32_bits(ring->wptr) << 2 == 0x%08x "
>> - "upper_32_bits(ring->wptr) << 2 == 0x%08x\n",
>> - ring->wptr_offs,
>> - lower_32_bits(ring->wptr << 2),
>> - upper_32_bits(ring->wptr << 2));
>> - /* XXX check if swapping is necessary on BE */
>> - atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
>> - ring->wptr << 2);
>> - DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
>> - ring->doorbell_index, ring->wptr << 2);
>> - WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
>> - } else {
>> - DRM_DEBUG("Not using doorbell -- "
>> - "mmSDMA%i_GFX_RB_WPTR == 0x%08x "
>> - "mmSDMA%i_GFX_RB_WPTR_HI == 0x%08x\n",
>> - ring->me,
>> - lower_32_bits(ring->wptr << 2),
>> - ring->me,
>> - upper_32_bits(ring->wptr << 2));
>> - WREG32_SOC15_IP(GC, sdma_v5_0_get_reg_offset(adev,
>> - ring->me, mmSDMA0_GFX_RB_WPTR),
>> - lower_32_bits(ring->wptr << 2));
>> - WREG32_SOC15_IP(GC, sdma_v5_0_get_reg_offset(adev,
>> - ring->me, mmSDMA0_GFX_RB_WPTR_HI),
>> - upper_32_bits(ring->wptr << 2));
>> - }
>> + DRM_DEBUG("Not using doorbell -- "
>> + "mmSDMA%i_GFX_RB_WPTR == 0x%08x "
>> + "mmSDMA%i_GFX_RB_WPTR_HI == 0x%08x\n",
>> + ring->me,
>> + lower_32_bits(ring->wptr << 2),
>> + ring->me,
>> + upper_32_bits(ring->wptr << 2));
>> + WREG32_SOC15_IP(GC, sdma_v5_0_get_reg_offset(adev,
>> + ring->me, mmSDMA0_GFX_RB_WPTR),
>> + lower_32_bits(ring->wptr << 2));
>> + WREG32_SOC15_IP(GC, sdma_v5_0_get_reg_offset(adev,
>> + ring->me, mmSDMA0_GFX_RB_WPTR_HI),
>> + upper_32_bits(ring->wptr << 2));
>> }
>> }
>>
>> @@ -575,11 +544,9 @@ static void sdma_v5_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 se
>> }
>>
>> if (flags & AMDGPU_FENCE_FLAG_INT) {
>> - uint32_t ctx = ring->is_mes_queue ?
>> - (ring->hw_queue_id | AMDGPU_FENCE_MES_QUEUE_FLAG) : 0;
>> /* generate an interrupt */
>> amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_TRAP));
>> - amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(ctx));
>> + amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(0));
>> }
>> }
>>
>> @@ -1046,33 +1013,22 @@ static int sdma_v5_0_ring_test_ring(struct amdgpu_ring *ring)
>> int r;
>> u32 tmp;
>> u64 gpu_addr;
>> - volatile uint32_t *cpu_ptr = NULL;
>>
>> tmp = 0xCAFEDEAD;
>>
>> - if (ring->is_mes_queue) {
>> - uint32_t offset = 0;
>> - offset = amdgpu_mes_ctx_get_offs(ring,
>> - AMDGPU_MES_CTX_PADDING_OFFS);
>> - gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
>> - cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
>> - *cpu_ptr = tmp;
>> - } else {
>> - r = amdgpu_device_wb_get(adev, &index);
>> - if (r) {
>> - dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
>> - return r;
>> - }
>> -
>> - gpu_addr = adev->wb.gpu_addr + (index * 4);
>> - adev->wb.wb[index] = cpu_to_le32(tmp);
>> + r = amdgpu_device_wb_get(adev, &index);
>> + if (r) {
>> + dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
>> + return r;
>> }
>>
>> + gpu_addr = adev->wb.gpu_addr + (index * 4);
>> + adev->wb.wb[index] = cpu_to_le32(tmp);
>> +
>> r = amdgpu_ring_alloc(ring, 20);
>> if (r) {
>> DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r);
>> - if (!ring->is_mes_queue)
>> - amdgpu_device_wb_free(adev, index);
>> + amdgpu_device_wb_free(adev, index);
>> return r;
>> }
>>
>> @@ -1085,10 +1041,7 @@ static int sdma_v5_0_ring_test_ring(struct amdgpu_ring *ring)
>> amdgpu_ring_commit(ring);
>>
>> for (i = 0; i < adev->usec_timeout; i++) {
>> - if (ring->is_mes_queue)
>> - tmp = le32_to_cpu(*cpu_ptr);
>> - else
>> - tmp = le32_to_cpu(adev->wb.wb[index]);
>> + tmp = le32_to_cpu(adev->wb.wb[index]);
>> if (tmp == 0xDEADBEEF)
>> break;
>> if (amdgpu_emu_mode == 1)
>> @@ -1100,8 +1053,7 @@ static int sdma_v5_0_ring_test_ring(struct amdgpu_ring *ring)
>> if (i >= adev->usec_timeout)
>> r = -ETIMEDOUT;
>>
>> - if (!ring->is_mes_queue)
>> - amdgpu_device_wb_free(adev, index);
>> + amdgpu_device_wb_free(adev, index);
>>
>> return r;
>> }
>> @@ -1124,38 +1076,24 @@ static int sdma_v5_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
>> long r;
>> u32 tmp = 0;
>> u64 gpu_addr;
>> - volatile uint32_t *cpu_ptr = NULL;
>>
>> tmp = 0xCAFEDEAD;
>> memset(&ib, 0, sizeof(ib));
>>
>> - if (ring->is_mes_queue) {
>> - uint32_t offset = 0;
>> - offset = amdgpu_mes_ctx_get_offs(ring, AMDGPU_MES_CTX_IB_OFFS);
>> - ib.gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
>> - ib.ptr = (void *)amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
>> -
>> - offset = amdgpu_mes_ctx_get_offs(ring,
>> - AMDGPU_MES_CTX_PADDING_OFFS);
>> - gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
>> - cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
>> - *cpu_ptr = tmp;
>> - } else {
>> - r = amdgpu_device_wb_get(adev, &index);
>> - if (r) {
>> - dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
>> - return r;
>> - }
>> + r = amdgpu_device_wb_get(adev, &index);
>> + if (r) {
>> + dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
>> + return r;
>> + }
>>
>> - gpu_addr = adev->wb.gpu_addr + (index * 4);
>> - adev->wb.wb[index] = cpu_to_le32(tmp);
>> + gpu_addr = adev->wb.gpu_addr + (index * 4);
>> + adev->wb.wb[index] = cpu_to_le32(tmp);
>>
>> - r = amdgpu_ib_get(adev, NULL, 256,
>> - AMDGPU_IB_POOL_DIRECT, &ib);
>> - if (r) {
>> - DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
>> - goto err0;
>> - }
>> + r = amdgpu_ib_get(adev, NULL, 256,
>> + AMDGPU_IB_POOL_DIRECT, &ib);
>> + if (r) {
>> + DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
>> + goto err0;
>> }
>>
>> ib.ptr[0] = SDMA_PKT_HEADER_OP(SDMA_OP_WRITE) |
>> @@ -1183,10 +1121,7 @@ static int sdma_v5_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
>> goto err1;
>> }
>>
>> - if (ring->is_mes_queue)
>> - tmp = le32_to_cpu(*cpu_ptr);
>> - else
>> - tmp = le32_to_cpu(adev->wb.wb[index]);
>> + tmp = le32_to_cpu(adev->wb.wb[index]);
>>
>> if (tmp == 0xDEADBEEF)
>> r = 0;
>> @@ -1197,8 +1132,7 @@ static int sdma_v5_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
>> amdgpu_ib_free(&ib, NULL);
>> dma_fence_put(f);
>> err0:
>> - if (!ring->is_mes_queue)
>> - amdgpu_device_wb_free(adev, index);
>> + amdgpu_device_wb_free(adev, index);
>> return r;
>> }
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c b/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
>> index cb2a3e5592855..2c0bf2fc6d380 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
>> @@ -394,11 +394,9 @@ static void sdma_v5_2_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 se
>> }
>>
>> if ((flags & AMDGPU_FENCE_FLAG_INT)) {
>> - uint32_t ctx = ring->is_mes_queue ?
>> - (ring->hw_queue_id | AMDGPU_FENCE_MES_QUEUE_FLAG) : 0;
>> /* generate an interrupt */
>> amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_TRAP));
>> - amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(ctx));
>> + amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(0));
>> }
>> }
>>
>> @@ -903,33 +901,22 @@ static int sdma_v5_2_ring_test_ring(struct amdgpu_ring *ring)
>> int r;
>> u32 tmp;
>> u64 gpu_addr;
>> - volatile uint32_t *cpu_ptr = NULL;
>>
>> tmp = 0xCAFEDEAD;
>>
>> - if (ring->is_mes_queue) {
>> - uint32_t offset = 0;
>> - offset = amdgpu_mes_ctx_get_offs(ring,
>> - AMDGPU_MES_CTX_PADDING_OFFS);
>> - gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
>> - cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
>> - *cpu_ptr = tmp;
>> - } else {
>> - r = amdgpu_device_wb_get(adev, &index);
>> - if (r) {
>> - dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
>> - return r;
>> - }
>> -
>> - gpu_addr = adev->wb.gpu_addr + (index * 4);
>> - adev->wb.wb[index] = cpu_to_le32(tmp);
>> + r = amdgpu_device_wb_get(adev, &index);
>> + if (r) {
>> + dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
>> + return r;
>> }
>>
>> + gpu_addr = adev->wb.gpu_addr + (index * 4);
>> + adev->wb.wb[index] = cpu_to_le32(tmp);
>> +
>> r = amdgpu_ring_alloc(ring, 20);
>> if (r) {
>> DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r);
>> - if (!ring->is_mes_queue)
>> - amdgpu_device_wb_free(adev, index);
>> + amdgpu_device_wb_free(adev, index);
>> return r;
>> }
>>
>> @@ -942,10 +929,7 @@ static int sdma_v5_2_ring_test_ring(struct amdgpu_ring *ring)
>> amdgpu_ring_commit(ring);
>>
>> for (i = 0; i < adev->usec_timeout; i++) {
>> - if (ring->is_mes_queue)
>> - tmp = le32_to_cpu(*cpu_ptr);
>> - else
>> - tmp = le32_to_cpu(adev->wb.wb[index]);
>> + tmp = le32_to_cpu(adev->wb.wb[index]);
>> if (tmp == 0xDEADBEEF)
>> break;
>> if (amdgpu_emu_mode == 1)
>> @@ -957,8 +941,7 @@ static int sdma_v5_2_ring_test_ring(struct amdgpu_ring *ring)
>> if (i >= adev->usec_timeout)
>> r = -ETIMEDOUT;
>>
>> - if (!ring->is_mes_queue)
>> - amdgpu_device_wb_free(adev, index);
>> + amdgpu_device_wb_free(adev, index);
>>
>> return r;
>> }
>> @@ -981,37 +964,23 @@ static int sdma_v5_2_ring_test_ib(struct amdgpu_ring *ring, long timeout)
>> long r;
>> u32 tmp = 0;
>> u64 gpu_addr;
>> - volatile uint32_t *cpu_ptr = NULL;
>>
>> tmp = 0xCAFEDEAD;
>> memset(&ib, 0, sizeof(ib));
>>
>> - if (ring->is_mes_queue) {
>> - uint32_t offset = 0;
>> - offset = amdgpu_mes_ctx_get_offs(ring, AMDGPU_MES_CTX_IB_OFFS);
>> - ib.gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
>> - ib.ptr = (void *)amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
>> -
>> - offset = amdgpu_mes_ctx_get_offs(ring,
>> - AMDGPU_MES_CTX_PADDING_OFFS);
>> - gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
>> - cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
>> - *cpu_ptr = tmp;
>> - } else {
>> - r = amdgpu_device_wb_get(adev, &index);
>> - if (r) {
>> - dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
>> - return r;
>> - }
>> + r = amdgpu_device_wb_get(adev, &index);
>> + if (r) {
>> + dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
>> + return r;
>> + }
>>
>> - gpu_addr = adev->wb.gpu_addr + (index * 4);
>> - adev->wb.wb[index] = cpu_to_le32(tmp);
>> + gpu_addr = adev->wb.gpu_addr + (index * 4);
>> + adev->wb.wb[index] = cpu_to_le32(tmp);
>>
>> - r = amdgpu_ib_get(adev, NULL, 256, AMDGPU_IB_POOL_DIRECT, &ib);
>> - if (r) {
>> - DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
>> - goto err0;
>> - }
>> + r = amdgpu_ib_get(adev, NULL, 256, AMDGPU_IB_POOL_DIRECT, &ib);
>> + if (r) {
>> + DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
>> + goto err0;
>> }
>>
>> ib.ptr[0] = SDMA_PKT_HEADER_OP(SDMA_OP_WRITE) |
>> @@ -1039,10 +1008,7 @@ static int sdma_v5_2_ring_test_ib(struct amdgpu_ring *ring, long timeout)
>> goto err1;
>> }
>>
>> - if (ring->is_mes_queue)
>> - tmp = le32_to_cpu(*cpu_ptr);
>> - else
>> - tmp = le32_to_cpu(adev->wb.wb[index]);
>> + tmp = le32_to_cpu(adev->wb.wb[index]);
>>
>> if (tmp == 0xDEADBEEF)
>> r = 0;
>> @@ -1053,8 +1019,7 @@ static int sdma_v5_2_ring_test_ib(struct amdgpu_ring *ring, long timeout)
>> amdgpu_ib_free(&ib, NULL);
>> dma_fence_put(f);
>> err0:
>> - if (!ring->is_mes_queue)
>> - amdgpu_device_wb_free(adev, index);
>> + amdgpu_device_wb_free(adev, index);
>> return r;
>> }
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
>> index f1a02ce844e0f..d0f7874730f06 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v6_0.c
>> @@ -377,11 +377,9 @@ static void sdma_v6_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 se
>> }
>>
>> if (flags & AMDGPU_FENCE_FLAG_INT) {
>> - uint32_t ctx = ring->is_mes_queue ?
>> - (ring->hw_queue_id | AMDGPU_FENCE_MES_QUEUE_FLAG) : 0;
>> /* generate an interrupt */
>> amdgpu_ring_write(ring, SDMA_PKT_COPY_LINEAR_HEADER_OP(SDMA_OP_TRAP));
>> - amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(ctx));
>> + amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(0));
>> }
>> }
>>
>> @@ -921,33 +919,22 @@ static int sdma_v6_0_ring_test_ring(struct amdgpu_ring *ring)
>> int r;
>> u32 tmp;
>> u64 gpu_addr;
>> - volatile uint32_t *cpu_ptr = NULL;
>>
>> tmp = 0xCAFEDEAD;
>>
>> - if (ring->is_mes_queue) {
>> - uint32_t offset = 0;
>> - offset = amdgpu_mes_ctx_get_offs(ring,
>> - AMDGPU_MES_CTX_PADDING_OFFS);
>> - gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
>> - cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
>> - *cpu_ptr = tmp;
>> - } else {
>> - r = amdgpu_device_wb_get(adev, &index);
>> - if (r) {
>> - dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
>> - return r;
>> - }
>> -
>> - gpu_addr = adev->wb.gpu_addr + (index * 4);
>> - adev->wb.wb[index] = cpu_to_le32(tmp);
>> + r = amdgpu_device_wb_get(adev, &index);
>> + if (r) {
>> + dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
>> + return r;
>> }
>>
>> + gpu_addr = adev->wb.gpu_addr + (index * 4);
>> + adev->wb.wb[index] = cpu_to_le32(tmp);
>> +
>> r = amdgpu_ring_alloc(ring, 5);
>> if (r) {
>> DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r);
>> - if (!ring->is_mes_queue)
>> - amdgpu_device_wb_free(adev, index);
>> + amdgpu_device_wb_free(adev, index);
>> return r;
>> }
>>
>> @@ -960,10 +947,7 @@ static int sdma_v6_0_ring_test_ring(struct amdgpu_ring *ring)
>> amdgpu_ring_commit(ring);
>>
>> for (i = 0; i < adev->usec_timeout; i++) {
>> - if (ring->is_mes_queue)
>> - tmp = le32_to_cpu(*cpu_ptr);
>> - else
>> - tmp = le32_to_cpu(adev->wb.wb[index]);
>> + tmp = le32_to_cpu(adev->wb.wb[index]);
>> if (tmp == 0xDEADBEEF)
>> break;
>> if (amdgpu_emu_mode == 1)
>> @@ -975,8 +959,7 @@ static int sdma_v6_0_ring_test_ring(struct amdgpu_ring *ring)
>> if (i >= adev->usec_timeout)
>> r = -ETIMEDOUT;
>>
>> - if (!ring->is_mes_queue)
>> - amdgpu_device_wb_free(adev, index);
>> + amdgpu_device_wb_free(adev, index);
>>
>> return r;
>> }
>> @@ -999,37 +982,23 @@ static int sdma_v6_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
>> long r;
>> u32 tmp = 0;
>> u64 gpu_addr;
>> - volatile uint32_t *cpu_ptr = NULL;
>>
>> tmp = 0xCAFEDEAD;
>> memset(&ib, 0, sizeof(ib));
>>
>> - if (ring->is_mes_queue) {
>> - uint32_t offset = 0;
>> - offset = amdgpu_mes_ctx_get_offs(ring, AMDGPU_MES_CTX_IB_OFFS);
>> - ib.gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
>> - ib.ptr = (void *)amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
>> -
>> - offset = amdgpu_mes_ctx_get_offs(ring,
>> - AMDGPU_MES_CTX_PADDING_OFFS);
>> - gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
>> - cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
>> - *cpu_ptr = tmp;
>> - } else {
>> - r = amdgpu_device_wb_get(adev, &index);
>> - if (r) {
>> - dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
>> - return r;
>> - }
>> + r = amdgpu_device_wb_get(adev, &index);
>> + if (r) {
>> + dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
>> + return r;
>> + }
>>
>> - gpu_addr = adev->wb.gpu_addr + (index * 4);
>> - adev->wb.wb[index] = cpu_to_le32(tmp);
>> + gpu_addr = adev->wb.gpu_addr + (index * 4);
>> + adev->wb.wb[index] = cpu_to_le32(tmp);
>>
>> - r = amdgpu_ib_get(adev, NULL, 256, AMDGPU_IB_POOL_DIRECT, &ib);
>> - if (r) {
>> - DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
>> - goto err0;
>> - }
>> + r = amdgpu_ib_get(adev, NULL, 256, AMDGPU_IB_POOL_DIRECT, &ib);
>> + if (r) {
>> + DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
>> + goto err0;
>> }
>>
>> ib.ptr[0] = SDMA_PKT_COPY_LINEAR_HEADER_OP(SDMA_OP_WRITE) |
>> @@ -1057,10 +1026,7 @@ static int sdma_v6_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
>> goto err1;
>> }
>>
>> - if (ring->is_mes_queue)
>> - tmp = le32_to_cpu(*cpu_ptr);
>> - else
>> - tmp = le32_to_cpu(adev->wb.wb[index]);
>> + tmp = le32_to_cpu(adev->wb.wb[index]);
>>
>> if (tmp == 0xDEADBEEF)
>> r = 0;
>> @@ -1071,8 +1037,7 @@ static int sdma_v6_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
>> amdgpu_ib_free(&ib, NULL);
>> dma_fence_put(f);
>> err0:
>> - if (!ring->is_mes_queue)
>> - amdgpu_device_wb_free(adev, index);
>> + amdgpu_device_wb_free(adev, index);
>> return r;
>> }
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
>> index f10de8e2fcae2..7a788da2ef5d7 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v7_0.c
>> @@ -205,66 +205,39 @@ static uint64_t sdma_v7_0_ring_get_wptr(struct amdgpu_ring *ring)
>> static void sdma_v7_0_ring_set_wptr(struct amdgpu_ring *ring)
>> {
>> struct amdgpu_device *adev = ring->adev;
>> - uint32_t *wptr_saved;
>> - uint32_t *is_queue_unmap;
>> - uint64_t aggregated_db_index;
>> - uint32_t mqd_size = adev->mqds[AMDGPU_HW_IP_DMA].mqd_size;
>>
>> DRM_DEBUG("Setting write pointer\n");
>>
>> - if (ring->is_mes_queue) {
>> - wptr_saved = (uint32_t *)(ring->mqd_ptr + mqd_size);
>> - is_queue_unmap = (uint32_t *)(ring->mqd_ptr + mqd_size +
>> - sizeof(uint32_t));
>> - aggregated_db_index =
>> - amdgpu_mes_get_aggregated_doorbell_index(adev,
>> - ring->hw_prio);
>> -
>> + if (ring->use_doorbell) {
>> + DRM_DEBUG("Using doorbell -- "
>> + "wptr_offs == 0x%08x "
>> + "lower_32_bits(ring->wptr) << 2 == 0x%08x "
>> + "upper_32_bits(ring->wptr) << 2 == 0x%08x\n",
>> + ring->wptr_offs,
>> + lower_32_bits(ring->wptr << 2),
>> + upper_32_bits(ring->wptr << 2));
>> + /* XXX check if swapping is necessary on BE */
>> atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
>> ring->wptr << 2);
>> - *wptr_saved = ring->wptr << 2;
>> - if (*is_queue_unmap) {
>> - WDOORBELL64(aggregated_db_index, ring->wptr << 2);
>> - DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
>> - ring->doorbell_index, ring->wptr << 2);
>> - WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
>> - } else {
>> - DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
>> - ring->doorbell_index, ring->wptr << 2);
>> - WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
>> - }
>> + DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
>> + ring->doorbell_index, ring->wptr << 2);
>> + WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
>> } else {
>> - if (ring->use_doorbell) {
>> - DRM_DEBUG("Using doorbell -- "
>> - "wptr_offs == 0x%08x "
>> - "lower_32_bits(ring->wptr) << 2 == 0x%08x "
>> - "upper_32_bits(ring->wptr) << 2 == 0x%08x\n",
>> - ring->wptr_offs,
>> - lower_32_bits(ring->wptr << 2),
>> - upper_32_bits(ring->wptr << 2));
>> - /* XXX check if swapping is necessary on BE */
>> - atomic64_set((atomic64_t *)ring->wptr_cpu_addr,
>> - ring->wptr << 2);
>> - DRM_DEBUG("calling WDOORBELL64(0x%08x, 0x%016llx)\n",
>> - ring->doorbell_index, ring->wptr << 2);
>> - WDOORBELL64(ring->doorbell_index, ring->wptr << 2);
>> - } else {
>> - DRM_DEBUG("Not using doorbell -- "
>> - "regSDMA%i_GFX_RB_WPTR == 0x%08x "
>> - "regSDMA%i_GFX_RB_WPTR_HI == 0x%08x\n",
>> - ring->me,
>> - lower_32_bits(ring->wptr << 2),
>> - ring->me,
>> - upper_32_bits(ring->wptr << 2));
>> - WREG32_SOC15_IP(GC, sdma_v7_0_get_reg_offset(adev,
>> - ring->me,
>> - regSDMA0_QUEUE0_RB_WPTR),
>> - lower_32_bits(ring->wptr << 2));
>> - WREG32_SOC15_IP(GC, sdma_v7_0_get_reg_offset(adev,
>> - ring->me,
>> - regSDMA0_QUEUE0_RB_WPTR_HI),
>> - upper_32_bits(ring->wptr << 2));
>> - }
>> + DRM_DEBUG("Not using doorbell -- "
>> + "regSDMA%i_GFX_RB_WPTR == 0x%08x "
>> + "regSDMA%i_GFX_RB_WPTR_HI == 0x%08x\n",
>> + ring->me,
>> + lower_32_bits(ring->wptr << 2),
>> + ring->me,
>> + upper_32_bits(ring->wptr << 2));
>> + WREG32_SOC15_IP(GC, sdma_v7_0_get_reg_offset(adev,
>> + ring->me,
>> + regSDMA0_QUEUE0_RB_WPTR),
>> + lower_32_bits(ring->wptr << 2));
>> + WREG32_SOC15_IP(GC, sdma_v7_0_get_reg_offset(adev,
>> + ring->me,
>> + regSDMA0_QUEUE0_RB_WPTR_HI),
>> + upper_32_bits(ring->wptr << 2));
>> }
>> }
>>
>> @@ -408,11 +381,9 @@ static void sdma_v7_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 se
>> }
>>
>> if (flags & AMDGPU_FENCE_FLAG_INT) {
>> - uint32_t ctx = ring->is_mes_queue ?
>> - (ring->hw_queue_id | AMDGPU_FENCE_MES_QUEUE_FLAG) : 0;
>> /* generate an interrupt */
>> amdgpu_ring_write(ring, SDMA_PKT_COPY_LINEAR_HEADER_OP(SDMA_OP_TRAP));
>> - amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(ctx));
>> + amdgpu_ring_write(ring, SDMA_PKT_TRAP_INT_CONTEXT_INT_CONTEXT(0));
>> }
>> }
>>
>> @@ -965,33 +936,22 @@ static int sdma_v7_0_ring_test_ring(struct amdgpu_ring *ring)
>> int r;
>> u32 tmp;
>> u64 gpu_addr;
>> - volatile uint32_t *cpu_ptr = NULL;
>>
>> tmp = 0xCAFEDEAD;
>>
>> - if (ring->is_mes_queue) {
>> - uint32_t offset = 0;
>> - offset = amdgpu_mes_ctx_get_offs(ring,
>> - AMDGPU_MES_CTX_PADDING_OFFS);
>> - gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
>> - cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
>> - *cpu_ptr = tmp;
>> - } else {
>> - r = amdgpu_device_wb_get(adev, &index);
>> - if (r) {
>> - dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
>> - return r;
>> - }
>> -
>> - gpu_addr = adev->wb.gpu_addr + (index * 4);
>> - adev->wb.wb[index] = cpu_to_le32(tmp);
>> + r = amdgpu_device_wb_get(adev, &index);
>> + if (r) {
>> + dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
>> + return r;
>> }
>>
>> + gpu_addr = adev->wb.gpu_addr + (index * 4);
>> + adev->wb.wb[index] = cpu_to_le32(tmp);
>> +
>> r = amdgpu_ring_alloc(ring, 5);
>> if (r) {
>> DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r);
>> - if (!ring->is_mes_queue)
>> - amdgpu_device_wb_free(adev, index);
>> + amdgpu_device_wb_free(adev, index);
>> return r;
>> }
>>
>> @@ -1004,10 +964,7 @@ static int sdma_v7_0_ring_test_ring(struct amdgpu_ring *ring)
>> amdgpu_ring_commit(ring);
>>
>> for (i = 0; i < adev->usec_timeout; i++) {
>> - if (ring->is_mes_queue)
>> - tmp = le32_to_cpu(*cpu_ptr);
>> - else
>> - tmp = le32_to_cpu(adev->wb.wb[index]);
>> + tmp = le32_to_cpu(adev->wb.wb[index]);
>> if (tmp == 0xDEADBEEF)
>> break;
>> if (amdgpu_emu_mode == 1)
>> @@ -1019,8 +976,7 @@ static int sdma_v7_0_ring_test_ring(struct amdgpu_ring *ring)
>> if (i >= adev->usec_timeout)
>> r = -ETIMEDOUT;
>>
>> - if (!ring->is_mes_queue)
>> - amdgpu_device_wb_free(adev, index);
>> + amdgpu_device_wb_free(adev, index);
>>
>> return r;
>> }
>> @@ -1043,37 +999,23 @@ static int sdma_v7_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
>> long r;
>> u32 tmp = 0;
>> u64 gpu_addr;
>> - volatile uint32_t *cpu_ptr = NULL;
>>
>> tmp = 0xCAFEDEAD;
>> memset(&ib, 0, sizeof(ib));
>>
>> - if (ring->is_mes_queue) {
>> - uint32_t offset = 0;
>> - offset = amdgpu_mes_ctx_get_offs(ring, AMDGPU_MES_CTX_IB_OFFS);
>> - ib.gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
>> - ib.ptr = (void *)amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
>> -
>> - offset = amdgpu_mes_ctx_get_offs(ring,
>> - AMDGPU_MES_CTX_PADDING_OFFS);
>> - gpu_addr = amdgpu_mes_ctx_get_offs_gpu_addr(ring, offset);
>> - cpu_ptr = amdgpu_mes_ctx_get_offs_cpu_addr(ring, offset);
>> - *cpu_ptr = tmp;
>> - } else {
>> - r = amdgpu_device_wb_get(adev, &index);
>> - if (r) {
>> - dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
>> - return r;
>> - }
>> + r = amdgpu_device_wb_get(adev, &index);
>> + if (r) {
>> + dev_err(adev->dev, "(%ld) failed to allocate wb slot\n", r);
>> + return r;
>> + }
>>
>> - gpu_addr = adev->wb.gpu_addr + (index * 4);
>> - adev->wb.wb[index] = cpu_to_le32(tmp);
>> + gpu_addr = adev->wb.gpu_addr + (index * 4);
>> + adev->wb.wb[index] = cpu_to_le32(tmp);
>>
>> - r = amdgpu_ib_get(adev, NULL, 256, AMDGPU_IB_POOL_DIRECT, &ib);
>> - if (r) {
>> - DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
>> - goto err0;
>> - }
>> + r = amdgpu_ib_get(adev, NULL, 256, AMDGPU_IB_POOL_DIRECT, &ib);
>> + if (r) {
>> + DRM_ERROR("amdgpu: failed to get ib (%ld).\n", r);
>> + goto err0;
>> }
>>
>> ib.ptr[0] = SDMA_PKT_COPY_LINEAR_HEADER_OP(SDMA_OP_WRITE) |
>> @@ -1101,10 +1043,7 @@ static int sdma_v7_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
>> goto err1;
>> }
>>
>> - if (ring->is_mes_queue)
>> - tmp = le32_to_cpu(*cpu_ptr);
>> - else
>> - tmp = le32_to_cpu(adev->wb.wb[index]);
>> + tmp = le32_to_cpu(adev->wb.wb[index]);
>>
>> if (tmp == 0xDEADBEEF)
>> r = 0;
>> @@ -1115,8 +1054,7 @@ static int sdma_v7_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
>> amdgpu_ib_free(&ib, NULL);
>> dma_fence_put(f);
>> err0:
>> - if (!ring->is_mes_queue)
>> - amdgpu_device_wb_free(adev, index);
>> + amdgpu_device_wb_free(adev, index);
>> return r;
>> }
>>
>> --
>> 2.48.1
>>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-03-19 15:27 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-12 17:56 [PATCH] drm/amdgpu: remove is_mes_queue flag Alex Deucher
2025-03-18 13:15 ` Alex Deucher
2025-03-19 15:27 ` Christian König
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox