Lines Matching +full:pm +full:- +full:api

33 #include <linux/hwmon-sysfs.h>
89 * backwards compatibility. The amdgpu driver provides a sysfs API for adjusting
93 * - battery
95 * - balanced
97 * - performance
125 const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs; in amdgpu_get_power_dpm_state()
126 enum amd_pm_state_type pm; in amdgpu_get_power_dpm_state() local
130 return -EPERM; in amdgpu_get_power_dpm_state()
131 if (adev->in_suspend && !adev->in_runpm) in amdgpu_get_power_dpm_state()
132 return -EPERM; in amdgpu_get_power_dpm_state()
134 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_get_power_dpm_state()
136 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_power_dpm_state()
140 if (pp_funcs->get_current_power_state) { in amdgpu_get_power_dpm_state()
141 pm = amdgpu_dpm_get_current_power_state(adev); in amdgpu_get_power_dpm_state()
143 pm = adev->pm.dpm.user_state; in amdgpu_get_power_dpm_state()
146 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_get_power_dpm_state()
147 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_power_dpm_state()
150 (pm == POWER_STATE_TYPE_BATTERY) ? "battery" : in amdgpu_get_power_dpm_state()
151 (pm == POWER_STATE_TYPE_BALANCED) ? "balanced" : "performance"); in amdgpu_get_power_dpm_state()
165 return -EPERM; in amdgpu_set_power_dpm_state()
166 if (adev->in_suspend && !adev->in_runpm) in amdgpu_set_power_dpm_state()
167 return -EPERM; in amdgpu_set_power_dpm_state()
176 return -EINVAL; in amdgpu_set_power_dpm_state()
178 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_set_power_dpm_state()
180 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_power_dpm_state()
185 mutex_lock(&adev->pm.mutex); in amdgpu_set_power_dpm_state()
186 adev->pm.dpm.user_state = state; in amdgpu_set_power_dpm_state()
187 mutex_unlock(&adev->pm.mutex); in amdgpu_set_power_dpm_state()
188 } else if (adev->powerplay.pp_funcs->dispatch_tasks) { in amdgpu_set_power_dpm_state()
191 mutex_lock(&adev->pm.mutex); in amdgpu_set_power_dpm_state()
192 adev->pm.dpm.user_state = state; in amdgpu_set_power_dpm_state()
193 mutex_unlock(&adev->pm.mutex); in amdgpu_set_power_dpm_state()
197 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_set_power_dpm_state()
198 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_power_dpm_state()
207 * The amdgpu driver provides a sysfs API for adjusting certain power
211 * - auto
213 * - low
215 * - high
217 * - manual
219 * - profile_standard
221 * - profile_min_sclk
223 * - profile_min_mclk
225 * - profile_peak
273 return -EPERM; in amdgpu_get_power_dpm_force_performance_level()
274 if (adev->in_suspend && !adev->in_runpm) in amdgpu_get_power_dpm_force_performance_level()
275 return -EPERM; in amdgpu_get_power_dpm_force_performance_level()
277 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_get_power_dpm_force_performance_level()
279 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_power_dpm_force_performance_level()
283 if (adev->powerplay.pp_funcs->get_performance_level) in amdgpu_get_power_dpm_force_performance_level()
286 level = adev->pm.dpm.forced_level; in amdgpu_get_power_dpm_force_performance_level()
288 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_get_power_dpm_force_performance_level()
289 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_power_dpm_force_performance_level()
311 const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs; in amdgpu_set_power_dpm_force_performance_level()
317 return -EPERM; in amdgpu_set_power_dpm_force_performance_level()
318 if (adev->in_suspend && !adev->in_runpm) in amdgpu_set_power_dpm_force_performance_level()
319 return -EPERM; in amdgpu_set_power_dpm_force_performance_level()
342 return -EINVAL; in amdgpu_set_power_dpm_force_performance_level()
345 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_set_power_dpm_force_performance_level()
347 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_power_dpm_force_performance_level()
351 if (pp_funcs->get_performance_level) in amdgpu_set_power_dpm_force_performance_level()
355 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_set_power_dpm_force_performance_level()
356 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_power_dpm_force_performance_level()
360 if (adev->asic_type == CHIP_RAVEN) { in amdgpu_set_power_dpm_force_performance_level()
361 if (!(adev->apu_flags & AMD_APU_IS_RAVEN2)) { in amdgpu_set_power_dpm_force_performance_level()
376 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_set_power_dpm_force_performance_level()
377 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_power_dpm_force_performance_level()
378 return -EINVAL; in amdgpu_set_power_dpm_force_performance_level()
381 if (pp_funcs->force_performance_level) { in amdgpu_set_power_dpm_force_performance_level()
382 mutex_lock(&adev->pm.mutex); in amdgpu_set_power_dpm_force_performance_level()
383 if (adev->pm.dpm.thermal_active) { in amdgpu_set_power_dpm_force_performance_level()
384 mutex_unlock(&adev->pm.mutex); in amdgpu_set_power_dpm_force_performance_level()
385 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_set_power_dpm_force_performance_level()
386 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_power_dpm_force_performance_level()
387 return -EINVAL; in amdgpu_set_power_dpm_force_performance_level()
391 mutex_unlock(&adev->pm.mutex); in amdgpu_set_power_dpm_force_performance_level()
392 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_set_power_dpm_force_performance_level()
393 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_power_dpm_force_performance_level()
394 return -EINVAL; in amdgpu_set_power_dpm_force_performance_level()
396 adev->pm.dpm.forced_level = level; in amdgpu_set_power_dpm_force_performance_level()
398 mutex_unlock(&adev->pm.mutex); in amdgpu_set_power_dpm_force_performance_level()
400 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_set_power_dpm_force_performance_level()
401 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_power_dpm_force_performance_level()
412 const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs; in amdgpu_get_pp_num_states()
418 return -EPERM; in amdgpu_get_pp_num_states()
419 if (adev->in_suspend && !adev->in_runpm) in amdgpu_get_pp_num_states()
420 return -EPERM; in amdgpu_get_pp_num_states()
422 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_get_pp_num_states()
424 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_pp_num_states()
428 if (pp_funcs->get_pp_num_states) { in amdgpu_get_pp_num_states()
434 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_get_pp_num_states()
435 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_pp_num_states()
454 const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs; in amdgpu_get_pp_cur_state()
456 enum amd_pm_state_type pm = 0; in amdgpu_get_pp_cur_state() local
460 return -EPERM; in amdgpu_get_pp_cur_state()
461 if (adev->in_suspend && !adev->in_runpm) in amdgpu_get_pp_cur_state()
462 return -EPERM; in amdgpu_get_pp_cur_state()
464 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_get_pp_cur_state()
466 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_pp_cur_state()
470 if (pp_funcs->get_current_power_state in amdgpu_get_pp_cur_state()
471 && pp_funcs->get_pp_num_states) { in amdgpu_get_pp_cur_state()
472 pm = amdgpu_dpm_get_current_power_state(adev); in amdgpu_get_pp_cur_state()
476 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_get_pp_cur_state()
477 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_pp_cur_state()
480 if (pm == data.states[i]) in amdgpu_get_pp_cur_state()
485 i = -EINVAL; in amdgpu_get_pp_cur_state()
498 return -EPERM; in amdgpu_get_pp_force_state()
499 if (adev->in_suspend && !adev->in_runpm) in amdgpu_get_pp_force_state()
500 return -EPERM; in amdgpu_get_pp_force_state()
502 if (adev->pp_force_state_enabled) in amdgpu_get_pp_force_state()
520 return -EPERM; in amdgpu_set_pp_force_state()
521 if (adev->in_suspend && !adev->in_runpm) in amdgpu_set_pp_force_state()
522 return -EPERM; in amdgpu_set_pp_force_state()
525 adev->pp_force_state_enabled = false; in amdgpu_set_pp_force_state()
527 adev->pp_force_state_enabled = false; in amdgpu_set_pp_force_state()
528 else if (adev->powerplay.pp_funcs->dispatch_tasks && in amdgpu_set_pp_force_state()
529 adev->powerplay.pp_funcs->get_pp_num_states) { in amdgpu_set_pp_force_state()
534 return -EINVAL; in amdgpu_set_pp_force_state()
541 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_set_pp_force_state()
543 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_force_state()
552 adev->pp_force_state_enabled = true; in amdgpu_set_pp_force_state()
554 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_set_pp_force_state()
555 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_force_state()
564 * The amdgpu driver provides a sysfs API for uploading new powerplay
567 * will attempt to upload a new powerplay table and re-initialize
582 return -EPERM; in amdgpu_get_pp_table()
583 if (adev->in_suspend && !adev->in_runpm) in amdgpu_get_pp_table()
584 return -EPERM; in amdgpu_get_pp_table()
586 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_get_pp_table()
588 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_pp_table()
592 if (adev->powerplay.pp_funcs->get_pp_table) { in amdgpu_get_pp_table()
594 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_get_pp_table()
595 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_pp_table()
599 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_get_pp_table()
600 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_pp_table()
605 size = PAGE_SIZE - 1; in amdgpu_get_pp_table()
622 return -EPERM; in amdgpu_set_pp_table()
623 if (adev->in_suspend && !adev->in_runpm) in amdgpu_set_pp_table()
624 return -EPERM; in amdgpu_set_pp_table()
626 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_set_pp_table()
628 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_table()
634 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_set_pp_table()
635 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_table()
639 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_set_pp_table()
640 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_table()
648 * The amdgpu driver provides a sysfs API for adjusting the clocks and voltages
702 * - a list of engine clock levels and voltages labeled OD_SCLK
704 * - a list of memory clock levels and voltages labeled OD_MCLK
706 * - a list of valid ranges for sclk, mclk, and voltage labeled OD_RANGE
722 * - minimum and maximum engine clock labeled OD_SCLK
724 * - minimum(not available for Vega20 and Navi1x) and maximum memory
727 * - three <frequency, voltage> points labeled OD_VDDC_CURVE.
730 * - voltage offset(in mV) applied on target voltage calculation.
736 * - a list of valid ranges for sclk, mclk, and voltage curve points
743 * - minimum and maximum engine clock labeled OD_SCLK
745 * - a list of valid ranges for sclk labeled OD_RANGE
751 * - minimum and maximum engine clock labeled OD_SCLK
752 * - minimum and maximum core clocks labeled OD_CCLK
754 * - a list of valid ranges for sclk and cclk labeled OD_RANGE
758 * - First select manual using power_dpm_force_performance_level
760 * - For clock frequency setting, enter a new value by writing a
781 * - When you have edited all of the states as needed, write "c" (commit)
784 * - If you want to reset to the default power levels, write "r" (reset)
806 return -EPERM; in amdgpu_set_pp_od_clk_voltage()
807 if (adev->in_suspend && !adev->in_runpm) in amdgpu_set_pp_od_clk_voltage()
808 return -EPERM; in amdgpu_set_pp_od_clk_voltage()
811 return -EINVAL; in amdgpu_set_pp_od_clk_voltage()
828 return -EINVAL; in amdgpu_set_pp_od_clk_voltage()
844 return -EINVAL; in amdgpu_set_pp_od_clk_voltage()
851 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_set_pp_od_clk_voltage()
853 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_od_clk_voltage()
857 if (adev->powerplay.pp_funcs->set_fine_grain_clk_vol) { in amdgpu_set_pp_od_clk_voltage()
862 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_set_pp_od_clk_voltage()
863 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_od_clk_voltage()
864 return -EINVAL; in amdgpu_set_pp_od_clk_voltage()
868 if (adev->powerplay.pp_funcs->odn_edit_dpm_table) { in amdgpu_set_pp_od_clk_voltage()
872 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_set_pp_od_clk_voltage()
873 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_od_clk_voltage()
874 return -EINVAL; in amdgpu_set_pp_od_clk_voltage()
879 if (adev->powerplay.pp_funcs->dispatch_tasks) { in amdgpu_set_pp_od_clk_voltage()
883 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_set_pp_od_clk_voltage()
884 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_od_clk_voltage()
887 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_set_pp_od_clk_voltage()
888 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_od_clk_voltage()
889 return -EINVAL; in amdgpu_set_pp_od_clk_voltage()
893 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_set_pp_od_clk_voltage()
894 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_od_clk_voltage()
909 return -EPERM; in amdgpu_get_pp_od_clk_voltage()
910 if (adev->in_suspend && !adev->in_runpm) in amdgpu_get_pp_od_clk_voltage()
911 return -EPERM; in amdgpu_get_pp_od_clk_voltage()
913 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_get_pp_od_clk_voltage()
915 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_pp_od_clk_voltage()
919 if (adev->powerplay.pp_funcs->print_clock_levels) { in amdgpu_get_pp_od_clk_voltage()
929 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_get_pp_od_clk_voltage()
930 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_pp_od_clk_voltage()
938 * The amdgpu driver provides a sysfs API for adjusting what powerplay
943 * - Current ppfeature masks
944 * - List of the all supported powerplay features with their naming,
962 return -EPERM; in amdgpu_set_pp_features()
963 if (adev->in_suspend && !adev->in_runpm) in amdgpu_set_pp_features()
964 return -EPERM; in amdgpu_set_pp_features()
968 return -EINVAL; in amdgpu_set_pp_features()
970 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_set_pp_features()
972 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_features()
976 if (adev->powerplay.pp_funcs->set_ppfeature_status) { in amdgpu_set_pp_features()
979 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_set_pp_features()
980 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_features()
981 return -EINVAL; in amdgpu_set_pp_features()
984 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_set_pp_features()
985 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_features()
1000 return -EPERM; in amdgpu_get_pp_features()
1001 if (adev->in_suspend && !adev->in_runpm) in amdgpu_get_pp_features()
1002 return -EPERM; in amdgpu_get_pp_features()
1004 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_get_pp_features()
1006 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_pp_features()
1010 if (adev->powerplay.pp_funcs->get_ppfeature_status) in amdgpu_get_pp_features()
1015 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_get_pp_features()
1016 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_pp_features()
1024 * The amdgpu driver provides a sysfs API for adjusting what power levels
1042 * .. code-block:: bash
1061 return -EPERM; in amdgpu_get_pp_dpm_clock()
1062 if (adev->in_suspend && !adev->in_runpm) in amdgpu_get_pp_dpm_clock()
1063 return -EPERM; in amdgpu_get_pp_dpm_clock()
1065 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_get_pp_dpm_clock()
1067 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_pp_dpm_clock()
1071 if (adev->powerplay.pp_funcs->print_clock_levels) in amdgpu_get_pp_dpm_clock()
1076 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_get_pp_dpm_clock()
1077 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_pp_dpm_clock()
1100 bytes = min(count, sizeof(buf_cpy) - 1); in amdgpu_read_mask()
1108 return -EINVAL; in amdgpu_read_mask()
1128 return -EPERM; in amdgpu_set_pp_dpm_clock()
1129 if (adev->in_suspend && !adev->in_runpm) in amdgpu_set_pp_dpm_clock()
1130 return -EPERM; in amdgpu_set_pp_dpm_clock()
1136 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_set_pp_dpm_clock()
1138 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_dpm_clock()
1142 if (adev->powerplay.pp_funcs->force_clock_level) in amdgpu_set_pp_dpm_clock()
1147 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_set_pp_dpm_clock()
1148 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_dpm_clock()
1151 return -EINVAL; in amdgpu_set_pp_dpm_clock()
1286 return -EPERM; in amdgpu_get_pp_sclk_od()
1287 if (adev->in_suspend && !adev->in_runpm) in amdgpu_get_pp_sclk_od()
1288 return -EPERM; in amdgpu_get_pp_sclk_od()
1290 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_get_pp_sclk_od()
1292 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_pp_sclk_od()
1298 else if (adev->powerplay.pp_funcs->get_sclk_od) in amdgpu_get_pp_sclk_od()
1301 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_get_pp_sclk_od()
1302 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_pp_sclk_od()
1318 return -EPERM; in amdgpu_set_pp_sclk_od()
1319 if (adev->in_suspend && !adev->in_runpm) in amdgpu_set_pp_sclk_od()
1320 return -EPERM; in amdgpu_set_pp_sclk_od()
1325 return -EINVAL; in amdgpu_set_pp_sclk_od()
1327 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_set_pp_sclk_od()
1329 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_sclk_od()
1336 if (adev->powerplay.pp_funcs->set_sclk_od) in amdgpu_set_pp_sclk_od()
1339 if (adev->powerplay.pp_funcs->dispatch_tasks) { in amdgpu_set_pp_sclk_od()
1342 adev->pm.dpm.current_ps = adev->pm.dpm.boot_ps; in amdgpu_set_pp_sclk_od()
1347 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_set_pp_sclk_od()
1348 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_sclk_od()
1363 return -EPERM; in amdgpu_get_pp_mclk_od()
1364 if (adev->in_suspend && !adev->in_runpm) in amdgpu_get_pp_mclk_od()
1365 return -EPERM; in amdgpu_get_pp_mclk_od()
1367 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_get_pp_mclk_od()
1369 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_pp_mclk_od()
1375 else if (adev->powerplay.pp_funcs->get_mclk_od) in amdgpu_get_pp_mclk_od()
1378 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_get_pp_mclk_od()
1379 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_pp_mclk_od()
1395 return -EPERM; in amdgpu_set_pp_mclk_od()
1396 if (adev->in_suspend && !adev->in_runpm) in amdgpu_set_pp_mclk_od()
1397 return -EPERM; in amdgpu_set_pp_mclk_od()
1402 return -EINVAL; in amdgpu_set_pp_mclk_od()
1404 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_set_pp_mclk_od()
1406 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_mclk_od()
1413 if (adev->powerplay.pp_funcs->set_mclk_od) in amdgpu_set_pp_mclk_od()
1416 if (adev->powerplay.pp_funcs->dispatch_tasks) { in amdgpu_set_pp_mclk_od()
1419 adev->pm.dpm.current_ps = adev->pm.dpm.boot_ps; in amdgpu_set_pp_mclk_od()
1424 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_set_pp_mclk_od()
1425 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_mclk_od()
1433 * The amdgpu driver provides a sysfs API for adjusting the heuristics
1460 return -EPERM; in amdgpu_get_pp_power_profile_mode()
1461 if (adev->in_suspend && !adev->in_runpm) in amdgpu_get_pp_power_profile_mode()
1462 return -EPERM; in amdgpu_get_pp_power_profile_mode()
1464 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_get_pp_power_profile_mode()
1466 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_pp_power_profile_mode()
1470 if (adev->powerplay.pp_funcs->get_power_profile_mode) in amdgpu_get_pp_power_profile_mode()
1475 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_get_pp_power_profile_mode()
1476 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_pp_power_profile_mode()
1500 return -EPERM; in amdgpu_set_pp_power_profile_mode()
1501 if (adev->in_suspend && !adev->in_runpm) in amdgpu_set_pp_power_profile_mode()
1502 return -EPERM; in amdgpu_set_pp_power_profile_mode()
1508 return -EINVAL; in amdgpu_set_pp_power_profile_mode()
1512 return -EINVAL; in amdgpu_set_pp_power_profile_mode()
1515 memcpy(buf_cpy, buf, count-i); in amdgpu_set_pp_power_profile_mode()
1522 return -EINVAL; in amdgpu_set_pp_power_profile_mode()
1530 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_set_pp_power_profile_mode()
1532 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_power_profile_mode()
1536 if (adev->powerplay.pp_funcs->set_power_profile_mode) in amdgpu_set_pp_power_profile_mode()
1539 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_set_pp_power_profile_mode()
1540 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_pp_power_profile_mode()
1545 return -EINVAL; in amdgpu_set_pp_power_profile_mode()
1551 * The amdgpu driver provides a sysfs API for reading how busy the GPU
1565 return -EPERM; in amdgpu_get_gpu_busy_percent()
1566 if (adev->in_suspend && !adev->in_runpm) in amdgpu_get_gpu_busy_percent()
1567 return -EPERM; in amdgpu_get_gpu_busy_percent()
1569 r = pm_runtime_get_sync(ddev->dev); in amdgpu_get_gpu_busy_percent()
1571 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_gpu_busy_percent()
1579 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_get_gpu_busy_percent()
1580 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_gpu_busy_percent()
1591 * The amdgpu driver provides a sysfs API for reading how busy the VRAM
1605 return -EPERM; in amdgpu_get_mem_busy_percent()
1606 if (adev->in_suspend && !adev->in_runpm) in amdgpu_get_mem_busy_percent()
1607 return -EPERM; in amdgpu_get_mem_busy_percent()
1609 r = pm_runtime_get_sync(ddev->dev); in amdgpu_get_mem_busy_percent()
1611 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_mem_busy_percent()
1619 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_get_mem_busy_percent()
1620 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_mem_busy_percent()
1631 * The amdgpu driver provides a sysfs API for estimating how much data
1650 return -EPERM; in amdgpu_get_pcie_bw()
1651 if (adev->in_suspend && !adev->in_runpm) in amdgpu_get_pcie_bw()
1652 return -EPERM; in amdgpu_get_pcie_bw()
1654 if (adev->flags & AMD_IS_APU) in amdgpu_get_pcie_bw()
1655 return -ENODATA; in amdgpu_get_pcie_bw()
1657 if (!adev->asic_funcs->get_pcie_usage) in amdgpu_get_pcie_bw()
1658 return -ENODATA; in amdgpu_get_pcie_bw()
1660 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_get_pcie_bw()
1662 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_pcie_bw()
1668 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_get_pcie_bw()
1669 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_pcie_bw()
1672 count0, count1, pcie_get_mps(adev->pdev)); in amdgpu_get_pcie_bw()
1678 * The amdgpu driver provides a sysfs API for providing a unique ID for the GPU
1693 return -EPERM; in amdgpu_get_unique_id()
1694 if (adev->in_suspend && !adev->in_runpm) in amdgpu_get_unique_id()
1695 return -EPERM; in amdgpu_get_unique_id()
1697 if (adev->unique_id) in amdgpu_get_unique_id()
1698 return sysfs_emit(buf, "%016llx\n", adev->unique_id); in amdgpu_get_unique_id()
1726 adev_to_drm(adev)->unique, in amdgpu_get_thermal_throttling_logging()
1727 atomic_read(&adev->throttling_logging_enabled) ? "enabled" : "disabled", in amdgpu_get_thermal_throttling_logging()
1728 adev->throttling_logging_rs.interval / HZ + 1); in amdgpu_get_thermal_throttling_logging()
1747 return -EINVAL; in amdgpu_set_thermal_throttling_logging()
1750 raw_spin_lock_irqsave(&adev->throttling_logging_rs.lock, flags); in amdgpu_set_thermal_throttling_logging()
1755 adev->throttling_logging_rs.interval = in amdgpu_set_thermal_throttling_logging()
1756 (throttling_logging_interval - 1) * HZ; in amdgpu_set_thermal_throttling_logging()
1757 adev->throttling_logging_rs.begin = 0; in amdgpu_set_thermal_throttling_logging()
1758 adev->throttling_logging_rs.printed = 0; in amdgpu_set_thermal_throttling_logging()
1759 adev->throttling_logging_rs.missed = 0; in amdgpu_set_thermal_throttling_logging()
1760 raw_spin_unlock_irqrestore(&adev->throttling_logging_rs.lock, flags); in amdgpu_set_thermal_throttling_logging()
1762 atomic_set(&adev->throttling_logging_enabled, 1); in amdgpu_set_thermal_throttling_logging()
1764 atomic_set(&adev->throttling_logging_enabled, 0); in amdgpu_set_thermal_throttling_logging()
1773 * The amdgpu driver provides a sysfs API for retrieving current gpu
1793 return -EPERM; in amdgpu_get_gpu_metrics()
1794 if (adev->in_suspend && !adev->in_runpm) in amdgpu_get_gpu_metrics()
1795 return -EPERM; in amdgpu_get_gpu_metrics()
1797 ret = pm_runtime_get_sync(ddev->dev); in amdgpu_get_gpu_metrics()
1799 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_gpu_metrics()
1803 if (adev->powerplay.pp_funcs->get_gpu_metrics) in amdgpu_get_gpu_metrics()
1810 size = PAGE_SIZE - 1; in amdgpu_get_gpu_metrics()
1815 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_get_gpu_metrics()
1816 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_gpu_metrics()
1824 * The amdgpu driver provides a sysfs API for reporting APU power
1840 return -EPERM; in amdgpu_get_smartshift_apu_power()
1841 if (adev->in_suspend && !adev->in_runpm) in amdgpu_get_smartshift_apu_power()
1842 return -EPERM; in amdgpu_get_smartshift_apu_power()
1844 r = pm_runtime_get_sync(ddev->dev); in amdgpu_get_smartshift_apu_power()
1846 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_smartshift_apu_power()
1858 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_get_smartshift_apu_power()
1859 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_smartshift_apu_power()
1866 * The amdgpu driver provides a sysfs API for reporting the dGPU power
1883 return -EPERM; in amdgpu_get_smartshift_dgpu_power()
1884 if (adev->in_suspend && !adev->in_runpm) in amdgpu_get_smartshift_dgpu_power()
1885 return -EPERM; in amdgpu_get_smartshift_dgpu_power()
1887 r = pm_runtime_get_sync(ddev->dev); in amdgpu_get_smartshift_dgpu_power()
1889 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_smartshift_dgpu_power()
1902 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_get_smartshift_dgpu_power()
1903 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_get_smartshift_dgpu_power()
1910 * The amdgpu driver provides a sysfs API for reporting the
1911 * smartshift(SS2.0) bias level. The value ranges from -100 to 100
1912 * and the default is 0. -100 sets maximum preference to APU
1937 return -EPERM; in amdgpu_set_smartshift_bias()
1938 if (adev->in_suspend && !adev->in_runpm) in amdgpu_set_smartshift_bias()
1939 return -EPERM; in amdgpu_set_smartshift_bias()
1941 r = pm_runtime_get_sync(ddev->dev); in amdgpu_set_smartshift_bias()
1943 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_smartshift_bias()
1962 pm_runtime_mark_last_busy(ddev->dev); in amdgpu_set_smartshift_bias()
1963 pm_runtime_put_autosuspend(ddev->dev); in amdgpu_set_smartshift_bias()
1975 else if ((adev->flags & AMD_IS_PX) && in ss_power_attr_update()
2042 struct device_attribute *dev_attr = &attr->dev_attr; in default_attr_update()
2043 const char *attr_name = dev_attr->attr.name; in default_attr_update()
2044 struct pp_hwmgr *hwmgr = adev->powerplay.pp_handle; in default_attr_update()
2045 enum amd_asic_type asic_type = adev->asic_type; in default_attr_update()
2047 if (!(attr->flags & mask)) { in default_attr_update()
2067 if ((is_support_sw_smu(adev) && adev->smu.od_enabled) || in default_attr_update()
2068 (is_support_sw_smu(adev) && adev->smu.is_apu) || in default_attr_update()
2069 (!is_support_sw_smu(adev) && hwmgr->od_enabled)) in default_attr_update()
2072 if (adev->flags & AMD_IS_APU || asic_type == CHIP_VEGA10) in default_attr_update()
2076 if (adev->flags & AMD_IS_APU) in default_attr_update()
2084 if (adev->flags & AMD_IS_APU || asic_type < CHIP_VEGA10) in default_attr_update()
2104 dev_attr->attr.mode &= ~S_IWUGO; in default_attr_update()
2105 dev_attr->store = NULL; in default_attr_update()
2115 dev_attr->attr.mode &= ~S_IWUGO; in default_attr_update()
2116 dev_attr->store = NULL; in default_attr_update()
2131 struct device_attribute *dev_attr = &attr->dev_attr; in amdgpu_device_attr_create()
2132 const char *name = dev_attr->attr.name; in amdgpu_device_attr_create()
2141 attr_update = attr->attr_update ? attr->attr_update : default_attr_update; in amdgpu_device_attr_create()
2145 dev_err(adev->dev, "failed to update device file %s, ret = %d\n", in amdgpu_device_attr_create()
2153 ret = device_create_file(adev->dev, dev_attr); in amdgpu_device_attr_create()
2155 dev_err(adev->dev, "failed to create device file %s, ret = %d\n", in amdgpu_device_attr_create()
2161 return -ENOMEM; in amdgpu_device_attr_create()
2163 attr_entry->attr = attr; in amdgpu_device_attr_create()
2164 INIT_LIST_HEAD(&attr_entry->entry); in amdgpu_device_attr_create()
2166 list_add_tail(&attr_entry->entry, attr_list); in amdgpu_device_attr_create()
2173 struct device_attribute *dev_attr = &attr->dev_attr; in amdgpu_device_attr_remove()
2175 device_remove_file(adev->dev, dev_attr); in amdgpu_device_attr_remove()
2213 amdgpu_device_attr_remove(adev, entry->attr); in amdgpu_device_attr_remove_groups()
2214 list_del(&entry->entry); in amdgpu_device_attr_remove_groups()
2224 int channel = to_sensor_dev_attr(attr)->index; in amdgpu_hwmon_show_temp()
2228 return -EPERM; in amdgpu_hwmon_show_temp()
2229 if (adev->in_suspend && !adev->in_runpm) in amdgpu_hwmon_show_temp()
2230 return -EPERM; in amdgpu_hwmon_show_temp()
2233 return -EINVAL; in amdgpu_hwmon_show_temp()
2235 r = pm_runtime_get_sync(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_temp()
2237 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_temp()
2258 r = -EINVAL; in amdgpu_hwmon_show_temp()
2262 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_temp()
2263 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_temp()
2276 int hyst = to_sensor_dev_attr(attr)->index; in amdgpu_hwmon_show_temp_thresh()
2280 temp = adev->pm.dpm.thermal.min_temp; in amdgpu_hwmon_show_temp_thresh()
2282 temp = adev->pm.dpm.thermal.max_temp; in amdgpu_hwmon_show_temp_thresh()
2292 int hyst = to_sensor_dev_attr(attr)->index; in amdgpu_hwmon_show_hotspot_temp_thresh()
2296 temp = adev->pm.dpm.thermal.min_hotspot_temp; in amdgpu_hwmon_show_hotspot_temp_thresh()
2298 temp = adev->pm.dpm.thermal.max_hotspot_crit_temp; in amdgpu_hwmon_show_hotspot_temp_thresh()
2308 int hyst = to_sensor_dev_attr(attr)->index; in amdgpu_hwmon_show_mem_temp_thresh()
2312 temp = adev->pm.dpm.thermal.min_mem_temp; in amdgpu_hwmon_show_mem_temp_thresh()
2314 temp = adev->pm.dpm.thermal.max_mem_crit_temp; in amdgpu_hwmon_show_mem_temp_thresh()
2323 int channel = to_sensor_dev_attr(attr)->index; in amdgpu_hwmon_show_temp_label()
2326 return -EINVAL; in amdgpu_hwmon_show_temp_label()
2336 int channel = to_sensor_dev_attr(attr)->index; in amdgpu_hwmon_show_temp_emergency()
2340 return -EINVAL; in amdgpu_hwmon_show_temp_emergency()
2344 temp = adev->pm.dpm.thermal.max_hotspot_emergency_temp; in amdgpu_hwmon_show_temp_emergency()
2347 temp = adev->pm.dpm.thermal.max_edge_emergency_temp; in amdgpu_hwmon_show_temp_emergency()
2350 temp = adev->pm.dpm.thermal.max_mem_emergency_temp; in amdgpu_hwmon_show_temp_emergency()
2366 return -EPERM; in amdgpu_hwmon_get_pwm1_enable()
2367 if (adev->in_suspend && !adev->in_runpm) in amdgpu_hwmon_get_pwm1_enable()
2368 return -EPERM; in amdgpu_hwmon_get_pwm1_enable()
2370 ret = pm_runtime_get_sync(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_pwm1_enable()
2372 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_pwm1_enable()
2376 if (!adev->powerplay.pp_funcs->get_fan_control_mode) { in amdgpu_hwmon_get_pwm1_enable()
2377 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_pwm1_enable()
2378 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_pwm1_enable()
2379 return -EINVAL; in amdgpu_hwmon_get_pwm1_enable()
2384 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_pwm1_enable()
2385 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_pwm1_enable()
2400 return -EPERM; in amdgpu_hwmon_set_pwm1_enable()
2401 if (adev->in_suspend && !adev->in_runpm) in amdgpu_hwmon_set_pwm1_enable()
2402 return -EPERM; in amdgpu_hwmon_set_pwm1_enable()
2408 ret = pm_runtime_get_sync(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_pwm1_enable()
2410 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_pwm1_enable()
2414 if (!adev->powerplay.pp_funcs->set_fan_control_mode) { in amdgpu_hwmon_set_pwm1_enable()
2415 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_pwm1_enable()
2416 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_pwm1_enable()
2417 return -EINVAL; in amdgpu_hwmon_set_pwm1_enable()
2422 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_pwm1_enable()
2423 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_pwm1_enable()
2452 return -EPERM; in amdgpu_hwmon_set_pwm1()
2453 if (adev->in_suspend && !adev->in_runpm) in amdgpu_hwmon_set_pwm1()
2454 return -EPERM; in amdgpu_hwmon_set_pwm1()
2456 err = pm_runtime_get_sync(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_pwm1()
2458 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_pwm1()
2465 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_pwm1()
2466 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_pwm1()
2467 return -EINVAL; in amdgpu_hwmon_set_pwm1()
2472 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_pwm1()
2473 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_pwm1()
2477 if (adev->powerplay.pp_funcs->set_fan_speed_pwm) in amdgpu_hwmon_set_pwm1()
2480 err = -EINVAL; in amdgpu_hwmon_set_pwm1()
2482 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_pwm1()
2483 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_pwm1()
2500 return -EPERM; in amdgpu_hwmon_get_pwm1()
2501 if (adev->in_suspend && !adev->in_runpm) in amdgpu_hwmon_get_pwm1()
2502 return -EPERM; in amdgpu_hwmon_get_pwm1()
2504 err = pm_runtime_get_sync(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_pwm1()
2506 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_pwm1()
2510 if (adev->powerplay.pp_funcs->get_fan_speed_pwm) in amdgpu_hwmon_get_pwm1()
2513 err = -EINVAL; in amdgpu_hwmon_get_pwm1()
2515 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_pwm1()
2516 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_pwm1()
2533 return -EPERM; in amdgpu_hwmon_get_fan1_input()
2534 if (adev->in_suspend && !adev->in_runpm) in amdgpu_hwmon_get_fan1_input()
2535 return -EPERM; in amdgpu_hwmon_get_fan1_input()
2537 err = pm_runtime_get_sync(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_input()
2539 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_input()
2543 if (adev->powerplay.pp_funcs->get_fan_speed_rpm) in amdgpu_hwmon_get_fan1_input()
2546 err = -EINVAL; in amdgpu_hwmon_get_fan1_input()
2548 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_input()
2549 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_input()
2567 return -EPERM; in amdgpu_hwmon_get_fan1_min()
2568 if (adev->in_suspend && !adev->in_runpm) in amdgpu_hwmon_get_fan1_min()
2569 return -EPERM; in amdgpu_hwmon_get_fan1_min()
2571 r = pm_runtime_get_sync(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_min()
2573 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_min()
2580 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_min()
2581 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_min()
2599 return -EPERM; in amdgpu_hwmon_get_fan1_max()
2600 if (adev->in_suspend && !adev->in_runpm) in amdgpu_hwmon_get_fan1_max()
2601 return -EPERM; in amdgpu_hwmon_get_fan1_max()
2603 r = pm_runtime_get_sync(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_max()
2605 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_max()
2612 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_max()
2613 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_max()
2630 return -EPERM; in amdgpu_hwmon_get_fan1_target()
2631 if (adev->in_suspend && !adev->in_runpm) in amdgpu_hwmon_get_fan1_target()
2632 return -EPERM; in amdgpu_hwmon_get_fan1_target()
2634 err = pm_runtime_get_sync(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_target()
2636 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_target()
2640 if (adev->powerplay.pp_funcs->get_fan_speed_rpm) in amdgpu_hwmon_get_fan1_target()
2643 err = -EINVAL; in amdgpu_hwmon_get_fan1_target()
2645 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_target()
2646 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_target()
2664 return -EPERM; in amdgpu_hwmon_set_fan1_target()
2665 if (adev->in_suspend && !adev->in_runpm) in amdgpu_hwmon_set_fan1_target()
2666 return -EPERM; in amdgpu_hwmon_set_fan1_target()
2668 err = pm_runtime_get_sync(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_fan1_target()
2670 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_fan1_target()
2677 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_fan1_target()
2678 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_fan1_target()
2679 return -ENODATA; in amdgpu_hwmon_set_fan1_target()
2684 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_fan1_target()
2685 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_fan1_target()
2689 if (adev->powerplay.pp_funcs->set_fan_speed_rpm) in amdgpu_hwmon_set_fan1_target()
2692 err = -EINVAL; in amdgpu_hwmon_set_fan1_target()
2694 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_fan1_target()
2695 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_fan1_target()
2712 return -EPERM; in amdgpu_hwmon_get_fan1_enable()
2713 if (adev->in_suspend && !adev->in_runpm) in amdgpu_hwmon_get_fan1_enable()
2714 return -EPERM; in amdgpu_hwmon_get_fan1_enable()
2716 ret = pm_runtime_get_sync(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_enable()
2718 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_enable()
2722 if (!adev->powerplay.pp_funcs->get_fan_control_mode) { in amdgpu_hwmon_get_fan1_enable()
2723 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_enable()
2724 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_enable()
2725 return -EINVAL; in amdgpu_hwmon_get_fan1_enable()
2730 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_enable()
2731 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_get_fan1_enable()
2747 return -EPERM; in amdgpu_hwmon_set_fan1_enable()
2748 if (adev->in_suspend && !adev->in_runpm) in amdgpu_hwmon_set_fan1_enable()
2749 return -EPERM; in amdgpu_hwmon_set_fan1_enable()
2760 return -EINVAL; in amdgpu_hwmon_set_fan1_enable()
2762 err = pm_runtime_get_sync(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_fan1_enable()
2764 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_fan1_enable()
2768 if (!adev->powerplay.pp_funcs->set_fan_control_mode) { in amdgpu_hwmon_set_fan1_enable()
2769 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_fan1_enable()
2770 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_fan1_enable()
2771 return -EINVAL; in amdgpu_hwmon_set_fan1_enable()
2775 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_fan1_enable()
2776 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_fan1_enable()
2790 return -EPERM; in amdgpu_hwmon_show_vddgfx()
2791 if (adev->in_suspend && !adev->in_runpm) in amdgpu_hwmon_show_vddgfx()
2792 return -EPERM; in amdgpu_hwmon_show_vddgfx()
2794 r = pm_runtime_get_sync(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_vddgfx()
2796 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_vddgfx()
2804 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_vddgfx()
2805 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_vddgfx()
2829 return -EPERM; in amdgpu_hwmon_show_vddnb()
2830 if (adev->in_suspend && !adev->in_runpm) in amdgpu_hwmon_show_vddnb()
2831 return -EPERM; in amdgpu_hwmon_show_vddnb()
2834 if (!(adev->flags & AMD_IS_APU)) in amdgpu_hwmon_show_vddnb()
2835 return -EINVAL; in amdgpu_hwmon_show_vddnb()
2837 r = pm_runtime_get_sync(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_vddnb()
2839 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_vddnb()
2847 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_vddnb()
2848 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_vddnb()
2873 return -EPERM; in amdgpu_hwmon_show_power_avg()
2874 if (adev->in_suspend && !adev->in_runpm) in amdgpu_hwmon_show_power_avg()
2875 return -EPERM; in amdgpu_hwmon_show_power_avg()
2877 r = pm_runtime_get_sync(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_power_avg()
2879 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_power_avg()
2887 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_power_avg()
2888 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_power_avg()
2913 const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs; in amdgpu_hwmon_show_power_cap_generic()
2914 enum pp_power_type power_type = to_sensor_dev_attr(attr)->index; in amdgpu_hwmon_show_power_cap_generic()
2920 return -EPERM; in amdgpu_hwmon_show_power_cap_generic()
2921 if (adev->in_suspend && !adev->in_runpm) in amdgpu_hwmon_show_power_cap_generic()
2922 return -EPERM; in amdgpu_hwmon_show_power_cap_generic()
2924 if ( !(pp_funcs && pp_funcs->get_power_limit)) in amdgpu_hwmon_show_power_cap_generic()
2925 return -ENODATA; in amdgpu_hwmon_show_power_cap_generic()
2927 r = pm_runtime_get_sync(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_power_cap_generic()
2929 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_power_cap_generic()
2933 r = pp_funcs->get_power_limit(adev->powerplay.pp_handle, &limit, in amdgpu_hwmon_show_power_cap_generic()
2941 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_power_cap_generic()
2942 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_power_cap_generic()
2976 int limit_type = to_sensor_dev_attr(attr)->index; in amdgpu_hwmon_show_power_label()
2988 const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs; in amdgpu_hwmon_set_power_cap()
2989 int limit_type = to_sensor_dev_attr(attr)->index; in amdgpu_hwmon_set_power_cap()
2994 return -EPERM; in amdgpu_hwmon_set_power_cap()
2995 if (adev->in_suspend && !adev->in_runpm) in amdgpu_hwmon_set_power_cap()
2996 return -EPERM; in amdgpu_hwmon_set_power_cap()
2999 return -EINVAL; in amdgpu_hwmon_set_power_cap()
3008 err = pm_runtime_get_sync(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_power_cap()
3010 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_power_cap()
3014 if (pp_funcs && pp_funcs->set_power_limit) in amdgpu_hwmon_set_power_cap()
3015 err = pp_funcs->set_power_limit(adev->powerplay.pp_handle, value); in amdgpu_hwmon_set_power_cap()
3017 err = -EINVAL; in amdgpu_hwmon_set_power_cap()
3019 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_power_cap()
3020 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_set_power_cap()
3037 return -EPERM; in amdgpu_hwmon_show_sclk()
3038 if (adev->in_suspend && !adev->in_runpm) in amdgpu_hwmon_show_sclk()
3039 return -EPERM; in amdgpu_hwmon_show_sclk()
3041 r = pm_runtime_get_sync(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_sclk()
3043 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_sclk()
3051 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_sclk()
3052 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_sclk()
3076 return -EPERM; in amdgpu_hwmon_show_mclk()
3077 if (adev->in_suspend && !adev->in_runpm) in amdgpu_hwmon_show_mclk()
3078 return -EPERM; in amdgpu_hwmon_show_mclk()
3080 r = pm_runtime_get_sync(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_mclk()
3082 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_mclk()
3090 pm_runtime_mark_last_busy(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_mclk()
3091 pm_runtime_put_autosuspend(adev_to_drm(adev)->dev); in amdgpu_hwmon_show_mclk()
3111 * - GPU temperature (via the on-die sensor)
3113 * - GPU voltage
3115 * - Northbridge voltage (APUs only)
3117 * - GPU power
3119 * - GPU fan
3121 * - GPU gfx/compute engine clock
3123 * - GPU memory clock (dGPU only)
3127 * - temp[1-3]_input: the on die GPU temperature in millidegrees Celsius
3128 * - temp2_input and temp3_input are supported on SOC15 dGPUs only
3130 * - temp[1-3]_label: temperature channel label
3131 * - temp2_label and temp3_label are supported on SOC15 dGPUs only
3133 * - temp[1-3]_crit: temperature critical max value in millidegrees Celsius
3134 * - temp2_crit and temp3_crit are supported on SOC15 dGPUs only
3136 * - temp[1-3]_crit_hyst: temperature hysteresis for critical limit in millidegrees Celsius
3137 * - temp2_crit_hyst and temp3_crit_hyst are supported on SOC15 dGPUs only
3139 * - temp[1-3]_emergency: temperature emergency max value(asic shutdown) in millidegrees Celsius
3140 * - these are supported on SOC15 dGPUs only
3144 * - in0_input: the voltage on the GPU in millivolts
3146 * - in1_input: the voltage on the Northbridge in millivolts
3150 * - power1_average: average power used by the GPU in microWatts
3152 * - power1_cap_min: minimum cap supported in microWatts
3154 * - power1_cap_max: maximum cap supported in microWatts
3156 * - power1_cap: selected power cap in microWatts
3160 * - pwm1: pulse width modulation fan level (0-255)
3162 …* - pwm1_enable: pulse width modulation fan control method (0: no fan speed control, 1: manual fan…
3164 * - pwm1_min: pulse width modulation fan control minimum level (0)
3166 * - pwm1_max: pulse width modulation fan control maximum level (255)
3168 * - fan1_min: a minimum value Unit: revolution/min (RPM)
3170 * - fan1_max: a maximum value Unit: revolution/max (RPM)
3172 * - fan1_input: fan speed in RPM
3174 * - fan[1-\*]_target: Desired fan speed Unit: revolution/min (RPM)
3176 * - fan[1-\*]_enable: Enable or disable the sensors.1: Enable 0: Disable
3178 * NOTE: DO NOT set the fan speed via "pwm1" and "fan[1-\*]_target" interfaces at the same time.
3183 * - freq1_input: the gfx/compute clock in hertz
3185 * - freq2_input: the memory clock in hertz
3289 umode_t effective_mode = attr->mode; in hwmon_attributes_visible()
3291 /* under multi-vf mode, the hwmon attributes are all not supported */ in hwmon_attributes_visible()
3309 if (adev->pm.no_fan && (attr == &sensor_dev_attr_pwm1.dev_attr.attr || in hwmon_attributes_visible()
3321 if ((adev->flags & AMD_IS_APU) && in hwmon_attributes_visible()
3334 if ((adev->flags & AMD_IS_APU) && (adev->family >= AMDGPU_FAMILY_CZ) && in hwmon_attributes_visible()
3340 if (!adev->pm.dpm_enabled && in hwmon_attributes_visible()
3356 if ((!adev->powerplay.pp_funcs->get_fan_speed_pwm && in hwmon_attributes_visible()
3358 (!adev->powerplay.pp_funcs->get_fan_control_mode && in hwmon_attributes_visible()
3362 if ((!adev->powerplay.pp_funcs->set_fan_speed_pwm && in hwmon_attributes_visible()
3364 (!adev->powerplay.pp_funcs->set_fan_control_mode && in hwmon_attributes_visible()
3369 if (((adev->family == AMDGPU_FAMILY_SI) || in hwmon_attributes_visible()
3370 ((adev->flags & AMD_IS_APU) && in hwmon_attributes_visible()
3371 (adev->asic_type != CHIP_VANGOGH))) && /* not implemented yet */ in hwmon_attributes_visible()
3378 if (((adev->family == AMDGPU_FAMILY_SI) || in hwmon_attributes_visible()
3379 ((adev->flags & AMD_IS_APU) && in hwmon_attributes_visible()
3380 (adev->asic_type < CHIP_RENOIR))) && /* not implemented yet */ in hwmon_attributes_visible()
3386 if ((!adev->powerplay.pp_funcs->set_fan_speed_pwm && in hwmon_attributes_visible()
3387 !adev->powerplay.pp_funcs->get_fan_speed_pwm) && in hwmon_attributes_visible()
3388 (!adev->powerplay.pp_funcs->set_fan_speed_rpm && in hwmon_attributes_visible()
3389 !adev->powerplay.pp_funcs->get_fan_speed_rpm) && in hwmon_attributes_visible()
3394 if ((!adev->powerplay.pp_funcs->set_fan_speed_rpm && in hwmon_attributes_visible()
3395 !adev->powerplay.pp_funcs->get_fan_speed_rpm) && in hwmon_attributes_visible()
3401 if ((adev->family == AMDGPU_FAMILY_SI || /* not implemented yet */ in hwmon_attributes_visible()
3402 adev->family == AMDGPU_FAMILY_KV) && /* not implemented yet */ in hwmon_attributes_visible()
3408 if (!(adev->flags & AMD_IS_APU) && in hwmon_attributes_visible()
3414 if ((adev->flags & AMD_IS_APU) && in hwmon_attributes_visible()
3420 if (((adev->flags & AMD_IS_APU) || in hwmon_attributes_visible()
3421 adev->asic_type < CHIP_VEGA10) && in hwmon_attributes_visible()
3436 if (!(adev->asic_type == CHIP_VANGOGH) && in hwmon_attributes_visible()
3464 if (adev->pm.sysfs_initialized) in amdgpu_pm_sysfs_init()
3467 if (adev->pm.dpm_enabled == 0) in amdgpu_pm_sysfs_init()
3470 INIT_LIST_HEAD(&adev->pm.pm_attr_list); in amdgpu_pm_sysfs_init()
3472 adev->pm.int_hwmon_dev = hwmon_device_register_with_groups(adev->dev, in amdgpu_pm_sysfs_init()
3475 if (IS_ERR(adev->pm.int_hwmon_dev)) { in amdgpu_pm_sysfs_init()
3476 ret = PTR_ERR(adev->pm.int_hwmon_dev); in amdgpu_pm_sysfs_init()
3477 dev_err(adev->dev, in amdgpu_pm_sysfs_init()
3499 &adev->pm.pm_attr_list); in amdgpu_pm_sysfs_init()
3503 adev->pm.sysfs_initialized = true; in amdgpu_pm_sysfs_init()
3510 if (adev->pm.dpm_enabled == 0) in amdgpu_pm_sysfs_fini()
3513 if (adev->pm.int_hwmon_dev) in amdgpu_pm_sysfs_fini()
3514 hwmon_device_unregister(adev->pm.int_hwmon_dev); in amdgpu_pm_sysfs_fini()
3516 amdgpu_device_attr_remove_groups(adev, &adev->pm.pm_attr_list); in amdgpu_pm_sysfs_fini()
3531 p_val = kcalloc(adev->smu.cpu_core_num, sizeof(uint16_t), in amdgpu_debugfs_prints_cpu_info()
3536 for (i = 0; i < adev->smu.cpu_core_num; i++) in amdgpu_debugfs_prints_cpu_info()
3593 if (adev->asic_type > CHIP_VEGA20) { in amdgpu_debugfs_pm_info_pp()
3648 struct amdgpu_device *adev = (struct amdgpu_device *)m->private; in amdgpu_debugfs_pm_info_show()
3654 return -EPERM; in amdgpu_debugfs_pm_info_show()
3655 if (adev->in_suspend && !adev->in_runpm) in amdgpu_debugfs_pm_info_show()
3656 return -EPERM; in amdgpu_debugfs_pm_info_show()
3658 r = pm_runtime_get_sync(dev->dev); in amdgpu_debugfs_pm_info_show()
3660 pm_runtime_put_autosuspend(dev->dev); in amdgpu_debugfs_pm_info_show()
3664 if (!adev->pm.dpm_enabled) { in amdgpu_debugfs_pm_info_show()
3666 pm_runtime_mark_last_busy(dev->dev); in amdgpu_debugfs_pm_info_show()
3667 pm_runtime_put_autosuspend(dev->dev); in amdgpu_debugfs_pm_info_show()
3672 adev->powerplay.pp_funcs->debugfs_print_current_performance_level) { in amdgpu_debugfs_pm_info_show()
3673 mutex_lock(&adev->pm.mutex); in amdgpu_debugfs_pm_info_show()
3674 if (adev->powerplay.pp_funcs->debugfs_print_current_performance_level) in amdgpu_debugfs_pm_info_show()
3675 adev->powerplay.pp_funcs->debugfs_print_current_performance_level(adev, m); in amdgpu_debugfs_pm_info_show()
3678 mutex_unlock(&adev->pm.mutex); in amdgpu_debugfs_pm_info_show()
3693 pm_runtime_mark_last_busy(dev->dev); in amdgpu_debugfs_pm_info_show()
3694 pm_runtime_put_autosuspend(dev->dev); in amdgpu_debugfs_pm_info_show()
3702 * amdgpu_pm_priv_buffer_read - Read memory region allocated to FW
3709 struct amdgpu_device *adev = file_inode(f)->i_private; in amdgpu_pm_prv_buffer_read()
3710 const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs; in amdgpu_pm_prv_buffer_read()
3711 void *pp_handle = adev->powerplay.pp_handle; in amdgpu_pm_prv_buffer_read()
3716 return -EPERM; in amdgpu_pm_prv_buffer_read()
3717 if (adev->in_suspend && !adev->in_runpm) in amdgpu_pm_prv_buffer_read()
3718 return -EPERM; in amdgpu_pm_prv_buffer_read()
3720 if (pp_funcs && pp_funcs->get_smu_prv_buf_details) in amdgpu_pm_prv_buffer_read()
3721 pp_funcs->get_smu_prv_buf_details(pp_handle, &smu_prv_buf, in amdgpu_pm_prv_buffer_read()
3724 return -ENOSYS; in amdgpu_pm_prv_buffer_read()
3727 return -EINVAL; in amdgpu_pm_prv_buffer_read()
3745 struct drm_minor *minor = adev_to_drm(adev)->primary; in amdgpu_debugfs_pm_init()
3746 struct dentry *root = minor->debugfs_root; in amdgpu_debugfs_pm_init()
3751 if (adev->pm.smu_prv_buffer_size > 0) in amdgpu_debugfs_pm_init()
3755 adev->pm.smu_prv_buffer_size); in amdgpu_debugfs_pm_init()