Commit 6dafb5d4 authored by Alex Deucher's avatar Alex Deucher
Browse files

drm/amdgpu/pm: add workload profile pause helper



To be used for display idle optimizations when
we want to pause non-default profiles.

Reviewed-by: default avatarKenneth Feng <kenneth.feng@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 0e2ebfe2
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -429,6 +429,7 @@ struct amd_pm_funcs {
	int (*set_pp_table)(void *handle, const char *buf, size_t size);
	void (*debugfs_print_current_performance_level)(void *handle, struct seq_file *m);
	int (*switch_power_profile)(void *handle, enum PP_SMC_POWER_PROFILE type, bool en);
	int (*pause_power_profile)(void *handle, bool pause);
/* export to amdgpu */
	struct amd_vce_state *(*get_vce_clock_state)(void *handle, u32 idx);
	int (*dispatch_tasks)(void *handle, enum amd_pp_task task_id,
+19 −0
Original line number Diff line number Diff line
@@ -377,6 +377,25 @@ int amdgpu_dpm_switch_power_profile(struct amdgpu_device *adev,
	return ret;
}

int amdgpu_dpm_pause_power_profile(struct amdgpu_device *adev,
				   bool pause)
{
	const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs;
	int ret = 0;

	if (amdgpu_sriov_vf(adev))
		return 0;

	if (pp_funcs && pp_funcs->pause_power_profile) {
		mutex_lock(&adev->pm.mutex);
		ret = pp_funcs->pause_power_profile(
			adev->powerplay.pp_handle, pause);
		mutex_unlock(&adev->pm.mutex);
	}

	return ret;
}

int amdgpu_dpm_set_xgmi_pstate(struct amdgpu_device *adev,
			       uint32_t pstate)
{
+2 −0
Original line number Diff line number Diff line
@@ -410,6 +410,8 @@ int amdgpu_dpm_set_xgmi_pstate(struct amdgpu_device *adev,
int amdgpu_dpm_switch_power_profile(struct amdgpu_device *adev,
				    enum PP_SMC_POWER_PROFILE type,
				    bool en);
int amdgpu_dpm_pause_power_profile(struct amdgpu_device *adev,
				   bool pause);

int amdgpu_dpm_baco_reset(struct amdgpu_device *adev);