diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/cz_ih.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/cz_ih.c | 19 | 
1 files changed, 17 insertions, 2 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/cz_ih.c b/drivers/gpu/drm/amd/amdgpu/cz_ih.c index b6cdf4afaf46..fa61d649bb44 100644 --- a/drivers/gpu/drm/amd/amdgpu/cz_ih.c +++ b/drivers/gpu/drm/amd/amdgpu/cz_ih.c @@ -216,8 +216,23 @@ static u32 cz_ih_get_wptr(struct amdgpu_device *adev)   */  static bool cz_ih_prescreen_iv(struct amdgpu_device *adev)  { -	/* Process all interrupts */ -	return true; +	u32 ring_index = adev->irq.ih.rptr >> 2; +	u16 pasid; + +	switch (le32_to_cpu(adev->irq.ih.ring[ring_index]) & 0xff) { +	case 146: +	case 147: +		pasid = le32_to_cpu(adev->irq.ih.ring[ring_index + 2]) >> 16; +		if (!pasid || amdgpu_vm_pasid_fault_credit(adev, pasid)) +			return true; +		break; +	default: +		/* Not a VM fault */ +		return true; +	} + +	adev->irq.ih.rptr += 16; +	return false;  }  /** | 
