hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
....@@ -23,7 +23,7 @@
2323 */
2424
2525 #include <linux/firmware.h>
26
-#include <drm/drmP.h>
26
+
2727 #include "amdgpu.h"
2828 #include "amdgpu_uvd.h"
2929 #include "cikd.h"
....@@ -108,7 +108,7 @@
108108 int r;
109109
110110 /* UVD TRAP */
111
- r = amdgpu_irq_add_id(adev, AMDGPU_IH_CLIENTID_LEGACY, 124, &adev->uvd.inst->irq);
111
+ r = amdgpu_irq_add_id(adev, AMDGPU_IRQ_CLIENTID_LEGACY, 124, &adev->uvd.inst->irq);
112112 if (r)
113113 return r;
114114
....@@ -118,7 +118,8 @@
118118
119119 ring = &adev->uvd.inst->ring;
120120 sprintf(ring->name, "uvd");
121
- r = amdgpu_ring_init(adev, ring, 512, &adev->uvd.inst->irq, 0);
121
+ r = amdgpu_ring_init(adev, ring, 512, &adev->uvd.inst->irq, 0,
122
+ AMDGPU_RING_PRIO_DEFAULT);
122123 if (r)
123124 return r;
124125
....@@ -162,12 +163,9 @@
162163 uvd_v4_2_enable_mgcg(adev, true);
163164 amdgpu_asic_set_uvd_clocks(adev, 10000, 10000);
164165
165
- ring->ready = true;
166
- r = amdgpu_ring_test_ring(ring);
167
- if (r) {
168
- ring->ready = false;
166
+ r = amdgpu_ring_test_helper(ring);
167
+ if (r)
169168 goto done;
170
- }
171169
172170 r = amdgpu_ring_alloc(ring, 10);
173171 if (r) {
....@@ -213,12 +211,9 @@
213211 static int uvd_v4_2_hw_fini(void *handle)
214212 {
215213 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
216
- struct amdgpu_ring *ring = &adev->uvd.inst->ring;
217214
218215 if (RREG32(mmUVD_STATUS) != 0)
219216 uvd_v4_2_stop(adev);
220
-
221
- ring->ready = false;
222217
223218 return 0;
224219 }
....@@ -353,7 +348,7 @@
353348 /* Set the write pointer delay */
354349 WREG32(mmUVD_RBC_RB_WPTR_CNTL, 0);
355350
356
- /* programm the 4GB memory segment for rptr and ring buffer */
351
+ /* program the 4GB memory segment for rptr and ring buffer */
357352 WREG32(mmUVD_LMI_EXT40_ADDR, upper_32_bits(ring->gpu_addr) |
358353 (0x7 << 16) | (0x1 << 31));
359354
....@@ -484,11 +479,9 @@
484479
485480 WREG32(mmUVD_CONTEXT_ID, 0xCAFEDEAD);
486481 r = amdgpu_ring_alloc(ring, 3);
487
- if (r) {
488
- DRM_ERROR("amdgpu: cp failed to lock ring %d (%d).\n",
489
- ring->idx, r);
482
+ if (r)
490483 return r;
491
- }
484
+
492485 amdgpu_ring_write(ring, PACKET0(mmUVD_CONTEXT_ID, 0));
493486 amdgpu_ring_write(ring, 0xDEADBEEF);
494487 amdgpu_ring_commit(ring);
....@@ -496,17 +489,12 @@
496489 tmp = RREG32(mmUVD_CONTEXT_ID);
497490 if (tmp == 0xDEADBEEF)
498491 break;
499
- DRM_UDELAY(1);
492
+ udelay(1);
500493 }
501494
502
- if (i < adev->usec_timeout) {
503
- DRM_DEBUG("ring test on %d succeeded in %d usecs\n",
504
- ring->idx, i);
505
- } else {
506
- DRM_ERROR("amdgpu: ring %d test failed (0x%08X)\n",
507
- ring->idx, tmp);
508
- r = -EINVAL;
509
- }
495
+ if (i >= adev->usec_timeout)
496
+ r = -ETIMEDOUT;
497
+
510498 return r;
511499 }
512500
....@@ -519,8 +507,9 @@
519507 * Write ring commands to execute the indirect buffer
520508 */
521509 static void uvd_v4_2_ring_emit_ib(struct amdgpu_ring *ring,
510
+ struct amdgpu_job *job,
522511 struct amdgpu_ib *ib,
523
- unsigned vmid, bool ctx_switch)
512
+ uint32_t flags)
524513 {
525514 amdgpu_ring_write(ring, PACKET0(mmUVD_RBC_IB_BASE, 0));
526515 amdgpu_ring_write(ring, ib->gpu_addr);
....@@ -552,7 +541,7 @@
552541 uint64_t addr;
553542 uint32_t size;
554543
555
- /* programm the VCPU memory controller bits 0-27 */
544
+ /* program the VCPU memory controller bits 0-27 */
556545 addr = (adev->uvd.inst->gpu_addr + AMDGPU_UVD_FIRMWARE_OFFSET) >> 3;
557546 size = AMDGPU_UVD_FIRMWARE_SIZE(adev) >> 3;
558547 WREG32(mmUVD_VCPU_CACHE_OFFSET0, addr);
....@@ -750,6 +739,7 @@
750739 .type = AMDGPU_RING_TYPE_UVD,
751740 .align_mask = 0xf,
752741 .support_64bit_ptrs = false,
742
+ .no_user_fence = true,
753743 .get_rptr = uvd_v4_2_ring_get_rptr,
754744 .get_wptr = uvd_v4_2_ring_get_wptr,
755745 .set_wptr = uvd_v4_2_ring_set_wptr,