|
@@ -388,11 +388,33 @@ int pp_atomfwctrl_get_gpio_information(struct pp_hwmgr *hwmgr,
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+int pp_atomfwctrl__get_clk_information_by_clkid(struct pp_hwmgr *hwmgr, BIOS_CLKID id, uint32_t *frequency)
|
|
|
|
|
+{
|
|
|
|
|
+ struct atom_get_smu_clock_info_parameters_v3_1 parameters;
|
|
|
|
|
+ struct atom_get_smu_clock_info_output_parameters_v3_1 *output;
|
|
|
|
|
+ uint32_t ix;
|
|
|
|
|
+
|
|
|
|
|
+ parameters.clk_id = id;
|
|
|
|
|
+ parameters.command = GET_SMU_CLOCK_INFO_V3_1_GET_CLOCK_FREQ;
|
|
|
|
|
+
|
|
|
|
|
+ ix = GetIndexIntoMasterCmdTable(getsmuclockinfo);
|
|
|
|
|
+ if (!cgs_atom_exec_cmd_table(hwmgr->device, ix, ¶meters)) {
|
|
|
|
|
+ output = (struct atom_get_smu_clock_info_output_parameters_v3_1 *)¶meters;
|
|
|
|
|
+ *frequency = output->atom_smu_outputclkfreq.smu_clock_freq_hz / 10000;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ pr_info("Error execute_table getsmuclockinfo!");
|
|
|
|
|
+ return -1;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
int pp_atomfwctrl_get_vbios_bootup_values(struct pp_hwmgr *hwmgr,
|
|
int pp_atomfwctrl_get_vbios_bootup_values(struct pp_hwmgr *hwmgr,
|
|
|
struct pp_atomfwctrl_bios_boot_up_values *boot_values)
|
|
struct pp_atomfwctrl_bios_boot_up_values *boot_values)
|
|
|
{
|
|
{
|
|
|
struct atom_firmware_info_v3_1 *info = NULL;
|
|
struct atom_firmware_info_v3_1 *info = NULL;
|
|
|
uint16_t ix;
|
|
uint16_t ix;
|
|
|
|
|
+ uint32_t frequency = 0;
|
|
|
|
|
|
|
|
ix = GetIndexIntoMasterDataTable(firmwareinfo);
|
|
ix = GetIndexIntoMasterDataTable(firmwareinfo);
|
|
|
info = (struct atom_firmware_info_v3_1 *)
|
|
info = (struct atom_firmware_info_v3_1 *)
|
|
@@ -407,11 +429,18 @@ int pp_atomfwctrl_get_vbios_bootup_values(struct pp_hwmgr *hwmgr,
|
|
|
boot_values->ulRevision = info->firmware_revision;
|
|
boot_values->ulRevision = info->firmware_revision;
|
|
|
boot_values->ulGfxClk = info->bootup_sclk_in10khz;
|
|
boot_values->ulGfxClk = info->bootup_sclk_in10khz;
|
|
|
boot_values->ulUClk = info->bootup_mclk_in10khz;
|
|
boot_values->ulUClk = info->bootup_mclk_in10khz;
|
|
|
- boot_values->ulSocClk = 0;
|
|
|
|
|
boot_values->usVddc = info->bootup_vddc_mv;
|
|
boot_values->usVddc = info->bootup_vddc_mv;
|
|
|
boot_values->usVddci = info->bootup_vddci_mv;
|
|
boot_values->usVddci = info->bootup_vddci_mv;
|
|
|
boot_values->usMvddc = info->bootup_mvddc_mv;
|
|
boot_values->usMvddc = info->bootup_mvddc_mv;
|
|
|
boot_values->usVddGfx = info->bootup_vddgfx_mv;
|
|
boot_values->usVddGfx = info->bootup_vddgfx_mv;
|
|
|
|
|
+ boot_values->ulSocClk = 0;
|
|
|
|
|
+ boot_values->ulDCEFClk = 0;
|
|
|
|
|
+
|
|
|
|
|
+ if (!pp_atomfwctrl__get_clk_information_by_clkid(hwmgr, SMU9_SYSPLL0_SOCCLK_ID, &frequency))
|
|
|
|
|
+ boot_values->ulSocClk = frequency;
|
|
|
|
|
+
|
|
|
|
|
+ if (!pp_atomfwctrl__get_clk_information_by_clkid(hwmgr, SMU9_SYSPLL0_DCEFCLK_ID, &frequency))
|
|
|
|
|
+ boot_values->ulDCEFClk = frequency;
|
|
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|