drm/amdgpu: add VCN 4.0 RAS poison consumption handling
authorTao Zhou <tao.zhou1@amd.com>
Thu, 20 Oct 2022 09:33:38 +0000 (17:33 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 17 Nov 2022 23:08:40 +0000 (18:08 -0500)
Register irq handler.

Signed-off-by: Tao Zhou <tao.zhou1@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c

index b067fb63010e4a4dff9f9ed9c1122afdd1881468..403d054cf51bd73411a807259ef8b9ae6179e364 100644 (file)
@@ -135,6 +135,12 @@ static int vcn_v4_0_sw_init(void *handle)
                if (r)
                        return r;
 
+               /* VCN POISON TRAP */
+               r = amdgpu_irq_add_id(adev, amdgpu_ih_clientid_vcns[i],
+                               VCN_4_0__SRCID_UVD_POISON, &adev->vcn.inst[i].irq);
+               if (r)
+                       return r;
+
                ring = &adev->vcn.inst[i].ring_enc[0];
                ring->use_doorbell = true;
                if (amdgpu_sriov_vf(adev))
@@ -299,6 +305,7 @@ static int vcn_v4_0_hw_fini(void *handle)
                        }
                }
 
+               amdgpu_irq_put(adev, &adev->vcn.inst[i].irq, 0);
        }
 
        return 0;
@@ -1942,6 +1949,9 @@ static int vcn_v4_0_process_interrupt(struct amdgpu_device *adev, struct amdgpu_
        case VCN_4_0__SRCID__UVD_ENC_GENERAL_PURPOSE:
                amdgpu_fence_process(&adev->vcn.inst[ip_instance].ring_enc[0]);
                break;
+       case VCN_4_0__SRCID_UVD_POISON:
+               amdgpu_vcn_process_poison_irq(adev, source, entry);
+               break;
        default:
                DRM_ERROR("Unhandled interrupt: %d %d\n",
                          entry->src_id, entry->src_data[0]);