Skip to content

Commit 2a38b0e

Browse files
Timur Kristófalexdeucher
authored andcommitted
drm/amdgpu/si_ih: Enable soft IRQ handler ring
We are going to use the soft IRQ handler ring on GMC v6 (SI) 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 a7fa4f2 commit 2a38b0e

1 file changed

Lines changed: 12 additions & 0 deletions

File tree

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ static int si_ih_irq_init(struct amdgpu_device *adev)
9696
pci_set_master(adev->pdev);
9797
si_ih_enable_interrupts(adev);
9898

99+
if (adev->irq.ih_soft.ring_size)
100+
adev->irq.ih_soft.enabled = true;
101+
99102
return 0;
100103
}
101104

@@ -112,6 +115,9 @@ static u32 si_ih_get_wptr(struct amdgpu_device *adev,
112115

113116
wptr = le32_to_cpu(*ih->wptr_cpu);
114117

118+
if (ih == &adev->irq.ih_soft)
119+
goto out;
120+
115121
if (wptr & IH_RB_WPTR__RB_OVERFLOW_MASK) {
116122
wptr &= ~IH_RB_WPTR__RB_OVERFLOW_MASK;
117123
dev_warn(adev->dev, "IH ring buffer overflow (0x%08X, 0x%08X, 0x%08X)\n",
@@ -127,6 +133,8 @@ static u32 si_ih_get_wptr(struct amdgpu_device *adev,
127133
tmp &= ~IH_RB_CNTL__WPTR_OVERFLOW_CLEAR_MASK;
128134
WREG32(IH_RB_CNTL, tmp);
129135
}
136+
137+
out:
130138
return (wptr & ih->ptr_mask);
131139
}
132140

@@ -175,6 +183,10 @@ static int si_ih_sw_init(struct amdgpu_ip_block *ip_block)
175183
if (r)
176184
return r;
177185

186+
r = amdgpu_ih_ring_init(adev, &adev->irq.ih_soft, IH_SW_RING_SIZE, true);
187+
if (r)
188+
return r;
189+
178190
return amdgpu_irq_init(adev);
179191
}
180192

0 commit comments

Comments
 (0)