aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu.h7
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_device.c6
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c20
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c43
-rw-r--r--drivers/gpu/drm/amd/amdgpu/cik_sdma.c19
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c20
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c11
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c19
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c19
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/vce_v2_0.c1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/vce_v3_0.c1
15 files changed, 1 insertions, 169 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 736eb4560fd5..911d67032d57 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -345,7 +345,6 @@ struct amdgpu_ring_funcs {
345 /* testing functions */ 345 /* testing functions */
346 int (*test_ring)(struct amdgpu_ring *ring); 346 int (*test_ring)(struct amdgpu_ring *ring);
347 int (*test_ib)(struct amdgpu_ring *ring); 347 int (*test_ib)(struct amdgpu_ring *ring);
348 bool (*is_lockup)(struct amdgpu_ring *ring);
349 /* insert NOP packets */ 348 /* insert NOP packets */
350 void (*insert_nop)(struct amdgpu_ring *ring, uint32_t count); 349 void (*insert_nop)(struct amdgpu_ring *ring, uint32_t count);
351}; 350};
@@ -907,8 +906,6 @@ struct amdgpu_ring {
907 unsigned ring_size; 906 unsigned ring_size;
908 unsigned ring_free_dw; 907 unsigned ring_free_dw;
909 int count_dw; 908 int count_dw;
910 atomic_t last_rptr;
911 atomic64_t last_activity;
912 uint64_t gpu_addr; 909 uint64_t gpu_addr;
913 uint32_t align_mask; 910 uint32_t align_mask;
914 uint32_t ptr_mask; 911 uint32_t ptr_mask;
@@ -1230,8 +1227,6 @@ void amdgpu_ring_commit(struct amdgpu_ring *ring);
1230void amdgpu_ring_unlock_commit(struct amdgpu_ring *ring); 1227void amdgpu_ring_unlock_commit(struct amdgpu_ring *ring);
1231void amdgpu_ring_undo(struct amdgpu_ring *ring); 1228void amdgpu_ring_undo(struct amdgpu_ring *ring);
1232void amdgpu_ring_unlock_undo(struct amdgpu_ring *ring); 1229void amdgpu_ring_unlock_undo(struct amdgpu_ring *ring);
1233void amdgpu_ring_lockup_update(struct amdgpu_ring *ring);
1234bool amdgpu_ring_test_lockup(struct amdgpu_ring *ring);
1235unsigned amdgpu_ring_backup(struct amdgpu_ring *ring, 1230unsigned amdgpu_ring_backup(struct amdgpu_ring *ring,
1236 uint32_t **data); 1231 uint32_t **data);
1237int amdgpu_ring_restore(struct amdgpu_ring *ring, 1232int amdgpu_ring_restore(struct amdgpu_ring *ring,
@@ -1974,7 +1969,6 @@ struct amdgpu_device {
1974 bool suspend; 1969 bool suspend;
1975 bool need_dma32; 1970 bool need_dma32;
1976 bool accel_working; 1971 bool accel_working;
1977 bool needs_reset;
1978 struct work_struct reset_work; 1972 struct work_struct reset_work;
1979 struct notifier_block acpi_nb; 1973 struct notifier_block acpi_nb;
1980 struct amdgpu_i2c_chan *i2c_bus[AMDGPU_MAX_I2C_BUS]; 1974 struct amdgpu_i2c_chan *i2c_bus[AMDGPU_MAX_I2C_BUS];
@@ -2253,7 +2247,6 @@ amdgpu_get_sdma_instance(struct amdgpu_ring *ring)
2253#define amdgpu_ring_parse_cs(r, p, ib) ((r)->funcs->parse_cs((p), (ib))) 2247#define amdgpu_ring_parse_cs(r, p, ib) ((r)->funcs->parse_cs((p), (ib)))
2254#define amdgpu_ring_test_ring(r) (r)->funcs->test_ring((r)) 2248#define amdgpu_ring_test_ring(r) (r)->funcs->test_ring((r))
2255#define amdgpu_ring_test_ib(r) (r)->funcs->test_ib((r)) 2249#define amdgpu_ring_test_ib(r) (r)->funcs->test_ib((r))
2256#define amdgpu_ring_is_lockup(r) (r)->funcs->is_lockup((r))
2257#define amdgpu_ring_get_rptr(r) (r)->funcs->get_rptr((r)) 2250#define amdgpu_ring_get_rptr(r) (r)->funcs->get_rptr((r))
2258#define amdgpu_ring_get_wptr(r) (r)->funcs->get_wptr((r)) 2251#define amdgpu_ring_get_wptr(r) (r)->funcs->get_wptr((r))
2259#define amdgpu_ring_set_wptr(r) (r)->funcs->set_wptr((r)) 2252#define amdgpu_ring_set_wptr(r) (r)->funcs->set_wptr((r))
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 901a460b2c55..28c9ee334dd7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1816,12 +1816,6 @@ int amdgpu_gpu_reset(struct amdgpu_device *adev)
1816 1816
1817 down_write(&adev->exclusive_lock); 1817 down_write(&adev->exclusive_lock);
1818 1818
1819 if (!adev->needs_reset) {
1820 up_write(&adev->exclusive_lock);
1821 return 0;
1822 }
1823
1824 adev->needs_reset = false;
1825 atomic_inc(&adev->gpu_reset_counter); 1819 atomic_inc(&adev->gpu_reset_counter);
1826 1820
1827 /* block TTM */ 1821 /* block TTM */
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
index fcad7e060938..4010aa6b4e53 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
@@ -269,17 +269,6 @@ static void amdgpu_fence_check_lockup(struct work_struct *work)
269 if (amdgpu_fence_activity(ring)) { 269 if (amdgpu_fence_activity(ring)) {
270 wake_up_all(&ring->fence_drv.fence_queue); 270 wake_up_all(&ring->fence_drv.fence_queue);
271 } 271 }
272 else if (amdgpu_ring_is_lockup(ring)) {
273 /* good news we believe it's a lockup */
274 dev_warn(ring->adev->dev, "GPU lockup (current fence id "
275 "0x%016llx last fence id 0x%016llx on ring %d)\n",
276 (uint64_t)atomic64_read(&fence_drv->last_seq),
277 fence_drv->sync_seq[ring->idx], ring->idx);
278
279 /* remember that we need an reset */
280 ring->adev->needs_reset = true;
281 wake_up_all(&ring->fence_drv.fence_queue);
282 }
283 up_read(&ring->adev->exclusive_lock); 272 up_read(&ring->adev->exclusive_lock);
284} 273}
285 274
@@ -380,7 +369,6 @@ static bool amdgpu_fence_enable_signaling(struct fence *f)
380 */ 369 */
381static int amdgpu_fence_ring_wait_seq(struct amdgpu_ring *ring, uint64_t seq) 370static int amdgpu_fence_ring_wait_seq(struct amdgpu_ring *ring, uint64_t seq)
382{ 371{
383 struct amdgpu_device *adev = ring->adev;
384 bool signaled = false; 372 bool signaled = false;
385 373
386 BUG_ON(!ring); 374 BUG_ON(!ring);
@@ -391,8 +379,7 @@ static int amdgpu_fence_ring_wait_seq(struct amdgpu_ring *ring, uint64_t seq)
391 return 0; 379 return 0;
392 380
393 wait_event(ring->fence_drv.fence_queue, ( 381 wait_event(ring->fence_drv.fence_queue, (
394 (signaled = amdgpu_fence_seq_signaled(ring, seq)) 382 (signaled = amdgpu_fence_seq_signaled(ring, seq))));
395 || adev->needs_reset));
396 383
397 if (signaled) 384 if (signaled)
398 return 0; 385 return 0;
@@ -939,11 +926,6 @@ signed long amdgpu_fence_wait_any(struct amdgpu_device *adev,
939 if (amdgpu_test_signaled_any(array, count)) 926 if (amdgpu_test_signaled_any(array, count))
940 break; 927 break;
941 928
942 if (adev->needs_reset) {
943 t = -EDEADLK;
944 break;
945 }
946
947 t = schedule_timeout(t); 929 t = schedule_timeout(t);
948 930
949 if (t > 0 && intr && signal_pending(current)) 931 if (t > 0 && intr && signal_pending(current))
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
index c439735ee670..aad4c1c69448 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
@@ -298,7 +298,6 @@ int amdgpu_ib_ring_tests(struct amdgpu_device *adev)
298 r = amdgpu_ring_test_ib(ring); 298 r = amdgpu_ring_test_ib(ring);
299 if (r) { 299 if (r) {
300 ring->ready = false; 300 ring->ready = false;
301 adev->needs_reset = false;
302 301
303 if (ring == &adev->gfx.gfx_ring[0]) { 302 if (ring == &adev->gfx.gfx_ring[0]) {
304 /* oh, oh, that's really bad */ 303 /* oh, oh, that's really bad */
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
index b13a74b273a6..b2df348aa223 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
@@ -67,8 +67,6 @@ void amdgpu_ring_free_size(struct amdgpu_ring *ring)
67 if (!ring->ring_free_dw) { 67 if (!ring->ring_free_dw) {
68 /* this is an empty ring */ 68 /* this is an empty ring */
69 ring->ring_free_dw = ring->ring_size / 4; 69 ring->ring_free_dw = ring->ring_size / 4;
70 /* update lockup info to avoid false positive */
71 amdgpu_ring_lockup_update(ring);
72 } 70 }
73} 71}
74 72
@@ -209,46 +207,6 @@ void amdgpu_ring_unlock_undo(struct amdgpu_ring *ring)
209} 207}
210 208
211/** 209/**
212 * amdgpu_ring_lockup_update - update lockup variables
213 *
214 * @ring: amdgpu_ring structure holding ring information
215 *
216 * Update the last rptr value and timestamp (all asics).
217 */
218void amdgpu_ring_lockup_update(struct amdgpu_ring *ring)
219{
220 atomic_set(&ring->last_rptr, amdgpu_ring_get_rptr(ring));
221 atomic64_set(&ring->last_activity, jiffies_64);
222}
223
224/**
225 * amdgpu_ring_test_lockup() - check if ring is lockedup by recording information
226 * @ring: amdgpu_ring structure holding ring information
227 *
228 */
229bool amdgpu_ring_test_lockup(struct amdgpu_ring *ring)
230{
231 uint32_t rptr = amdgpu_ring_get_rptr(ring);
232 uint64_t last = atomic64_read(&ring->last_activity);
233 uint64_t elapsed;
234
235 if (rptr != atomic_read(&ring->last_rptr)) {
236 /* ring is still working, no lockup */
237 amdgpu_ring_lockup_update(ring);
238 return false;
239 }
240
241 elapsed = jiffies_to_msecs(jiffies_64 - last);
242 if (amdgpu_lockup_timeout && elapsed >= amdgpu_lockup_timeout) {
243 dev_err(ring->adev->dev, "ring %d stalled for more than %llumsec\n",
244 ring->idx, elapsed);
245 return true;
246 }
247 /* give a chance to the GPU ... */
248 return false;
249}
250
251/**
252 * amdgpu_ring_backup - Back up the content of a ring 210 * amdgpu_ring_backup - Back up the content of a ring
253 * 211 *
254 * @ring: the ring we want to back up 212 * @ring: the ring we want to back up
@@ -436,7 +394,6 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
436 if (amdgpu_debugfs_ring_init(adev, ring)) { 394 if (amdgpu_debugfs_ring_init(adev, ring)) {
437 DRM_ERROR("Failed to register debugfs file for rings !\n"); 395 DRM_ERROR("Failed to register debugfs file for rings !\n");
438 } 396 }
439 amdgpu_ring_lockup_update(ring);
440 return 0; 397 return 0;
441} 398}
442 399
diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
index 814598e76c98..5f712ceddf08 100644
--- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
+++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
@@ -1290,24 +1290,6 @@ const struct amd_ip_funcs cik_sdma_ip_funcs = {
1290 .set_powergating_state = cik_sdma_set_powergating_state, 1290 .set_powergating_state = cik_sdma_set_powergating_state,
1291}; 1291};
1292 1292
1293/**
1294 * cik_sdma_ring_is_lockup - Check if the DMA engine is locked up
1295 *
1296 * @ring: amdgpu_ring structure holding ring information
1297 *
1298 * Check if the async DMA engine is locked up (CIK).
1299 * Returns true if the engine appears to be locked up, false if not.
1300 */
1301static bool cik_sdma_ring_is_lockup(struct amdgpu_ring *ring)
1302{
1303
1304 if (cik_sdma_is_idle(ring->adev)) {
1305 amdgpu_ring_lockup_update(ring);
1306 return false;
1307 }
1308 return amdgpu_ring_test_lockup(ring);
1309}
1310
1311static const struct amdgpu_ring_funcs cik_sdma_ring_funcs = { 1293static const struct amdgpu_ring_funcs cik_sdma_ring_funcs = {
1312 .get_rptr = cik_sdma_ring_get_rptr, 1294 .get_rptr = cik_sdma_ring_get_rptr,
1313 .get_wptr = cik_sdma_ring_get_wptr, 1295 .get_wptr = cik_sdma_ring_get_wptr,
@@ -1320,7 +1302,6 @@ static const struct amdgpu_ring_funcs cik_sdma_ring_funcs = {
1320 .emit_hdp_flush = cik_sdma_ring_emit_hdp_flush, 1302 .emit_hdp_flush = cik_sdma_ring_emit_hdp_flush,
1321 .test_ring = cik_sdma_ring_test_ring, 1303 .test_ring = cik_sdma_ring_test_ring,
1322 .test_ib = cik_sdma_ring_test_ib, 1304 .test_ib = cik_sdma_ring_test_ib,
1323 .is_lockup = cik_sdma_ring_is_lockup,
1324 .insert_nop = cik_sdma_ring_insert_nop, 1305 .insert_nop = cik_sdma_ring_insert_nop,
1325}; 1306};
1326 1307
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
index e992bf2ff66c..72793f93e2fc 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
@@ -5542,24 +5542,6 @@ const struct amd_ip_funcs gfx_v7_0_ip_funcs = {
5542 .set_powergating_state = gfx_v7_0_set_powergating_state, 5542 .set_powergating_state = gfx_v7_0_set_powergating_state,
5543}; 5543};
5544 5544
5545/**
5546 * gfx_v7_0_ring_is_lockup - check if the 3D engine is locked up
5547 *
5548 * @adev: amdgpu_device pointer
5549 * @ring: amdgpu_ring structure holding ring information
5550 *
5551 * Check if the 3D engine is locked up (CIK).
5552 * Returns true if the engine is locked, false if not.
5553 */
5554static bool gfx_v7_0_ring_is_lockup(struct amdgpu_ring *ring)
5555{
5556 if (gfx_v7_0_is_idle(ring->adev)) {
5557 amdgpu_ring_lockup_update(ring);
5558 return false;
5559 }
5560 return amdgpu_ring_test_lockup(ring);
5561}
5562
5563static const struct amdgpu_ring_funcs gfx_v7_0_ring_funcs_gfx = { 5545static const struct amdgpu_ring_funcs gfx_v7_0_ring_funcs_gfx = {
5564 .get_rptr = gfx_v7_0_ring_get_rptr_gfx, 5546 .get_rptr = gfx_v7_0_ring_get_rptr_gfx,
5565 .get_wptr = gfx_v7_0_ring_get_wptr_gfx, 5547 .get_wptr = gfx_v7_0_ring_get_wptr_gfx,
@@ -5573,7 +5555,6 @@ static const struct amdgpu_ring_funcs gfx_v7_0_ring_funcs_gfx = {
5573 .emit_hdp_flush = gfx_v7_0_ring_emit_hdp_flush, 5555 .emit_hdp_flush = gfx_v7_0_ring_emit_hdp_flush,
5574 .test_ring = gfx_v7_0_ring_test_ring, 5556 .test_ring = gfx_v7_0_ring_test_ring,
5575 .test_ib = gfx_v7_0_ring_test_ib, 5557 .test_ib = gfx_v7_0_ring_test_ib,
5576 .is_lockup = gfx_v7_0_ring_is_lockup,
5577 .insert_nop = amdgpu_ring_insert_nop, 5558 .insert_nop = amdgpu_ring_insert_nop,
5578}; 5559};
5579 5560
@@ -5590,7 +5571,6 @@ static const struct amdgpu_ring_funcs gfx_v7_0_ring_funcs_compute = {
5590 .emit_hdp_flush = gfx_v7_0_ring_emit_hdp_flush, 5571 .emit_hdp_flush = gfx_v7_0_ring_emit_hdp_flush,
5591 .test_ring = gfx_v7_0_ring_test_ring, 5572 .test_ring = gfx_v7_0_ring_test_ring,
5592 .test_ib = gfx_v7_0_ring_test_ib, 5573 .test_ib = gfx_v7_0_ring_test_ib,
5593 .is_lockup = gfx_v7_0_ring_is_lockup,
5594 .insert_nop = amdgpu_ring_insert_nop, 5574 .insert_nop = amdgpu_ring_insert_nop,
5595}; 5575};
5596 5576
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
index 7dd7651b0ba7..e0355eaddabe 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -4075,15 +4075,6 @@ static void gfx_v8_0_ring_emit_vm_flush(struct amdgpu_ring *ring,
4075 } 4075 }
4076} 4076}
4077 4077
4078static bool gfx_v8_0_ring_is_lockup(struct amdgpu_ring *ring)
4079{
4080 if (gfx_v8_0_is_idle(ring->adev)) {
4081 amdgpu_ring_lockup_update(ring);
4082 return false;
4083 }
4084 return amdgpu_ring_test_lockup(ring);
4085}
4086
4087static u32 gfx_v8_0_ring_get_rptr_compute(struct amdgpu_ring *ring) 4078static u32 gfx_v8_0_ring_get_rptr_compute(struct amdgpu_ring *ring)
4088{ 4079{
4089 return ring->adev->wb.wb[ring->rptr_offs]; 4080 return ring->adev->wb.wb[ring->rptr_offs];
@@ -4365,7 +4356,6 @@ static const struct amdgpu_ring_funcs gfx_v8_0_ring_funcs_gfx = {
4365 .emit_hdp_flush = gfx_v8_0_ring_emit_hdp_flush, 4356 .emit_hdp_flush = gfx_v8_0_ring_emit_hdp_flush,
4366 .test_ring = gfx_v8_0_ring_test_ring, 4357 .test_ring = gfx_v8_0_ring_test_ring,
4367 .test_ib = gfx_v8_0_ring_test_ib, 4358 .test_ib = gfx_v8_0_ring_test_ib,
4368 .is_lockup = gfx_v8_0_ring_is_lockup,
4369 .insert_nop = amdgpu_ring_insert_nop, 4359 .insert_nop = amdgpu_ring_insert_nop,
4370}; 4360};
4371 4361
@@ -4382,7 +4372,6 @@ static const struct amdgpu_ring_funcs gfx_v8_0_ring_funcs_compute = {
4382 .emit_hdp_flush = gfx_v8_0_ring_emit_hdp_flush, 4372 .emit_hdp_flush = gfx_v8_0_ring_emit_hdp_flush,
4383 .test_ring = gfx_v8_0_ring_test_ring, 4373 .test_ring = gfx_v8_0_ring_test_ring,
4384 .test_ib = gfx_v8_0_ring_test_ib, 4374 .test_ib = gfx_v8_0_ring_test_ib,
4385 .is_lockup = gfx_v8_0_ring_is_lockup,
4386 .insert_nop = amdgpu_ring_insert_nop, 4375 .insert_nop = amdgpu_ring_insert_nop,
4387}; 4376};
4388 4377
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
index f8b868c7c496..2cf50180cc51 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
@@ -1295,24 +1295,6 @@ const struct amd_ip_funcs sdma_v2_4_ip_funcs = {
1295 .set_powergating_state = sdma_v2_4_set_powergating_state, 1295 .set_powergating_state = sdma_v2_4_set_powergating_state,
1296}; 1296};
1297 1297
1298/**
1299 * sdma_v2_4_ring_is_lockup - Check if the DMA engine is locked up
1300 *
1301 * @ring: amdgpu_ring structure holding ring information
1302 *
1303 * Check if the async DMA engine is locked up (VI).
1304 * Returns true if the engine appears to be locked up, false if not.
1305 */
1306static bool sdma_v2_4_ring_is_lockup(struct amdgpu_ring *ring)
1307{
1308
1309 if (sdma_v2_4_is_idle(ring->adev)) {
1310 amdgpu_ring_lockup_update(ring);
1311 return false;
1312 }
1313 return amdgpu_ring_test_lockup(ring);
1314}
1315
1316static const struct amdgpu_ring_funcs sdma_v2_4_ring_funcs = { 1298static const struct amdgpu_ring_funcs sdma_v2_4_ring_funcs = {
1317 .get_rptr = sdma_v2_4_ring_get_rptr, 1299 .get_rptr = sdma_v2_4_ring_get_rptr,
1318 .get_wptr = sdma_v2_4_ring_get_wptr, 1300 .get_wptr = sdma_v2_4_ring_get_wptr,
@@ -1325,7 +1307,6 @@ static const struct amdgpu_ring_funcs sdma_v2_4_ring_funcs = {
1325 .emit_hdp_flush = sdma_v2_4_ring_emit_hdp_flush, 1307 .emit_hdp_flush = sdma_v2_4_ring_emit_hdp_flush,
1326 .test_ring = sdma_v2_4_ring_test_ring, 1308 .test_ring = sdma_v2_4_ring_test_ring,
1327 .test_ib = sdma_v2_4_ring_test_ib, 1309 .test_ib = sdma_v2_4_ring_test_ib,
1328 .is_lockup = sdma_v2_4_ring_is_lockup,
1329 .insert_nop = sdma_v2_4_ring_insert_nop, 1310 .insert_nop = sdma_v2_4_ring_insert_nop,
1330}; 1311};
1331 1312
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
index 670555a45da9..0271bf9c0609 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
@@ -1428,24 +1428,6 @@ const struct amd_ip_funcs sdma_v3_0_ip_funcs = {
1428 .set_powergating_state = sdma_v3_0_set_powergating_state, 1428 .set_powergating_state = sdma_v3_0_set_powergating_state,
1429}; 1429};
1430 1430
1431/**
1432 * sdma_v3_0_ring_is_lockup - Check if the DMA engine is locked up
1433 *
1434 * @ring: amdgpu_ring structure holding ring information
1435 *
1436 * Check if the async DMA engine is locked up (VI).
1437 * Returns true if the engine appears to be locked up, false if not.
1438 */
1439static bool sdma_v3_0_ring_is_lockup(struct amdgpu_ring *ring)
1440{
1441
1442 if (sdma_v3_0_is_idle(ring->adev)) {
1443 amdgpu_ring_lockup_update(ring);
1444 return false;
1445 }
1446 return amdgpu_ring_test_lockup(ring);
1447}
1448
1449static const struct amdgpu_ring_funcs sdma_v3_0_ring_funcs = { 1431static const struct amdgpu_ring_funcs sdma_v3_0_ring_funcs = {
1450 .get_rptr = sdma_v3_0_ring_get_rptr, 1432 .get_rptr = sdma_v3_0_ring_get_rptr,
1451 .get_wptr = sdma_v3_0_ring_get_wptr, 1433 .get_wptr = sdma_v3_0_ring_get_wptr,
@@ -1458,7 +1440,6 @@ static const struct amdgpu_ring_funcs sdma_v3_0_ring_funcs = {
1458 .emit_hdp_flush = sdma_v3_0_ring_emit_hdp_flush, 1440 .emit_hdp_flush = sdma_v3_0_ring_emit_hdp_flush,
1459 .test_ring = sdma_v3_0_ring_test_ring, 1441 .test_ring = sdma_v3_0_ring_test_ring,
1460 .test_ib = sdma_v3_0_ring_test_ib, 1442 .test_ib = sdma_v3_0_ring_test_ib,
1461 .is_lockup = sdma_v3_0_ring_is_lockup,
1462 .insert_nop = sdma_v3_0_ring_insert_nop, 1443 .insert_nop = sdma_v3_0_ring_insert_nop,
1463}; 1444};
1464 1445
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
index ed50dd725788..5e9f73af83a8 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c
@@ -885,7 +885,6 @@ static const struct amdgpu_ring_funcs uvd_v4_2_ring_funcs = {
885 .emit_semaphore = uvd_v4_2_ring_emit_semaphore, 885 .emit_semaphore = uvd_v4_2_ring_emit_semaphore,
886 .test_ring = uvd_v4_2_ring_test_ring, 886 .test_ring = uvd_v4_2_ring_test_ring,
887 .test_ib = uvd_v4_2_ring_test_ib, 887 .test_ib = uvd_v4_2_ring_test_ib,
888 .is_lockup = amdgpu_ring_test_lockup,
889 .insert_nop = amdgpu_ring_insert_nop, 888 .insert_nop = amdgpu_ring_insert_nop,
890}; 889};
891 890
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
index 9ad8b9906c0b..38864f562981 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c
@@ -824,7 +824,6 @@ static const struct amdgpu_ring_funcs uvd_v5_0_ring_funcs = {
824 .emit_semaphore = uvd_v5_0_ring_emit_semaphore, 824 .emit_semaphore = uvd_v5_0_ring_emit_semaphore,
825 .test_ring = uvd_v5_0_ring_test_ring, 825 .test_ring = uvd_v5_0_ring_test_ring,
826 .test_ib = uvd_v5_0_ring_test_ib, 826 .test_ib = uvd_v5_0_ring_test_ib,
827 .is_lockup = amdgpu_ring_test_lockup,
828 .insert_nop = amdgpu_ring_insert_nop, 827 .insert_nop = amdgpu_ring_insert_nop,
829}; 828};
830 829
diff --git a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
index 7e9934fa4193..121915bbc3b6 100644
--- a/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c
@@ -808,7 +808,6 @@ static const struct amdgpu_ring_funcs uvd_v6_0_ring_funcs = {
808 .emit_semaphore = uvd_v6_0_ring_emit_semaphore, 808 .emit_semaphore = uvd_v6_0_ring_emit_semaphore,
809 .test_ring = uvd_v6_0_ring_test_ring, 809 .test_ring = uvd_v6_0_ring_test_ring,
810 .test_ib = uvd_v6_0_ring_test_ib, 810 .test_ib = uvd_v6_0_ring_test_ib,
811 .is_lockup = amdgpu_ring_test_lockup,
812 .insert_nop = amdgpu_ring_insert_nop, 811 .insert_nop = amdgpu_ring_insert_nop,
813}; 812};
814 813
diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v2_0.c b/drivers/gpu/drm/amd/amdgpu/vce_v2_0.c
index cd16df543f64..52ac7a8f1e58 100644
--- a/drivers/gpu/drm/amd/amdgpu/vce_v2_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/vce_v2_0.c
@@ -642,7 +642,6 @@ static const struct amdgpu_ring_funcs vce_v2_0_ring_funcs = {
642 .emit_semaphore = amdgpu_vce_ring_emit_semaphore, 642 .emit_semaphore = amdgpu_vce_ring_emit_semaphore,
643 .test_ring = amdgpu_vce_ring_test_ring, 643 .test_ring = amdgpu_vce_ring_test_ring,
644 .test_ib = amdgpu_vce_ring_test_ib, 644 .test_ib = amdgpu_vce_ring_test_ib,
645 .is_lockup = amdgpu_ring_test_lockup,
646 .insert_nop = amdgpu_ring_insert_nop, 645 .insert_nop = amdgpu_ring_insert_nop,
647}; 646};
648 647
diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
index f0656dfb53f3..b1bf27bb8f9e 100644
--- a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
@@ -643,7 +643,6 @@ static const struct amdgpu_ring_funcs vce_v3_0_ring_funcs = {
643 .emit_semaphore = amdgpu_vce_ring_emit_semaphore, 643 .emit_semaphore = amdgpu_vce_ring_emit_semaphore,
644 .test_ring = amdgpu_vce_ring_test_ring, 644 .test_ring = amdgpu_vce_ring_test_ring,
645 .test_ib = amdgpu_vce_ring_test_ib, 645 .test_ib = amdgpu_vce_ring_test_ib,
646 .is_lockup = amdgpu_ring_test_lockup,
647 .insert_nop = amdgpu_ring_insert_nop, 646 .insert_nop = amdgpu_ring_insert_nop,
648}; 647};
649 648