On SRIOV, guest driver and host driver might deploy different versions of MEC 
firmware binaries that
lead to potential compability issues cause system hang. To solve this, host and 
guest deploy MEC fw copies
with two level jump table.

Signed-off-by: Yuan Feng <yfe...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

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 03654bfda58a..f248449e93a7 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.c
@@ -45,6 +45,7 @@ MODULE_FIRMWARE("amdgpu/gc_9_4_3_mec.bin");
 MODULE_FIRMWARE("amdgpu/gc_9_4_4_mec.bin");
 MODULE_FIRMWARE("amdgpu/gc_9_4_3_rlc.bin");
 MODULE_FIRMWARE("amdgpu/gc_9_4_4_rlc.bin");
+MODULE_FIRMWARE("amdgpu/gc_9_4_3_sjt_mec.bin");
 
 #define GFX9_MEC_HPD_SIZE 4096
 #define RLCG_UCODE_LOADING_START_ADDRESS 0x00002000L
@@ -574,7 +575,16 @@ static int gfx_v9_4_3_init_cp_compute_microcode(struct 
amdgpu_device *adev,
 {
        int err;
 
-       err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw,
+       if (amdgpu_sriov_vf(adev)) {
+               err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw,
+                                  "amdgpu/%s_sjt_mec.bin", chip_name);
+
+               if (err)
+                       err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw,
+                                               "amdgpu/%s_mec.bin", chip_name);
+       }
+       else
+               err = amdgpu_ucode_request(adev, &adev->gfx.mec_fw,
                                   "amdgpu/%s_mec.bin", chip_name);
        if (err)
                goto out;
-- 
2.39.1.windows.1

Reply via email to