Switch to using a job structure for IBs.

Signed-off-by: Alex Deucher <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c | 37 ++++++++++++++------------
 1 file changed, 20 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c 
b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
index 7811cbb1f7ba3..786f1776fa30d 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
@@ -1074,7 +1074,8 @@ static int sdma_v5_0_ring_test_ring(struct amdgpu_ring 
*ring)
 static int sdma_v5_0_ring_test_ib(struct amdgpu_ring *ring, long timeout)
 {
        struct amdgpu_device *adev = ring->adev;
-       struct amdgpu_ib ib;
+       struct amdgpu_job *job;
+       struct amdgpu_ib *ib;
        struct dma_fence *f = NULL;
        unsigned index;
        long r;
@@ -1082,7 +1083,6 @@ static int sdma_v5_0_ring_test_ib(struct amdgpu_ring 
*ring, long timeout)
        u64 gpu_addr;
 
        tmp = 0xCAFEDEAD;
-       memset(&ib, 0, sizeof(ib));
 
        r = amdgpu_device_wb_get(adev, &index);
        if (r) {
@@ -1093,27 +1093,31 @@ static int sdma_v5_0_ring_test_ib(struct amdgpu_ring 
*ring, long timeout)
        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);
+       r = amdgpu_job_alloc_with_ib(ring->adev, NULL, NULL, 256,
+                                    AMDGPU_IB_POOL_DIRECT, &job,
+                                    AMDGPU_KERNEL_JOB_ID_SDMA_RING_TEST);
        if (r) {
                drm_err(adev_to_drm(adev), "failed to get ib (%ld).\n", r);
                goto err0;
        }
 
-       ib.ptr[0] = SDMA_PKT_HEADER_OP(SDMA_OP_WRITE) |
+       ib = &job->ibs[0];
+       ib->ptr[0] = SDMA_PKT_HEADER_OP(SDMA_OP_WRITE) |
                SDMA_PKT_HEADER_SUB_OP(SDMA_SUBOP_WRITE_LINEAR);
-       ib.ptr[1] = lower_32_bits(gpu_addr);
-       ib.ptr[2] = upper_32_bits(gpu_addr);
-       ib.ptr[3] = SDMA_PKT_WRITE_UNTILED_DW_3_COUNT(0);
-       ib.ptr[4] = 0xDEADBEEF;
-       ib.ptr[5] = SDMA_PKT_NOP_HEADER_OP(SDMA_OP_NOP);
-       ib.ptr[6] = SDMA_PKT_NOP_HEADER_OP(SDMA_OP_NOP);
-       ib.ptr[7] = SDMA_PKT_NOP_HEADER_OP(SDMA_OP_NOP);
-       ib.length_dw = 8;
-
-       r = amdgpu_ib_schedule(ring, 1, &ib, NULL, &f);
-       if (r)
+       ib->ptr[1] = lower_32_bits(gpu_addr);
+       ib->ptr[2] = upper_32_bits(gpu_addr);
+       ib->ptr[3] = SDMA_PKT_WRITE_UNTILED_DW_3_COUNT(0);
+       ib->ptr[4] = 0xDEADBEEF;
+       ib->ptr[5] = SDMA_PKT_NOP_HEADER_OP(SDMA_OP_NOP);
+       ib->ptr[6] = SDMA_PKT_NOP_HEADER_OP(SDMA_OP_NOP);
+       ib->ptr[7] = SDMA_PKT_NOP_HEADER_OP(SDMA_OP_NOP);
+       ib->length_dw = 8;
+
+       r = amdgpu_job_submit_direct(job, ring, &f);
+       if (r) {
+               amdgpu_job_free(job);
                goto err1;
+       }
 
        r = dma_fence_wait_timeout(f, false, timeout);
        if (r == 0) {
@@ -1133,7 +1137,6 @@ static int sdma_v5_0_ring_test_ib(struct amdgpu_ring 
*ring, long timeout)
                r = -EINVAL;
 
 err1:
-       amdgpu_ib_free(&ib, NULL);
        dma_fence_put(f);
 err0:
        amdgpu_device_wb_free(adev, index);
-- 
2.52.0

Reply via email to