drm/amdgpu: Add nv mailbox irq in soc21
authorYuBiao Wang <YuBiao.Wang@amd.com>
Wed, 30 Nov 2022 09:14:56 +0000 (17:14 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 1 Dec 2022 20:21:34 +0000 (15:21 -0500)
Under virtualization guest needs to receive notification from host to
perform reset in some cases. Add nv mailbox irq in soc21.

Signed-off-by: YuBiao Wang <YuBiao.Wang@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/soc21.c

index c559f9bfc36d69b05fdaed23c399df4c8cbbec7b..41b94c824717c24100f5c84fb14b7890c3f270f8 100644 (file)
@@ -43,6 +43,7 @@
 #include "soc15.h"
 #include "soc15_common.h"
 #include "soc21.h"
+#include "mxgpu_nv.h"
 
 static const struct amd_ip_funcs soc21_common_ip_funcs;
 
@@ -659,19 +660,31 @@ static int soc21_common_early_init(void *handle)
                return -EINVAL;
        }
 
-       if (amdgpu_sriov_vf(adev))
+       if (amdgpu_sriov_vf(adev)) {
                amdgpu_virt_init_setting(adev);
+               xgpu_nv_mailbox_set_irq_funcs(adev);
+       }
 
        return 0;
 }
 
 static int soc21_common_late_init(void *handle)
 {
+       struct amdgpu_device *adev = (struct amdgpu_device *)handle;
+
+       if (amdgpu_sriov_vf(adev))
+               xgpu_nv_mailbox_get_irq(adev);
+
        return 0;
 }
 
 static int soc21_common_sw_init(void *handle)
 {
+       struct amdgpu_device *adev = (struct amdgpu_device *)handle;
+
+       if (amdgpu_sriov_vf(adev))
+               xgpu_nv_mailbox_add_irq_id(adev);
+
        return 0;
 }
 
@@ -709,6 +722,9 @@ static int soc21_common_hw_fini(void *handle)
        /* disable the doorbell aperture */
        soc21_enable_doorbell_aperture(adev, false);
 
+       if (amdgpu_sriov_vf(adev))
+               xgpu_nv_mailbox_put_irq(adev);
+
        return 0;
 }