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