diff options
author | Christian König <deathsimple@vodafone.de> | 2012-07-05 08:32:00 -0400 |
---|---|---|
committer | Christian König <deathsimple@vodafone.de> | 2012-07-17 04:32:55 -0400 |
commit | c6105f249a637e1bb2b04b1cad7feaf507d06e8c (patch) | |
tree | 6dfaa699908277f651d60bbea6089bf25ac228ae /drivers/gpu/drm/radeon/ni.c | |
parent | 6f72a631998d37673828b0e97c63dafc8e923382 (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.c | 12 |
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) | |||
1315 | int cayman_suspend(struct radeon_device *rdev) | 1317 | int 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"); |