diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c | 8 | 
1 files changed, 6 insertions, 2 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c index fceb3b384955..f3b0aaf3ebc6 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ih.c @@ -138,6 +138,7 @@ void amdgpu_ih_ring_fini(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih)  /**   * amdgpu_ih_ring_write - write IV to the ring buffer   * + * @adev: amdgpu_device pointer   * @ih: ih ring to write to   * @iv: the iv to write   * @num_dw: size of the iv in dw @@ -145,8 +146,8 @@ void amdgpu_ih_ring_fini(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih)   * Writes an IV to the ring buffer using the CPU and increment the wptr.   * Used for testing and delegating IVs to a software ring.   */ -void amdgpu_ih_ring_write(struct amdgpu_ih_ring *ih, const uint32_t *iv, -			  unsigned int num_dw) +void amdgpu_ih_ring_write(struct amdgpu_device *adev, struct amdgpu_ih_ring *ih, +			  const uint32_t *iv, unsigned int num_dw)  {  	uint32_t wptr = le32_to_cpu(*ih->wptr_cpu) >> 2;  	unsigned int i; @@ -161,6 +162,9 @@ void amdgpu_ih_ring_write(struct amdgpu_ih_ring *ih, const uint32_t *iv,  	if (wptr != READ_ONCE(ih->rptr)) {  		wmb();  		WRITE_ONCE(*ih->wptr_cpu, cpu_to_le32(wptr)); +	} else if (adev->irq.retry_cam_enabled) { +		dev_warn_once(adev->dev, "IH soft ring buffer overflow 0x%X, 0x%X\n", +			      wptr, ih->rptr);  	}  } | 
