aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h
diff options
context:
space:
mode:
authorEric Huang <JinHuiEric.Huang@amd.com>2016-09-12 16:17:44 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-03-29 23:52:48 -0400
commit34bb2734d1bc3c72e4739234481c0efab0941d14 (patch)
treec31583ca0511581253f37aea943ba840d8388bfd /drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h
parent3f14e6231858f4d9a2e965f54202f7a3f69c79d0 (diff)
drm/amd/amdgpu: add power profile sysfs entry
Add the sysfs entries pp_gfx_power_profile and pp_compute_power_profile which give user a way to set power profile through parameters minimum sclk, minimum mclk, activity threshold, up hysteresis and down hysteresis only when the entry power_dpm_force_performance_level is in default value "auto". It is read and write. Example: echo 500 800 20 0 5 > /sys/class/drm/card0/device/pp_*_power_profile cat /sys/class/drm/card0/device/pp_*_power_profile 500 800 20 0 5 Note: first parameter is sclk in MHz, second is mclk in MHz, third is activity threshold in percentage, fourth is up hysteresis in ms and fifth is down hysteresis in ms. echo set > /sys/class/drm/card0/device/pp_*_power_profile To set power profile state if it exists. echo reset > /sys/class/drm/card0/device/pp_*_power_profile To restore default state and clear previous setting. Signed-off-by: Eric Huang <JinHuiEric.Huang@amd.com> Acked-by: Rex Zhu <Rex.Zhu@amd.com> Acked-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h
index fa2b55681422..5f09893c9674 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h
@@ -272,6 +272,14 @@ struct amdgpu_dpm_funcs {
272 bool *equal); 272 bool *equal);
273 273
274 struct amd_vce_state* (*get_vce_clock_state)(struct amdgpu_device *adev, unsigned idx); 274 struct amd_vce_state* (*get_vce_clock_state)(struct amdgpu_device *adev, unsigned idx);
275 int (*reset_power_profile_state)(struct amdgpu_device *adev,
276 struct amd_pp_profile *request);
277 int (*get_power_profile_state)(struct amdgpu_device *adev,
278 struct amd_pp_profile *query);
279 int (*set_power_profile_state)(struct amdgpu_device *adev,
280 struct amd_pp_profile *request);
281 int (*switch_power_profile)(struct amdgpu_device *adev,
282 enum amd_pp_profile_type type);
275}; 283};
276 284
277#define amdgpu_dpm_pre_set_power_state(adev) (adev)->pm.funcs->pre_set_power_state((adev)) 285#define amdgpu_dpm_pre_set_power_state(adev) (adev)->pm.funcs->pre_set_power_state((adev))
@@ -388,6 +396,22 @@ struct amdgpu_dpm_funcs {
388 (adev)->powerplay.pp_funcs->get_performance_level((adev)->powerplay.pp_handle) : \ 396 (adev)->powerplay.pp_funcs->get_performance_level((adev)->powerplay.pp_handle) : \
389 (adev)->pm.dpm.forced_level) 397 (adev)->pm.dpm.forced_level)
390 398
399#define amdgpu_dpm_reset_power_profile_state(adev, request) \
400 ((adev)->powerplay.pp_funcs->reset_power_profile_state(\
401 (adev)->powerplay.pp_handle, request))
402
403#define amdgpu_dpm_get_power_profile_state(adev, query) \
404 ((adev)->powerplay.pp_funcs->get_power_profile_state(\
405 (adev)->powerplay.pp_handle, query))
406
407#define amdgpu_dpm_set_power_profile_state(adev, request) \
408 ((adev)->powerplay.pp_funcs->set_power_profile_state(\
409 (adev)->powerplay.pp_handle, request))
410
411#define amdgpu_dpm_switch_power_profile(adev, type) \
412 ((adev)->powerplay.pp_funcs->switch_power_profile(\
413 (adev)->powerplay.pp_handle, type))
414
391struct amdgpu_dpm { 415struct amdgpu_dpm {
392 struct amdgpu_ps *ps; 416 struct amdgpu_ps *ps;
393 /* number of valid power states */ 417 /* number of valid power states */