drm/amdgpu/sriov: Need to clear kiq position
authorEmily Deng <Emily.Deng@amd.com>
Thu, 11 Jun 2020 06:09:16 +0000 (14:09 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 1 Jul 2020 05:59:19 +0000 (01:59 -0400)
As will clear vf fw during unload driver, to avoid idle fail. Need
to clear KIQ portion also.

Signed-off-by: Emily Deng <Emily.Deng@amd.com>
Ack-by: Monk.liu <monk.liu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c

index e9045dde5b24e4bc2592f5b6d9b4ada1b7906354..323285eb1457d9099f4ad8b024e035d7b95042e4 100644 (file)
@@ -6876,6 +6876,7 @@ static int gfx_v10_0_hw_fini(void *handle)
 {
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
        int r;
+       uint32_t tmp;
 
        amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
        amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
@@ -6890,6 +6891,11 @@ static int gfx_v10_0_hw_fini(void *handle)
                DRM_ERROR("KCQ disable failed\n");
        if (amdgpu_sriov_vf(adev)) {
                gfx_v10_0_cp_gfx_enable(adev, false);
+               /* Program KIQ position of RLC_CP_SCHEDULERS during destroy */
+               tmp = RREG32_SOC15(GC, 0, mmRLC_CP_SCHEDULERS);
+               tmp &= 0xffffff00;
+               WREG32_SOC15(GC, 0, mmRLC_CP_SCHEDULERS, tmp);
+
                return 0;
        }
        gfx_v10_0_cp_enable(adev, false);