diff options
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu.h | 7 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 20 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 43 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 19 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 20 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 11 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 19 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 19 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/uvd_v4_2.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/uvd_v5_0.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/uvd_v6_0.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/vce_v2_0.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/vce_v3_0.c | 1 |
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); | |||
1230 | void amdgpu_ring_unlock_commit(struct amdgpu_ring *ring); | 1227 | void amdgpu_ring_unlock_commit(struct amdgpu_ring *ring); |
1231 | void amdgpu_ring_undo(struct amdgpu_ring *ring); | 1228 | void amdgpu_ring_undo(struct amdgpu_ring *ring); |
1232 | void amdgpu_ring_unlock_undo(struct amdgpu_ring *ring); | 1229 | void amdgpu_ring_unlock_undo(struct amdgpu_ring *ring); |
1233 | void amdgpu_ring_lockup_update(struct amdgpu_ring *ring); | ||
1234 | bool amdgpu_ring_test_lockup(struct amdgpu_ring *ring); | ||
1235 | unsigned amdgpu_ring_backup(struct amdgpu_ring *ring, | 1230 | unsigned amdgpu_ring_backup(struct amdgpu_ring *ring, |
1236 | uint32_t **data); | 1231 | uint32_t **data); |
1237 | int amdgpu_ring_restore(struct amdgpu_ring *ring, | 1232 | int 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 | */ |
381 | static int amdgpu_fence_ring_wait_seq(struct amdgpu_ring *ring, uint64_t seq) | 370 | static 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 | */ | ||
218 | void 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 | */ | ||
229 | bool 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 | */ | ||
1301 | static 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 | |||
1311 | static const struct amdgpu_ring_funcs cik_sdma_ring_funcs = { | 1293 | static 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 | */ | ||
5554 | static 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 | |||
5563 | static const struct amdgpu_ring_funcs gfx_v7_0_ring_funcs_gfx = { | 5545 | static 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 | ||
4078 | static 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 | |||
4087 | static u32 gfx_v8_0_ring_get_rptr_compute(struct amdgpu_ring *ring) | 4078 | static 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 | */ | ||
1306 | static 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 | |||
1316 | static const struct amdgpu_ring_funcs sdma_v2_4_ring_funcs = { | 1298 | static 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 | */ | ||
1439 | static 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 | |||
1449 | static const struct amdgpu_ring_funcs sdma_v3_0_ring_funcs = { | 1431 | static 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 | ||