diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 25 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 26 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 25 |
3 files changed, 34 insertions, 42 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 | } |
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c index 8b7e2438b6d2..5511a191e591 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | |||
@@ -688,12 +688,10 @@ static int sdma_v2_4_ring_test_ib(struct amdgpu_ring *ring) | |||
688 | gpu_addr = adev->wb.gpu_addr + (index * 4); | 688 | gpu_addr = adev->wb.gpu_addr + (index * 4); |
689 | tmp = 0xCAFEDEAD; | 689 | tmp = 0xCAFEDEAD; |
690 | adev->wb.wb[index] = cpu_to_le32(tmp); | 690 | adev->wb.wb[index] = cpu_to_le32(tmp); |
691 | |||
692 | r = amdgpu_ib_get(ring, NULL, 256, &ib); | 691 | r = amdgpu_ib_get(ring, NULL, 256, &ib); |
693 | if (r) { | 692 | if (r) { |
694 | amdgpu_wb_free(adev, index); | ||
695 | DRM_ERROR("amdgpu: failed to get ib (%d).\n", r); | 693 | DRM_ERROR("amdgpu: failed to get ib (%d).\n", r); |
696 | return r; | 694 | goto err0; |
697 | } | 695 | } |
698 | 696 | ||
699 | ib.ptr[0] = SDMA_PKT_HEADER_OP(SDMA_OP_WRITE) | | 697 | ib.ptr[0] = SDMA_PKT_HEADER_OP(SDMA_OP_WRITE) | |
@@ -707,19 +705,15 @@ static int sdma_v2_4_ring_test_ib(struct amdgpu_ring *ring) | |||
707 | ib.ptr[7] = SDMA_PKT_HEADER_OP(SDMA_OP_NOP); | 705 | ib.ptr[7] = SDMA_PKT_HEADER_OP(SDMA_OP_NOP); |
708 | ib.length_dw = 8; | 706 | ib.length_dw = 8; |
709 | 707 | ||
710 | r = amdgpu_ib_schedule(adev, 1, &ib, AMDGPU_FENCE_OWNER_UNDEFINED); | 708 | r = amdgpu_sched_ib_submit_kernel_helper(adev, ring, &ib, 1, NULL, |
711 | if (r) { | 709 | AMDGPU_FENCE_OWNER_UNDEFINED); |
712 | amdgpu_ib_free(adev, &ib); | 710 | if (r) |
713 | amdgpu_wb_free(adev, index); | 711 | goto err1; |
714 | DRM_ERROR("amdgpu: failed to schedule ib (%d).\n", r); | 712 | |
715 | return r; | ||
716 | } | ||
717 | r = amdgpu_fence_wait(ib.fence, false); | 713 | r = amdgpu_fence_wait(ib.fence, false); |
718 | if (r) { | 714 | if (r) { |
719 | amdgpu_ib_free(adev, &ib); | ||
720 | amdgpu_wb_free(adev, index); | ||
721 | DRM_ERROR("amdgpu: fence wait failed (%d).\n", r); | 715 | DRM_ERROR("amdgpu: fence wait failed (%d).\n", r); |
722 | return r; | 716 | goto err1; |
723 | } | 717 | } |
724 | for (i = 0; i < adev->usec_timeout; i++) { | 718 | for (i = 0; i < adev->usec_timeout; i++) { |
725 | tmp = le32_to_cpu(adev->wb.wb[index]); | 719 | tmp = le32_to_cpu(adev->wb.wb[index]); |
@@ -729,12 +723,16 @@ static int sdma_v2_4_ring_test_ib(struct amdgpu_ring *ring) | |||
729 | } | 723 | } |
730 | if (i < adev->usec_timeout) { | 724 | if (i < adev->usec_timeout) { |
731 | DRM_INFO("ib test on ring %d succeeded in %u usecs\n", | 725 | DRM_INFO("ib test on ring %d succeeded in %u usecs\n", |
732 | ib.fence->ring->idx, i); | 726 | ring->idx, i); |
727 | goto err1; | ||
733 | } else { | 728 | } else { |
734 | DRM_ERROR("amdgpu: ib test failed (0x%08X)\n", tmp); | 729 | DRM_ERROR("amdgpu: ib test failed (0x%08X)\n", tmp); |
735 | r = -EINVAL; | 730 | r = -EINVAL; |
736 | } | 731 | } |
732 | |||
733 | err1: | ||
737 | amdgpu_ib_free(adev, &ib); | 734 | amdgpu_ib_free(adev, &ib); |
735 | err0: | ||
738 | amdgpu_wb_free(adev, index); | 736 | amdgpu_wb_free(adev, index); |
739 | return r; | 737 | return r; |
740 | } | 738 | } |
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c index 4b5d769bdb4f..679ea9c779ee 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | |||
@@ -809,12 +809,10 @@ static int sdma_v3_0_ring_test_ib(struct amdgpu_ring *ring) | |||
809 | gpu_addr = adev->wb.gpu_addr + (index * 4); | 809 | gpu_addr = adev->wb.gpu_addr + (index * 4); |
810 | tmp = 0xCAFEDEAD; | 810 | tmp = 0xCAFEDEAD; |
811 | adev->wb.wb[index] = cpu_to_le32(tmp); | 811 | adev->wb.wb[index] = cpu_to_le32(tmp); |
812 | |||
813 | r = amdgpu_ib_get(ring, NULL, 256, &ib); | 812 | r = amdgpu_ib_get(ring, NULL, 256, &ib); |
814 | if (r) { | 813 | if (r) { |
815 | amdgpu_wb_free(adev, index); | ||
816 | DRM_ERROR("amdgpu: failed to get ib (%d).\n", r); | 814 | DRM_ERROR("amdgpu: failed to get ib (%d).\n", r); |
817 | return r; | 815 | goto err0; |
818 | } | 816 | } |
819 | 817 | ||
820 | ib.ptr[0] = SDMA_PKT_HEADER_OP(SDMA_OP_WRITE) | | 818 | ib.ptr[0] = SDMA_PKT_HEADER_OP(SDMA_OP_WRITE) | |
@@ -828,19 +826,15 @@ static int sdma_v3_0_ring_test_ib(struct amdgpu_ring *ring) | |||
828 | ib.ptr[7] = SDMA_PKT_NOP_HEADER_OP(SDMA_OP_NOP); | 826 | ib.ptr[7] = SDMA_PKT_NOP_HEADER_OP(SDMA_OP_NOP); |
829 | ib.length_dw = 8; | 827 | ib.length_dw = 8; |
830 | 828 | ||
831 | r = amdgpu_ib_schedule(adev, 1, &ib, AMDGPU_FENCE_OWNER_UNDEFINED); | 829 | r = amdgpu_sched_ib_submit_kernel_helper(adev, ring, &ib, 1, NULL, |
832 | if (r) { | 830 | AMDGPU_FENCE_OWNER_UNDEFINED); |
833 | amdgpu_ib_free(adev, &ib); | 831 | if (r) |
834 | amdgpu_wb_free(adev, index); | 832 | goto err1; |
835 | DRM_ERROR("amdgpu: failed to schedule ib (%d).\n", r); | 833 | |
836 | return r; | ||
837 | } | ||
838 | r = amdgpu_fence_wait(ib.fence, false); | 834 | r = amdgpu_fence_wait(ib.fence, false); |
839 | if (r) { | 835 | if (r) { |
840 | amdgpu_ib_free(adev, &ib); | ||
841 | amdgpu_wb_free(adev, index); | ||
842 | DRM_ERROR("amdgpu: fence wait failed (%d).\n", r); | 836 | DRM_ERROR("amdgpu: fence wait failed (%d).\n", r); |
843 | return r; | 837 | goto err1; |
844 | } | 838 | } |
845 | for (i = 0; i < adev->usec_timeout; i++) { | 839 | for (i = 0; i < adev->usec_timeout; i++) { |
846 | tmp = le32_to_cpu(adev->wb.wb[index]); | 840 | tmp = le32_to_cpu(adev->wb.wb[index]); |
@@ -850,12 +844,15 @@ static int sdma_v3_0_ring_test_ib(struct amdgpu_ring *ring) | |||
850 | } | 844 | } |
851 | if (i < adev->usec_timeout) { | 845 | if (i < adev->usec_timeout) { |
852 | DRM_INFO("ib test on ring %d succeeded in %u usecs\n", | 846 | DRM_INFO("ib test on ring %d succeeded in %u usecs\n", |
853 | ib.fence->ring->idx, i); | 847 | ring->idx, i); |
848 | goto err1; | ||
854 | } else { | 849 | } else { |
855 | DRM_ERROR("amdgpu: ib test failed (0x%08X)\n", tmp); | 850 | DRM_ERROR("amdgpu: ib test failed (0x%08X)\n", tmp); |
856 | r = -EINVAL; | 851 | r = -EINVAL; |
857 | } | 852 | } |
853 | err1: | ||
858 | amdgpu_ib_free(adev, &ib); | 854 | amdgpu_ib_free(adev, &ib); |
855 | err0: | ||
859 | amdgpu_wb_free(adev, index); | 856 | amdgpu_wb_free(adev, index); |
860 | return r; | 857 | return r; |
861 | } | 858 | } |