drm/amd/powerplay: add atomctrl_get_voltage_evv function in ppatomctrl
The atomctrl_get_voltage_evv function will be used on iceland HW manager. Signed-off-by: Huang Rui <ray.huang@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
0a552a3296
commit
e68d46484f
|
@ -1079,6 +1079,52 @@ int atomctrl_get_voltage_evv_on_sclk(
|
|||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* atomctrl_get_voltage_evv gets voltage via call to ATOM COMMAND table.
|
||||
* @param hwmgr input: pointer to hwManager
|
||||
* @param virtual_voltage_id input: voltage id which match per voltage DPM state: 0xff01, 0xff02.. 0xff08
|
||||
* @param voltage output: real voltage level in unit of mv
|
||||
*/
|
||||
int atomctrl_get_voltage_evv(struct pp_hwmgr *hwmgr,
|
||||
uint16_t virtual_voltage_id,
|
||||
uint16_t *voltage)
|
||||
{
|
||||
int result;
|
||||
int entry_id;
|
||||
GET_VOLTAGE_INFO_INPUT_PARAMETER_V1_2 get_voltage_info_param_space;
|
||||
|
||||
/* search for leakage voltage ID 0xff01 ~ 0xff08 and sckl */
|
||||
for (entry_id = 0; entry_id < hwmgr->dyn_state.vddc_dependency_on_sclk->count; entry_id++) {
|
||||
if (hwmgr->dyn_state.vddc_dependency_on_sclk->entries[entry_id].v == virtual_voltage_id) {
|
||||
/* found */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
PP_ASSERT_WITH_CODE(entry_id < hwmgr->dyn_state.vddc_dependency_on_sclk->count,
|
||||
"Can't find requested voltage id in vddc_dependency_on_sclk table!",
|
||||
return -EINVAL;
|
||||
);
|
||||
|
||||
get_voltage_info_param_space.ucVoltageType = VOLTAGE_TYPE_VDDC;
|
||||
get_voltage_info_param_space.ucVoltageMode = ATOM_GET_VOLTAGE_EVV_VOLTAGE;
|
||||
get_voltage_info_param_space.usVoltageLevel = virtual_voltage_id;
|
||||
get_voltage_info_param_space.ulSCLKFreq =
|
||||
cpu_to_le32(hwmgr->dyn_state.vddc_dependency_on_sclk->entries[entry_id].clk);
|
||||
|
||||
result = cgs_atom_exec_cmd_table(hwmgr->device,
|
||||
GetIndexIntoMasterTable(COMMAND, GetVoltageInfo),
|
||||
&get_voltage_info_param_space);
|
||||
|
||||
if (0 != result)
|
||||
return result;
|
||||
|
||||
*voltage = le16_to_cpu(((GET_EVV_VOLTAGE_INFO_OUTPUT_PARAMETER_V1_2 *)
|
||||
(&get_voltage_info_param_space))->usVoltageLevel);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the mpll reference clock in 10KHz
|
||||
*/
|
||||
|
|
|
@ -281,6 +281,7 @@ struct pp_atom_ctrl__avfs_parameters {
|
|||
|
||||
extern bool atomctrl_get_pp_assign_pin(struct pp_hwmgr *hwmgr, const uint32_t pinId, pp_atomctrl_gpio_pin_assignment *gpio_pin_assignment);
|
||||
extern int atomctrl_get_voltage_evv_on_sclk(struct pp_hwmgr *hwmgr, uint8_t voltage_type, uint32_t sclk, uint16_t virtual_voltage_Id, uint16_t *voltage);
|
||||
extern int atomctrl_get_voltage_evv(struct pp_hwmgr *hwmgr, uint16_t virtual_voltage_id, uint16_t *voltage);
|
||||
extern uint32_t atomctrl_get_mpll_reference_clock(struct pp_hwmgr *hwmgr);
|
||||
extern int atomctrl_get_memory_clock_spread_spectrum(struct pp_hwmgr *hwmgr, const uint32_t memory_clock, pp_atomctrl_internal_ss_info *ssInfo);
|
||||
extern int atomctrl_get_engine_clock_spread_spectrum(struct pp_hwmgr *hwmgr, const uint32_t engine_clock, pp_atomctrl_internal_ss_info *ssInfo);
|
||||
|
|
Loading…
Reference in New Issue