aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
diff options
context:
space:
mode:
authorSamuel Zhang <[email protected]>2025-05-08 06:36:35 +0000
committerAlex Deucher <[email protected]>2025-06-18 16:19:15 +0000
commit4108c2be12ebe78accb40d43f4713a7cc481b18a (patch)
treec3c8e9f0679ee0968f0262d9cb43418b7aa2413e /drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
parentdrm/amdgpu: enable pdb0 for hibernation on SRIOV (diff)
downloadkernel-4108c2be12ebe78accb40d43f4713a7cc481b18a.tar.gz
kernel-4108c2be12ebe78accb40d43f4713a7cc481b18a.zip
drm/amdgpu: fix fence fallback timer expired error
IH is not working after switching a new gpu index for the first time. During VM resume, QEMU programming of VF MSIX table (register GFXMSIX_VECT0_ADDR_LO) may not work.The access could be blocked by nBIF protection as VF isn't in exclusive access mode. Exclusive access is enabled now, disable/enable MSIX so that QEMU reprograms MSIX table. call amdgpu_restore_msix on resume to restore msix table. Signed-off-by: Samuel Zhang <[email protected]> Acked-by: Lijo Lazar <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_device.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_device.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 13708dc7706a..b16f7c4beb22 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -5109,6 +5109,13 @@ static inline int amdgpu_virt_resume(struct amdgpu_device *adev)
int r;
unsigned int prev_physical_node_id = adev->gmc.xgmi.physical_node_id;
+ /* During VM resume, QEMU programming of VF MSIX table (register GFXMSIX_VECT0_ADDR_LO)
+ * may not work. The access could be blocked by nBIF protection as VF isn't in
+ * exclusive access mode. Exclusive access is enabled now, disable/enable MSIX
+ * so that QEMU reprograms MSIX table.
+ */
+ amdgpu_restore_msix(adev);
+
r = adev->gfxhub.funcs->get_xgmi_info(adev);
if (r)
return r;