hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
....@@ -22,8 +22,9 @@
2222 * Authors: Christian König <christian.koenig@amd.com>
2323 */
2424
25
+#include <linux/delay.h>
2526 #include <linux/firmware.h>
26
-#include <drm/drmP.h>
27
+
2728 #include "amdgpu.h"
2829 #include "amdgpu_uvd.h"
2930 #include "vid.h"
....@@ -105,7 +106,7 @@
105106 int r;
106107
107108 /* UVD TRAP */
108
- r = amdgpu_irq_add_id(adev, AMDGPU_IH_CLIENTID_LEGACY, VISLANDS30_IV_SRCID_UVD_SYSTEM_MESSAGE, &adev->uvd.inst->irq);
109
+ r = amdgpu_irq_add_id(adev, AMDGPU_IRQ_CLIENTID_LEGACY, VISLANDS30_IV_SRCID_UVD_SYSTEM_MESSAGE, &adev->uvd.inst->irq);
109110 if (r)
110111 return r;
111112
....@@ -115,7 +116,8 @@
115116
116117 ring = &adev->uvd.inst->ring;
117118 sprintf(ring->name, "uvd");
118
- r = amdgpu_ring_init(adev, ring, 512, &adev->uvd.inst->irq, 0);
119
+ r = amdgpu_ring_init(adev, ring, 512, &adev->uvd.inst->irq, 0,
120
+ AMDGPU_RING_PRIO_DEFAULT);
119121 if (r)
120122 return r;
121123
....@@ -158,12 +160,9 @@
158160 uvd_v5_0_set_clockgating_state(adev, AMD_CG_STATE_UNGATE);
159161 uvd_v5_0_enable_mgcg(adev, true);
160162
161
- ring->ready = true;
162
- r = amdgpu_ring_test_ring(ring);
163
- if (r) {
164
- ring->ready = false;
163
+ r = amdgpu_ring_test_helper(ring);
164
+ if (r)
165165 goto done;
166
- }
167166
168167 r = amdgpu_ring_alloc(ring, 10);
169168 if (r) {
....@@ -210,12 +209,9 @@
210209 static int uvd_v5_0_hw_fini(void *handle)
211210 {
212211 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
213
- struct amdgpu_ring *ring = &adev->uvd.inst->ring;
214212
215213 if (RREG32(mmUVD_STATUS) != 0)
216214 uvd_v5_0_stop(adev);
217
-
218
- ring->ready = false;
219215
220216 return 0;
221217 }
....@@ -257,7 +253,7 @@
257253 uint64_t offset;
258254 uint32_t size;
259255
260
- /* programm memory controller bits 0-27 */
256
+ /* program memory controller bits 0-27 */
261257 WREG32(mmUVD_LMI_VCPU_CACHE_64BIT_BAR_LOW,
262258 lower_32_bits(adev->uvd.inst->gpu_addr));
263259 WREG32(mmUVD_LMI_VCPU_CACHE_64BIT_BAR_HIGH,
....@@ -408,7 +404,7 @@
408404 /* set the wb address */
409405 WREG32(mmUVD_RBC_RB_RPTR_ADDR, (upper_32_bits(ring->gpu_addr) >> 2));
410406
411
- /* programm the RB_BASE for ring buffer */
407
+ /* program the RB_BASE for ring buffer */
412408 WREG32(mmUVD_LMI_RBC_RB_64BIT_BAR_LOW,
413409 lower_32_bits(ring->gpu_addr));
414410 WREG32(mmUVD_LMI_RBC_RB_64BIT_BAR_HIGH,
....@@ -500,11 +496,8 @@
500496
501497 WREG32(mmUVD_CONTEXT_ID, 0xCAFEDEAD);
502498 r = amdgpu_ring_alloc(ring, 3);
503
- if (r) {
504
- DRM_ERROR("amdgpu: cp failed to lock ring %d (%d).\n",
505
- ring->idx, r);
499
+ if (r)
506500 return r;
507
- }
508501 amdgpu_ring_write(ring, PACKET0(mmUVD_CONTEXT_ID, 0));
509502 amdgpu_ring_write(ring, 0xDEADBEEF);
510503 amdgpu_ring_commit(ring);
....@@ -512,17 +505,12 @@
512505 tmp = RREG32(mmUVD_CONTEXT_ID);
513506 if (tmp == 0xDEADBEEF)
514507 break;
515
- DRM_UDELAY(1);
508
+ udelay(1);
516509 }
517510
518
- if (i < adev->usec_timeout) {
519
- DRM_DEBUG("ring test on %d succeeded in %d usecs\n",
520
- ring->idx, i);
521
- } else {
522
- DRM_ERROR("amdgpu: ring %d test failed (0x%08X)\n",
523
- ring->idx, tmp);
524
- r = -EINVAL;
525
- }
511
+ if (i >= adev->usec_timeout)
512
+ r = -ETIMEDOUT;
513
+
526514 return r;
527515 }
528516
....@@ -535,8 +523,9 @@
535523 * Write ring commands to execute the indirect buffer
536524 */
537525 static void uvd_v5_0_ring_emit_ib(struct amdgpu_ring *ring,
526
+ struct amdgpu_job *job,
538527 struct amdgpu_ib *ib,
539
- unsigned vmid, bool ctx_switch)
528
+ uint32_t flags)
540529 {
541530 amdgpu_ring_write(ring, PACKET0(mmUVD_LMI_RBC_IB_64BIT_BAR_LOW, 0));
542531 amdgpu_ring_write(ring, lower_32_bits(ib->gpu_addr));
....@@ -772,7 +761,7 @@
772761 enum amd_clockgating_state state)
773762 {
774763 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
775
- bool enable = (state == AMD_CG_STATE_GATE) ? true : false;
764
+ bool enable = (state == AMD_CG_STATE_GATE);
776765
777766 if (enable) {
778767 /* wait for STATUS to clear */
....@@ -859,6 +848,7 @@
859848 .type = AMDGPU_RING_TYPE_UVD,
860849 .align_mask = 0xf,
861850 .support_64bit_ptrs = false,
851
+ .no_user_fence = true,
862852 .get_rptr = uvd_v5_0_ring_get_rptr,
863853 .get_wptr = uvd_v5_0_ring_get_wptr,
864854 .set_wptr = uvd_v5_0_ring_set_wptr,