Lines Matching refs:rdev
51 struct rv7xx_power_info *rv770_get_pi(struct radeon_device *rdev);
52 struct evergreen_power_info *evergreen_get_pi(struct radeon_device *rdev);
54 extern int ni_mc_load_microcode(struct radeon_device *rdev);
1228 static u32 btc_get_valid_mclk(struct radeon_device *rdev, in btc_get_valid_mclk() argument
1231 return btc_find_valid_clock(&rdev->pm.dpm.dyn_state.valid_mclk_values, in btc_get_valid_mclk()
1235 static u32 btc_get_valid_sclk(struct radeon_device *rdev, in btc_get_valid_sclk() argument
1238 return btc_find_valid_clock(&rdev->pm.dpm.dyn_state.valid_sclk_values, in btc_get_valid_sclk()
1242 void btc_skip_blacklist_clocks(struct radeon_device *rdev, in btc_skip_blacklist_clocks() argument
1261 *sclk = btc_get_valid_sclk(rdev, max_sclk, *sclk + 1); in btc_skip_blacklist_clocks()
1264 btc_skip_blacklist_clocks(rdev, max_sclk, max_mclk, sclk, mclk); in btc_skip_blacklist_clocks()
1269 void btc_adjust_clock_combinations(struct radeon_device *rdev, in btc_adjust_clock_combinations() argument
1281 if (((pl->mclk + (pl->sclk - 1)) / pl->sclk) > rdev->pm.dpm.dyn_state.mclk_sclk_ratio) in btc_adjust_clock_combinations()
1282 pl->sclk = btc_get_valid_sclk(rdev, in btc_adjust_clock_combinations()
1285 (rdev->pm.dpm.dyn_state.mclk_sclk_ratio - 1)) / in btc_adjust_clock_combinations()
1286 rdev->pm.dpm.dyn_state.mclk_sclk_ratio); in btc_adjust_clock_combinations()
1288 if ((pl->sclk - pl->mclk) > rdev->pm.dpm.dyn_state.sclk_mclk_delta) in btc_adjust_clock_combinations()
1289 pl->mclk = btc_get_valid_mclk(rdev, in btc_adjust_clock_combinations()
1292 rdev->pm.dpm.dyn_state.sclk_mclk_delta); in btc_adjust_clock_combinations()
1308 void btc_apply_voltage_delta_rules(struct radeon_device *rdev, in btc_apply_voltage_delta_rules() argument
1312 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_apply_voltage_delta_rules()
1319 if ((*vddc - *vddci) > rdev->pm.dpm.dyn_state.vddc_vddci_delta) { in btc_apply_voltage_delta_rules()
1321 (*vddc - rdev->pm.dpm.dyn_state.vddc_vddci_delta)); in btc_apply_voltage_delta_rules()
1325 if ((*vddci - *vddc) > rdev->pm.dpm.dyn_state.vddc_vddci_delta) { in btc_apply_voltage_delta_rules()
1327 (*vddci - rdev->pm.dpm.dyn_state.vddc_vddci_delta)); in btc_apply_voltage_delta_rules()
1333 static void btc_enable_bif_dynamic_pcie_gen2(struct radeon_device *rdev, in btc_enable_bif_dynamic_pcie_gen2() argument
1336 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in btc_enable_bif_dynamic_pcie_gen2()
1375 static void btc_enable_dynamic_pcie_gen2(struct radeon_device *rdev, in btc_enable_dynamic_pcie_gen2() argument
1378 btc_enable_bif_dynamic_pcie_gen2(rdev, enable); in btc_enable_dynamic_pcie_gen2()
1386 static int btc_disable_ulv(struct radeon_device *rdev) in btc_disable_ulv() argument
1388 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_disable_ulv()
1391 if (rv770_send_msg_to_smc(rdev, PPSMC_MSG_DisableULV) != PPSMC_Result_OK) in btc_disable_ulv()
1397 static int btc_populate_ulv_state(struct radeon_device *rdev, in btc_populate_ulv_state() argument
1401 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_populate_ulv_state()
1405 ret = cypress_convert_power_level_to_smc(rdev, in btc_populate_ulv_state()
1426 static int btc_populate_smc_acpi_state(struct radeon_device *rdev, in btc_populate_smc_acpi_state() argument
1429 int ret = cypress_populate_smc_acpi_state(rdev, table); in btc_populate_smc_acpi_state()
1440 void btc_program_mgcg_hw_sequence(struct radeon_device *rdev, in btc_program_mgcg_hw_sequence() argument
1454 static void btc_cg_clock_gating_default(struct radeon_device *rdev) in btc_cg_clock_gating_default() argument
1459 if (rdev->family == CHIP_BARTS) { in btc_cg_clock_gating_default()
1462 } else if (rdev->family == CHIP_TURKS) { in btc_cg_clock_gating_default()
1465 } else if (rdev->family == CHIP_CAICOS) { in btc_cg_clock_gating_default()
1471 btc_program_mgcg_hw_sequence(rdev, p, count); in btc_cg_clock_gating_default()
1474 static void btc_cg_clock_gating_enable(struct radeon_device *rdev, in btc_cg_clock_gating_enable() argument
1481 if (rdev->family == CHIP_BARTS) { in btc_cg_clock_gating_enable()
1484 } else if (rdev->family == CHIP_TURKS) { in btc_cg_clock_gating_enable()
1487 } else if (rdev->family == CHIP_CAICOS) { in btc_cg_clock_gating_enable()
1493 if (rdev->family == CHIP_BARTS) { in btc_cg_clock_gating_enable()
1496 } else if (rdev->family == CHIP_TURKS) { in btc_cg_clock_gating_enable()
1499 } else if (rdev->family == CHIP_CAICOS) { in btc_cg_clock_gating_enable()
1506 btc_program_mgcg_hw_sequence(rdev, p, count); in btc_cg_clock_gating_enable()
1509 static void btc_mg_clock_gating_default(struct radeon_device *rdev) in btc_mg_clock_gating_default() argument
1514 if (rdev->family == CHIP_BARTS) { in btc_mg_clock_gating_default()
1517 } else if (rdev->family == CHIP_TURKS) { in btc_mg_clock_gating_default()
1520 } else if (rdev->family == CHIP_CAICOS) { in btc_mg_clock_gating_default()
1526 btc_program_mgcg_hw_sequence(rdev, p, count); in btc_mg_clock_gating_default()
1529 static void btc_mg_clock_gating_enable(struct radeon_device *rdev, in btc_mg_clock_gating_enable() argument
1536 if (rdev->family == CHIP_BARTS) { in btc_mg_clock_gating_enable()
1539 } else if (rdev->family == CHIP_TURKS) { in btc_mg_clock_gating_enable()
1542 } else if (rdev->family == CHIP_CAICOS) { in btc_mg_clock_gating_enable()
1548 if (rdev->family == CHIP_BARTS) { in btc_mg_clock_gating_enable()
1551 } else if (rdev->family == CHIP_TURKS) { in btc_mg_clock_gating_enable()
1554 } else if (rdev->family == CHIP_CAICOS) { in btc_mg_clock_gating_enable()
1561 btc_program_mgcg_hw_sequence(rdev, p, count); in btc_mg_clock_gating_enable()
1564 static void btc_ls_clock_gating_default(struct radeon_device *rdev) in btc_ls_clock_gating_default() argument
1569 if (rdev->family == CHIP_BARTS) { in btc_ls_clock_gating_default()
1572 } else if (rdev->family == CHIP_TURKS) { in btc_ls_clock_gating_default()
1575 } else if (rdev->family == CHIP_CAICOS) { in btc_ls_clock_gating_default()
1581 btc_program_mgcg_hw_sequence(rdev, p, count); in btc_ls_clock_gating_default()
1584 static void btc_ls_clock_gating_enable(struct radeon_device *rdev, in btc_ls_clock_gating_enable() argument
1591 if (rdev->family == CHIP_BARTS) { in btc_ls_clock_gating_enable()
1594 } else if (rdev->family == CHIP_TURKS) { in btc_ls_clock_gating_enable()
1597 } else if (rdev->family == CHIP_CAICOS) { in btc_ls_clock_gating_enable()
1603 if (rdev->family == CHIP_BARTS) { in btc_ls_clock_gating_enable()
1606 } else if (rdev->family == CHIP_TURKS) { in btc_ls_clock_gating_enable()
1609 } else if (rdev->family == CHIP_CAICOS) { in btc_ls_clock_gating_enable()
1616 btc_program_mgcg_hw_sequence(rdev, p, count); in btc_ls_clock_gating_enable()
1619 bool btc_dpm_enabled(struct radeon_device *rdev) in btc_dpm_enabled() argument
1621 if (rv770_is_smc_running(rdev)) in btc_dpm_enabled()
1627 static int btc_init_smc_table(struct radeon_device *rdev, in btc_init_smc_table() argument
1630 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in btc_init_smc_table()
1631 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_init_smc_table()
1637 cypress_populate_smc_voltage_tables(rdev, table); in btc_init_smc_table()
1639 switch (rdev->pm.int_thermal_type) { in btc_init_smc_table()
1652 if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_HARDWAREDC) in btc_init_smc_table()
1655 if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_REGULATOR_HOT) in btc_init_smc_table()
1658 if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_STEPVDDC) in btc_init_smc_table()
1664 ret = cypress_populate_smc_initial_state(rdev, radeon_boot_state, table); in btc_init_smc_table()
1672 ret = btc_populate_smc_acpi_state(rdev, table); in btc_init_smc_table()
1677 ret = btc_populate_ulv_state(rdev, table); in btc_init_smc_table()
1684 return rv770_copy_bytes_to_smc(rdev, in btc_init_smc_table()
1691 static void btc_set_at_for_uvd(struct radeon_device *rdev, in btc_set_at_for_uvd() argument
1694 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in btc_set_at_for_uvd()
1695 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_set_at_for_uvd()
1715 void btc_notify_uvd_to_smc(struct radeon_device *rdev, in btc_notify_uvd_to_smc() argument
1718 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_notify_uvd_to_smc()
1721 rv770_write_smc_soft_register(rdev, in btc_notify_uvd_to_smc()
1725 rv770_write_smc_soft_register(rdev, in btc_notify_uvd_to_smc()
1731 int btc_reset_to_default(struct radeon_device *rdev) in btc_reset_to_default() argument
1733 if (rv770_send_msg_to_smc(rdev, PPSMC_MSG_ResetToDefaults) != PPSMC_Result_OK) in btc_reset_to_default()
1739 static void btc_stop_smc(struct radeon_device *rdev) in btc_stop_smc() argument
1743 for (i = 0; i < rdev->usec_timeout; i++) { in btc_stop_smc()
1750 r7xx_stop_smc(rdev); in btc_stop_smc()
1753 void btc_read_arb_registers(struct radeon_device *rdev) in btc_read_arb_registers() argument
1755 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_read_arb_registers()
1766 static void btc_set_arb0_registers(struct radeon_device *rdev, in btc_set_arb0_registers() argument
1783 static void btc_set_boot_state_timing(struct radeon_device *rdev) in btc_set_boot_state_timing() argument
1785 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_set_boot_state_timing()
1788 btc_set_arb0_registers(rdev, &eg_pi->bootup_arb_registers); in btc_set_boot_state_timing()
1791 static bool btc_is_state_ulv_compatible(struct radeon_device *rdev, in btc_is_state_ulv_compatible() argument
1795 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_is_state_ulv_compatible()
1810 static int btc_set_ulv_dram_timing(struct radeon_device *rdev) in btc_set_ulv_dram_timing() argument
1813 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_set_ulv_dram_timing()
1816 radeon_atom_set_engine_dram_timings(rdev, in btc_set_ulv_dram_timing()
1820 val = rv770_calculate_memory_refresh_rate(rdev, ulv_pl->sclk); in btc_set_ulv_dram_timing()
1823 val = cypress_calculate_burst_time(rdev, ulv_pl->sclk, ulv_pl->mclk); in btc_set_ulv_dram_timing()
1829 static int btc_enable_ulv(struct radeon_device *rdev) in btc_enable_ulv() argument
1831 if (rv770_send_msg_to_smc(rdev, PPSMC_MSG_EnableULV) != PPSMC_Result_OK) in btc_enable_ulv()
1837 static int btc_set_power_state_conditionally_enable_ulv(struct radeon_device *rdev, in btc_set_power_state_conditionally_enable_ulv() argument
1841 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_set_power_state_conditionally_enable_ulv()
1844 if (btc_is_state_ulv_compatible(rdev, radeon_new_state)) { in btc_set_power_state_conditionally_enable_ulv()
1846 ret = btc_set_ulv_dram_timing(rdev); in btc_set_power_state_conditionally_enable_ulv()
1848 ret = btc_enable_ulv(rdev); in btc_set_power_state_conditionally_enable_ulv()
1916 static int btc_set_mc_special_registers(struct radeon_device *rdev, in btc_set_mc_special_registers() argument
1919 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in btc_set_mc_special_registers()
2017 static int btc_initialize_mc_reg_table(struct radeon_device *rdev) in btc_initialize_mc_reg_table() argument
2021 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_initialize_mc_reg_table()
2023 u8 module_index = rv770_get_memory_module_index(rdev); in btc_initialize_mc_reg_table()
2042 ret = radeon_atom_init_mc_reg_table(rdev, module_index, table); in btc_initialize_mc_reg_table()
2053 ret = btc_set_mc_special_registers(rdev, eg_table); in btc_initialize_mc_reg_table()
2066 static void btc_init_stutter_mode(struct radeon_device *rdev) in btc_init_stutter_mode() argument
2068 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in btc_init_stutter_mode()
2082 bool btc_dpm_vblank_too_short(struct radeon_device *rdev) in btc_dpm_vblank_too_short() argument
2084 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in btc_dpm_vblank_too_short()
2085 u32 vblank_time = r600_dpm_get_vblank_time(rdev); in btc_dpm_vblank_too_short()
2095 static void btc_apply_state_adjust_rules(struct radeon_device *rdev, in btc_apply_state_adjust_rules() argument
2104 if ((rdev->pm.dpm.new_active_crtc_count > 1) || in btc_apply_state_adjust_rules()
2105 btc_dpm_vblank_too_short(rdev)) in btc_apply_state_adjust_rules()
2110 if (rdev->pm.dpm.ac_power) in btc_apply_state_adjust_rules()
2111 max_limits = &rdev->pm.dpm.dyn_state.max_clock_voltage_on_ac; in btc_apply_state_adjust_rules()
2113 max_limits = &rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc; in btc_apply_state_adjust_rules()
2115 if (rdev->pm.dpm.ac_power == false) { in btc_apply_state_adjust_rules()
2164 btc_skip_blacklist_clocks(rdev, max_limits->sclk, max_limits->mclk, in btc_apply_state_adjust_rules()
2200 btc_skip_blacklist_clocks(rdev, max_limits->sclk, max_limits->mclk, in btc_apply_state_adjust_rules()
2202 btc_skip_blacklist_clocks(rdev, max_limits->sclk, max_limits->mclk, in btc_apply_state_adjust_rules()
2205 btc_adjust_clock_combinations(rdev, max_limits, &ps->low); in btc_apply_state_adjust_rules()
2206 btc_adjust_clock_combinations(rdev, max_limits, &ps->medium); in btc_apply_state_adjust_rules()
2207 btc_adjust_clock_combinations(rdev, max_limits, &ps->high); in btc_apply_state_adjust_rules()
2209 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk, in btc_apply_state_adjust_rules()
2211 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddci_dependency_on_mclk, in btc_apply_state_adjust_rules()
2213 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddc_dependency_on_mclk, in btc_apply_state_adjust_rules()
2215 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk, in btc_apply_state_adjust_rules()
2216 rdev->clock.current_dispclk, max_limits->vddc, &ps->low.vddc); in btc_apply_state_adjust_rules()
2218 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk, in btc_apply_state_adjust_rules()
2220 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddci_dependency_on_mclk, in btc_apply_state_adjust_rules()
2222 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddc_dependency_on_mclk, in btc_apply_state_adjust_rules()
2224 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk, in btc_apply_state_adjust_rules()
2225 rdev->clock.current_dispclk, max_limits->vddc, &ps->medium.vddc); in btc_apply_state_adjust_rules()
2227 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk, in btc_apply_state_adjust_rules()
2229 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddci_dependency_on_mclk, in btc_apply_state_adjust_rules()
2231 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddc_dependency_on_mclk, in btc_apply_state_adjust_rules()
2233 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk, in btc_apply_state_adjust_rules()
2234 rdev->clock.current_dispclk, max_limits->vddc, &ps->high.vddc); in btc_apply_state_adjust_rules()
2236 btc_apply_voltage_delta_rules(rdev, max_limits->vddc, max_limits->vddci, in btc_apply_state_adjust_rules()
2238 btc_apply_voltage_delta_rules(rdev, max_limits->vddc, max_limits->vddci, in btc_apply_state_adjust_rules()
2240 btc_apply_voltage_delta_rules(rdev, max_limits->vddc, max_limits->vddci, in btc_apply_state_adjust_rules()
2243 if ((ps->high.vddc <= rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc.vddc) && in btc_apply_state_adjust_rules()
2244 (ps->medium.vddc <= rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc.vddc) && in btc_apply_state_adjust_rules()
2245 (ps->low.vddc <= rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc.vddc)) in btc_apply_state_adjust_rules()
2250 if (ps->low.vddc < rdev->pm.dpm.dyn_state.min_vddc_for_pcie_gen2) in btc_apply_state_adjust_rules()
2252 if (ps->medium.vddc < rdev->pm.dpm.dyn_state.min_vddc_for_pcie_gen2) in btc_apply_state_adjust_rules()
2254 if (ps->high.vddc < rdev->pm.dpm.dyn_state.min_vddc_for_pcie_gen2) in btc_apply_state_adjust_rules()
2258 static void btc_update_current_ps(struct radeon_device *rdev, in btc_update_current_ps() argument
2262 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_update_current_ps()
2269 static void btc_update_requested_ps(struct radeon_device *rdev, in btc_update_requested_ps() argument
2273 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_update_requested_ps()
2281 void btc_dpm_reset_asic(struct radeon_device *rdev)
2283 rv770_restrict_performance_levels_before_switch(rdev);
2284 btc_disable_ulv(rdev);
2285 btc_set_boot_state_timing(rdev);
2286 rv770_set_boot_state(rdev);
2290 int btc_dpm_pre_set_power_state(struct radeon_device *rdev) in btc_dpm_pre_set_power_state() argument
2292 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_dpm_pre_set_power_state()
2293 struct radeon_ps requested_ps = *rdev->pm.dpm.requested_ps; in btc_dpm_pre_set_power_state()
2296 btc_update_requested_ps(rdev, new_ps); in btc_dpm_pre_set_power_state()
2298 btc_apply_state_adjust_rules(rdev, &eg_pi->requested_rps); in btc_dpm_pre_set_power_state()
2303 int btc_dpm_set_power_state(struct radeon_device *rdev) in btc_dpm_set_power_state() argument
2305 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_dpm_set_power_state()
2310 ret = btc_disable_ulv(rdev); in btc_dpm_set_power_state()
2311 btc_set_boot_state_timing(rdev); in btc_dpm_set_power_state()
2312 ret = rv770_restrict_performance_levels_before_switch(rdev); in btc_dpm_set_power_state()
2318 cypress_notify_link_speed_change_before_state_change(rdev, new_ps, old_ps); in btc_dpm_set_power_state()
2320 rv770_set_uvd_clock_before_set_eng_clock(rdev, new_ps, old_ps); in btc_dpm_set_power_state()
2321 ret = rv770_halt_smc(rdev); in btc_dpm_set_power_state()
2326 btc_set_at_for_uvd(rdev, new_ps); in btc_dpm_set_power_state()
2328 btc_notify_uvd_to_smc(rdev, new_ps); in btc_dpm_set_power_state()
2329 ret = cypress_upload_sw_state(rdev, new_ps); in btc_dpm_set_power_state()
2335 ret = cypress_upload_mc_reg_table(rdev, new_ps); in btc_dpm_set_power_state()
2342 cypress_program_memory_timing_parameters(rdev, new_ps); in btc_dpm_set_power_state()
2344 ret = rv770_resume_smc(rdev); in btc_dpm_set_power_state()
2349 ret = rv770_set_sw_state(rdev); in btc_dpm_set_power_state()
2354 rv770_set_uvd_clock_after_set_eng_clock(rdev, new_ps, old_ps); in btc_dpm_set_power_state()
2357 cypress_notify_link_speed_change_after_state_change(rdev, new_ps, old_ps); in btc_dpm_set_power_state()
2359 ret = btc_set_power_state_conditionally_enable_ulv(rdev, new_ps); in btc_dpm_set_power_state()
2368 void btc_dpm_post_set_power_state(struct radeon_device *rdev) in btc_dpm_post_set_power_state() argument
2370 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_dpm_post_set_power_state()
2373 btc_update_current_ps(rdev, new_ps); in btc_dpm_post_set_power_state()
2376 int btc_dpm_enable(struct radeon_device *rdev) in btc_dpm_enable() argument
2378 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in btc_dpm_enable()
2379 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_dpm_enable()
2380 struct radeon_ps *boot_ps = rdev->pm.dpm.boot_ps; in btc_dpm_enable()
2384 btc_cg_clock_gating_default(rdev); in btc_dpm_enable()
2386 if (btc_dpm_enabled(rdev)) in btc_dpm_enable()
2390 btc_mg_clock_gating_default(rdev); in btc_dpm_enable()
2393 btc_ls_clock_gating_default(rdev); in btc_dpm_enable()
2396 rv770_enable_voltage_control(rdev, true); in btc_dpm_enable()
2397 ret = cypress_construct_voltage_tables(rdev); in btc_dpm_enable()
2405 ret = cypress_get_mvdd_configuration(rdev); in btc_dpm_enable()
2413 ret = btc_initialize_mc_reg_table(rdev); in btc_dpm_enable()
2418 if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_BACKBIAS) in btc_dpm_enable()
2419 rv770_enable_backbias(rdev, true); in btc_dpm_enable()
2422 cypress_enable_spread_spectrum(rdev, true); in btc_dpm_enable()
2425 rv770_enable_thermal_protection(rdev, true); in btc_dpm_enable()
2427 rv770_setup_bsp(rdev); in btc_dpm_enable()
2428 rv770_program_git(rdev); in btc_dpm_enable()
2429 rv770_program_tp(rdev); in btc_dpm_enable()
2430 rv770_program_tpp(rdev); in btc_dpm_enable()
2431 rv770_program_sstp(rdev); in btc_dpm_enable()
2432 rv770_program_engine_speed_parameters(rdev); in btc_dpm_enable()
2433 cypress_enable_display_gap(rdev); in btc_dpm_enable()
2434 rv770_program_vc(rdev); in btc_dpm_enable()
2437 btc_enable_dynamic_pcie_gen2(rdev, true); in btc_dpm_enable()
2439 ret = rv770_upload_firmware(rdev); in btc_dpm_enable()
2444 ret = cypress_get_table_locations(rdev); in btc_dpm_enable()
2449 ret = btc_init_smc_table(rdev, boot_ps); in btc_dpm_enable()
2454 ret = cypress_populate_mc_reg_table(rdev, boot_ps); in btc_dpm_enable()
2461 cypress_program_response_times(rdev); in btc_dpm_enable()
2462 r7xx_start_smc(rdev); in btc_dpm_enable()
2463 ret = cypress_notify_smc_display_change(rdev, false); in btc_dpm_enable()
2468 cypress_enable_sclk_control(rdev, true); in btc_dpm_enable()
2471 cypress_enable_mclk_control(rdev, true); in btc_dpm_enable()
2473 cypress_start_dpm(rdev); in btc_dpm_enable()
2476 btc_cg_clock_gating_enable(rdev, true); in btc_dpm_enable()
2479 btc_mg_clock_gating_enable(rdev, true); in btc_dpm_enable()
2482 btc_ls_clock_gating_enable(rdev, true); in btc_dpm_enable()
2484 rv770_enable_auto_throttle_source(rdev, RADEON_DPM_AUTO_THROTTLE_SRC_THERMAL, true); in btc_dpm_enable()
2486 btc_init_stutter_mode(rdev); in btc_dpm_enable()
2488 btc_update_current_ps(rdev, rdev->pm.dpm.boot_ps); in btc_dpm_enable()
2493 void btc_dpm_disable(struct radeon_device *rdev) in btc_dpm_disable() argument
2495 struct rv7xx_power_info *pi = rv770_get_pi(rdev); in btc_dpm_disable()
2496 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_dpm_disable()
2498 if (!btc_dpm_enabled(rdev)) in btc_dpm_disable()
2501 rv770_clear_vc(rdev); in btc_dpm_disable()
2504 rv770_enable_thermal_protection(rdev, false); in btc_dpm_disable()
2507 btc_enable_dynamic_pcie_gen2(rdev, false); in btc_dpm_disable()
2509 if (rdev->irq.installed && in btc_dpm_disable()
2510 r600_is_internal_thermal_sensor(rdev->pm.int_thermal_type)) { in btc_dpm_disable()
2511 rdev->irq.dpm_thermal = false; in btc_dpm_disable()
2512 radeon_irq_set(rdev); in btc_dpm_disable()
2516 btc_cg_clock_gating_enable(rdev, false); in btc_dpm_disable()
2519 btc_mg_clock_gating_enable(rdev, false); in btc_dpm_disable()
2522 btc_ls_clock_gating_enable(rdev, false); in btc_dpm_disable()
2524 rv770_stop_dpm(rdev); in btc_dpm_disable()
2525 btc_reset_to_default(rdev); in btc_dpm_disable()
2526 btc_stop_smc(rdev); in btc_dpm_disable()
2527 cypress_enable_spread_spectrum(rdev, false); in btc_dpm_disable()
2529 btc_update_current_ps(rdev, rdev->pm.dpm.boot_ps); in btc_dpm_disable()
2532 void btc_dpm_setup_asic(struct radeon_device *rdev) in btc_dpm_setup_asic() argument
2534 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_dpm_setup_asic()
2537 r = ni_mc_load_microcode(rdev); in btc_dpm_setup_asic()
2540 rv770_get_memory_type(rdev); in btc_dpm_setup_asic()
2541 rv740_read_clock_registers(rdev); in btc_dpm_setup_asic()
2542 btc_read_arb_registers(rdev); in btc_dpm_setup_asic()
2543 rv770_read_voltage_smio_registers(rdev); in btc_dpm_setup_asic()
2546 cypress_advertise_gen2_capability(rdev); in btc_dpm_setup_asic()
2548 rv770_get_pcie_gen2_status(rdev); in btc_dpm_setup_asic()
2549 rv770_enable_acpi_pm(rdev); in btc_dpm_setup_asic()
2552 int btc_dpm_init(struct radeon_device *rdev) in btc_dpm_init() argument
2562 rdev->pm.dpm.priv = eg_pi; in btc_dpm_init()
2565 rv770_get_max_vddc(rdev); in btc_dpm_init()
2573 ret = r600_get_platform_caps(rdev); in btc_dpm_init()
2577 ret = rv7xx_parse_power_table(rdev); in btc_dpm_init()
2580 ret = r600_parse_extended_power_table(rdev); in btc_dpm_init()
2584 rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries = in btc_dpm_init()
2586 if (!rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries) { in btc_dpm_init()
2587 r600_free_extended_power_table(rdev); in btc_dpm_init()
2590 rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.count = 4; in btc_dpm_init()
2591 rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[0].clk = 0; in btc_dpm_init()
2592 rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[0].v = 0; in btc_dpm_init()
2593 rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[1].clk = 36000; in btc_dpm_init()
2594 rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[1].v = 800; in btc_dpm_init()
2595 rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[2].clk = 54000; in btc_dpm_init()
2596 rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[2].v = 800; in btc_dpm_init()
2597 rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[3].clk = 72000; in btc_dpm_init()
2598 rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[3].v = 800; in btc_dpm_init()
2600 if (rdev->pm.dpm.voltage_response_time == 0) in btc_dpm_init()
2601 rdev->pm.dpm.voltage_response_time = R600_VOLTAGERESPONSETIME_DFLT; in btc_dpm_init()
2602 if (rdev->pm.dpm.backbias_response_time == 0) in btc_dpm_init()
2603 rdev->pm.dpm.backbias_response_time = R600_BACKBIASRESPONSETIME_DFLT; in btc_dpm_init()
2605 ret = radeon_atom_get_clock_dividers(rdev, COMPUTE_ENGINE_PLL_PARAM, in btc_dpm_init()
2634 radeon_atom_is_voltage_gpio(rdev, SET_VOLTAGE_TYPE_ASIC_VDDC, 0); in btc_dpm_init()
2637 radeon_atom_is_voltage_gpio(rdev, SET_VOLTAGE_TYPE_ASIC_MVDDC, 0); in btc_dpm_init()
2640 radeon_atom_is_voltage_gpio(rdev, SET_VOLTAGE_TYPE_ASIC_VDDCI, 0); in btc_dpm_init()
2642 rv770_get_engine_memory_ss(rdev); in btc_dpm_init()
2659 if (rdev->pm.int_thermal_type != THERMAL_TYPE_NONE) in btc_dpm_init()
2666 if (rdev->flags & RADEON_IS_MOBILITY) in btc_dpm_init()
2680 radeon_acpi_is_pcie_performance_request_supported(rdev); in btc_dpm_init()
2685 if (rdev->family == CHIP_BARTS) in btc_dpm_init()
2691 if (ASIC_IS_LOMBOK(rdev)) in btc_dpm_init()
2698 rdev->pm.dpm.dyn_state.mclk_sclk_ratio = 4; in btc_dpm_init()
2699 rdev->pm.dpm.dyn_state.vddc_vddci_delta = 200; in btc_dpm_init()
2700 rdev->pm.dpm.dyn_state.min_vddc_for_pcie_gen2 = 900; in btc_dpm_init()
2701 rdev->pm.dpm.dyn_state.valid_sclk_values.count = ARRAY_SIZE(btc_valid_sclk); in btc_dpm_init()
2702 rdev->pm.dpm.dyn_state.valid_sclk_values.values = btc_valid_sclk; in btc_dpm_init()
2703 rdev->pm.dpm.dyn_state.valid_mclk_values.count = 0; in btc_dpm_init()
2704 rdev->pm.dpm.dyn_state.valid_mclk_values.values = NULL; in btc_dpm_init()
2706 if (rdev->family == CHIP_TURKS) in btc_dpm_init()
2707 rdev->pm.dpm.dyn_state.sclk_mclk_delta = 15000; in btc_dpm_init()
2709 rdev->pm.dpm.dyn_state.sclk_mclk_delta = 10000; in btc_dpm_init()
2712 if ((rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc.sclk == 0) || in btc_dpm_init()
2713 (rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc.mclk == 0)) in btc_dpm_init()
2714 rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc = in btc_dpm_init()
2715 rdev->pm.dpm.dyn_state.max_clock_voltage_on_ac; in btc_dpm_init()
2720 void btc_dpm_fini(struct radeon_device *rdev) in btc_dpm_fini() argument
2724 for (i = 0; i < rdev->pm.dpm.num_ps; i++) { in btc_dpm_fini()
2725 kfree(rdev->pm.dpm.ps[i].ps_priv); in btc_dpm_fini()
2727 kfree(rdev->pm.dpm.ps); in btc_dpm_fini()
2728 kfree(rdev->pm.dpm.priv); in btc_dpm_fini()
2729 kfree(rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries); in btc_dpm_fini()
2730 r600_free_extended_power_table(rdev); in btc_dpm_fini()
2733 void btc_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev, in btc_dpm_debugfs_print_current_performance_level() argument
2736 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_dpm_debugfs_print_current_performance_level()
2759 u32 btc_dpm_get_current_sclk(struct radeon_device *rdev) in btc_dpm_get_current_sclk() argument
2761 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_dpm_get_current_sclk()
2782 u32 btc_dpm_get_current_mclk(struct radeon_device *rdev) in btc_dpm_get_current_mclk() argument
2784 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_dpm_get_current_mclk()
2805 u32 btc_dpm_get_sclk(struct radeon_device *rdev, bool low) in btc_dpm_get_sclk() argument
2807 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_dpm_get_sclk()
2816 u32 btc_dpm_get_mclk(struct radeon_device *rdev, bool low) in btc_dpm_get_mclk() argument
2818 struct evergreen_power_info *eg_pi = evergreen_get_pi(rdev); in btc_dpm_get_mclk()