Lines Matching refs:rdev

55 struct rv7xx_power_info *rv770_get_pi(struct radeon_device *rdev)  in rv770_get_pi()  argument
57 struct rv7xx_power_info *pi = rdev->pm.dpm.priv; in rv770_get_pi()
62 struct evergreen_power_info *evergreen_get_pi(struct radeon_device *rdev) in evergreen_get_pi() argument
64 struct evergreen_power_info *pi = rdev->pm.dpm.priv; in evergreen_get_pi()
69 static void rv770_enable_bif_dynamic_pcie_gen2(struct radeon_device *rdev, in rv770_enable_bif_dynamic_pcie_gen2() argument
72 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_enable_bif_dynamic_pcie_gen2()
92 static void rv770_enable_l0s(struct radeon_device *rdev) in rv770_enable_l0s() argument
101 static void rv770_enable_l1(struct radeon_device *rdev) in rv770_enable_l1() argument
113 static void rv770_enable_pll_sleep_in_l1(struct radeon_device *rdev) in rv770_enable_pll_sleep_in_l1() argument
130 static void rv770_gfx_clock_gating_enable(struct radeon_device *rdev, in rv770_gfx_clock_gating_enable() argument
143 static void rv770_mg_clock_gating_enable(struct radeon_device *rdev, in rv770_mg_clock_gating_enable() argument
146 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_mg_clock_gating_enable()
151 if (rdev->family == CHIP_RV770) in rv770_mg_clock_gating_enable()
167 void rv770_restore_cgcg(struct radeon_device *rdev) in rv770_restore_cgcg() argument
180 static void rv770_start_dpm(struct radeon_device *rdev) in rv770_start_dpm() argument
189 void rv770_stop_dpm(struct radeon_device *rdev) in rv770_stop_dpm() argument
193 result = rv770_send_msg_to_smc(rdev, PPSMC_MSG_TwoLevelsDisabled); in rv770_stop_dpm()
205 bool rv770_dpm_enabled(struct radeon_device *rdev) in rv770_dpm_enabled() argument
213 void rv770_enable_thermal_protection(struct radeon_device *rdev, in rv770_enable_thermal_protection() argument
222 void rv770_enable_acpi_pm(struct radeon_device *rdev) in rv770_enable_acpi_pm() argument
227 u8 rv770_get_seq_value(struct radeon_device *rdev, in rv770_get_seq_value() argument
235 int rv770_read_smc_soft_register(struct radeon_device *rdev,
238 struct rv7xx_power_info *pi = rv770_get_pi(rdev);
240 return rv770_read_smc_sram_dword(rdev,
246 int rv770_write_smc_soft_register(struct radeon_device *rdev, in rv770_write_smc_soft_register() argument
249 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_write_smc_soft_register()
251 return rv770_write_smc_sram_dword(rdev, in rv770_write_smc_soft_register()
256 int rv770_populate_smc_t(struct radeon_device *rdev, in rv770_populate_smc_t() argument
261 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_populate_smc_t()
302 int rv770_populate_smc_sp(struct radeon_device *rdev, in rv770_populate_smc_sp() argument
306 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_populate_smc_sp()
371 u32 rv770_map_clkf_to_ibias(struct radeon_device *rdev, u32 clkf) in rv770_map_clkf_to_ibias() argument
386 static int rv770_populate_mclk_value(struct radeon_device *rdev, in rv770_populate_mclk_value() argument
390 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_populate_mclk_value()
404 u32 reference_clock = rdev->clock.mpll.reference_freq; in rv770_populate_mclk_value()
410 ret = radeon_atom_get_clock_dividers(rdev, COMPUTE_MEMORY_PLL_PARAM, in rv770_populate_mclk_value()
426 ibias = rv770_map_clkf_to_ibias(rdev, clkf); in rv770_populate_mclk_value()
450 ibias = rv770_map_clkf_to_ibias(rdev, clkf); in rv770_populate_mclk_value()
484 static int rv770_populate_sclk_value(struct radeon_device *rdev, in rv770_populate_sclk_value() argument
488 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_populate_sclk_value()
501 u32 reference_clock = rdev->clock.spll.reference_freq; in rv770_populate_sclk_value()
506 ret = radeon_atom_get_clock_dividers(rdev, COMPUTE_ENGINE_PLL_PARAM, in rv770_populate_sclk_value()
542 if (radeon_atombios_get_asic_ss_info(rdev, &ss, in rv770_populate_sclk_value()
566 int rv770_populate_vddc_value(struct radeon_device *rdev, u16 vddc, in rv770_populate_vddc_value() argument
569 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_populate_vddc_value()
592 int rv770_populate_mvdd_value(struct radeon_device *rdev, u32 mclk, in rv770_populate_mvdd_value() argument
595 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_populate_mvdd_value()
614 static int rv770_convert_power_level_to_smc(struct radeon_device *rdev, in rv770_convert_power_level_to_smc() argument
619 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_convert_power_level_to_smc()
628 if (rdev->family == CHIP_RV740) in rv770_convert_power_level_to_smc()
629 ret = rv740_populate_sclk_value(rdev, pl->sclk, in rv770_convert_power_level_to_smc()
631 else if ((rdev->family == CHIP_RV730) || (rdev->family == CHIP_RV710)) in rv770_convert_power_level_to_smc()
632 ret = rv730_populate_sclk_value(rdev, pl->sclk, in rv770_convert_power_level_to_smc()
635 ret = rv770_populate_sclk_value(rdev, pl->sclk, in rv770_convert_power_level_to_smc()
640 if (rdev->family == CHIP_RV740) { in rv770_convert_power_level_to_smc()
653 ret = rv740_populate_mclk_value(rdev, pl->sclk, in rv770_convert_power_level_to_smc()
655 } else if ((rdev->family == CHIP_RV730) || (rdev->family == CHIP_RV710)) in rv770_convert_power_level_to_smc()
656 ret = rv730_populate_mclk_value(rdev, pl->sclk, in rv770_convert_power_level_to_smc()
659 ret = rv770_populate_mclk_value(rdev, pl->sclk, in rv770_convert_power_level_to_smc()
664 ret = rv770_populate_vddc_value(rdev, pl->vddc, in rv770_convert_power_level_to_smc()
669 ret = rv770_populate_mvdd_value(rdev, pl->mclk, &level->mvdd); in rv770_convert_power_level_to_smc()
674 static int rv770_convert_power_state_to_smc(struct radeon_device *rdev, in rv770_convert_power_state_to_smc() argument
684 ret = rv770_convert_power_level_to_smc(rdev, in rv770_convert_power_state_to_smc()
691 ret = rv770_convert_power_level_to_smc(rdev, in rv770_convert_power_state_to_smc()
698 ret = rv770_convert_power_level_to_smc(rdev, in rv770_convert_power_state_to_smc()
709 smc_state->levels[0].seqValue = rv770_get_seq_value(rdev, in rv770_convert_power_state_to_smc()
711 smc_state->levels[1].seqValue = rv770_get_seq_value(rdev, in rv770_convert_power_state_to_smc()
713 smc_state->levels[2].seqValue = rv770_get_seq_value(rdev, in rv770_convert_power_state_to_smc()
716 rv770_populate_smc_sp(rdev, radeon_state, smc_state); in rv770_convert_power_state_to_smc()
718 return rv770_populate_smc_t(rdev, radeon_state, smc_state); in rv770_convert_power_state_to_smc()
722 u32 rv770_calculate_memory_refresh_rate(struct radeon_device *rdev, in rv770_calculate_memory_refresh_rate() argument
739 static void rv770_program_memory_timing_parameters(struct radeon_device *rdev, in rv770_program_memory_timing_parameters() argument
743 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_program_memory_timing_parameters()
753 radeon_atom_set_engine_dram_timings(rdev, high_clock, in rv770_program_memory_timing_parameters()
764 POWERMODE0(rv770_calculate_memory_refresh_rate(rdev, pi->boot_sclk)) | in rv770_program_memory_timing_parameters()
765 POWERMODE1(rv770_calculate_memory_refresh_rate(rdev, state->low.sclk)) | in rv770_program_memory_timing_parameters()
766 POWERMODE2(rv770_calculate_memory_refresh_rate(rdev, state->medium.sclk)) | in rv770_program_memory_timing_parameters()
767 POWERMODE3(rv770_calculate_memory_refresh_rate(rdev, state->high.sclk)); in rv770_program_memory_timing_parameters()
771 void rv770_enable_backbias(struct radeon_device *rdev, in rv770_enable_backbias() argument
780 static void rv770_enable_spread_spectrum(struct radeon_device *rdev, in rv770_enable_spread_spectrum() argument
783 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_enable_spread_spectrum()
790 if (rdev->family == CHIP_RV740) in rv770_enable_spread_spectrum()
791 rv740_enable_mclk_spread_spectrum(rdev, true); in rv770_enable_spread_spectrum()
800 if (rdev->family == CHIP_RV740) in rv770_enable_spread_spectrum()
801 rv740_enable_mclk_spread_spectrum(rdev, false); in rv770_enable_spread_spectrum()
805 static void rv770_program_mpll_timing_parameters(struct radeon_device *rdev) in rv770_program_mpll_timing_parameters() argument
807 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_program_mpll_timing_parameters()
809 if ((rdev->family == CHIP_RV770) && !pi->mem_gddr5) { in rv770_program_mpll_timing_parameters()
816 void rv770_setup_bsp(struct radeon_device *rdev) in rv770_setup_bsp() argument
818 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_setup_bsp()
819 u32 xclk = radeon_get_xclk(rdev); in rv770_setup_bsp()
840 void rv770_program_git(struct radeon_device *rdev) in rv770_program_git() argument
845 void rv770_program_tp(struct radeon_device *rdev) in rv770_program_tp() argument
863 void rv770_program_tpp(struct radeon_device *rdev) in rv770_program_tpp() argument
868 void rv770_program_sstp(struct radeon_device *rdev) in rv770_program_sstp() argument
873 void rv770_program_engine_speed_parameters(struct radeon_device *rdev) in rv770_program_engine_speed_parameters() argument
878 static void rv770_enable_display_gap(struct radeon_device *rdev) in rv770_enable_display_gap() argument
888 void rv770_program_vc(struct radeon_device *rdev) in rv770_program_vc() argument
890 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_program_vc()
895 void rv770_clear_vc(struct radeon_device *rdev) in rv770_clear_vc() argument
900 int rv770_upload_firmware(struct radeon_device *rdev) in rv770_upload_firmware() argument
902 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_upload_firmware()
905 rv770_reset_smc(rdev); in rv770_upload_firmware()
906 rv770_stop_smc_clock(rdev); in rv770_upload_firmware()
908 ret = rv770_load_smc_ucode(rdev, pi->sram_end); in rv770_upload_firmware()
915 static int rv770_populate_smc_acpi_state(struct radeon_device *rdev, in rv770_populate_smc_acpi_state() argument
918 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_populate_smc_acpi_state()
942 rv770_populate_vddc_value(rdev, pi->acpi_vddc, in rv770_populate_smc_acpi_state()
956 rv770_populate_vddc_value(rdev, pi->min_vddc_in_table, in rv770_populate_smc_acpi_state()
998 rv770_populate_mvdd_value(rdev, 0, &table->ACPIState.levels[0].mvdd); in rv770_populate_smc_acpi_state()
1006 int rv770_populate_initial_mvdd_value(struct radeon_device *rdev, in rv770_populate_initial_mvdd_value() argument
1009 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_populate_initial_mvdd_value()
1023 static int rv770_populate_smc_initial_state(struct radeon_device *rdev, in rv770_populate_smc_initial_state() argument
1028 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_populate_smc_initial_state()
1069 rv770_get_seq_value(rdev, &initial_state->low); in rv770_populate_smc_initial_state()
1071 rv770_populate_vddc_value(rdev, in rv770_populate_smc_initial_state()
1074 rv770_populate_initial_mvdd_value(rdev, in rv770_populate_smc_initial_state()
1091 if (rdev->family == CHIP_RV740) { in rv770_populate_smc_initial_state()
1114 static int rv770_populate_smc_vddc_table(struct radeon_device *rdev, in rv770_populate_smc_vddc_table() argument
1117 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_populate_smc_vddc_table()
1143 static int rv770_populate_smc_mvdd_table(struct radeon_device *rdev, in rv770_populate_smc_mvdd_table() argument
1146 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_populate_smc_mvdd_table()
1162 static int rv770_init_smc_table(struct radeon_device *rdev, in rv770_init_smc_table() argument
1165 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_init_smc_table()
1174 rv770_populate_smc_vddc_table(rdev, table); in rv770_init_smc_table()
1175 rv770_populate_smc_mvdd_table(rdev, table); in rv770_init_smc_table()
1177 switch (rdev->pm.int_thermal_type) { in rv770_init_smc_table()
1191 if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_HARDWAREDC) { in rv770_init_smc_table()
1194 if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_DONT_WAIT_FOR_VBLANK_ON_ALERT) in rv770_init_smc_table()
1197 if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_GOTO_BOOT_ON_ALERT) in rv770_init_smc_table()
1201 if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_STEPVDDC) in rv770_init_smc_table()
1207 if ((rdev->family == CHIP_RV730) || (rdev->family == CHIP_RV710)) in rv770_init_smc_table()
1208 ret = rv730_populate_smc_initial_state(rdev, radeon_boot_state, table); in rv770_init_smc_table()
1210 ret = rv770_populate_smc_initial_state(rdev, radeon_boot_state, table); in rv770_init_smc_table()
1214 if (rdev->family == CHIP_RV740) in rv770_init_smc_table()
1215 ret = rv740_populate_smc_acpi_state(rdev, table); in rv770_init_smc_table()
1216 else if ((rdev->family == CHIP_RV730) || (rdev->family == CHIP_RV710)) in rv770_init_smc_table()
1217 ret = rv730_populate_smc_acpi_state(rdev, table); in rv770_init_smc_table()
1219 ret = rv770_populate_smc_acpi_state(rdev, table); in rv770_init_smc_table()
1225 return rv770_copy_bytes_to_smc(rdev, in rv770_init_smc_table()
1232 static int rv770_construct_vddc_table(struct radeon_device *rdev) in rv770_construct_vddc_table() argument
1234 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_construct_vddc_table()
1240 radeon_atom_get_min_voltage(rdev, SET_VOLTAGE_TYPE_ASIC_VDDC, &min); in rv770_construct_vddc_table()
1241 radeon_atom_get_max_voltage(rdev, SET_VOLTAGE_TYPE_ASIC_VDDC, &max); in rv770_construct_vddc_table()
1242 radeon_atom_get_voltage_step(rdev, SET_VOLTAGE_TYPE_ASIC_VDDC, &step); in rv770_construct_vddc_table()
1253 radeon_atom_get_voltage_gpio_settings(rdev, in rv770_construct_vddc_table()
1283 static int rv770_get_mvdd_pin_configuration(struct radeon_device *rdev) in rv770_get_mvdd_pin_configuration() argument
1285 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_get_mvdd_pin_configuration()
1288 radeon_atom_get_voltage_gpio_settings(rdev, in rv770_get_mvdd_pin_configuration()
1295 radeon_atom_get_voltage_gpio_settings(rdev, in rv770_get_mvdd_pin_configuration()
1304 u8 rv770_get_memory_module_index(struct radeon_device *rdev) in rv770_get_memory_module_index() argument
1309 static int rv770_get_mvdd_configuration(struct radeon_device *rdev) in rv770_get_mvdd_configuration() argument
1311 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_get_mvdd_configuration()
1315 memory_module_index = rv770_get_memory_module_index(rdev); in rv770_get_mvdd_configuration()
1317 if (radeon_atom_get_memory_info(rdev, memory_module_index, &memory_info)) { in rv770_get_mvdd_configuration()
1330 return rv770_get_mvdd_pin_configuration(rdev); in rv770_get_mvdd_configuration()
1333 void rv770_enable_voltage_control(struct radeon_device *rdev, in rv770_enable_voltage_control() argument
1342 static void rv770_program_display_gap(struct radeon_device *rdev) in rv770_program_display_gap() argument
1347 if (rdev->pm.dpm.new_active_crtcs & 1) { in rv770_program_display_gap()
1350 } else if (rdev->pm.dpm.new_active_crtcs & 2) { in rv770_program_display_gap()
1360 static void rv770_enable_dynamic_pcie_gen2(struct radeon_device *rdev, in rv770_enable_dynamic_pcie_gen2() argument
1363 rv770_enable_bif_dynamic_pcie_gen2(rdev, enable); in rv770_enable_dynamic_pcie_gen2()
1371 static void r7xx_program_memory_timing_parameters(struct radeon_device *rdev, in r7xx_program_memory_timing_parameters() argument
1374 if ((rdev->family == CHIP_RV730) || in r7xx_program_memory_timing_parameters()
1375 (rdev->family == CHIP_RV710) || in r7xx_program_memory_timing_parameters()
1376 (rdev->family == CHIP_RV740)) in r7xx_program_memory_timing_parameters()
1377 rv730_program_memory_timing_parameters(rdev, radeon_new_state); in r7xx_program_memory_timing_parameters()
1379 rv770_program_memory_timing_parameters(rdev, radeon_new_state); in r7xx_program_memory_timing_parameters()
1382 static int rv770_upload_sw_state(struct radeon_device *rdev, in rv770_upload_sw_state() argument
1385 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_upload_sw_state()
1391 ret = rv770_convert_power_state_to_smc(rdev, radeon_new_state, &state); in rv770_upload_sw_state()
1395 return rv770_copy_bytes_to_smc(rdev, address, (const u8 *)&state, in rv770_upload_sw_state()
1400 int rv770_halt_smc(struct radeon_device *rdev) in rv770_halt_smc() argument
1402 if (rv770_send_msg_to_smc(rdev, PPSMC_MSG_Halt) != PPSMC_Result_OK) in rv770_halt_smc()
1405 if (rv770_wait_for_smc_inactive(rdev) != PPSMC_Result_OK) in rv770_halt_smc()
1411 int rv770_resume_smc(struct radeon_device *rdev) in rv770_resume_smc() argument
1413 if (rv770_send_msg_to_smc(rdev, PPSMC_MSG_Resume) != PPSMC_Result_OK) in rv770_resume_smc()
1418 int rv770_set_sw_state(struct radeon_device *rdev) in rv770_set_sw_state() argument
1420 if (rv770_send_msg_to_smc(rdev, PPSMC_MSG_SwitchToSwState) != PPSMC_Result_OK) in rv770_set_sw_state()
1425 int rv770_set_boot_state(struct radeon_device *rdev) in rv770_set_boot_state() argument
1427 if (rv770_send_msg_to_smc(rdev, PPSMC_MSG_SwitchToInitialState) != PPSMC_Result_OK) in rv770_set_boot_state()
1432 void rv770_set_uvd_clock_before_set_eng_clock(struct radeon_device *rdev, in rv770_set_uvd_clock_before_set_eng_clock() argument
1446 radeon_set_uvd_clocks(rdev, new_ps->vclk, new_ps->dclk); in rv770_set_uvd_clock_before_set_eng_clock()
1449 void rv770_set_uvd_clock_after_set_eng_clock(struct radeon_device *rdev, in rv770_set_uvd_clock_after_set_eng_clock() argument
1463 radeon_set_uvd_clocks(rdev, new_ps->vclk, new_ps->dclk); in rv770_set_uvd_clock_after_set_eng_clock()
1466 int rv770_restrict_performance_levels_before_switch(struct radeon_device *rdev) in rv770_restrict_performance_levels_before_switch() argument
1468 if (rv770_send_msg_to_smc(rdev, (PPSMC_Msg)(PPSMC_MSG_NoForcedLevel)) != PPSMC_Result_OK) in rv770_restrict_performance_levels_before_switch()
1471 if (rv770_send_msg_to_smc(rdev, (PPSMC_Msg)(PPSMC_MSG_TwoLevelsDisabled)) != PPSMC_Result_OK) in rv770_restrict_performance_levels_before_switch()
1477 int rv770_dpm_force_performance_level(struct radeon_device *rdev, in rv770_dpm_force_performance_level() argument
1483 if (rv770_send_msg_to_smc(rdev, PPSMC_MSG_ZeroLevelsDisabled) != PPSMC_Result_OK) in rv770_dpm_force_performance_level()
1487 if (rv770_send_msg_to_smc(rdev, PPSMC_MSG_NoForcedLevel) != PPSMC_Result_OK) in rv770_dpm_force_performance_level()
1491 if (rv770_send_msg_to_smc(rdev, PPSMC_MSG_NoForcedLevel) != PPSMC_Result_OK) in rv770_dpm_force_performance_level()
1496 if (rv770_send_msg_to_smc(rdev, msg) != PPSMC_Result_OK) in rv770_dpm_force_performance_level()
1499 rdev->pm.dpm.forced_level = level; in rv770_dpm_force_performance_level()
1504 void r7xx_start_smc(struct radeon_device *rdev) in r7xx_start_smc() argument
1506 rv770_start_smc(rdev); in r7xx_start_smc()
1507 rv770_start_smc_clock(rdev); in r7xx_start_smc()
1511 void r7xx_stop_smc(struct radeon_device *rdev) in r7xx_stop_smc() argument
1513 rv770_reset_smc(rdev); in r7xx_stop_smc()
1514 rv770_stop_smc_clock(rdev); in r7xx_stop_smc()
1517 static void rv770_read_clock_registers(struct radeon_device *rdev) in rv770_read_clock_registers() argument
1519 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_read_clock_registers()
1544 static void r7xx_read_clock_registers(struct radeon_device *rdev) in r7xx_read_clock_registers() argument
1546 if (rdev->family == CHIP_RV740) in r7xx_read_clock_registers()
1547 rv740_read_clock_registers(rdev); in r7xx_read_clock_registers()
1548 else if ((rdev->family == CHIP_RV730) || (rdev->family == CHIP_RV710)) in r7xx_read_clock_registers()
1549 rv730_read_clock_registers(rdev); in r7xx_read_clock_registers()
1551 rv770_read_clock_registers(rdev); in r7xx_read_clock_registers()
1554 void rv770_read_voltage_smio_registers(struct radeon_device *rdev) in rv770_read_voltage_smio_registers() argument
1556 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_read_voltage_smio_registers()
1562 void rv770_reset_smio_status(struct radeon_device *rdev) in rv770_reset_smio_status() argument
1564 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_reset_smio_status()
1590 void rv770_get_memory_type(struct radeon_device *rdev) in rv770_get_memory_type() argument
1592 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_get_memory_type()
1605 void rv770_get_pcie_gen2_status(struct radeon_device *rdev) in rv770_get_pcie_gen2_status() argument
1607 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_get_pcie_gen2_status()
1628 static int rv770_enter_ulp_state(struct radeon_device *rdev)
1630 struct rv7xx_power_info *pi = rv770_get_pi(rdev);
1647 static int rv770_exit_ulp_state(struct radeon_device *rdev)
1649 struct rv7xx_power_info *pi = rv770_get_pi(rdev);
1657 for (i = 0; i < rdev->usec_timeout; i++) {
1670 static void rv770_get_mclk_odt_threshold(struct radeon_device *rdev) in rv770_get_mclk_odt_threshold() argument
1672 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_get_mclk_odt_threshold()
1678 if ((rdev->family == CHIP_RV730) || (rdev->family == CHIP_RV710)) { in rv770_get_mclk_odt_threshold()
1679 memory_module_index = rv770_get_memory_module_index(rdev); in rv770_get_mclk_odt_threshold()
1681 if (radeon_atom_get_memory_info(rdev, memory_module_index, &memory_info)) in rv770_get_mclk_odt_threshold()
1690 void rv770_get_max_vddc(struct radeon_device *rdev) in rv770_get_max_vddc() argument
1692 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_get_max_vddc()
1695 if (radeon_atom_get_max_vddc(rdev, 0, 0, &vddc)) in rv770_get_max_vddc()
1701 void rv770_program_response_times(struct radeon_device *rdev) in rv770_program_response_times() argument
1708 voltage_response_time = (u32)rdev->pm.dpm.voltage_response_time; in rv770_program_response_times()
1709 backbias_response_time = (u32)rdev->pm.dpm.backbias_response_time; in rv770_program_response_times()
1720 reference_clock = radeon_get_xclk(rdev); in rv770_program_response_times()
1727 rv770_write_smc_soft_register(rdev, in rv770_program_response_times()
1729 rv770_write_smc_soft_register(rdev, in rv770_program_response_times()
1731 rv770_write_smc_soft_register(rdev, in rv770_program_response_times()
1733 rv770_write_smc_soft_register(rdev, in rv770_program_response_times()
1738 rv770_write_smc_soft_register(rdev, in rv770_program_response_times()
1744 static void rv770_program_dcodt_before_state_switch(struct radeon_device *rdev, in rv770_program_dcodt_before_state_switch() argument
1748 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_program_dcodt_before_state_switch()
1769 if ((rdev->family == CHIP_RV730) || (rdev->family == CHIP_RV710)) in rv770_program_dcodt_before_state_switch()
1770 rv730_program_dcodt(rdev, new_use_dc); in rv770_program_dcodt_before_state_switch()
1773 static void rv770_program_dcodt_after_state_switch(struct radeon_device *rdev, in rv770_program_dcodt_after_state_switch() argument
1777 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_program_dcodt_after_state_switch()
1798 if ((rdev->family == CHIP_RV730) || (rdev->family == CHIP_RV710)) in rv770_program_dcodt_after_state_switch()
1799 rv730_program_dcodt(rdev, new_use_dc); in rv770_program_dcodt_after_state_switch()
1802 static void rv770_retrieve_odt_values(struct radeon_device *rdev) in rv770_retrieve_odt_values() argument
1804 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_retrieve_odt_values()
1809 if ((rdev->family == CHIP_RV730) || (rdev->family == CHIP_RV710)) in rv770_retrieve_odt_values()
1810 rv730_get_odt_values(rdev); in rv770_retrieve_odt_values()
1813 static void rv770_set_dpm_event_sources(struct radeon_device *rdev, u32 sources) in rv770_set_dpm_event_sources() argument
1815 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_set_dpm_event_sources()
1850 void rv770_enable_auto_throttle_source(struct radeon_device *rdev, in rv770_enable_auto_throttle_source() argument
1854 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_enable_auto_throttle_source()
1859 rv770_set_dpm_event_sources(rdev, pi->active_auto_throttle_sources); in rv770_enable_auto_throttle_source()
1864 rv770_set_dpm_event_sources(rdev, pi->active_auto_throttle_sources); in rv770_enable_auto_throttle_source()
1869 static int rv770_set_thermal_temperature_range(struct radeon_device *rdev, in rv770_set_thermal_temperature_range() argument
1888 rdev->pm.dpm.thermal.min_temp = low_temp; in rv770_set_thermal_temperature_range()
1889 rdev->pm.dpm.thermal.max_temp = high_temp; in rv770_set_thermal_temperature_range()
1894 int rv770_dpm_enable(struct radeon_device *rdev) in rv770_dpm_enable() argument
1896 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_dpm_enable()
1897 struct radeon_ps *boot_ps = rdev->pm.dpm.boot_ps; in rv770_dpm_enable()
1901 rv770_restore_cgcg(rdev); in rv770_dpm_enable()
1903 if (rv770_dpm_enabled(rdev)) in rv770_dpm_enable()
1907 rv770_enable_voltage_control(rdev, true); in rv770_dpm_enable()
1908 ret = rv770_construct_vddc_table(rdev); in rv770_dpm_enable()
1916 rv770_retrieve_odt_values(rdev); in rv770_dpm_enable()
1919 ret = rv770_get_mvdd_configuration(rdev); in rv770_dpm_enable()
1926 if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_BACKBIAS) in rv770_dpm_enable()
1927 rv770_enable_backbias(rdev, true); in rv770_dpm_enable()
1929 rv770_enable_spread_spectrum(rdev, true); in rv770_dpm_enable()
1932 rv770_enable_thermal_protection(rdev, true); in rv770_dpm_enable()
1934 rv770_program_mpll_timing_parameters(rdev); in rv770_dpm_enable()
1935 rv770_setup_bsp(rdev); in rv770_dpm_enable()
1936 rv770_program_git(rdev); in rv770_dpm_enable()
1937 rv770_program_tp(rdev); in rv770_dpm_enable()
1938 rv770_program_tpp(rdev); in rv770_dpm_enable()
1939 rv770_program_sstp(rdev); in rv770_dpm_enable()
1940 rv770_program_engine_speed_parameters(rdev); in rv770_dpm_enable()
1941 rv770_enable_display_gap(rdev); in rv770_dpm_enable()
1942 rv770_program_vc(rdev); in rv770_dpm_enable()
1945 rv770_enable_dynamic_pcie_gen2(rdev, true); in rv770_dpm_enable()
1947 ret = rv770_upload_firmware(rdev); in rv770_dpm_enable()
1952 ret = rv770_init_smc_table(rdev, boot_ps); in rv770_dpm_enable()
1958 rv770_program_response_times(rdev); in rv770_dpm_enable()
1959 r7xx_start_smc(rdev); in rv770_dpm_enable()
1961 if ((rdev->family == CHIP_RV730) || (rdev->family == CHIP_RV710)) in rv770_dpm_enable()
1962 rv730_start_dpm(rdev); in rv770_dpm_enable()
1964 rv770_start_dpm(rdev); in rv770_dpm_enable()
1967 rv770_gfx_clock_gating_enable(rdev, true); in rv770_dpm_enable()
1970 rv770_mg_clock_gating_enable(rdev, true); in rv770_dpm_enable()
1972 rv770_enable_auto_throttle_source(rdev, RADEON_DPM_AUTO_THROTTLE_SRC_THERMAL, true); in rv770_dpm_enable()
1977 int rv770_dpm_late_enable(struct radeon_device *rdev) in rv770_dpm_late_enable() argument
1981 if (rdev->irq.installed && in rv770_dpm_late_enable()
1982 r600_is_internal_thermal_sensor(rdev->pm.int_thermal_type)) { in rv770_dpm_late_enable()
1985 ret = rv770_set_thermal_temperature_range(rdev, R600_TEMP_RANGE_MIN, R600_TEMP_RANGE_MAX); in rv770_dpm_late_enable()
1988 rdev->irq.dpm_thermal = true; in rv770_dpm_late_enable()
1989 radeon_irq_set(rdev); in rv770_dpm_late_enable()
1990 result = rv770_send_msg_to_smc(rdev, PPSMC_MSG_EnableThermalInterrupt); in rv770_dpm_late_enable()
1999 void rv770_dpm_disable(struct radeon_device *rdev) in rv770_dpm_disable() argument
2001 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_dpm_disable()
2003 if (!rv770_dpm_enabled(rdev)) in rv770_dpm_disable()
2006 rv770_clear_vc(rdev); in rv770_dpm_disable()
2009 rv770_enable_thermal_protection(rdev, false); in rv770_dpm_disable()
2011 rv770_enable_spread_spectrum(rdev, false); in rv770_dpm_disable()
2014 rv770_enable_dynamic_pcie_gen2(rdev, false); in rv770_dpm_disable()
2016 if (rdev->irq.installed && in rv770_dpm_disable()
2017 r600_is_internal_thermal_sensor(rdev->pm.int_thermal_type)) { in rv770_dpm_disable()
2018 rdev->irq.dpm_thermal = false; in rv770_dpm_disable()
2019 radeon_irq_set(rdev); in rv770_dpm_disable()
2023 rv770_gfx_clock_gating_enable(rdev, false); in rv770_dpm_disable()
2026 rv770_mg_clock_gating_enable(rdev, false); in rv770_dpm_disable()
2028 if ((rdev->family == CHIP_RV730) || (rdev->family == CHIP_RV710)) in rv770_dpm_disable()
2029 rv730_stop_dpm(rdev); in rv770_dpm_disable()
2031 rv770_stop_dpm(rdev); in rv770_dpm_disable()
2033 r7xx_stop_smc(rdev); in rv770_dpm_disable()
2034 rv770_reset_smio_status(rdev); in rv770_dpm_disable()
2037 int rv770_dpm_set_power_state(struct radeon_device *rdev) in rv770_dpm_set_power_state() argument
2039 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_dpm_set_power_state()
2040 struct radeon_ps *new_ps = rdev->pm.dpm.requested_ps; in rv770_dpm_set_power_state()
2041 struct radeon_ps *old_ps = rdev->pm.dpm.current_ps; in rv770_dpm_set_power_state()
2044 ret = rv770_restrict_performance_levels_before_switch(rdev); in rv770_dpm_set_power_state()
2049 rv770_set_uvd_clock_before_set_eng_clock(rdev, new_ps, old_ps); in rv770_dpm_set_power_state()
2050 ret = rv770_halt_smc(rdev); in rv770_dpm_set_power_state()
2055 ret = rv770_upload_sw_state(rdev, new_ps); in rv770_dpm_set_power_state()
2060 r7xx_program_memory_timing_parameters(rdev, new_ps); in rv770_dpm_set_power_state()
2062 rv770_program_dcodt_before_state_switch(rdev, new_ps, old_ps); in rv770_dpm_set_power_state()
2063 ret = rv770_resume_smc(rdev); in rv770_dpm_set_power_state()
2068 ret = rv770_set_sw_state(rdev); in rv770_dpm_set_power_state()
2074 rv770_program_dcodt_after_state_switch(rdev, new_ps, old_ps); in rv770_dpm_set_power_state()
2075 rv770_set_uvd_clock_after_set_eng_clock(rdev, new_ps, old_ps); in rv770_dpm_set_power_state()
2081 void rv770_dpm_reset_asic(struct radeon_device *rdev)
2083 struct rv7xx_power_info *pi = rv770_get_pi(rdev);
2084 struct radeon_ps *boot_ps = rdev->pm.dpm.boot_ps;
2086 rv770_restrict_performance_levels_before_switch(rdev);
2088 rv770_program_dcodt_before_state_switch(rdev, boot_ps, boot_ps);
2089 rv770_set_boot_state(rdev);
2091 rv770_program_dcodt_after_state_switch(rdev, boot_ps, boot_ps);
2095 void rv770_dpm_setup_asic(struct radeon_device *rdev) in rv770_dpm_setup_asic() argument
2097 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_dpm_setup_asic()
2099 r7xx_read_clock_registers(rdev); in rv770_dpm_setup_asic()
2100 rv770_read_voltage_smio_registers(rdev); in rv770_dpm_setup_asic()
2101 rv770_get_memory_type(rdev); in rv770_dpm_setup_asic()
2103 rv770_get_mclk_odt_threshold(rdev); in rv770_dpm_setup_asic()
2104 rv770_get_pcie_gen2_status(rdev); in rv770_dpm_setup_asic()
2106 rv770_enable_acpi_pm(rdev); in rv770_dpm_setup_asic()
2109 if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L0s) in rv770_dpm_setup_asic()
2110 rv770_enable_l0s(rdev); in rv770_dpm_setup_asic()
2111 if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_ASPM_L1) in rv770_dpm_setup_asic()
2112 rv770_enable_l1(rdev); in rv770_dpm_setup_asic()
2113 if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_TURNOFFPLL_ASPML1) in rv770_dpm_setup_asic()
2114 rv770_enable_pll_sleep_in_l1(rdev); in rv770_dpm_setup_asic()
2118 void rv770_dpm_display_configuration_changed(struct radeon_device *rdev) in rv770_dpm_display_configuration_changed() argument
2120 rv770_program_display_gap(rdev); in rv770_dpm_display_configuration_changed()
2144 static void rv7xx_parse_pplib_non_clock_info(struct radeon_device *rdev, in rv7xx_parse_pplib_non_clock_info() argument
2169 rdev->pm.dpm.boot_ps = rps; in rv7xx_parse_pplib_non_clock_info()
2171 rdev->pm.dpm.uvd_ps = rps; in rv7xx_parse_pplib_non_clock_info()
2174 static void rv7xx_parse_pplib_clock_info(struct radeon_device *rdev, in rv7xx_parse_pplib_clock_info() argument
2178 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv7xx_parse_pplib_clock_info()
2179 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in rv7xx_parse_pplib_clock_info()
2197 if (rdev->family >= CHIP_CEDAR) { in rv7xx_parse_pplib_clock_info()
2227 if (rdev->family >= CHIP_CEDAR) in rv7xx_parse_pplib_clock_info()
2236 if (rdev->family >= CHIP_BARTS) { in rv7xx_parse_pplib_clock_info()
2251 radeon_atombios_get_default_voltages(rdev, &vddc, &vddci, &mvdd); in rv7xx_parse_pplib_clock_info()
2252 pl->mclk = rdev->clock.default_mclk; in rv7xx_parse_pplib_clock_info()
2253 pl->sclk = rdev->clock.default_sclk; in rv7xx_parse_pplib_clock_info()
2260 rdev->pm.dpm.dyn_state.max_clock_voltage_on_ac.sclk = pl->sclk; in rv7xx_parse_pplib_clock_info()
2261 rdev->pm.dpm.dyn_state.max_clock_voltage_on_ac.mclk = pl->mclk; in rv7xx_parse_pplib_clock_info()
2262 rdev->pm.dpm.dyn_state.max_clock_voltage_on_ac.vddc = pl->vddc; in rv7xx_parse_pplib_clock_info()
2263 rdev->pm.dpm.dyn_state.max_clock_voltage_on_ac.vddci = pl->vddci; in rv7xx_parse_pplib_clock_info()
2267 int rv7xx_parse_power_table(struct radeon_device *rdev) in rv7xx_parse_power_table() argument
2269 struct radeon_mode_info *mode_info = &rdev->mode_info; in rv7xx_parse_power_table()
2285 rdev->pm.dpm.ps = kzalloc(sizeof(struct radeon_ps) * in rv7xx_parse_power_table()
2287 if (!rdev->pm.dpm.ps) in rv7xx_parse_power_table()
2304 kfree(rdev->pm.dpm.ps); in rv7xx_parse_power_table()
2307 rdev->pm.dpm.ps[i].ps_priv = ps; in rv7xx_parse_power_table()
2308 rv7xx_parse_pplib_non_clock_info(rdev, &rdev->pm.dpm.ps[i], in rv7xx_parse_power_table()
2317 rv7xx_parse_pplib_clock_info(rdev, in rv7xx_parse_power_table()
2318 &rdev->pm.dpm.ps[i], j, in rv7xx_parse_power_table()
2323 rdev->pm.dpm.num_ps = power_info->pplib.ucNumStates; in rv7xx_parse_power_table()
2327 void rv770_get_engine_memory_ss(struct radeon_device *rdev) in rv770_get_engine_memory_ss() argument
2329 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in rv770_get_engine_memory_ss()
2332 pi->sclk_ss = radeon_atombios_get_asic_ss_info(rdev, &ss, in rv770_get_engine_memory_ss()
2334 pi->mclk_ss = radeon_atombios_get_asic_ss_info(rdev, &ss, in rv770_get_engine_memory_ss()
2343 int rv770_dpm_init(struct radeon_device *rdev) in rv770_dpm_init() argument
2352 rdev->pm.dpm.priv = pi; in rv770_dpm_init()
2354 rv770_get_max_vddc(rdev); in rv770_dpm_init()
2360 ret = r600_get_platform_caps(rdev); in rv770_dpm_init()
2364 ret = rv7xx_parse_power_table(rdev); in rv770_dpm_init()
2368 if (rdev->pm.dpm.voltage_response_time == 0) in rv770_dpm_init()
2369 rdev->pm.dpm.voltage_response_time = R600_VOLTAGERESPONSETIME_DFLT; in rv770_dpm_init()
2370 if (rdev->pm.dpm.backbias_response_time == 0) in rv770_dpm_init()
2371 rdev->pm.dpm.backbias_response_time = R600_BACKBIASRESPONSETIME_DFLT; in rv770_dpm_init()
2373 ret = radeon_atom_get_clock_dividers(rdev, COMPUTE_ENGINE_PLL_PARAM, in rv770_dpm_init()
2389 radeon_atom_is_voltage_gpio(rdev, SET_VOLTAGE_TYPE_ASIC_VDDC, 0); in rv770_dpm_init()
2392 radeon_atom_is_voltage_gpio(rdev, SET_VOLTAGE_TYPE_ASIC_MVDDC, 0); in rv770_dpm_init()
2394 rv770_get_engine_memory_ss(rdev); in rv770_dpm_init()
2409 if (rdev->pm.int_thermal_type != THERMAL_TYPE_NONE) in rv770_dpm_init()
2416 if (rdev->flags & RADEON_IS_MOBILITY) in rv770_dpm_init()
2432 void rv770_dpm_print_power_state(struct radeon_device *rdev, in rv770_dpm_print_power_state() argument
2441 if (rdev->family >= CHIP_CEDAR) { in rv770_dpm_print_power_state()
2462 r600_dpm_print_ps_status(rdev, rps); in rv770_dpm_print_power_state()
2465 void rv770_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev, in rv770_dpm_debugfs_print_current_performance_level() argument
2468 struct radeon_ps *rps = rdev->pm.dpm.current_ps; in rv770_dpm_debugfs_print_current_performance_level()
2485 if (rdev->family >= CHIP_CEDAR) { in rv770_dpm_debugfs_print_current_performance_level()
2495 u32 rv770_dpm_get_current_sclk(struct radeon_device *rdev) in rv770_dpm_get_current_sclk() argument
2497 struct radeon_ps *rps = rdev->pm.dpm.current_ps; in rv770_dpm_get_current_sclk()
2517 u32 rv770_dpm_get_current_mclk(struct radeon_device *rdev) in rv770_dpm_get_current_mclk() argument
2519 struct radeon_ps *rps = rdev->pm.dpm.current_ps; in rv770_dpm_get_current_mclk()
2539 void rv770_dpm_fini(struct radeon_device *rdev) in rv770_dpm_fini() argument
2543 for (i = 0; i < rdev->pm.dpm.num_ps; i++) { in rv770_dpm_fini()
2544 kfree(rdev->pm.dpm.ps[i].ps_priv); in rv770_dpm_fini()
2546 kfree(rdev->pm.dpm.ps); in rv770_dpm_fini()
2547 kfree(rdev->pm.dpm.priv); in rv770_dpm_fini()
2550 u32 rv770_dpm_get_sclk(struct radeon_device *rdev, bool low) in rv770_dpm_get_sclk() argument
2552 struct rv7xx_ps *requested_state = rv770_get_ps(rdev->pm.dpm.requested_ps); in rv770_dpm_get_sclk()
2560 u32 rv770_dpm_get_mclk(struct radeon_device *rdev, bool low) in rv770_dpm_get_mclk() argument
2562 struct rv7xx_ps *requested_state = rv770_get_ps(rdev->pm.dpm.requested_ps); in rv770_dpm_get_mclk()
2570 bool rv770_dpm_vblank_too_short(struct radeon_device *rdev) in rv770_dpm_vblank_too_short() argument
2572 u32 vblank_time = r600_dpm_get_vblank_time(rdev); in rv770_dpm_vblank_too_short()
2577 if ((rdev->family == CHIP_RV770) && in rv770_dpm_vblank_too_short()
2578 !(rdev->flags & RADEON_IS_MOBILITY)) in rv770_dpm_vblank_too_short()