diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_device.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 14 | 
1 files changed, 10 insertions, 4 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index ab3794c42d36..af9bdf16eefd 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -2394,10 +2394,6 @@ static int amdgpu_device_ip_init(struct amdgpu_device *adev)  	if (r)  		goto init_failed; -	r = amdgpu_amdkfd_resume_iommu(adev); -	if (r) -		goto init_failed; -  	r = amdgpu_device_ip_hw_init_phase1(adev);  	if (r)  		goto init_failed; @@ -2436,6 +2432,10 @@ static int amdgpu_device_ip_init(struct amdgpu_device *adev)  	if (!adev->gmc.xgmi.pending_reset)  		amdgpu_amdkfd_device_init(adev); +	r = amdgpu_amdkfd_resume_iommu(adev); +	if (r) +		goto init_failed; +  	amdgpu_fru_get_product_info(adev);  init_failed: @@ -5399,6 +5399,8 @@ pci_ers_result_t amdgpu_pci_error_detected(struct pci_dev *pdev, pci_channel_sta  		return PCI_ERS_RESULT_DISCONNECT;  	} +	adev->pci_channel_state = state; +  	switch (state) {  	case pci_channel_io_normal:  		return PCI_ERS_RESULT_CAN_RECOVER; @@ -5541,6 +5543,10 @@ void amdgpu_pci_resume(struct pci_dev *pdev)  	DRM_INFO("PCI error: resume callback!!\n"); +	/* Only continue execution for the case of pci_channel_io_frozen */ +	if (adev->pci_channel_state != pci_channel_io_frozen) +		return; +  	for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {  		struct amdgpu_ring *ring = adev->rings[i];  | 
