Lines Matching refs:hwmgr

29 int psm_init_power_state_table(struct pp_hwmgr *hwmgr)  in psm_init_power_state_table()  argument
37 if (hwmgr->hwmgr_func->get_num_of_pp_table_entries == NULL) in psm_init_power_state_table()
40 if (hwmgr->hwmgr_func->get_power_state_size == NULL) in psm_init_power_state_table()
43 hwmgr->num_ps = table_entries = hwmgr->hwmgr_func->get_num_of_pp_table_entries(hwmgr); in psm_init_power_state_table()
45 hwmgr->ps_size = size = hwmgr->hwmgr_func->get_power_state_size(hwmgr) + in psm_init_power_state_table()
53 hwmgr->ps = kcalloc(table_entries, size, GFP_KERNEL); in psm_init_power_state_table()
54 if (hwmgr->ps == NULL) in psm_init_power_state_table()
57 hwmgr->request_ps = kzalloc(size, GFP_KERNEL); in psm_init_power_state_table()
58 if (hwmgr->request_ps == NULL) { in psm_init_power_state_table()
59 kfree(hwmgr->ps); in psm_init_power_state_table()
60 hwmgr->ps = NULL; in psm_init_power_state_table()
64 hwmgr->current_ps = kzalloc(size, GFP_KERNEL); in psm_init_power_state_table()
65 if (hwmgr->current_ps == NULL) { in psm_init_power_state_table()
66 kfree(hwmgr->request_ps); in psm_init_power_state_table()
67 kfree(hwmgr->ps); in psm_init_power_state_table()
68 hwmgr->request_ps = NULL; in psm_init_power_state_table()
69 hwmgr->ps = NULL; in psm_init_power_state_table()
73 state = hwmgr->ps; in psm_init_power_state_table()
76 result = hwmgr->hwmgr_func->get_pp_table_entry(hwmgr, i, state); in psm_init_power_state_table()
79 hwmgr->boot_ps = state; in psm_init_power_state_table()
80 memcpy(hwmgr->current_ps, state, size); in psm_init_power_state_table()
81 memcpy(hwmgr->request_ps, state, size); in psm_init_power_state_table()
87 hwmgr->uvd_ps = state; in psm_init_power_state_table()
94 int psm_fini_power_state_table(struct pp_hwmgr *hwmgr) in psm_fini_power_state_table() argument
96 if (hwmgr == NULL) in psm_fini_power_state_table()
99 if (!hwmgr->ps) in psm_fini_power_state_table()
102 kfree(hwmgr->current_ps); in psm_fini_power_state_table()
103 kfree(hwmgr->request_ps); in psm_fini_power_state_table()
104 kfree(hwmgr->ps); in psm_fini_power_state_table()
105 hwmgr->request_ps = NULL; in psm_fini_power_state_table()
106 hwmgr->ps = NULL; in psm_fini_power_state_table()
107 hwmgr->current_ps = NULL; in psm_fini_power_state_table()
111 static int psm_get_ui_state(struct pp_hwmgr *hwmgr, in psm_get_ui_state() argument
119 table_entries = hwmgr->num_ps; in psm_get_ui_state()
120 state = hwmgr->ps; in psm_get_ui_state()
127 state = (struct pp_power_state *)((unsigned long)state + hwmgr->ps_size); in psm_get_ui_state()
132 static int psm_get_state_by_classification(struct pp_hwmgr *hwmgr, in psm_get_state_by_classification() argument
140 table_entries = hwmgr->num_ps; in psm_get_state_by_classification()
141 state = hwmgr->ps; in psm_get_state_by_classification()
148 state = (struct pp_power_state *)((unsigned long)state + hwmgr->ps_size); in psm_get_state_by_classification()
153 static int psm_set_states(struct pp_hwmgr *hwmgr, unsigned long state_id) in psm_set_states() argument
159 table_entries = hwmgr->num_ps; in psm_set_states()
161 state = hwmgr->ps; in psm_set_states()
165 memcpy(hwmgr->request_ps, state, hwmgr->ps_size); in psm_set_states()
168 state = (struct pp_power_state *)((unsigned long)state + hwmgr->ps_size); in psm_set_states()
173 int psm_set_boot_states(struct pp_hwmgr *hwmgr) in psm_set_boot_states() argument
178 if (!hwmgr->ps) in psm_set_boot_states()
181 if (!psm_get_state_by_classification(hwmgr, PP_StateClassificationFlag_Boot, in psm_set_boot_states()
183 ret = psm_set_states(hwmgr, state_id); in psm_set_boot_states()
188 int psm_set_performance_states(struct pp_hwmgr *hwmgr) in psm_set_performance_states() argument
193 if (!hwmgr->ps) in psm_set_performance_states()
196 if (!psm_get_ui_state(hwmgr, PP_StateUILabel_Performance, in psm_set_performance_states()
198 ret = psm_set_states(hwmgr, state_id); in psm_set_performance_states()
203 int psm_set_user_performance_state(struct pp_hwmgr *hwmgr, in psm_set_user_performance_state() argument
210 if (!hwmgr->ps) in psm_set_user_performance_state()
213 table_entries = hwmgr->num_ps; in psm_set_user_performance_state()
214 *state = hwmgr->ps; in psm_set_user_performance_state()
220 *state = (struct pp_power_state *)((uintptr_t)*state + hwmgr->ps_size); in psm_set_user_performance_state()
234 static void power_state_management(struct pp_hwmgr *hwmgr, in power_state_management() argument
244 requested = hwmgr->request_ps; in power_state_management()
246 pcurrent = hwmgr->current_ps; in power_state_management()
248 phm_apply_state_adjust_rules(hwmgr, requested, pcurrent); in power_state_management()
249 if (pcurrent == NULL || (0 != phm_check_states_equal(hwmgr, in power_state_management()
253 if (!equal || phm_check_smc_update_required_for_display_configuration(hwmgr)) { in power_state_management()
254 phm_set_power_state(hwmgr, &pcurrent->hardware, &requested->hardware); in power_state_management()
255 memcpy(hwmgr->current_ps, hwmgr->request_ps, hwmgr->ps_size); in power_state_management()
259 int psm_adjust_power_state_dynamic(struct pp_hwmgr *hwmgr, bool skip, in psm_adjust_power_state_dynamic() argument
268 phm_pre_display_configuration_changed(hwmgr); in psm_adjust_power_state_dynamic()
270 phm_display_configuration_changed(hwmgr); in psm_adjust_power_state_dynamic()
272 if (hwmgr->ps) in psm_adjust_power_state_dynamic()
273 power_state_management(hwmgr, new_ps); in psm_adjust_power_state_dynamic()
279 phm_apply_clock_adjust_rules(hwmgr); in psm_adjust_power_state_dynamic()
281 phm_notify_smc_display_config_after_ps_adjustment(hwmgr); in psm_adjust_power_state_dynamic()
283 if (!phm_force_dpm_levels(hwmgr, hwmgr->request_dpm_level)) in psm_adjust_power_state_dynamic()
284 hwmgr->dpm_level = hwmgr->request_dpm_level; in psm_adjust_power_state_dynamic()
286 if (hwmgr->dpm_level != AMD_DPM_FORCED_LEVEL_MANUAL) { in psm_adjust_power_state_dynamic()
287 index = fls(hwmgr->workload_mask); in psm_adjust_power_state_dynamic()
289 workload = hwmgr->workload_setting[index]; in psm_adjust_power_state_dynamic()
291 if (hwmgr->power_profile_mode != workload && hwmgr->hwmgr_func->set_power_profile_mode) in psm_adjust_power_state_dynamic()
292 hwmgr->hwmgr_func->set_power_profile_mode(hwmgr, &workload, 0); in psm_adjust_power_state_dynamic()