0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 #ifndef SMU9_DRIVER_IF_H
0025 #define SMU9_DRIVER_IF_H
0026
0027 #include "smu9.h"
0028
0029
0030
0031
0032
0033 #define SMU9_DRIVER_IF_VERSION 0xE
0034
0035 #define PPTABLE_V10_SMU_VERSION 1
0036
0037 #define NUM_GFXCLK_DPM_LEVELS 8
0038 #define NUM_UVD_DPM_LEVELS 8
0039 #define NUM_VCE_DPM_LEVELS 8
0040 #define NUM_MP0CLK_DPM_LEVELS 8
0041 #define NUM_UCLK_DPM_LEVELS 4
0042 #define NUM_SOCCLK_DPM_LEVELS 8
0043 #define NUM_DCEFCLK_DPM_LEVELS 8
0044 #define NUM_LINK_LEVELS 2
0045
0046 #define MAX_GFXCLK_DPM_LEVEL (NUM_GFXCLK_DPM_LEVELS - 1)
0047 #define MAX_UVD_DPM_LEVEL (NUM_UVD_DPM_LEVELS - 1)
0048 #define MAX_VCE_DPM_LEVEL (NUM_VCE_DPM_LEVELS - 1)
0049 #define MAX_MP0CLK_DPM_LEVEL (NUM_MP0CLK_DPM_LEVELS - 1)
0050 #define MAX_UCLK_DPM_LEVEL (NUM_UCLK_DPM_LEVELS - 1)
0051 #define MAX_SOCCLK_DPM_LEVEL (NUM_SOCCLK_DPM_LEVELS - 1)
0052 #define MAX_DCEFCLK_DPM_LEVEL (NUM_DCEFCLK_DPM_LEVELS - 1)
0053 #define MAX_LINK_DPM_LEVEL (NUM_LINK_LEVELS - 1)
0054
0055 #define MIN_GFXCLK_DPM_LEVEL 0
0056 #define MIN_UVD_DPM_LEVEL 0
0057 #define MIN_VCE_DPM_LEVEL 0
0058 #define MIN_MP0CLK_DPM_LEVEL 0
0059 #define MIN_UCLK_DPM_LEVEL 0
0060 #define MIN_SOCCLK_DPM_LEVEL 0
0061 #define MIN_DCEFCLK_DPM_LEVEL 0
0062 #define MIN_LINK_DPM_LEVEL 0
0063
0064 #define NUM_EVV_VOLTAGE_LEVELS 8
0065 #define MAX_EVV_VOLTAGE_LEVEL (NUM_EVV_VOLTAGE_LEVELS - 1)
0066 #define MIN_EVV_VOLTAGE_LEVEL 0
0067
0068 #define NUM_PSP_LEVEL_MAP 4
0069
0070
0071 #define PPSMC_GeminiModeNone 0
0072 #define PPSMC_GeminiModeMaster 1
0073 #define PPSMC_GeminiModeSlave 2
0074
0075
0076 #define VOLTAGE_MODE_AVFS_INTERPOLATE 0
0077 #define VOLTAGE_MODE_AVFS_WORST_CASE 1
0078 #define VOLTAGE_MODE_STATIC 2
0079
0080 typedef struct {
0081 uint32_t FbMult;
0082 uint32_t SsFbMult;
0083 uint16_t SsSlewFrac;
0084 uint8_t SsOn;
0085 uint8_t Did;
0086 } PllSetting_t;
0087
0088 typedef struct {
0089 int32_t a0;
0090 int32_t a1;
0091 int32_t a2;
0092
0093 uint8_t a0_shift;
0094 uint8_t a1_shift;
0095 uint8_t a2_shift;
0096 uint8_t padding;
0097 } GbVdroopTable_t;
0098
0099 typedef struct {
0100 int32_t m1;
0101 int32_t m2;
0102 int32_t b;
0103
0104 uint8_t m1_shift;
0105 uint8_t m2_shift;
0106 uint8_t b_shift;
0107 uint8_t padding;
0108 } QuadraticInt_t;
0109
0110 #define NUM_DSPCLK_LEVELS 8
0111
0112 typedef enum {
0113 DSPCLK_DCEFCLK = 0,
0114 DSPCLK_DISPCLK,
0115 DSPCLK_PIXCLK,
0116 DSPCLK_PHYCLK,
0117 DSPCLK_COUNT,
0118 } DSPCLK_e;
0119
0120 typedef struct {
0121 uint16_t Freq;
0122 uint16_t Vid;
0123 } DisplayClockTable_t;
0124
0125 typedef struct {
0126
0127 uint16_t SocketPowerLimit;
0128 uint16_t TdcLimit;
0129 uint16_t EdcLimit;
0130 uint16_t TedgeLimit;
0131 uint16_t ThotspotLimit;
0132 uint16_t ThbmLimit;
0133 uint16_t Tvr_socLimit;
0134 uint16_t Tvr_memLimit;
0135 uint16_t Tliquid1Limit;
0136 uint16_t Tliquid2Limit;
0137 uint16_t TplxLimit;
0138 uint16_t LoadLineResistance;
0139 uint32_t FitLimit;
0140
0141
0142 uint8_t Liquid1_I2C_address;
0143 uint8_t Liquid2_I2C_address;
0144 uint8_t Vr_I2C_address;
0145 uint8_t Plx_I2C_address;
0146
0147 uint8_t GeminiMode;
0148 uint8_t spare17[3];
0149 uint32_t GeminiApertureHigh;
0150 uint32_t GeminiApertureLow;
0151
0152 uint8_t Liquid_I2C_LineSCL;
0153 uint8_t Liquid_I2C_LineSDA;
0154 uint8_t Vr_I2C_LineSCL;
0155 uint8_t Vr_I2C_LineSDA;
0156 uint8_t Plx_I2C_LineSCL;
0157 uint8_t Plx_I2C_LineSDA;
0158 uint8_t paddingx[2];
0159
0160
0161 uint8_t UlvOffsetVid;
0162 uint8_t UlvSmnclkDid;
0163 uint8_t UlvMp1clkDid;
0164 uint8_t UlvGfxclkBypass;
0165
0166
0167 uint8_t SocVid[NUM_EVV_VOLTAGE_LEVELS];
0168
0169
0170 uint8_t MinVoltageVid;
0171 uint8_t MaxVoltageVid;
0172 uint8_t MaxVidStep;
0173 uint8_t padding8;
0174
0175 uint8_t UlvPhaseSheddingPsi0;
0176 uint8_t UlvPhaseSheddingPsi1;
0177 uint8_t padding8_2[2];
0178
0179
0180 PllSetting_t GfxclkLevel [NUM_GFXCLK_DPM_LEVELS];
0181
0182 uint8_t SocclkDid [NUM_SOCCLK_DPM_LEVELS];
0183 uint8_t SocDpmVoltageIndex [NUM_SOCCLK_DPM_LEVELS];
0184
0185 uint8_t VclkDid [NUM_UVD_DPM_LEVELS];
0186 uint8_t DclkDid [NUM_UVD_DPM_LEVELS];
0187 uint8_t UvdDpmVoltageIndex [NUM_UVD_DPM_LEVELS];
0188
0189 uint8_t EclkDid [NUM_VCE_DPM_LEVELS];
0190 uint8_t VceDpmVoltageIndex [NUM_VCE_DPM_LEVELS];
0191
0192 uint8_t Mp0clkDid [NUM_MP0CLK_DPM_LEVELS];
0193 uint8_t Mp0DpmVoltageIndex [NUM_MP0CLK_DPM_LEVELS];
0194
0195 DisplayClockTable_t DisplayClockTable[DSPCLK_COUNT][NUM_DSPCLK_LEVELS];
0196 QuadraticInt_t DisplayClock2Gfxclk[DSPCLK_COUNT];
0197
0198 uint8_t GfxDpmVoltageMode;
0199 uint8_t SocDpmVoltageMode;
0200 uint8_t UclkDpmVoltageMode;
0201 uint8_t UvdDpmVoltageMode;
0202
0203 uint8_t VceDpmVoltageMode;
0204 uint8_t Mp0DpmVoltageMode;
0205 uint8_t DisplayDpmVoltageMode;
0206 uint8_t padding8_3;
0207
0208 uint16_t GfxclkSlewRate;
0209 uint16_t padding;
0210
0211 uint32_t LowGfxclkInterruptThreshold;
0212
0213
0214 uint8_t GfxclkAverageAlpha;
0215 uint8_t SocclkAverageAlpha;
0216 uint8_t UclkAverageAlpha;
0217 uint8_t GfxActivityAverageAlpha;
0218
0219
0220 uint8_t MemVid[NUM_UCLK_DPM_LEVELS];
0221 PllSetting_t UclkLevel[NUM_UCLK_DPM_LEVELS];
0222 uint8_t MemSocVoltageIndex[NUM_UCLK_DPM_LEVELS];
0223 uint8_t LowestUclkReservedForUlv;
0224 uint8_t paddingUclk[3];
0225 uint16_t NumMemoryChannels;
0226 uint16_t MemoryChannelWidth;
0227
0228
0229 uint8_t CksEnable[NUM_GFXCLK_DPM_LEVELS];
0230 uint8_t CksVidOffset[NUM_GFXCLK_DPM_LEVELS];
0231
0232
0233 uint8_t PspLevelMap[NUM_PSP_LEVEL_MAP];
0234
0235
0236 uint8_t PcieGenSpeed[NUM_LINK_LEVELS];
0237 uint8_t PcieLaneCount[NUM_LINK_LEVELS];
0238 uint8_t LclkDid[NUM_LINK_LEVELS];
0239 uint8_t paddingLinkDpm[2];
0240
0241
0242 uint16_t FanStopTemp;
0243 uint16_t FanStartTemp;
0244
0245 uint16_t FanGainEdge;
0246 uint16_t FanGainHotspot;
0247 uint16_t FanGainLiquid;
0248 uint16_t FanGainVrVddc;
0249 uint16_t FanGainVrMvdd;
0250 uint16_t FanGainPlx;
0251 uint16_t FanGainHbm;
0252 uint16_t FanPwmMin;
0253 uint16_t FanAcousticLimitRpm;
0254 uint16_t FanThrottlingRpm;
0255 uint16_t FanMaximumRpm;
0256 uint16_t FanTargetTemperature;
0257 uint16_t FanTargetGfxclk;
0258 uint8_t FanZeroRpmEnable;
0259 uint8_t FanSpare;
0260
0261
0262 int16_t FuzzyFan_ErrorSetDelta;
0263 int16_t FuzzyFan_ErrorRateSetDelta;
0264 int16_t FuzzyFan_PwmSetDelta;
0265 uint16_t FuzzyFan_Reserved;
0266
0267
0268 uint8_t AcDcGpio;
0269 uint8_t AcDcPolarity;
0270 uint8_t VR0HotGpio;
0271 uint8_t VR0HotPolarity;
0272 uint8_t VR1HotGpio;
0273 uint8_t VR1HotPolarity;
0274 uint8_t Padding1;
0275 uint8_t Padding2;
0276
0277
0278 uint8_t LedPin0;
0279 uint8_t LedPin1;
0280 uint8_t LedPin2;
0281 uint8_t padding8_4;
0282
0283
0284 uint8_t OverrideBtcGbCksOn;
0285 uint8_t OverrideAvfsGbCksOn;
0286 uint8_t PaddingAvfs8[2];
0287
0288 GbVdroopTable_t BtcGbVdroopTableCksOn;
0289 GbVdroopTable_t BtcGbVdroopTableCksOff;
0290
0291 QuadraticInt_t AvfsGbCksOn;
0292 QuadraticInt_t AvfsGbCksOff;
0293
0294 uint8_t StaticVoltageOffsetVid[NUM_GFXCLK_DPM_LEVELS];
0295
0296
0297 uint32_t AConstant[3];
0298 uint16_t DC_tol_sigma;
0299 uint16_t Platform_mean;
0300 uint16_t Platform_sigma;
0301 uint16_t PSM_Age_CompFactor;
0302
0303 uint32_t DpmLevelPowerDelta;
0304
0305 uint8_t EnableBoostState;
0306 uint8_t AConstant_Shift;
0307 uint8_t DC_tol_sigma_Shift;
0308 uint8_t PSM_Age_CompFactor_Shift;
0309
0310 uint16_t BoostStartTemperature;
0311 uint16_t BoostStopTemperature;
0312
0313 PllSetting_t GfxBoostState;
0314
0315 uint8_t AcgEnable[NUM_GFXCLK_DPM_LEVELS];
0316 GbVdroopTable_t AcgBtcGbVdroopTable;
0317 QuadraticInt_t AcgAvfsGb;
0318
0319
0320 uint32_t AcgFreqTable[NUM_GFXCLK_DPM_LEVELS];
0321
0322
0323 uint32_t MmHubPadding[3];
0324
0325 } PPTable_t;
0326
0327 typedef struct {
0328 uint16_t MinClock;
0329 uint16_t MaxClock;
0330 uint16_t MinUclk;
0331 uint16_t MaxUclk;
0332
0333 uint8_t WmSetting;
0334 uint8_t Padding[3];
0335 } WatermarkRowGeneric_t;
0336
0337 #define NUM_WM_RANGES 4
0338
0339 typedef enum {
0340 WM_SOCCLK = 0,
0341 WM_DCEFCLK,
0342 WM_COUNT,
0343 } WM_CLOCK_e;
0344
0345 typedef struct {
0346
0347 WatermarkRowGeneric_t WatermarkRow[WM_COUNT][NUM_WM_RANGES];
0348
0349 uint32_t MmHubPadding[7];
0350 } Watermarks_t;
0351
0352 #ifdef PPTABLE_V10_SMU_VERSION
0353 typedef struct {
0354 float AvfsGbCksOn[NUM_GFXCLK_DPM_LEVELS];
0355 float AcBtcGbCksOn[NUM_GFXCLK_DPM_LEVELS];
0356 float AvfsGbCksOff[NUM_GFXCLK_DPM_LEVELS];
0357 float AcBtcGbCksOff[NUM_GFXCLK_DPM_LEVELS];
0358 float DcBtcGb;
0359
0360 uint32_t MmHubPadding[7];
0361 } AvfsTable_t;
0362 #else
0363 typedef struct {
0364 uint32_t AvfsGbCksOn[NUM_GFXCLK_DPM_LEVELS];
0365 uint32_t AcBtcGbCksOn[NUM_GFXCLK_DPM_LEVELS];
0366 uint32_t AvfsGbCksOff[NUM_GFXCLK_DPM_LEVELS];
0367 uint32_t AcBtcGbCksOff[NUM_GFXCLK_DPM_LEVELS];
0368 uint32_t DcBtcGb;
0369
0370 uint32_t MmHubPadding[7];
0371 } AvfsTable_t;
0372 #endif
0373
0374 typedef struct {
0375 uint16_t avgPsmCount[30];
0376 uint16_t minPsmCount[30];
0377 float avgPsmVoltage[30];
0378 float minPsmVoltage[30];
0379
0380 uint32_t MmHubPadding[7];
0381 } AvfsDebugTable_t;
0382
0383 typedef struct {
0384 uint8_t AvfsEn;
0385 uint8_t AvfsVersion;
0386 uint8_t Padding[2];
0387
0388 int32_t VFT0_m1;
0389 int32_t VFT0_m2;
0390 int32_t VFT0_b;
0391
0392 int32_t VFT1_m1;
0393 int32_t VFT1_m2;
0394 int32_t VFT1_b;
0395
0396 int32_t VFT2_m1;
0397 int32_t VFT2_m2;
0398 int32_t VFT2_b;
0399
0400 int32_t AvfsGb0_m1;
0401 int32_t AvfsGb0_m2;
0402 int32_t AvfsGb0_b;
0403
0404 int32_t AcBtcGb_m1;
0405 int32_t AcBtcGb_m2;
0406 int32_t AcBtcGb_b;
0407
0408 uint32_t AvfsTempCold;
0409 uint32_t AvfsTempMid;
0410 uint32_t AvfsTempHot;
0411
0412 uint32_t InversionVoltage;
0413
0414 int32_t P2V_m1;
0415 int32_t P2V_m2;
0416 int32_t P2V_b;
0417
0418 uint32_t P2VCharzFreq;
0419
0420 uint32_t EnabledAvfsModules;
0421
0422 uint32_t MmHubPadding[7];
0423 } AvfsFuseOverride_t;
0424
0425
0426
0427
0428
0429 #define TABLE_PPTABLE 0
0430 #define TABLE_WATERMARKS 1
0431 #define TABLE_AVFS 2
0432 #define TABLE_AVFS_PSM_DEBUG 3
0433 #define TABLE_AVFS_FUSE_OVERRIDE 4
0434 #define TABLE_PMSTATUSLOG 5
0435 #define TABLE_COUNT 6
0436
0437
0438 #define UCLK_SWITCH_SLOW 0
0439 #define UCLK_SWITCH_FAST 1
0440
0441
0442 #define SQ_Enable_MASK 0x1
0443 #define SQ_IR_MASK 0x2
0444 #define SQ_PCC_MASK 0x4
0445 #define SQ_EDC_MASK 0x8
0446
0447 #define TCP_Enable_MASK 0x100
0448 #define TCP_IR_MASK 0x200
0449 #define TCP_PCC_MASK 0x400
0450 #define TCP_EDC_MASK 0x800
0451
0452 #define TD_Enable_MASK 0x10000
0453 #define TD_IR_MASK 0x20000
0454 #define TD_PCC_MASK 0x40000
0455 #define TD_EDC_MASK 0x80000
0456
0457 #define DB_Enable_MASK 0x1000000
0458 #define DB_IR_MASK 0x2000000
0459 #define DB_PCC_MASK 0x4000000
0460 #define DB_EDC_MASK 0x8000000
0461
0462 #define SQ_Enable_SHIFT 0
0463 #define SQ_IR_SHIFT 1
0464 #define SQ_PCC_SHIFT 2
0465 #define SQ_EDC_SHIFT 3
0466
0467 #define TCP_Enable_SHIFT 8
0468 #define TCP_IR_SHIFT 9
0469 #define TCP_PCC_SHIFT 10
0470 #define TCP_EDC_SHIFT 11
0471
0472 #define TD_Enable_SHIFT 16
0473 #define TD_IR_SHIFT 17
0474 #define TD_PCC_SHIFT 18
0475 #define TD_EDC_SHIFT 19
0476
0477 #define DB_Enable_SHIFT 24
0478 #define DB_IR_SHIFT 25
0479 #define DB_PCC_SHIFT 26
0480 #define DB_EDC_SHIFT 27
0481
0482 #define REMOVE_FMAX_MARGIN_BIT 0x0
0483 #define REMOVE_DCTOL_MARGIN_BIT 0x1
0484 #define REMOVE_PLATFORM_MARGIN_BIT 0x2
0485
0486 #endif