]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/pm: Initialize power profile mode
authorLijo Lazar <lijo.lazar@amd.com>
Wed, 4 Dec 2024 07:41:28 +0000 (13:11 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 5 Dec 2024 19:31:14 +0000 (14:31 -0500)
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 <lijo.lazar@amd.com>
Reviewed-by: Yang Wang <kevinyang.wang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org # 6.11.x
drivers/gpu/drm/amd/include/kgd_pp_interface.h
drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c

index 67a5de57394361e2a272be17e0a9daa907c39e8a..d7acdd42d80f6cf06529d4585798e03f237ccb1f 100644 (file)
@@ -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,
index 5eae14fe79f1782e575b97dc36e73a34893232d8..21bd635bcdfc1564961a747a4043b290045e8e23 100644 (file)
@@ -764,6 +764,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);
 
@@ -1248,6 +1249,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;
@@ -1269,13 +1285,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;