From: Lijo Lazar <[email protected]>

Refactor such that individual SMU IP versions can choose the startup
power profile mode. If no preference, then use the generic default power
profile selection logic.

Signed-off-by: Lijo Lazar <[email protected]>
---
 .../gpu/drm/amd/include/kgd_pp_interface.h    |  1 +
 drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c     | 24 +++++++++++++------
 2 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/amd/include/kgd_pp_interface.h 
b/drivers/gpu/drm/amd/include/kgd_pp_interface.h
index 75dfbf14755c..9189dcb65188 100644
--- a/drivers/gpu/drm/amd/include/kgd_pp_interface.h
+++ b/drivers/gpu/drm/amd/include/kgd_pp_interface.h
@@ -164,6 +164,7 @@ enum amd_pp_task {
 };
 
 enum PP_SMC_POWER_PROFILE {
+       PP_SMC_POWER_PROFILE_UNKNOWN = -1,
        PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT = 0x0,
        PP_SMC_POWER_PROFILE_FULLSCREEN3D = 0x1,
        PP_SMC_POWER_PROFILE_POWERSAVING  = 0x2,
diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c 
b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
index d1bab508ade2..bd1a847960e3 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
@@ -767,6 +767,7 @@ static int smu_early_init(struct amdgpu_ip_block *ip_block)
        smu->smu_baco.platform_support = false;
        smu->smu_baco.maco_support = false;
        smu->user_dpm_profile.fan_mode = -1;
+       smu->power_profile_mode = PP_SMC_POWER_PROFILE_UNKNOWN;
 
        mutex_init(&smu->message_lock);
 
@@ -1257,6 +1258,21 @@ static bool smu_is_workload_profile_available(struct 
smu_context *smu,
        return smu->workload_map && smu->workload_map[profile].valid_mapping;
 }
 
+static void smu_init_power_profile(struct smu_context *smu)
+{
+       if (smu->power_profile_mode == PP_SMC_POWER_PROFILE_UNKNOWN) {
+               if (smu->is_apu ||
+                   !smu_is_workload_profile_available(
+                           smu, PP_SMC_POWER_PROFILE_FULLSCREEN3D))
+                       smu->power_profile_mode =
+                               PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT;
+               else
+                       smu->power_profile_mode =
+                               PP_SMC_POWER_PROFILE_FULLSCREEN3D;
+       }
+       smu_power_profile_mode_get(smu, smu->power_profile_mode);
+}
+
 static int smu_sw_init(struct amdgpu_ip_block *ip_block)
 {
        struct amdgpu_device *adev = ip_block->adev;
@@ -1279,13 +1295,7 @@ static int smu_sw_init(struct amdgpu_ip_block *ip_block)
        atomic_set(&smu->smu_power.power_gate.vpe_gated, 1);
        atomic_set(&smu->smu_power.power_gate.umsch_mm_gated, 1);
 
-       if (smu->is_apu ||
-           !smu_is_workload_profile_available(smu, 
PP_SMC_POWER_PROFILE_FULLSCREEN3D))
-               smu->power_profile_mode = PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT;
-       else
-               smu->power_profile_mode = PP_SMC_POWER_PROFILE_FULLSCREEN3D;
-       smu_power_profile_mode_get(smu, smu->power_profile_mode);
-
+       smu_init_power_profile(smu);
        smu->display_config = &adev->pm.pm_display_cfg;
 
        smu->smu_dpm.dpm_level = AMD_DPM_FORCED_LEVEL_AUTO;
-- 
2.34.1

Reply via email to