drm/amdgpu: skip load smu and sdma microcode on sriov for SIENNA_CICHLID
authorStanley.Yang <Stanley.Yang@amd.com>
Fri, 11 Dec 2020 12:59:47 +0000 (20:59 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 15 Dec 2020 16:33:16 +0000 (11:33 -0500)
skip load smu and sdma fw on sriov due to sos,
ta and asd fw have been skipped for SIENNA_CICHLID.

V2:
    move asic check into smu11

Signed-off-by: Stanley.Yang <Stanley.Yang@amd.com>
Reviewed-by: Kevin Wang <kevin1.wang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c

index 5c4ac17..f1ba36a 100644 (file)
@@ -153,6 +153,9 @@ static int sdma_v5_2_init_microcode(struct amdgpu_device *adev)
        struct amdgpu_firmware_info *info = NULL;
        const struct common_firmware_header *header = NULL;
 
+       if (amdgpu_sriov_vf(adev) && (adev->asic_type == CHIP_SIENNA_CICHLID))
+               return 0;
+
        DRM_DEBUG("\n");
 
        switch (adev->asic_type) {
index cf999b7..8b867a6 100644 (file)
@@ -847,12 +847,10 @@ static int smu_sw_init(void *handle)
        smu->smu_dpm.dpm_level = AMD_DPM_FORCED_LEVEL_AUTO;
        smu->smu_dpm.requested_dpm_level = AMD_DPM_FORCED_LEVEL_AUTO;
 
-       if (!amdgpu_sriov_vf(adev) || (adev->asic_type != CHIP_NAVI12)) {
-               ret = smu_init_microcode(smu);
-               if (ret) {
-                       dev_err(adev->dev, "Failed to load smu firmware!\n");
-                       return ret;
-               }
+       ret = smu_init_microcode(smu);
+       if (ret) {
+               dev_err(adev->dev, "Failed to load smu firmware!\n");
+               return ret;
        }
 
        ret = smu_smc_table_sw_init(smu);
index 0372cb8..b279dbb 100644 (file)
@@ -91,6 +91,11 @@ int smu_v11_0_init_microcode(struct smu_context *smu)
        const struct common_firmware_header *header;
        struct amdgpu_firmware_info *ucode = NULL;
 
+       if (amdgpu_sriov_vf(adev) &&
+                       ((adev->asic_type == CHIP_NAVI12) ||
+                        (adev->asic_type == CHIP_SIENNA_CICHLID)))
+               return 0;
+
        switch (adev->asic_type) {
        case CHIP_ARCTURUS:
                chip_name = "arcturus";