aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2018-10-29 05:48:31 -0400
committerAlex Deucher <alexander.deucher@amd.com>2018-11-05 14:21:25 -0500
commitdc9eeff84c77080f545575a30062af0ac65b1eb0 (patch)
treef426bd63d15eac17f1ce7119bffa22d92f7556cf /drivers/gpu/drm/amd/amdgpu
parente4312d459a2e572e093c758793bd5357d6bddfd1 (diff)
drm/amdgpu: further ring test cleanups
Move all error messages from IP specific code into the common helper. This way we now uses the ring name in the messages instead of the index and note which device is affected as well. Also cleanup error handling in the IP specific code and consequently use ETIMEDOUT when the ring test timed out. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c8
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c14
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c46
-rw-r--r--drivers/gpu/drm/amd/amdgpu/cik_sdma.c24
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c25
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c24
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c27
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c27
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c23
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c23
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c23
-rw-r--r--drivers/gpu/drm/amd/amdgpu/si_dma.c23
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c17
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c16
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c13
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c30
16 files changed, 114 insertions, 249 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
index 3c89c8aa33d8..5b75bdc8dc28 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
@@ -512,11 +512,17 @@ static void amdgpu_debugfs_ring_fini(struct amdgpu_ring *ring)
512 */ 512 */
513int amdgpu_ring_test_helper(struct amdgpu_ring *ring) 513int amdgpu_ring_test_helper(struct amdgpu_ring *ring)
514{ 514{
515 struct amdgpu_device *adev = ring->adev;
515 int r; 516 int r;
516 517
517 r = amdgpu_ring_test_ring(ring); 518 r = amdgpu_ring_test_ring(ring);
519 if (r)
520 DRM_DEV_ERROR(adev->dev, "ring %s test failed (%d)\n",
521 ring->name, r);
522 else
523 DRM_DEV_DEBUG(adev->dev, "ring test on %s succeeded\n",
524 ring->name);
518 525
519 ring->sched.ready = !r; 526 ring->sched.ready = !r;
520
521 return r; 527 return r;
522} 528}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
index 5f3f54073818..7b999ee3defb 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
@@ -1079,11 +1079,9 @@ int amdgpu_vce_ring_test_ring(struct amdgpu_ring *ring)
1079 return 0; 1079 return 0;
1080 1080
1081 r = amdgpu_ring_alloc(ring, 16); 1081 r = amdgpu_ring_alloc(ring, 16);
1082 if (r) { 1082 if (r)
1083 DRM_ERROR("amdgpu: vce failed to lock ring %d (%d).\n",
1084 ring->idx, r);
1085 return r; 1083 return r;
1086 } 1084
1087 amdgpu_ring_write(ring, VCE_CMD_END); 1085 amdgpu_ring_write(ring, VCE_CMD_END);
1088 amdgpu_ring_commit(ring); 1086 amdgpu_ring_commit(ring);
1089 1087
@@ -1093,14 +1091,8 @@ int amdgpu_vce_ring_test_ring(struct amdgpu_ring *ring)
1093 DRM_UDELAY(1); 1091 DRM_UDELAY(1);
1094 } 1092 }
1095 1093
1096 if (i < timeout) { 1094 if (i >= timeout)
1097 DRM_DEBUG("ring test on %d succeeded in %d usecs\n",
1098 ring->idx, i);
1099 } else {
1100 DRM_ERROR("amdgpu: ring %d test failed\n",
1101 ring->idx);
1102 r = -ETIMEDOUT; 1095 r = -ETIMEDOUT;
1103 }
1104 1096
1105 return r; 1097 return r;
1106} 1098}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
index 27da13df2f11..4b7f52e68457 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
@@ -425,11 +425,9 @@ int amdgpu_vcn_dec_ring_test_ring(struct amdgpu_ring *ring)
425 425
426 WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_SCRATCH9), 0xCAFEDEAD); 426 WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_SCRATCH9), 0xCAFEDEAD);
427 r = amdgpu_ring_alloc(ring, 3); 427 r = amdgpu_ring_alloc(ring, 3);
428 if (r) { 428 if (r)
429 DRM_ERROR("amdgpu: cp failed to lock ring %d (%d).\n",
430 ring->idx, r);
431 return r; 429 return r;
432 } 430
433 amdgpu_ring_write(ring, 431 amdgpu_ring_write(ring,
434 PACKET0(SOC15_REG_OFFSET(UVD, 0, mmUVD_SCRATCH9), 0)); 432 PACKET0(SOC15_REG_OFFSET(UVD, 0, mmUVD_SCRATCH9), 0));
435 amdgpu_ring_write(ring, 0xDEADBEEF); 433 amdgpu_ring_write(ring, 0xDEADBEEF);
@@ -441,14 +439,9 @@ int amdgpu_vcn_dec_ring_test_ring(struct amdgpu_ring *ring)
441 DRM_UDELAY(1); 439 DRM_UDELAY(1);
442 } 440 }
443 441
444 if (i < adev->usec_timeout) { 442 if (i >= adev->usec_timeout)
445 DRM_DEBUG("ring test on %d succeeded in %d usecs\n", 443 r = -ETIMEDOUT;
446 ring->idx, i); 444
447 } else {
448 DRM_ERROR("amdgpu: ring %d test failed (0x%08X)\n",
449 ring->idx, tmp);
450 r = -EINVAL;
451 }
452 return r; 445 return r;
453} 446}
454 447
@@ -606,11 +599,9 @@ int amdgpu_vcn_enc_ring_test_ring(struct amdgpu_ring *ring)
606 int r; 599 int r;
607 600
608 r = amdgpu_ring_alloc(ring, 16); 601 r = amdgpu_ring_alloc(ring, 16);
609 if (r) { 602 if (r)
610 DRM_ERROR("amdgpu: vcn enc failed to lock ring %d (%d).\n",
611 ring->idx, r);
612 return r; 603 return r;
613 } 604
614 amdgpu_ring_write(ring, VCN_ENC_CMD_END); 605 amdgpu_ring_write(ring, VCN_ENC_CMD_END);
615 amdgpu_ring_commit(ring); 606 amdgpu_ring_commit(ring);
616 607
@@ -620,14 +611,8 @@ int amdgpu_vcn_enc_ring_test_ring(struct amdgpu_ring *ring)
620 DRM_UDELAY(1); 611 DRM_UDELAY(1);
621 } 612 }
622 613
623 if (i < adev->usec_timeout) { 614 if (i >= adev->usec_timeout)
624 DRM_DEBUG("ring test on %d succeeded in %d usecs\n",
625 ring->idx, i);
626 } else {
627 DRM_ERROR("amdgpu: ring %d test failed\n",
628 ring->idx);
629 r = -ETIMEDOUT; 615 r = -ETIMEDOUT;
630 }
631 616
632 return r; 617 return r;
633} 618}
@@ -778,11 +763,8 @@ int amdgpu_vcn_jpeg_ring_test_ring(struct amdgpu_ring *ring)
778 WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_SCRATCH9), 0xCAFEDEAD); 763 WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_SCRATCH9), 0xCAFEDEAD);
779 r = amdgpu_ring_alloc(ring, 3); 764 r = amdgpu_ring_alloc(ring, 3);
780 765
781 if (r) { 766 if (r)
782 DRM_ERROR("amdgpu: cp failed to lock ring %d (%d).\n",
783 ring->idx, r);
784 return r; 767 return r;
785 }
786 768
787 amdgpu_ring_write(ring, 769 amdgpu_ring_write(ring,
788 PACKETJ(SOC15_REG_OFFSET(UVD, 0, mmUVD_SCRATCH9), 0, 0, 0)); 770 PACKETJ(SOC15_REG_OFFSET(UVD, 0, mmUVD_SCRATCH9), 0, 0, 0));
@@ -796,14 +778,8 @@ int amdgpu_vcn_jpeg_ring_test_ring(struct amdgpu_ring *ring)
796 DRM_UDELAY(1); 778 DRM_UDELAY(1);
797 } 779 }
798 780
799 if (i < adev->usec_timeout) { 781 if (i >= adev->usec_timeout)
800 DRM_DEBUG("ring test on %d succeeded in %d usecs\n", 782 r = -ETIMEDOUT;
801 ring->idx, i);
802 } else {
803 DRM_ERROR("amdgpu: ring %d test failed (0x%08X)\n",
804 ring->idx, tmp);
805 r = -EINVAL;
806 }
807 783
808 return r; 784 return r;
809} 785}
diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
index 561406a1cf88..5eb15bf9ec7c 100644
--- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
+++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
@@ -616,21 +616,17 @@ static int cik_sdma_ring_test_ring(struct amdgpu_ring *ring)
616 u64 gpu_addr; 616 u64 gpu_addr;
617 617
618 r = amdgpu_device_wb_get(adev, &index); 618 r = amdgpu_device_wb_get(adev, &index);
619 if (r) { 619 if (r)
620 dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
621 return r; 620 return r;
622 }
623 621
624 gpu_addr = adev->wb.gpu_addr + (index * 4); 622 gpu_addr = adev->wb.gpu_addr + (index * 4);
625 tmp = 0xCAFEDEAD; 623 tmp = 0xCAFEDEAD;
626 adev->wb.wb[index] = cpu_to_le32(tmp); 624 adev->wb.wb[index] = cpu_to_le32(tmp);
627 625
628 r = amdgpu_ring_alloc(ring, 5); 626 r = amdgpu_ring_alloc(ring, 5);
629 if (r) { 627 if (r)
630 DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r); 628 goto error_free_wb;
631 amdgpu_device_wb_free(adev, index); 629
632 return r;
633 }
634 amdgpu_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_WRITE, SDMA_WRITE_SUB_OPCODE_LINEAR, 0)); 630 amdgpu_ring_write(ring, SDMA_PACKET(SDMA_OPCODE_WRITE, SDMA_WRITE_SUB_OPCODE_LINEAR, 0));
635 amdgpu_ring_write(ring, lower_32_bits(gpu_addr)); 631 amdgpu_ring_write(ring, lower_32_bits(gpu_addr));
636 amdgpu_ring_write(ring, upper_32_bits(gpu_addr)); 632 amdgpu_ring_write(ring, upper_32_bits(gpu_addr));
@@ -645,15 +641,11 @@ static int cik_sdma_ring_test_ring(struct amdgpu_ring *ring)
645 DRM_UDELAY(1); 641 DRM_UDELAY(1);
646 } 642 }
647 643
648 if (i < adev->usec_timeout) { 644 if (i >= adev->usec_timeout)
649 DRM_DEBUG("ring test on %d succeeded in %d usecs\n", ring->idx, i); 645 r = -ETIMEDOUT;
650 } else {
651 DRM_ERROR("amdgpu: ring %d test failed (0x%08X)\n",
652 ring->idx, tmp);
653 r = -EINVAL;
654 }
655 amdgpu_device_wb_free(adev, index);
656 646
647error_free_wb:
648 amdgpu_device_wb_free(adev, index);
657 return r; 649 return r;
658} 650}
659 651
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
index c8f038136af0..0f36bb08fe1c 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v6_0.c
@@ -1775,18 +1775,15 @@ static int gfx_v6_0_ring_test_ring(struct amdgpu_ring *ring)
1775 int r; 1775 int r;
1776 1776
1777 r = amdgpu_gfx_scratch_get(adev, &scratch); 1777 r = amdgpu_gfx_scratch_get(adev, &scratch);
1778 if (r) { 1778 if (r)
1779 DRM_ERROR("amdgpu: cp failed to get scratch reg (%d).\n", r);
1780 return r; 1779 return r;
1781 } 1780
1782 WREG32(scratch, 0xCAFEDEAD); 1781 WREG32(scratch, 0xCAFEDEAD);
1783 1782
1784 r = amdgpu_ring_alloc(ring, 3); 1783 r = amdgpu_ring_alloc(ring, 3);
1785 if (r) { 1784 if (r)
1786 DRM_ERROR("amdgpu: cp failed to lock ring %d (%d).\n", ring->idx, r); 1785 goto error_free_scratch;
1787 amdgpu_gfx_scratch_free(adev, scratch); 1786
1788 return r;
1789 }
1790 amdgpu_ring_write(ring, PACKET3(PACKET3_SET_CONFIG_REG, 1)); 1787 amdgpu_ring_write(ring, PACKET3(PACKET3_SET_CONFIG_REG, 1));
1791 amdgpu_ring_write(ring, (scratch - PACKET3_SET_CONFIG_REG_START)); 1788 amdgpu_ring_write(ring, (scratch - PACKET3_SET_CONFIG_REG_START));
1792 amdgpu_ring_write(ring, 0xDEADBEEF); 1789 amdgpu_ring_write(ring, 0xDEADBEEF);
@@ -1798,13 +1795,11 @@ static int gfx_v6_0_ring_test_ring(struct amdgpu_ring *ring)
1798 break; 1795 break;
1799 DRM_UDELAY(1); 1796 DRM_UDELAY(1);
1800 } 1797 }
1801 if (i < adev->usec_timeout) { 1798
1802 DRM_DEBUG("ring test on %d succeeded in %d usecs\n", ring->idx, i); 1799 if (i >= adev->usec_timeout)
1803 } else { 1800 r = -ETIMEDOUT;
1804 DRM_ERROR("amdgpu: ring %d test failed (scratch(0x%04X)=0x%08X)\n", 1801
1805 ring->idx, scratch, tmp); 1802error_free_scratch:
1806 r = -EINVAL;
1807 }
1808 amdgpu_gfx_scratch_free(adev, scratch); 1803 amdgpu_gfx_scratch_free(adev, scratch);
1809 return r; 1804 return r;
1810} 1805}
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
index 6de6bb18bdfa..742ec4425ca1 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
@@ -2064,17 +2064,14 @@ static int gfx_v7_0_ring_test_ring(struct amdgpu_ring *ring)
2064 int r; 2064 int r;
2065 2065
2066 r = amdgpu_gfx_scratch_get(adev, &scratch); 2066 r = amdgpu_gfx_scratch_get(adev, &scratch);
2067 if (r) { 2067 if (r)
2068 DRM_ERROR("amdgpu: cp failed to get scratch reg (%d).\n", r);
2069 return r; 2068 return r;
2070 } 2069
2071 WREG32(scratch, 0xCAFEDEAD); 2070 WREG32(scratch, 0xCAFEDEAD);
2072 r = amdgpu_ring_alloc(ring, 3); 2071 r = amdgpu_ring_alloc(ring, 3);
2073 if (r) { 2072 if (r)
2074 DRM_ERROR("amdgpu: cp failed to lock ring %d (%d).\n", ring->idx, r); 2073 goto error_free_scratch;
2075 amdgpu_gfx_scratch_free(adev, scratch); 2074
2076 return r;
2077 }
2078 amdgpu_ring_write(ring, PACKET3(PACKET3_SET_UCONFIG_REG, 1)); 2075 amdgpu_ring_write(ring, PACKET3(PACKET3_SET_UCONFIG_REG, 1));
2079 amdgpu_ring_write(ring, (scratch - PACKET3_SET_UCONFIG_REG_START)); 2076 amdgpu_ring_write(ring, (scratch - PACKET3_SET_UCONFIG_REG_START));
2080 amdgpu_ring_write(ring, 0xDEADBEEF); 2077 amdgpu_ring_write(ring, 0xDEADBEEF);
@@ -2086,13 +2083,10 @@ static int gfx_v7_0_ring_test_ring(struct amdgpu_ring *ring)
2086 break; 2083 break;
2087 DRM_UDELAY(1); 2084 DRM_UDELAY(1);
2088 } 2085 }
2089 if (i < adev->usec_timeout) { 2086 if (i >= adev->usec_timeout)
2090 DRM_DEBUG("ring test on %d succeeded in %d usecs\n", ring->idx, i); 2087 r = -ETIMEDOUT;
2091 } else { 2088
2092 DRM_ERROR("amdgpu: ring %d test failed (scratch(0x%04X)=0x%08X)\n", 2089error_free_scratch:
2093 ring->idx, scratch, tmp);
2094 r = -EINVAL;
2095 }
2096 amdgpu_gfx_scratch_free(adev, scratch); 2090 amdgpu_gfx_scratch_free(adev, scratch);
2097 return r; 2091 return r;
2098} 2092}
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
index 02f8ca56386f..45dda5684083 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -839,18 +839,14 @@ static int gfx_v8_0_ring_test_ring(struct amdgpu_ring *ring)
839 int r; 839 int r;
840 840
841 r = amdgpu_gfx_scratch_get(adev, &scratch); 841 r = amdgpu_gfx_scratch_get(adev, &scratch);
842 if (r) { 842 if (r)
843 DRM_ERROR("amdgpu: cp failed to get scratch reg (%d).\n", r);
844 return r; 843 return r;
845 } 844
846 WREG32(scratch, 0xCAFEDEAD); 845 WREG32(scratch, 0xCAFEDEAD);
847 r = amdgpu_ring_alloc(ring, 3); 846 r = amdgpu_ring_alloc(ring, 3);
848 if (r) { 847 if (r)
849 DRM_ERROR("amdgpu: cp failed to lock ring %d (%d).\n", 848 goto error_free_scratch;
850 ring->idx, r); 849
851 amdgpu_gfx_scratch_free(adev, scratch);
852 return r;
853 }
854 amdgpu_ring_write(ring, PACKET3(PACKET3_SET_UCONFIG_REG, 1)); 850 amdgpu_ring_write(ring, PACKET3(PACKET3_SET_UCONFIG_REG, 1));
855 amdgpu_ring_write(ring, (scratch - PACKET3_SET_UCONFIG_REG_START)); 851 amdgpu_ring_write(ring, (scratch - PACKET3_SET_UCONFIG_REG_START));
856 amdgpu_ring_write(ring, 0xDEADBEEF); 852 amdgpu_ring_write(ring, 0xDEADBEEF);
@@ -862,14 +858,11 @@ static int gfx_v8_0_ring_test_ring(struct amdgpu_ring *ring)
862 break; 858 break;
863 DRM_UDELAY(1); 859 DRM_UDELAY(1);
864 } 860 }
865 if (i < adev->usec_timeout) { 861
866 DRM_DEBUG("ring test on %d succeeded in %d usecs\n", 862 if (i >= adev->usec_timeout)
867 ring->idx, i); 863 r = -ETIMEDOUT;
868 } else { 864
869 DRM_ERROR("amdgpu: ring %d test failed (scratch(0x%04X)=0x%08X)\n", 865error_free_scratch:
870 ring->idx, scratch, tmp);
871 r = -EINVAL;
872 }
873 amdgpu_gfx_scratch_free(adev, scratch); 866 amdgpu_gfx_scratch_free(adev, scratch);
874 return r; 867 return r;
875} 868}
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
index d71c9c47444e..9248ef08bb37 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
@@ -396,18 +396,14 @@ static int gfx_v9_0_ring_test_ring(struct amdgpu_ring *ring)
396 int r; 396 int r;
397 397
398 r = amdgpu_gfx_scratch_get(adev, &scratch); 398 r = amdgpu_gfx_scratch_get(adev, &scratch);
399 if (r) { 399 if (r)
400 DRM_ERROR("amdgpu: cp failed to get scratch reg (%d).\n", r);
401 return r; 400 return r;
402 } 401
403 WREG32(scratch, 0xCAFEDEAD); 402 WREG32(scratch, 0xCAFEDEAD);
404 r = amdgpu_ring_alloc(ring, 3); 403 r = amdgpu_ring_alloc(ring, 3);
405 if (r) { 404 if (r)
406 DRM_ERROR("amdgpu: cp failed to lock ring %d (%d).\n", 405 goto error_free_scratch;
407 ring->idx, r); 406
408 amdgpu_gfx_scratch_free(adev, scratch);
409 return r;
410 }
411 amdgpu_ring_write(ring, PACKET3(PACKET3_SET_UCONFIG_REG, 1)); 407 amdgpu_ring_write(ring, PACKET3(PACKET3_SET_UCONFIG_REG, 1));
412 amdgpu_ring_write(ring, (scratch - PACKET3_SET_UCONFIG_REG_START)); 408 amdgpu_ring_write(ring, (scratch - PACKET3_SET_UCONFIG_REG_START));
413 amdgpu_ring_write(ring, 0xDEADBEEF); 409 amdgpu_ring_write(ring, 0xDEADBEEF);
@@ -419,14 +415,11 @@ static int gfx_v9_0_ring_test_ring(struct amdgpu_ring *ring)
419 break; 415 break;
420 DRM_UDELAY(1); 416 DRM_UDELAY(1);
421 } 417 }
422 if (i < adev->usec_timeout) { 418
423 DRM_DEBUG("ring test on %d succeeded in %d usecs\n", 419 if (i >= adev->usec_timeout)
424 ring->idx, i); 420 r = -ETIMEDOUT;
425 } else { 421
426 DRM_ERROR("amdgpu: ring %d test failed (scratch(0x%04X)=0x%08X)\n", 422error_free_scratch:
427 ring->idx, scratch, tmp);
428 r = -EINVAL;
429 }
430 amdgpu_gfx_scratch_free(adev, scratch); 423 amdgpu_gfx_scratch_free(adev, scratch);
431 return r; 424 return r;
432} 425}
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
index fa2f6bea1d60..4fded77e4ae0 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
@@ -548,21 +548,16 @@ static int sdma_v2_4_ring_test_ring(struct amdgpu_ring *ring)
548 u64 gpu_addr; 548 u64 gpu_addr;
549 549
550 r = amdgpu_device_wb_get(adev, &index); 550 r = amdgpu_device_wb_get(adev, &index);
551 if (r) { 551 if (r)
552 dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
553 return r; 552 return r;
554 }
555 553
556 gpu_addr = adev->wb.gpu_addr + (index * 4); 554 gpu_addr = adev->wb.gpu_addr + (index * 4);
557 tmp = 0xCAFEDEAD; 555 tmp = 0xCAFEDEAD;
558 adev->wb.wb[index] = cpu_to_le32(tmp); 556 adev->wb.wb[index] = cpu_to_le32(tmp);
559 557
560 r = amdgpu_ring_alloc(ring, 5); 558 r = amdgpu_ring_alloc(ring, 5);
561 if (r) { 559 if (r)
562 DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r); 560 goto error_free_wb;
563 amdgpu_device_wb_free(adev, index);
564 return r;
565 }
566 561
567 amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_WRITE) | 562 amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_WRITE) |
568 SDMA_PKT_HEADER_SUB_OP(SDMA_SUBOP_WRITE_LINEAR)); 563 SDMA_PKT_HEADER_SUB_OP(SDMA_SUBOP_WRITE_LINEAR));
@@ -579,15 +574,11 @@ static int sdma_v2_4_ring_test_ring(struct amdgpu_ring *ring)
579 DRM_UDELAY(1); 574 DRM_UDELAY(1);
580 } 575 }
581 576
582 if (i < adev->usec_timeout) { 577 if (i >= adev->usec_timeout)
583 DRM_DEBUG("ring test on %d succeeded in %d usecs\n", ring->idx, i); 578 r = -ETIMEDOUT;
584 } else {
585 DRM_ERROR("amdgpu: ring %d test failed (0x%08X)\n",
586 ring->idx, tmp);
587 r = -EINVAL;
588 }
589 amdgpu_device_wb_free(adev, index);
590 579
580error_free_wb:
581 amdgpu_device_wb_free(adev, index);
591 return r; 582 return r;
592} 583}
593 584
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
index 942fe3696ef0..5d59b7196da9 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
@@ -820,21 +820,16 @@ static int sdma_v3_0_ring_test_ring(struct amdgpu_ring *ring)
820 u64 gpu_addr; 820 u64 gpu_addr;
821 821
822 r = amdgpu_device_wb_get(adev, &index); 822 r = amdgpu_device_wb_get(adev, &index);
823 if (r) { 823 if (r)
824 dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
825 return r; 824 return r;
826 }
827 825
828 gpu_addr = adev->wb.gpu_addr + (index * 4); 826 gpu_addr = adev->wb.gpu_addr + (index * 4);
829 tmp = 0xCAFEDEAD; 827 tmp = 0xCAFEDEAD;
830 adev->wb.wb[index] = cpu_to_le32(tmp); 828 adev->wb.wb[index] = cpu_to_le32(tmp);
831 829
832 r = amdgpu_ring_alloc(ring, 5); 830 r = amdgpu_ring_alloc(ring, 5);
833 if (r) { 831 if (r)
834 DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r); 832 goto error_free_wb;
835 amdgpu_device_wb_free(adev, index);
836 return r;
837 }
838 833
839 amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_WRITE) | 834 amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_WRITE) |
840 SDMA_PKT_HEADER_SUB_OP(SDMA_SUBOP_WRITE_LINEAR)); 835 SDMA_PKT_HEADER_SUB_OP(SDMA_SUBOP_WRITE_LINEAR));
@@ -851,15 +846,11 @@ static int sdma_v3_0_ring_test_ring(struct amdgpu_ring *ring)
851 DRM_UDELAY(1); 846 DRM_UDELAY(1);
852 } 847 }
853 848
854 if (i < adev->usec_timeout) { 849 if (i >= adev->usec_timeout)
855 DRM_DEBUG("ring test on %d succeeded in %d usecs\n", ring->idx, i); 850 r = -ETIMEDOUT;
856 } else {
857 DRM_ERROR("amdgpu: ring %d test failed (0x%08X)\n",
858 ring->idx, tmp);
859 r = -EINVAL;
860 }
861 amdgpu_device_wb_free(adev, index);
862 851
852error_free_wb:
853 amdgpu_device_wb_free(adev, index);
863 return r; 854 return r;
864} 855}
865 856
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
index 65312897b8ba..01df6cf910b8 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
@@ -1182,21 +1182,16 @@ static int sdma_v4_0_ring_test_ring(struct amdgpu_ring *ring)
1182 u64 gpu_addr; 1182 u64 gpu_addr;
1183 1183
1184 r = amdgpu_device_wb_get(adev, &index); 1184 r = amdgpu_device_wb_get(adev, &index);
1185 if (r) { 1185 if (r)
1186 dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
1187 return r; 1186 return r;
1188 }
1189 1187
1190 gpu_addr = adev->wb.gpu_addr + (index * 4); 1188 gpu_addr = adev->wb.gpu_addr + (index * 4);
1191 tmp = 0xCAFEDEAD; 1189 tmp = 0xCAFEDEAD;
1192 adev->wb.wb[index] = cpu_to_le32(tmp); 1190 adev->wb.wb[index] = cpu_to_le32(tmp);
1193 1191
1194 r = amdgpu_ring_alloc(ring, 5); 1192 r = amdgpu_ring_alloc(ring, 5);
1195 if (r) { 1193 if (r)
1196 DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r); 1194 goto error_free_wb;
1197 amdgpu_device_wb_free(adev, index);
1198 return r;
1199 }
1200 1195
1201 amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_WRITE) | 1196 amdgpu_ring_write(ring, SDMA_PKT_HEADER_OP(SDMA_OP_WRITE) |
1202 SDMA_PKT_HEADER_SUB_OP(SDMA_SUBOP_WRITE_LINEAR)); 1197 SDMA_PKT_HEADER_SUB_OP(SDMA_SUBOP_WRITE_LINEAR));
@@ -1213,15 +1208,11 @@ static int sdma_v4_0_ring_test_ring(struct amdgpu_ring *ring)
1213 DRM_UDELAY(1); 1208 DRM_UDELAY(1);
1214 } 1209 }
1215 1210
1216 if (i < adev->usec_timeout) { 1211 if (i >= adev->usec_timeout)
1217 DRM_DEBUG("ring test on %d succeeded in %d usecs\n", ring->idx, i); 1212 r = -ETIMEDOUT;
1218 } else {
1219 DRM_ERROR("amdgpu: ring %d test failed (0x%08X)\n",
1220 ring->idx, tmp);
1221 r = -EINVAL;
1222 }
1223 amdgpu_device_wb_free(adev, index);
1224 1213
1214error_free_wb:
1215 amdgpu_device_wb_free(adev, index);
1225 return r; 1216 return r;
1226} 1217}
1227 1218
diff --git a/drivers/gpu/drm/amd/amdgpu/si_dma.c b/drivers/gpu/drm/amd/amdgpu/si_dma.c
index 05ce1ca4c789..f051e3d1e988 100644
--- a/drivers/gpu/drm/amd/amdgpu/si_dma.c
+++ b/drivers/gpu/drm/amd/amdgpu/si_dma.c
@@ -207,21 +207,16 @@ static int si_dma_ring_test_ring(struct amdgpu_ring *ring)
207 u64 gpu_addr; 207 u64 gpu_addr;
208 208
209 r = amdgpu_device_wb_get(adev, &index); 209 r = amdgpu_device_wb_get(adev, &index);
210 if (r) { 210 if (r)
211 dev_err(adev->dev, "(%d) failed to allocate wb slot\n", r);
212 return r; 211 return r;
213 }
214 212
215 gpu_addr = adev->wb.gpu_addr + (index * 4); 213 gpu_addr = adev->wb.gpu_addr + (index * 4);
216 tmp = 0xCAFEDEAD; 214 tmp = 0xCAFEDEAD;
217 adev->wb.wb[index] = cpu_to_le32(tmp); 215 adev->wb.wb[index] = cpu_to_le32(tmp);
218 216
219 r = amdgpu_ring_alloc(ring, 4); 217 r = amdgpu_ring_alloc(ring, 4);
220 if (r) { 218 if (r)
221 DRM_ERROR("amdgpu: dma failed to lock ring %d (%d).\n", ring->idx, r); 219 goto error_free_wb;
222 amdgpu_device_wb_free(adev, index);
223 return r;
224 }
225 220
226 amdgpu_ring_write(ring, DMA_PACKET(DMA_PACKET_WRITE, 0, 0, 0, 1)); 221 amdgpu_ring_write(ring, DMA_PACKET(DMA_PACKET_WRITE, 0, 0, 0, 1));
227 amdgpu_ring_write(ring, lower_32_bits(gpu_addr)); 222 amdgpu_ring_write(ring, lower_32_bits(gpu_addr));
@@ -236,15 +231,11 @@ static int si_dma_ring_test_ring(struct amdgpu_ring *ring)
236 DRM_UDELAY(1); 231 DRM_UDELAY(1);
237 } 232 }
238 233
239 if (i < adev->usec_timeout) { 234 if (i >= adev->usec_timeout)
240 DRM_DEBUG("ring test on %d succeeded in %d usecs\n", ring->idx, i); 235 r = -ETIMEDOUT;
241 } else {
242 DRM_ERROR("amdgpu: ring %d test failed (0x%08X)\n",
243 ring->idx, tmp);
244 r = -EINVAL;
245 }
246 amdgpu_device_wb_free(adev, index);
247 236
237error_free_wb:
238 amdgpu_device_wb_free(adev, index);
248 return r; 239 return r;
249} 240}
250 241
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
index 8cabe982a61d..51681eb0dd58 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
@@ -481,11 +481,9 @@ static int uvd_v4_2_ring_test_ring(struct amdgpu_ring *ring)
481 481
482 WREG32(mmUVD_CONTEXT_ID, 0xCAFEDEAD); 482 WREG32(mmUVD_CONTEXT_ID, 0xCAFEDEAD);
483 r = amdgpu_ring_alloc(ring, 3); 483 r = amdgpu_ring_alloc(ring, 3);
484 if (r) { 484 if (r)
485 DRM_ERROR("amdgpu: cp failed to lock ring %d (%d).\n",
486 ring->idx, r);
487 return r; 485 return r;
488 } 486
489 amdgpu_ring_write(ring, PACKET0(mmUVD_CONTEXT_ID, 0)); 487 amdgpu_ring_write(ring, PACKET0(mmUVD_CONTEXT_ID, 0));
490 amdgpu_ring_write(ring, 0xDEADBEEF); 488 amdgpu_ring_write(ring, 0xDEADBEEF);
491 amdgpu_ring_commit(ring); 489 amdgpu_ring_commit(ring);
@@ -496,14 +494,9 @@ static int uvd_v4_2_ring_test_ring(struct amdgpu_ring *ring)
496 DRM_UDELAY(1); 494 DRM_UDELAY(1);
497 } 495 }
498 496
499 if (i < adev->usec_timeout) { 497 if (i >= adev->usec_timeout)
500 DRM_DEBUG("ring test on %d succeeded in %d usecs\n", 498 r = -ETIMEDOUT;
501 ring->idx, i); 499
502 } else {
503 DRM_ERROR("amdgpu: ring %d test failed (0x%08X)\n",
504 ring->idx, tmp);
505 r = -EINVAL;
506 }
507 return r; 500 return r;
508} 501}
509 502
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
index 56b02ee543f9..907afcf8d867 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
@@ -497,11 +497,8 @@ static int uvd_v5_0_ring_test_ring(struct amdgpu_ring *ring)
497 497
498 WREG32(mmUVD_CONTEXT_ID, 0xCAFEDEAD); 498 WREG32(mmUVD_CONTEXT_ID, 0xCAFEDEAD);
499 r = amdgpu_ring_alloc(ring, 3); 499 r = amdgpu_ring_alloc(ring, 3);
500 if (r) { 500 if (r)
501 DRM_ERROR("amdgpu: cp failed to lock ring %d (%d).\n",
502 ring->idx, r);
503 return r; 501 return r;
504 }
505 amdgpu_ring_write(ring, PACKET0(mmUVD_CONTEXT_ID, 0)); 502 amdgpu_ring_write(ring, PACKET0(mmUVD_CONTEXT_ID, 0));
506 amdgpu_ring_write(ring, 0xDEADBEEF); 503 amdgpu_ring_write(ring, 0xDEADBEEF);
507 amdgpu_ring_commit(ring); 504 amdgpu_ring_commit(ring);
@@ -512,14 +509,9 @@ static int uvd_v5_0_ring_test_ring(struct amdgpu_ring *ring)
512 DRM_UDELAY(1); 509 DRM_UDELAY(1);
513 } 510 }
514 511
515 if (i < adev->usec_timeout) { 512 if (i >= adev->usec_timeout)
516 DRM_DEBUG("ring test on %d succeeded in %d usecs\n", 513 r = -ETIMEDOUT;
517 ring->idx, i); 514
518 } else {
519 DRM_ERROR("amdgpu: ring %d test failed (0x%08X)\n",
520 ring->idx, tmp);
521 r = -EINVAL;
522 }
523 return r; 515 return r;
524} 516}
525 517
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
index 3027607a187c..c8edd535eae5 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
@@ -175,11 +175,8 @@ static int uvd_v6_0_enc_ring_test_ring(struct amdgpu_ring *ring)
175 int r; 175 int r;
176 176
177 r = amdgpu_ring_alloc(ring, 16); 177 r = amdgpu_ring_alloc(ring, 16);
178 if (r) { 178 if (r)
179 DRM_ERROR("amdgpu: uvd enc failed to lock ring %d (%d).\n",
180 ring->idx, r);
181 return r; 179 return r;
182 }
183 amdgpu_ring_write(ring, HEVC_ENC_CMD_END); 180 amdgpu_ring_write(ring, HEVC_ENC_CMD_END);
184 amdgpu_ring_commit(ring); 181 amdgpu_ring_commit(ring);
185 182
@@ -189,14 +186,8 @@ static int uvd_v6_0_enc_ring_test_ring(struct amdgpu_ring *ring)
189 DRM_UDELAY(1); 186 DRM_UDELAY(1);
190 } 187 }
191 188
192 if (i < adev->usec_timeout) { 189 if (i >= adev->usec_timeout)
193 DRM_DEBUG("ring test on %d succeeded in %d usecs\n",
194 ring->idx, i);
195 } else {
196 DRM_ERROR("amdgpu: ring %d test failed\n",
197 ring->idx);
198 r = -ETIMEDOUT; 190 r = -ETIMEDOUT;
199 }
200 191
201 return r; 192 return r;
202} 193}
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
index 76a7fbef532a..87fd003ff037 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c
@@ -183,11 +183,8 @@ static int uvd_v7_0_enc_ring_test_ring(struct amdgpu_ring *ring)
183 return 0; 183 return 0;
184 184
185 r = amdgpu_ring_alloc(ring, 16); 185 r = amdgpu_ring_alloc(ring, 16);
186 if (r) { 186 if (r)
187 DRM_ERROR("amdgpu: uvd enc failed to lock (%d)ring %d (%d).\n",
188 ring->me, ring->idx, r);
189 return r; 187 return r;
190 }
191 amdgpu_ring_write(ring, HEVC_ENC_CMD_END); 188 amdgpu_ring_write(ring, HEVC_ENC_CMD_END);
192 amdgpu_ring_commit(ring); 189 amdgpu_ring_commit(ring);
193 190
@@ -197,14 +194,8 @@ static int uvd_v7_0_enc_ring_test_ring(struct amdgpu_ring *ring)
197 DRM_UDELAY(1); 194 DRM_UDELAY(1);
198 } 195 }
199 196
200 if (i < adev->usec_timeout) { 197 if (i >= adev->usec_timeout)
201 DRM_DEBUG("(%d)ring test on %d succeeded in %d usecs\n",
202 ring->me, ring->idx, i);
203 } else {
204 DRM_ERROR("amdgpu: (%d)ring %d test failed\n",
205 ring->me, ring->idx);
206 r = -ETIMEDOUT; 198 r = -ETIMEDOUT;
207 }
208 199
209 return r; 200 return r;
210} 201}
@@ -1229,11 +1220,9 @@ static int uvd_v7_0_ring_test_ring(struct amdgpu_ring *ring)
1229 1220
1230 WREG32_SOC15(UVD, ring->me, mmUVD_CONTEXT_ID, 0xCAFEDEAD); 1221 WREG32_SOC15(UVD, ring->me, mmUVD_CONTEXT_ID, 0xCAFEDEAD);
1231 r = amdgpu_ring_alloc(ring, 3); 1222 r = amdgpu_ring_alloc(ring, 3);
1232 if (r) { 1223 if (r)
1233 DRM_ERROR("amdgpu: (%d)cp failed to lock ring %d (%d).\n",
1234 ring->me, ring->idx, r);
1235 return r; 1224 return r;
1236 } 1225
1237 amdgpu_ring_write(ring, 1226 amdgpu_ring_write(ring,
1238 PACKET0(SOC15_REG_OFFSET(UVD, ring->me, mmUVD_CONTEXT_ID), 0)); 1227 PACKET0(SOC15_REG_OFFSET(UVD, ring->me, mmUVD_CONTEXT_ID), 0));
1239 amdgpu_ring_write(ring, 0xDEADBEEF); 1228 amdgpu_ring_write(ring, 0xDEADBEEF);
@@ -1245,14 +1234,9 @@ static int uvd_v7_0_ring_test_ring(struct amdgpu_ring *ring)
1245 DRM_UDELAY(1); 1234 DRM_UDELAY(1);
1246 } 1235 }
1247 1236
1248 if (i < adev->usec_timeout) { 1237 if (i >= adev->usec_timeout)
1249 DRM_DEBUG("(%d)ring test on %d succeeded in %d usecs\n", 1238 r = -ETIMEDOUT;
1250 ring->me, ring->idx, i); 1239
1251 } else {
1252 DRM_ERROR("(%d)amdgpu: ring %d test failed (0x%08X)\n",
1253 ring->me, ring->idx, tmp);
1254 r = -EINVAL;
1255 }
1256 return r; 1240 return r;
1257} 1241}
1258 1242