Otherwise, it will cause driver access non-existing sdma registers
in gpu reset code path

Signed-off-by: Hawking Zhang <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c 
b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
index c21b247..a1c2d22 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
@@ -2421,10 +2421,23 @@ static const struct amdgpu_irq_src_funcs 
sdma_v4_0_ecc_irq_funcs = {
 
 static void sdma_v4_0_set_irq_funcs(struct amdgpu_device *adev)
 {
-       adev->sdma.trap_irq.num_types = AMDGPU_SDMA_IRQ_LAST;
+       switch (adev->sdma.num_instances) {
+       case 1:
+               adev->sdma.trap_irq.num_types = AMDGPU_SDMA_IRQ_INSTANCE1;
+               adev->sdma.ecc_irq.num_types = AMDGPU_SDMA_IRQ_INSTANCE1;
+               break;
+       case 8:
+               adev->sdma.trap_irq.num_types = AMDGPU_SDMA_IRQ_LAST;
+               adev->sdma.ecc_irq.num_types = AMDGPU_SDMA_IRQ_LAST;
+               break;
+       case 2:
+       default:
+               adev->sdma.trap_irq.num_types = AMDGPU_SDMA_IRQ_INSTANCE2;
+               adev->sdma.ecc_irq.num_types = AMDGPU_SDMA_IRQ_INSTANCE2;
+               break;
+       }
        adev->sdma.trap_irq.funcs = &sdma_v4_0_trap_irq_funcs;
        adev->sdma.illegal_inst_irq.funcs = &sdma_v4_0_illegal_inst_irq_funcs;
-       adev->sdma.ecc_irq.num_types = AMDGPU_SDMA_IRQ_LAST;
        adev->sdma.ecc_irq.funcs = &sdma_v4_0_ecc_irq_funcs;
 }
 
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to