diff options
| author | Chunming Zhou <david1.zhou@amd.com> | 2015-06-01 03:33:20 -0400 |
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2015-08-17 16:50:45 -0400 |
| commit | 0011fdaa4dab19bf545a28c0d4d164bba4745d29 (patch) | |
| tree | e87351f4a728112bff7d8026101024c38dea6e9c /drivers/gpu | |
| parent | 42d13693c01f895d7918ed49c65c0c4844027314 (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')
| -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 | } |
