0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023 #ifndef __SI_DPM_H__
0024 #define __SI_DPM_H__
0025
0026 #include "amdgpu_atombios.h"
0027 #include "sislands_smc.h"
0028
0029 #define MC_CG_CONFIG 0x96f
0030 #define MC_ARB_CG 0x9fa
0031 #define CG_ARB_REQ(x) ((x) << 0)
0032 #define CG_ARB_REQ_MASK (0xff << 0)
0033
0034 #define MC_ARB_DRAM_TIMING_1 0x9fc
0035 #define MC_ARB_DRAM_TIMING_2 0x9fd
0036 #define MC_ARB_DRAM_TIMING_3 0x9fe
0037 #define MC_ARB_DRAM_TIMING2_1 0x9ff
0038 #define MC_ARB_DRAM_TIMING2_2 0xa00
0039 #define MC_ARB_DRAM_TIMING2_3 0xa01
0040
0041 #define MAX_NO_OF_MVDD_VALUES 2
0042 #define MAX_NO_VREG_STEPS 32
0043 #define NISLANDS_MAX_SMC_PERFORMANCE_LEVELS_PER_SWSTATE 16
0044 #define SMC_NISLANDS_MC_REGISTER_ARRAY_SIZE 32
0045 #define SMC_NISLANDS_MC_REGISTER_ARRAY_SET_COUNT 20
0046 #define RV770_ASI_DFLT 1000
0047 #define CYPRESS_HASI_DFLT 400000
0048 #define PCIE_PERF_REQ_PECI_GEN1 2
0049 #define PCIE_PERF_REQ_PECI_GEN2 3
0050 #define PCIE_PERF_REQ_PECI_GEN3 4
0051 #define RV770_DEFAULT_VCLK_FREQ 53300
0052 #define RV770_DEFAULT_DCLK_FREQ 40000
0053
0054 #define SMC_EVERGREEN_MC_REGISTER_ARRAY_SIZE 16
0055
0056 #define RV770_SMC_TABLE_ADDRESS 0xB000
0057 #define RV770_SMC_PERFORMANCE_LEVELS_PER_SWSTATE 3
0058
0059 #define SMC_STROBE_RATIO 0x0F
0060 #define SMC_STROBE_ENABLE 0x10
0061
0062 #define SMC_MC_EDC_RD_FLAG 0x01
0063 #define SMC_MC_EDC_WR_FLAG 0x02
0064 #define SMC_MC_RTT_ENABLE 0x04
0065 #define SMC_MC_STUTTER_EN 0x08
0066
0067 #define RV770_SMC_VOLTAGEMASK_VDDC 0
0068 #define RV770_SMC_VOLTAGEMASK_MVDD 1
0069 #define RV770_SMC_VOLTAGEMASK_VDDCI 2
0070 #define RV770_SMC_VOLTAGEMASK_MAX 4
0071
0072 #define NISLANDS_MAX_SMC_PERFORMANCE_LEVELS_PER_SWSTATE 16
0073 #define NISLANDS_SMC_STROBE_RATIO 0x0F
0074 #define NISLANDS_SMC_STROBE_ENABLE 0x10
0075
0076 #define NISLANDS_SMC_MC_EDC_RD_FLAG 0x01
0077 #define NISLANDS_SMC_MC_EDC_WR_FLAG 0x02
0078 #define NISLANDS_SMC_MC_RTT_ENABLE 0x04
0079 #define NISLANDS_SMC_MC_STUTTER_EN 0x08
0080
0081 #define MAX_NO_VREG_STEPS 32
0082
0083 #define NISLANDS_SMC_VOLTAGEMASK_VDDC 0
0084 #define NISLANDS_SMC_VOLTAGEMASK_MVDD 1
0085 #define NISLANDS_SMC_VOLTAGEMASK_VDDCI 2
0086 #define NISLANDS_SMC_VOLTAGEMASK_MAX 4
0087
0088 #define SISLANDS_MCREGISTERTABLE_INITIAL_SLOT 0
0089 #define SISLANDS_MCREGISTERTABLE_ACPI_SLOT 1
0090 #define SISLANDS_MCREGISTERTABLE_ULV_SLOT 2
0091 #define SISLANDS_MCREGISTERTABLE_FIRST_DRIVERSTATE_SLOT 3
0092
0093 #define SISLANDS_LEAKAGE_INDEX0 0xff01
0094 #define SISLANDS_MAX_LEAKAGE_COUNT 4
0095
0096 #define SISLANDS_MAX_HARDWARE_POWERLEVELS 5
0097 #define SISLANDS_INITIAL_STATE_ARB_INDEX 0
0098 #define SISLANDS_ACPI_STATE_ARB_INDEX 1
0099 #define SISLANDS_ULV_STATE_ARB_INDEX 2
0100 #define SISLANDS_DRIVER_STATE_ARB_INDEX 3
0101
0102 #define SISLANDS_DPM2_MAX_PULSE_SKIP 256
0103
0104 #define SISLANDS_DPM2_NEAR_TDP_DEC 10
0105 #define SISLANDS_DPM2_ABOVE_SAFE_INC 5
0106 #define SISLANDS_DPM2_BELOW_SAFE_INC 20
0107
0108 #define SISLANDS_DPM2_TDP_SAFE_LIMIT_PERCENT 80
0109
0110 #define SISLANDS_DPM2_MAXPS_PERCENT_H 99
0111 #define SISLANDS_DPM2_MAXPS_PERCENT_M 99
0112
0113 #define SISLANDS_DPM2_SQ_RAMP_MAX_POWER 0x3FFF
0114 #define SISLANDS_DPM2_SQ_RAMP_MIN_POWER 0x12
0115 #define SISLANDS_DPM2_SQ_RAMP_MAX_POWER_DELTA 0x15
0116 #define SISLANDS_DPM2_SQ_RAMP_STI_SIZE 0x1E
0117 #define SISLANDS_DPM2_SQ_RAMP_LTI_RATIO 0xF
0118
0119 #define SISLANDS_DPM2_PWREFFICIENCYRATIO_MARGIN 10
0120
0121 #define SISLANDS_VRC_DFLT 0xC000B3
0122 #define SISLANDS_ULVVOLTAGECHANGEDELAY_DFLT 1687
0123 #define SISLANDS_CGULVPARAMETER_DFLT 0x00040035
0124 #define SISLANDS_CGULVCONTROL_DFLT 0x1f007550
0125
0126 #define SI_ASI_DFLT 10000
0127 #define SI_BSP_DFLT 0x41EB
0128 #define SI_BSU_DFLT 0x2
0129 #define SI_AH_DFLT 5
0130 #define SI_RLP_DFLT 25
0131 #define SI_RMP_DFLT 65
0132 #define SI_LHP_DFLT 40
0133 #define SI_LMP_DFLT 15
0134 #define SI_TD_DFLT 0
0135 #define SI_UTC_DFLT_00 0x24
0136 #define SI_UTC_DFLT_01 0x22
0137 #define SI_UTC_DFLT_02 0x22
0138 #define SI_UTC_DFLT_03 0x22
0139 #define SI_UTC_DFLT_04 0x22
0140 #define SI_UTC_DFLT_05 0x22
0141 #define SI_UTC_DFLT_06 0x22
0142 #define SI_UTC_DFLT_07 0x22
0143 #define SI_UTC_DFLT_08 0x22
0144 #define SI_UTC_DFLT_09 0x22
0145 #define SI_UTC_DFLT_10 0x22
0146 #define SI_UTC_DFLT_11 0x22
0147 #define SI_UTC_DFLT_12 0x22
0148 #define SI_UTC_DFLT_13 0x22
0149 #define SI_UTC_DFLT_14 0x22
0150 #define SI_DTC_DFLT_00 0x24
0151 #define SI_DTC_DFLT_01 0x22
0152 #define SI_DTC_DFLT_02 0x22
0153 #define SI_DTC_DFLT_03 0x22
0154 #define SI_DTC_DFLT_04 0x22
0155 #define SI_DTC_DFLT_05 0x22
0156 #define SI_DTC_DFLT_06 0x22
0157 #define SI_DTC_DFLT_07 0x22
0158 #define SI_DTC_DFLT_08 0x22
0159 #define SI_DTC_DFLT_09 0x22
0160 #define SI_DTC_DFLT_10 0x22
0161 #define SI_DTC_DFLT_11 0x22
0162 #define SI_DTC_DFLT_12 0x22
0163 #define SI_DTC_DFLT_13 0x22
0164 #define SI_DTC_DFLT_14 0x22
0165 #define SI_VRC_DFLT 0x0000C003
0166 #define SI_VOLTAGERESPONSETIME_DFLT 1000
0167 #define SI_BACKBIASRESPONSETIME_DFLT 1000
0168 #define SI_VRU_DFLT 0x3
0169 #define SI_SPLLSTEPTIME_DFLT 0x1000
0170 #define SI_SPLLSTEPUNIT_DFLT 0x3
0171 #define SI_TPU_DFLT 0
0172 #define SI_TPC_DFLT 0x200
0173 #define SI_SSTU_DFLT 0
0174 #define SI_SST_DFLT 0x00C8
0175 #define SI_GICST_DFLT 0x200
0176 #define SI_FCT_DFLT 0x0400
0177 #define SI_FCTU_DFLT 0
0178 #define SI_CTXCGTT3DRPHC_DFLT 0x20
0179 #define SI_CTXCGTT3DRSDC_DFLT 0x40
0180 #define SI_VDDC3DOORPHC_DFLT 0x100
0181 #define SI_VDDC3DOORSDC_DFLT 0x7
0182 #define SI_VDDC3DOORSU_DFLT 0
0183 #define SI_MPLLLOCKTIME_DFLT 100
0184 #define SI_MPLLRESETTIME_DFLT 150
0185 #define SI_VCOSTEPPCT_DFLT 20
0186 #define SI_ENDINGVCOSTEPPCT_DFLT 5
0187 #define SI_REFERENCEDIVIDER_DFLT 4
0188
0189 #define SI_PM_NUMBER_OF_TC 15
0190 #define SI_PM_NUMBER_OF_SCLKS 20
0191 #define SI_PM_NUMBER_OF_MCLKS 4
0192 #define SI_PM_NUMBER_OF_VOLTAGE_LEVELS 4
0193 #define SI_PM_NUMBER_OF_ACTIVITY_LEVELS 3
0194
0195
0196 #define SI_TEMP_RANGE_MIN (90 * 1000)
0197 #define SI_TEMP_RANGE_MAX (120 * 1000)
0198
0199 #define FDO_PWM_MODE_STATIC 1
0200 #define FDO_PWM_MODE_STATIC_RPM 5
0201
0202 enum ni_dc_cac_level
0203 {
0204 NISLANDS_DCCAC_LEVEL_0 = 0,
0205 NISLANDS_DCCAC_LEVEL_1,
0206 NISLANDS_DCCAC_LEVEL_2,
0207 NISLANDS_DCCAC_LEVEL_3,
0208 NISLANDS_DCCAC_LEVEL_4,
0209 NISLANDS_DCCAC_LEVEL_5,
0210 NISLANDS_DCCAC_LEVEL_6,
0211 NISLANDS_DCCAC_LEVEL_7,
0212 NISLANDS_DCCAC_MAX_LEVELS
0213 };
0214
0215 enum si_cac_config_reg_type
0216 {
0217 SISLANDS_CACCONFIG_MMR = 0,
0218 SISLANDS_CACCONFIG_CGIND,
0219 SISLANDS_CACCONFIG_MAX
0220 };
0221
0222 enum si_power_level {
0223 SI_POWER_LEVEL_LOW = 0,
0224 SI_POWER_LEVEL_MEDIUM = 1,
0225 SI_POWER_LEVEL_HIGH = 2,
0226 SI_POWER_LEVEL_CTXSW = 3,
0227 };
0228
0229 enum si_td {
0230 SI_TD_AUTO,
0231 SI_TD_UP,
0232 SI_TD_DOWN,
0233 };
0234
0235 enum si_display_watermark {
0236 SI_DISPLAY_WATERMARK_LOW = 0,
0237 SI_DISPLAY_WATERMARK_HIGH = 1,
0238 };
0239
0240 enum si_display_gap
0241 {
0242 SI_PM_DISPLAY_GAP_VBLANK_OR_WM = 0,
0243 SI_PM_DISPLAY_GAP_VBLANK = 1,
0244 SI_PM_DISPLAY_GAP_WATERMARK = 2,
0245 SI_PM_DISPLAY_GAP_IGNORE = 3,
0246 };
0247
0248 extern const struct amdgpu_ip_block_version si_smu_ip_block;
0249
0250 struct ni_leakage_coeffients
0251 {
0252 u32 at;
0253 u32 bt;
0254 u32 av;
0255 u32 bv;
0256 s32 t_slope;
0257 s32 t_intercept;
0258 u32 t_ref;
0259 };
0260
0261 struct SMC_Evergreen_MCRegisterAddress
0262 {
0263 uint16_t s0;
0264 uint16_t s1;
0265 };
0266
0267 typedef struct SMC_Evergreen_MCRegisterAddress SMC_Evergreen_MCRegisterAddress;
0268
0269 struct evergreen_mc_reg_entry {
0270 u32 mclk_max;
0271 u32 mc_data[SMC_EVERGREEN_MC_REGISTER_ARRAY_SIZE];
0272 };
0273
0274 struct evergreen_mc_reg_table {
0275 u8 last;
0276 u8 num_entries;
0277 u16 valid_flag;
0278 struct evergreen_mc_reg_entry mc_reg_table_entry[MAX_AC_TIMING_ENTRIES];
0279 SMC_Evergreen_MCRegisterAddress mc_reg_address[SMC_EVERGREEN_MC_REGISTER_ARRAY_SIZE];
0280 };
0281
0282 struct SMC_Evergreen_MCRegisterSet
0283 {
0284 uint32_t value[SMC_EVERGREEN_MC_REGISTER_ARRAY_SIZE];
0285 };
0286
0287 typedef struct SMC_Evergreen_MCRegisterSet SMC_Evergreen_MCRegisterSet;
0288
0289 struct SMC_Evergreen_MCRegisters
0290 {
0291 uint8_t last;
0292 uint8_t reserved[3];
0293 SMC_Evergreen_MCRegisterAddress address[SMC_EVERGREEN_MC_REGISTER_ARRAY_SIZE];
0294 SMC_Evergreen_MCRegisterSet data[5];
0295 };
0296
0297 typedef struct SMC_Evergreen_MCRegisters SMC_Evergreen_MCRegisters;
0298
0299 struct SMC_NIslands_MCRegisterSet
0300 {
0301 uint32_t value[SMC_NISLANDS_MC_REGISTER_ARRAY_SIZE];
0302 };
0303
0304 typedef struct SMC_NIslands_MCRegisterSet SMC_NIslands_MCRegisterSet;
0305
0306 struct ni_mc_reg_entry {
0307 u32 mclk_max;
0308 u32 mc_data[SMC_NISLANDS_MC_REGISTER_ARRAY_SIZE];
0309 };
0310
0311 struct SMC_NIslands_MCRegisterAddress
0312 {
0313 uint16_t s0;
0314 uint16_t s1;
0315 };
0316
0317 typedef struct SMC_NIslands_MCRegisterAddress SMC_NIslands_MCRegisterAddress;
0318
0319 struct SMC_NIslands_MCRegisters
0320 {
0321 uint8_t last;
0322 uint8_t reserved[3];
0323 SMC_NIslands_MCRegisterAddress address[SMC_NISLANDS_MC_REGISTER_ARRAY_SIZE];
0324 SMC_NIslands_MCRegisterSet data[SMC_NISLANDS_MC_REGISTER_ARRAY_SET_COUNT];
0325 };
0326
0327 typedef struct SMC_NIslands_MCRegisters SMC_NIslands_MCRegisters;
0328
0329 struct evergreen_ulv_param {
0330 bool supported;
0331 struct rv7xx_pl *pl;
0332 };
0333
0334 struct evergreen_arb_registers {
0335 u32 mc_arb_dram_timing;
0336 u32 mc_arb_dram_timing2;
0337 u32 mc_arb_rfsh_rate;
0338 u32 mc_arb_burst_time;
0339 };
0340
0341 struct at {
0342 u32 rlp;
0343 u32 rmp;
0344 u32 lhp;
0345 u32 lmp;
0346 };
0347
0348 struct ni_clock_registers {
0349 u32 cg_spll_func_cntl;
0350 u32 cg_spll_func_cntl_2;
0351 u32 cg_spll_func_cntl_3;
0352 u32 cg_spll_func_cntl_4;
0353 u32 cg_spll_spread_spectrum;
0354 u32 cg_spll_spread_spectrum_2;
0355 u32 mclk_pwrmgt_cntl;
0356 u32 dll_cntl;
0357 u32 mpll_ad_func_cntl;
0358 u32 mpll_ad_func_cntl_2;
0359 u32 mpll_dq_func_cntl;
0360 u32 mpll_dq_func_cntl_2;
0361 u32 mpll_ss1;
0362 u32 mpll_ss2;
0363 };
0364
0365 struct RV770_SMC_SCLK_VALUE
0366 {
0367 uint32_t vCG_SPLL_FUNC_CNTL;
0368 uint32_t vCG_SPLL_FUNC_CNTL_2;
0369 uint32_t vCG_SPLL_FUNC_CNTL_3;
0370 uint32_t vCG_SPLL_SPREAD_SPECTRUM;
0371 uint32_t vCG_SPLL_SPREAD_SPECTRUM_2;
0372 uint32_t sclk_value;
0373 };
0374
0375 typedef struct RV770_SMC_SCLK_VALUE RV770_SMC_SCLK_VALUE;
0376
0377 struct RV770_SMC_MCLK_VALUE
0378 {
0379 uint32_t vMPLL_AD_FUNC_CNTL;
0380 uint32_t vMPLL_AD_FUNC_CNTL_2;
0381 uint32_t vMPLL_DQ_FUNC_CNTL;
0382 uint32_t vMPLL_DQ_FUNC_CNTL_2;
0383 uint32_t vMCLK_PWRMGT_CNTL;
0384 uint32_t vDLL_CNTL;
0385 uint32_t vMPLL_SS;
0386 uint32_t vMPLL_SS2;
0387 uint32_t mclk_value;
0388 };
0389
0390 typedef struct RV770_SMC_MCLK_VALUE RV770_SMC_MCLK_VALUE;
0391
0392
0393 struct RV730_SMC_MCLK_VALUE
0394 {
0395 uint32_t vMCLK_PWRMGT_CNTL;
0396 uint32_t vDLL_CNTL;
0397 uint32_t vMPLL_FUNC_CNTL;
0398 uint32_t vMPLL_FUNC_CNTL2;
0399 uint32_t vMPLL_FUNC_CNTL3;
0400 uint32_t vMPLL_SS;
0401 uint32_t vMPLL_SS2;
0402 uint32_t mclk_value;
0403 };
0404
0405 typedef struct RV730_SMC_MCLK_VALUE RV730_SMC_MCLK_VALUE;
0406
0407 struct RV770_SMC_VOLTAGE_VALUE
0408 {
0409 uint16_t value;
0410 uint8_t index;
0411 uint8_t padding;
0412 };
0413
0414 typedef struct RV770_SMC_VOLTAGE_VALUE RV770_SMC_VOLTAGE_VALUE;
0415
0416 union RV7XX_SMC_MCLK_VALUE
0417 {
0418 RV770_SMC_MCLK_VALUE mclk770;
0419 RV730_SMC_MCLK_VALUE mclk730;
0420 };
0421
0422 typedef union RV7XX_SMC_MCLK_VALUE RV7XX_SMC_MCLK_VALUE, *LPRV7XX_SMC_MCLK_VALUE;
0423
0424 struct RV770_SMC_HW_PERFORMANCE_LEVEL
0425 {
0426 uint8_t arbValue;
0427 union{
0428 uint8_t seqValue;
0429 uint8_t ACIndex;
0430 };
0431 uint8_t displayWatermark;
0432 uint8_t gen2PCIE;
0433 uint8_t gen2XSP;
0434 uint8_t backbias;
0435 uint8_t strobeMode;
0436 uint8_t mcFlags;
0437 uint32_t aT;
0438 uint32_t bSP;
0439 RV770_SMC_SCLK_VALUE sclk;
0440 RV7XX_SMC_MCLK_VALUE mclk;
0441 RV770_SMC_VOLTAGE_VALUE vddc;
0442 RV770_SMC_VOLTAGE_VALUE mvdd;
0443 RV770_SMC_VOLTAGE_VALUE vddci;
0444 uint8_t reserved1;
0445 uint8_t reserved2;
0446 uint8_t stateFlags;
0447 uint8_t padding;
0448 };
0449
0450 typedef struct RV770_SMC_HW_PERFORMANCE_LEVEL RV770_SMC_HW_PERFORMANCE_LEVEL;
0451
0452 struct RV770_SMC_SWSTATE
0453 {
0454 uint8_t flags;
0455 uint8_t padding1;
0456 uint8_t padding2;
0457 uint8_t padding3;
0458 RV770_SMC_HW_PERFORMANCE_LEVEL levels[RV770_SMC_PERFORMANCE_LEVELS_PER_SWSTATE];
0459 };
0460
0461 typedef struct RV770_SMC_SWSTATE RV770_SMC_SWSTATE;
0462
0463 struct RV770_SMC_VOLTAGEMASKTABLE
0464 {
0465 uint8_t highMask[RV770_SMC_VOLTAGEMASK_MAX];
0466 uint32_t lowMask[RV770_SMC_VOLTAGEMASK_MAX];
0467 };
0468
0469 typedef struct RV770_SMC_VOLTAGEMASKTABLE RV770_SMC_VOLTAGEMASKTABLE;
0470
0471 struct RV770_SMC_STATETABLE
0472 {
0473 uint8_t thermalProtectType;
0474 uint8_t systemFlags;
0475 uint8_t maxVDDCIndexInPPTable;
0476 uint8_t extraFlags;
0477 uint8_t highSMIO[MAX_NO_VREG_STEPS];
0478 uint32_t lowSMIO[MAX_NO_VREG_STEPS];
0479 RV770_SMC_VOLTAGEMASKTABLE voltageMaskTable;
0480 RV770_SMC_SWSTATE initialState;
0481 RV770_SMC_SWSTATE ACPIState;
0482 RV770_SMC_SWSTATE driverState;
0483 RV770_SMC_SWSTATE ULVState;
0484 };
0485
0486 typedef struct RV770_SMC_STATETABLE RV770_SMC_STATETABLE;
0487
0488 struct vddc_table_entry {
0489 u16 vddc;
0490 u8 vddc_index;
0491 u8 high_smio;
0492 u32 low_smio;
0493 };
0494
0495 struct rv770_clock_registers {
0496 u32 cg_spll_func_cntl;
0497 u32 cg_spll_func_cntl_2;
0498 u32 cg_spll_func_cntl_3;
0499 u32 cg_spll_spread_spectrum;
0500 u32 cg_spll_spread_spectrum_2;
0501 u32 mpll_ad_func_cntl;
0502 u32 mpll_ad_func_cntl_2;
0503 u32 mpll_dq_func_cntl;
0504 u32 mpll_dq_func_cntl_2;
0505 u32 mclk_pwrmgt_cntl;
0506 u32 dll_cntl;
0507 u32 mpll_ss1;
0508 u32 mpll_ss2;
0509 };
0510
0511 struct rv730_clock_registers {
0512 u32 cg_spll_func_cntl;
0513 u32 cg_spll_func_cntl_2;
0514 u32 cg_spll_func_cntl_3;
0515 u32 cg_spll_spread_spectrum;
0516 u32 cg_spll_spread_spectrum_2;
0517 u32 mclk_pwrmgt_cntl;
0518 u32 dll_cntl;
0519 u32 mpll_func_cntl;
0520 u32 mpll_func_cntl2;
0521 u32 mpll_func_cntl3;
0522 u32 mpll_ss;
0523 u32 mpll_ss2;
0524 };
0525
0526 union r7xx_clock_registers {
0527 struct rv770_clock_registers rv770;
0528 struct rv730_clock_registers rv730;
0529 };
0530
0531 struct rv7xx_power_info {
0532
0533 bool mem_gddr5;
0534 bool pcie_gen2;
0535 bool dynamic_pcie_gen2;
0536 bool acpi_pcie_gen2;
0537 bool boot_in_gen2;
0538 bool voltage_control;
0539 bool mvdd_control;
0540 bool sclk_ss;
0541 bool mclk_ss;
0542 bool dynamic_ss;
0543 bool gfx_clock_gating;
0544 bool mg_clock_gating;
0545 bool mgcgtssm;
0546 bool power_gating;
0547 bool thermal_protection;
0548 bool display_gap;
0549 bool dcodt;
0550 bool ulps;
0551
0552 union r7xx_clock_registers clk_regs;
0553 u32 s0_vid_lower_smio_cntl;
0554
0555 u32 vddc_mask_low;
0556 u32 mvdd_mask_low;
0557 u32 mvdd_split_frequency;
0558 u32 mvdd_low_smio[MAX_NO_OF_MVDD_VALUES];
0559 u16 max_vddc;
0560 u16 max_vddc_in_table;
0561 u16 min_vddc_in_table;
0562 struct vddc_table_entry vddc_table[MAX_NO_VREG_STEPS];
0563 u8 valid_vddc_entries;
0564
0565 u32 mclk_odt_threshold;
0566 u8 odt_value_0[2];
0567 u8 odt_value_1[2];
0568
0569 u32 boot_sclk;
0570 u16 acpi_vddc;
0571 u32 ref_div;
0572 u32 active_auto_throttle_sources;
0573 u32 mclk_stutter_mode_threshold;
0574 u32 mclk_strobe_mode_threshold;
0575 u32 mclk_edc_enable_threshold;
0576 u32 bsp;
0577 u32 bsu;
0578 u32 pbsp;
0579 u32 pbsu;
0580 u32 dsp;
0581 u32 psp;
0582 u32 asi;
0583 u32 pasi;
0584 u32 vrc;
0585 u32 restricted_levels;
0586 u32 rlp;
0587 u32 rmp;
0588 u32 lhp;
0589 u32 lmp;
0590
0591 u16 state_table_start;
0592 u16 soft_regs_start;
0593 u16 sram_end;
0594
0595 RV770_SMC_STATETABLE smc_statetable;
0596 };
0597
0598 enum si_pcie_gen {
0599 SI_PCIE_GEN1 = 0,
0600 SI_PCIE_GEN2 = 1,
0601 SI_PCIE_GEN3 = 2,
0602 SI_PCIE_GEN_INVALID = 0xffff
0603 };
0604
0605 struct rv7xx_pl {
0606 u32 sclk;
0607 u32 mclk;
0608 u16 vddc;
0609 u16 vddci;
0610 u32 flags;
0611 enum si_pcie_gen pcie_gen;
0612 };
0613
0614 struct rv7xx_ps {
0615 struct rv7xx_pl high;
0616 struct rv7xx_pl medium;
0617 struct rv7xx_pl low;
0618 bool dc_compatible;
0619 };
0620
0621 struct si_ps {
0622 u16 performance_level_count;
0623 bool dc_compatible;
0624 struct rv7xx_pl performance_levels[NISLANDS_MAX_SMC_PERFORMANCE_LEVELS_PER_SWSTATE];
0625 };
0626
0627 struct ni_mc_reg_table {
0628 u8 last;
0629 u8 num_entries;
0630 u16 valid_flag;
0631 struct ni_mc_reg_entry mc_reg_table_entry[MAX_AC_TIMING_ENTRIES];
0632 SMC_NIslands_MCRegisterAddress mc_reg_address[SMC_NISLANDS_MC_REGISTER_ARRAY_SIZE];
0633 };
0634
0635 struct ni_cac_data
0636 {
0637 struct ni_leakage_coeffients leakage_coefficients;
0638 u32 i_leakage;
0639 s32 leakage_minimum_temperature;
0640 u32 pwr_const;
0641 u32 dc_cac_value;
0642 u32 bif_cac_value;
0643 u32 lkge_pwr;
0644 u8 mc_wr_weight;
0645 u8 mc_rd_weight;
0646 u8 allow_ovrflw;
0647 u8 num_win_tdp;
0648 u8 l2num_win_tdp;
0649 u8 lts_truncate_n;
0650 };
0651
0652 struct evergreen_power_info {
0653
0654 struct rv7xx_power_info rv7xx;
0655
0656 bool vddci_control;
0657 bool dynamic_ac_timing;
0658 bool abm;
0659 bool mcls;
0660 bool light_sleep;
0661 bool memory_transition;
0662 bool pcie_performance_request;
0663 bool pcie_performance_request_registered;
0664 bool sclk_deep_sleep;
0665 bool dll_default_on;
0666 bool ls_clock_gating;
0667 bool smu_uvd_hs;
0668 bool uvd_enabled;
0669
0670 u16 acpi_vddci;
0671 u8 mvdd_high_index;
0672 u8 mvdd_low_index;
0673 u32 mclk_edc_wr_enable_threshold;
0674 struct evergreen_mc_reg_table mc_reg_table;
0675 struct atom_voltage_table vddc_voltage_table;
0676 struct atom_voltage_table vddci_voltage_table;
0677 struct evergreen_arb_registers bootup_arb_registers;
0678 struct evergreen_ulv_param ulv;
0679 struct at ats[2];
0680
0681 u16 mc_reg_table_start;
0682 struct amdgpu_ps current_rps;
0683 struct rv7xx_ps current_ps;
0684 struct amdgpu_ps requested_rps;
0685 struct rv7xx_ps requested_ps;
0686 };
0687
0688 struct PP_NIslands_Dpm2PerfLevel
0689 {
0690 uint8_t MaxPS;
0691 uint8_t TgtAct;
0692 uint8_t MaxPS_StepInc;
0693 uint8_t MaxPS_StepDec;
0694 uint8_t PSST;
0695 uint8_t NearTDPDec;
0696 uint8_t AboveSafeInc;
0697 uint8_t BelowSafeInc;
0698 uint8_t PSDeltaLimit;
0699 uint8_t PSDeltaWin;
0700 uint8_t Reserved[6];
0701 };
0702
0703 typedef struct PP_NIslands_Dpm2PerfLevel PP_NIslands_Dpm2PerfLevel;
0704
0705 struct PP_NIslands_DPM2Parameters
0706 {
0707 uint32_t TDPLimit;
0708 uint32_t NearTDPLimit;
0709 uint32_t SafePowerLimit;
0710 uint32_t PowerBoostLimit;
0711 };
0712 typedef struct PP_NIslands_DPM2Parameters PP_NIslands_DPM2Parameters;
0713
0714 struct NISLANDS_SMC_SCLK_VALUE
0715 {
0716 uint32_t vCG_SPLL_FUNC_CNTL;
0717 uint32_t vCG_SPLL_FUNC_CNTL_2;
0718 uint32_t vCG_SPLL_FUNC_CNTL_3;
0719 uint32_t vCG_SPLL_FUNC_CNTL_4;
0720 uint32_t vCG_SPLL_SPREAD_SPECTRUM;
0721 uint32_t vCG_SPLL_SPREAD_SPECTRUM_2;
0722 uint32_t sclk_value;
0723 };
0724
0725 typedef struct NISLANDS_SMC_SCLK_VALUE NISLANDS_SMC_SCLK_VALUE;
0726
0727 struct NISLANDS_SMC_MCLK_VALUE
0728 {
0729 uint32_t vMPLL_FUNC_CNTL;
0730 uint32_t vMPLL_FUNC_CNTL_1;
0731 uint32_t vMPLL_FUNC_CNTL_2;
0732 uint32_t vMPLL_AD_FUNC_CNTL;
0733 uint32_t vMPLL_AD_FUNC_CNTL_2;
0734 uint32_t vMPLL_DQ_FUNC_CNTL;
0735 uint32_t vMPLL_DQ_FUNC_CNTL_2;
0736 uint32_t vMCLK_PWRMGT_CNTL;
0737 uint32_t vDLL_CNTL;
0738 uint32_t vMPLL_SS;
0739 uint32_t vMPLL_SS2;
0740 uint32_t mclk_value;
0741 };
0742
0743 typedef struct NISLANDS_SMC_MCLK_VALUE NISLANDS_SMC_MCLK_VALUE;
0744
0745 struct NISLANDS_SMC_VOLTAGE_VALUE
0746 {
0747 uint16_t value;
0748 uint8_t index;
0749 uint8_t padding;
0750 };
0751
0752 typedef struct NISLANDS_SMC_VOLTAGE_VALUE NISLANDS_SMC_VOLTAGE_VALUE;
0753
0754 struct NISLANDS_SMC_HW_PERFORMANCE_LEVEL
0755 {
0756 uint8_t arbValue;
0757 uint8_t ACIndex;
0758 uint8_t displayWatermark;
0759 uint8_t gen2PCIE;
0760 uint8_t reserved1;
0761 uint8_t reserved2;
0762 uint8_t strobeMode;
0763 uint8_t mcFlags;
0764 uint32_t aT;
0765 uint32_t bSP;
0766 NISLANDS_SMC_SCLK_VALUE sclk;
0767 NISLANDS_SMC_MCLK_VALUE mclk;
0768 NISLANDS_SMC_VOLTAGE_VALUE vddc;
0769 NISLANDS_SMC_VOLTAGE_VALUE mvdd;
0770 NISLANDS_SMC_VOLTAGE_VALUE vddci;
0771 NISLANDS_SMC_VOLTAGE_VALUE std_vddc;
0772 uint32_t powergate_en;
0773 uint8_t hUp;
0774 uint8_t hDown;
0775 uint8_t stateFlags;
0776 uint8_t arbRefreshState;
0777 uint32_t SQPowerThrottle;
0778 uint32_t SQPowerThrottle_2;
0779 uint32_t reserved[2];
0780 PP_NIslands_Dpm2PerfLevel dpm2;
0781 };
0782
0783 typedef struct NISLANDS_SMC_HW_PERFORMANCE_LEVEL NISLANDS_SMC_HW_PERFORMANCE_LEVEL;
0784
0785 struct NISLANDS_SMC_SWSTATE
0786 {
0787 uint8_t flags;
0788 uint8_t levelCount;
0789 uint8_t padding2;
0790 uint8_t padding3;
0791 NISLANDS_SMC_HW_PERFORMANCE_LEVEL levels[];
0792 };
0793
0794 typedef struct NISLANDS_SMC_SWSTATE NISLANDS_SMC_SWSTATE;
0795
0796 struct NISLANDS_SMC_VOLTAGEMASKTABLE
0797 {
0798 uint8_t highMask[NISLANDS_SMC_VOLTAGEMASK_MAX];
0799 uint32_t lowMask[NISLANDS_SMC_VOLTAGEMASK_MAX];
0800 };
0801
0802 typedef struct NISLANDS_SMC_VOLTAGEMASKTABLE NISLANDS_SMC_VOLTAGEMASKTABLE;
0803
0804 #define NISLANDS_MAX_NO_VREG_STEPS 32
0805
0806 struct NISLANDS_SMC_STATETABLE
0807 {
0808 uint8_t thermalProtectType;
0809 uint8_t systemFlags;
0810 uint8_t maxVDDCIndexInPPTable;
0811 uint8_t extraFlags;
0812 uint8_t highSMIO[NISLANDS_MAX_NO_VREG_STEPS];
0813 uint32_t lowSMIO[NISLANDS_MAX_NO_VREG_STEPS];
0814 NISLANDS_SMC_VOLTAGEMASKTABLE voltageMaskTable;
0815 PP_NIslands_DPM2Parameters dpm2Params;
0816 NISLANDS_SMC_SWSTATE initialState;
0817 NISLANDS_SMC_SWSTATE ACPIState;
0818 NISLANDS_SMC_SWSTATE ULVState;
0819 NISLANDS_SMC_SWSTATE driverState;
0820 NISLANDS_SMC_HW_PERFORMANCE_LEVEL dpmLevels[NISLANDS_MAX_SMC_PERFORMANCE_LEVELS_PER_SWSTATE - 1];
0821 };
0822
0823 typedef struct NISLANDS_SMC_STATETABLE NISLANDS_SMC_STATETABLE;
0824
0825 struct ni_power_info {
0826
0827 struct evergreen_power_info eg;
0828 struct ni_clock_registers clock_registers;
0829 struct ni_mc_reg_table mc_reg_table;
0830 u32 mclk_rtt_mode_threshold;
0831
0832 bool use_power_boost_limit;
0833 bool support_cac_long_term_average;
0834 bool cac_enabled;
0835 bool cac_configuration_required;
0836 bool driver_calculate_cac_leakage;
0837 bool pc_enabled;
0838 bool enable_power_containment;
0839 bool enable_cac;
0840 bool enable_sq_ramping;
0841
0842 u16 arb_table_start;
0843 u16 fan_table_start;
0844 u16 cac_table_start;
0845 u16 spll_table_start;
0846
0847 struct ni_cac_data cac_data;
0848 u32 dc_cac_table[NISLANDS_DCCAC_MAX_LEVELS];
0849 const struct ni_cac_weights *cac_weights;
0850 u8 lta_window_size;
0851 u8 lts_truncate;
0852 struct si_ps current_ps;
0853 struct si_ps requested_ps;
0854
0855 SMC_NIslands_MCRegisters smc_mc_reg_table;
0856 NISLANDS_SMC_STATETABLE smc_statetable;
0857 };
0858
0859 struct si_cac_config_reg
0860 {
0861 u32 offset;
0862 u32 mask;
0863 u32 shift;
0864 u32 value;
0865 enum si_cac_config_reg_type type;
0866 };
0867
0868 struct si_powertune_data
0869 {
0870 u32 cac_window;
0871 u32 l2_lta_window_size_default;
0872 u8 lts_truncate_default;
0873 u8 shift_n_default;
0874 u8 operating_temp;
0875 struct ni_leakage_coeffients leakage_coefficients;
0876 u32 fixed_kt;
0877 u32 lkge_lut_v0_percent;
0878 u8 dc_cac[NISLANDS_DCCAC_MAX_LEVELS];
0879 bool enable_powertune_by_default;
0880 };
0881
0882 struct si_dyn_powertune_data
0883 {
0884 u32 cac_leakage;
0885 s32 leakage_minimum_temperature;
0886 u32 wintime;
0887 u32 l2_lta_window_size;
0888 u8 lts_truncate;
0889 u8 shift_n;
0890 u8 dc_pwr_value;
0891 bool disable_uvd_powertune;
0892 };
0893
0894 struct si_dte_data
0895 {
0896 u32 tau[SMC_SISLANDS_DTE_MAX_FILTER_STAGES];
0897 u32 r[SMC_SISLANDS_DTE_MAX_FILTER_STAGES];
0898 u32 k;
0899 u32 t0;
0900 u32 max_t;
0901 u8 window_size;
0902 u8 temp_select;
0903 u8 dte_mode;
0904 u8 tdep_count;
0905 u8 t_limits[SMC_SISLANDS_DTE_MAX_TEMPERATURE_DEPENDENT_ARRAY_SIZE];
0906 u32 tdep_tau[SMC_SISLANDS_DTE_MAX_TEMPERATURE_DEPENDENT_ARRAY_SIZE];
0907 u32 tdep_r[SMC_SISLANDS_DTE_MAX_TEMPERATURE_DEPENDENT_ARRAY_SIZE];
0908 u32 t_threshold;
0909 bool enable_dte_by_default;
0910 };
0911
0912 struct si_clock_registers {
0913 u32 cg_spll_func_cntl;
0914 u32 cg_spll_func_cntl_2;
0915 u32 cg_spll_func_cntl_3;
0916 u32 cg_spll_func_cntl_4;
0917 u32 cg_spll_spread_spectrum;
0918 u32 cg_spll_spread_spectrum_2;
0919 u32 dll_cntl;
0920 u32 mclk_pwrmgt_cntl;
0921 u32 mpll_ad_func_cntl;
0922 u32 mpll_dq_func_cntl;
0923 u32 mpll_func_cntl;
0924 u32 mpll_func_cntl_1;
0925 u32 mpll_func_cntl_2;
0926 u32 mpll_ss1;
0927 u32 mpll_ss2;
0928 };
0929
0930 struct si_mc_reg_entry {
0931 u32 mclk_max;
0932 u32 mc_data[SMC_SISLANDS_MC_REGISTER_ARRAY_SIZE];
0933 };
0934
0935 struct si_mc_reg_table {
0936 u8 last;
0937 u8 num_entries;
0938 u16 valid_flag;
0939 struct si_mc_reg_entry mc_reg_table_entry[MAX_AC_TIMING_ENTRIES];
0940 SMC_NIslands_MCRegisterAddress mc_reg_address[SMC_SISLANDS_MC_REGISTER_ARRAY_SIZE];
0941 };
0942
0943 struct si_leakage_voltage_entry
0944 {
0945 u16 voltage;
0946 u16 leakage_index;
0947 };
0948
0949 struct si_leakage_voltage
0950 {
0951 u16 count;
0952 struct si_leakage_voltage_entry entries[SISLANDS_MAX_LEAKAGE_COUNT];
0953 };
0954
0955
0956 struct si_ulv_param {
0957 bool supported;
0958 u32 cg_ulv_control;
0959 u32 cg_ulv_parameter;
0960 u32 volt_change_delay;
0961 struct rv7xx_pl pl;
0962 bool one_pcie_lane_in_ulv;
0963 };
0964
0965 struct si_power_info {
0966
0967 struct ni_power_info ni;
0968 struct si_clock_registers clock_registers;
0969 struct si_mc_reg_table mc_reg_table;
0970 struct atom_voltage_table mvdd_voltage_table;
0971 struct atom_voltage_table vddc_phase_shed_table;
0972 struct si_leakage_voltage leakage_voltage;
0973 u16 mvdd_bootup_value;
0974 struct si_ulv_param ulv;
0975 u32 max_cu;
0976
0977 enum si_pcie_gen force_pcie_gen;
0978 enum si_pcie_gen boot_pcie_gen;
0979 enum si_pcie_gen acpi_pcie_gen;
0980 u32 sys_pcie_mask;
0981
0982 bool enable_dte;
0983 bool enable_ppm;
0984 bool vddc_phase_shed_control;
0985 bool pspp_notify_required;
0986 bool sclk_deep_sleep_above_low;
0987 bool voltage_control_svi2;
0988 bool vddci_control_svi2;
0989
0990 u32 sram_end;
0991 u32 state_table_start;
0992 u32 soft_regs_start;
0993 u32 mc_reg_table_start;
0994 u32 arb_table_start;
0995 u32 cac_table_start;
0996 u32 dte_table_start;
0997 u32 spll_table_start;
0998 u32 papm_cfg_table_start;
0999 u32 fan_table_start;
1000
1001 const struct si_cac_config_reg *cac_weights;
1002 const struct si_cac_config_reg *lcac_config;
1003 const struct si_cac_config_reg *cac_override;
1004 const struct si_powertune_data *powertune_data;
1005 struct si_dyn_powertune_data dyn_powertune_data;
1006
1007 struct si_dte_data dte_data;
1008
1009 SMC_SIslands_MCRegisters smc_mc_reg_table;
1010 SISLANDS_SMC_STATETABLE smc_statetable;
1011 PP_SIslands_PAPMParameters papm_parm;
1012
1013 u8 svd_gpio_id;
1014 u8 svc_gpio_id;
1015
1016 bool fan_ctrl_is_in_default_mode;
1017 u32 t_min;
1018 u32 fan_ctrl_default_mode;
1019 bool fan_is_controlled_by_smc;
1020 };
1021
1022 #endif