drm/amdgpu: Fix firmware UCODE_ID_STORAGE issue (v2)
authorTrigger Huang <trigger.huang@amd.com>
Tue, 11 Apr 2017 05:56:36 +0000 (01:56 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 28 Apr 2017 21:32:14 +0000 (17:32 -0400)
In Tonga's virtualization environment, for firmware UCODE_ID_STORAGE,
there is no actual firmware data, but we still need alloc a BO and
tell the BO's mc address to HW, or world switch will hang on VFs.

v2: fix coding style (Alex)

Signed-off-by: Trigger Huang <trigger.huang@amd.com>
Reviewed-by: Xiangliang Yu <Xiangliang.Yu@amd.com>
Reviewed-by: Monk Liu <monk.liu@amd.com>
Acked-by: Huang Rui <ray.huang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c

index a1891c93cdbf8780f110c5064ac2332c4b46467c..dfd1c98efa7c2116cf1fdb54c7d2a5443367023e 100644 (file)
@@ -382,10 +382,14 @@ int amdgpu_ucode_init_bo(struct amdgpu_device *adev)
         * if SMU loaded firmware, it needn't add SMC, UVD, and VCE
         * ucode info here
         */
-       if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP)
-               adev->firmware.max_ucodes = AMDGPU_UCODE_ID_MAXIMUM - 4;
-       else
+       if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP) {
+               if (amdgpu_sriov_vf(adev))
+                       adev->firmware.max_ucodes = AMDGPU_UCODE_ID_MAXIMUM - 3;
+               else
+                       adev->firmware.max_ucodes = AMDGPU_UCODE_ID_MAXIMUM - 4;
+       } else {
                adev->firmware.max_ucodes = AMDGPU_UCODE_ID_MAXIMUM;
+       }
 
        for (i = 0; i < adev->firmware.max_ucodes; i++) {
                ucode = &adev->firmware.ucode[i];