Lines Matching refs:rdev

339 extern void vce_v1_0_enable_mgcg(struct radeon_device *rdev, bool enable);
340 static void trinity_program_clk_gating_hw_sequence(struct radeon_device *rdev,
342 static void trinity_override_dynamic_mg_powergating(struct radeon_device *rdev);
343 static void trinity_apply_state_adjust_rules(struct radeon_device *rdev,
354 static struct trinity_power_info *trinity_get_pi(struct radeon_device *rdev) in trinity_get_pi() argument
356 struct trinity_power_info *pi = rdev->pm.dpm.priv; in trinity_get_pi()
361 static void trinity_gfx_powergating_initialize(struct radeon_device *rdev) in trinity_gfx_powergating_initialize() argument
363 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_gfx_powergating_initialize()
367 u32 xclk = radeon_get_xclk(rdev); in trinity_gfx_powergating_initialize()
372 ret = radeon_atom_get_clock_dividers(rdev, COMPUTE_ENGINE_PLL_PARAM, in trinity_gfx_powergating_initialize()
392 trinity_override_dynamic_mg_powergating(rdev); in trinity_gfx_powergating_initialize()
401 static void trinity_mg_clockgating_enable(struct radeon_device *rdev, in trinity_mg_clockgating_enable() argument
430 static void trinity_mg_clockgating_initialize(struct radeon_device *rdev) in trinity_mg_clockgating_initialize() argument
438 trinity_program_clk_gating_hw_sequence(rdev, seq, count); in trinity_mg_clockgating_initialize()
441 static void trinity_gfx_clockgating_enable(struct radeon_device *rdev, in trinity_gfx_clockgating_enable() argument
454 static void trinity_program_clk_gating_hw_sequence(struct radeon_device *rdev, in trinity_program_clk_gating_hw_sequence() argument
463 static void trinity_program_override_mgpg_sequences(struct radeon_device *rdev, in trinity_program_override_mgpg_sequences() argument
473 static void trinity_override_dynamic_mg_powergating(struct radeon_device *rdev) in trinity_override_dynamic_mg_powergating() argument
481 trinity_program_override_mgpg_sequences(rdev, seq, count); in trinity_override_dynamic_mg_powergating()
484 static void trinity_ls_clockgating_enable(struct radeon_device *rdev, in trinity_ls_clockgating_enable() argument
498 trinity_program_clk_gating_hw_sequence(rdev, seq, count); in trinity_ls_clockgating_enable()
501 static void trinity_gfx_powergating_enable(struct radeon_device *rdev, in trinity_gfx_powergating_enable() argument
515 static void trinity_gfx_dynamic_mgpg_enable(struct radeon_device *rdev, in trinity_gfx_dynamic_mgpg_enable() argument
540 trinity_gfx_dynamic_mgpg_config(rdev); in trinity_gfx_dynamic_mgpg_enable()
544 static void trinity_enable_clock_power_gating(struct radeon_device *rdev) in trinity_enable_clock_power_gating() argument
546 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_enable_clock_power_gating()
549 sumo_gfx_clockgating_initialize(rdev); in trinity_enable_clock_power_gating()
551 trinity_mg_clockgating_initialize(rdev); in trinity_enable_clock_power_gating()
553 trinity_gfx_powergating_initialize(rdev); in trinity_enable_clock_power_gating()
555 trinity_ls_clockgating_enable(rdev, true); in trinity_enable_clock_power_gating()
556 trinity_mg_clockgating_enable(rdev, true); in trinity_enable_clock_power_gating()
559 trinity_gfx_clockgating_enable(rdev, true); in trinity_enable_clock_power_gating()
561 trinity_gfx_dynamic_mgpg_enable(rdev, true); in trinity_enable_clock_power_gating()
563 trinity_gfx_powergating_enable(rdev, true); in trinity_enable_clock_power_gating()
566 static void trinity_disable_clock_power_gating(struct radeon_device *rdev) in trinity_disable_clock_power_gating() argument
568 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_disable_clock_power_gating()
571 trinity_gfx_powergating_enable(rdev, false); in trinity_disable_clock_power_gating()
573 trinity_gfx_dynamic_mgpg_enable(rdev, false); in trinity_disable_clock_power_gating()
575 trinity_gfx_clockgating_enable(rdev, false); in trinity_disable_clock_power_gating()
577 trinity_mg_clockgating_enable(rdev, false); in trinity_disable_clock_power_gating()
578 trinity_ls_clockgating_enable(rdev, false); in trinity_disable_clock_power_gating()
582 static void trinity_set_divider_value(struct radeon_device *rdev, in trinity_set_divider_value() argument
590 ret = radeon_atom_get_clock_dividers(rdev, COMPUTE_ENGINE_PLL_PARAM, in trinity_set_divider_value()
600 ret = radeon_atom_get_clock_dividers(rdev, COMPUTE_ENGINE_PLL_PARAM, in trinity_set_divider_value()
611 static void trinity_set_ds_dividers(struct radeon_device *rdev, in trinity_set_ds_dividers() argument
623 static void trinity_set_ss_dividers(struct radeon_device *rdev, in trinity_set_ss_dividers() argument
635 static void trinity_set_vid(struct radeon_device *rdev, u32 index, u32 vid) in trinity_set_vid() argument
637 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_set_vid()
638 u32 vid_7bit = sumo_convert_vid2_to_vid7(rdev, &pi->sys_info.vid_mapping_table, vid); in trinity_set_vid()
653 static void trinity_set_allos_gnb_slow(struct radeon_device *rdev, in trinity_set_allos_gnb_slow() argument
665 static void trinity_set_force_nbp_state(struct radeon_device *rdev, in trinity_set_force_nbp_state() argument
677 static void trinity_set_display_wm(struct radeon_device *rdev, in trinity_set_display_wm() argument
689 static void trinity_set_vce_wm(struct radeon_device *rdev, in trinity_set_vce_wm() argument
701 static void trinity_set_at(struct radeon_device *rdev, in trinity_set_at() argument
713 static void trinity_program_power_level(struct radeon_device *rdev, in trinity_program_power_level() argument
716 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_program_power_level()
721 trinity_set_divider_value(rdev, index, pl->sclk); in trinity_program_power_level()
722 trinity_set_vid(rdev, index, pl->vddc_index); in trinity_program_power_level()
723 trinity_set_ss_dividers(rdev, index, pl->ss_divider_index); in trinity_program_power_level()
724 trinity_set_ds_dividers(rdev, index, pl->ds_divider_index); in trinity_program_power_level()
725 trinity_set_allos_gnb_slow(rdev, index, pl->allow_gnb_slow); in trinity_program_power_level()
726 trinity_set_force_nbp_state(rdev, index, pl->force_nbp_state); in trinity_program_power_level()
727 trinity_set_display_wm(rdev, index, pl->display_wm); in trinity_program_power_level()
728 trinity_set_vce_wm(rdev, index, pl->vce_wm); in trinity_program_power_level()
729 trinity_set_at(rdev, index, pi->at[index]); in trinity_program_power_level()
732 static void trinity_power_level_enable_disable(struct radeon_device *rdev, in trinity_power_level_enable_disable() argument
745 static bool trinity_dpm_enabled(struct radeon_device *rdev) in trinity_dpm_enabled() argument
753 static void trinity_start_dpm(struct radeon_device *rdev) in trinity_start_dpm() argument
764 trinity_dpm_config(rdev, true); in trinity_start_dpm()
767 static void trinity_wait_for_dpm_enabled(struct radeon_device *rdev) in trinity_wait_for_dpm_enabled() argument
771 for (i = 0; i < rdev->usec_timeout; i++) { in trinity_wait_for_dpm_enabled()
776 for (i = 0; i < rdev->usec_timeout; i++) { in trinity_wait_for_dpm_enabled()
781 for (i = 0; i < rdev->usec_timeout; i++) { in trinity_wait_for_dpm_enabled()
788 static void trinity_stop_dpm(struct radeon_device *rdev) in trinity_stop_dpm() argument
798 trinity_dpm_config(rdev, false); in trinity_stop_dpm()
801 static void trinity_start_am(struct radeon_device *rdev) in trinity_start_am() argument
806 static void trinity_reset_am(struct radeon_device *rdev) in trinity_reset_am() argument
812 static void trinity_wait_for_level_0(struct radeon_device *rdev) in trinity_wait_for_level_0() argument
816 for (i = 0; i < rdev->usec_timeout; i++) { in trinity_wait_for_level_0()
823 static void trinity_enable_power_level_0(struct radeon_device *rdev) in trinity_enable_power_level_0() argument
825 trinity_power_level_enable_disable(rdev, 0, true); in trinity_enable_power_level_0()
828 static void trinity_force_level_0(struct radeon_device *rdev) in trinity_force_level_0() argument
830 trinity_dpm_force_state(rdev, 0); in trinity_force_level_0()
833 static void trinity_unforce_levels(struct radeon_device *rdev) in trinity_unforce_levels() argument
835 trinity_dpm_no_forced_level(rdev); in trinity_unforce_levels()
838 static void trinity_program_power_levels_0_to_n(struct radeon_device *rdev, in trinity_program_power_levels_0_to_n() argument
848 trinity_program_power_level(rdev, &new_ps->levels[i], i); in trinity_program_power_levels_0_to_n()
849 trinity_power_level_enable_disable(rdev, i, true); in trinity_program_power_levels_0_to_n()
853 trinity_power_level_enable_disable(rdev, i, false); in trinity_program_power_levels_0_to_n()
856 static void trinity_program_bootup_state(struct radeon_device *rdev) in trinity_program_bootup_state() argument
858 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_program_bootup_state()
861 trinity_program_power_level(rdev, &pi->boot_pl, 0); in trinity_program_bootup_state()
862 trinity_power_level_enable_disable(rdev, 0, true); in trinity_program_bootup_state()
865 trinity_power_level_enable_disable(rdev, i, false); in trinity_program_bootup_state()
868 static void trinity_setup_uvd_clock_table(struct radeon_device *rdev, in trinity_setup_uvd_clock_table() argument
880 static void trinity_setup_uvd_dpm_interval(struct radeon_device *rdev, in trinity_setup_uvd_dpm_interval() argument
886 u32 xclk = radeon_get_xclk(rdev); in trinity_setup_uvd_dpm_interval()
920 static void trinity_setup_uvd_clocks(struct radeon_device *rdev, in trinity_setup_uvd_clocks() argument
924 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_setup_uvd_clocks()
927 trinity_gfx_powergating_enable(rdev, false); in trinity_setup_uvd_clocks()
933 trinity_setup_uvd_dpm_interval(rdev, 0); in trinity_setup_uvd_clocks()
935 trinity_setup_uvd_clock_table(rdev, new_rps); in trinity_setup_uvd_clocks()
942 radeon_set_uvd_clocks(rdev, new_rps->vclk, new_rps->dclk); in trinity_setup_uvd_clocks()
944 trinity_setup_uvd_dpm_interval(rdev, 3000); in trinity_setup_uvd_clocks()
947 trinity_uvd_dpm_config(rdev); in trinity_setup_uvd_clocks()
953 radeon_set_uvd_clocks(rdev, new_rps->vclk, new_rps->dclk); in trinity_setup_uvd_clocks()
957 trinity_gfx_powergating_enable(rdev, true); in trinity_setup_uvd_clocks()
961 static void trinity_set_uvd_clock_before_set_eng_clock(struct radeon_device *rdev, in trinity_set_uvd_clock_before_set_eng_clock() argument
972 trinity_setup_uvd_clocks(rdev, new_rps, old_rps); in trinity_set_uvd_clock_before_set_eng_clock()
975 static void trinity_set_uvd_clock_after_set_eng_clock(struct radeon_device *rdev, in trinity_set_uvd_clock_after_set_eng_clock() argument
986 trinity_setup_uvd_clocks(rdev, new_rps, old_rps); in trinity_set_uvd_clock_after_set_eng_clock()
989 static void trinity_set_vce_clock(struct radeon_device *rdev, in trinity_set_vce_clock() argument
997 vce_v1_0_enable_mgcg(rdev, false); in trinity_set_vce_clock()
999 vce_v1_0_enable_mgcg(rdev, true); in trinity_set_vce_clock()
1000 radeon_set_vce_clocks(rdev, new_rps->evclk, new_rps->ecclk); in trinity_set_vce_clock()
1004 static void trinity_program_ttt(struct radeon_device *rdev) in trinity_program_ttt() argument
1006 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_program_ttt()
1015 static void trinity_enable_att(struct radeon_device *rdev) in trinity_enable_att() argument
1024 static void trinity_program_sclk_dpm(struct radeon_device *rdev) in trinity_program_sclk_dpm() argument
1029 u32 xclk = radeon_get_xclk(rdev); in trinity_program_sclk_dpm()
1042 static int trinity_set_thermal_temperature_range(struct radeon_device *rdev, in trinity_set_thermal_temperature_range() argument
1060 rdev->pm.dpm.thermal.min_temp = low_temp; in trinity_set_thermal_temperature_range()
1061 rdev->pm.dpm.thermal.max_temp = high_temp; in trinity_set_thermal_temperature_range()
1066 static void trinity_update_current_ps(struct radeon_device *rdev, in trinity_update_current_ps() argument
1070 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_update_current_ps()
1077 static void trinity_update_requested_ps(struct radeon_device *rdev, in trinity_update_requested_ps() argument
1081 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_update_requested_ps()
1088 void trinity_dpm_enable_bapm(struct radeon_device *rdev, bool enable) in trinity_dpm_enable_bapm() argument
1090 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_enable_bapm()
1093 trinity_acquire_mutex(rdev); in trinity_dpm_enable_bapm()
1094 trinity_dpm_bapm_enable(rdev, enable); in trinity_dpm_enable_bapm()
1095 trinity_release_mutex(rdev); in trinity_dpm_enable_bapm()
1099 int trinity_dpm_enable(struct radeon_device *rdev) in trinity_dpm_enable() argument
1101 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_enable()
1103 trinity_acquire_mutex(rdev); in trinity_dpm_enable()
1105 if (trinity_dpm_enabled(rdev)) { in trinity_dpm_enable()
1106 trinity_release_mutex(rdev); in trinity_dpm_enable()
1110 trinity_program_bootup_state(rdev); in trinity_dpm_enable()
1111 sumo_program_vc(rdev, 0x00C00033); in trinity_dpm_enable()
1112 trinity_start_am(rdev); in trinity_dpm_enable()
1114 trinity_program_ttt(rdev); in trinity_dpm_enable()
1115 trinity_enable_att(rdev); in trinity_dpm_enable()
1117 trinity_program_sclk_dpm(rdev); in trinity_dpm_enable()
1118 trinity_start_dpm(rdev); in trinity_dpm_enable()
1119 trinity_wait_for_dpm_enabled(rdev); in trinity_dpm_enable()
1120 trinity_dpm_bapm_enable(rdev, false); in trinity_dpm_enable()
1121 trinity_release_mutex(rdev); in trinity_dpm_enable()
1123 trinity_update_current_ps(rdev, rdev->pm.dpm.boot_ps); in trinity_dpm_enable()
1128 int trinity_dpm_late_enable(struct radeon_device *rdev) in trinity_dpm_late_enable() argument
1132 trinity_acquire_mutex(rdev); in trinity_dpm_late_enable()
1133 trinity_enable_clock_power_gating(rdev); in trinity_dpm_late_enable()
1135 if (rdev->irq.installed && in trinity_dpm_late_enable()
1136 r600_is_internal_thermal_sensor(rdev->pm.int_thermal_type)) { in trinity_dpm_late_enable()
1137 ret = trinity_set_thermal_temperature_range(rdev, R600_TEMP_RANGE_MIN, R600_TEMP_RANGE_MAX); in trinity_dpm_late_enable()
1139 trinity_release_mutex(rdev); in trinity_dpm_late_enable()
1142 rdev->irq.dpm_thermal = true; in trinity_dpm_late_enable()
1143 radeon_irq_set(rdev); in trinity_dpm_late_enable()
1145 trinity_release_mutex(rdev); in trinity_dpm_late_enable()
1150 void trinity_dpm_disable(struct radeon_device *rdev) in trinity_dpm_disable() argument
1152 trinity_acquire_mutex(rdev); in trinity_dpm_disable()
1153 if (!trinity_dpm_enabled(rdev)) { in trinity_dpm_disable()
1154 trinity_release_mutex(rdev); in trinity_dpm_disable()
1157 trinity_dpm_bapm_enable(rdev, false); in trinity_dpm_disable()
1158 trinity_disable_clock_power_gating(rdev); in trinity_dpm_disable()
1159 sumo_clear_vc(rdev); in trinity_dpm_disable()
1160 trinity_wait_for_level_0(rdev); in trinity_dpm_disable()
1161 trinity_stop_dpm(rdev); in trinity_dpm_disable()
1162 trinity_reset_am(rdev); in trinity_dpm_disable()
1163 trinity_release_mutex(rdev); in trinity_dpm_disable()
1165 if (rdev->irq.installed && in trinity_dpm_disable()
1166 r600_is_internal_thermal_sensor(rdev->pm.int_thermal_type)) { in trinity_dpm_disable()
1167 rdev->irq.dpm_thermal = false; in trinity_dpm_disable()
1168 radeon_irq_set(rdev); in trinity_dpm_disable()
1171 trinity_update_current_ps(rdev, rdev->pm.dpm.boot_ps); in trinity_dpm_disable()
1174 static void trinity_get_min_sclk_divider(struct radeon_device *rdev) in trinity_get_min_sclk_divider() argument
1176 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_get_min_sclk_divider()
1182 static void trinity_setup_nbp_sim(struct radeon_device *rdev, in trinity_setup_nbp_sim() argument
1185 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_setup_nbp_sim()
1200 int trinity_dpm_force_performance_level(struct radeon_device *rdev, in trinity_dpm_force_performance_level() argument
1203 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_force_performance_level()
1215 ret = trinity_dpm_n_levels_disabled(rdev, ps->num_levels - 1); in trinity_dpm_force_performance_level()
1220 ret = trinity_dpm_n_levels_disabled(rdev, 0); in trinity_dpm_force_performance_level()
1226 rdev->pm.dpm.forced_level = level; in trinity_dpm_force_performance_level()
1231 int trinity_dpm_pre_set_power_state(struct radeon_device *rdev) in trinity_dpm_pre_set_power_state() argument
1233 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_pre_set_power_state()
1234 struct radeon_ps requested_ps = *rdev->pm.dpm.requested_ps; in trinity_dpm_pre_set_power_state()
1237 trinity_update_requested_ps(rdev, new_ps); in trinity_dpm_pre_set_power_state()
1239 trinity_apply_state_adjust_rules(rdev, in trinity_dpm_pre_set_power_state()
1246 int trinity_dpm_set_power_state(struct radeon_device *rdev) in trinity_dpm_set_power_state() argument
1248 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_set_power_state()
1252 trinity_acquire_mutex(rdev); in trinity_dpm_set_power_state()
1255 trinity_dpm_bapm_enable(rdev, rdev->pm.dpm.ac_power); in trinity_dpm_set_power_state()
1256 trinity_set_uvd_clock_before_set_eng_clock(rdev, new_ps, old_ps); in trinity_dpm_set_power_state()
1257 trinity_enable_power_level_0(rdev); in trinity_dpm_set_power_state()
1258 trinity_force_level_0(rdev); in trinity_dpm_set_power_state()
1259 trinity_wait_for_level_0(rdev); in trinity_dpm_set_power_state()
1260 trinity_setup_nbp_sim(rdev, new_ps); in trinity_dpm_set_power_state()
1261 trinity_program_power_levels_0_to_n(rdev, new_ps, old_ps); in trinity_dpm_set_power_state()
1262 trinity_force_level_0(rdev); in trinity_dpm_set_power_state()
1263 trinity_unforce_levels(rdev); in trinity_dpm_set_power_state()
1264 trinity_set_uvd_clock_after_set_eng_clock(rdev, new_ps, old_ps); in trinity_dpm_set_power_state()
1265 trinity_set_vce_clock(rdev, new_ps, old_ps); in trinity_dpm_set_power_state()
1267 trinity_release_mutex(rdev); in trinity_dpm_set_power_state()
1272 void trinity_dpm_post_set_power_state(struct radeon_device *rdev) in trinity_dpm_post_set_power_state() argument
1274 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_post_set_power_state()
1277 trinity_update_current_ps(rdev, new_ps); in trinity_dpm_post_set_power_state()
1280 void trinity_dpm_setup_asic(struct radeon_device *rdev) in trinity_dpm_setup_asic() argument
1282 trinity_acquire_mutex(rdev); in trinity_dpm_setup_asic()
1283 sumo_program_sstp(rdev); in trinity_dpm_setup_asic()
1284 sumo_take_smu_control(rdev, true); in trinity_dpm_setup_asic()
1285 trinity_get_min_sclk_divider(rdev); in trinity_dpm_setup_asic()
1286 trinity_release_mutex(rdev); in trinity_dpm_setup_asic()
1290 void trinity_dpm_reset_asic(struct radeon_device *rdev)
1292 struct trinity_power_info *pi = trinity_get_pi(rdev);
1294 trinity_acquire_mutex(rdev);
1296 trinity_enable_power_level_0(rdev);
1297 trinity_force_level_0(rdev);
1298 trinity_wait_for_level_0(rdev);
1299 trinity_program_bootup_state(rdev);
1300 trinity_force_level_0(rdev);
1301 trinity_unforce_levels(rdev);
1303 trinity_release_mutex(rdev);
1307 static u16 trinity_convert_voltage_index_to_value(struct radeon_device *rdev, in trinity_convert_voltage_index_to_value() argument
1310 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_convert_voltage_index_to_value()
1311 u32 vid_7bit = sumo_convert_vid2_to_vid7(rdev, &pi->sys_info.vid_mapping_table, vid_2bit); in trinity_convert_voltage_index_to_value()
1322 static void trinity_patch_boot_state(struct radeon_device *rdev, in trinity_patch_boot_state() argument
1325 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_patch_boot_state()
1333 static u8 trinity_calculate_vce_wm(struct radeon_device *rdev, u32 sclk) in trinity_calculate_vce_wm() argument
1340 static void trinity_construct_boot_state(struct radeon_device *rdev) in trinity_construct_boot_state() argument
1342 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_construct_boot_state()
1356 static u8 trinity_get_sleep_divider_id_from_clock(struct radeon_device *rdev, in trinity_get_sleep_divider_id_from_clock() argument
1359 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_get_sleep_divider_id_from_clock()
1380 static u32 trinity_get_valid_engine_clock(struct radeon_device *rdev, in trinity_get_valid_engine_clock() argument
1383 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_get_valid_engine_clock()
1397 static void trinity_patch_thermal_state(struct radeon_device *rdev, in trinity_patch_thermal_state() argument
1401 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_patch_thermal_state()
1421 trinity_get_sleep_divider_id_from_clock(rdev, ps->levels[0].sclk, sclk_in_sr); in trinity_patch_thermal_state()
1427 trinity_calculate_vce_wm(rdev, ps->levels[0].sclk); in trinity_patch_thermal_state()
1430 static u8 trinity_calculate_display_wm(struct radeon_device *rdev, in trinity_calculate_display_wm() argument
1450 static u32 trinity_get_uvd_clock_index(struct radeon_device *rdev, in trinity_get_uvd_clock_index() argument
1453 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_get_uvd_clock_index()
1469 static void trinity_adjust_uvd_state(struct radeon_device *rdev, in trinity_adjust_uvd_state() argument
1473 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_adjust_uvd_state()
1478 high_index = trinity_get_uvd_clock_index(rdev, rps); in trinity_adjust_uvd_state()
1503 static int trinity_get_vce_clock_voltage(struct radeon_device *rdev, in trinity_get_vce_clock_voltage() argument
1509 &rdev->pm.dpm.dyn_state.vce_clock_voltage_dependency_table; in trinity_get_vce_clock_voltage()
1533 static void trinity_apply_state_adjust_rules(struct radeon_device *rdev, in trinity_apply_state_adjust_rules() argument
1539 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_apply_state_adjust_rules()
1546 u32 num_active_displays = rdev->pm.dpm.new_active_crtc_count; in trinity_apply_state_adjust_rules()
1549 return trinity_patch_thermal_state(rdev, ps, current_ps); in trinity_apply_state_adjust_rules()
1551 trinity_adjust_uvd_state(rdev, new_rps); in trinity_apply_state_adjust_rules()
1554 new_rps->evclk = rdev->pm.dpm.vce_states[rdev->pm.dpm.vce_level].evclk; in trinity_apply_state_adjust_rules()
1555 new_rps->ecclk = rdev->pm.dpm.vce_states[rdev->pm.dpm.vce_level].ecclk; in trinity_apply_state_adjust_rules()
1567 trinity_get_valid_engine_clock(rdev, min_sclk); in trinity_apply_state_adjust_rules()
1572 if (ps->levels[i].sclk < rdev->pm.dpm.vce_states[rdev->pm.dpm.vce_level].sclk) in trinity_apply_state_adjust_rules()
1573 ps->levels[i].sclk = rdev->pm.dpm.vce_states[rdev->pm.dpm.vce_level].sclk; in trinity_apply_state_adjust_rules()
1575 trinity_get_vce_clock_voltage(rdev, new_rps->evclk, new_rps->ecclk, &min_vce_voltage); in trinity_apply_state_adjust_rules()
1581 sumo_get_sleep_divider_id_from_clock(rdev, ps->levels[i].sclk, sclk_in_sr); in trinity_apply_state_adjust_rules()
1588 trinity_calculate_display_wm(rdev, ps, i); in trinity_apply_state_adjust_rules()
1590 trinity_calculate_vce_wm(rdev, ps->levels[0].sclk); in trinity_apply_state_adjust_rules()
1618 static void trinity_cleanup_asic(struct radeon_device *rdev) in trinity_cleanup_asic() argument
1620 sumo_take_smu_control(rdev, false); in trinity_cleanup_asic()
1624 static void trinity_pre_display_configuration_change(struct radeon_device *rdev)
1626 struct trinity_power_info *pi = trinity_get_pi(rdev);
1629 trinity_dce_enable_voltage_adjustment(rdev, false);
1633 static void trinity_add_dccac_value(struct radeon_device *rdev) in trinity_add_dccac_value() argument
1636 u32 num_active_displays = rdev->pm.dpm.new_active_crtc_count; in trinity_add_dccac_value()
1637 u64 disp_clk = rdev->clock.default_dispclk / 100; in trinity_add_dccac_value()
1649 void trinity_dpm_display_configuration_changed(struct radeon_device *rdev) in trinity_dpm_display_configuration_changed() argument
1651 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_display_configuration_changed()
1654 trinity_dce_enable_voltage_adjustment(rdev, true); in trinity_dpm_display_configuration_changed()
1655 trinity_add_dccac_value(rdev); in trinity_dpm_display_configuration_changed()
1679 static void trinity_parse_pplib_non_clock_info(struct radeon_device *rdev, in trinity_parse_pplib_non_clock_info() argument
1699 rdev->pm.dpm.boot_ps = rps; in trinity_parse_pplib_non_clock_info()
1700 trinity_patch_boot_state(rdev, ps); in trinity_parse_pplib_non_clock_info()
1703 rdev->pm.dpm.uvd_ps = rps; in trinity_parse_pplib_non_clock_info()
1706 static void trinity_parse_pplib_clock_info(struct radeon_device *rdev, in trinity_parse_pplib_clock_info() argument
1710 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_parse_pplib_clock_info()
1728 static int trinity_parse_power_table(struct radeon_device *rdev) in trinity_parse_power_table() argument
1730 struct radeon_mode_info *mode_info = &rdev->mode_info; in trinity_parse_power_table()
1760 rdev->pm.dpm.ps = kzalloc(sizeof(struct radeon_ps) * in trinity_parse_power_table()
1762 if (!rdev->pm.dpm.ps) in trinity_parse_power_table()
1771 if (!rdev->pm.power_state[i].clock_info) in trinity_parse_power_table()
1775 kfree(rdev->pm.dpm.ps); in trinity_parse_power_table()
1778 rdev->pm.dpm.ps[i].ps_priv = ps; in trinity_parse_power_table()
1790 trinity_parse_pplib_clock_info(rdev, in trinity_parse_power_table()
1791 &rdev->pm.dpm.ps[i], k, in trinity_parse_power_table()
1795 trinity_parse_pplib_non_clock_info(rdev, &rdev->pm.dpm.ps[i], in trinity_parse_power_table()
1800 rdev->pm.dpm.num_ps = state_array->ucNumEntries; in trinity_parse_power_table()
1805 clock_array_index = rdev->pm.dpm.vce_states[i].clk_idx; in trinity_parse_power_table()
1810 rdev->pm.dpm.vce_states[i].sclk = sclk; in trinity_parse_power_table()
1811 rdev->pm.dpm.vce_states[i].mclk = 0; in trinity_parse_power_table()
1825 static u32 trinity_convert_did_to_freq(struct radeon_device *rdev, u8 did) in trinity_convert_did_to_freq() argument
1827 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_convert_did_to_freq()
1844 static int trinity_parse_sys_info_table(struct radeon_device *rdev) in trinity_parse_sys_info_table() argument
1846 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_parse_sys_info_table()
1847 struct radeon_mode_info *mode_info = &rdev->mode_info; in trinity_parse_sys_info_table()
1906 sumo_construct_sclk_voltage_mapping_table(rdev, in trinity_parse_sys_info_table()
1909 sumo_construct_vid_mapping_table(rdev, &pi->sys_info.vid_mapping_table, in trinity_parse_sys_info_table()
1932 trinity_convert_did_to_freq(rdev, in trinity_parse_sys_info_table()
1935 trinity_convert_did_to_freq(rdev, in trinity_parse_sys_info_table()
1945 int trinity_dpm_init(struct radeon_device *rdev) in trinity_dpm_init() argument
1953 rdev->pm.dpm.priv = pi; in trinity_dpm_init()
1965 if (rdev->pdev->subsystem_vendor == 0x1462) in trinity_dpm_init()
1985 ret = trinity_parse_sys_info_table(rdev); in trinity_dpm_init()
1989 trinity_construct_boot_state(rdev); in trinity_dpm_init()
1991 ret = r600_get_platform_caps(rdev); in trinity_dpm_init()
1995 ret = r600_parse_extended_power_table(rdev); in trinity_dpm_init()
1999 ret = trinity_parse_power_table(rdev); in trinity_dpm_init()
2009 void trinity_dpm_print_power_state(struct radeon_device *rdev, in trinity_dpm_print_power_state() argument
2022 trinity_convert_voltage_index_to_value(rdev, pl->vddc_index)); in trinity_dpm_print_power_state()
2024 r600_dpm_print_ps_status(rdev, rps); in trinity_dpm_print_power_state()
2027 void trinity_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev, in trinity_dpm_debugfs_print_current_performance_level() argument
2030 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_debugfs_print_current_performance_level()
2045 trinity_convert_voltage_index_to_value(rdev, pl->vddc_index)); in trinity_dpm_debugfs_print_current_performance_level()
2049 u32 trinity_dpm_get_current_sclk(struct radeon_device *rdev) in trinity_dpm_get_current_sclk() argument
2051 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_get_current_sclk()
2067 u32 trinity_dpm_get_current_mclk(struct radeon_device *rdev) in trinity_dpm_get_current_mclk() argument
2069 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_get_current_mclk()
2074 void trinity_dpm_fini(struct radeon_device *rdev) in trinity_dpm_fini() argument
2078 trinity_cleanup_asic(rdev); /* ??? */ in trinity_dpm_fini()
2080 for (i = 0; i < rdev->pm.dpm.num_ps; i++) { in trinity_dpm_fini()
2081 kfree(rdev->pm.dpm.ps[i].ps_priv); in trinity_dpm_fini()
2083 kfree(rdev->pm.dpm.ps); in trinity_dpm_fini()
2084 kfree(rdev->pm.dpm.priv); in trinity_dpm_fini()
2085 r600_free_extended_power_table(rdev); in trinity_dpm_fini()
2088 u32 trinity_dpm_get_sclk(struct radeon_device *rdev, bool low) in trinity_dpm_get_sclk() argument
2090 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_get_sclk()
2099 u32 trinity_dpm_get_mclk(struct radeon_device *rdev, bool low) in trinity_dpm_get_mclk() argument
2101 struct trinity_power_info *pi = trinity_get_pi(rdev); in trinity_dpm_get_mclk()