Lines Matching +full:ats +full:- +full:supported
1149 if ((table == NULL) || (table->count == 0)) { in btc_get_max_clock_from_voltage_dependency_table()
1154 for (i = 0; i < table->count; i++) { in btc_get_max_clock_from_voltage_dependency_table()
1155 if (clock < table->entries[i].clk) in btc_get_max_clock_from_voltage_dependency_table()
1156 clock = table->entries[i].clk; in btc_get_max_clock_from_voltage_dependency_table()
1166 if ((table == NULL) || (table->count == 0)) in btc_apply_voltage_dependency_rules()
1169 for (i = 0; i < table->count; i++) { in btc_apply_voltage_dependency_rules()
1170 if (clock <= table->entries[i].clk) { in btc_apply_voltage_dependency_rules()
1171 if (*voltage < table->entries[i].v) in btc_apply_voltage_dependency_rules()
1172 *voltage = (u16)((table->entries[i].v < max_voltage) ? in btc_apply_voltage_dependency_rules()
1173 table->entries[i].v : max_voltage); in btc_apply_voltage_dependency_rules()
1186 if ((clocks == NULL) || (clocks->count == 0)) in btc_find_valid_clock()
1189 for (i = 0; i < clocks->count; i++) { in btc_find_valid_clock()
1190 if (clocks->values[i] >= requested_clock) in btc_find_valid_clock()
1191 return (clocks->values[i] < max_clock) ? clocks->values[i] : max_clock; in btc_find_valid_clock()
1194 return (clocks->values[clocks->count - 1] < max_clock) ? in btc_find_valid_clock()
1195 clocks->values[clocks->count - 1] : max_clock; in btc_find_valid_clock()
1201 return btc_find_valid_clock(&rdev->pm.dpm.dyn_state.valid_mclk_values, in btc_get_valid_mclk()
1208 return btc_find_valid_clock(&rdev->pm.dpm.dyn_state.valid_sclk_values, in btc_get_valid_sclk()
1244 if ((pl->mclk == 0) || (pl->sclk == 0)) in btc_adjust_clock_combinations()
1247 if (pl->mclk == pl->sclk) in btc_adjust_clock_combinations()
1250 if (pl->mclk > pl->sclk) { in btc_adjust_clock_combinations()
1251 if (((pl->mclk + (pl->sclk - 1)) / pl->sclk) > rdev->pm.dpm.dyn_state.mclk_sclk_ratio) in btc_adjust_clock_combinations()
1252 pl->sclk = btc_get_valid_sclk(rdev, in btc_adjust_clock_combinations()
1253 max_limits->sclk, in btc_adjust_clock_combinations()
1254 (pl->mclk + in btc_adjust_clock_combinations()
1255 (rdev->pm.dpm.dyn_state.mclk_sclk_ratio - 1)) / in btc_adjust_clock_combinations()
1256 rdev->pm.dpm.dyn_state.mclk_sclk_ratio); in btc_adjust_clock_combinations()
1258 if ((pl->sclk - pl->mclk) > rdev->pm.dpm.dyn_state.sclk_mclk_delta) in btc_adjust_clock_combinations()
1259 pl->mclk = btc_get_valid_mclk(rdev, in btc_adjust_clock_combinations()
1260 max_limits->mclk, in btc_adjust_clock_combinations()
1261 pl->sclk - in btc_adjust_clock_combinations()
1262 rdev->pm.dpm.dyn_state.sclk_mclk_delta); in btc_adjust_clock_combinations()
1270 for (i = 0; i < table->count; i++) { in btc_find_voltage()
1271 if (voltage <= table->entries[i].value) in btc_find_voltage()
1272 return table->entries[i].value; in btc_find_voltage()
1275 return table->entries[table->count - 1].value; in btc_find_voltage()
1289 if ((*vddc - *vddci) > rdev->pm.dpm.dyn_state.vddc_vddci_delta) { in btc_apply_voltage_delta_rules()
1290 new_voltage = btc_find_voltage(&eg_pi->vddci_voltage_table, in btc_apply_voltage_delta_rules()
1291 (*vddc - rdev->pm.dpm.dyn_state.vddc_vddci_delta)); in btc_apply_voltage_delta_rules()
1295 if ((*vddci - *vddc) > rdev->pm.dpm.dyn_state.vddc_vddci_delta) { in btc_apply_voltage_delta_rules()
1296 new_voltage = btc_find_voltage(&eg_pi->vddc_voltage_table, in btc_apply_voltage_delta_rules()
1297 (*vddci - rdev->pm.dpm.dyn_state.vddc_vddci_delta)); in btc_apply_voltage_delta_rules()
1313 if (!pi->boot_in_gen2) { in btc_enable_bif_dynamic_pcie_gen2()
1332 if (!pi->boot_in_gen2) { in btc_enable_bif_dynamic_pcie_gen2()
1360 if (eg_pi->ulv.supported) { in btc_disable_ulv()
1362 return -EINVAL; in btc_disable_ulv()
1370 int ret = -EINVAL; in btc_populate_ulv_state()
1372 struct rv7xx_pl *ulv_pl = eg_pi->ulv.pl; in btc_populate_ulv_state()
1374 if (ulv_pl->vddc) { in btc_populate_ulv_state()
1377 &table->ULVState.levels[0], in btc_populate_ulv_state()
1380 table->ULVState.levels[0].arbValue = MC_CG_ARB_FREQ_F0; in btc_populate_ulv_state()
1381 table->ULVState.levels[0].ACIndex = 1; in btc_populate_ulv_state()
1383 table->ULVState.levels[1] = table->ULVState.levels[0]; in btc_populate_ulv_state()
1384 table->ULVState.levels[2] = table->ULVState.levels[0]; in btc_populate_ulv_state()
1386 table->ULVState.flags |= PPSMC_SWSTATE_FLAG_DC; in btc_populate_ulv_state()
1402 table->ACPIState.levels[0].ACIndex = 0; in btc_populate_smc_acpi_state()
1403 table->ACPIState.levels[1].ACIndex = 0; in btc_populate_smc_acpi_state()
1404 table->ACPIState.levels[2].ACIndex = 0; in btc_populate_smc_acpi_state()
1429 if (rdev->family == CHIP_BARTS) { in btc_cg_clock_gating_default()
1432 } else if (rdev->family == CHIP_TURKS) { in btc_cg_clock_gating_default()
1435 } else if (rdev->family == CHIP_CAICOS) { in btc_cg_clock_gating_default()
1451 if (rdev->family == CHIP_BARTS) { in btc_cg_clock_gating_enable()
1454 } else if (rdev->family == CHIP_TURKS) { in btc_cg_clock_gating_enable()
1457 } else if (rdev->family == CHIP_CAICOS) { in btc_cg_clock_gating_enable()
1463 if (rdev->family == CHIP_BARTS) { in btc_cg_clock_gating_enable()
1466 } else if (rdev->family == CHIP_TURKS) { in btc_cg_clock_gating_enable()
1469 } else if (rdev->family == CHIP_CAICOS) { in btc_cg_clock_gating_enable()
1484 if (rdev->family == CHIP_BARTS) { in btc_mg_clock_gating_default()
1487 } else if (rdev->family == CHIP_TURKS) { in btc_mg_clock_gating_default()
1490 } else if (rdev->family == CHIP_CAICOS) { in btc_mg_clock_gating_default()
1506 if (rdev->family == CHIP_BARTS) { in btc_mg_clock_gating_enable()
1509 } else if (rdev->family == CHIP_TURKS) { in btc_mg_clock_gating_enable()
1512 } else if (rdev->family == CHIP_CAICOS) { in btc_mg_clock_gating_enable()
1518 if (rdev->family == CHIP_BARTS) { in btc_mg_clock_gating_enable()
1521 } else if (rdev->family == CHIP_TURKS) { in btc_mg_clock_gating_enable()
1524 } else if (rdev->family == CHIP_CAICOS) { in btc_mg_clock_gating_enable()
1539 if (rdev->family == CHIP_BARTS) { in btc_ls_clock_gating_default()
1542 } else if (rdev->family == CHIP_TURKS) { in btc_ls_clock_gating_default()
1545 } else if (rdev->family == CHIP_CAICOS) { in btc_ls_clock_gating_default()
1561 if (rdev->family == CHIP_BARTS) { in btc_ls_clock_gating_enable()
1564 } else if (rdev->family == CHIP_TURKS) { in btc_ls_clock_gating_enable()
1567 } else if (rdev->family == CHIP_CAICOS) { in btc_ls_clock_gating_enable()
1573 if (rdev->family == CHIP_BARTS) { in btc_ls_clock_gating_enable()
1576 } else if (rdev->family == CHIP_TURKS) { in btc_ls_clock_gating_enable()
1579 } else if (rdev->family == CHIP_CAICOS) { in btc_ls_clock_gating_enable()
1602 RV770_SMC_STATETABLE *table = &pi->smc_statetable; in btc_init_smc_table()
1609 switch (rdev->pm.int_thermal_type) { in btc_init_smc_table()
1612 table->thermalProtectType = PPSMC_THERMAL_PROTECT_TYPE_INTERNAL; in btc_init_smc_table()
1615 table->thermalProtectType = PPSMC_THERMAL_PROTECT_TYPE_NONE; in btc_init_smc_table()
1618 table->thermalProtectType = PPSMC_THERMAL_PROTECT_TYPE_EXTERNAL; in btc_init_smc_table()
1622 if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_HARDWAREDC) in btc_init_smc_table()
1623 table->systemFlags |= PPSMC_SYSTEMFLAG_GPIO_DC; in btc_init_smc_table()
1625 if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_REGULATOR_HOT) in btc_init_smc_table()
1626 table->systemFlags |= PPSMC_SYSTEMFLAG_REGULATOR_HOT; in btc_init_smc_table()
1628 if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_STEPVDDC) in btc_init_smc_table()
1629 table->systemFlags |= PPSMC_SYSTEMFLAG_STEPVDDC; in btc_init_smc_table()
1631 if (pi->mem_gddr5) in btc_init_smc_table()
1632 table->systemFlags |= PPSMC_SYSTEMFLAG_GDDR5; in btc_init_smc_table()
1638 if (eg_pi->sclk_deep_sleep) in btc_init_smc_table()
1646 if (eg_pi->ulv.supported) { in btc_init_smc_table()
1649 eg_pi->ulv.supported = false; in btc_init_smc_table()
1652 table->driverState = table->initialState; in btc_init_smc_table()
1655 pi->state_table_start, in btc_init_smc_table()
1658 pi->sram_end); in btc_init_smc_table()
1668 if (r600_is_uvd_state(radeon_new_state->class, radeon_new_state->class2)) in btc_set_at_for_uvd()
1671 if ((idx == 1) && !eg_pi->smu_uvd_hs) { in btc_set_at_for_uvd()
1672 pi->rlp = 10; in btc_set_at_for_uvd()
1673 pi->rmp = 100; in btc_set_at_for_uvd()
1674 pi->lhp = 100; in btc_set_at_for_uvd()
1675 pi->lmp = 10; in btc_set_at_for_uvd()
1677 pi->rlp = eg_pi->ats[idx].rlp; in btc_set_at_for_uvd()
1678 pi->rmp = eg_pi->ats[idx].rmp; in btc_set_at_for_uvd()
1679 pi->lhp = eg_pi->ats[idx].lhp; in btc_set_at_for_uvd()
1680 pi->lmp = eg_pi->ats[idx].lmp; in btc_set_at_for_uvd()
1690 if (r600_is_uvd_state(radeon_new_state->class, radeon_new_state->class2)) { in btc_notify_uvd_to_smc()
1693 eg_pi->uvd_enabled = true; in btc_notify_uvd_to_smc()
1697 eg_pi->uvd_enabled = false; in btc_notify_uvd_to_smc()
1704 return -EINVAL; in btc_reset_to_default()
1713 for (i = 0; i < rdev->usec_timeout; i++) { in btc_stop_smc()
1727 &eg_pi->bootup_arb_registers; in btc_read_arb_registers()
1729 arb_registers->mc_arb_dram_timing = RREG32(MC_ARB_DRAM_TIMING); in btc_read_arb_registers()
1730 arb_registers->mc_arb_dram_timing2 = RREG32(MC_ARB_DRAM_TIMING2); in btc_read_arb_registers()
1731 arb_registers->mc_arb_rfsh_rate = RREG32(MC_ARB_RFSH_RATE); in btc_read_arb_registers()
1732 arb_registers->mc_arb_burst_time = RREG32(MC_ARB_BURST_TIME); in btc_read_arb_registers()
1741 WREG32(MC_ARB_DRAM_TIMING, arb_registers->mc_arb_dram_timing); in btc_set_arb0_registers()
1742 WREG32(MC_ARB_DRAM_TIMING2, arb_registers->mc_arb_dram_timing2); in btc_set_arb0_registers()
1744 val = (arb_registers->mc_arb_rfsh_rate & POWERMODE0_MASK) >> in btc_set_arb0_registers()
1748 val = (arb_registers->mc_arb_burst_time & STATE0_MASK) >> in btc_set_arb0_registers()
1757 if (eg_pi->ulv.supported) in btc_set_boot_state_timing()
1758 btc_set_arb0_registers(rdev, &eg_pi->bootup_arb_registers); in btc_set_boot_state_timing()
1766 struct rv7xx_pl *ulv_pl = eg_pi->ulv.pl; in btc_is_state_ulv_compatible()
1768 if (state->low.mclk != ulv_pl->mclk) in btc_is_state_ulv_compatible()
1771 if (state->low.vddci != ulv_pl->vddci) in btc_is_state_ulv_compatible()
1784 struct rv7xx_pl *ulv_pl = eg_pi->ulv.pl; in btc_set_ulv_dram_timing()
1787 ulv_pl->sclk, in btc_set_ulv_dram_timing()
1788 ulv_pl->mclk); in btc_set_ulv_dram_timing()
1790 val = rv770_calculate_memory_refresh_rate(rdev, ulv_pl->sclk); in btc_set_ulv_dram_timing()
1793 val = cypress_calculate_burst_time(rdev, ulv_pl->sclk, ulv_pl->mclk); in btc_set_ulv_dram_timing()
1802 return -EINVAL; in btc_enable_ulv()
1813 if (eg_pi->ulv.supported) { in btc_set_power_state_conditionally_enable_ulv()
1875 for (i = 0; i < table->last; i++) { in btc_set_valid_flag()
1876 for (j = 1; j < table->num_entries; j++) { in btc_set_valid_flag()
1877 if (table->mc_reg_table_entry[j-1].mc_data[i] != in btc_set_valid_flag()
1878 table->mc_reg_table_entry[j].mc_data[i]) { in btc_set_valid_flag()
1879 table->valid_flag |= (1 << i); in btc_set_valid_flag()
1893 for (i = 0, j = table->last; i < table->last; i++) { in btc_set_mc_special_registers()
1894 switch (table->mc_reg_address[i].s1) { in btc_set_mc_special_registers()
1897 table->mc_reg_address[j].s1 = MC_PMG_CMD_EMRS >> 2; in btc_set_mc_special_registers()
1898 table->mc_reg_address[j].s0 = MC_SEQ_PMG_CMD_EMRS_LP >> 2; in btc_set_mc_special_registers()
1899 for (k = 0; k < table->num_entries; k++) { in btc_set_mc_special_registers()
1900 table->mc_reg_table_entry[k].mc_data[j] = in btc_set_mc_special_registers()
1902 ((table->mc_reg_table_entry[k].mc_data[i] & 0xffff0000) >> 16); in btc_set_mc_special_registers()
1907 return -EINVAL; in btc_set_mc_special_registers()
1910 table->mc_reg_address[j].s1 = MC_PMG_CMD_MRS >> 2; in btc_set_mc_special_registers()
1911 table->mc_reg_address[j].s0 = MC_SEQ_PMG_CMD_MRS_LP >> 2; in btc_set_mc_special_registers()
1912 for (k = 0; k < table->num_entries; k++) { in btc_set_mc_special_registers()
1913 table->mc_reg_table_entry[k].mc_data[j] = in btc_set_mc_special_registers()
1915 (table->mc_reg_table_entry[k].mc_data[i] & 0x0000ffff); in btc_set_mc_special_registers()
1916 if (!pi->mem_gddr5) in btc_set_mc_special_registers()
1917 table->mc_reg_table_entry[k].mc_data[j] |= 0x100; in btc_set_mc_special_registers()
1922 return -EINVAL; in btc_set_mc_special_registers()
1926 table->mc_reg_address[j].s1 = MC_PMG_CMD_MRS1 >> 2; in btc_set_mc_special_registers()
1927 table->mc_reg_address[j].s0 = MC_SEQ_PMG_CMD_MRS1_LP >> 2; in btc_set_mc_special_registers()
1928 for (k = 0; k < table->num_entries; k++) { in btc_set_mc_special_registers()
1929 table->mc_reg_table_entry[k].mc_data[j] = in btc_set_mc_special_registers()
1931 (table->mc_reg_table_entry[k].mc_data[i] & 0x0000ffff); in btc_set_mc_special_registers()
1936 return -EINVAL; in btc_set_mc_special_registers()
1943 table->last = j; in btc_set_mc_special_registers()
1953 for (i = 0; i < table->last; i++) { in btc_set_s0_mc_reg_index()
1954 table->mc_reg_address[i].s0 = in btc_set_s0_mc_reg_index()
1955 btc_check_s0_mc_reg_index(table->mc_reg_address[i].s1, &address) ? in btc_set_s0_mc_reg_index()
1956 address : table->mc_reg_address[i].s1; in btc_set_s0_mc_reg_index()
1965 if (table->last > SMC_EVERGREEN_MC_REGISTER_ARRAY_SIZE) in btc_copy_vbios_mc_reg_table()
1966 return -EINVAL; in btc_copy_vbios_mc_reg_table()
1968 if (table->num_entries > MAX_AC_TIMING_ENTRIES) in btc_copy_vbios_mc_reg_table()
1969 return -EINVAL; in btc_copy_vbios_mc_reg_table()
1971 for (i = 0; i < table->last; i++) in btc_copy_vbios_mc_reg_table()
1972 eg_table->mc_reg_address[i].s1 = table->mc_reg_address[i].s1; in btc_copy_vbios_mc_reg_table()
1973 eg_table->last = table->last; in btc_copy_vbios_mc_reg_table()
1975 for (i = 0; i < table->num_entries; i++) { in btc_copy_vbios_mc_reg_table()
1976 eg_table->mc_reg_table_entry[i].mclk_max = in btc_copy_vbios_mc_reg_table()
1977 table->mc_reg_table_entry[i].mclk_max; in btc_copy_vbios_mc_reg_table()
1978 for (j = 0; j < table->last; j++) in btc_copy_vbios_mc_reg_table()
1979 eg_table->mc_reg_table_entry[i].mc_data[j] = in btc_copy_vbios_mc_reg_table()
1980 table->mc_reg_table_entry[i].mc_data[j]; in btc_copy_vbios_mc_reg_table()
1982 eg_table->num_entries = table->num_entries; in btc_copy_vbios_mc_reg_table()
1992 struct evergreen_mc_reg_table *eg_table = &eg_pi->mc_reg_table; in btc_initialize_mc_reg_table()
1997 return -ENOMEM; in btc_initialize_mc_reg_table()
2041 if (pi->mclk_stutter_mode_threshold) { in btc_init_stutter_mode()
2042 if (pi->mem_gddr5) { in btc_init_stutter_mode()
2056 u32 switch_limit = pi->mem_gddr5 ? 450 : 100; in btc_dpm_vblank_too_short()
2074 if ((rdev->pm.dpm.new_active_crtc_count > 1) || in btc_apply_state_adjust_rules()
2080 if (rdev->pm.dpm.ac_power) in btc_apply_state_adjust_rules()
2081 max_limits = &rdev->pm.dpm.dyn_state.max_clock_voltage_on_ac; in btc_apply_state_adjust_rules()
2083 max_limits = &rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc; in btc_apply_state_adjust_rules()
2085 if (rdev->pm.dpm.ac_power == false) { in btc_apply_state_adjust_rules()
2086 if (ps->high.mclk > max_limits->mclk) in btc_apply_state_adjust_rules()
2087 ps->high.mclk = max_limits->mclk; in btc_apply_state_adjust_rules()
2088 if (ps->high.sclk > max_limits->sclk) in btc_apply_state_adjust_rules()
2089 ps->high.sclk = max_limits->sclk; in btc_apply_state_adjust_rules()
2090 if (ps->high.vddc > max_limits->vddc) in btc_apply_state_adjust_rules()
2091 ps->high.vddc = max_limits->vddc; in btc_apply_state_adjust_rules()
2092 if (ps->high.vddci > max_limits->vddci) in btc_apply_state_adjust_rules()
2093 ps->high.vddci = max_limits->vddci; in btc_apply_state_adjust_rules()
2095 if (ps->medium.mclk > max_limits->mclk) in btc_apply_state_adjust_rules()
2096 ps->medium.mclk = max_limits->mclk; in btc_apply_state_adjust_rules()
2097 if (ps->medium.sclk > max_limits->sclk) in btc_apply_state_adjust_rules()
2098 ps->medium.sclk = max_limits->sclk; in btc_apply_state_adjust_rules()
2099 if (ps->medium.vddc > max_limits->vddc) in btc_apply_state_adjust_rules()
2100 ps->medium.vddc = max_limits->vddc; in btc_apply_state_adjust_rules()
2101 if (ps->medium.vddci > max_limits->vddci) in btc_apply_state_adjust_rules()
2102 ps->medium.vddci = max_limits->vddci; in btc_apply_state_adjust_rules()
2104 if (ps->low.mclk > max_limits->mclk) in btc_apply_state_adjust_rules()
2105 ps->low.mclk = max_limits->mclk; in btc_apply_state_adjust_rules()
2106 if (ps->low.sclk > max_limits->sclk) in btc_apply_state_adjust_rules()
2107 ps->low.sclk = max_limits->sclk; in btc_apply_state_adjust_rules()
2108 if (ps->low.vddc > max_limits->vddc) in btc_apply_state_adjust_rules()
2109 ps->low.vddc = max_limits->vddc; in btc_apply_state_adjust_rules()
2110 if (ps->low.vddci > max_limits->vddci) in btc_apply_state_adjust_rules()
2111 ps->low.vddci = max_limits->vddci; in btc_apply_state_adjust_rules()
2117 sclk = ps->low.sclk; in btc_apply_state_adjust_rules()
2118 mclk = ps->high.mclk; in btc_apply_state_adjust_rules()
2119 vddc = ps->low.vddc; in btc_apply_state_adjust_rules()
2120 vddci = ps->high.vddci; in btc_apply_state_adjust_rules()
2122 sclk = ps->low.sclk; in btc_apply_state_adjust_rules()
2123 mclk = ps->low.mclk; in btc_apply_state_adjust_rules()
2124 vddc = ps->low.vddc; in btc_apply_state_adjust_rules()
2125 vddci = ps->low.vddci; in btc_apply_state_adjust_rules()
2129 ps->low.sclk = sclk; in btc_apply_state_adjust_rules()
2130 ps->low.mclk = mclk; in btc_apply_state_adjust_rules()
2131 ps->low.vddc = vddc; in btc_apply_state_adjust_rules()
2132 ps->low.vddci = vddci; in btc_apply_state_adjust_rules()
2134 btc_skip_blacklist_clocks(rdev, max_limits->sclk, max_limits->mclk, in btc_apply_state_adjust_rules()
2135 &ps->low.sclk, &ps->low.mclk); in btc_apply_state_adjust_rules()
2138 if (ps->medium.sclk < ps->low.sclk) in btc_apply_state_adjust_rules()
2139 ps->medium.sclk = ps->low.sclk; in btc_apply_state_adjust_rules()
2140 if (ps->medium.vddc < ps->low.vddc) in btc_apply_state_adjust_rules()
2141 ps->medium.vddc = ps->low.vddc; in btc_apply_state_adjust_rules()
2142 if (ps->high.sclk < ps->medium.sclk) in btc_apply_state_adjust_rules()
2143 ps->high.sclk = ps->medium.sclk; in btc_apply_state_adjust_rules()
2144 if (ps->high.vddc < ps->medium.vddc) in btc_apply_state_adjust_rules()
2145 ps->high.vddc = ps->medium.vddc; in btc_apply_state_adjust_rules()
2148 mclk = ps->low.mclk; in btc_apply_state_adjust_rules()
2149 if (mclk < ps->medium.mclk) in btc_apply_state_adjust_rules()
2150 mclk = ps->medium.mclk; in btc_apply_state_adjust_rules()
2151 if (mclk < ps->high.mclk) in btc_apply_state_adjust_rules()
2152 mclk = ps->high.mclk; in btc_apply_state_adjust_rules()
2153 ps->low.mclk = mclk; in btc_apply_state_adjust_rules()
2154 ps->low.vddci = vddci; in btc_apply_state_adjust_rules()
2155 ps->medium.mclk = mclk; in btc_apply_state_adjust_rules()
2156 ps->medium.vddci = vddci; in btc_apply_state_adjust_rules()
2157 ps->high.mclk = mclk; in btc_apply_state_adjust_rules()
2158 ps->high.vddci = vddci; in btc_apply_state_adjust_rules()
2160 if (ps->medium.mclk < ps->low.mclk) in btc_apply_state_adjust_rules()
2161 ps->medium.mclk = ps->low.mclk; in btc_apply_state_adjust_rules()
2162 if (ps->medium.vddci < ps->low.vddci) in btc_apply_state_adjust_rules()
2163 ps->medium.vddci = ps->low.vddci; in btc_apply_state_adjust_rules()
2164 if (ps->high.mclk < ps->medium.mclk) in btc_apply_state_adjust_rules()
2165 ps->high.mclk = ps->medium.mclk; in btc_apply_state_adjust_rules()
2166 if (ps->high.vddci < ps->medium.vddci) in btc_apply_state_adjust_rules()
2167 ps->high.vddci = ps->medium.vddci; in btc_apply_state_adjust_rules()
2170 btc_skip_blacklist_clocks(rdev, max_limits->sclk, max_limits->mclk, in btc_apply_state_adjust_rules()
2171 &ps->medium.sclk, &ps->medium.mclk); in btc_apply_state_adjust_rules()
2172 btc_skip_blacklist_clocks(rdev, max_limits->sclk, max_limits->mclk, in btc_apply_state_adjust_rules()
2173 &ps->high.sclk, &ps->high.mclk); in btc_apply_state_adjust_rules()
2175 btc_adjust_clock_combinations(rdev, max_limits, &ps->low); in btc_apply_state_adjust_rules()
2176 btc_adjust_clock_combinations(rdev, max_limits, &ps->medium); in btc_apply_state_adjust_rules()
2177 btc_adjust_clock_combinations(rdev, max_limits, &ps->high); in btc_apply_state_adjust_rules()
2179 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk, in btc_apply_state_adjust_rules()
2180 ps->low.sclk, max_limits->vddc, &ps->low.vddc); in btc_apply_state_adjust_rules()
2181 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddci_dependency_on_mclk, in btc_apply_state_adjust_rules()
2182 ps->low.mclk, max_limits->vddci, &ps->low.vddci); in btc_apply_state_adjust_rules()
2183 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddc_dependency_on_mclk, in btc_apply_state_adjust_rules()
2184 ps->low.mclk, max_limits->vddc, &ps->low.vddc); in btc_apply_state_adjust_rules()
2185 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk, in btc_apply_state_adjust_rules()
2186 rdev->clock.current_dispclk, max_limits->vddc, &ps->low.vddc); in btc_apply_state_adjust_rules()
2188 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk, in btc_apply_state_adjust_rules()
2189 ps->medium.sclk, max_limits->vddc, &ps->medium.vddc); in btc_apply_state_adjust_rules()
2190 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddci_dependency_on_mclk, in btc_apply_state_adjust_rules()
2191 ps->medium.mclk, max_limits->vddci, &ps->medium.vddci); in btc_apply_state_adjust_rules()
2192 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddc_dependency_on_mclk, in btc_apply_state_adjust_rules()
2193 ps->medium.mclk, max_limits->vddc, &ps->medium.vddc); in btc_apply_state_adjust_rules()
2194 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk, in btc_apply_state_adjust_rules()
2195 rdev->clock.current_dispclk, max_limits->vddc, &ps->medium.vddc); in btc_apply_state_adjust_rules()
2197 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk, in btc_apply_state_adjust_rules()
2198 ps->high.sclk, max_limits->vddc, &ps->high.vddc); in btc_apply_state_adjust_rules()
2199 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddci_dependency_on_mclk, in btc_apply_state_adjust_rules()
2200 ps->high.mclk, max_limits->vddci, &ps->high.vddci); in btc_apply_state_adjust_rules()
2201 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddc_dependency_on_mclk, in btc_apply_state_adjust_rules()
2202 ps->high.mclk, max_limits->vddc, &ps->high.vddc); in btc_apply_state_adjust_rules()
2203 btc_apply_voltage_dependency_rules(&rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk, in btc_apply_state_adjust_rules()
2204 rdev->clock.current_dispclk, max_limits->vddc, &ps->high.vddc); in btc_apply_state_adjust_rules()
2206 btc_apply_voltage_delta_rules(rdev, max_limits->vddc, max_limits->vddci, in btc_apply_state_adjust_rules()
2207 &ps->low.vddc, &ps->low.vddci); in btc_apply_state_adjust_rules()
2208 btc_apply_voltage_delta_rules(rdev, max_limits->vddc, max_limits->vddci, in btc_apply_state_adjust_rules()
2209 &ps->medium.vddc, &ps->medium.vddci); in btc_apply_state_adjust_rules()
2210 btc_apply_voltage_delta_rules(rdev, max_limits->vddc, max_limits->vddci, in btc_apply_state_adjust_rules()
2211 &ps->high.vddc, &ps->high.vddci); in btc_apply_state_adjust_rules()
2213 if ((ps->high.vddc <= rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc.vddc) && in btc_apply_state_adjust_rules()
2214 (ps->medium.vddc <= rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc.vddc) && in btc_apply_state_adjust_rules()
2215 (ps->low.vddc <= rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc.vddc)) in btc_apply_state_adjust_rules()
2216 ps->dc_compatible = true; in btc_apply_state_adjust_rules()
2218 ps->dc_compatible = false; in btc_apply_state_adjust_rules()
2220 if (ps->low.vddc < rdev->pm.dpm.dyn_state.min_vddc_for_pcie_gen2) in btc_apply_state_adjust_rules()
2221 ps->low.flags &= ~ATOM_PPLIB_R600_FLAGS_PCIEGEN2; in btc_apply_state_adjust_rules()
2222 if (ps->medium.vddc < rdev->pm.dpm.dyn_state.min_vddc_for_pcie_gen2) in btc_apply_state_adjust_rules()
2223 ps->medium.flags &= ~ATOM_PPLIB_R600_FLAGS_PCIEGEN2; in btc_apply_state_adjust_rules()
2224 if (ps->high.vddc < rdev->pm.dpm.dyn_state.min_vddc_for_pcie_gen2) in btc_apply_state_adjust_rules()
2225 ps->high.flags &= ~ATOM_PPLIB_R600_FLAGS_PCIEGEN2; in btc_apply_state_adjust_rules()
2234 eg_pi->current_rps = *rps; in btc_update_current_ps()
2235 eg_pi->current_ps = *new_ps; in btc_update_current_ps()
2236 eg_pi->current_rps.ps_priv = &eg_pi->current_ps; in btc_update_current_ps()
2245 eg_pi->requested_rps = *rps; in btc_update_requested_ps()
2246 eg_pi->requested_ps = *new_ps; in btc_update_requested_ps()
2247 eg_pi->requested_rps.ps_priv = &eg_pi->requested_ps; in btc_update_requested_ps()
2263 struct radeon_ps requested_ps = *rdev->pm.dpm.requested_ps; in btc_dpm_pre_set_power_state()
2268 btc_apply_state_adjust_rules(rdev, &eg_pi->requested_rps); in btc_dpm_pre_set_power_state()
2276 struct radeon_ps *new_ps = &eg_pi->requested_rps; in btc_dpm_set_power_state()
2277 struct radeon_ps *old_ps = &eg_pi->current_rps; in btc_dpm_set_power_state()
2287 if (eg_pi->pcie_performance_request) in btc_dpm_set_power_state()
2297 if (eg_pi->smu_uvd_hs) in btc_dpm_set_power_state()
2304 if (eg_pi->dynamic_ac_timing) { in btc_dpm_set_power_state()
2326 if (eg_pi->pcie_performance_request) in btc_dpm_set_power_state()
2341 struct radeon_ps *new_ps = &eg_pi->requested_rps; in btc_dpm_post_set_power_state()
2350 struct radeon_ps *boot_ps = rdev->pm.dpm.boot_ps; in btc_dpm_enable()
2353 if (pi->gfx_clock_gating) in btc_dpm_enable()
2357 return -EINVAL; in btc_dpm_enable()
2359 if (pi->mg_clock_gating) in btc_dpm_enable()
2362 if (eg_pi->ls_clock_gating) in btc_dpm_enable()
2365 if (pi->voltage_control) { in btc_dpm_enable()
2374 if (pi->mvdd_control) { in btc_dpm_enable()
2382 if (eg_pi->dynamic_ac_timing) { in btc_dpm_enable()
2385 eg_pi->dynamic_ac_timing = false; in btc_dpm_enable()
2388 if (rdev->pm.dpm.platform_caps & ATOM_PP_PLATFORM_CAP_BACKBIAS) in btc_dpm_enable()
2391 if (pi->dynamic_ss) in btc_dpm_enable()
2394 if (pi->thermal_protection) in btc_dpm_enable()
2406 if (pi->dynamic_pcie_gen2) in btc_dpm_enable()
2423 if (eg_pi->dynamic_ac_timing) { in btc_dpm_enable()
2440 if (eg_pi->memory_transition) in btc_dpm_enable()
2445 if (pi->gfx_clock_gating) in btc_dpm_enable()
2448 if (pi->mg_clock_gating) in btc_dpm_enable()
2451 if (eg_pi->ls_clock_gating) in btc_dpm_enable()
2458 btc_update_current_ps(rdev, rdev->pm.dpm.boot_ps); in btc_dpm_enable()
2473 if (pi->thermal_protection) in btc_dpm_disable()
2476 if (pi->dynamic_pcie_gen2) in btc_dpm_disable()
2479 if (rdev->irq.installed && in btc_dpm_disable()
2480 r600_is_internal_thermal_sensor(rdev->pm.int_thermal_type)) { in btc_dpm_disable()
2481 rdev->irq.dpm_thermal = false; in btc_dpm_disable()
2485 if (pi->gfx_clock_gating) in btc_dpm_disable()
2488 if (pi->mg_clock_gating) in btc_dpm_disable()
2491 if (eg_pi->ls_clock_gating) in btc_dpm_disable()
2499 btc_update_current_ps(rdev, rdev->pm.dpm.boot_ps); in btc_dpm_disable()
2515 if (eg_pi->pcie_performance_request) in btc_dpm_setup_asic()
2531 return -ENOMEM; in btc_dpm_init()
2532 rdev->pm.dpm.priv = eg_pi; in btc_dpm_init()
2533 pi = &eg_pi->rv7xx; in btc_dpm_init()
2537 eg_pi->ulv.supported = false; in btc_dpm_init()
2538 pi->acpi_vddc = 0; in btc_dpm_init()
2539 eg_pi->acpi_vddci = 0; in btc_dpm_init()
2540 pi->min_vddc_in_table = 0; in btc_dpm_init()
2541 pi->max_vddc_in_table = 0; in btc_dpm_init()
2554 rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries = in btc_dpm_init()
2558 if (!rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries) { in btc_dpm_init()
2560 return -ENOMEM; in btc_dpm_init()
2562 rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.count = 4; in btc_dpm_init()
2563 rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[0].clk = 0; in btc_dpm_init()
2564 rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[0].v = 0; in btc_dpm_init()
2565 rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[1].clk = 36000; in btc_dpm_init()
2566 rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[1].v = 800; in btc_dpm_init()
2567 rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[2].clk = 54000; in btc_dpm_init()
2568 rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[2].v = 800; in btc_dpm_init()
2569 rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[3].clk = 72000; in btc_dpm_init()
2570 rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[3].v = 800; in btc_dpm_init()
2572 if (rdev->pm.dpm.voltage_response_time == 0) in btc_dpm_init()
2573 rdev->pm.dpm.voltage_response_time = R600_VOLTAGERESPONSETIME_DFLT; in btc_dpm_init()
2574 if (rdev->pm.dpm.backbias_response_time == 0) in btc_dpm_init()
2575 rdev->pm.dpm.backbias_response_time = R600_BACKBIASRESPONSETIME_DFLT; in btc_dpm_init()
2580 pi->ref_div = dividers.ref_div + 1; in btc_dpm_init()
2582 pi->ref_div = R600_REFERENCEDIVIDER_DFLT; in btc_dpm_init()
2584 pi->mclk_strobe_mode_threshold = 40000; in btc_dpm_init()
2585 pi->mclk_edc_enable_threshold = 40000; in btc_dpm_init()
2586 eg_pi->mclk_edc_wr_enable_threshold = 40000; in btc_dpm_init()
2588 pi->rlp = RV770_RLP_DFLT; in btc_dpm_init()
2589 pi->rmp = RV770_RMP_DFLT; in btc_dpm_init()
2590 pi->lhp = RV770_LHP_DFLT; in btc_dpm_init()
2591 pi->lmp = RV770_LMP_DFLT; in btc_dpm_init()
2593 eg_pi->ats[0].rlp = RV770_RLP_DFLT; in btc_dpm_init()
2594 eg_pi->ats[0].rmp = RV770_RMP_DFLT; in btc_dpm_init()
2595 eg_pi->ats[0].lhp = RV770_LHP_DFLT; in btc_dpm_init()
2596 eg_pi->ats[0].lmp = RV770_LMP_DFLT; in btc_dpm_init()
2598 eg_pi->ats[1].rlp = BTC_RLP_UVD_DFLT; in btc_dpm_init()
2599 eg_pi->ats[1].rmp = BTC_RMP_UVD_DFLT; in btc_dpm_init()
2600 eg_pi->ats[1].lhp = BTC_LHP_UVD_DFLT; in btc_dpm_init()
2601 eg_pi->ats[1].lmp = BTC_LMP_UVD_DFLT; in btc_dpm_init()
2603 eg_pi->smu_uvd_hs = true; in btc_dpm_init()
2605 pi->voltage_control = in btc_dpm_init()
2608 pi->mvdd_control = in btc_dpm_init()
2611 eg_pi->vddci_control = in btc_dpm_init()
2616 pi->asi = RV770_ASI_DFLT; in btc_dpm_init()
2617 pi->pasi = CYPRESS_HASI_DFLT; in btc_dpm_init()
2618 pi->vrc = CYPRESS_VRC_DFLT; in btc_dpm_init()
2620 pi->power_gating = false; in btc_dpm_init()
2622 pi->gfx_clock_gating = true; in btc_dpm_init()
2624 pi->mg_clock_gating = true; in btc_dpm_init()
2625 pi->mgcgtssm = true; in btc_dpm_init()
2626 eg_pi->ls_clock_gating = false; in btc_dpm_init()
2627 eg_pi->sclk_deep_sleep = false; in btc_dpm_init()
2629 pi->dynamic_pcie_gen2 = true; in btc_dpm_init()
2631 if (rdev->pm.int_thermal_type != THERMAL_TYPE_NONE) in btc_dpm_init()
2632 pi->thermal_protection = true; in btc_dpm_init()
2634 pi->thermal_protection = false; in btc_dpm_init()
2636 pi->display_gap = true; in btc_dpm_init()
2638 if (rdev->flags & RADEON_IS_MOBILITY) in btc_dpm_init()
2639 pi->dcodt = true; in btc_dpm_init()
2641 pi->dcodt = false; in btc_dpm_init()
2643 pi->ulps = true; in btc_dpm_init()
2645 eg_pi->dynamic_ac_timing = true; in btc_dpm_init()
2646 eg_pi->abm = true; in btc_dpm_init()
2647 eg_pi->mcls = true; in btc_dpm_init()
2648 eg_pi->light_sleep = true; in btc_dpm_init()
2649 eg_pi->memory_transition = true; in btc_dpm_init()
2651 eg_pi->pcie_performance_request = in btc_dpm_init()
2654 eg_pi->pcie_performance_request = false; in btc_dpm_init()
2657 if (rdev->family == CHIP_BARTS) in btc_dpm_init()
2658 eg_pi->dll_default_on = true; in btc_dpm_init()
2660 eg_pi->dll_default_on = false; in btc_dpm_init()
2662 eg_pi->sclk_deep_sleep = false; in btc_dpm_init()
2664 pi->mclk_stutter_mode_threshold = 30000; in btc_dpm_init()
2666 pi->mclk_stutter_mode_threshold = 0; in btc_dpm_init()
2668 pi->sram_end = SMC_RAM_END; in btc_dpm_init()
2670 rdev->pm.dpm.dyn_state.mclk_sclk_ratio = 4; in btc_dpm_init()
2671 rdev->pm.dpm.dyn_state.vddc_vddci_delta = 200; in btc_dpm_init()
2672 rdev->pm.dpm.dyn_state.min_vddc_for_pcie_gen2 = 900; in btc_dpm_init()
2673 rdev->pm.dpm.dyn_state.valid_sclk_values.count = ARRAY_SIZE(btc_valid_sclk); in btc_dpm_init()
2674 rdev->pm.dpm.dyn_state.valid_sclk_values.values = btc_valid_sclk; in btc_dpm_init()
2675 rdev->pm.dpm.dyn_state.valid_mclk_values.count = 0; in btc_dpm_init()
2676 rdev->pm.dpm.dyn_state.valid_mclk_values.values = NULL; in btc_dpm_init()
2678 if (rdev->family == CHIP_TURKS) in btc_dpm_init()
2679 rdev->pm.dpm.dyn_state.sclk_mclk_delta = 15000; in btc_dpm_init()
2681 rdev->pm.dpm.dyn_state.sclk_mclk_delta = 10000; in btc_dpm_init()
2684 if ((rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc.sclk == 0) || in btc_dpm_init()
2685 (rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc.mclk == 0)) in btc_dpm_init()
2686 rdev->pm.dpm.dyn_state.max_clock_voltage_on_dc = in btc_dpm_init()
2687 rdev->pm.dpm.dyn_state.max_clock_voltage_on_ac; in btc_dpm_init()
2696 for (i = 0; i < rdev->pm.dpm.num_ps; i++) { in btc_dpm_fini()
2697 kfree(rdev->pm.dpm.ps[i].ps_priv); in btc_dpm_fini()
2699 kfree(rdev->pm.dpm.ps); in btc_dpm_fini()
2700 kfree(rdev->pm.dpm.priv); in btc_dpm_fini()
2701 kfree(rdev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries); in btc_dpm_fini()
2709 struct radeon_ps *rps = &eg_pi->current_rps; in btc_dpm_debugfs_print_current_performance_level()
2720 pl = &ps->low; in btc_dpm_debugfs_print_current_performance_level()
2722 pl = &ps->medium; in btc_dpm_debugfs_print_current_performance_level()
2724 pl = &ps->high; in btc_dpm_debugfs_print_current_performance_level()
2725 seq_printf(m, "uvd vclk: %d dclk: %d\n", rps->vclk, rps->dclk); in btc_dpm_debugfs_print_current_performance_level()
2727 current_index, pl->sclk, pl->mclk, pl->vddc, pl->vddci); in btc_dpm_debugfs_print_current_performance_level()
2734 struct radeon_ps *rps = &eg_pi->current_rps; in btc_dpm_get_current_sclk()
2745 pl = &ps->low; in btc_dpm_get_current_sclk()
2747 pl = &ps->medium; in btc_dpm_get_current_sclk()
2749 pl = &ps->high; in btc_dpm_get_current_sclk()
2750 return pl->sclk; in btc_dpm_get_current_sclk()
2757 struct radeon_ps *rps = &eg_pi->current_rps; in btc_dpm_get_current_mclk()
2768 pl = &ps->low; in btc_dpm_get_current_mclk()
2770 pl = &ps->medium; in btc_dpm_get_current_mclk()
2772 pl = &ps->high; in btc_dpm_get_current_mclk()
2773 return pl->mclk; in btc_dpm_get_current_mclk()
2780 struct rv7xx_ps *requested_state = rv770_get_ps(&eg_pi->requested_rps); in btc_dpm_get_sclk()
2783 return requested_state->low.sclk; in btc_dpm_get_sclk()
2785 return requested_state->high.sclk; in btc_dpm_get_sclk()
2791 struct rv7xx_ps *requested_state = rv770_get_ps(&eg_pi->requested_rps); in btc_dpm_get_mclk()
2794 return requested_state->low.mclk; in btc_dpm_get_mclk()
2796 return requested_state->high.mclk; in btc_dpm_get_mclk()