aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/cik_sdma.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/cik_sdma.c25
1 files changed, 11 insertions, 14 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
index dd3da7bb11c1..6e8642b70445 100644
--- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
+++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
@@ -629,12 +629,10 @@ static int cik_sdma_ring_test_ib(struct amdgpu_ring *ring)
629 gpu_addr = adev->wb.gpu_addr + (index * 4); 629 gpu_addr = adev->wb.gpu_addr + (index * 4);
630 tmp = 0xCAFEDEAD; 630 tmp = 0xCAFEDEAD;
631 adev->wb.wb[index] = cpu_to_le32(tmp); 631 adev->wb.wb[index] = cpu_to_le32(tmp);
632
633 r = amdgpu_ib_get(ring, NULL, 256, &ib); 632 r = amdgpu_ib_get(ring, NULL, 256, &ib);
634 if (r) { 633 if (r) {
635 amdgpu_wb_free(adev, index);
636 DRM_ERROR("amdgpu: failed to get ib (%d).\n", r); 634 DRM_ERROR("amdgpu: failed to get ib (%d).\n", r);
637 return r; 635 goto err0;
638 } 636 }
639 637
640 ib.ptr[0] = SDMA_PACKET(SDMA_OPCODE_WRITE, SDMA_WRITE_SUB_OPCODE_LINEAR, 0); 638 ib.ptr[0] = SDMA_PACKET(SDMA_OPCODE_WRITE, SDMA_WRITE_SUB_OPCODE_LINEAR, 0);
@@ -643,20 +641,15 @@ static int cik_sdma_ring_test_ib(struct amdgpu_ring *ring)
643 ib.ptr[3] = 1; 641 ib.ptr[3] = 1;
644 ib.ptr[4] = 0xDEADBEEF; 642 ib.ptr[4] = 0xDEADBEEF;
645 ib.length_dw = 5; 643 ib.length_dw = 5;
644 r = amdgpu_sched_ib_submit_kernel_helper(adev, ring, &ib, 1, NULL,
645 AMDGPU_FENCE_OWNER_UNDEFINED);
646 if (r)
647 goto err1;
646 648
647 r = amdgpu_ib_schedule(adev, 1, &ib, AMDGPU_FENCE_OWNER_UNDEFINED);
648 if (r) {
649 amdgpu_ib_free(adev, &ib);
650 amdgpu_wb_free(adev, index);
651 DRM_ERROR("amdgpu: failed to schedule ib (%d).\n", r);
652 return r;
653 }
654 r = amdgpu_fence_wait(ib.fence, false); 649 r = amdgpu_fence_wait(ib.fence, false);
655 if (r) { 650 if (r) {
656 amdgpu_ib_free(adev, &ib);
657 amdgpu_wb_free(adev, index);
658 DRM_ERROR("amdgpu: fence wait failed (%d).\n", r); 651 DRM_ERROR("amdgpu: fence wait failed (%d).\n", r);
659 return r; 652 goto err1;
660 } 653 }
661 for (i = 0; i < adev->usec_timeout; i++) { 654 for (i = 0; i < adev->usec_timeout; i++) {
662 tmp = le32_to_cpu(adev->wb.wb[index]); 655 tmp = le32_to_cpu(adev->wb.wb[index]);
@@ -666,12 +659,16 @@ static int cik_sdma_ring_test_ib(struct amdgpu_ring *ring)
666 } 659 }
667 if (i < adev->usec_timeout) { 660 if (i < adev->usec_timeout) {
668 DRM_INFO("ib test on ring %d succeeded in %u usecs\n", 661 DRM_INFO("ib test on ring %d succeeded in %u usecs\n",
669 ib.fence->ring->idx, i); 662 ring->idx, i);
663 goto err1;
670 } else { 664 } else {
671 DRM_ERROR("amdgpu: ib test failed (0x%08X)\n", tmp); 665 DRM_ERROR("amdgpu: ib test failed (0x%08X)\n", tmp);
672 r = -EINVAL; 666 r = -EINVAL;
673 } 667 }
668
669err1:
674 amdgpu_ib_free(adev, &ib); 670 amdgpu_ib_free(adev, &ib);
671err0:
675 amdgpu_wb_free(adev, index); 672 amdgpu_wb_free(adev, index);
676 return r; 673 return r;
677} 674}