Skip to content

Commit 45bef89

Browse files
Timur Kristófalexdeucher
authored andcommitted
drm/amdgpu/cik_ih: Enable soft IRQ handler ring
We are going to use the soft IRQ handler ring on GMC v7 (CIK) to process interrupts from VM faults. Signed-off-by: Timur Kristóf <timur.kristof@gmail.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
1 parent 2a38b0e commit 45bef89

1 file changed

Lines changed: 12 additions & 0 deletions

File tree

drivers/gpu/drm/amd/amdgpu/cik_ih.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,9 @@ static int cik_ih_irq_init(struct amdgpu_device *adev)
156156
/* enable irqs */
157157
cik_ih_enable_interrupts(adev);
158158

159+
if (adev->irq.ih_soft.ring_size)
160+
adev->irq.ih_soft.enabled = true;
161+
159162
return 0;
160163
}
161164

@@ -192,6 +195,9 @@ static u32 cik_ih_get_wptr(struct amdgpu_device *adev,
192195

193196
wptr = le32_to_cpu(*ih->wptr_cpu);
194197

198+
if (ih == &adev->irq.ih_soft)
199+
goto out;
200+
195201
if (wptr & IH_RB_WPTR__RB_OVERFLOW_MASK) {
196202
wptr &= ~IH_RB_WPTR__RB_OVERFLOW_MASK;
197203
/* When a ring buffer overflow happen start parsing interrupt
@@ -211,6 +217,8 @@ static u32 cik_ih_get_wptr(struct amdgpu_device *adev,
211217
tmp &= ~IH_RB_CNTL__WPTR_OVERFLOW_CLEAR_MASK;
212218
WREG32(mmIH_RB_CNTL, tmp);
213219
}
220+
221+
out:
214222
return (wptr & ih->ptr_mask);
215223
}
216224

@@ -306,6 +314,10 @@ static int cik_ih_sw_init(struct amdgpu_ip_block *ip_block)
306314
if (r)
307315
return r;
308316

317+
r = amdgpu_ih_ring_init(adev, &adev->irq.ih_soft, IH_SW_RING_SIZE, true);
318+
if (r)
319+
return r;
320+
309321
r = amdgpu_irq_init(adev);
310322

311323
return r;

0 commit comments

Comments
 (0)