if (adev->asic_type == CHIP_VEGA20)
                return (amdgpu_dpm == 2) ? true : false;
        else if (adev->asic_type >= CHIP_ARCTURUS) {
-               if (amdgpu_sriov_vf(adev))
+               if (amdgpu_sriov_vf(adev)&& !amdgpu_sriov_is_pp_one_vf(adev))
                        return false;
                else
                        return true;
        }
 
        /* smu_dump_pptable(smu); */
+       if (!amdgpu_sriov_vf(adev)) {
+               /*
+                * Copy pptable bo in the vram to smc with SMU MSGs such as
+                * SetDriverDramAddr and TransferTableDram2Smu.
+                */
+               ret = smu_write_pptable(smu);
+               if (ret)
+                       return ret;
 
-       /*
-        * Copy pptable bo in the vram to smc with SMU MSGs such as
-        * SetDriverDramAddr and TransferTableDram2Smu.
-        */
-       ret = smu_write_pptable(smu);
-       if (ret)
-               return ret;
-
-       /* issue Run*Btc msg */
-       ret = smu_run_btc(smu);
-       if (ret)
-               return ret;
-
-       ret = smu_feature_set_allowed_mask(smu);
-       if (ret)
-               return ret;
-
-       ret = smu_system_features_control(smu, true);
-       if (ret)
-               return ret;
+               /* issue Run*Btc msg */
+               ret = smu_run_btc(smu);
+               if (ret)
+                       return ret;
+               ret = smu_feature_set_allowed_mask(smu);
+               if (ret)
+                       return ret;
 
+               ret = smu_system_features_control(smu, true);
+               if (ret)
+                       return ret;
+       }
        if (adev->asic_type != CHIP_ARCTURUS) {
                ret = smu_notify_display_change(smu);
                if (ret)
        /*
         * Set PMSTATUSLOG table bo address with SetToolsDramAddr MSG for tools.
         */
-       ret = smu_set_tool_table_location(smu);
-
+       if (!amdgpu_sriov_vf(adev)) {
+               ret = smu_set_tool_table_location(smu);
+       }
        if (!smu_is_dpm_running(smu))
                pr_info("dpm has been disabled\n");
 
                smu_set_gfx_cgpg(&adev->smu, true);
        }
 
+       if (amdgpu_sriov_vf(adev) && !amdgpu_sriov_is_pp_one_vf(adev))
+               return 0;
+
        if (!smu->pm_enabled)
                return 0;
 
        struct smu_table_context *table_context = &smu->smu_table;
        int ret = 0;
 
+       if (amdgpu_sriov_vf(adev)&& !amdgpu_sriov_is_pp_one_vf(adev))
+               return 0;
+
        if (smu->is_apu) {
                smu_powergate_sdma(&adev->smu, true);
                smu_powergate_vcn(&adev->smu, true);
                smu_powergate_jpeg(&adev->smu, true);
        }
 
-       ret = smu_stop_thermal_control(smu);
-       if (ret) {
-               pr_warn("Fail to stop thermal control!\n");
-               return ret;
-       }
-
-       /*
-        * For custom pptable uploading, skip the DPM features
-        * disable process on Navi1x ASICs.
-        *   - As the gfx related features are under control of
-        *     RLC on those ASICs. RLC reinitialization will be
-        *     needed to reenable them. That will cost much more
-        *     efforts.
-        *
-        *   - SMU firmware can handle the DPM reenablement
-        *     properly.
-        */
-       if (!smu->uploading_custom_pp_table ||
-           !((adev->asic_type >= CHIP_NAVI10) &&
-             (adev->asic_type <= CHIP_NAVI12))) {
-               ret = smu_stop_dpms(smu);
+       if (!amdgpu_sriov_vf(adev)){
+               ret = smu_stop_thermal_control(smu);
                if (ret) {
-                       pr_warn("Fail to stop Dpms!\n");
+                       pr_warn("Fail to stop thermal control!\n");
                        return ret;
                }
+
+               /*
+                * For custom pptable uploading, skip the DPM features
+                * disable process on Navi1x ASICs.
+                *   - As the gfx related features are under control of
+                *     RLC on those ASICs. RLC reinitialization will be
+                *     needed to reenable them. That will cost much more
+                *     efforts.
+                *
+                *   - SMU firmware can handle the DPM reenablement
+                *     properly.
+                */
+               if (!smu->uploading_custom_pp_table ||
+                               !((adev->asic_type >= CHIP_NAVI10) &&
+                                       (adev->asic_type <= CHIP_NAVI12))) {
+                       ret = smu_stop_dpms(smu);
+                       if (ret) {
+                               pr_warn("Fail to stop Dpms!\n");
+                               return ret;
+                       }
+               }
        }
 
        kfree(table_context->driver_pptable);