diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_device.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 26 | 
1 files changed, 18 insertions, 8 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index 7d3b54615147..8bee95ad32d9 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -3646,15 +3646,13 @@ failed_unmap:   * Tear down the driver info (all asics).   * Called at driver shutdown.   */ -void amdgpu_device_fini(struct amdgpu_device *adev) +void amdgpu_device_fini_hw(struct amdgpu_device *adev)  {  	dev_info(adev->dev, "amdgpu: finishing device.\n");  	flush_delayed_work(&adev->delayed_init_work);  	ttm_bo_lock_delayed_workqueue(&adev->mman.bdev);  	adev->shutdown = true; -	kfree(adev->pci_state); -  	/* make sure IB test finished before entering exclusive mode  	 * to avoid preemption on IB test  	 * */ @@ -3671,11 +3669,24 @@ void amdgpu_device_fini(struct amdgpu_device *adev)  		else  			drm_atomic_helper_shutdown(adev_to_drm(adev));  	} -	amdgpu_fence_driver_fini(adev); +	amdgpu_fence_driver_fini_hw(adev); +  	if (adev->pm_sysfs_en)  		amdgpu_pm_sysfs_fini(adev); +	if (adev->ucode_sysfs_en) +		amdgpu_ucode_sysfs_fini(adev); +	sysfs_remove_files(&adev->dev->kobj, amdgpu_dev_attributes); + +  	amdgpu_fbdev_fini(adev); + +	amdgpu_irq_fini_hw(adev); +} + +void amdgpu_device_fini_sw(struct amdgpu_device *adev) +{  	amdgpu_device_ip_fini(adev); +	amdgpu_fence_driver_fini_sw(adev);  	release_firmware(adev->firmware.gpu_info_fw);  	adev->firmware.gpu_info_fw = NULL;  	adev->accel_working = false; @@ -3701,14 +3712,13 @@ void amdgpu_device_fini(struct amdgpu_device *adev)  	adev->rmmio = NULL;  	amdgpu_device_doorbell_fini(adev); -	if (adev->ucode_sysfs_en) -		amdgpu_ucode_sysfs_fini(adev); - -	sysfs_remove_files(&adev->dev->kobj, amdgpu_dev_attributes);  	if (IS_ENABLED(CONFIG_PERF_EVENTS))  		amdgpu_pmu_fini(adev);  	if (adev->mman.discovery_bin)  		amdgpu_discovery_fini(adev); + +	kfree(adev->pci_state); +  } | 
