Lines Matching refs:rdev

339 static void trinity_program_clk_gating_hw_sequence(struct radeon_device *rdev,
341 static void trinity_override_dynamic_mg_powergating(struct radeon_device *rdev);
342 static void trinity_apply_state_adjust_rules(struct radeon_device *rdev,
353 static struct trinity_power_info *trinity_get_pi(struct radeon_device *rdev) in trinity_get_pi() argument
355 struct trinity_power_info *pi = rdev->pm.dpm.priv; in trinity_get_pi()
360 static void trinity_gfx_powergating_initialize(struct radeon_device *rdev) in trinity_gfx_powergating_initialize() argument
362 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_gfx_powergating_initialize()
366 u32 xclk = radeon_get_xclk(rdev); in trinity_gfx_powergating_initialize()
371 ret = radeon_atom_get_clock_dividers(rdev, COMPUTE_ENGINE_PLL_PARAM, in trinity_gfx_powergating_initialize()
391 trinity_override_dynamic_mg_powergating(rdev); in trinity_gfx_powergating_initialize()
400 static void trinity_mg_clockgating_enable(struct radeon_device *rdev, in trinity_mg_clockgating_enable() argument
429 static void trinity_mg_clockgating_initialize(struct radeon_device *rdev) in trinity_mg_clockgating_initialize() argument
437 trinity_program_clk_gating_hw_sequence(rdev, seq, count); in trinity_mg_clockgating_initialize()
440 static void trinity_gfx_clockgating_enable(struct radeon_device *rdev, in trinity_gfx_clockgating_enable() argument
453 static void trinity_program_clk_gating_hw_sequence(struct radeon_device *rdev, in trinity_program_clk_gating_hw_sequence() argument
462 static void trinity_program_override_mgpg_sequences(struct radeon_device *rdev, in trinity_program_override_mgpg_sequences() argument
472 static void trinity_override_dynamic_mg_powergating(struct radeon_device *rdev) in trinity_override_dynamic_mg_powergating() argument
480 trinity_program_override_mgpg_sequences(rdev, seq, count); in trinity_override_dynamic_mg_powergating()
483 static void trinity_ls_clockgating_enable(struct radeon_device *rdev, in trinity_ls_clockgating_enable() argument
497 trinity_program_clk_gating_hw_sequence(rdev, seq, count); in trinity_ls_clockgating_enable()
500 static void trinity_gfx_powergating_enable(struct radeon_device *rdev, in trinity_gfx_powergating_enable() argument
514 static void trinity_gfx_dynamic_mgpg_enable(struct radeon_device *rdev, in trinity_gfx_dynamic_mgpg_enable() argument
539 trinity_gfx_dynamic_mgpg_config(rdev); in trinity_gfx_dynamic_mgpg_enable()
543 static void trinity_enable_clock_power_gating(struct radeon_device *rdev) in trinity_enable_clock_power_gating() argument
545 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_enable_clock_power_gating()
548 sumo_gfx_clockgating_initialize(rdev); in trinity_enable_clock_power_gating()
550 trinity_mg_clockgating_initialize(rdev); in trinity_enable_clock_power_gating()
552 trinity_gfx_powergating_initialize(rdev); in trinity_enable_clock_power_gating()
554 trinity_ls_clockgating_enable(rdev, true); in trinity_enable_clock_power_gating()
555 trinity_mg_clockgating_enable(rdev, true); in trinity_enable_clock_power_gating()
558 trinity_gfx_clockgating_enable(rdev, true); in trinity_enable_clock_power_gating()
560 trinity_gfx_dynamic_mgpg_enable(rdev, true); in trinity_enable_clock_power_gating()
562 trinity_gfx_powergating_enable(rdev, true); in trinity_enable_clock_power_gating()
565 static void trinity_disable_clock_power_gating(struct radeon_device *rdev) in trinity_disable_clock_power_gating() argument
567 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_disable_clock_power_gating()
570 trinity_gfx_powergating_enable(rdev, false); in trinity_disable_clock_power_gating()
572 trinity_gfx_dynamic_mgpg_enable(rdev, false); in trinity_disable_clock_power_gating()
574 trinity_gfx_clockgating_enable(rdev, false); in trinity_disable_clock_power_gating()
576 trinity_mg_clockgating_enable(rdev, false); in trinity_disable_clock_power_gating()
577 trinity_ls_clockgating_enable(rdev, false); in trinity_disable_clock_power_gating()
581 static void trinity_set_divider_value(struct radeon_device *rdev, in trinity_set_divider_value() argument
589 ret = radeon_atom_get_clock_dividers(rdev, COMPUTE_ENGINE_PLL_PARAM, in trinity_set_divider_value()
599 ret = radeon_atom_get_clock_dividers(rdev, COMPUTE_ENGINE_PLL_PARAM, in trinity_set_divider_value()
610 static void trinity_set_ds_dividers(struct radeon_device *rdev, in trinity_set_ds_dividers() argument
622 static void trinity_set_ss_dividers(struct radeon_device *rdev, in trinity_set_ss_dividers() argument
634 static void trinity_set_vid(struct radeon_device *rdev, u32 index, u32 vid) in trinity_set_vid() argument
636 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_set_vid()
637 u32 vid_7bit = sumo_convert_vid2_to_vid7(rdev, &pi->sys_info.vid_mapping_table, vid); in trinity_set_vid()
652 static void trinity_set_allos_gnb_slow(struct radeon_device *rdev, in trinity_set_allos_gnb_slow() argument
664 static void trinity_set_force_nbp_state(struct radeon_device *rdev, in trinity_set_force_nbp_state() argument
676 static void trinity_set_display_wm(struct radeon_device *rdev, in trinity_set_display_wm() argument
688 static void trinity_set_vce_wm(struct radeon_device *rdev, in trinity_set_vce_wm() argument
700 static void trinity_set_at(struct radeon_device *rdev, in trinity_set_at() argument
712 static void trinity_program_power_level(struct radeon_device *rdev, in trinity_program_power_level() argument
715 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_program_power_level()
720 trinity_set_divider_value(rdev, index, pl->sclk); in trinity_program_power_level()
721 trinity_set_vid(rdev, index, pl->vddc_index); in trinity_program_power_level()
722 trinity_set_ss_dividers(rdev, index, pl->ss_divider_index); in trinity_program_power_level()
723 trinity_set_ds_dividers(rdev, index, pl->ds_divider_index); in trinity_program_power_level()
724 trinity_set_allos_gnb_slow(rdev, index, pl->allow_gnb_slow); in trinity_program_power_level()
725 trinity_set_force_nbp_state(rdev, index, pl->force_nbp_state); in trinity_program_power_level()
726 trinity_set_display_wm(rdev, index, pl->display_wm); in trinity_program_power_level()
727 trinity_set_vce_wm(rdev, index, pl->vce_wm); in trinity_program_power_level()
728 trinity_set_at(rdev, index, pi->at[index]); in trinity_program_power_level()
731 static void trinity_power_level_enable_disable(struct radeon_device *rdev, in trinity_power_level_enable_disable() argument
744 static bool trinity_dpm_enabled(struct radeon_device *rdev) in trinity_dpm_enabled() argument
752 static void trinity_start_dpm(struct radeon_device *rdev) in trinity_start_dpm() argument
763 trinity_dpm_config(rdev, true); in trinity_start_dpm()
766 static void trinity_wait_for_dpm_enabled(struct radeon_device *rdev) in trinity_wait_for_dpm_enabled() argument
770 for (i = 0; i < rdev->usec_timeout; i++) { in trinity_wait_for_dpm_enabled()
775 for (i = 0; i < rdev->usec_timeout; i++) { in trinity_wait_for_dpm_enabled()
780 for (i = 0; i < rdev->usec_timeout; i++) { in trinity_wait_for_dpm_enabled()
787 static void trinity_stop_dpm(struct radeon_device *rdev) in trinity_stop_dpm() argument
797 trinity_dpm_config(rdev, false); in trinity_stop_dpm()
800 static void trinity_start_am(struct radeon_device *rdev) in trinity_start_am() argument
805 static void trinity_reset_am(struct radeon_device *rdev) in trinity_reset_am() argument
811 static void trinity_wait_for_level_0(struct radeon_device *rdev) in trinity_wait_for_level_0() argument
815 for (i = 0; i < rdev->usec_timeout; i++) { in trinity_wait_for_level_0()
822 static void trinity_enable_power_level_0(struct radeon_device *rdev) in trinity_enable_power_level_0() argument
824 trinity_power_level_enable_disable(rdev, 0, true); in trinity_enable_power_level_0()
827 static void trinity_force_level_0(struct radeon_device *rdev) in trinity_force_level_0() argument
829 trinity_dpm_force_state(rdev, 0); in trinity_force_level_0()
832 static void trinity_unforce_levels(struct radeon_device *rdev) in trinity_unforce_levels() argument
834 trinity_dpm_no_forced_level(rdev); in trinity_unforce_levels()
837 static void trinity_program_power_levels_0_to_n(struct radeon_device *rdev, in trinity_program_power_levels_0_to_n() argument
847 trinity_program_power_level(rdev, &new_ps->levels[i], i); in trinity_program_power_levels_0_to_n()
848 trinity_power_level_enable_disable(rdev, i, true); in trinity_program_power_levels_0_to_n()
852 trinity_power_level_enable_disable(rdev, i, false); in trinity_program_power_levels_0_to_n()
855 static void trinity_program_bootup_state(struct radeon_device *rdev) in trinity_program_bootup_state() argument
857 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_program_bootup_state()
860 trinity_program_power_level(rdev, &pi->boot_pl, 0); in trinity_program_bootup_state()
861 trinity_power_level_enable_disable(rdev, 0, true); in trinity_program_bootup_state()
864 trinity_power_level_enable_disable(rdev, i, false); in trinity_program_bootup_state()
867 static void trinity_setup_uvd_clock_table(struct radeon_device *rdev, in trinity_setup_uvd_clock_table() argument
879 static void trinity_setup_uvd_dpm_interval(struct radeon_device *rdev, in trinity_setup_uvd_dpm_interval() argument
885 u32 xclk = radeon_get_xclk(rdev); in trinity_setup_uvd_dpm_interval()
919 static void trinity_setup_uvd_clocks(struct radeon_device *rdev, in trinity_setup_uvd_clocks() argument
923 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_setup_uvd_clocks()
926 trinity_gfx_powergating_enable(rdev, false); in trinity_setup_uvd_clocks()
932 trinity_setup_uvd_dpm_interval(rdev, 0); in trinity_setup_uvd_clocks()
934 trinity_setup_uvd_clock_table(rdev, new_rps); in trinity_setup_uvd_clocks()
941 radeon_set_uvd_clocks(rdev, new_rps->vclk, new_rps->dclk); in trinity_setup_uvd_clocks()
943 trinity_setup_uvd_dpm_interval(rdev, 3000); in trinity_setup_uvd_clocks()
946 trinity_uvd_dpm_config(rdev); in trinity_setup_uvd_clocks()
952 radeon_set_uvd_clocks(rdev, new_rps->vclk, new_rps->dclk); in trinity_setup_uvd_clocks()
956 trinity_gfx_powergating_enable(rdev, true); in trinity_setup_uvd_clocks()
960 static void trinity_set_uvd_clock_before_set_eng_clock(struct radeon_device *rdev, in trinity_set_uvd_clock_before_set_eng_clock() argument
971 trinity_setup_uvd_clocks(rdev, new_rps, old_rps); in trinity_set_uvd_clock_before_set_eng_clock()
974 static void trinity_set_uvd_clock_after_set_eng_clock(struct radeon_device *rdev, in trinity_set_uvd_clock_after_set_eng_clock() argument
985 trinity_setup_uvd_clocks(rdev, new_rps, old_rps); in trinity_set_uvd_clock_after_set_eng_clock()
988 static void trinity_program_ttt(struct radeon_device *rdev) in trinity_program_ttt() argument
990 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_program_ttt()
999 static void trinity_enable_att(struct radeon_device *rdev) in trinity_enable_att() argument
1008 static void trinity_program_sclk_dpm(struct radeon_device *rdev) in trinity_program_sclk_dpm() argument
1013 u32 xclk = radeon_get_xclk(rdev); in trinity_program_sclk_dpm()
1026 static int trinity_set_thermal_temperature_range(struct radeon_device *rdev, in trinity_set_thermal_temperature_range() argument
1044 rdev->pm.dpm.thermal.min_temp = low_temp; in trinity_set_thermal_temperature_range()
1045 rdev->pm.dpm.thermal.max_temp = high_temp; in trinity_set_thermal_temperature_range()
1050 static void trinity_update_current_ps(struct radeon_device *rdev, in trinity_update_current_ps() argument
1054 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_update_current_ps()
1061 static void trinity_update_requested_ps(struct radeon_device *rdev, in trinity_update_requested_ps() argument
1065 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_update_requested_ps()
1072 void trinity_dpm_enable_bapm(struct radeon_device *rdev, bool enable) in trinity_dpm_enable_bapm() argument
1074 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_enable_bapm()
1077 trinity_acquire_mutex(rdev); in trinity_dpm_enable_bapm()
1078 trinity_dpm_bapm_enable(rdev, enable); in trinity_dpm_enable_bapm()
1079 trinity_release_mutex(rdev); in trinity_dpm_enable_bapm()
1083 int trinity_dpm_enable(struct radeon_device *rdev) in trinity_dpm_enable() argument
1085 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_enable()
1087 trinity_acquire_mutex(rdev); in trinity_dpm_enable()
1089 if (trinity_dpm_enabled(rdev)) { in trinity_dpm_enable()
1090 trinity_release_mutex(rdev); in trinity_dpm_enable()
1094 trinity_program_bootup_state(rdev); in trinity_dpm_enable()
1095 sumo_program_vc(rdev, 0x00C00033); in trinity_dpm_enable()
1096 trinity_start_am(rdev); in trinity_dpm_enable()
1098 trinity_program_ttt(rdev); in trinity_dpm_enable()
1099 trinity_enable_att(rdev); in trinity_dpm_enable()
1101 trinity_program_sclk_dpm(rdev); in trinity_dpm_enable()
1102 trinity_start_dpm(rdev); in trinity_dpm_enable()
1103 trinity_wait_for_dpm_enabled(rdev); in trinity_dpm_enable()
1104 trinity_dpm_bapm_enable(rdev, false); in trinity_dpm_enable()
1105 trinity_release_mutex(rdev); in trinity_dpm_enable()
1107 trinity_update_current_ps(rdev, rdev->pm.dpm.boot_ps); in trinity_dpm_enable()
1112 int trinity_dpm_late_enable(struct radeon_device *rdev) in trinity_dpm_late_enable() argument
1116 trinity_acquire_mutex(rdev); in trinity_dpm_late_enable()
1117 trinity_enable_clock_power_gating(rdev); in trinity_dpm_late_enable()
1119 if (rdev->irq.installed && in trinity_dpm_late_enable()
1120 r600_is_internal_thermal_sensor(rdev->pm.int_thermal_type)) { in trinity_dpm_late_enable()
1121 ret = trinity_set_thermal_temperature_range(rdev, R600_TEMP_RANGE_MIN, R600_TEMP_RANGE_MAX); in trinity_dpm_late_enable()
1123 trinity_release_mutex(rdev); in trinity_dpm_late_enable()
1126 rdev->irq.dpm_thermal = true; in trinity_dpm_late_enable()
1127 radeon_irq_set(rdev); in trinity_dpm_late_enable()
1129 trinity_release_mutex(rdev); in trinity_dpm_late_enable()
1134 void trinity_dpm_disable(struct radeon_device *rdev) in trinity_dpm_disable() argument
1136 trinity_acquire_mutex(rdev); in trinity_dpm_disable()
1137 if (!trinity_dpm_enabled(rdev)) { in trinity_dpm_disable()
1138 trinity_release_mutex(rdev); in trinity_dpm_disable()
1141 trinity_dpm_bapm_enable(rdev, false); in trinity_dpm_disable()
1142 trinity_disable_clock_power_gating(rdev); in trinity_dpm_disable()
1143 sumo_clear_vc(rdev); in trinity_dpm_disable()
1144 trinity_wait_for_level_0(rdev); in trinity_dpm_disable()
1145 trinity_stop_dpm(rdev); in trinity_dpm_disable()
1146 trinity_reset_am(rdev); in trinity_dpm_disable()
1147 trinity_release_mutex(rdev); in trinity_dpm_disable()
1149 if (rdev->irq.installed && in trinity_dpm_disable()
1150 r600_is_internal_thermal_sensor(rdev->pm.int_thermal_type)) { in trinity_dpm_disable()
1151 rdev->irq.dpm_thermal = false; in trinity_dpm_disable()
1152 radeon_irq_set(rdev); in trinity_dpm_disable()
1155 trinity_update_current_ps(rdev, rdev->pm.dpm.boot_ps); in trinity_dpm_disable()
1158 static void trinity_get_min_sclk_divider(struct radeon_device *rdev) in trinity_get_min_sclk_divider() argument
1160 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_get_min_sclk_divider()
1166 static void trinity_setup_nbp_sim(struct radeon_device *rdev, in trinity_setup_nbp_sim() argument
1169 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_setup_nbp_sim()
1184 int trinity_dpm_force_performance_level(struct radeon_device *rdev, in trinity_dpm_force_performance_level() argument
1187 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_force_performance_level()
1199 ret = trinity_dpm_n_levels_disabled(rdev, ps->num_levels - 1); in trinity_dpm_force_performance_level()
1204 ret = trinity_dpm_n_levels_disabled(rdev, 0); in trinity_dpm_force_performance_level()
1210 rdev->pm.dpm.forced_level = level; in trinity_dpm_force_performance_level()
1215 int trinity_dpm_pre_set_power_state(struct radeon_device *rdev) in trinity_dpm_pre_set_power_state() argument
1217 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_pre_set_power_state()
1218 struct radeon_ps requested_ps = *rdev->pm.dpm.requested_ps; in trinity_dpm_pre_set_power_state()
1221 trinity_update_requested_ps(rdev, new_ps); in trinity_dpm_pre_set_power_state()
1223 trinity_apply_state_adjust_rules(rdev, in trinity_dpm_pre_set_power_state()
1230 int trinity_dpm_set_power_state(struct radeon_device *rdev) in trinity_dpm_set_power_state() argument
1232 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_set_power_state()
1236 trinity_acquire_mutex(rdev); in trinity_dpm_set_power_state()
1239 trinity_dpm_bapm_enable(rdev, rdev->pm.dpm.ac_power); in trinity_dpm_set_power_state()
1240 trinity_set_uvd_clock_before_set_eng_clock(rdev, new_ps, old_ps); in trinity_dpm_set_power_state()
1241 trinity_enable_power_level_0(rdev); in trinity_dpm_set_power_state()
1242 trinity_force_level_0(rdev); in trinity_dpm_set_power_state()
1243 trinity_wait_for_level_0(rdev); in trinity_dpm_set_power_state()
1244 trinity_setup_nbp_sim(rdev, new_ps); in trinity_dpm_set_power_state()
1245 trinity_program_power_levels_0_to_n(rdev, new_ps, old_ps); in trinity_dpm_set_power_state()
1246 trinity_force_level_0(rdev); in trinity_dpm_set_power_state()
1247 trinity_unforce_levels(rdev); in trinity_dpm_set_power_state()
1248 trinity_set_uvd_clock_after_set_eng_clock(rdev, new_ps, old_ps); in trinity_dpm_set_power_state()
1250 trinity_release_mutex(rdev); in trinity_dpm_set_power_state()
1255 void trinity_dpm_post_set_power_state(struct radeon_device *rdev) in trinity_dpm_post_set_power_state() argument
1257 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_post_set_power_state()
1260 trinity_update_current_ps(rdev, new_ps); in trinity_dpm_post_set_power_state()
1263 void trinity_dpm_setup_asic(struct radeon_device *rdev) in trinity_dpm_setup_asic() argument
1265 trinity_acquire_mutex(rdev); in trinity_dpm_setup_asic()
1266 sumo_program_sstp(rdev); in trinity_dpm_setup_asic()
1267 sumo_take_smu_control(rdev, true); in trinity_dpm_setup_asic()
1268 trinity_get_min_sclk_divider(rdev); in trinity_dpm_setup_asic()
1269 trinity_release_mutex(rdev); in trinity_dpm_setup_asic()
1273 void trinity_dpm_reset_asic(struct radeon_device *rdev)
1275 struct trinity_power_info *pi = trinity_get_pi(rdev);
1277 trinity_acquire_mutex(rdev);
1279 trinity_enable_power_level_0(rdev);
1280 trinity_force_level_0(rdev);
1281 trinity_wait_for_level_0(rdev);
1282 trinity_program_bootup_state(rdev);
1283 trinity_force_level_0(rdev);
1284 trinity_unforce_levels(rdev);
1286 trinity_release_mutex(rdev);
1290 static u16 trinity_convert_voltage_index_to_value(struct radeon_device *rdev, in trinity_convert_voltage_index_to_value() argument
1293 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_convert_voltage_index_to_value()
1294 u32 vid_7bit = sumo_convert_vid2_to_vid7(rdev, &pi->sys_info.vid_mapping_table, vid_2bit); in trinity_convert_voltage_index_to_value()
1305 static void trinity_patch_boot_state(struct radeon_device *rdev, in trinity_patch_boot_state() argument
1308 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_patch_boot_state()
1316 static u8 trinity_calculate_vce_wm(struct radeon_device *rdev, u32 sclk) in trinity_calculate_vce_wm() argument
1323 static void trinity_construct_boot_state(struct radeon_device *rdev) in trinity_construct_boot_state() argument
1325 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_construct_boot_state()
1339 static u8 trinity_get_sleep_divider_id_from_clock(struct radeon_device *rdev, in trinity_get_sleep_divider_id_from_clock() argument
1342 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_get_sleep_divider_id_from_clock()
1363 static u32 trinity_get_valid_engine_clock(struct radeon_device *rdev, in trinity_get_valid_engine_clock() argument
1366 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_get_valid_engine_clock()
1380 static void trinity_patch_thermal_state(struct radeon_device *rdev, in trinity_patch_thermal_state() argument
1384 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_patch_thermal_state()
1404 trinity_get_sleep_divider_id_from_clock(rdev, ps->levels[0].sclk, sclk_in_sr); in trinity_patch_thermal_state()
1410 trinity_calculate_vce_wm(rdev, ps->levels[0].sclk); in trinity_patch_thermal_state()
1413 static u8 trinity_calculate_display_wm(struct radeon_device *rdev, in trinity_calculate_display_wm() argument
1433 static u32 trinity_get_uvd_clock_index(struct radeon_device *rdev, in trinity_get_uvd_clock_index() argument
1436 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_get_uvd_clock_index()
1452 static void trinity_adjust_uvd_state(struct radeon_device *rdev, in trinity_adjust_uvd_state() argument
1456 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_adjust_uvd_state()
1461 high_index = trinity_get_uvd_clock_index(rdev, rps); in trinity_adjust_uvd_state()
1488 static void trinity_apply_state_adjust_rules(struct radeon_device *rdev, in trinity_apply_state_adjust_rules() argument
1494 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_apply_state_adjust_rules()
1500 u32 num_active_displays = rdev->pm.dpm.new_active_crtc_count; in trinity_apply_state_adjust_rules()
1503 return trinity_patch_thermal_state(rdev, ps, current_ps); in trinity_apply_state_adjust_rules()
1505 trinity_adjust_uvd_state(rdev, new_rps); in trinity_apply_state_adjust_rules()
1513 trinity_get_valid_engine_clock(rdev, min_sclk); in trinity_apply_state_adjust_rules()
1516 sumo_get_sleep_divider_id_from_clock(rdev, ps->levels[i].sclk, sclk_in_sr); in trinity_apply_state_adjust_rules()
1523 trinity_calculate_display_wm(rdev, ps, i); in trinity_apply_state_adjust_rules()
1525 trinity_calculate_vce_wm(rdev, ps->levels[0].sclk); in trinity_apply_state_adjust_rules()
1553 static void trinity_cleanup_asic(struct radeon_device *rdev) in trinity_cleanup_asic() argument
1555 sumo_take_smu_control(rdev, false); in trinity_cleanup_asic()
1559 static void trinity_pre_display_configuration_change(struct radeon_device *rdev)
1561 struct trinity_power_info *pi = trinity_get_pi(rdev);
1564 trinity_dce_enable_voltage_adjustment(rdev, false);
1568 static void trinity_add_dccac_value(struct radeon_device *rdev) in trinity_add_dccac_value() argument
1571 u32 num_active_displays = rdev->pm.dpm.new_active_crtc_count; in trinity_add_dccac_value()
1572 u64 disp_clk = rdev->clock.default_dispclk / 100; in trinity_add_dccac_value()
1584 void trinity_dpm_display_configuration_changed(struct radeon_device *rdev) in trinity_dpm_display_configuration_changed() argument
1586 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_display_configuration_changed()
1589 trinity_dce_enable_voltage_adjustment(rdev, true); in trinity_dpm_display_configuration_changed()
1590 trinity_add_dccac_value(rdev); in trinity_dpm_display_configuration_changed()
1614 static void trinity_parse_pplib_non_clock_info(struct radeon_device *rdev, in trinity_parse_pplib_non_clock_info() argument
1634 rdev->pm.dpm.boot_ps = rps; in trinity_parse_pplib_non_clock_info()
1635 trinity_patch_boot_state(rdev, ps); in trinity_parse_pplib_non_clock_info()
1638 rdev->pm.dpm.uvd_ps = rps; in trinity_parse_pplib_non_clock_info()
1641 static void trinity_parse_pplib_clock_info(struct radeon_device *rdev, in trinity_parse_pplib_clock_info() argument
1645 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_parse_pplib_clock_info()
1663 static int trinity_parse_power_table(struct radeon_device *rdev) in trinity_parse_power_table() argument
1665 struct radeon_mode_info *mode_info = &rdev->mode_info; in trinity_parse_power_table()
1695 rdev->pm.dpm.ps = kzalloc(sizeof(struct radeon_ps) * in trinity_parse_power_table()
1697 if (!rdev->pm.dpm.ps) in trinity_parse_power_table()
1706 if (!rdev->pm.power_state[i].clock_info) in trinity_parse_power_table()
1710 kfree(rdev->pm.dpm.ps); in trinity_parse_power_table()
1713 rdev->pm.dpm.ps[i].ps_priv = ps; in trinity_parse_power_table()
1725 trinity_parse_pplib_clock_info(rdev, in trinity_parse_power_table()
1726 &rdev->pm.dpm.ps[i], k, in trinity_parse_power_table()
1730 trinity_parse_pplib_non_clock_info(rdev, &rdev->pm.dpm.ps[i], in trinity_parse_power_table()
1735 rdev->pm.dpm.num_ps = state_array->ucNumEntries; in trinity_parse_power_table()
1747 static u32 trinity_convert_did_to_freq(struct radeon_device *rdev, u8 did) in trinity_convert_did_to_freq() argument
1749 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_convert_did_to_freq()
1766 static int trinity_parse_sys_info_table(struct radeon_device *rdev) in trinity_parse_sys_info_table() argument
1768 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_parse_sys_info_table()
1769 struct radeon_mode_info *mode_info = &rdev->mode_info; in trinity_parse_sys_info_table()
1828 sumo_construct_sclk_voltage_mapping_table(rdev, in trinity_parse_sys_info_table()
1831 sumo_construct_vid_mapping_table(rdev, &pi->sys_info.vid_mapping_table, in trinity_parse_sys_info_table()
1854 trinity_convert_did_to_freq(rdev, in trinity_parse_sys_info_table()
1857 trinity_convert_did_to_freq(rdev, in trinity_parse_sys_info_table()
1867 int trinity_dpm_init(struct radeon_device *rdev) in trinity_dpm_init() argument
1875 rdev->pm.dpm.priv = pi; in trinity_dpm_init()
1887 if (rdev->pdev->subsystem_vendor == 0x1462) in trinity_dpm_init()
1907 ret = trinity_parse_sys_info_table(rdev); in trinity_dpm_init()
1911 trinity_construct_boot_state(rdev); in trinity_dpm_init()
1913 ret = r600_get_platform_caps(rdev); in trinity_dpm_init()
1917 ret = trinity_parse_power_table(rdev); in trinity_dpm_init()
1927 void trinity_dpm_print_power_state(struct radeon_device *rdev, in trinity_dpm_print_power_state() argument
1940 trinity_convert_voltage_index_to_value(rdev, pl->vddc_index)); in trinity_dpm_print_power_state()
1942 r600_dpm_print_ps_status(rdev, rps); in trinity_dpm_print_power_state()
1945 void trinity_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev, in trinity_dpm_debugfs_print_current_performance_level() argument
1948 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_debugfs_print_current_performance_level()
1963 trinity_convert_voltage_index_to_value(rdev, pl->vddc_index)); in trinity_dpm_debugfs_print_current_performance_level()
1967 u32 trinity_dpm_get_current_sclk(struct radeon_device *rdev) in trinity_dpm_get_current_sclk() argument
1969 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_get_current_sclk()
1985 u32 trinity_dpm_get_current_mclk(struct radeon_device *rdev) in trinity_dpm_get_current_mclk() argument
1987 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_get_current_mclk()
1992 void trinity_dpm_fini(struct radeon_device *rdev) in trinity_dpm_fini() argument
1996 trinity_cleanup_asic(rdev); /* ??? */ in trinity_dpm_fini()
1998 for (i = 0; i < rdev->pm.dpm.num_ps; i++) { in trinity_dpm_fini()
1999 kfree(rdev->pm.dpm.ps[i].ps_priv); in trinity_dpm_fini()
2001 kfree(rdev->pm.dpm.ps); in trinity_dpm_fini()
2002 kfree(rdev->pm.dpm.priv); in trinity_dpm_fini()
2005 u32 trinity_dpm_get_sclk(struct radeon_device *rdev, bool low) in trinity_dpm_get_sclk() argument
2007 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_get_sclk()
2016 u32 trinity_dpm_get_mclk(struct radeon_device *rdev, bool low) in trinity_dpm_get_mclk() argument
2018 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_get_mclk()