Lines Matching refs:adev
33 static int amdgpu_debugfs_pm_init(struct amdgpu_device *adev);
35 void amdgpu_pm_acpi_event_handler(struct amdgpu_device *adev) in amdgpu_pm_acpi_event_handler() argument
37 if (adev->pm.dpm_enabled) { in amdgpu_pm_acpi_event_handler()
38 mutex_lock(&adev->pm.mutex); in amdgpu_pm_acpi_event_handler()
40 adev->pm.dpm.ac_power = true; in amdgpu_pm_acpi_event_handler()
42 adev->pm.dpm.ac_power = false; in amdgpu_pm_acpi_event_handler()
43 if (adev->pm.funcs->enable_bapm) in amdgpu_pm_acpi_event_handler()
44 amdgpu_dpm_enable_bapm(adev, adev->pm.dpm.ac_power); in amdgpu_pm_acpi_event_handler()
45 mutex_unlock(&adev->pm.mutex); in amdgpu_pm_acpi_event_handler()
54 struct amdgpu_device *adev = ddev->dev_private; in amdgpu_get_dpm_state() local
55 enum amdgpu_pm_state_type pm = adev->pm.dpm.user_state; in amdgpu_get_dpm_state()
68 struct amdgpu_device *adev = ddev->dev_private; in amdgpu_set_dpm_state() local
70 mutex_lock(&adev->pm.mutex); in amdgpu_set_dpm_state()
72 adev->pm.dpm.user_state = POWER_STATE_TYPE_BATTERY; in amdgpu_set_dpm_state()
74 adev->pm.dpm.user_state = POWER_STATE_TYPE_BALANCED; in amdgpu_set_dpm_state()
76 adev->pm.dpm.user_state = POWER_STATE_TYPE_PERFORMANCE; in amdgpu_set_dpm_state()
78 mutex_unlock(&adev->pm.mutex); in amdgpu_set_dpm_state()
82 mutex_unlock(&adev->pm.mutex); in amdgpu_set_dpm_state()
85 if (!(adev->flags & AMD_IS_PX) || in amdgpu_set_dpm_state()
87 amdgpu_pm_compute_clocks(adev); in amdgpu_set_dpm_state()
97 struct amdgpu_device *adev = ddev->dev_private; in amdgpu_get_dpm_forced_performance_level() local
98 enum amdgpu_dpm_forced_level level = adev->pm.dpm.forced_level; in amdgpu_get_dpm_forced_performance_level()
111 struct amdgpu_device *adev = ddev->dev_private; in amdgpu_set_dpm_forced_performance_level() local
115 mutex_lock(&adev->pm.mutex); in amdgpu_set_dpm_forced_performance_level()
126 if (adev->pm.funcs->force_performance_level) { in amdgpu_set_dpm_forced_performance_level()
127 if (adev->pm.dpm.thermal_active) { in amdgpu_set_dpm_forced_performance_level()
131 ret = amdgpu_dpm_force_performance_level(adev, level); in amdgpu_set_dpm_forced_performance_level()
136 mutex_unlock(&adev->pm.mutex); in amdgpu_set_dpm_forced_performance_level()
150 struct amdgpu_device *adev = dev_get_drvdata(dev); in amdgpu_hwmon_show_temp() local
153 if (adev->pm.funcs->get_temperature) in amdgpu_hwmon_show_temp()
154 temp = amdgpu_dpm_get_temperature(adev); in amdgpu_hwmon_show_temp()
165 struct amdgpu_device *adev = dev_get_drvdata(dev); in amdgpu_hwmon_show_temp_thresh() local
170 temp = adev->pm.dpm.thermal.min_temp; in amdgpu_hwmon_show_temp_thresh()
172 temp = adev->pm.dpm.thermal.max_temp; in amdgpu_hwmon_show_temp_thresh()
181 struct amdgpu_device *adev = dev_get_drvdata(dev); in amdgpu_hwmon_get_pwm1_enable() local
184 if (adev->pm.funcs->get_fan_control_mode) in amdgpu_hwmon_get_pwm1_enable()
185 pwm_mode = amdgpu_dpm_get_fan_control_mode(adev); in amdgpu_hwmon_get_pwm1_enable()
196 struct amdgpu_device *adev = dev_get_drvdata(dev); in amdgpu_hwmon_set_pwm1_enable() local
200 if(!adev->pm.funcs->set_fan_control_mode) in amdgpu_hwmon_set_pwm1_enable()
209 amdgpu_dpm_set_fan_control_mode(adev, FDO_PWM_MODE_STATIC); in amdgpu_hwmon_set_pwm1_enable()
212 amdgpu_dpm_set_fan_control_mode(adev, 0); in amdgpu_hwmon_set_pwm1_enable()
237 struct amdgpu_device *adev = dev_get_drvdata(dev); in amdgpu_hwmon_set_pwm1() local
247 err = amdgpu_dpm_set_fan_speed_percent(adev, value); in amdgpu_hwmon_set_pwm1()
258 struct amdgpu_device *adev = dev_get_drvdata(dev); in amdgpu_hwmon_get_pwm1() local
262 err = amdgpu_dpm_get_fan_speed_percent(adev, &speed); in amdgpu_hwmon_get_pwm1()
294 struct amdgpu_device *adev = dev_get_drvdata(dev); in hwmon_attributes_visible() local
298 if (!adev->pm.dpm_enabled && in hwmon_attributes_visible()
308 if (adev->pm.no_fan && in hwmon_attributes_visible()
316 if ((!adev->pm.funcs->get_fan_speed_percent && in hwmon_attributes_visible()
318 (!adev->pm.funcs->get_fan_control_mode && in hwmon_attributes_visible()
322 if ((!adev->pm.funcs->set_fan_speed_percent && in hwmon_attributes_visible()
324 (!adev->pm.funcs->set_fan_control_mode && in hwmon_attributes_visible()
329 if ((!adev->pm.funcs->set_fan_speed_percent && in hwmon_attributes_visible()
330 !adev->pm.funcs->get_fan_speed_percent) && in hwmon_attributes_visible()
350 struct amdgpu_device *adev = in amdgpu_dpm_thermal_work_handler() local
356 if (!adev->pm.dpm_enabled) in amdgpu_dpm_thermal_work_handler()
359 if (adev->pm.funcs->get_temperature) { in amdgpu_dpm_thermal_work_handler()
360 int temp = amdgpu_dpm_get_temperature(adev); in amdgpu_dpm_thermal_work_handler()
362 if (temp < adev->pm.dpm.thermal.min_temp) in amdgpu_dpm_thermal_work_handler()
364 dpm_state = adev->pm.dpm.user_state; in amdgpu_dpm_thermal_work_handler()
366 if (adev->pm.dpm.thermal.high_to_low) in amdgpu_dpm_thermal_work_handler()
368 dpm_state = adev->pm.dpm.user_state; in amdgpu_dpm_thermal_work_handler()
370 mutex_lock(&adev->pm.mutex); in amdgpu_dpm_thermal_work_handler()
372 adev->pm.dpm.thermal_active = true; in amdgpu_dpm_thermal_work_handler()
374 adev->pm.dpm.thermal_active = false; in amdgpu_dpm_thermal_work_handler()
375 adev->pm.dpm.state = dpm_state; in amdgpu_dpm_thermal_work_handler()
376 mutex_unlock(&adev->pm.mutex); in amdgpu_dpm_thermal_work_handler()
378 amdgpu_pm_compute_clocks(adev); in amdgpu_dpm_thermal_work_handler()
381 static struct amdgpu_ps *amdgpu_dpm_pick_power_state(struct amdgpu_device *adev, in amdgpu_dpm_pick_power_state() argument
387 bool single_display = (adev->pm.dpm.new_active_crtc_count < 2) ? in amdgpu_dpm_pick_power_state()
391 if (single_display && adev->pm.funcs->vblank_too_short) { in amdgpu_dpm_pick_power_state()
392 if (amdgpu_dpm_vblank_too_short(adev)) in amdgpu_dpm_pick_power_state()
407 for (i = 0; i < adev->pm.dpm.num_ps; i++) { in amdgpu_dpm_pick_power_state()
408 ps = &adev->pm.dpm.ps[i]; in amdgpu_dpm_pick_power_state()
441 if (adev->pm.dpm.uvd_ps) in amdgpu_dpm_pick_power_state()
442 return adev->pm.dpm.uvd_ps; in amdgpu_dpm_pick_power_state()
462 return adev->pm.dpm.boot_ps; in amdgpu_dpm_pick_power_state()
491 if (adev->pm.dpm.uvd_ps) { in amdgpu_dpm_pick_power_state()
492 return adev->pm.dpm.uvd_ps; in amdgpu_dpm_pick_power_state()
515 static void amdgpu_dpm_change_power_state_locked(struct amdgpu_device *adev) in amdgpu_dpm_change_power_state_locked() argument
523 if (!adev->pm.dpm_enabled) in amdgpu_dpm_change_power_state_locked()
526 if (adev->pm.dpm.user_state != adev->pm.dpm.state) { in amdgpu_dpm_change_power_state_locked()
528 if ((!adev->pm.dpm.thermal_active) && in amdgpu_dpm_change_power_state_locked()
529 (!adev->pm.dpm.uvd_active)) in amdgpu_dpm_change_power_state_locked()
530 adev->pm.dpm.state = adev->pm.dpm.user_state; in amdgpu_dpm_change_power_state_locked()
532 dpm_state = adev->pm.dpm.state; in amdgpu_dpm_change_power_state_locked()
534 ps = amdgpu_dpm_pick_power_state(adev, dpm_state); in amdgpu_dpm_change_power_state_locked()
536 adev->pm.dpm.requested_ps = ps; in amdgpu_dpm_change_power_state_locked()
541 if (adev->pm.dpm.current_ps == adev->pm.dpm.requested_ps) { in amdgpu_dpm_change_power_state_locked()
543 if (ps->vce_active != adev->pm.dpm.vce_active) in amdgpu_dpm_change_power_state_locked()
545 if (adev->flags & AMD_IS_APU) { in amdgpu_dpm_change_power_state_locked()
549 if (adev->pm.dpm.new_active_crtcs != adev->pm.dpm.current_active_crtcs) { in amdgpu_dpm_change_power_state_locked()
551 amdgpu_display_bandwidth_update(adev); in amdgpu_dpm_change_power_state_locked()
553 amdgpu_dpm_display_configuration_changed(adev); in amdgpu_dpm_change_power_state_locked()
554 adev->pm.dpm.current_active_crtcs = adev->pm.dpm.new_active_crtcs; in amdgpu_dpm_change_power_state_locked()
555 adev->pm.dpm.current_active_crtc_count = adev->pm.dpm.new_active_crtc_count; in amdgpu_dpm_change_power_state_locked()
563 if (adev->pm.dpm.new_active_crtcs == in amdgpu_dpm_change_power_state_locked()
564 adev->pm.dpm.current_active_crtcs) { in amdgpu_dpm_change_power_state_locked()
566 } else if ((adev->pm.dpm.current_active_crtc_count > 1) && in amdgpu_dpm_change_power_state_locked()
567 (adev->pm.dpm.new_active_crtc_count > 1)) { in amdgpu_dpm_change_power_state_locked()
569 amdgpu_display_bandwidth_update(adev); in amdgpu_dpm_change_power_state_locked()
571 amdgpu_dpm_display_configuration_changed(adev); in amdgpu_dpm_change_power_state_locked()
572 adev->pm.dpm.current_active_crtcs = adev->pm.dpm.new_active_crtcs; in amdgpu_dpm_change_power_state_locked()
573 adev->pm.dpm.current_active_crtc_count = adev->pm.dpm.new_active_crtc_count; in amdgpu_dpm_change_power_state_locked()
582 amdgpu_dpm_print_power_state(adev, adev->pm.dpm.current_ps); in amdgpu_dpm_change_power_state_locked()
584 amdgpu_dpm_print_power_state(adev, adev->pm.dpm.requested_ps); in amdgpu_dpm_change_power_state_locked()
587 mutex_lock(&adev->ring_lock); in amdgpu_dpm_change_power_state_locked()
590 ps->vce_active = adev->pm.dpm.vce_active; in amdgpu_dpm_change_power_state_locked()
592 ret = amdgpu_dpm_pre_set_power_state(adev); in amdgpu_dpm_change_power_state_locked()
597 amdgpu_display_bandwidth_update(adev); in amdgpu_dpm_change_power_state_locked()
601 struct amdgpu_ring *ring = adev->rings[i]; in amdgpu_dpm_change_power_state_locked()
607 amdgpu_dpm_set_power_state(adev); in amdgpu_dpm_change_power_state_locked()
610 adev->pm.dpm.current_ps = adev->pm.dpm.requested_ps; in amdgpu_dpm_change_power_state_locked()
612 amdgpu_dpm_post_set_power_state(adev); in amdgpu_dpm_change_power_state_locked()
615 amdgpu_dpm_display_configuration_changed(adev); in amdgpu_dpm_change_power_state_locked()
617 adev->pm.dpm.current_active_crtcs = adev->pm.dpm.new_active_crtcs; in amdgpu_dpm_change_power_state_locked()
618 adev->pm.dpm.current_active_crtc_count = adev->pm.dpm.new_active_crtc_count; in amdgpu_dpm_change_power_state_locked()
620 if (adev->pm.funcs->force_performance_level) { in amdgpu_dpm_change_power_state_locked()
621 if (adev->pm.dpm.thermal_active) { in amdgpu_dpm_change_power_state_locked()
622 enum amdgpu_dpm_forced_level level = adev->pm.dpm.forced_level; in amdgpu_dpm_change_power_state_locked()
624 amdgpu_dpm_force_performance_level(adev, AMDGPU_DPM_FORCED_LEVEL_LOW); in amdgpu_dpm_change_power_state_locked()
626 adev->pm.dpm.forced_level = level; in amdgpu_dpm_change_power_state_locked()
629 amdgpu_dpm_force_performance_level(adev, adev->pm.dpm.forced_level); in amdgpu_dpm_change_power_state_locked()
634 mutex_unlock(&adev->ring_lock); in amdgpu_dpm_change_power_state_locked()
637 void amdgpu_dpm_enable_uvd(struct amdgpu_device *adev, bool enable) in amdgpu_dpm_enable_uvd() argument
639 if (adev->pm.funcs->powergate_uvd) { in amdgpu_dpm_enable_uvd()
640 mutex_lock(&adev->pm.mutex); in amdgpu_dpm_enable_uvd()
642 amdgpu_dpm_powergate_uvd(adev, !enable); in amdgpu_dpm_enable_uvd()
643 mutex_unlock(&adev->pm.mutex); in amdgpu_dpm_enable_uvd()
646 mutex_lock(&adev->pm.mutex); in amdgpu_dpm_enable_uvd()
647 adev->pm.dpm.uvd_active = true; in amdgpu_dpm_enable_uvd()
648 adev->pm.dpm.state = POWER_STATE_TYPE_INTERNAL_UVD; in amdgpu_dpm_enable_uvd()
649 mutex_unlock(&adev->pm.mutex); in amdgpu_dpm_enable_uvd()
651 mutex_lock(&adev->pm.mutex); in amdgpu_dpm_enable_uvd()
652 adev->pm.dpm.uvd_active = false; in amdgpu_dpm_enable_uvd()
653 mutex_unlock(&adev->pm.mutex); in amdgpu_dpm_enable_uvd()
656 amdgpu_pm_compute_clocks(adev); in amdgpu_dpm_enable_uvd()
660 void amdgpu_dpm_enable_vce(struct amdgpu_device *adev, bool enable) in amdgpu_dpm_enable_vce() argument
662 if (adev->pm.funcs->powergate_vce) { in amdgpu_dpm_enable_vce()
663 mutex_lock(&adev->pm.mutex); in amdgpu_dpm_enable_vce()
665 amdgpu_dpm_powergate_vce(adev, !enable); in amdgpu_dpm_enable_vce()
667 mutex_unlock(&adev->pm.mutex); in amdgpu_dpm_enable_vce()
670 mutex_lock(&adev->pm.mutex); in amdgpu_dpm_enable_vce()
671 adev->pm.dpm.vce_active = true; in amdgpu_dpm_enable_vce()
673 adev->pm.dpm.vce_level = AMDGPU_VCE_LEVEL_AC_ALL; in amdgpu_dpm_enable_vce()
674 mutex_unlock(&adev->pm.mutex); in amdgpu_dpm_enable_vce()
676 mutex_lock(&adev->pm.mutex); in amdgpu_dpm_enable_vce()
677 adev->pm.dpm.vce_active = false; in amdgpu_dpm_enable_vce()
678 mutex_unlock(&adev->pm.mutex); in amdgpu_dpm_enable_vce()
681 amdgpu_pm_compute_clocks(adev); in amdgpu_dpm_enable_vce()
685 void amdgpu_pm_print_power_states(struct amdgpu_device *adev) in amdgpu_pm_print_power_states() argument
689 for (i = 0; i < adev->pm.dpm.num_ps; i++) { in amdgpu_pm_print_power_states()
691 amdgpu_dpm_print_power_state(adev, &adev->pm.dpm.ps[i]); in amdgpu_pm_print_power_states()
695 int amdgpu_pm_sysfs_init(struct amdgpu_device *adev) in amdgpu_pm_sysfs_init() argument
699 if (adev->pm.sysfs_initialized) in amdgpu_pm_sysfs_init()
702 if (adev->pm.funcs->get_temperature == NULL) in amdgpu_pm_sysfs_init()
704 adev->pm.int_hwmon_dev = hwmon_device_register_with_groups(adev->dev, in amdgpu_pm_sysfs_init()
705 DRIVER_NAME, adev, in amdgpu_pm_sysfs_init()
707 if (IS_ERR(adev->pm.int_hwmon_dev)) { in amdgpu_pm_sysfs_init()
708 ret = PTR_ERR(adev->pm.int_hwmon_dev); in amdgpu_pm_sysfs_init()
709 dev_err(adev->dev, in amdgpu_pm_sysfs_init()
714 ret = device_create_file(adev->dev, &dev_attr_power_dpm_state); in amdgpu_pm_sysfs_init()
719 ret = device_create_file(adev->dev, &dev_attr_power_dpm_force_performance_level); in amdgpu_pm_sysfs_init()
724 ret = amdgpu_debugfs_pm_init(adev); in amdgpu_pm_sysfs_init()
730 adev->pm.sysfs_initialized = true; in amdgpu_pm_sysfs_init()
735 void amdgpu_pm_sysfs_fini(struct amdgpu_device *adev) in amdgpu_pm_sysfs_fini() argument
737 if (adev->pm.int_hwmon_dev) in amdgpu_pm_sysfs_fini()
738 hwmon_device_unregister(adev->pm.int_hwmon_dev); in amdgpu_pm_sysfs_fini()
739 device_remove_file(adev->dev, &dev_attr_power_dpm_state); in amdgpu_pm_sysfs_fini()
740 device_remove_file(adev->dev, &dev_attr_power_dpm_force_performance_level); in amdgpu_pm_sysfs_fini()
743 void amdgpu_pm_compute_clocks(struct amdgpu_device *adev) in amdgpu_pm_compute_clocks() argument
745 struct drm_device *ddev = adev->ddev; in amdgpu_pm_compute_clocks()
749 if (!adev->pm.dpm_enabled) in amdgpu_pm_compute_clocks()
752 mutex_lock(&adev->pm.mutex); in amdgpu_pm_compute_clocks()
755 adev->pm.dpm.new_active_crtcs = 0; in amdgpu_pm_compute_clocks()
756 adev->pm.dpm.new_active_crtc_count = 0; in amdgpu_pm_compute_clocks()
757 if (adev->mode_info.num_crtc && adev->mode_info.mode_config_initialized) { in amdgpu_pm_compute_clocks()
762 adev->pm.dpm.new_active_crtcs |= (1 << amdgpu_crtc->crtc_id); in amdgpu_pm_compute_clocks()
763 adev->pm.dpm.new_active_crtc_count++; in amdgpu_pm_compute_clocks()
770 adev->pm.dpm.ac_power = true; in amdgpu_pm_compute_clocks()
772 adev->pm.dpm.ac_power = false; in amdgpu_pm_compute_clocks()
774 amdgpu_dpm_change_power_state_locked(adev); in amdgpu_pm_compute_clocks()
776 mutex_unlock(&adev->pm.mutex); in amdgpu_pm_compute_clocks()
789 struct amdgpu_device *adev = dev->dev_private; in amdgpu_debugfs_pm_info() local
791 if (adev->pm.dpm_enabled) { in amdgpu_debugfs_pm_info()
792 mutex_lock(&adev->pm.mutex); in amdgpu_debugfs_pm_info()
793 if (adev->pm.funcs->debugfs_print_current_performance_level) in amdgpu_debugfs_pm_info()
794 amdgpu_dpm_debugfs_print_current_performance_level(adev, m); in amdgpu_debugfs_pm_info()
797 mutex_unlock(&adev->pm.mutex); in amdgpu_debugfs_pm_info()
808 static int amdgpu_debugfs_pm_init(struct amdgpu_device *adev) in amdgpu_debugfs_pm_init() argument
811 return amdgpu_debugfs_add_files(adev, amdgpu_pm_info_list, ARRAY_SIZE(amdgpu_pm_info_list)); in amdgpu_debugfs_pm_init()