Commit 8eb966f2 authored by Lijo Lazar's avatar Lijo Lazar Committed by Alex Deucher
Browse files

drm/amd/pm: Initialize power profile mode



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: default avatarLijo Lazar <lijo.lazar@amd.com>
Reviewed-by: default avatarYang Wang <kevinyang.wang@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org # 6.11.x
parent 47f402a3
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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,
+17 −7
Original line number Diff line number Diff line
@@ -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;