GFX and SDMA is not properly deinitialized under SRIOV.

Remove amdgpu_sriov_vf() guards to allow VF to deinitialize correctly.

Signed-off-by: Victor Lu <victorchengchi...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c  | 7 +++++--
 drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c | 9 ++++-----
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c 
b/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
index b53c8fd4e8cf..fbc34f1797a0 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
@@ -2049,7 +2049,6 @@ static void gfx_v9_4_3_xcc_fini(struct amdgpu_device 
*adev, int xcc_id)
                 * hypervisor side.
                 */
                WREG32_FIELD15_PREREG(GC, GET_INST(GC, xcc_id), 
CP_PQ_WPTR_POLL_CNTL, EN, 0);
-               return;
        }
 
        /* Use deinitialize sequence from CAIL when unbinding device
@@ -2068,7 +2067,11 @@ static void gfx_v9_4_3_xcc_fini(struct amdgpu_device 
*adev, int xcc_id)
        }
 
        gfx_v9_4_3_xcc_kcq_fini_register(adev, xcc_id);
-       gfx_v9_4_3_xcc_cp_enable(adev, false, xcc_id);
+
+       /* SRIOV world switch will fail if MEC is disabled */
+       if (!amdgpu_sriov_vf(adev)) {
+               gfx_v9_4_3_xcc_cp_enable(adev, false, xcc_id);
+       }
 }
 
 static int gfx_v9_4_3_hw_init(void *handle)
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c 
b/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c
index eaa4f5f49949..fa0752d81c23 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c
@@ -1441,17 +1441,16 @@ static int sdma_v4_4_2_hw_fini(void *handle)
        uint32_t inst_mask;
        int i;
 
-       if (amdgpu_sriov_vf(adev))
-               return 0;
-
-       inst_mask = GENMASK(adev->sdma.num_instances - 1, 0);
-       if (amdgpu_ras_is_supported(adev, AMDGPU_RAS_BLOCK__SDMA)) {
+       /* SRIOV does not init RAS features */
+       if ((!amdgpu_sriov_vf(adev)) &&
+            amdgpu_ras_is_supported(adev, AMDGPU_RAS_BLOCK__SDMA)) {
                for (i = 0; i < adev->sdma.num_instances; i++) {
                        amdgpu_irq_put(adev, &adev->sdma.ecc_irq,
                                       AMDGPU_SDMA_IRQ_INSTANCE0 + i);
                }
        }
 
+       inst_mask = GENMASK(adev->sdma.num_instances - 1, 0);
        sdma_v4_4_2_inst_ctx_switch_enable(adev, false, inst_mask);
        sdma_v4_4_2_inst_enable(adev, false, inst_mask);
 
-- 
2.34.1

Reply via email to