diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 18 | 
1 files changed, 11 insertions, 7 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c index e324bfe6c58f..a92f3b18e657 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c @@ -330,12 +330,13 @@ int amdgpu_uvd_sw_fini(struct amdgpu_device *adev)  int amdgpu_uvd_entity_init(struct amdgpu_device *adev)  {  	struct amdgpu_ring *ring; -	struct drm_sched_rq *rq; +	struct drm_gpu_scheduler *sched;  	int r;  	ring = &adev->uvd.inst[0].ring; -	rq = &ring->sched.sched_rq[DRM_SCHED_PRIORITY_NORMAL]; -	r = drm_sched_entity_init(&adev->uvd.entity, &rq, 1, NULL); +	sched = &ring->sched; +	r = drm_sched_entity_init(&adev->uvd.entity, DRM_SCHED_PRIORITY_NORMAL, +				  &sched, 1, NULL);  	if (r) {  		DRM_ERROR("Failed setting up UVD kernel entity.\n");  		return r; @@ -349,6 +350,7 @@ int amdgpu_uvd_suspend(struct amdgpu_device *adev)  	unsigned size;  	void *ptr;  	int i, j; +	bool in_ras_intr = amdgpu_ras_intr_triggered();  	cancel_delayed_work_sync(&adev->uvd.idle_work); @@ -376,13 +378,15 @@ int amdgpu_uvd_suspend(struct amdgpu_device *adev)  			return -ENOMEM;  		/* re-write 0 since err_event_athub will corrupt VCPU buffer */ -		if (amdgpu_ras_intr_triggered()) { -			DRM_WARN("UVD VCPU state may lost due to RAS ERREVENT_ATHUB_INTERRUPT\n"); +		if (in_ras_intr)  			memset(adev->uvd.inst[j].saved_bo, 0, size); -		} else { +		else  			memcpy_fromio(adev->uvd.inst[j].saved_bo, ptr, size); -		}  	} + +	if (in_ras_intr) +		DRM_WARN("UVD VCPU state may lost due to RAS ERREVENT_ATHUB_INTERRUPT\n"); +  	return 0;  } |