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