diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/aldebaran.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/aldebaran.c | 26 | 
1 files changed, 25 insertions, 1 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/aldebaran.c b/drivers/gpu/drm/amd/amdgpu/aldebaran.c index 02f4c6f9d4f6..576067d66bb9 100644 --- a/drivers/gpu/drm/amd/amdgpu/aldebaran.c +++ b/drivers/gpu/drm/amd/amdgpu/aldebaran.c @@ -330,6 +330,7 @@ aldebaran_mode2_restore_hwcontext(struct amdgpu_reset_control *reset_ctl,  {  	struct list_head *reset_device_list = reset_context->reset_device_list;  	struct amdgpu_device *tmp_adev = NULL; +	struct amdgpu_ras *con;  	int r;  	if (reset_device_list == NULL) @@ -355,7 +356,30 @@ aldebaran_mode2_restore_hwcontext(struct amdgpu_reset_control *reset_ctl,  		 */  		amdgpu_register_gpu_instance(tmp_adev); -		/* Resume RAS */ +		/* Resume RAS, ecc_irq */ +		con = amdgpu_ras_get_context(tmp_adev); +		if (!amdgpu_sriov_vf(tmp_adev) && con) { +			if (tmp_adev->sdma.ras && +				tmp_adev->sdma.ras->ras_block.ras_late_init) { +				r = tmp_adev->sdma.ras->ras_block.ras_late_init(tmp_adev, +						&tmp_adev->sdma.ras->ras_block.ras_comm); +				if (r) { +					dev_err(tmp_adev->dev, "SDMA failed to execute ras_late_init! ret:%d\n", r); +					goto end; +				} +			} + +			if (tmp_adev->gfx.ras && +				tmp_adev->gfx.ras->ras_block.ras_late_init) { +				r = tmp_adev->gfx.ras->ras_block.ras_late_init(tmp_adev, +						&tmp_adev->gfx.ras->ras_block.ras_comm); +				if (r) { +					dev_err(tmp_adev->dev, "GFX failed to execute ras_late_init! ret:%d\n", r); +					goto end; +				} +			} +		} +  		amdgpu_ras_resume(tmp_adev);  		/* Update PSP FW topology after reset */ | 
