aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/radeon/evergreen.c7
-rw-r--r--drivers/gpu/drm/radeon/ni.c7
-rw-r--r--drivers/gpu/drm/radeon/r100.c7
-rw-r--r--drivers/gpu/drm/radeon/r300.c7
-rw-r--r--drivers/gpu/drm/radeon/r420.c7
-rw-r--r--drivers/gpu/drm/radeon/r520.c8
-rw-r--r--drivers/gpu/drm/radeon/r600.c7
-rw-r--r--drivers/gpu/drm/radeon/radeon.h1
-rw-r--r--drivers/gpu/drm/radeon/radeon_ring.c30
-rw-r--r--drivers/gpu/drm/radeon/rs400.c7
-rw-r--r--drivers/gpu/drm/radeon/rs600.c7
-rw-r--r--drivers/gpu/drm/radeon/rs690.c7
-rw-r--r--drivers/gpu/drm/radeon/rv515.c8
-rw-r--r--drivers/gpu/drm/radeon/rv770.c7
14 files changed, 57 insertions, 60 deletions
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
index eed7acefb492..8b7a01b85374 100644
--- a/drivers/gpu/drm/radeon/evergreen.c
+++ b/drivers/gpu/drm/radeon/evergreen.c
@@ -3376,12 +3376,9 @@ static int evergreen_startup(struct radeon_device *rdev)
3376 if (r) 3376 if (r)
3377 return r; 3377 return r;
3378 3378
3379 r = radeon_ib_test(rdev, RADEON_RING_TYPE_GFX_INDEX, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]); 3379 r = radeon_ib_ring_tests(rdev);
3380 if (r) { 3380 if (r)
3381 DRM_ERROR("radeon: failed testing IB (%d).\n", r);
3382 rdev->accel_working = false;
3383 return r; 3381 return r;
3384 }
3385 3382
3386 r = r600_audio_init(rdev); 3383 r = r600_audio_init(rdev);
3387 if (r) { 3384 if (r) {
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
index a48ca53fcd6a..01464289d32c 100644
--- a/drivers/gpu/drm/radeon/ni.c
+++ b/drivers/gpu/drm/radeon/ni.c
@@ -1601,12 +1601,9 @@ static int cayman_startup(struct radeon_device *rdev)
1601 if (r) 1601 if (r)
1602 return r; 1602 return r;
1603 1603
1604 r = radeon_ib_test(rdev, RADEON_RING_TYPE_GFX_INDEX, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]); 1604 r = radeon_ib_ring_tests(rdev);
1605 if (r) { 1605 if (r)
1606 DRM_ERROR("radeon: failed testing IB (%d).\n", r);
1607 rdev->accel_working = false;
1608 return r; 1606 return r;
1609 }
1610 1607
1611 r = radeon_vm_manager_start(rdev); 1608 r = radeon_vm_manager_start(rdev);
1612 if (r) 1609 if (r)
diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
index a0b44a557bfd..825f11774491 100644
--- a/drivers/gpu/drm/radeon/r100.c
+++ b/drivers/gpu/drm/radeon/r100.c
@@ -3968,12 +3968,9 @@ static int r100_startup(struct radeon_device *rdev)
3968 if (r) 3968 if (r)
3969 return r; 3969 return r;
3970 3970
3971 r = radeon_ib_test(rdev, RADEON_RING_TYPE_GFX_INDEX, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]); 3971 r = radeon_ib_ring_tests(rdev);
3972 if (r) { 3972 if (r)
3973 dev_err(rdev->dev, "failed testing IB (%d).\n", r);
3974 rdev->accel_working = false;
3975 return r; 3973 return r;
3976 }
3977 3974
3978 return 0; 3975 return 0;
3979} 3976}
diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c
index a63f4324f0da..26e0db87beb5 100644
--- a/drivers/gpu/drm/radeon/r300.c
+++ b/drivers/gpu/drm/radeon/r300.c
@@ -1417,12 +1417,9 @@ static int r300_startup(struct radeon_device *rdev)
1417 if (r) 1417 if (r)
1418 return r; 1418 return r;
1419 1419
1420 r = radeon_ib_test(rdev, RADEON_RING_TYPE_GFX_INDEX, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]); 1420 r = radeon_ib_ring_tests(rdev);
1421 if (r) { 1421 if (r)
1422 dev_err(rdev->dev, "failed testing IB (%d).\n", r);
1423 rdev->accel_working = false;
1424 return r; 1422 return r;
1425 }
1426 1423
1427 return 0; 1424 return 0;
1428} 1425}
diff --git a/drivers/gpu/drm/radeon/r420.c b/drivers/gpu/drm/radeon/r420.c
index f3fcaacfea01..99137be7a300 100644
--- a/drivers/gpu/drm/radeon/r420.c
+++ b/drivers/gpu/drm/radeon/r420.c
@@ -279,12 +279,9 @@ static int r420_startup(struct radeon_device *rdev)
279 if (r) 279 if (r)
280 return r; 280 return r;
281 281
282 r = radeon_ib_test(rdev, RADEON_RING_TYPE_GFX_INDEX, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]); 282 r = radeon_ib_ring_tests(rdev);
283 if (r) { 283 if (r)
284 dev_err(rdev->dev, "failed testing IB (%d).\n", r);
285 rdev->accel_working = false;
286 return r; 284 return r;
287 }
288 285
289 return 0; 286 return 0;
290} 287}
diff --git a/drivers/gpu/drm/radeon/r520.c b/drivers/gpu/drm/radeon/r520.c
index ebcc15b03c9f..b5cf8375cd25 100644
--- a/drivers/gpu/drm/radeon/r520.c
+++ b/drivers/gpu/drm/radeon/r520.c
@@ -207,12 +207,10 @@ static int r520_startup(struct radeon_device *rdev)
207 if (r) 207 if (r)
208 return r; 208 return r;
209 209
210 r = radeon_ib_test(rdev, RADEON_RING_TYPE_GFX_INDEX, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]); 210 r = radeon_ib_ring_tests(rdev);
211 if (r) { 211 if (r)
212 dev_err(rdev->dev, "failed testing IB (%d).\n", r);
213 rdev->accel_working = false;
214 return r; 212 return r;
215 } 213
216 return 0; 214 return 0;
217} 215}
218 216
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index 222245d0138a..6070f9099507 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -2494,12 +2494,9 @@ int r600_startup(struct radeon_device *rdev)
2494 if (r) 2494 if (r)
2495 return r; 2495 return r;
2496 2496
2497 r = radeon_ib_test(rdev, RADEON_RING_TYPE_GFX_INDEX, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]); 2497 r = radeon_ib_ring_tests(rdev);
2498 if (r) { 2498 if (r)
2499 DRM_ERROR("radeon: failed testing IB (%d).\n", r);
2500 rdev->accel_working = false;
2501 return r; 2499 return r;
2502 }
2503 2500
2504 return 0; 2501 return 0;
2505} 2502}
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index c76724be8b80..65855af290a6 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -802,6 +802,7 @@ int radeon_ib_pool_init(struct radeon_device *rdev);
802void radeon_ib_pool_fini(struct radeon_device *rdev); 802void radeon_ib_pool_fini(struct radeon_device *rdev);
803int radeon_ib_pool_start(struct radeon_device *rdev); 803int radeon_ib_pool_start(struct radeon_device *rdev);
804int radeon_ib_pool_suspend(struct radeon_device *rdev); 804int radeon_ib_pool_suspend(struct radeon_device *rdev);
805int radeon_ib_ring_tests(struct radeon_device *rdev);
805/* Ring access between begin & end cannot sleep */ 806/* Ring access between begin & end cannot sleep */
806int radeon_ring_index(struct radeon_device *rdev, struct radeon_ring *cp); 807int radeon_ring_index(struct radeon_device *rdev, struct radeon_ring *cp);
807void radeon_ring_free_size(struct radeon_device *rdev, struct radeon_ring *cp); 808void radeon_ring_free_size(struct radeon_device *rdev, struct radeon_ring *cp);
diff --git a/drivers/gpu/drm/radeon/radeon_ring.c b/drivers/gpu/drm/radeon/radeon_ring.c
index b6eb1d2a7679..1b020ef7fcdd 100644
--- a/drivers/gpu/drm/radeon/radeon_ring.c
+++ b/drivers/gpu/drm/radeon/radeon_ring.c
@@ -267,6 +267,36 @@ int radeon_ib_pool_suspend(struct radeon_device *rdev)
267 return radeon_sa_bo_manager_suspend(rdev, &rdev->ib_pool.sa_manager); 267 return radeon_sa_bo_manager_suspend(rdev, &rdev->ib_pool.sa_manager);
268} 268}
269 269
270int radeon_ib_ring_tests(struct radeon_device *rdev)
271{
272 unsigned i;
273 int r;
274
275 for (i = 0; i < RADEON_NUM_RINGS; ++i) {
276 struct radeon_ring *ring = &rdev->ring[i];
277
278 if (!ring->ready)
279 continue;
280
281 r = radeon_ib_test(rdev, i, ring);
282 if (r) {
283 ring->ready = false;
284
285 if (i == RADEON_RING_TYPE_GFX_INDEX) {
286 /* oh, oh, that's really bad */
287 DRM_ERROR("radeon: failed testing IB on GFX ring (%d).\n", r);
288 rdev->accel_working = false;
289 return r;
290
291 } else {
292 /* still not good, but we can live with it */
293 DRM_ERROR("radeon: failed testing IB on ring %d (%d).\n", i, r);
294 }
295 }
296 }
297 return 0;
298}
299
270/* 300/*
271 * Ring. 301 * Ring.
272 */ 302 */
diff --git a/drivers/gpu/drm/radeon/rs400.c b/drivers/gpu/drm/radeon/rs400.c
index 4cf381b3a6d8..a464eb5e2df2 100644
--- a/drivers/gpu/drm/radeon/rs400.c
+++ b/drivers/gpu/drm/radeon/rs400.c
@@ -430,12 +430,9 @@ static int rs400_startup(struct radeon_device *rdev)
430 if (r) 430 if (r)
431 return r; 431 return r;
432 432
433 r = radeon_ib_test(rdev, RADEON_RING_TYPE_GFX_INDEX, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]); 433 r = radeon_ib_ring_tests(rdev);
434 if (r) { 434 if (r)
435 dev_err(rdev->dev, "failed testing IB (%d).\n", r);
436 rdev->accel_working = false;
437 return r; 435 return r;
438 }
439 436
440 return 0; 437 return 0;
441} 438}
diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c
index 7fb3b1f2ed15..25f9eef12c42 100644
--- a/drivers/gpu/drm/radeon/rs600.c
+++ b/drivers/gpu/drm/radeon/rs600.c
@@ -918,12 +918,9 @@ static int rs600_startup(struct radeon_device *rdev)
918 if (r) 918 if (r)
919 return r; 919 return r;
920 920
921 r = radeon_ib_test(rdev, RADEON_RING_TYPE_GFX_INDEX, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]); 921 r = radeon_ib_ring_tests(rdev);
922 if (r) { 922 if (r)
923 dev_err(rdev->dev, "failed testing IB (%d).\n", r);
924 rdev->accel_working = false;
925 return r; 923 return r;
926 }
927 924
928 return 0; 925 return 0;
929} 926}
diff --git a/drivers/gpu/drm/radeon/rs690.c b/drivers/gpu/drm/radeon/rs690.c
index f2c3b9d75f18..3277ddecfe9f 100644
--- a/drivers/gpu/drm/radeon/rs690.c
+++ b/drivers/gpu/drm/radeon/rs690.c
@@ -647,12 +647,9 @@ static int rs690_startup(struct radeon_device *rdev)
647 if (r) 647 if (r)
648 return r; 648 return r;
649 649
650 r = radeon_ib_test(rdev, RADEON_RING_TYPE_GFX_INDEX, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]); 650 r = radeon_ib_ring_tests(rdev);
651 if (r) { 651 if (r)
652 dev_err(rdev->dev, "failed testing IB (%d).\n", r);
653 rdev->accel_working = false;
654 return r; 652 return r;
655 }
656 653
657 return 0; 654 return 0;
658} 655}
diff --git a/drivers/gpu/drm/radeon/rv515.c b/drivers/gpu/drm/radeon/rv515.c
index d8d78fe17946..7f08cedb5333 100644
--- a/drivers/gpu/drm/radeon/rv515.c
+++ b/drivers/gpu/drm/radeon/rv515.c
@@ -412,12 +412,10 @@ static int rv515_startup(struct radeon_device *rdev)
412 if (r) 412 if (r)
413 return r; 413 return r;
414 414
415 r = radeon_ib_test(rdev, RADEON_RING_TYPE_GFX_INDEX, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]); 415 r = radeon_ib_ring_tests(rdev);
416 if (r) { 416 if (r)
417 dev_err(rdev->dev, "failed testing IB (%d).\n", r);
418 rdev->accel_working = false;
419 return r; 417 return r;
420 } 418
421 return 0; 419 return 0;
422} 420}
423 421
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
index c62ae4be3845..cacec0e20ae3 100644
--- a/drivers/gpu/drm/radeon/rv770.c
+++ b/drivers/gpu/drm/radeon/rv770.c
@@ -1114,12 +1114,9 @@ static int rv770_startup(struct radeon_device *rdev)
1114 if (r) 1114 if (r)
1115 return r; 1115 return r;
1116 1116
1117 r = radeon_ib_test(rdev, RADEON_RING_TYPE_GFX_INDEX, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]); 1117 r = radeon_ib_ring_tests(rdev);
1118 if (r) { 1118 if (r)
1119 dev_err(rdev->dev, "IB test failed (%d).\n", r);
1120 rdev->accel_working = false;
1121 return r; 1119 return r;
1122 }
1123 1120
1124 return 0; 1121 return 0;
1125} 1122}