aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu
diff options
context:
space:
mode:
authorChunming Zhou <david1.zhou@amd.com>2015-06-01 03:33:20 -0400
committerAlex Deucher <alexander.deucher@amd.com>2015-08-17 16:50:45 -0400
commit0011fdaa4dab19bf545a28c0d4d164bba4745d29 (patch)
treee87351f4a728112bff7d8026101024c38dea6e9c /drivers/gpu/drm/amd/amdgpu
parent42d13693c01f895d7918ed49c65c0c4844027314 (diff)
drm/amdgpu: use gpu scheduler for sdma ib test
Signed-off-by: Chunming Zhou <david1.zhou@amd.com> Reviewed-by: Christian K?nig <christian.koenig@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/cik_sdma.c25
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c26
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c25
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
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}
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
733err1:
737 amdgpu_ib_free(adev, &ib); 734 amdgpu_ib_free(adev, &ib);
735err0:
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 }
853err1:
858 amdgpu_ib_free(adev, &ib); 854 amdgpu_ib_free(adev, &ib);
855err0:
859 amdgpu_wb_free(adev, index); 856 amdgpu_wb_free(adev, index);
860 return r; 857 return r;
861} 858}