Path: blob/master/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.h
51758 views
/*1* Copyright 2012 Advanced Micro Devices, Inc.2*3* Permission is hereby granted, free of charge, to any person obtaining a4* copy of this software and associated documentation files (the "Software"),5* to deal in the Software without restriction, including without limitation6* the rights to use, copy, modify, merge, publish, distribute, sublicense,7* and/or sell copies of the Software, and to permit persons to whom the8* Software is furnished to do so, subject to the following conditions:9*10* The above copyright notice and this permission notice shall be included in11* all copies or substantial portions of the Software.12*13* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR14* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,15* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL16* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR17* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,18* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR19* OTHER DEALINGS IN THE SOFTWARE.20*21*/22#ifndef __SI_DPM_H__23#define __SI_DPM_H__2425#include "amdgpu_atombios.h"26#include "sislands_smc.h"2728#define MC_CG_CONFIG 0x96f29#define MC_ARB_CG 0x9fa30#define CG_ARB_REQ(x) ((x) << 0)31#define CG_ARB_REQ_MASK (0xff << 0)3233#define MC_ARB_DRAM_TIMING_1 0x9fc34#define MC_ARB_DRAM_TIMING_2 0x9fd35#define MC_ARB_DRAM_TIMING_3 0x9fe36#define MC_ARB_DRAM_TIMING2_1 0x9ff37#define MC_ARB_DRAM_TIMING2_2 0xa0038#define MC_ARB_DRAM_TIMING2_3 0xa013940#define NISLANDS_MAX_SMC_PERFORMANCE_LEVELS_PER_SWSTATE 1641#define RV770_ASI_DFLT 100042#define CYPRESS_HASI_DFLT 40000043#define PCIE_PERF_REQ_PECI_GEN1 244#define PCIE_PERF_REQ_PECI_GEN2 345#define PCIE_PERF_REQ_PECI_GEN3 446#define RV770_DEFAULT_VCLK_FREQ 53300 /* 10 khz */47#define RV770_DEFAULT_DCLK_FREQ 40000 /* 10 khz */4849#define SMC_STROBE_RATIO 0x0F50#define SMC_STROBE_ENABLE 0x105152#define SMC_MC_EDC_RD_FLAG 0x0153#define SMC_MC_EDC_WR_FLAG 0x0254#define SMC_MC_RTT_ENABLE 0x0455#define SMC_MC_STUTTER_EN 0x085657#define SISLANDS_MCREGISTERTABLE_INITIAL_SLOT 058#define SISLANDS_MCREGISTERTABLE_ACPI_SLOT 159#define SISLANDS_MCREGISTERTABLE_ULV_SLOT 260#define SISLANDS_MCREGISTERTABLE_FIRST_DRIVERSTATE_SLOT 36162#define SISLANDS_LEAKAGE_INDEX0 0xff0163#define SISLANDS_MAX_LEAKAGE_COUNT 46465#define SISLANDS_MAX_HARDWARE_POWERLEVELS 566#define SISLANDS_INITIAL_STATE_ARB_INDEX 067#define SISLANDS_ACPI_STATE_ARB_INDEX 168#define SISLANDS_ULV_STATE_ARB_INDEX 269#define SISLANDS_DRIVER_STATE_ARB_INDEX 37071#define SISLANDS_DPM2_MAX_PULSE_SKIP 2567273#define SISLANDS_DPM2_NEAR_TDP_DEC 1074#define SISLANDS_DPM2_ABOVE_SAFE_INC 575#define SISLANDS_DPM2_BELOW_SAFE_INC 207677#define SISLANDS_DPM2_TDP_SAFE_LIMIT_PERCENT 807879#define SISLANDS_DPM2_MAXPS_PERCENT_H 9980#define SISLANDS_DPM2_MAXPS_PERCENT_M 998182#define SISLANDS_DPM2_SQ_RAMP_MAX_POWER 0x3FFF83#define SISLANDS_DPM2_SQ_RAMP_MIN_POWER 0x1284#define SISLANDS_DPM2_SQ_RAMP_MAX_POWER_DELTA 0x1585#define SISLANDS_DPM2_SQ_RAMP_STI_SIZE 0x1E86#define SISLANDS_DPM2_SQ_RAMP_LTI_RATIO 0xF8788#define SISLANDS_DPM2_PWREFFICIENCYRATIO_MARGIN 108990#define SISLANDS_VRC_DFLT 0xC000B391#define SISLANDS_ULVVOLTAGECHANGEDELAY_DFLT 168792#define SISLANDS_CGULVPARAMETER_DFLT 0x0004003593#define SISLANDS_CGULVCONTROL_DFLT 0x1f0075509495#define SI_ASI_DFLT 1000096#define SI_BSP_DFLT 0x41EB97#define SI_BSU_DFLT 0x298#define SI_AH_DFLT 599#define SI_RLP_DFLT 25100#define SI_RMP_DFLT 65101#define SI_LHP_DFLT 40102#define SI_LMP_DFLT 15103#define SI_TD_DFLT 0104#define SI_UTC_DFLT_00 0x24105#define SI_UTC_DFLT_01 0x22106#define SI_UTC_DFLT_02 0x22107#define SI_UTC_DFLT_03 0x22108#define SI_UTC_DFLT_04 0x22109#define SI_UTC_DFLT_05 0x22110#define SI_UTC_DFLT_06 0x22111#define SI_UTC_DFLT_07 0x22112#define SI_UTC_DFLT_08 0x22113#define SI_UTC_DFLT_09 0x22114#define SI_UTC_DFLT_10 0x22115#define SI_UTC_DFLT_11 0x22116#define SI_UTC_DFLT_12 0x22117#define SI_UTC_DFLT_13 0x22118#define SI_UTC_DFLT_14 0x22119#define SI_DTC_DFLT_00 0x24120#define SI_DTC_DFLT_01 0x22121#define SI_DTC_DFLT_02 0x22122#define SI_DTC_DFLT_03 0x22123#define SI_DTC_DFLT_04 0x22124#define SI_DTC_DFLT_05 0x22125#define SI_DTC_DFLT_06 0x22126#define SI_DTC_DFLT_07 0x22127#define SI_DTC_DFLT_08 0x22128#define SI_DTC_DFLT_09 0x22129#define SI_DTC_DFLT_10 0x22130#define SI_DTC_DFLT_11 0x22131#define SI_DTC_DFLT_12 0x22132#define SI_DTC_DFLT_13 0x22133#define SI_DTC_DFLT_14 0x22134#define SI_VRC_DFLT 0x0000C003135#define SI_VOLTAGERESPONSETIME_DFLT 1000136#define SI_BACKBIASRESPONSETIME_DFLT 1000137#define SI_VRU_DFLT 0x3138#define SI_SPLLSTEPTIME_DFLT 0x1000139#define SI_SPLLSTEPUNIT_DFLT 0x3140#define SI_TPU_DFLT 0141#define SI_TPC_DFLT 0x200142#define SI_SSTU_DFLT 0143#define SI_SST_DFLT 0x00C8144#define SI_GICST_DFLT 0x200145#define SI_FCT_DFLT 0x0400146#define SI_FCTU_DFLT 0147#define SI_CTXCGTT3DRPHC_DFLT 0x20148#define SI_CTXCGTT3DRSDC_DFLT 0x40149#define SI_VDDC3DOORPHC_DFLT 0x100150#define SI_VDDC3DOORSDC_DFLT 0x7151#define SI_VDDC3DOORSU_DFLT 0152#define SI_MPLLLOCKTIME_DFLT 100153#define SI_MPLLRESETTIME_DFLT 150154#define SI_VCOSTEPPCT_DFLT 20155#define SI_ENDINGVCOSTEPPCT_DFLT 5156#define SI_REFERENCEDIVIDER_DFLT 4157158#define SI_PM_NUMBER_OF_TC 15159#define SI_PM_NUMBER_OF_SCLKS 20160#define SI_PM_NUMBER_OF_MCLKS 4161#define SI_PM_NUMBER_OF_VOLTAGE_LEVELS 4162#define SI_PM_NUMBER_OF_ACTIVITY_LEVELS 3163164/* XXX are these ok? */165#define SI_TEMP_RANGE_MIN (90 * 1000)166#define SI_TEMP_RANGE_MAX (120 * 1000)167168#define FDO_PWM_MODE_STATIC 1169#define FDO_PWM_MODE_STATIC_RPM 5170171enum ni_dc_cac_level172{173NISLANDS_DCCAC_LEVEL_0 = 0,174NISLANDS_DCCAC_LEVEL_1,175NISLANDS_DCCAC_LEVEL_2,176NISLANDS_DCCAC_LEVEL_3,177NISLANDS_DCCAC_LEVEL_4,178NISLANDS_DCCAC_LEVEL_5,179NISLANDS_DCCAC_LEVEL_6,180NISLANDS_DCCAC_LEVEL_7,181NISLANDS_DCCAC_MAX_LEVELS182};183184enum si_cac_config_reg_type185{186SISLANDS_CACCONFIG_MMR = 0,187SISLANDS_CACCONFIG_CGIND,188SISLANDS_CACCONFIG_MAX189};190191extern const struct amdgpu_ip_block_version si_smu_ip_block;192193struct ni_leakage_coeffients194{195u32 at;196u32 bt;197u32 av;198u32 bv;199s32 t_slope;200s32 t_intercept;201u32 t_ref;202};203204struct SMC_NIslands_MCRegisterAddress205{206uint16_t s0;207uint16_t s1;208};209210typedef struct SMC_NIslands_MCRegisterAddress SMC_NIslands_MCRegisterAddress;211212struct rv7xx_power_info {213/* flags */214bool voltage_control; /* vddc */215bool mvdd_control;216bool sclk_ss;217bool mclk_ss;218bool dynamic_ss;219bool thermal_protection;220/* voltage */221u32 mvdd_split_frequency;222u16 max_vddc;223u16 max_vddc_in_table;224u16 min_vddc_in_table;225/* stored values */226u16 acpi_vddc;227u32 ref_div;228u32 active_auto_throttle_sources;229u32 mclk_stutter_mode_threshold;230u32 mclk_strobe_mode_threshold;231u32 mclk_edc_enable_threshold;232u32 bsp;233u32 bsu;234u32 pbsp;235u32 pbsu;236u32 dsp;237u32 psp;238u32 asi;239u32 pasi;240u32 vrc;241};242243enum si_pcie_gen {244SI_PCIE_GEN1 = 0,245SI_PCIE_GEN2 = 1,246SI_PCIE_GEN3 = 2,247SI_PCIE_GEN_INVALID = 0xffff248};249250struct rv7xx_pl {251u32 sclk;252u32 mclk;253u16 vddc;254u16 vddci; /* eg+ only */255u32 flags;256enum si_pcie_gen pcie_gen; /* si+ only */257};258259struct si_ps {260u16 performance_level_count;261bool dc_compatible;262struct rv7xx_pl performance_levels[NISLANDS_MAX_SMC_PERFORMANCE_LEVELS_PER_SWSTATE];263};264265struct evergreen_power_info {266/* must be first! */267struct rv7xx_power_info rv7xx;268/* flags */269bool vddci_control;270bool dynamic_ac_timing;271bool abm;272bool mcls;273bool pcie_performance_request;274bool sclk_deep_sleep;275bool smu_uvd_hs;276bool uvd_enabled;277/* stored values */278u16 acpi_vddci;279u32 mclk_edc_wr_enable_threshold;280struct atom_voltage_table vddc_voltage_table;281struct atom_voltage_table vddci_voltage_table;282struct amdgpu_ps current_rps;283struct amdgpu_ps requested_rps;284};285286struct ni_power_info {287/* must be first! */288struct evergreen_power_info eg;289u32 mclk_rtt_mode_threshold;290/* flags */291bool support_cac_long_term_average;292bool cac_enabled;293bool cac_configuration_required;294bool driver_calculate_cac_leakage;295bool enable_power_containment;296bool enable_cac;297bool enable_sq_ramping;298struct si_ps current_ps;299struct si_ps requested_ps;300};301302struct si_cac_config_reg303{304u32 offset;305u32 mask;306u32 shift;307u32 value;308enum si_cac_config_reg_type type;309};310311struct si_powertune_data312{313u32 cac_window;314u32 l2_lta_window_size_default;315u8 lts_truncate_default;316u8 shift_n_default;317u8 operating_temp;318struct ni_leakage_coeffients leakage_coefficients;319u32 fixed_kt;320u32 lkge_lut_v0_percent;321u8 dc_cac[NISLANDS_DCCAC_MAX_LEVELS];322bool enable_powertune_by_default;323};324325struct si_dyn_powertune_data326{327u32 cac_leakage;328s32 leakage_minimum_temperature;329u32 wintime;330u32 l2_lta_window_size;331u8 lts_truncate;332u8 shift_n;333u8 dc_pwr_value;334bool disable_uvd_powertune;335};336337struct si_dte_data338{339u32 tau[SMC_SISLANDS_DTE_MAX_FILTER_STAGES];340u32 r[SMC_SISLANDS_DTE_MAX_FILTER_STAGES];341u32 k;342u32 t0;343u32 max_t;344u8 window_size;345u8 temp_select;346u8 dte_mode;347u8 tdep_count;348u8 t_limits[SMC_SISLANDS_DTE_MAX_TEMPERATURE_DEPENDENT_ARRAY_SIZE];349u32 tdep_tau[SMC_SISLANDS_DTE_MAX_TEMPERATURE_DEPENDENT_ARRAY_SIZE];350u32 tdep_r[SMC_SISLANDS_DTE_MAX_TEMPERATURE_DEPENDENT_ARRAY_SIZE];351u32 t_threshold;352bool enable_dte_by_default;353};354355struct si_clock_registers {356u32 cg_spll_func_cntl;357u32 cg_spll_func_cntl_2;358u32 cg_spll_func_cntl_3;359u32 cg_spll_func_cntl_4;360u32 cg_spll_spread_spectrum;361u32 cg_spll_spread_spectrum_2;362u32 dll_cntl;363u32 mclk_pwrmgt_cntl;364u32 mpll_ad_func_cntl;365u32 mpll_dq_func_cntl;366u32 mpll_func_cntl;367u32 mpll_func_cntl_1;368u32 mpll_func_cntl_2;369u32 mpll_ss1;370u32 mpll_ss2;371};372373struct si_mc_reg_entry {374u32 mclk_max;375u32 mc_data[SMC_SISLANDS_MC_REGISTER_ARRAY_SIZE];376};377378struct si_mc_reg_table {379u8 last;380u8 num_entries;381u16 valid_flag;382struct si_mc_reg_entry mc_reg_table_entry[MAX_AC_TIMING_ENTRIES];383SMC_NIslands_MCRegisterAddress mc_reg_address[SMC_SISLANDS_MC_REGISTER_ARRAY_SIZE];384};385386struct si_leakage_voltage_entry387{388u16 voltage;389u16 leakage_index;390};391392struct si_leakage_voltage393{394u16 count;395struct si_leakage_voltage_entry entries[SISLANDS_MAX_LEAKAGE_COUNT];396};397398struct si_ulv_param {399bool supported;400u32 cg_ulv_control;401u32 cg_ulv_parameter;402u32 volt_change_delay;403struct rv7xx_pl pl;404bool one_pcie_lane_in_ulv;405};406407struct si_power_info {408/* must be first! */409struct ni_power_info ni;410struct si_clock_registers clock_registers;411struct si_mc_reg_table mc_reg_table;412struct atom_voltage_table mvdd_voltage_table;413struct atom_voltage_table vddc_phase_shed_table;414struct si_leakage_voltage leakage_voltage;415u16 mvdd_bootup_value;416struct si_ulv_param ulv;417u32 max_cu;418/* pcie gen */419enum si_pcie_gen force_pcie_gen;420enum si_pcie_gen boot_pcie_gen;421enum si_pcie_gen acpi_pcie_gen;422u32 sys_pcie_mask;423/* flags */424bool enable_dte;425bool enable_ppm;426bool vddc_phase_shed_control;427bool pspp_notify_required;428bool sclk_deep_sleep_above_low;429bool voltage_control_svi2;430bool vddci_control_svi2;431/* smc offsets */432u32 sram_end;433u32 state_table_start;434u32 soft_regs_start;435u32 mc_reg_table_start;436u32 arb_table_start;437u32 cac_table_start;438u32 dte_table_start;439u32 spll_table_start;440u32 papm_cfg_table_start;441u32 fan_table_start;442/* CAC stuff */443const struct si_cac_config_reg *cac_weights;444const struct si_cac_config_reg *lcac_config;445const struct si_cac_config_reg *cac_override;446const struct si_powertune_data *powertune_data;447struct si_dyn_powertune_data dyn_powertune_data;448/* DTE stuff */449struct si_dte_data dte_data;450/* scratch structs */451SMC_SIslands_MCRegisters smc_mc_reg_table;452SISLANDS_SMC_STATETABLE smc_statetable;453PP_SIslands_PAPMParameters papm_parm;454/* SVI2 */455u8 svd_gpio_id;456u8 svc_gpio_id;457/* fan control */458bool fan_ctrl_is_in_default_mode;459u32 t_min;460u32 fan_ctrl_default_mode;461bool fan_is_controlled_by_smc;462};463464#endif465466467