1837d542aSEvan Quan /* 2837d542aSEvan Quan * Copyright 2016 Advanced Micro Devices, Inc. 3837d542aSEvan Quan * 4837d542aSEvan Quan * Permission is hereby granted, free of charge, to any person obtaining a 5837d542aSEvan Quan * copy of this software and associated documentation files (the "Software"), 6837d542aSEvan Quan * to deal in the Software without restriction, including without limitation 7837d542aSEvan Quan * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8837d542aSEvan Quan * and/or sell copies of the Software, and to permit persons to whom the 9837d542aSEvan Quan * Software is furnished to do so, subject to the following conditions: 10837d542aSEvan Quan * 11837d542aSEvan Quan * The above copyright notice and this permission notice shall be included in 12837d542aSEvan Quan * all copies or substantial portions of the Software. 13837d542aSEvan Quan * 14837d542aSEvan Quan * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15837d542aSEvan Quan * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16837d542aSEvan Quan * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17837d542aSEvan Quan * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18837d542aSEvan Quan * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19837d542aSEvan Quan * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20837d542aSEvan Quan * OTHER DEALINGS IN THE SOFTWARE. 21837d542aSEvan Quan * 22837d542aSEvan Quan */ 23837d542aSEvan Quan #ifndef SMU71_H 24837d542aSEvan Quan #define SMU71_H 25837d542aSEvan Quan 26837d542aSEvan Quan #if !defined(SMC_MICROCODE) 27837d542aSEvan Quan #pragma pack(push, 1) 28837d542aSEvan Quan #endif 29837d542aSEvan Quan 30837d542aSEvan Quan #define SMU__NUM_PCIE_DPM_LEVELS 8 31837d542aSEvan Quan #define SMU__NUM_SCLK_DPM_STATE 8 32837d542aSEvan Quan #define SMU__NUM_MCLK_DPM_LEVELS 4 33837d542aSEvan Quan #define SMU__VARIANT__ICELAND 1 34837d542aSEvan Quan #define SMU__DGPU_ONLY 1 35837d542aSEvan Quan #define SMU__DYNAMIC_MCARB_SETTINGS 1 36837d542aSEvan Quan 37837d542aSEvan Quan enum SID_OPTION { 38837d542aSEvan Quan SID_OPTION_HI, 39837d542aSEvan Quan SID_OPTION_LO, 40837d542aSEvan Quan SID_OPTION_COUNT 41837d542aSEvan Quan }; 42837d542aSEvan Quan 43837d542aSEvan Quan typedef struct { 44837d542aSEvan Quan uint32_t high; 45837d542aSEvan Quan uint32_t low; 46837d542aSEvan Quan } data_64_t; 47837d542aSEvan Quan 48837d542aSEvan Quan typedef struct { 49837d542aSEvan Quan data_64_t high; 50837d542aSEvan Quan data_64_t low; 51837d542aSEvan Quan } data_128_t; 52837d542aSEvan Quan 53837d542aSEvan Quan #define SMU7_CONTEXT_ID_SMC 1 54837d542aSEvan Quan #define SMU7_CONTEXT_ID_VBIOS 2 55837d542aSEvan Quan 56837d542aSEvan Quan #define SMU71_MAX_LEVELS_VDDC 8 57837d542aSEvan Quan #define SMU71_MAX_LEVELS_VDDCI 4 58837d542aSEvan Quan #define SMU71_MAX_LEVELS_MVDD 4 59837d542aSEvan Quan #define SMU71_MAX_LEVELS_VDDNB 8 60837d542aSEvan Quan 61837d542aSEvan Quan #define SMU71_MAX_LEVELS_GRAPHICS SMU__NUM_SCLK_DPM_STATE 62837d542aSEvan Quan #define SMU71_MAX_LEVELS_MEMORY SMU__NUM_MCLK_DPM_LEVELS 63837d542aSEvan Quan #define SMU71_MAX_LEVELS_GIO SMU__NUM_LCLK_DPM_LEVELS 64837d542aSEvan Quan #define SMU71_MAX_LEVELS_LINK SMU__NUM_PCIE_DPM_LEVELS 65837d542aSEvan Quan #define SMU71_MAX_ENTRIES_SMIO 32 66837d542aSEvan Quan 67837d542aSEvan Quan #define DPM_NO_LIMIT 0 68837d542aSEvan Quan #define DPM_NO_UP 1 69837d542aSEvan Quan #define DPM_GO_DOWN 2 70837d542aSEvan Quan #define DPM_GO_UP 3 71837d542aSEvan Quan 72837d542aSEvan Quan #define SMU7_FIRST_DPM_GRAPHICS_LEVEL 0 73837d542aSEvan Quan #define SMU7_FIRST_DPM_MEMORY_LEVEL 0 74837d542aSEvan Quan 75837d542aSEvan Quan #define GPIO_CLAMP_MODE_VRHOT 1 76837d542aSEvan Quan #define GPIO_CLAMP_MODE_THERM 2 77837d542aSEvan Quan #define GPIO_CLAMP_MODE_DC 4 78837d542aSEvan Quan 79837d542aSEvan Quan #define SCRATCH_B_TARG_PCIE_INDEX_SHIFT 0 80837d542aSEvan Quan #define SCRATCH_B_TARG_PCIE_INDEX_MASK (0x7<<SCRATCH_B_TARG_PCIE_INDEX_SHIFT) 81837d542aSEvan Quan #define SCRATCH_B_CURR_PCIE_INDEX_SHIFT 3 82837d542aSEvan Quan #define SCRATCH_B_CURR_PCIE_INDEX_MASK (0x7<<SCRATCH_B_CURR_PCIE_INDEX_SHIFT) 83837d542aSEvan Quan #define SCRATCH_B_TARG_UVD_INDEX_SHIFT 6 84837d542aSEvan Quan #define SCRATCH_B_TARG_UVD_INDEX_MASK (0x7<<SCRATCH_B_TARG_UVD_INDEX_SHIFT) 85837d542aSEvan Quan #define SCRATCH_B_CURR_UVD_INDEX_SHIFT 9 86837d542aSEvan Quan #define SCRATCH_B_CURR_UVD_INDEX_MASK (0x7<<SCRATCH_B_CURR_UVD_INDEX_SHIFT) 87837d542aSEvan Quan #define SCRATCH_B_TARG_VCE_INDEX_SHIFT 12 88837d542aSEvan Quan #define SCRATCH_B_TARG_VCE_INDEX_MASK (0x7<<SCRATCH_B_TARG_VCE_INDEX_SHIFT) 89837d542aSEvan Quan #define SCRATCH_B_CURR_VCE_INDEX_SHIFT 15 90837d542aSEvan Quan #define SCRATCH_B_CURR_VCE_INDEX_MASK (0x7<<SCRATCH_B_CURR_VCE_INDEX_SHIFT) 91837d542aSEvan Quan #define SCRATCH_B_TARG_ACP_INDEX_SHIFT 18 92837d542aSEvan Quan #define SCRATCH_B_TARG_ACP_INDEX_MASK (0x7<<SCRATCH_B_TARG_ACP_INDEX_SHIFT) 93837d542aSEvan Quan #define SCRATCH_B_CURR_ACP_INDEX_SHIFT 21 94837d542aSEvan Quan #define SCRATCH_B_CURR_ACP_INDEX_MASK (0x7<<SCRATCH_B_CURR_ACP_INDEX_SHIFT) 95837d542aSEvan Quan #define SCRATCH_B_TARG_SAMU_INDEX_SHIFT 24 96837d542aSEvan Quan #define SCRATCH_B_TARG_SAMU_INDEX_MASK (0x7<<SCRATCH_B_TARG_SAMU_INDEX_SHIFT) 97837d542aSEvan Quan #define SCRATCH_B_CURR_SAMU_INDEX_SHIFT 27 98837d542aSEvan Quan #define SCRATCH_B_CURR_SAMU_INDEX_MASK (0x7<<SCRATCH_B_CURR_SAMU_INDEX_SHIFT) 99837d542aSEvan Quan 100837d542aSEvan Quan 101837d542aSEvan Quan #if defined SMU__DGPU_ONLY 102837d542aSEvan Quan #define SMU71_DTE_ITERATIONS 5 103837d542aSEvan Quan #define SMU71_DTE_SOURCES 3 104837d542aSEvan Quan #define SMU71_DTE_SINKS 1 105837d542aSEvan Quan #define SMU71_NUM_CPU_TES 0 106837d542aSEvan Quan #define SMU71_NUM_GPU_TES 1 107837d542aSEvan Quan #define SMU71_NUM_NON_TES 2 108837d542aSEvan Quan 109837d542aSEvan Quan #endif 110837d542aSEvan Quan 111837d542aSEvan Quan #if defined SMU__FUSION_ONLY 112837d542aSEvan Quan #define SMU7_DTE_ITERATIONS 5 113837d542aSEvan Quan #define SMU7_DTE_SOURCES 5 114837d542aSEvan Quan #define SMU7_DTE_SINKS 3 115837d542aSEvan Quan #define SMU7_NUM_CPU_TES 2 116837d542aSEvan Quan #define SMU7_NUM_GPU_TES 1 117837d542aSEvan Quan #define SMU7_NUM_NON_TES 2 118837d542aSEvan Quan 119837d542aSEvan Quan #endif 120837d542aSEvan Quan 121*d12d9229SRan Sun struct SMU71_PIDController { 122837d542aSEvan Quan uint32_t Ki; 123837d542aSEvan Quan int32_t LFWindupUpperLim; 124837d542aSEvan Quan int32_t LFWindupLowerLim; 125837d542aSEvan Quan uint32_t StatePrecision; 126837d542aSEvan Quan uint32_t LfPrecision; 127837d542aSEvan Quan uint32_t LfOffset; 128837d542aSEvan Quan uint32_t MaxState; 129837d542aSEvan Quan uint32_t MaxLfFraction; 130837d542aSEvan Quan uint32_t StateShift; 131837d542aSEvan Quan }; 132837d542aSEvan Quan 133837d542aSEvan Quan typedef struct SMU71_PIDController SMU71_PIDController; 134837d542aSEvan Quan 135*d12d9229SRan Sun struct SMU7_LocalDpmScoreboard { 136837d542aSEvan Quan uint32_t PercentageBusy; 137837d542aSEvan Quan 138837d542aSEvan Quan int32_t PIDError; 139837d542aSEvan Quan int32_t PIDIntegral; 140837d542aSEvan Quan int32_t PIDOutput; 141837d542aSEvan Quan 142837d542aSEvan Quan uint32_t SigmaDeltaAccum; 143837d542aSEvan Quan uint32_t SigmaDeltaOutput; 144837d542aSEvan Quan uint32_t SigmaDeltaLevel; 145837d542aSEvan Quan 146837d542aSEvan Quan uint32_t UtilizationSetpoint; 147837d542aSEvan Quan 148837d542aSEvan Quan uint8_t TdpClampMode; 149837d542aSEvan Quan uint8_t TdcClampMode; 150837d542aSEvan Quan uint8_t ThermClampMode; 151837d542aSEvan Quan uint8_t VoltageBusy; 152837d542aSEvan Quan 153837d542aSEvan Quan int8_t CurrLevel; 154837d542aSEvan Quan int8_t TargLevel; 155837d542aSEvan Quan uint8_t LevelChangeInProgress; 156837d542aSEvan Quan uint8_t UpHyst; 157837d542aSEvan Quan 158837d542aSEvan Quan uint8_t DownHyst; 159837d542aSEvan Quan uint8_t VoltageDownHyst; 160837d542aSEvan Quan uint8_t DpmEnable; 161837d542aSEvan Quan uint8_t DpmRunning; 162837d542aSEvan Quan 163837d542aSEvan Quan uint8_t DpmForce; 164837d542aSEvan Quan uint8_t DpmForceLevel; 165837d542aSEvan Quan uint8_t DisplayWatermark; 166837d542aSEvan Quan uint8_t McArbIndex; 167837d542aSEvan Quan 168837d542aSEvan Quan uint32_t MinimumPerfSclk; 169837d542aSEvan Quan 170837d542aSEvan Quan uint8_t AcpiReq; 171837d542aSEvan Quan uint8_t AcpiAck; 172837d542aSEvan Quan uint8_t GfxClkSlow; 173837d542aSEvan Quan uint8_t GpioClampMode; 174837d542aSEvan Quan 175837d542aSEvan Quan uint8_t FpsFilterWeight; 176837d542aSEvan Quan uint8_t EnabledLevelsChange; 177837d542aSEvan Quan uint8_t DteClampMode; 178837d542aSEvan Quan uint8_t FpsClampMode; 179837d542aSEvan Quan 180837d542aSEvan Quan uint16_t LevelResidencyCounters[SMU71_MAX_LEVELS_GRAPHICS]; 181837d542aSEvan Quan uint16_t LevelSwitchCounters[SMU71_MAX_LEVELS_GRAPHICS]; 182837d542aSEvan Quan 183837d542aSEvan Quan void (*TargetStateCalculator)(uint8_t); 184837d542aSEvan Quan void (*SavedTargetStateCalculator)(uint8_t); 185837d542aSEvan Quan 186837d542aSEvan Quan uint16_t AutoDpmInterval; 187837d542aSEvan Quan uint16_t AutoDpmRange; 188837d542aSEvan Quan 189837d542aSEvan Quan uint8_t FpsEnabled; 190837d542aSEvan Quan uint8_t MaxPerfLevel; 191837d542aSEvan Quan uint8_t AllowLowClkInterruptToHost; 192837d542aSEvan Quan uint8_t FpsRunning; 193837d542aSEvan Quan 194837d542aSEvan Quan uint32_t MaxAllowedFrequency; 195837d542aSEvan Quan }; 196837d542aSEvan Quan 197837d542aSEvan Quan typedef struct SMU7_LocalDpmScoreboard SMU7_LocalDpmScoreboard; 198837d542aSEvan Quan 199837d542aSEvan Quan #define SMU7_MAX_VOLTAGE_CLIENTS 12 200837d542aSEvan Quan 201*d12d9229SRan Sun struct SMU7_VoltageScoreboard { 202837d542aSEvan Quan uint16_t CurrentVoltage; 203837d542aSEvan Quan uint16_t HighestVoltage; 204837d542aSEvan Quan uint16_t MaxVid; 205837d542aSEvan Quan uint8_t HighestVidOffset; 206837d542aSEvan Quan uint8_t CurrentVidOffset; 207837d542aSEvan Quan #if defined (SMU__DGPU_ONLY) 208837d542aSEvan Quan uint8_t CurrentPhases; 209837d542aSEvan Quan uint8_t HighestPhases; 210837d542aSEvan Quan #else 211837d542aSEvan Quan uint8_t AvsOffset; 212837d542aSEvan Quan uint8_t AvsOffsetApplied; 213837d542aSEvan Quan #endif 214837d542aSEvan Quan uint8_t ControllerBusy; 215837d542aSEvan Quan uint8_t CurrentVid; 216837d542aSEvan Quan uint16_t RequestedVoltage[SMU7_MAX_VOLTAGE_CLIENTS]; 217837d542aSEvan Quan #if defined (SMU__DGPU_ONLY) 218837d542aSEvan Quan uint8_t RequestedPhases[SMU7_MAX_VOLTAGE_CLIENTS]; 219837d542aSEvan Quan #endif 220837d542aSEvan Quan uint8_t EnabledRequest[SMU7_MAX_VOLTAGE_CLIENTS]; 221837d542aSEvan Quan uint8_t TargetIndex; 222837d542aSEvan Quan uint8_t Delay; 223837d542aSEvan Quan uint8_t ControllerEnable; 224837d542aSEvan Quan uint8_t ControllerRunning; 225837d542aSEvan Quan uint16_t CurrentStdVoltageHiSidd; 226837d542aSEvan Quan uint16_t CurrentStdVoltageLoSidd; 227837d542aSEvan Quan #if defined (SMU__DGPU_ONLY) 228837d542aSEvan Quan uint16_t RequestedVddci; 229837d542aSEvan Quan uint16_t CurrentVddci; 230837d542aSEvan Quan uint16_t HighestVddci; 231837d542aSEvan Quan uint8_t CurrentVddciVid; 232837d542aSEvan Quan uint8_t TargetVddciIndex; 233837d542aSEvan Quan #endif 234837d542aSEvan Quan }; 235837d542aSEvan Quan 236837d542aSEvan Quan typedef struct SMU7_VoltageScoreboard SMU7_VoltageScoreboard; 237837d542aSEvan Quan 238837d542aSEvan Quan // ------------------------------------------------------------------------------------------------------------------------- 239837d542aSEvan Quan #define SMU7_MAX_PCIE_LINK_SPEEDS 3 /* 0:Gen1 1:Gen2 2:Gen3 */ 240837d542aSEvan Quan 241837d542aSEvan Quan struct SMU7_PCIeLinkSpeedScoreboard 242837d542aSEvan Quan { 243837d542aSEvan Quan uint8_t DpmEnable; 244837d542aSEvan Quan uint8_t DpmRunning; 245837d542aSEvan Quan uint8_t DpmForce; 246837d542aSEvan Quan uint8_t DpmForceLevel; 247837d542aSEvan Quan 248837d542aSEvan Quan uint8_t CurrentLinkSpeed; 249837d542aSEvan Quan uint8_t EnabledLevelsChange; 250837d542aSEvan Quan uint16_t AutoDpmInterval; 251837d542aSEvan Quan 252837d542aSEvan Quan uint16_t AutoDpmRange; 253837d542aSEvan Quan uint16_t AutoDpmCount; 254837d542aSEvan Quan 255837d542aSEvan Quan uint8_t DpmMode; 256837d542aSEvan Quan uint8_t AcpiReq; 257837d542aSEvan Quan uint8_t AcpiAck; 258837d542aSEvan Quan uint8_t CurrentLinkLevel; 259837d542aSEvan Quan 260837d542aSEvan Quan }; 261837d542aSEvan Quan 262837d542aSEvan Quan typedef struct SMU7_PCIeLinkSpeedScoreboard SMU7_PCIeLinkSpeedScoreboard; 263837d542aSEvan Quan 264837d542aSEvan Quan // -------------------------------------------------------- CAC table ------------------------------------------------------ 265837d542aSEvan Quan #define SMU7_LKGE_LUT_NUM_OF_TEMP_ENTRIES 16 266837d542aSEvan Quan #define SMU7_LKGE_LUT_NUM_OF_VOLT_ENTRIES 16 267837d542aSEvan Quan 268837d542aSEvan Quan #define SMU7_SCALE_I 7 269837d542aSEvan Quan #define SMU7_SCALE_R 12 270837d542aSEvan Quan 271837d542aSEvan Quan struct SMU7_PowerScoreboard 272837d542aSEvan Quan { 273837d542aSEvan Quan uint16_t MinVoltage; 274837d542aSEvan Quan uint16_t MaxVoltage; 275837d542aSEvan Quan 276837d542aSEvan Quan uint32_t AvgGpuPower; 277837d542aSEvan Quan 278837d542aSEvan Quan uint16_t VddcLeakagePower[SID_OPTION_COUNT]; 279837d542aSEvan Quan uint16_t VddcSclkConstantPower[SID_OPTION_COUNT]; 280837d542aSEvan Quan uint16_t VddcSclkDynamicPower[SID_OPTION_COUNT]; 281837d542aSEvan Quan uint16_t VddcNonSclkDynamicPower[SID_OPTION_COUNT]; 282837d542aSEvan Quan uint16_t VddcTotalPower[SID_OPTION_COUNT]; 283837d542aSEvan Quan uint16_t VddcTotalCurrent[SID_OPTION_COUNT]; 284837d542aSEvan Quan uint16_t VddcLoadVoltage[SID_OPTION_COUNT]; 285837d542aSEvan Quan uint16_t VddcNoLoadVoltage[SID_OPTION_COUNT]; 286837d542aSEvan Quan 287837d542aSEvan Quan uint16_t DisplayPhyPower; 288837d542aSEvan Quan uint16_t PciePhyPower; 289837d542aSEvan Quan 290837d542aSEvan Quan uint16_t VddciTotalPower; 291837d542aSEvan Quan uint16_t Vddr1TotalPower; 292837d542aSEvan Quan 293837d542aSEvan Quan uint32_t RocPower; 294837d542aSEvan Quan 295837d542aSEvan Quan uint32_t last_power; 296837d542aSEvan Quan uint32_t enableWinAvg; 297837d542aSEvan Quan 298837d542aSEvan Quan uint32_t lkg_acc; 299837d542aSEvan Quan uint16_t VoltLkgeScaler; 300837d542aSEvan Quan uint16_t TempLkgeScaler; 301837d542aSEvan Quan 302837d542aSEvan Quan uint32_t uvd_cac_dclk; 303837d542aSEvan Quan uint32_t uvd_cac_vclk; 304837d542aSEvan Quan uint32_t vce_cac_eclk; 305837d542aSEvan Quan uint32_t samu_cac_samclk; 306837d542aSEvan Quan uint32_t display_cac_dispclk; 307837d542aSEvan Quan uint32_t acp_cac_aclk; 308837d542aSEvan Quan uint32_t unb_cac; 309837d542aSEvan Quan 310837d542aSEvan Quan uint32_t WinTime; 311837d542aSEvan Quan 312837d542aSEvan Quan uint16_t GpuPwr_MAWt; 313837d542aSEvan Quan uint16_t FilteredVddcTotalPower; 314837d542aSEvan Quan 315837d542aSEvan Quan uint8_t CalculationRepeats; 316837d542aSEvan Quan uint8_t WaterfallUp; 317837d542aSEvan Quan uint8_t WaterfallDown; 318837d542aSEvan Quan uint8_t WaterfallLimit; 319837d542aSEvan Quan }; 320837d542aSEvan Quan 321837d542aSEvan Quan typedef struct SMU7_PowerScoreboard SMU7_PowerScoreboard; 322837d542aSEvan Quan 323837d542aSEvan Quan // -------------------------------------------------------------------------------------------------- 324837d542aSEvan Quan 325*d12d9229SRan Sun struct SMU7_ThermalScoreboard { 326837d542aSEvan Quan int16_t GpuLimit; 327837d542aSEvan Quan int16_t GpuHyst; 328837d542aSEvan Quan uint16_t CurrGnbTemp; 329837d542aSEvan Quan uint16_t FilteredGnbTemp; 330837d542aSEvan Quan uint8_t ControllerEnable; 331837d542aSEvan Quan uint8_t ControllerRunning; 332837d542aSEvan Quan uint8_t WaterfallUp; 333837d542aSEvan Quan uint8_t WaterfallDown; 334837d542aSEvan Quan uint8_t WaterfallLimit; 335837d542aSEvan Quan uint8_t padding[3]; 336837d542aSEvan Quan }; 337837d542aSEvan Quan 338837d542aSEvan Quan typedef struct SMU7_ThermalScoreboard SMU7_ThermalScoreboard; 339837d542aSEvan Quan 340837d542aSEvan Quan // For FeatureEnables: 341837d542aSEvan Quan #define SMU7_SCLK_DPM_CONFIG_MASK 0x01 342837d542aSEvan Quan #define SMU7_VOLTAGE_CONTROLLER_CONFIG_MASK 0x02 343837d542aSEvan Quan #define SMU7_THERMAL_CONTROLLER_CONFIG_MASK 0x04 344837d542aSEvan Quan #define SMU7_MCLK_DPM_CONFIG_MASK 0x08 345837d542aSEvan Quan #define SMU7_UVD_DPM_CONFIG_MASK 0x10 346837d542aSEvan Quan #define SMU7_VCE_DPM_CONFIG_MASK 0x20 347837d542aSEvan Quan #define SMU7_ACP_DPM_CONFIG_MASK 0x40 348837d542aSEvan Quan #define SMU7_SAMU_DPM_CONFIG_MASK 0x80 349837d542aSEvan Quan #define SMU7_PCIEGEN_DPM_CONFIG_MASK 0x100 350837d542aSEvan Quan 351837d542aSEvan Quan #define SMU7_ACP_MCLK_HANDSHAKE_DISABLE 0x00000001 352837d542aSEvan Quan #define SMU7_ACP_SCLK_HANDSHAKE_DISABLE 0x00000002 353837d542aSEvan Quan #define SMU7_UVD_MCLK_HANDSHAKE_DISABLE 0x00000100 354837d542aSEvan Quan #define SMU7_UVD_SCLK_HANDSHAKE_DISABLE 0x00000200 355837d542aSEvan Quan #define SMU7_VCE_MCLK_HANDSHAKE_DISABLE 0x00010000 356837d542aSEvan Quan #define SMU7_VCE_SCLK_HANDSHAKE_DISABLE 0x00020000 357837d542aSEvan Quan 358837d542aSEvan Quan // All 'soft registers' should be uint32_t. 359*d12d9229SRan Sun struct SMU71_SoftRegisters { 360837d542aSEvan Quan uint32_t RefClockFrequency; 361837d542aSEvan Quan uint32_t PmTimerPeriod; 362837d542aSEvan Quan uint32_t FeatureEnables; 363837d542aSEvan Quan #if defined (SMU__DGPU_ONLY) 364837d542aSEvan Quan uint32_t PreVBlankGap; 365837d542aSEvan Quan uint32_t VBlankTimeout; 366837d542aSEvan Quan uint32_t TrainTimeGap; 367837d542aSEvan Quan uint32_t MvddSwitchTime; 368837d542aSEvan Quan uint32_t LongestAcpiTrainTime; 369837d542aSEvan Quan uint32_t AcpiDelay; 370837d542aSEvan Quan uint32_t G5TrainTime; 371837d542aSEvan Quan uint32_t DelayMpllPwron; 372837d542aSEvan Quan uint32_t VoltageChangeTimeout; 373837d542aSEvan Quan #endif 374837d542aSEvan Quan uint32_t HandshakeDisables; 375837d542aSEvan Quan 376837d542aSEvan Quan uint8_t DisplayPhy1Config; 377837d542aSEvan Quan uint8_t DisplayPhy2Config; 378837d542aSEvan Quan uint8_t DisplayPhy3Config; 379837d542aSEvan Quan uint8_t DisplayPhy4Config; 380837d542aSEvan Quan 381837d542aSEvan Quan uint8_t DisplayPhy5Config; 382837d542aSEvan Quan uint8_t DisplayPhy6Config; 383837d542aSEvan Quan uint8_t DisplayPhy7Config; 384837d542aSEvan Quan uint8_t DisplayPhy8Config; 385837d542aSEvan Quan 386837d542aSEvan Quan uint32_t AverageGraphicsActivity; 387837d542aSEvan Quan uint32_t AverageMemoryActivity; 388837d542aSEvan Quan uint32_t AverageGioActivity; 389837d542aSEvan Quan 390837d542aSEvan Quan uint8_t SClkDpmEnabledLevels; 391837d542aSEvan Quan uint8_t MClkDpmEnabledLevels; 392837d542aSEvan Quan uint8_t LClkDpmEnabledLevels; 393837d542aSEvan Quan uint8_t PCIeDpmEnabledLevels; 394837d542aSEvan Quan 395837d542aSEvan Quan uint32_t DRAM_LOG_ADDR_H; 396837d542aSEvan Quan uint32_t DRAM_LOG_ADDR_L; 397837d542aSEvan Quan uint32_t DRAM_LOG_PHY_ADDR_H; 398837d542aSEvan Quan uint32_t DRAM_LOG_PHY_ADDR_L; 399837d542aSEvan Quan uint32_t DRAM_LOG_BUFF_SIZE; 400837d542aSEvan Quan uint32_t UlvEnterCount; 401837d542aSEvan Quan uint32_t UlvTime; 402837d542aSEvan Quan uint32_t UcodeLoadStatus; 403837d542aSEvan Quan uint8_t DPMFreezeAndForced; 404837d542aSEvan Quan uint8_t Activity_Weight; 405837d542aSEvan Quan uint8_t Reserved8[2]; 406837d542aSEvan Quan uint32_t Reserved; 407837d542aSEvan Quan }; 408837d542aSEvan Quan 409837d542aSEvan Quan typedef struct SMU71_SoftRegisters SMU71_SoftRegisters; 410837d542aSEvan Quan 411*d12d9229SRan Sun struct SMU71_Firmware_Header { 412837d542aSEvan Quan uint32_t Digest[5]; 413837d542aSEvan Quan uint32_t Version; 414837d542aSEvan Quan uint32_t HeaderSize; 415837d542aSEvan Quan uint32_t Flags; 416837d542aSEvan Quan uint32_t EntryPoint; 417837d542aSEvan Quan uint32_t CodeSize; 418837d542aSEvan Quan uint32_t ImageSize; 419837d542aSEvan Quan 420837d542aSEvan Quan uint32_t Rtos; 421837d542aSEvan Quan uint32_t SoftRegisters; 422837d542aSEvan Quan uint32_t DpmTable; 423837d542aSEvan Quan uint32_t FanTable; 424837d542aSEvan Quan uint32_t CacConfigTable; 425837d542aSEvan Quan uint32_t CacStatusTable; 426837d542aSEvan Quan 427837d542aSEvan Quan uint32_t mcRegisterTable; 428837d542aSEvan Quan 429837d542aSEvan Quan uint32_t mcArbDramTimingTable; 430837d542aSEvan Quan 431837d542aSEvan Quan uint32_t PmFuseTable; 432837d542aSEvan Quan uint32_t Globals; 433837d542aSEvan Quan uint32_t UvdDpmTable; 434837d542aSEvan Quan uint32_t AcpDpmTable; 435837d542aSEvan Quan uint32_t VceDpmTable; 436837d542aSEvan Quan uint32_t SamuDpmTable; 437837d542aSEvan Quan uint32_t UlvSettings; 438837d542aSEvan Quan uint32_t Reserved[37]; 439837d542aSEvan Quan uint32_t Signature; 440837d542aSEvan Quan }; 441837d542aSEvan Quan 442837d542aSEvan Quan typedef struct SMU71_Firmware_Header SMU71_Firmware_Header; 443837d542aSEvan Quan 444837d542aSEvan Quan struct SMU7_HystController_Data 445837d542aSEvan Quan { 446837d542aSEvan Quan uint8_t waterfall_up; 447837d542aSEvan Quan uint8_t waterfall_down; 448837d542aSEvan Quan uint8_t pstate; 449837d542aSEvan Quan uint8_t clamp_mode; 450837d542aSEvan Quan }; 451837d542aSEvan Quan 452837d542aSEvan Quan typedef struct SMU7_HystController_Data SMU7_HystController_Data; 453837d542aSEvan Quan 454837d542aSEvan Quan #define SMU71_FIRMWARE_HEADER_LOCATION 0x20000 455837d542aSEvan Quan 456837d542aSEvan Quan enum DisplayConfig { 457837d542aSEvan Quan PowerDown = 1, 458837d542aSEvan Quan DP54x4, 459837d542aSEvan Quan DP54x2, 460837d542aSEvan Quan DP54x1, 461837d542aSEvan Quan DP27x4, 462837d542aSEvan Quan DP27x2, 463837d542aSEvan Quan DP27x1, 464837d542aSEvan Quan HDMI297, 465837d542aSEvan Quan HDMI162, 466837d542aSEvan Quan LVDS, 467837d542aSEvan Quan DP324x4, 468837d542aSEvan Quan DP324x2, 469837d542aSEvan Quan DP324x1 470837d542aSEvan Quan }; 471837d542aSEvan Quan 472837d542aSEvan Quan //#define SX_BLOCK_COUNT 8 473837d542aSEvan Quan //#define MC_BLOCK_COUNT 1 474837d542aSEvan Quan //#define CPL_BLOCK_COUNT 27 475837d542aSEvan Quan 476837d542aSEvan Quan #if defined SMU__VARIANT__ICELAND 477837d542aSEvan Quan #define SX_BLOCK_COUNT 8 478837d542aSEvan Quan #define MC_BLOCK_COUNT 1 479837d542aSEvan Quan #define CPL_BLOCK_COUNT 29 480837d542aSEvan Quan #endif 481837d542aSEvan Quan 482837d542aSEvan Quan struct SMU7_Local_Cac { 483837d542aSEvan Quan uint8_t BlockId; 484837d542aSEvan Quan uint8_t SignalId; 485837d542aSEvan Quan uint8_t Threshold; 486837d542aSEvan Quan uint8_t Padding; 487837d542aSEvan Quan }; 488837d542aSEvan Quan 489837d542aSEvan Quan typedef struct SMU7_Local_Cac SMU7_Local_Cac; 490837d542aSEvan Quan 491837d542aSEvan Quan struct SMU7_Local_Cac_Table { 492837d542aSEvan Quan SMU7_Local_Cac SxLocalCac[SX_BLOCK_COUNT]; 493837d542aSEvan Quan SMU7_Local_Cac CplLocalCac[CPL_BLOCK_COUNT]; 494837d542aSEvan Quan SMU7_Local_Cac McLocalCac[MC_BLOCK_COUNT]; 495837d542aSEvan Quan }; 496837d542aSEvan Quan 497837d542aSEvan Quan typedef struct SMU7_Local_Cac_Table SMU7_Local_Cac_Table; 498837d542aSEvan Quan 499837d542aSEvan Quan #if !defined(SMC_MICROCODE) 500837d542aSEvan Quan #pragma pack(pop) 501837d542aSEvan Quan #endif 502837d542aSEvan Quan 503837d542aSEvan Quan #endif 504837d542aSEvan Quan 505