1*837d542aSEvan Quan /* 2*837d542aSEvan Quan * Copyright 2013 Advanced Micro Devices, Inc. 3*837d542aSEvan Quan * 4*837d542aSEvan Quan * Permission is hereby granted, free of charge, to any person obtaining a 5*837d542aSEvan Quan * copy of this software and associated documentation files (the "Software"), 6*837d542aSEvan Quan * to deal in the Software without restriction, including without limitation 7*837d542aSEvan Quan * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8*837d542aSEvan Quan * and/or sell copies of the Software, and to permit persons to whom the 9*837d542aSEvan Quan * Software is furnished to do so, subject to the following conditions: 10*837d542aSEvan Quan * 11*837d542aSEvan Quan * The above copyright notice and this permission notice shall be included in 12*837d542aSEvan Quan * all copies or substantial portions of the Software. 13*837d542aSEvan Quan * 14*837d542aSEvan Quan * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15*837d542aSEvan Quan * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16*837d542aSEvan Quan * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17*837d542aSEvan Quan * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18*837d542aSEvan Quan * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19*837d542aSEvan Quan * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20*837d542aSEvan Quan * OTHER DEALINGS IN THE SOFTWARE. 21*837d542aSEvan Quan * 22*837d542aSEvan Quan */ 23*837d542aSEvan Quan 24*837d542aSEvan Quan #ifndef SMU7_DISCRETE_H 25*837d542aSEvan Quan #define SMU7_DISCRETE_H 26*837d542aSEvan Quan 27*837d542aSEvan Quan #include "smu7.h" 28*837d542aSEvan Quan 29*837d542aSEvan Quan #pragma pack(push, 1) 30*837d542aSEvan Quan 31*837d542aSEvan Quan #define SMU7_DTE_ITERATIONS 5 32*837d542aSEvan Quan #define SMU7_DTE_SOURCES 3 33*837d542aSEvan Quan #define SMU7_DTE_SINKS 1 34*837d542aSEvan Quan #define SMU7_NUM_CPU_TES 0 35*837d542aSEvan Quan #define SMU7_NUM_GPU_TES 1 36*837d542aSEvan Quan #define SMU7_NUM_NON_TES 2 37*837d542aSEvan Quan 38*837d542aSEvan Quan struct SMU7_SoftRegisters 39*837d542aSEvan Quan { 40*837d542aSEvan Quan uint32_t RefClockFrequency; 41*837d542aSEvan Quan uint32_t PmTimerP; 42*837d542aSEvan Quan uint32_t FeatureEnables; 43*837d542aSEvan Quan uint32_t PreVBlankGap; 44*837d542aSEvan Quan uint32_t VBlankTimeout; 45*837d542aSEvan Quan uint32_t TrainTimeGap; 46*837d542aSEvan Quan 47*837d542aSEvan Quan uint32_t MvddSwitchTime; 48*837d542aSEvan Quan uint32_t LongestAcpiTrainTime; 49*837d542aSEvan Quan uint32_t AcpiDelay; 50*837d542aSEvan Quan uint32_t G5TrainTime; 51*837d542aSEvan Quan uint32_t DelayMpllPwron; 52*837d542aSEvan Quan uint32_t VoltageChangeTimeout; 53*837d542aSEvan Quan uint32_t HandshakeDisables; 54*837d542aSEvan Quan 55*837d542aSEvan Quan uint8_t DisplayPhy1Config; 56*837d542aSEvan Quan uint8_t DisplayPhy2Config; 57*837d542aSEvan Quan uint8_t DisplayPhy3Config; 58*837d542aSEvan Quan uint8_t DisplayPhy4Config; 59*837d542aSEvan Quan 60*837d542aSEvan Quan uint8_t DisplayPhy5Config; 61*837d542aSEvan Quan uint8_t DisplayPhy6Config; 62*837d542aSEvan Quan uint8_t DisplayPhy7Config; 63*837d542aSEvan Quan uint8_t DisplayPhy8Config; 64*837d542aSEvan Quan 65*837d542aSEvan Quan uint32_t AverageGraphicsA; 66*837d542aSEvan Quan uint32_t AverageMemoryA; 67*837d542aSEvan Quan uint32_t AverageGioA; 68*837d542aSEvan Quan 69*837d542aSEvan Quan uint8_t SClkDpmEnabledLevels; 70*837d542aSEvan Quan uint8_t MClkDpmEnabledLevels; 71*837d542aSEvan Quan uint8_t LClkDpmEnabledLevels; 72*837d542aSEvan Quan uint8_t PCIeDpmEnabledLevels; 73*837d542aSEvan Quan 74*837d542aSEvan Quan uint8_t UVDDpmEnabledLevels; 75*837d542aSEvan Quan uint8_t SAMUDpmEnabledLevels; 76*837d542aSEvan Quan uint8_t ACPDpmEnabledLevels; 77*837d542aSEvan Quan uint8_t VCEDpmEnabledLevels; 78*837d542aSEvan Quan 79*837d542aSEvan Quan uint32_t DRAM_LOG_ADDR_H; 80*837d542aSEvan Quan uint32_t DRAM_LOG_ADDR_L; 81*837d542aSEvan Quan uint32_t DRAM_LOG_PHY_ADDR_H; 82*837d542aSEvan Quan uint32_t DRAM_LOG_PHY_ADDR_L; 83*837d542aSEvan Quan uint32_t DRAM_LOG_BUFF_SIZE; 84*837d542aSEvan Quan uint32_t UlvEnterC; 85*837d542aSEvan Quan uint32_t UlvTime; 86*837d542aSEvan Quan uint32_t Reserved[3]; 87*837d542aSEvan Quan 88*837d542aSEvan Quan }; 89*837d542aSEvan Quan 90*837d542aSEvan Quan typedef struct SMU7_SoftRegisters SMU7_SoftRegisters; 91*837d542aSEvan Quan 92*837d542aSEvan Quan struct SMU7_Discrete_VoltageLevel 93*837d542aSEvan Quan { 94*837d542aSEvan Quan uint16_t Voltage; 95*837d542aSEvan Quan uint16_t StdVoltageHiSidd; 96*837d542aSEvan Quan uint16_t StdVoltageLoSidd; 97*837d542aSEvan Quan uint8_t Smio; 98*837d542aSEvan Quan uint8_t padding; 99*837d542aSEvan Quan }; 100*837d542aSEvan Quan 101*837d542aSEvan Quan typedef struct SMU7_Discrete_VoltageLevel SMU7_Discrete_VoltageLevel; 102*837d542aSEvan Quan 103*837d542aSEvan Quan struct SMU7_Discrete_GraphicsLevel 104*837d542aSEvan Quan { 105*837d542aSEvan Quan uint32_t Flags; 106*837d542aSEvan Quan uint32_t MinVddc; 107*837d542aSEvan Quan uint32_t MinVddcPhases; 108*837d542aSEvan Quan 109*837d542aSEvan Quan uint32_t SclkFrequency; 110*837d542aSEvan Quan 111*837d542aSEvan Quan uint8_t padding1[2]; 112*837d542aSEvan Quan uint16_t ActivityLevel; 113*837d542aSEvan Quan 114*837d542aSEvan Quan uint32_t CgSpllFuncCntl3; 115*837d542aSEvan Quan uint32_t CgSpllFuncCntl4; 116*837d542aSEvan Quan uint32_t SpllSpreadSpectrum; 117*837d542aSEvan Quan uint32_t SpllSpreadSpectrum2; 118*837d542aSEvan Quan uint32_t CcPwrDynRm; 119*837d542aSEvan Quan uint32_t CcPwrDynRm1; 120*837d542aSEvan Quan uint8_t SclkDid; 121*837d542aSEvan Quan uint8_t DisplayWatermark; 122*837d542aSEvan Quan uint8_t EnabledForActivity; 123*837d542aSEvan Quan uint8_t EnabledForThrottle; 124*837d542aSEvan Quan uint8_t UpH; 125*837d542aSEvan Quan uint8_t DownH; 126*837d542aSEvan Quan uint8_t VoltageDownH; 127*837d542aSEvan Quan uint8_t PowerThrottle; 128*837d542aSEvan Quan uint8_t DeepSleepDivId; 129*837d542aSEvan Quan uint8_t padding[3]; 130*837d542aSEvan Quan }; 131*837d542aSEvan Quan 132*837d542aSEvan Quan typedef struct SMU7_Discrete_GraphicsLevel SMU7_Discrete_GraphicsLevel; 133*837d542aSEvan Quan 134*837d542aSEvan Quan struct SMU7_Discrete_ACPILevel 135*837d542aSEvan Quan { 136*837d542aSEvan Quan uint32_t Flags; 137*837d542aSEvan Quan uint32_t MinVddc; 138*837d542aSEvan Quan uint32_t MinVddcPhases; 139*837d542aSEvan Quan uint32_t SclkFrequency; 140*837d542aSEvan Quan uint8_t SclkDid; 141*837d542aSEvan Quan uint8_t DisplayWatermark; 142*837d542aSEvan Quan uint8_t DeepSleepDivId; 143*837d542aSEvan Quan uint8_t padding; 144*837d542aSEvan Quan uint32_t CgSpllFuncCntl; 145*837d542aSEvan Quan uint32_t CgSpllFuncCntl2; 146*837d542aSEvan Quan uint32_t CgSpllFuncCntl3; 147*837d542aSEvan Quan uint32_t CgSpllFuncCntl4; 148*837d542aSEvan Quan uint32_t SpllSpreadSpectrum; 149*837d542aSEvan Quan uint32_t SpllSpreadSpectrum2; 150*837d542aSEvan Quan uint32_t CcPwrDynRm; 151*837d542aSEvan Quan uint32_t CcPwrDynRm1; 152*837d542aSEvan Quan }; 153*837d542aSEvan Quan 154*837d542aSEvan Quan typedef struct SMU7_Discrete_ACPILevel SMU7_Discrete_ACPILevel; 155*837d542aSEvan Quan 156*837d542aSEvan Quan struct SMU7_Discrete_Ulv 157*837d542aSEvan Quan { 158*837d542aSEvan Quan uint32_t CcPwrDynRm; 159*837d542aSEvan Quan uint32_t CcPwrDynRm1; 160*837d542aSEvan Quan uint16_t VddcOffset; 161*837d542aSEvan Quan uint8_t VddcOffsetVid; 162*837d542aSEvan Quan uint8_t VddcPhase; 163*837d542aSEvan Quan uint32_t Reserved; 164*837d542aSEvan Quan }; 165*837d542aSEvan Quan 166*837d542aSEvan Quan typedef struct SMU7_Discrete_Ulv SMU7_Discrete_Ulv; 167*837d542aSEvan Quan 168*837d542aSEvan Quan struct SMU7_Discrete_MemoryLevel 169*837d542aSEvan Quan { 170*837d542aSEvan Quan uint32_t MinVddc; 171*837d542aSEvan Quan uint32_t MinVddcPhases; 172*837d542aSEvan Quan uint32_t MinVddci; 173*837d542aSEvan Quan uint32_t MinMvdd; 174*837d542aSEvan Quan 175*837d542aSEvan Quan uint32_t MclkFrequency; 176*837d542aSEvan Quan 177*837d542aSEvan Quan uint8_t EdcReadEnable; 178*837d542aSEvan Quan uint8_t EdcWriteEnable; 179*837d542aSEvan Quan uint8_t RttEnable; 180*837d542aSEvan Quan uint8_t StutterEnable; 181*837d542aSEvan Quan 182*837d542aSEvan Quan uint8_t StrobeEnable; 183*837d542aSEvan Quan uint8_t StrobeRatio; 184*837d542aSEvan Quan uint8_t EnabledForThrottle; 185*837d542aSEvan Quan uint8_t EnabledForActivity; 186*837d542aSEvan Quan 187*837d542aSEvan Quan uint8_t UpH; 188*837d542aSEvan Quan uint8_t DownH; 189*837d542aSEvan Quan uint8_t VoltageDownH; 190*837d542aSEvan Quan uint8_t padding; 191*837d542aSEvan Quan 192*837d542aSEvan Quan uint16_t ActivityLevel; 193*837d542aSEvan Quan uint8_t DisplayWatermark; 194*837d542aSEvan Quan uint8_t padding1; 195*837d542aSEvan Quan 196*837d542aSEvan Quan uint32_t MpllFuncCntl; 197*837d542aSEvan Quan uint32_t MpllFuncCntl_1; 198*837d542aSEvan Quan uint32_t MpllFuncCntl_2; 199*837d542aSEvan Quan uint32_t MpllAdFuncCntl; 200*837d542aSEvan Quan uint32_t MpllDqFuncCntl; 201*837d542aSEvan Quan uint32_t MclkPwrmgtCntl; 202*837d542aSEvan Quan uint32_t DllCntl; 203*837d542aSEvan Quan uint32_t MpllSs1; 204*837d542aSEvan Quan uint32_t MpllSs2; 205*837d542aSEvan Quan }; 206*837d542aSEvan Quan 207*837d542aSEvan Quan typedef struct SMU7_Discrete_MemoryLevel SMU7_Discrete_MemoryLevel; 208*837d542aSEvan Quan 209*837d542aSEvan Quan struct SMU7_Discrete_LinkLevel 210*837d542aSEvan Quan { 211*837d542aSEvan Quan uint8_t PcieGenSpeed; 212*837d542aSEvan Quan uint8_t PcieLaneCount; 213*837d542aSEvan Quan uint8_t EnabledForActivity; 214*837d542aSEvan Quan uint8_t Padding; 215*837d542aSEvan Quan uint32_t DownT; 216*837d542aSEvan Quan uint32_t UpT; 217*837d542aSEvan Quan uint32_t Reserved; 218*837d542aSEvan Quan }; 219*837d542aSEvan Quan 220*837d542aSEvan Quan typedef struct SMU7_Discrete_LinkLevel SMU7_Discrete_LinkLevel; 221*837d542aSEvan Quan 222*837d542aSEvan Quan 223*837d542aSEvan Quan struct SMU7_Discrete_MCArbDramTimingTableEntry 224*837d542aSEvan Quan { 225*837d542aSEvan Quan uint32_t McArbDramTiming; 226*837d542aSEvan Quan uint32_t McArbDramTiming2; 227*837d542aSEvan Quan uint8_t McArbBurstTime; 228*837d542aSEvan Quan uint8_t padding[3]; 229*837d542aSEvan Quan }; 230*837d542aSEvan Quan 231*837d542aSEvan Quan typedef struct SMU7_Discrete_MCArbDramTimingTableEntry SMU7_Discrete_MCArbDramTimingTableEntry; 232*837d542aSEvan Quan 233*837d542aSEvan Quan struct SMU7_Discrete_MCArbDramTimingTable 234*837d542aSEvan Quan { 235*837d542aSEvan Quan SMU7_Discrete_MCArbDramTimingTableEntry entries[SMU__NUM_SCLK_DPM_STATE][SMU__NUM_MCLK_DPM_LEVELS]; 236*837d542aSEvan Quan }; 237*837d542aSEvan Quan 238*837d542aSEvan Quan typedef struct SMU7_Discrete_MCArbDramTimingTable SMU7_Discrete_MCArbDramTimingTable; 239*837d542aSEvan Quan 240*837d542aSEvan Quan struct SMU7_Discrete_UvdLevel 241*837d542aSEvan Quan { 242*837d542aSEvan Quan uint32_t VclkFrequency; 243*837d542aSEvan Quan uint32_t DclkFrequency; 244*837d542aSEvan Quan uint16_t MinVddc; 245*837d542aSEvan Quan uint8_t MinVddcPhases; 246*837d542aSEvan Quan uint8_t VclkDivider; 247*837d542aSEvan Quan uint8_t DclkDivider; 248*837d542aSEvan Quan uint8_t padding[3]; 249*837d542aSEvan Quan }; 250*837d542aSEvan Quan 251*837d542aSEvan Quan typedef struct SMU7_Discrete_UvdLevel SMU7_Discrete_UvdLevel; 252*837d542aSEvan Quan 253*837d542aSEvan Quan struct SMU7_Discrete_ExtClkLevel 254*837d542aSEvan Quan { 255*837d542aSEvan Quan uint32_t Frequency; 256*837d542aSEvan Quan uint16_t MinVoltage; 257*837d542aSEvan Quan uint8_t MinPhases; 258*837d542aSEvan Quan uint8_t Divider; 259*837d542aSEvan Quan }; 260*837d542aSEvan Quan 261*837d542aSEvan Quan typedef struct SMU7_Discrete_ExtClkLevel SMU7_Discrete_ExtClkLevel; 262*837d542aSEvan Quan 263*837d542aSEvan Quan struct SMU7_Discrete_StateInfo 264*837d542aSEvan Quan { 265*837d542aSEvan Quan uint32_t SclkFrequency; 266*837d542aSEvan Quan uint32_t MclkFrequency; 267*837d542aSEvan Quan uint32_t VclkFrequency; 268*837d542aSEvan Quan uint32_t DclkFrequency; 269*837d542aSEvan Quan uint32_t SamclkFrequency; 270*837d542aSEvan Quan uint32_t AclkFrequency; 271*837d542aSEvan Quan uint32_t EclkFrequency; 272*837d542aSEvan Quan uint16_t MvddVoltage; 273*837d542aSEvan Quan uint16_t padding16; 274*837d542aSEvan Quan uint8_t DisplayWatermark; 275*837d542aSEvan Quan uint8_t McArbIndex; 276*837d542aSEvan Quan uint8_t McRegIndex; 277*837d542aSEvan Quan uint8_t SeqIndex; 278*837d542aSEvan Quan uint8_t SclkDid; 279*837d542aSEvan Quan int8_t SclkIndex; 280*837d542aSEvan Quan int8_t MclkIndex; 281*837d542aSEvan Quan uint8_t PCIeGen; 282*837d542aSEvan Quan 283*837d542aSEvan Quan }; 284*837d542aSEvan Quan 285*837d542aSEvan Quan typedef struct SMU7_Discrete_StateInfo SMU7_Discrete_StateInfo; 286*837d542aSEvan Quan 287*837d542aSEvan Quan 288*837d542aSEvan Quan struct SMU7_Discrete_DpmTable 289*837d542aSEvan Quan { 290*837d542aSEvan Quan SMU7_PIDController GraphicsPIDController; 291*837d542aSEvan Quan SMU7_PIDController MemoryPIDController; 292*837d542aSEvan Quan SMU7_PIDController LinkPIDController; 293*837d542aSEvan Quan 294*837d542aSEvan Quan uint32_t SystemFlags; 295*837d542aSEvan Quan 296*837d542aSEvan Quan 297*837d542aSEvan Quan uint32_t SmioMaskVddcVid; 298*837d542aSEvan Quan uint32_t SmioMaskVddcPhase; 299*837d542aSEvan Quan uint32_t SmioMaskVddciVid; 300*837d542aSEvan Quan uint32_t SmioMaskMvddVid; 301*837d542aSEvan Quan 302*837d542aSEvan Quan uint32_t VddcLevelCount; 303*837d542aSEvan Quan uint32_t VddciLevelCount; 304*837d542aSEvan Quan uint32_t MvddLevelCount; 305*837d542aSEvan Quan 306*837d542aSEvan Quan SMU7_Discrete_VoltageLevel VddcLevel [SMU7_MAX_LEVELS_VDDC]; 307*837d542aSEvan Quan // SMU7_Discrete_VoltageLevel VddcStandardReference [SMU7_MAX_LEVELS_VDDC]; 308*837d542aSEvan Quan SMU7_Discrete_VoltageLevel VddciLevel [SMU7_MAX_LEVELS_VDDCI]; 309*837d542aSEvan Quan SMU7_Discrete_VoltageLevel MvddLevel [SMU7_MAX_LEVELS_MVDD]; 310*837d542aSEvan Quan 311*837d542aSEvan Quan uint8_t GraphicsDpmLevelCount; 312*837d542aSEvan Quan uint8_t MemoryDpmLevelCount; 313*837d542aSEvan Quan uint8_t LinkLevelCount; 314*837d542aSEvan Quan uint8_t UvdLevelCount; 315*837d542aSEvan Quan uint8_t VceLevelCount; 316*837d542aSEvan Quan uint8_t AcpLevelCount; 317*837d542aSEvan Quan uint8_t SamuLevelCount; 318*837d542aSEvan Quan uint8_t MasterDeepSleepControl; 319*837d542aSEvan Quan uint32_t VRConfig; 320*837d542aSEvan Quan uint32_t Reserved[4]; 321*837d542aSEvan Quan // uint32_t SamuDefaultLevel; 322*837d542aSEvan Quan 323*837d542aSEvan Quan SMU7_Discrete_GraphicsLevel GraphicsLevel [SMU7_MAX_LEVELS_GRAPHICS]; 324*837d542aSEvan Quan SMU7_Discrete_MemoryLevel MemoryACPILevel; 325*837d542aSEvan Quan SMU7_Discrete_MemoryLevel MemoryLevel [SMU7_MAX_LEVELS_MEMORY]; 326*837d542aSEvan Quan SMU7_Discrete_LinkLevel LinkLevel [SMU7_MAX_LEVELS_LINK]; 327*837d542aSEvan Quan SMU7_Discrete_ACPILevel ACPILevel; 328*837d542aSEvan Quan SMU7_Discrete_UvdLevel UvdLevel [SMU7_MAX_LEVELS_UVD]; 329*837d542aSEvan Quan SMU7_Discrete_ExtClkLevel VceLevel [SMU7_MAX_LEVELS_VCE]; 330*837d542aSEvan Quan SMU7_Discrete_ExtClkLevel AcpLevel [SMU7_MAX_LEVELS_ACP]; 331*837d542aSEvan Quan SMU7_Discrete_ExtClkLevel SamuLevel [SMU7_MAX_LEVELS_SAMU]; 332*837d542aSEvan Quan SMU7_Discrete_Ulv Ulv; 333*837d542aSEvan Quan 334*837d542aSEvan Quan uint32_t SclkStepSize; 335*837d542aSEvan Quan uint32_t Smio [SMU7_MAX_ENTRIES_SMIO]; 336*837d542aSEvan Quan 337*837d542aSEvan Quan uint8_t UvdBootLevel; 338*837d542aSEvan Quan uint8_t VceBootLevel; 339*837d542aSEvan Quan uint8_t AcpBootLevel; 340*837d542aSEvan Quan uint8_t SamuBootLevel; 341*837d542aSEvan Quan 342*837d542aSEvan Quan uint8_t UVDInterval; 343*837d542aSEvan Quan uint8_t VCEInterval; 344*837d542aSEvan Quan uint8_t ACPInterval; 345*837d542aSEvan Quan uint8_t SAMUInterval; 346*837d542aSEvan Quan 347*837d542aSEvan Quan uint8_t GraphicsBootLevel; 348*837d542aSEvan Quan uint8_t GraphicsVoltageChangeEnable; 349*837d542aSEvan Quan uint8_t GraphicsThermThrottleEnable; 350*837d542aSEvan Quan uint8_t GraphicsInterval; 351*837d542aSEvan Quan 352*837d542aSEvan Quan uint8_t VoltageInterval; 353*837d542aSEvan Quan uint8_t ThermalInterval; 354*837d542aSEvan Quan uint16_t TemperatureLimitHigh; 355*837d542aSEvan Quan 356*837d542aSEvan Quan uint16_t TemperatureLimitLow; 357*837d542aSEvan Quan uint8_t MemoryBootLevel; 358*837d542aSEvan Quan uint8_t MemoryVoltageChangeEnable; 359*837d542aSEvan Quan 360*837d542aSEvan Quan uint8_t MemoryInterval; 361*837d542aSEvan Quan uint8_t MemoryThermThrottleEnable; 362*837d542aSEvan Quan uint16_t VddcVddciDelta; 363*837d542aSEvan Quan 364*837d542aSEvan Quan uint16_t VoltageResponseTime; 365*837d542aSEvan Quan uint16_t PhaseResponseTime; 366*837d542aSEvan Quan 367*837d542aSEvan Quan uint8_t PCIeBootLinkLevel; 368*837d542aSEvan Quan uint8_t PCIeGenInterval; 369*837d542aSEvan Quan uint8_t DTEInterval; 370*837d542aSEvan Quan uint8_t DTEMode; 371*837d542aSEvan Quan 372*837d542aSEvan Quan uint8_t SVI2Enable; 373*837d542aSEvan Quan uint8_t VRHotGpio; 374*837d542aSEvan Quan uint8_t AcDcGpio; 375*837d542aSEvan Quan uint8_t ThermGpio; 376*837d542aSEvan Quan 377*837d542aSEvan Quan uint16_t PPM_PkgPwrLimit; 378*837d542aSEvan Quan uint16_t PPM_TemperatureLimit; 379*837d542aSEvan Quan 380*837d542aSEvan Quan uint16_t DefaultTdp; 381*837d542aSEvan Quan uint16_t TargetTdp; 382*837d542aSEvan Quan 383*837d542aSEvan Quan uint16_t FpsHighT; 384*837d542aSEvan Quan uint16_t FpsLowT; 385*837d542aSEvan Quan 386*837d542aSEvan Quan uint16_t BAPMTI_R [SMU7_DTE_ITERATIONS][SMU7_DTE_SOURCES][SMU7_DTE_SINKS]; 387*837d542aSEvan Quan uint16_t BAPMTI_RC [SMU7_DTE_ITERATIONS][SMU7_DTE_SOURCES][SMU7_DTE_SINKS]; 388*837d542aSEvan Quan 389*837d542aSEvan Quan uint8_t DTEAmbientTempBase; 390*837d542aSEvan Quan uint8_t DTETjOffset; 391*837d542aSEvan Quan uint8_t GpuTjMax; 392*837d542aSEvan Quan uint8_t GpuTjHyst; 393*837d542aSEvan Quan 394*837d542aSEvan Quan uint16_t BootVddc; 395*837d542aSEvan Quan uint16_t BootVddci; 396*837d542aSEvan Quan 397*837d542aSEvan Quan uint16_t BootMVdd; 398*837d542aSEvan Quan uint16_t padding; 399*837d542aSEvan Quan 400*837d542aSEvan Quan uint32_t BAPM_TEMP_GRADIENT; 401*837d542aSEvan Quan 402*837d542aSEvan Quan uint32_t LowSclkInterruptT; 403*837d542aSEvan Quan }; 404*837d542aSEvan Quan 405*837d542aSEvan Quan typedef struct SMU7_Discrete_DpmTable SMU7_Discrete_DpmTable; 406*837d542aSEvan Quan 407*837d542aSEvan Quan #define SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE 16 408*837d542aSEvan Quan #define SMU7_DISCRETE_MC_REGISTER_ARRAY_SET_COUNT SMU7_MAX_LEVELS_MEMORY 409*837d542aSEvan Quan 410*837d542aSEvan Quan struct SMU7_Discrete_MCRegisterAddress 411*837d542aSEvan Quan { 412*837d542aSEvan Quan uint16_t s0; 413*837d542aSEvan Quan uint16_t s1; 414*837d542aSEvan Quan }; 415*837d542aSEvan Quan 416*837d542aSEvan Quan typedef struct SMU7_Discrete_MCRegisterAddress SMU7_Discrete_MCRegisterAddress; 417*837d542aSEvan Quan 418*837d542aSEvan Quan struct SMU7_Discrete_MCRegisterSet 419*837d542aSEvan Quan { 420*837d542aSEvan Quan uint32_t value[SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE]; 421*837d542aSEvan Quan }; 422*837d542aSEvan Quan 423*837d542aSEvan Quan typedef struct SMU7_Discrete_MCRegisterSet SMU7_Discrete_MCRegisterSet; 424*837d542aSEvan Quan 425*837d542aSEvan Quan struct SMU7_Discrete_MCRegisters 426*837d542aSEvan Quan { 427*837d542aSEvan Quan uint8_t last; 428*837d542aSEvan Quan uint8_t reserved[3]; 429*837d542aSEvan Quan SMU7_Discrete_MCRegisterAddress address[SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE]; 430*837d542aSEvan Quan SMU7_Discrete_MCRegisterSet data[SMU7_DISCRETE_MC_REGISTER_ARRAY_SET_COUNT]; 431*837d542aSEvan Quan }; 432*837d542aSEvan Quan 433*837d542aSEvan Quan typedef struct SMU7_Discrete_MCRegisters SMU7_Discrete_MCRegisters; 434*837d542aSEvan Quan 435*837d542aSEvan Quan struct SMU7_Discrete_FanTable 436*837d542aSEvan Quan { 437*837d542aSEvan Quan uint16_t FdoMode; 438*837d542aSEvan Quan int16_t TempMin; 439*837d542aSEvan Quan int16_t TempMed; 440*837d542aSEvan Quan int16_t TempMax; 441*837d542aSEvan Quan int16_t Slope1; 442*837d542aSEvan Quan int16_t Slope2; 443*837d542aSEvan Quan int16_t FdoMin; 444*837d542aSEvan Quan int16_t HystUp; 445*837d542aSEvan Quan int16_t HystDown; 446*837d542aSEvan Quan int16_t HystSlope; 447*837d542aSEvan Quan int16_t TempRespLim; 448*837d542aSEvan Quan int16_t TempCurr; 449*837d542aSEvan Quan int16_t SlopeCurr; 450*837d542aSEvan Quan int16_t PwmCurr; 451*837d542aSEvan Quan uint32_t RefreshPeriod; 452*837d542aSEvan Quan int16_t FdoMax; 453*837d542aSEvan Quan uint8_t TempSrc; 454*837d542aSEvan Quan int8_t Padding; 455*837d542aSEvan Quan }; 456*837d542aSEvan Quan 457*837d542aSEvan Quan typedef struct SMU7_Discrete_FanTable SMU7_Discrete_FanTable; 458*837d542aSEvan Quan 459*837d542aSEvan Quan 460*837d542aSEvan Quan struct SMU7_Discrete_PmFuses { 461*837d542aSEvan Quan // dw0-dw1 462*837d542aSEvan Quan uint8_t BapmVddCVidHiSidd[8]; 463*837d542aSEvan Quan 464*837d542aSEvan Quan // dw2-dw3 465*837d542aSEvan Quan uint8_t BapmVddCVidLoSidd[8]; 466*837d542aSEvan Quan 467*837d542aSEvan Quan // dw4-dw5 468*837d542aSEvan Quan uint8_t VddCVid[8]; 469*837d542aSEvan Quan 470*837d542aSEvan Quan // dw6 471*837d542aSEvan Quan uint8_t SviLoadLineEn; 472*837d542aSEvan Quan uint8_t SviLoadLineVddC; 473*837d542aSEvan Quan uint8_t SviLoadLineTrimVddC; 474*837d542aSEvan Quan uint8_t SviLoadLineOffsetVddC; 475*837d542aSEvan Quan 476*837d542aSEvan Quan // dw7 477*837d542aSEvan Quan uint16_t TDC_VDDC_PkgLimit; 478*837d542aSEvan Quan uint8_t TDC_VDDC_ThrottleReleaseLimitPerc; 479*837d542aSEvan Quan uint8_t TDC_MAWt; 480*837d542aSEvan Quan 481*837d542aSEvan Quan // dw8 482*837d542aSEvan Quan uint8_t TdcWaterfallCtl; 483*837d542aSEvan Quan uint8_t LPMLTemperatureMin; 484*837d542aSEvan Quan uint8_t LPMLTemperatureMax; 485*837d542aSEvan Quan uint8_t Reserved; 486*837d542aSEvan Quan 487*837d542aSEvan Quan // dw9-dw10 488*837d542aSEvan Quan uint8_t BapmVddCVidHiSidd2[8]; 489*837d542aSEvan Quan 490*837d542aSEvan Quan // dw11-dw12 491*837d542aSEvan Quan int16_t FuzzyFan_ErrorSetDelta; 492*837d542aSEvan Quan int16_t FuzzyFan_ErrorRateSetDelta; 493*837d542aSEvan Quan int16_t FuzzyFan_PwmSetDelta; 494*837d542aSEvan Quan uint16_t CalcMeasPowerBlend; 495*837d542aSEvan Quan 496*837d542aSEvan Quan // dw13-dw16 497*837d542aSEvan Quan uint8_t GnbLPML[16]; 498*837d542aSEvan Quan 499*837d542aSEvan Quan // dw17 500*837d542aSEvan Quan uint8_t GnbLPMLMaxVid; 501*837d542aSEvan Quan uint8_t GnbLPMLMinVid; 502*837d542aSEvan Quan uint8_t Reserved1[2]; 503*837d542aSEvan Quan 504*837d542aSEvan Quan // dw18 505*837d542aSEvan Quan uint16_t BapmVddCBaseLeakageHiSidd; 506*837d542aSEvan Quan uint16_t BapmVddCBaseLeakageLoSidd; 507*837d542aSEvan Quan }; 508*837d542aSEvan Quan 509*837d542aSEvan Quan typedef struct SMU7_Discrete_PmFuses SMU7_Discrete_PmFuses; 510*837d542aSEvan Quan 511*837d542aSEvan Quan 512*837d542aSEvan Quan #pragma pack(pop) 513*837d542aSEvan Quan 514*837d542aSEvan Quan #endif 515*837d542aSEvan Quan 516