Lines Matching refs:hwmgr
108 static int iceland_start_smc(struct pp_hwmgr *hwmgr) in iceland_start_smc() argument
110 PHM_WRITE_INDIRECT_FIELD(hwmgr->device, CGS_IND_REG__SMC, in iceland_start_smc()
116 static void iceland_reset_smc(struct pp_hwmgr *hwmgr) in iceland_reset_smc() argument
118 PHM_WRITE_INDIRECT_FIELD(hwmgr->device, CGS_IND_REG__SMC, in iceland_reset_smc()
124 static void iceland_stop_smc_clock(struct pp_hwmgr *hwmgr) in iceland_stop_smc_clock() argument
126 PHM_WRITE_INDIRECT_FIELD(hwmgr->device, CGS_IND_REG__SMC, in iceland_stop_smc_clock()
131 static void iceland_start_smc_clock(struct pp_hwmgr *hwmgr) in iceland_start_smc_clock() argument
133 PHM_WRITE_INDIRECT_FIELD(hwmgr->device, CGS_IND_REG__SMC, in iceland_start_smc_clock()
138 static int iceland_smu_start_smc(struct pp_hwmgr *hwmgr) in iceland_smu_start_smc() argument
141 smu7_program_jump_on_start(hwmgr); in iceland_smu_start_smc()
144 iceland_start_smc_clock(hwmgr); in iceland_smu_start_smc()
147 iceland_start_smc(hwmgr); in iceland_smu_start_smc()
149 PHM_WAIT_INDIRECT_FIELD(hwmgr, SMC_IND, FIRMWARE_FLAGS, in iceland_smu_start_smc()
156 static int iceland_upload_smc_firmware_data(struct pp_hwmgr *hwmgr, in iceland_upload_smc_firmware_data() argument
165 cgs_write_register(hwmgr->device, mmSMC_IND_INDEX_0, start_addr); in iceland_upload_smc_firmware_data()
166 PHM_WRITE_FIELD(hwmgr->device, SMC_IND_ACCESS_CNTL, AUTO_INCREMENT_IND_0, 1); in iceland_upload_smc_firmware_data()
170 cgs_write_register(hwmgr->device, mmSMC_IND_DATA_0, data); in iceland_upload_smc_firmware_data()
175 PHM_WRITE_FIELD(hwmgr->device, SMC_IND_ACCESS_CNTL, AUTO_INCREMENT_IND_0, 0); in iceland_upload_smc_firmware_data()
183 static int iceland_smu_upload_firmware_image(struct pp_hwmgr *hwmgr) in iceland_smu_upload_firmware_image() argument
188 if (hwmgr == NULL || hwmgr->device == NULL) in iceland_smu_upload_firmware_image()
192 cgs_get_firmware_info(hwmgr->device, in iceland_smu_upload_firmware_image()
204 hwmgr->smu_version = info.version; in iceland_smu_upload_firmware_image()
206 PHM_WAIT_INDIRECT_FIELD_UNEQUAL(hwmgr, SMC_IND, in iceland_smu_upload_firmware_image()
210 val = cgs_read_ind_register(hwmgr->device, CGS_IND_REG__SMC, in iceland_smu_upload_firmware_image()
212 cgs_write_ind_register(hwmgr->device, CGS_IND_REG__SMC, in iceland_smu_upload_firmware_image()
216 iceland_stop_smc_clock(hwmgr); in iceland_smu_upload_firmware_image()
219 iceland_reset_smc(hwmgr); in iceland_smu_upload_firmware_image()
220 iceland_upload_smc_firmware_data(hwmgr, info.image_size, in iceland_smu_upload_firmware_image()
227 static int iceland_request_smu_load_specific_fw(struct pp_hwmgr *hwmgr, in iceland_request_smu_load_specific_fw() argument
233 static int iceland_start_smu(struct pp_hwmgr *hwmgr) in iceland_start_smu() argument
237 result = iceland_smu_upload_firmware_image(hwmgr); in iceland_start_smu()
240 result = iceland_smu_start_smc(hwmgr); in iceland_start_smu()
244 if (!smu7_is_smc_ram_running(hwmgr)) { in iceland_start_smu()
246 result = iceland_smu_upload_firmware_image(hwmgr); in iceland_start_smu()
250 result = iceland_smu_start_smc(hwmgr); in iceland_start_smu()
255 result = smu7_request_smu_load_fw(hwmgr); in iceland_start_smu()
260 static int iceland_smu_init(struct pp_hwmgr *hwmgr) in iceland_smu_init() argument
269 hwmgr->smu_backend = iceland_priv; in iceland_smu_init()
271 if (smu7_init(hwmgr)) { in iceland_smu_init()
280 static void iceland_initialize_power_tune_defaults(struct pp_hwmgr *hwmgr) in iceland_initialize_power_tune_defaults() argument
282 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_initialize_power_tune_defaults()
283 struct amdgpu_device *adev = hwmgr->adev; in iceland_initialize_power_tune_defaults()
306 static int iceland_populate_svi_load_line(struct pp_hwmgr *hwmgr) in iceland_populate_svi_load_line() argument
308 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_populate_svi_load_line()
319 static int iceland_populate_tdc_limit(struct pp_hwmgr *hwmgr) in iceland_populate_tdc_limit() argument
322 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_populate_tdc_limit()
325 tdc_limit = (uint16_t)(hwmgr->dyn_state.cac_dtp_table->usTDC * 256); in iceland_populate_tdc_limit()
335 static int iceland_populate_dw8(struct pp_hwmgr *hwmgr, uint32_t fuse_table_offset) in iceland_populate_dw8() argument
337 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_populate_dw8()
341 if (smu7_read_smc_sram_dword(hwmgr, in iceland_populate_dw8()
354 static int iceland_populate_temperature_scaler(struct pp_hwmgr *hwmgr) in iceland_populate_temperature_scaler() argument
359 static int iceland_populate_gnb_lpml(struct pp_hwmgr *hwmgr) in iceland_populate_gnb_lpml() argument
362 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_populate_gnb_lpml()
371 static int iceland_populate_bapm_vddc_base_leakage_sidd(struct pp_hwmgr *hwmgr) in iceland_populate_bapm_vddc_base_leakage_sidd() argument
373 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_populate_bapm_vddc_base_leakage_sidd()
376 struct phm_cac_tdp_table *cac_table = hwmgr->dyn_state.cac_dtp_table; in iceland_populate_bapm_vddc_base_leakage_sidd()
389 static int iceland_populate_bapm_vddc_vid_sidd(struct pp_hwmgr *hwmgr) in iceland_populate_bapm_vddc_vid_sidd() argument
392 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_populate_bapm_vddc_vid_sidd()
396 PP_ASSERT_WITH_CODE(NULL != hwmgr->dyn_state.cac_leakage_table, in iceland_populate_bapm_vddc_vid_sidd()
398 PP_ASSERT_WITH_CODE(hwmgr->dyn_state.cac_leakage_table->count <= 8, in iceland_populate_bapm_vddc_vid_sidd()
400 …PP_ASSERT_WITH_CODE(hwmgr->dyn_state.cac_leakage_table->count == hwmgr->dyn_state.vddc_dependency_… in iceland_populate_bapm_vddc_vid_sidd()
403 if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_EVV)) { in iceland_populate_bapm_vddc_vid_sidd()
404 for (i = 0; (uint32_t) i < hwmgr->dyn_state.cac_leakage_table->count; i++) { in iceland_populate_bapm_vddc_vid_sidd()
405 lo_vid[i] = convert_to_vid(hwmgr->dyn_state.cac_leakage_table->entries[i].Vddc1); in iceland_populate_bapm_vddc_vid_sidd()
406 hi_vid[i] = convert_to_vid(hwmgr->dyn_state.cac_leakage_table->entries[i].Vddc2); in iceland_populate_bapm_vddc_vid_sidd()
415 static int iceland_populate_vddc_vid(struct pp_hwmgr *hwmgr) in iceland_populate_vddc_vid() argument
418 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_populate_vddc_vid()
420 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_populate_vddc_vid()
435 static int iceland_populate_pm_fuses(struct pp_hwmgr *hwmgr) in iceland_populate_pm_fuses() argument
437 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_populate_pm_fuses()
440 if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, in iceland_populate_pm_fuses()
442 if (smu7_read_smc_sram_dword(hwmgr, in iceland_populate_pm_fuses()
451 if (iceland_populate_bapm_vddc_vid_sidd(hwmgr)) in iceland_populate_pm_fuses()
457 if (iceland_populate_vddc_vid(hwmgr)) in iceland_populate_pm_fuses()
463 if (iceland_populate_svi_load_line(hwmgr)) in iceland_populate_pm_fuses()
468 if (iceland_populate_tdc_limit(hwmgr)) in iceland_populate_pm_fuses()
472 if (iceland_populate_dw8(hwmgr, pm_fuse_table_offset)) in iceland_populate_pm_fuses()
479 if (0 != iceland_populate_temperature_scaler(hwmgr)) in iceland_populate_pm_fuses()
485 if (iceland_populate_gnb_lpml(hwmgr)) in iceland_populate_pm_fuses()
491 if (iceland_populate_bapm_vddc_base_leakage_sidd(hwmgr)) in iceland_populate_pm_fuses()
496 if (smu7_copy_bytes_to_smc(hwmgr, pm_fuse_table_offset, in iceland_populate_pm_fuses()
506 static int iceland_get_dependency_volt_by_clk(struct pp_hwmgr *hwmgr, in iceland_get_dependency_volt_by_clk() argument
530 static int iceland_get_std_voltage_value_sidd(struct pp_hwmgr *hwmgr, in iceland_get_std_voltage_value_sidd() argument
540 PP_ASSERT_WITH_CODE(NULL != hwmgr->dyn_state.vddc_dependency_on_sclk, in iceland_get_std_voltage_value_sidd()
544 if (NULL == hwmgr->dyn_state.cac_leakage_table) { in iceland_get_std_voltage_value_sidd()
554 for (v_index = 0; (uint32_t)v_index < hwmgr->dyn_state.vddc_dependency_on_sclk->count; v_index++) { in iceland_get_std_voltage_value_sidd()
555 if (tab->value == hwmgr->dyn_state.vddc_dependency_on_sclk->entries[v_index].v) { in iceland_get_std_voltage_value_sidd()
557 if ((uint32_t)v_index < hwmgr->dyn_state.cac_leakage_table->count) { in iceland_get_std_voltage_value_sidd()
558 *lo = hwmgr->dyn_state.cac_leakage_table->entries[v_index].Vddc * VOLTAGE_SCALE; in iceland_get_std_voltage_value_sidd()
559 *hi = (uint16_t)(hwmgr->dyn_state.cac_leakage_table->entries[v_index].Leakage * VOLTAGE_SCALE); in iceland_get_std_voltage_value_sidd()
562 …*lo = hwmgr->dyn_state.cac_leakage_table->entries[hwmgr->dyn_state.cac_leakage_table->count - 1].V… in iceland_get_std_voltage_value_sidd()
563 …*hi = (uint16_t)(hwmgr->dyn_state.cac_leakage_table->entries[hwmgr->dyn_state.cac_leakage_table->c… in iceland_get_std_voltage_value_sidd()
574 …for (v_index = 0; (uint32_t)v_index < hwmgr->dyn_state.vddc_dependency_on_sclk->count; v_index++) { in iceland_get_std_voltage_value_sidd()
575 if (tab->value <= hwmgr->dyn_state.vddc_dependency_on_sclk->entries[v_index].v) { in iceland_get_std_voltage_value_sidd()
577 if ((uint32_t)v_index < hwmgr->dyn_state.cac_leakage_table->count) { in iceland_get_std_voltage_value_sidd()
578 *lo = hwmgr->dyn_state.cac_leakage_table->entries[v_index].Vddc * VOLTAGE_SCALE; in iceland_get_std_voltage_value_sidd()
579 *hi = (uint16_t)(hwmgr->dyn_state.cac_leakage_table->entries[v_index].Leakage) * VOLTAGE_SCALE; in iceland_get_std_voltage_value_sidd()
582 …*lo = hwmgr->dyn_state.cac_leakage_table->entries[hwmgr->dyn_state.cac_leakage_table->count - 1].V… in iceland_get_std_voltage_value_sidd()
583 …*hi = (uint16_t)(hwmgr->dyn_state.cac_leakage_table->entries[hwmgr->dyn_state.cac_leakage_table->c… in iceland_get_std_voltage_value_sidd()
596 static int iceland_populate_smc_voltage_table(struct pp_hwmgr *hwmgr, in iceland_populate_smc_voltage_table() argument
602 result = iceland_get_std_voltage_value_sidd(hwmgr, tab, in iceland_populate_smc_voltage_table()
617 static int iceland_populate_smc_vddc_table(struct pp_hwmgr *hwmgr, in iceland_populate_smc_vddc_table() argument
622 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_populate_smc_vddc_table()
626 result = iceland_populate_smc_voltage_table(hwmgr, in iceland_populate_smc_vddc_table()
643 static int iceland_populate_smc_vdd_ci_table(struct pp_hwmgr *hwmgr, in iceland_populate_smc_vdd_ci_table() argument
646 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_populate_smc_vdd_ci_table()
653 result = iceland_populate_smc_voltage_table(hwmgr, in iceland_populate_smc_vdd_ci_table()
668 static int iceland_populate_smc_mvdd_table(struct pp_hwmgr *hwmgr, in iceland_populate_smc_mvdd_table() argument
671 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_populate_smc_mvdd_table()
678 result = iceland_populate_smc_voltage_table(hwmgr, in iceland_populate_smc_mvdd_table()
694 static int iceland_populate_smc_voltage_tables(struct pp_hwmgr *hwmgr, in iceland_populate_smc_voltage_tables() argument
699 result = iceland_populate_smc_vddc_table(hwmgr, table); in iceland_populate_smc_voltage_tables()
703 result = iceland_populate_smc_vdd_ci_table(hwmgr, table); in iceland_populate_smc_voltage_tables()
707 result = iceland_populate_smc_mvdd_table(hwmgr, table); in iceland_populate_smc_voltage_tables()
714 static int iceland_populate_ulv_level(struct pp_hwmgr *hwmgr, in iceland_populate_ulv_level() argument
719 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_populate_ulv_level()
724 result = pp_tables_get_response_times(hwmgr, &voltage_response_time, &ulv_voltage); in iceland_populate_ulv_level()
734 if (ulv_voltage > hwmgr->dyn_state.vddc_dependency_on_sclk->entries[0].v) in iceland_populate_ulv_level()
738 …state->VddcOffset = (uint16_t)(hwmgr->dyn_state.vddc_dependency_on_sclk->entries[0].v - ulv_voltag… in iceland_populate_ulv_level()
741 if (ulv_voltage > hwmgr->dyn_state.vddc_dependency_on_sclk->entries[0].v) in iceland_populate_ulv_level()
745 (hwmgr->dyn_state.vddc_dependency_on_sclk->entries[0].v - ulv_voltage) in iceland_populate_ulv_level()
758 static int iceland_populate_ulv_state(struct pp_hwmgr *hwmgr, in iceland_populate_ulv_state() argument
761 return iceland_populate_ulv_level(hwmgr, ulv_level); in iceland_populate_ulv_state()
764 static int iceland_populate_smc_link_level(struct pp_hwmgr *hwmgr, SMU71_Discrete_DpmTable *table) in iceland_populate_smc_link_level() argument
766 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_populate_smc_link_level()
768 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_populate_smc_link_level()
795 static int iceland_calculate_sclk_params(struct pp_hwmgr *hwmgr, in iceland_calculate_sclk_params() argument
798 const struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_calculate_sclk_params()
811 result = atomctrl_get_engine_pll_dividers_vi(hwmgr, engine_clock, ÷rs); in iceland_calculate_sclk_params()
817 reference_clock = atomctrl_get_reference_clock(hwmgr); in iceland_calculate_sclk_params()
838 if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, in iceland_calculate_sclk_params()
843 if (0 == atomctrl_get_engine_clock_spread_spectrum(hwmgr, vcoFreq, &ss_info)) { in iceland_calculate_sclk_params()
873 static int iceland_populate_phase_value_based_on_sclk(struct pp_hwmgr *hwmgr, in iceland_populate_phase_value_based_on_sclk() argument
891 static int iceland_populate_single_graphic_level(struct pp_hwmgr *hwmgr, in iceland_populate_single_graphic_level() argument
896 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_populate_single_graphic_level()
898 result = iceland_calculate_sclk_params(hwmgr, engine_clock, graphic_level); in iceland_populate_single_graphic_level()
901 result = iceland_get_dependency_volt_by_clk(hwmgr, in iceland_populate_single_graphic_level()
902 hwmgr->dyn_state.vddc_dependency_on_sclk, engine_clock, in iceland_populate_single_graphic_level()
912 iceland_populate_phase_value_based_on_sclk(hwmgr, in iceland_populate_single_graphic_level()
913 hwmgr->dyn_state.vddc_phase_shed_limits_table, in iceland_populate_single_graphic_level()
932 hwmgr->display_config->min_core_set_clock_in_sr; in iceland_populate_single_graphic_level()
934 if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, in iceland_populate_single_graphic_level()
959 static int iceland_populate_all_graphic_levels(struct pp_hwmgr *hwmgr) in iceland_populate_all_graphic_levels() argument
961 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_populate_all_graphic_levels()
962 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_populate_all_graphic_levels()
981 result = iceland_populate_single_graphic_level(hwmgr, in iceland_populate_all_graphic_levels()
1037 result = smu7_copy_bytes_to_smc(hwmgr, level_array_adress, in iceland_populate_all_graphic_levels()
1045 struct pp_hwmgr *hwmgr, in iceland_calculate_mclk_params() argument
1052 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_calculate_mclk_params()
1067 result = atomctrl_get_memory_pll_dividers_si(hwmgr, in iceland_calculate_mclk_params()
1095 if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, in iceland_calculate_mclk_params()
1115 uint32_t reference_clock = atomctrl_get_mpll_reference_clock(hwmgr); in iceland_calculate_mclk_params()
1127 if (0 == atomctrl_get_memory_clock_spread_spectrum(hwmgr, freq_nom, &ss_info)) { in iceland_calculate_mclk_params()
1210 static int iceland_populate_phase_value_based_on_mclk(struct pp_hwmgr *hwmgr, const struct phm_phas… in iceland_populate_phase_value_based_on_mclk() argument
1228 struct pp_hwmgr *hwmgr, in iceland_populate_single_memory_level() argument
1233 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_populate_single_memory_level()
1240 if (hwmgr->dyn_state.vddc_dependency_on_mclk != NULL) { in iceland_populate_single_memory_level()
1241 result = iceland_get_dependency_volt_by_clk(hwmgr, in iceland_populate_single_memory_level()
1242 hwmgr->dyn_state.vddc_dependency_on_mclk, memory_clock, &memory_level->MinVddc); in iceland_populate_single_memory_level()
1249 } else if (NULL != hwmgr->dyn_state.vddci_dependency_on_mclk) { in iceland_populate_single_memory_level()
1250 result = iceland_get_dependency_volt_by_clk(hwmgr, in iceland_populate_single_memory_level()
1251 hwmgr->dyn_state.vddci_dependency_on_mclk, in iceland_populate_single_memory_level()
1261 iceland_populate_phase_value_based_on_mclk(hwmgr, hwmgr->dyn_state.vddc_phase_shed_limits_table, in iceland_populate_single_memory_level()
1282 data->display_timing.num_existing_displays = hwmgr->display_config->num_display; in iceland_populate_single_memory_level()
1307 ((cgs_read_register(hwmgr->device, mmMC_SEQ_MISC7) >> 16) & 0xf)) in iceland_populate_single_memory_level()
1308 dll_state_on = ((cgs_read_register(hwmgr->device, mmMC_SEQ_MISC5) >> 1) & 0x1) ? 1 : 0; in iceland_populate_single_memory_level()
1310 dll_state_on = ((cgs_read_register(hwmgr->device, mmMC_SEQ_MISC6) >> 1) & 0x1) ? 1 : 0; in iceland_populate_single_memory_level()
1316 dll_state_on = ((cgs_read_register(hwmgr->device, mmMC_SEQ_MISC5) >> 1) & 0x1) ? 1 : 0; in iceland_populate_single_memory_level()
1319 result = iceland_calculate_mclk_params(hwmgr, in iceland_populate_single_memory_level()
1345 static int iceland_populate_all_memory_levels(struct pp_hwmgr *hwmgr) in iceland_populate_all_memory_levels() argument
1347 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_populate_all_memory_levels()
1348 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_populate_all_memory_levels()
1363 result = iceland_populate_single_memory_level(hwmgr, dpm_table->mclk_table.dpm_levels[i].value, in iceland_populate_all_memory_levels()
1387 result = smu7_copy_bytes_to_smc(hwmgr, in iceland_populate_all_memory_levels()
1394 static int iceland_populate_mvdd_value(struct pp_hwmgr *hwmgr, uint32_t mclk, in iceland_populate_mvdd_value() argument
1397 const struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_populate_mvdd_value()
1403 for (i = 0; i < hwmgr->dyn_state.mvdd_dependency_on_mclk->count; i++) { in iceland_populate_mvdd_value()
1404 if (mclk <= hwmgr->dyn_state.mvdd_dependency_on_mclk->entries[i].clk) { in iceland_populate_mvdd_value()
1411 PP_ASSERT_WITH_CODE(i < hwmgr->dyn_state.mvdd_dependency_on_mclk->count, in iceland_populate_mvdd_value()
1421 static int iceland_populate_smc_acpi_level(struct pp_hwmgr *hwmgr, in iceland_populate_smc_acpi_level() argument
1425 const struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_populate_smc_acpi_level()
1446 table->ACPILevel.SclkFrequency = atomctrl_get_reference_clock(hwmgr); in iceland_populate_smc_acpi_level()
1449 result = atomctrl_get_engine_pll_dividers_vi(hwmgr, in iceland_populate_smc_acpi_level()
1503 if (0 == iceland_populate_mvdd_value(hwmgr, 0, &voltage_level)) in iceland_populate_smc_acpi_level()
1563 static int iceland_populate_smc_uvd_level(struct pp_hwmgr *hwmgr, in iceland_populate_smc_uvd_level() argument
1569 static int iceland_populate_smc_vce_level(struct pp_hwmgr *hwmgr, in iceland_populate_smc_vce_level() argument
1575 static int iceland_populate_smc_acp_level(struct pp_hwmgr *hwmgr, in iceland_populate_smc_acp_level() argument
1582 struct pp_hwmgr *hwmgr, in iceland_populate_memory_timing_parameters() argument
1593 result = atomctrl_set_engine_dram_timings_rv770(hwmgr, in iceland_populate_memory_timing_parameters()
1599 dramTiming = cgs_read_register(hwmgr->device, mmMC_ARB_DRAM_TIMING); in iceland_populate_memory_timing_parameters()
1600 dramTiming2 = cgs_read_register(hwmgr->device, mmMC_ARB_DRAM_TIMING2); in iceland_populate_memory_timing_parameters()
1601 burstTime = PHM_READ_FIELD(hwmgr->device, MC_ARB_BURST_TIME, STATE0); in iceland_populate_memory_timing_parameters()
1610 static int iceland_program_memory_timing_parameters(struct pp_hwmgr *hwmgr) in iceland_program_memory_timing_parameters() argument
1612 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_program_memory_timing_parameters()
1613 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_program_memory_timing_parameters()
1623 (hwmgr, data->dpm_table.sclk_table.dpm_levels[i].value, in iceland_program_memory_timing_parameters()
1635 hwmgr, in iceland_program_memory_timing_parameters()
1646 static int iceland_populate_smc_boot_level(struct pp_hwmgr *hwmgr, in iceland_populate_smc_boot_level() argument
1650 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_populate_smc_boot_level()
1651 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_populate_smc_boot_level()
1687 static int iceland_populate_mc_reg_address(struct pp_hwmgr *hwmgr, in iceland_populate_mc_reg_address() argument
1690 const struct iceland_smumgr *smu_data = (struct iceland_smumgr *)hwmgr->smu_backend; in iceland_populate_mc_reg_address()
1727 static int iceland_convert_mc_reg_table_entry_to_smc(struct pp_hwmgr *hwmgr, in iceland_convert_mc_reg_table_entry_to_smc() argument
1732 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_convert_mc_reg_table_entry_to_smc()
1752 static int iceland_convert_mc_reg_table_to_smc(struct pp_hwmgr *hwmgr, in iceland_convert_mc_reg_table_to_smc() argument
1756 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_convert_mc_reg_table_to_smc()
1762 hwmgr, in iceland_convert_mc_reg_table_to_smc()
1774 static int iceland_update_and_upload_mc_reg_table(struct pp_hwmgr *hwmgr) in iceland_update_and_upload_mc_reg_table() argument
1776 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_update_and_upload_mc_reg_table()
1777 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_update_and_upload_mc_reg_table()
1787 result = iceland_convert_mc_reg_table_to_smc(hwmgr, &(smu_data->mc_regs)); in iceland_update_and_upload_mc_reg_table()
1795 return smu7_copy_bytes_to_smc(hwmgr, address, in iceland_update_and_upload_mc_reg_table()
1801 static int iceland_populate_initial_mc_reg_table(struct pp_hwmgr *hwmgr) in iceland_populate_initial_mc_reg_table() argument
1804 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_populate_initial_mc_reg_table()
1807 result = iceland_populate_mc_reg_address(hwmgr, &(smu_data->mc_regs)); in iceland_populate_initial_mc_reg_table()
1811 result = iceland_convert_mc_reg_table_to_smc(hwmgr, &smu_data->mc_regs); in iceland_populate_initial_mc_reg_table()
1815 return smu7_copy_bytes_to_smc(hwmgr, smu_data->smu7_data.mc_reg_table_start, in iceland_populate_initial_mc_reg_table()
1819 static int iceland_populate_smc_initial_state(struct pp_hwmgr *hwmgr) in iceland_populate_smc_initial_state() argument
1821 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_populate_smc_initial_state()
1822 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_populate_smc_initial_state()
1825 count = (uint8_t)(hwmgr->dyn_state.vddc_dependency_on_sclk->count); in iceland_populate_smc_initial_state()
1828 if (hwmgr->dyn_state.vddc_dependency_on_sclk->entries[level].clk in iceland_populate_smc_initial_state()
1835 count = (uint8_t)(hwmgr->dyn_state.vddc_dependency_on_mclk->count); in iceland_populate_smc_initial_state()
1838 if (hwmgr->dyn_state.vddc_dependency_on_mclk->entries[level].clk in iceland_populate_smc_initial_state()
1848 static int iceland_populate_bapm_parameters_in_dpm_table(struct pp_hwmgr *hwmgr) in iceland_populate_bapm_parameters_in_dpm_table() argument
1850 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_populate_bapm_parameters_in_dpm_table()
1851 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_populate_bapm_parameters_in_dpm_table()
1854 struct phm_cac_tdp_table *cac_dtp_table = hwmgr->dyn_state.cac_dtp_table; in iceland_populate_bapm_parameters_in_dpm_table()
1855 struct phm_ppm_table *ppm = hwmgr->dyn_state.ppm_parameter_table; in iceland_populate_bapm_parameters_in_dpm_table()
1906 static int iceland_populate_smc_svi2_config(struct pp_hwmgr *hwmgr, in iceland_populate_smc_svi2_config() argument
1909 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_populate_smc_svi2_config()
1928 static int iceland_init_smc_table(struct pp_hwmgr *hwmgr) in iceland_init_smc_table() argument
1931 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_init_smc_table()
1932 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_init_smc_table()
1936 iceland_initialize_power_tune_defaults(hwmgr); in iceland_init_smc_table()
1940 iceland_populate_smc_voltage_tables(hwmgr, table); in iceland_init_smc_table()
1943 if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, in iceland_init_smc_table()
1948 if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, in iceland_init_smc_table()
1957 result = iceland_populate_ulv_state(hwmgr, &(smu_data->ulv_setting)); in iceland_init_smc_table()
1961 cgs_write_ind_register(hwmgr->device, CGS_IND_REG__SMC, in iceland_init_smc_table()
1965 result = iceland_populate_smc_link_level(hwmgr, table); in iceland_init_smc_table()
1969 result = iceland_populate_all_graphic_levels(hwmgr); in iceland_init_smc_table()
1973 result = iceland_populate_all_memory_levels(hwmgr); in iceland_init_smc_table()
1977 result = iceland_populate_smc_acpi_level(hwmgr, table); in iceland_init_smc_table()
1981 result = iceland_populate_smc_vce_level(hwmgr, table); in iceland_init_smc_table()
1985 result = iceland_populate_smc_acp_level(hwmgr, table); in iceland_init_smc_table()
1991 result = iceland_program_memory_timing_parameters(hwmgr); in iceland_init_smc_table()
1995 result = iceland_populate_smc_uvd_level(hwmgr, table); in iceland_init_smc_table()
2002 result = iceland_populate_smc_boot_level(hwmgr, table); in iceland_init_smc_table()
2006 result = iceland_populate_smc_initial_state(hwmgr); in iceland_init_smc_table()
2009 result = iceland_populate_bapm_parameters_in_dpm_table(hwmgr); in iceland_init_smc_table()
2033 result = iceland_populate_smc_svi2_config(hwmgr, table); in iceland_init_smc_table()
2056 result = smu7_copy_bytes_to_smc(hwmgr, smu_data->smu7_data.dpm_table_start + in iceland_init_smc_table()
2066 result = smu7_copy_bytes_to_smc(hwmgr, in iceland_init_smc_table()
2073 result = iceland_populate_initial_mc_reg_table(hwmgr); in iceland_init_smc_table()
2077 result = iceland_populate_pm_fuses(hwmgr); in iceland_init_smc_table()
2084 int iceland_thermal_setup_fan_table(struct pp_hwmgr *hwmgr) in iceland_thermal_setup_fan_table() argument
2086 struct smu7_smumgr *smu7_data = (struct smu7_smumgr *)(hwmgr->smu_backend); in iceland_thermal_setup_fan_table()
2095 …if (!phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_MicrocodeFanControl… in iceland_thermal_setup_fan_table()
2098 if (hwmgr->thermal_controller.fanInfo.bNoFan) { in iceland_thermal_setup_fan_table()
2099 phm_cap_unset(hwmgr->platform_descriptor.platformCaps, in iceland_thermal_setup_fan_table()
2105 phm_cap_unset(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_MicrocodeFanControl); in iceland_thermal_setup_fan_table()
2109 …duty100 = PHM_READ_VFPF_INDIRECT_FIELD(hwmgr->device, CGS_IND_REG__SMC, CG_FDO_CTRL1, FMAX_DUTY100… in iceland_thermal_setup_fan_table()
2112 phm_cap_unset(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_MicrocodeFanControl); in iceland_thermal_setup_fan_table()
2116 tmp64 = hwmgr->thermal_controller.advanceFanControlParameters.usPWMMin * duty100; in iceland_thermal_setup_fan_table()
2120 …t_diff1 = hwmgr->thermal_controller.advanceFanControlParameters.usTMed - hwmgr->thermal_controller… in iceland_thermal_setup_fan_table()
2121 …t_diff2 = hwmgr->thermal_controller.advanceFanControlParameters.usTHigh - hwmgr->thermal_controlle… in iceland_thermal_setup_fan_table()
2123 …pwm_diff1 = hwmgr->thermal_controller.advanceFanControlParameters.usPWMMed - hwmgr->thermal_contro… in iceland_thermal_setup_fan_table()
2124 …pwm_diff2 = hwmgr->thermal_controller.advanceFanControlParameters.usPWMHigh - hwmgr->thermal_contr… in iceland_thermal_setup_fan_table()
2129 …fan_table.TempMin = cpu_to_be16((50 + hwmgr->thermal_controller.advanceFanControlParameters.usTMin… in iceland_thermal_setup_fan_table()
2130 …fan_table.TempMed = cpu_to_be16((50 + hwmgr->thermal_controller.advanceFanControlParameters.usTMed… in iceland_thermal_setup_fan_table()
2131 …fan_table.TempMax = cpu_to_be16((50 + hwmgr->thermal_controller.advanceFanControlParameters.usTMax… in iceland_thermal_setup_fan_table()
2138 fan_table.HystDown = cpu_to_be16(hwmgr->thermal_controller.advanceFanControlParameters.ucTHyst); in iceland_thermal_setup_fan_table()
2146 reference_clock = amdgpu_asic_get_xclk((struct amdgpu_device *)hwmgr->adev); in iceland_thermal_setup_fan_table()
2148 …fan_table.RefreshPeriod = cpu_to_be32((hwmgr->thermal_controller.advanceFanControlParameters.ulCyc… in iceland_thermal_setup_fan_table()
2152 …fan_table.TempSrc = (uint8_t)PHM_READ_VFPF_INDIRECT_FIELD(hwmgr->device, CGS_IND_REG__SMC, CG_MULT… in iceland_thermal_setup_fan_table()
2156 …res = smu7_copy_bytes_to_smc(hwmgr, smu7_data->fan_table_start, (uint8_t *)&fan_table, (uint32_t)s… in iceland_thermal_setup_fan_table()
2162 static int iceland_program_mem_timing_parameters(struct pp_hwmgr *hwmgr) in iceland_program_mem_timing_parameters() argument
2164 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_program_mem_timing_parameters()
2168 return iceland_program_memory_timing_parameters(hwmgr); in iceland_program_mem_timing_parameters()
2173 static int iceland_update_sclk_threshold(struct pp_hwmgr *hwmgr) in iceland_update_sclk_threshold() argument
2175 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_update_sclk_threshold()
2176 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_update_sclk_threshold()
2181 if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, in iceland_update_sclk_threshold()
2190 hwmgr, in iceland_update_sclk_threshold()
2199 result = iceland_update_and_upload_mc_reg_table(hwmgr); in iceland_update_sclk_threshold()
2203 result = iceland_program_mem_timing_parameters(hwmgr); in iceland_update_sclk_threshold()
2272 static int iceland_process_firmware_header(struct pp_hwmgr *hwmgr) in iceland_process_firmware_header() argument
2274 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_process_firmware_header()
2275 struct smu7_smumgr *smu7_data = (struct smu7_smumgr *)(hwmgr->smu_backend); in iceland_process_firmware_header()
2281 result = smu7_read_smc_sram_dword(hwmgr, in iceland_process_firmware_header()
2292 result = smu7_read_smc_sram_dword(hwmgr, in iceland_process_firmware_header()
2305 result = smu7_read_smc_sram_dword(hwmgr, in iceland_process_firmware_header()
2314 result = smu7_read_smc_sram_dword(hwmgr, in iceland_process_firmware_header()
2325 result = smu7_read_smc_sram_dword(hwmgr, in iceland_process_firmware_header()
2337 result = smu7_read_smc_sram_dword(hwmgr, in iceland_process_firmware_header()
2343 hwmgr->microcode_version_info.SMC = tmp; in iceland_process_firmware_header()
2348 result = smu7_read_smc_sram_dword(hwmgr, in iceland_process_firmware_header()
2364 static uint8_t iceland_get_memory_modile_index(struct pp_hwmgr *hwmgr) in iceland_get_memory_modile_index() argument
2366 return (uint8_t) (0xFF & (cgs_read_register(hwmgr->device, mmBIOS_SCRATCH_4) >> 16)); in iceland_get_memory_modile_index()
2504 static int iceland_set_mc_special_registers(struct pp_hwmgr *hwmgr, in iceland_set_mc_special_registers() argument
2509 struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend); in iceland_set_mc_special_registers()
2518 temp_reg = cgs_read_register(hwmgr->device, mmMC_PMG_CMD_EMRS); in iceland_set_mc_special_registers()
2530 temp_reg = cgs_read_register(hwmgr->device, mmMC_PMG_CMD_MRS); in iceland_set_mc_special_registers()
2559 temp_reg = cgs_read_register(hwmgr->device, mmMC_PMG_CMD_MRS1); in iceland_set_mc_special_registers()
2597 static int iceland_initialize_mc_reg_table(struct pp_hwmgr *hwmgr) in iceland_initialize_mc_reg_table() argument
2600 struct iceland_smumgr *smu_data = (struct iceland_smumgr *)(hwmgr->smu_backend); in iceland_initialize_mc_reg_table()
2603 uint8_t module_index = iceland_get_memory_modile_index(hwmgr); in iceland_initialize_mc_reg_table()
2611 …cgs_write_register(hwmgr->device, mmMC_SEQ_RAS_TIMING_LP, cgs_read_register(hwmgr->device, mmMC_SE… in iceland_initialize_mc_reg_table()
2612 …cgs_write_register(hwmgr->device, mmMC_SEQ_CAS_TIMING_LP, cgs_read_register(hwmgr->device, mmMC_SE… in iceland_initialize_mc_reg_table()
2613 …cgs_write_register(hwmgr->device, mmMC_SEQ_DLL_STBY_LP, cgs_read_register(hwmgr->device, mmMC_SEQ_… in iceland_initialize_mc_reg_table()
2614 …cgs_write_register(hwmgr->device, mmMC_SEQ_G5PDX_CMD0_LP, cgs_read_register(hwmgr->device, mmMC_SE… in iceland_initialize_mc_reg_table()
2615 …cgs_write_register(hwmgr->device, mmMC_SEQ_G5PDX_CMD1_LP, cgs_read_register(hwmgr->device, mmMC_SE… in iceland_initialize_mc_reg_table()
2616 …cgs_write_register(hwmgr->device, mmMC_SEQ_G5PDX_CTRL_LP, cgs_read_register(hwmgr->device, mmMC_SE… in iceland_initialize_mc_reg_table()
2617 …cgs_write_register(hwmgr->device, mmMC_SEQ_PMG_DVS_CMD_LP, cgs_read_register(hwmgr->device, mmMC_S… in iceland_initialize_mc_reg_table()
2618 …cgs_write_register(hwmgr->device, mmMC_SEQ_PMG_DVS_CTL_LP, cgs_read_register(hwmgr->device, mmMC_S… in iceland_initialize_mc_reg_table()
2619 …cgs_write_register(hwmgr->device, mmMC_SEQ_MISC_TIMING_LP, cgs_read_register(hwmgr->device, mmMC_S… in iceland_initialize_mc_reg_table()
2620 …cgs_write_register(hwmgr->device, mmMC_SEQ_MISC_TIMING2_LP, cgs_read_register(hwmgr->device, mmMC_… in iceland_initialize_mc_reg_table()
2621 …cgs_write_register(hwmgr->device, mmMC_SEQ_PMG_CMD_EMRS_LP, cgs_read_register(hwmgr->device, mmMC_… in iceland_initialize_mc_reg_table()
2622 …cgs_write_register(hwmgr->device, mmMC_SEQ_PMG_CMD_MRS_LP, cgs_read_register(hwmgr->device, mmMC_P… in iceland_initialize_mc_reg_table()
2623 …cgs_write_register(hwmgr->device, mmMC_SEQ_PMG_CMD_MRS1_LP, cgs_read_register(hwmgr->device, mmMC_… in iceland_initialize_mc_reg_table()
2624 …cgs_write_register(hwmgr->device, mmMC_SEQ_WR_CTL_D0_LP, cgs_read_register(hwmgr->device, mmMC_SEQ… in iceland_initialize_mc_reg_table()
2625 …cgs_write_register(hwmgr->device, mmMC_SEQ_WR_CTL_D1_LP, cgs_read_register(hwmgr->device, mmMC_SEQ… in iceland_initialize_mc_reg_table()
2626 …cgs_write_register(hwmgr->device, mmMC_SEQ_RD_CTL_D0_LP, cgs_read_register(hwmgr->device, mmMC_SEQ… in iceland_initialize_mc_reg_table()
2627 …cgs_write_register(hwmgr->device, mmMC_SEQ_RD_CTL_D1_LP, cgs_read_register(hwmgr->device, mmMC_SEQ… in iceland_initialize_mc_reg_table()
2628 …cgs_write_register(hwmgr->device, mmMC_SEQ_PMG_TIMING_LP, cgs_read_register(hwmgr->device, mmMC_SE… in iceland_initialize_mc_reg_table()
2629 …cgs_write_register(hwmgr->device, mmMC_SEQ_PMG_CMD_MRS2_LP, cgs_read_register(hwmgr->device, mmMC_… in iceland_initialize_mc_reg_table()
2630 …cgs_write_register(hwmgr->device, mmMC_SEQ_WR_CTL_2_LP, cgs_read_register(hwmgr->device, mmMC_SEQ_… in iceland_initialize_mc_reg_table()
2634 result = atomctrl_initialize_mc_reg_table(hwmgr, module_index, table); in iceland_initialize_mc_reg_table()
2641 result = iceland_set_mc_special_registers(hwmgr, ni_table); in iceland_initialize_mc_reg_table()
2652 static bool iceland_is_dpm_running(struct pp_hwmgr *hwmgr) in iceland_is_dpm_running() argument
2654 return (1 == PHM_READ_INDIRECT_FIELD(hwmgr->device, in iceland_is_dpm_running()