aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/ni.c
diff options
context:
space:
mode:
authorChristian König <deathsimple@vodafone.de>2012-07-05 08:32:00 -0400
committerChristian König <deathsimple@vodafone.de>2012-07-17 04:32:55 -0400
commitc6105f249a637e1bb2b04b1cad7feaf507d06e8c (patch)
tree6dfaa699908277f651d60bbea6089bf25ac228ae /drivers/gpu/drm/radeon/ni.c
parent6f72a631998d37673828b0e97c63dafc8e923382 (diff)
drm/radeon: remove vm_manager start/suspend
Just restore the page table instead. Addressing three problem with this change: 1. Calling vm_manager_suspend in the suspend path is problematic cause it wants to wait for the VM use to end, which in case of a lockup never happens. 2. In case of a locked up memory controller unbinding the VM seems to make it even more unstable, creating an unrecoverable lockup in the end. 3. If we want to backup/restore the leftover ring content we must not unbind VMs in between. Signed-off-by: Christian König <deathsimple@vodafone.de> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/ni.c')
-rw-r--r--drivers/gpu/drm/radeon/ni.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
index 4004376362ee..ec5307c582f4 100644
--- a/drivers/gpu/drm/radeon/ni.c
+++ b/drivers/gpu/drm/radeon/ni.c
@@ -1280,9 +1280,11 @@ static int cayman_startup(struct radeon_device *rdev)
1280 if (r) 1280 if (r)
1281 return r; 1281 return r;
1282 1282
1283 r = radeon_vm_manager_start(rdev); 1283 r = radeon_vm_manager_init(rdev);
1284 if (r) 1284 if (r) {
1285 dev_err(rdev->dev, "vm manager initialization failed (%d).\n", r);
1285 return r; 1286 return r;
1287 }
1286 1288
1287 r = r600_audio_init(rdev); 1289 r = r600_audio_init(rdev);
1288 if (r) 1290 if (r)
@@ -1315,7 +1317,6 @@ int cayman_resume(struct radeon_device *rdev)
1315int cayman_suspend(struct radeon_device *rdev) 1317int cayman_suspend(struct radeon_device *rdev)
1316{ 1318{
1317 r600_audio_fini(rdev); 1319 r600_audio_fini(rdev);
1318 radeon_vm_manager_suspend(rdev);
1319 cayman_cp_enable(rdev, false); 1320 cayman_cp_enable(rdev, false);
1320 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false; 1321 rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false;
1321 evergreen_irq_suspend(rdev); 1322 evergreen_irq_suspend(rdev);
@@ -1392,11 +1393,6 @@ int cayman_init(struct radeon_device *rdev)
1392 return r; 1393 return r;
1393 1394
1394 rdev->accel_working = true; 1395 rdev->accel_working = true;
1395 r = radeon_vm_manager_init(rdev);
1396 if (r) {
1397 dev_err(rdev->dev, "vm manager initialization failed (%d).\n", r);
1398 }
1399
1400 r = cayman_startup(rdev); 1396 r = cayman_startup(rdev);
1401 if (r) { 1397 if (r) {
1402 dev_err(rdev->dev, "disabling GPU acceleration\n"); 1398 dev_err(rdev->dev, "disabling GPU acceleration\n");