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>
This commit is contained in:
parent
6f72a63199
commit
c6105f249a
4 changed files with 60 additions and 51 deletions
|
@ -1280,9 +1280,11 @@ static int cayman_startup(struct radeon_device *rdev)
|
|||
if (r)
|
||||
return r;
|
||||
|
||||
r = radeon_vm_manager_start(rdev);
|
||||
if (r)
|
||||
r = radeon_vm_manager_init(rdev);
|
||||
if (r) {
|
||||
dev_err(rdev->dev, "vm manager initialization failed (%d).\n", r);
|
||||
return r;
|
||||
}
|
||||
|
||||
r = r600_audio_init(rdev);
|
||||
if (r)
|
||||
|
@ -1315,7 +1317,6 @@ int cayman_resume(struct radeon_device *rdev)
|
|||
int cayman_suspend(struct radeon_device *rdev)
|
||||
{
|
||||
r600_audio_fini(rdev);
|
||||
radeon_vm_manager_suspend(rdev);
|
||||
cayman_cp_enable(rdev, false);
|
||||
rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ready = false;
|
||||
evergreen_irq_suspend(rdev);
|
||||
|
@ -1392,11 +1393,6 @@ int cayman_init(struct radeon_device *rdev)
|
|||
return r;
|
||||
|
||||
rdev->accel_working = true;
|
||||
r = radeon_vm_manager_init(rdev);
|
||||
if (r) {
|
||||
dev_err(rdev->dev, "vm manager initialization failed (%d).\n", r);
|
||||
}
|
||||
|
||||
r = cayman_startup(rdev);
|
||||
if (r) {
|
||||
dev_err(rdev->dev, "disabling GPU acceleration\n");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue