diff options
Diffstat (limited to 'drivers/gpu/drm/amd')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu.h | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 13 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 4 | 
3 files changed, 19 insertions, 2 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 596f7e07b5a8..10c4ce69347c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -1216,6 +1216,10 @@ int amdgpu_dm_display_resume(struct amdgpu_device *adev );  static inline int amdgpu_dm_display_resume(struct amdgpu_device *adev) { return 0; }  #endif + +void amdgpu_register_gpu_instance(struct amdgpu_device *adev); +void amdgpu_unregister_gpu_instance(struct amdgpu_device *adev); +  #include "amdgpu_object.h"  /* used by df_v3_6.c and amdgpu_pmu.c */ diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c index e886be292f86..ea79763577c6 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -3559,6 +3559,12 @@ static int amdgpu_do_asic_reset(struct amdgpu_hive_info *hive,  				if (vram_lost)  					amdgpu_device_fill_reset_magic(tmp_adev); +				/* +				 * Add this ASIC as tracked as reset was already +				 * complete successfully. +				 */ +				amdgpu_register_gpu_instance(tmp_adev); +  				r = amdgpu_device_ip_late_init(tmp_adev);  				if (r)  					goto out; @@ -3693,6 +3699,13 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,  		device_list_handle = &device_list;  	} +	/* +	 * Mark these ASICs to be reseted as untracked first +	 * And add them back after reset completed +	 */ +	list_for_each_entry(tmp_adev, device_list_handle, gmc.xgmi.head) +		amdgpu_unregister_gpu_instance(tmp_adev); +  	/* block all schedulers and reset given job's ring */  	list_for_each_entry(tmp_adev, device_list_handle, gmc.xgmi.head) {  		for (i = 0; i < AMDGPU_MAX_RINGS; ++i) { diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c index 5832cd8f4ff1..0cf7e8606fd3 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c @@ -44,7 +44,7 @@  #include "amdgpu_display.h"  #include "amdgpu_ras.h" -static void amdgpu_unregister_gpu_instance(struct amdgpu_device *adev) +void amdgpu_unregister_gpu_instance(struct amdgpu_device *adev)  {  	struct amdgpu_gpu_instance *gpu_instance;  	int i; @@ -105,7 +105,7 @@ done_free:  	dev->dev_private = NULL;  } -static void amdgpu_register_gpu_instance(struct amdgpu_device *adev) +void amdgpu_register_gpu_instance(struct amdgpu_device *adev)  {  	struct amdgpu_gpu_instance *gpu_instance;  | 

