]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
drm/amdgpu: disable GFX ring and disable PQ wptr in hw_fini
authorMonk Liu <Monk.Liu@amd.com>
Mon, 29 Jan 2018 11:24:32 +0000 (19:24 +0800)
committerKleber Sacilotto de Souza <kleber.souza@canonical.com>
Mon, 27 Aug 2018 14:40:05 +0000 (16:40 +0200)
BugLink: http://bugs.launchpad.net/bugs/1786352
[ Upstream commit 9f0178fb67699992d38601cb923b434f9986dd68 ]

otherwise there will be DMAR reading error comes out from CP since
GFX is still alive and CPC's WPTR_POLL is still enabled, which would
lead to DMAR read error.

fix:
we can hault CPG after hw_fini, but cannot halt CPC becaues KIQ
stil need to be alive to let RLCV invoke, but its WPTR_POLL could
be disabled.

Signed-off-by: Monk Liu <Monk.Liu@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c

index 5aeb5f8816f3b9a68666cf57372cddeb12c2b36a..79b3d91d9a9e22b5d5d05ecc5c72b9d5824eba08 100644 (file)
@@ -3008,7 +3008,13 @@ static int gfx_v9_0_hw_fini(void *handle)
                gfx_v9_0_kcq_disable(&adev->gfx.kiq.ring, &adev->gfx.compute_ring[i]);
 
        if (amdgpu_sriov_vf(adev)) {
-               pr_debug("For SRIOV client, shouldn't do anything.\n");
+               gfx_v9_0_cp_gfx_enable(adev, false);
+               /* must disable polling for SRIOV when hw finished, otherwise
+                * CPC engine may still keep fetching WB address which is already
+                * invalid after sw finished and trigger DMAR reading error in
+                * hypervisor side.
+                */
+               WREG32_FIELD15(GC, 0, CP_PQ_WPTR_POLL_CNTL, EN, 0);
                return 0;
        }
        gfx_v9_0_cp_enable(adev, false);