diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c | 27 | 
1 files changed, 26 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c index b07c000fc8ba..4fa019c8aefc 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.c @@ -241,6 +241,31 @@ int amdgpu_jpeg_process_poison_irq(struct amdgpu_device *adev,  	return 0;  } +int amdgpu_jpeg_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->jpeg.num_jpeg_inst; ++i) { +			if (adev->jpeg.harvest_config & (1 << i)) +				continue; + +			r = amdgpu_irq_get(adev, &adev->jpeg.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_jpeg_ras_sw_init(struct amdgpu_device *adev)  {  	int err; @@ -262,7 +287,7 @@ int amdgpu_jpeg_ras_sw_init(struct amdgpu_device *adev)  	adev->jpeg.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_jpeg_ras_late_init;  	return 0;  }  | 
