Re: [PATCH] drm/amdgpu: Fix interrupt handling on ih_soft ring

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 12.08.22 um 22:56 schrieb Mukul Joshi:
There are no backing hardware registers for ih_soft ring.
As a result, don't try to access hardware registers for read
and write pointers when processing interrupts on the IH soft
ring.

Mhm, the original plan was to have different ih function for the rings but I think we just forgot to implement this fully.

When you do it this way you need to apply it to a bunch of different hw generation as Felix mentioned as well.

Might be easier to clean that up.

Regards,
Christian.


Signed-off-by: Mukul Joshi <mukul.joshi@xxxxxxx>
---
  drivers/gpu/drm/amd/amdgpu/vega20_ih.c | 7 ++++++-
  1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/vega20_ih.c b/drivers/gpu/drm/amd/amdgpu/vega20_ih.c
index 3b4eb8285943..2022ffbb8dba 100644
--- a/drivers/gpu/drm/amd/amdgpu/vega20_ih.c
+++ b/drivers/gpu/drm/amd/amdgpu/vega20_ih.c
@@ -385,9 +385,11 @@ static u32 vega20_ih_get_wptr(struct amdgpu_device *adev,
  	u32 wptr, tmp;
  	struct amdgpu_ih_regs *ih_regs;
- if (ih == &adev->irq.ih) {
+	if (ih == &adev->irq.ih || ih == &adev->irq.ih_soft) {
  		/* Only ring0 supports writeback. On other rings fall back
  		 * to register-based code with overflow checking below.
+		 * ih_soft ring doesn't have any backing hardware registers,
+		 * update wptr and return.
  		 */
  		wptr = le32_to_cpu(*ih->wptr_cpu);
@@ -461,6 +463,9 @@ static void vega20_ih_set_rptr(struct amdgpu_device *adev,
  {
  	struct amdgpu_ih_regs *ih_regs;
+ if (ih == &adev->irq.ih_soft)
+		return;
+
  	if (ih->use_doorbell) {
  		/* XXX check if swapping is necessary on BE */
  		*ih->rptr_cpu = ih->rptr;




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux