diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/cik_sdma.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 25 |
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 | |||
669 | err1: | ||
674 | amdgpu_ib_free(adev, &ib); | 670 | amdgpu_ib_free(adev, &ib); |
671 | err0: | ||
675 | amdgpu_wb_free(adev, index); | 672 | amdgpu_wb_free(adev, index); |
676 | return r; | 673 | return r; |
677 | } | 674 | } |