diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 27 | 
1 files changed, 26 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c index e63fcc58e8e0..2d94f1b63bd6 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c @@ -1181,6 +1181,31 @@ int amdgpu_vcn_process_poison_irq(struct amdgpu_device *adev,  	return 0;  } +int amdgpu_vcn_ras_late_init(struct amdgpu_device *adev, struct ras_common_if *ras_block) +{ +	int r, i; + +	r = amdgpu_ras_block_late_init(adev, ras_block); +	if (r) +		return r; + +	if (amdgpu_ras_is_supported(adev, ras_block->block)) { +		for (i = 0; i < adev->vcn.num_vcn_inst; i++) { +			if (adev->vcn.harvest_config & (1 << i)) +				continue; + +			r = amdgpu_irq_get(adev, &adev->vcn.inst[i].ras_poison_irq, 0); +			if (r) +				goto late_fini; +		} +	} +	return 0; + +late_fini: +	amdgpu_ras_block_late_fini(adev, ras_block); +	return r; +} +  int amdgpu_vcn_ras_sw_init(struct amdgpu_device *adev)  {  	int err; @@ -1202,7 +1227,7 @@ int amdgpu_vcn_ras_sw_init(struct amdgpu_device *adev)  	adev->vcn.ras_if = &ras->ras_block.ras_comm;  	if (!ras->ras_block.ras_late_init) -		ras->ras_block.ras_late_init = amdgpu_ras_block_late_init; +		ras->ras_block.ras_late_init = amdgpu_vcn_ras_late_init;  	return 0;  }  |