1 1.1 riastrad /* $NetBSD: smu71.h,v 1.2 2021/12/18 23:45:26 riastradh Exp $ */ 2 1.1 riastrad 3 1.1 riastrad /* 4 1.1 riastrad * Copyright 2016 Advanced Micro Devices, Inc. 5 1.1 riastrad * 6 1.1 riastrad * Permission is hereby granted, free of charge, to any person obtaining a 7 1.1 riastrad * copy of this software and associated documentation files (the "Software"), 8 1.1 riastrad * to deal in the Software without restriction, including without limitation 9 1.1 riastrad * the rights to use, copy, modify, merge, publish, distribute, sublicense, 10 1.1 riastrad * and/or sell copies of the Software, and to permit persons to whom the 11 1.1 riastrad * Software is furnished to do so, subject to the following conditions: 12 1.1 riastrad * 13 1.1 riastrad * The above copyright notice and this permission notice shall be included in 14 1.1 riastrad * all copies or substantial portions of the Software. 15 1.1 riastrad * 16 1.1 riastrad * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 1.1 riastrad * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 1.1 riastrad * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19 1.1 riastrad * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 1.1 riastrad * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 1.1 riastrad * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 1.1 riastrad * OTHER DEALINGS IN THE SOFTWARE. 23 1.1 riastrad * 24 1.1 riastrad */ 25 1.1 riastrad #ifndef SMU71_H 26 1.1 riastrad #define SMU71_H 27 1.1 riastrad 28 1.1 riastrad #if !defined(SMC_MICROCODE) 29 1.1 riastrad #pragma pack(push, 1) 30 1.1 riastrad #endif 31 1.1 riastrad 32 1.1 riastrad #define SMU__NUM_PCIE_DPM_LEVELS 8 33 1.1 riastrad #define SMU__NUM_SCLK_DPM_STATE 8 34 1.1 riastrad #define SMU__NUM_MCLK_DPM_LEVELS 4 35 1.1 riastrad #define SMU__VARIANT__ICELAND 1 36 1.1 riastrad #define SMU__DGPU_ONLY 1 37 1.1 riastrad #define SMU__DYNAMIC_MCARB_SETTINGS 1 38 1.1 riastrad 39 1.1 riastrad enum SID_OPTION { 40 1.1 riastrad SID_OPTION_HI, 41 1.1 riastrad SID_OPTION_LO, 42 1.1 riastrad SID_OPTION_COUNT 43 1.1 riastrad }; 44 1.1 riastrad 45 1.1 riastrad typedef struct { 46 1.1 riastrad uint32_t high; 47 1.1 riastrad uint32_t low; 48 1.1 riastrad } data_64_t; 49 1.1 riastrad 50 1.1 riastrad typedef struct { 51 1.1 riastrad data_64_t high; 52 1.1 riastrad data_64_t low; 53 1.1 riastrad } data_128_t; 54 1.1 riastrad 55 1.1 riastrad #define SMU7_CONTEXT_ID_SMC 1 56 1.1 riastrad #define SMU7_CONTEXT_ID_VBIOS 2 57 1.1 riastrad 58 1.1 riastrad #define SMU71_MAX_LEVELS_VDDC 8 59 1.1 riastrad #define SMU71_MAX_LEVELS_VDDCI 4 60 1.1 riastrad #define SMU71_MAX_LEVELS_MVDD 4 61 1.1 riastrad #define SMU71_MAX_LEVELS_VDDNB 8 62 1.1 riastrad 63 1.1 riastrad #define SMU71_MAX_LEVELS_GRAPHICS SMU__NUM_SCLK_DPM_STATE 64 1.1 riastrad #define SMU71_MAX_LEVELS_MEMORY SMU__NUM_MCLK_DPM_LEVELS 65 1.1 riastrad #define SMU71_MAX_LEVELS_GIO SMU__NUM_LCLK_DPM_LEVELS 66 1.1 riastrad #define SMU71_MAX_LEVELS_LINK SMU__NUM_PCIE_DPM_LEVELS 67 1.1 riastrad #define SMU71_MAX_ENTRIES_SMIO 32 68 1.1 riastrad 69 1.1 riastrad #define DPM_NO_LIMIT 0 70 1.1 riastrad #define DPM_NO_UP 1 71 1.1 riastrad #define DPM_GO_DOWN 2 72 1.1 riastrad #define DPM_GO_UP 3 73 1.1 riastrad 74 1.1 riastrad #define SMU7_FIRST_DPM_GRAPHICS_LEVEL 0 75 1.1 riastrad #define SMU7_FIRST_DPM_MEMORY_LEVEL 0 76 1.1 riastrad 77 1.1 riastrad #define GPIO_CLAMP_MODE_VRHOT 1 78 1.1 riastrad #define GPIO_CLAMP_MODE_THERM 2 79 1.1 riastrad #define GPIO_CLAMP_MODE_DC 4 80 1.1 riastrad 81 1.1 riastrad #define SCRATCH_B_TARG_PCIE_INDEX_SHIFT 0 82 1.1 riastrad #define SCRATCH_B_TARG_PCIE_INDEX_MASK (0x7<<SCRATCH_B_TARG_PCIE_INDEX_SHIFT) 83 1.1 riastrad #define SCRATCH_B_CURR_PCIE_INDEX_SHIFT 3 84 1.1 riastrad #define SCRATCH_B_CURR_PCIE_INDEX_MASK (0x7<<SCRATCH_B_CURR_PCIE_INDEX_SHIFT) 85 1.1 riastrad #define SCRATCH_B_TARG_UVD_INDEX_SHIFT 6 86 1.1 riastrad #define SCRATCH_B_TARG_UVD_INDEX_MASK (0x7<<SCRATCH_B_TARG_UVD_INDEX_SHIFT) 87 1.1 riastrad #define SCRATCH_B_CURR_UVD_INDEX_SHIFT 9 88 1.1 riastrad #define SCRATCH_B_CURR_UVD_INDEX_MASK (0x7<<SCRATCH_B_CURR_UVD_INDEX_SHIFT) 89 1.1 riastrad #define SCRATCH_B_TARG_VCE_INDEX_SHIFT 12 90 1.1 riastrad #define SCRATCH_B_TARG_VCE_INDEX_MASK (0x7<<SCRATCH_B_TARG_VCE_INDEX_SHIFT) 91 1.1 riastrad #define SCRATCH_B_CURR_VCE_INDEX_SHIFT 15 92 1.1 riastrad #define SCRATCH_B_CURR_VCE_INDEX_MASK (0x7<<SCRATCH_B_CURR_VCE_INDEX_SHIFT) 93 1.1 riastrad #define SCRATCH_B_TARG_ACP_INDEX_SHIFT 18 94 1.1 riastrad #define SCRATCH_B_TARG_ACP_INDEX_MASK (0x7<<SCRATCH_B_TARG_ACP_INDEX_SHIFT) 95 1.1 riastrad #define SCRATCH_B_CURR_ACP_INDEX_SHIFT 21 96 1.1 riastrad #define SCRATCH_B_CURR_ACP_INDEX_MASK (0x7<<SCRATCH_B_CURR_ACP_INDEX_SHIFT) 97 1.1 riastrad #define SCRATCH_B_TARG_SAMU_INDEX_SHIFT 24 98 1.1 riastrad #define SCRATCH_B_TARG_SAMU_INDEX_MASK (0x7<<SCRATCH_B_TARG_SAMU_INDEX_SHIFT) 99 1.1 riastrad #define SCRATCH_B_CURR_SAMU_INDEX_SHIFT 27 100 1.1 riastrad #define SCRATCH_B_CURR_SAMU_INDEX_MASK (0x7<<SCRATCH_B_CURR_SAMU_INDEX_SHIFT) 101 1.1 riastrad 102 1.1 riastrad 103 1.1 riastrad #if defined SMU__DGPU_ONLY 104 1.1 riastrad #define SMU71_DTE_ITERATIONS 5 105 1.1 riastrad #define SMU71_DTE_SOURCES 3 106 1.1 riastrad #define SMU71_DTE_SINKS 1 107 1.1 riastrad #define SMU71_NUM_CPU_TES 0 108 1.1 riastrad #define SMU71_NUM_GPU_TES 1 109 1.1 riastrad #define SMU71_NUM_NON_TES 2 110 1.1 riastrad 111 1.1 riastrad #endif 112 1.1 riastrad 113 1.1 riastrad #if defined SMU__FUSION_ONLY 114 1.1 riastrad #define SMU7_DTE_ITERATIONS 5 115 1.1 riastrad #define SMU7_DTE_SOURCES 5 116 1.1 riastrad #define SMU7_DTE_SINKS 3 117 1.1 riastrad #define SMU7_NUM_CPU_TES 2 118 1.1 riastrad #define SMU7_NUM_GPU_TES 1 119 1.1 riastrad #define SMU7_NUM_NON_TES 2 120 1.1 riastrad 121 1.1 riastrad #endif 122 1.1 riastrad 123 1.1 riastrad struct SMU71_PIDController 124 1.1 riastrad { 125 1.1 riastrad uint32_t Ki; 126 1.1 riastrad int32_t LFWindupUpperLim; 127 1.1 riastrad int32_t LFWindupLowerLim; 128 1.1 riastrad uint32_t StatePrecision; 129 1.1 riastrad uint32_t LfPrecision; 130 1.1 riastrad uint32_t LfOffset; 131 1.1 riastrad uint32_t MaxState; 132 1.1 riastrad uint32_t MaxLfFraction; 133 1.1 riastrad uint32_t StateShift; 134 1.1 riastrad }; 135 1.1 riastrad 136 1.1 riastrad typedef struct SMU71_PIDController SMU71_PIDController; 137 1.1 riastrad 138 1.1 riastrad struct SMU7_LocalDpmScoreboard 139 1.1 riastrad { 140 1.1 riastrad uint32_t PercentageBusy; 141 1.1 riastrad 142 1.1 riastrad int32_t PIDError; 143 1.1 riastrad int32_t PIDIntegral; 144 1.1 riastrad int32_t PIDOutput; 145 1.1 riastrad 146 1.1 riastrad uint32_t SigmaDeltaAccum; 147 1.1 riastrad uint32_t SigmaDeltaOutput; 148 1.1 riastrad uint32_t SigmaDeltaLevel; 149 1.1 riastrad 150 1.1 riastrad uint32_t UtilizationSetpoint; 151 1.1 riastrad 152 1.1 riastrad uint8_t TdpClampMode; 153 1.1 riastrad uint8_t TdcClampMode; 154 1.1 riastrad uint8_t ThermClampMode; 155 1.1 riastrad uint8_t VoltageBusy; 156 1.1 riastrad 157 1.1 riastrad int8_t CurrLevel; 158 1.1 riastrad int8_t TargLevel; 159 1.1 riastrad uint8_t LevelChangeInProgress; 160 1.1 riastrad uint8_t UpHyst; 161 1.1 riastrad 162 1.1 riastrad uint8_t DownHyst; 163 1.1 riastrad uint8_t VoltageDownHyst; 164 1.1 riastrad uint8_t DpmEnable; 165 1.1 riastrad uint8_t DpmRunning; 166 1.1 riastrad 167 1.1 riastrad uint8_t DpmForce; 168 1.1 riastrad uint8_t DpmForceLevel; 169 1.1 riastrad uint8_t DisplayWatermark; 170 1.1 riastrad uint8_t McArbIndex; 171 1.1 riastrad 172 1.1 riastrad uint32_t MinimumPerfSclk; 173 1.1 riastrad 174 1.1 riastrad uint8_t AcpiReq; 175 1.1 riastrad uint8_t AcpiAck; 176 1.1 riastrad uint8_t GfxClkSlow; 177 1.1 riastrad uint8_t GpioClampMode; 178 1.1 riastrad 179 1.1 riastrad uint8_t FpsFilterWeight; 180 1.1 riastrad uint8_t EnabledLevelsChange; 181 1.1 riastrad uint8_t DteClampMode; 182 1.1 riastrad uint8_t FpsClampMode; 183 1.1 riastrad 184 1.1 riastrad uint16_t LevelResidencyCounters [SMU71_MAX_LEVELS_GRAPHICS]; 185 1.1 riastrad uint16_t LevelSwitchCounters [SMU71_MAX_LEVELS_GRAPHICS]; 186 1.1 riastrad 187 1.1 riastrad void (*TargetStateCalculator)(uint8_t); 188 1.1 riastrad void (*SavedTargetStateCalculator)(uint8_t); 189 1.1 riastrad 190 1.1 riastrad uint16_t AutoDpmInterval; 191 1.1 riastrad uint16_t AutoDpmRange; 192 1.1 riastrad 193 1.1 riastrad uint8_t FpsEnabled; 194 1.1 riastrad uint8_t MaxPerfLevel; 195 1.1 riastrad uint8_t AllowLowClkInterruptToHost; 196 1.1 riastrad uint8_t FpsRunning; 197 1.1 riastrad 198 1.1 riastrad uint32_t MaxAllowedFrequency; 199 1.1 riastrad }; 200 1.1 riastrad 201 1.1 riastrad typedef struct SMU7_LocalDpmScoreboard SMU7_LocalDpmScoreboard; 202 1.1 riastrad 203 1.1 riastrad #define SMU7_MAX_VOLTAGE_CLIENTS 12 204 1.1 riastrad 205 1.1 riastrad struct SMU7_VoltageScoreboard 206 1.1 riastrad { 207 1.1 riastrad uint16_t CurrentVoltage; 208 1.1 riastrad uint16_t HighestVoltage; 209 1.1 riastrad uint16_t MaxVid; 210 1.1 riastrad uint8_t HighestVidOffset; 211 1.1 riastrad uint8_t CurrentVidOffset; 212 1.1 riastrad #if defined (SMU__DGPU_ONLY) 213 1.1 riastrad uint8_t CurrentPhases; 214 1.1 riastrad uint8_t HighestPhases; 215 1.1 riastrad #else 216 1.1 riastrad uint8_t AvsOffset; 217 1.1 riastrad uint8_t AvsOffsetApplied; 218 1.1 riastrad #endif 219 1.1 riastrad uint8_t ControllerBusy; 220 1.1 riastrad uint8_t CurrentVid; 221 1.1 riastrad uint16_t RequestedVoltage[SMU7_MAX_VOLTAGE_CLIENTS]; 222 1.1 riastrad #if defined (SMU__DGPU_ONLY) 223 1.1 riastrad uint8_t RequestedPhases[SMU7_MAX_VOLTAGE_CLIENTS]; 224 1.1 riastrad #endif 225 1.1 riastrad uint8_t EnabledRequest[SMU7_MAX_VOLTAGE_CLIENTS]; 226 1.1 riastrad uint8_t TargetIndex; 227 1.1 riastrad uint8_t Delay; 228 1.1 riastrad uint8_t ControllerEnable; 229 1.1 riastrad uint8_t ControllerRunning; 230 1.1 riastrad uint16_t CurrentStdVoltageHiSidd; 231 1.1 riastrad uint16_t CurrentStdVoltageLoSidd; 232 1.1 riastrad #if defined (SMU__DGPU_ONLY) 233 1.1 riastrad uint16_t RequestedVddci; 234 1.1 riastrad uint16_t CurrentVddci; 235 1.1 riastrad uint16_t HighestVddci; 236 1.1 riastrad uint8_t CurrentVddciVid; 237 1.1 riastrad uint8_t TargetVddciIndex; 238 1.1 riastrad #endif 239 1.1 riastrad }; 240 1.1 riastrad 241 1.1 riastrad typedef struct SMU7_VoltageScoreboard SMU7_VoltageScoreboard; 242 1.1 riastrad 243 1.1 riastrad // ------------------------------------------------------------------------------------------------------------------------- 244 1.1 riastrad #define SMU7_MAX_PCIE_LINK_SPEEDS 3 /* 0:Gen1 1:Gen2 2:Gen3 */ 245 1.1 riastrad 246 1.1 riastrad struct SMU7_PCIeLinkSpeedScoreboard 247 1.1 riastrad { 248 1.1 riastrad uint8_t DpmEnable; 249 1.1 riastrad uint8_t DpmRunning; 250 1.1 riastrad uint8_t DpmForce; 251 1.1 riastrad uint8_t DpmForceLevel; 252 1.1 riastrad 253 1.1 riastrad uint8_t CurrentLinkSpeed; 254 1.1 riastrad uint8_t EnabledLevelsChange; 255 1.1 riastrad uint16_t AutoDpmInterval; 256 1.1 riastrad 257 1.1 riastrad uint16_t AutoDpmRange; 258 1.1 riastrad uint16_t AutoDpmCount; 259 1.1 riastrad 260 1.1 riastrad uint8_t DpmMode; 261 1.1 riastrad uint8_t AcpiReq; 262 1.1 riastrad uint8_t AcpiAck; 263 1.1 riastrad uint8_t CurrentLinkLevel; 264 1.1 riastrad 265 1.1 riastrad }; 266 1.1 riastrad 267 1.1 riastrad typedef struct SMU7_PCIeLinkSpeedScoreboard SMU7_PCIeLinkSpeedScoreboard; 268 1.1 riastrad 269 1.1 riastrad // -------------------------------------------------------- CAC table ------------------------------------------------------ 270 1.1 riastrad #define SMU7_LKGE_LUT_NUM_OF_TEMP_ENTRIES 16 271 1.1 riastrad #define SMU7_LKGE_LUT_NUM_OF_VOLT_ENTRIES 16 272 1.1 riastrad 273 1.1 riastrad #define SMU7_SCALE_I 7 274 1.1 riastrad #define SMU7_SCALE_R 12 275 1.1 riastrad 276 1.1 riastrad struct SMU7_PowerScoreboard 277 1.1 riastrad { 278 1.1 riastrad uint16_t MinVoltage; 279 1.1 riastrad uint16_t MaxVoltage; 280 1.1 riastrad 281 1.1 riastrad uint32_t AvgGpuPower; 282 1.1 riastrad 283 1.1 riastrad uint16_t VddcLeakagePower[SID_OPTION_COUNT]; 284 1.1 riastrad uint16_t VddcSclkConstantPower[SID_OPTION_COUNT]; 285 1.1 riastrad uint16_t VddcSclkDynamicPower[SID_OPTION_COUNT]; 286 1.1 riastrad uint16_t VddcNonSclkDynamicPower[SID_OPTION_COUNT]; 287 1.1 riastrad uint16_t VddcTotalPower[SID_OPTION_COUNT]; 288 1.1 riastrad uint16_t VddcTotalCurrent[SID_OPTION_COUNT]; 289 1.1 riastrad uint16_t VddcLoadVoltage[SID_OPTION_COUNT]; 290 1.1 riastrad uint16_t VddcNoLoadVoltage[SID_OPTION_COUNT]; 291 1.1 riastrad 292 1.1 riastrad uint16_t DisplayPhyPower; 293 1.1 riastrad uint16_t PciePhyPower; 294 1.1 riastrad 295 1.1 riastrad uint16_t VddciTotalPower; 296 1.1 riastrad uint16_t Vddr1TotalPower; 297 1.1 riastrad 298 1.1 riastrad uint32_t RocPower; 299 1.1 riastrad 300 1.1 riastrad uint32_t last_power; 301 1.1 riastrad uint32_t enableWinAvg; 302 1.1 riastrad 303 1.1 riastrad uint32_t lkg_acc; 304 1.1 riastrad uint16_t VoltLkgeScaler; 305 1.1 riastrad uint16_t TempLkgeScaler; 306 1.1 riastrad 307 1.1 riastrad uint32_t uvd_cac_dclk; 308 1.1 riastrad uint32_t uvd_cac_vclk; 309 1.1 riastrad uint32_t vce_cac_eclk; 310 1.1 riastrad uint32_t samu_cac_samclk; 311 1.1 riastrad uint32_t display_cac_dispclk; 312 1.1 riastrad uint32_t acp_cac_aclk; 313 1.1 riastrad uint32_t unb_cac; 314 1.1 riastrad 315 1.1 riastrad uint32_t WinTime; 316 1.1 riastrad 317 1.1 riastrad uint16_t GpuPwr_MAWt; 318 1.1 riastrad uint16_t FilteredVddcTotalPower; 319 1.1 riastrad 320 1.1 riastrad uint8_t CalculationRepeats; 321 1.1 riastrad uint8_t WaterfallUp; 322 1.1 riastrad uint8_t WaterfallDown; 323 1.1 riastrad uint8_t WaterfallLimit; 324 1.1 riastrad }; 325 1.1 riastrad 326 1.1 riastrad typedef struct SMU7_PowerScoreboard SMU7_PowerScoreboard; 327 1.1 riastrad 328 1.1 riastrad // -------------------------------------------------------------------------------------------------- 329 1.1 riastrad 330 1.1 riastrad struct SMU7_ThermalScoreboard 331 1.1 riastrad { 332 1.1 riastrad int16_t GpuLimit; 333 1.1 riastrad int16_t GpuHyst; 334 1.1 riastrad uint16_t CurrGnbTemp; 335 1.1 riastrad uint16_t FilteredGnbTemp; 336 1.1 riastrad uint8_t ControllerEnable; 337 1.1 riastrad uint8_t ControllerRunning; 338 1.1 riastrad uint8_t WaterfallUp; 339 1.1 riastrad uint8_t WaterfallDown; 340 1.1 riastrad uint8_t WaterfallLimit; 341 1.1 riastrad uint8_t padding[3]; 342 1.1 riastrad }; 343 1.1 riastrad 344 1.1 riastrad typedef struct SMU7_ThermalScoreboard SMU7_ThermalScoreboard; 345 1.1 riastrad 346 1.1 riastrad // For FeatureEnables: 347 1.1 riastrad #define SMU7_SCLK_DPM_CONFIG_MASK 0x01 348 1.1 riastrad #define SMU7_VOLTAGE_CONTROLLER_CONFIG_MASK 0x02 349 1.1 riastrad #define SMU7_THERMAL_CONTROLLER_CONFIG_MASK 0x04 350 1.1 riastrad #define SMU7_MCLK_DPM_CONFIG_MASK 0x08 351 1.1 riastrad #define SMU7_UVD_DPM_CONFIG_MASK 0x10 352 1.1 riastrad #define SMU7_VCE_DPM_CONFIG_MASK 0x20 353 1.1 riastrad #define SMU7_ACP_DPM_CONFIG_MASK 0x40 354 1.1 riastrad #define SMU7_SAMU_DPM_CONFIG_MASK 0x80 355 1.1 riastrad #define SMU7_PCIEGEN_DPM_CONFIG_MASK 0x100 356 1.1 riastrad 357 1.1 riastrad #define SMU7_ACP_MCLK_HANDSHAKE_DISABLE 0x00000001 358 1.1 riastrad #define SMU7_ACP_SCLK_HANDSHAKE_DISABLE 0x00000002 359 1.1 riastrad #define SMU7_UVD_MCLK_HANDSHAKE_DISABLE 0x00000100 360 1.1 riastrad #define SMU7_UVD_SCLK_HANDSHAKE_DISABLE 0x00000200 361 1.1 riastrad #define SMU7_VCE_MCLK_HANDSHAKE_DISABLE 0x00010000 362 1.1 riastrad #define SMU7_VCE_SCLK_HANDSHAKE_DISABLE 0x00020000 363 1.1 riastrad 364 1.1 riastrad // All 'soft registers' should be uint32_t. 365 1.1 riastrad struct SMU71_SoftRegisters 366 1.1 riastrad { 367 1.1 riastrad uint32_t RefClockFrequency; 368 1.1 riastrad uint32_t PmTimerPeriod; 369 1.1 riastrad uint32_t FeatureEnables; 370 1.1 riastrad #if defined (SMU__DGPU_ONLY) 371 1.1 riastrad uint32_t PreVBlankGap; 372 1.1 riastrad uint32_t VBlankTimeout; 373 1.1 riastrad uint32_t TrainTimeGap; 374 1.1 riastrad uint32_t MvddSwitchTime; 375 1.1 riastrad uint32_t LongestAcpiTrainTime; 376 1.1 riastrad uint32_t AcpiDelay; 377 1.1 riastrad uint32_t G5TrainTime; 378 1.1 riastrad uint32_t DelayMpllPwron; 379 1.1 riastrad uint32_t VoltageChangeTimeout; 380 1.1 riastrad #endif 381 1.1 riastrad uint32_t HandshakeDisables; 382 1.1 riastrad 383 1.1 riastrad uint8_t DisplayPhy1Config; 384 1.1 riastrad uint8_t DisplayPhy2Config; 385 1.1 riastrad uint8_t DisplayPhy3Config; 386 1.1 riastrad uint8_t DisplayPhy4Config; 387 1.1 riastrad 388 1.1 riastrad uint8_t DisplayPhy5Config; 389 1.1 riastrad uint8_t DisplayPhy6Config; 390 1.1 riastrad uint8_t DisplayPhy7Config; 391 1.1 riastrad uint8_t DisplayPhy8Config; 392 1.1 riastrad 393 1.1 riastrad uint32_t AverageGraphicsActivity; 394 1.1 riastrad uint32_t AverageMemoryActivity; 395 1.1 riastrad uint32_t AverageGioActivity; 396 1.1 riastrad 397 1.1 riastrad uint8_t SClkDpmEnabledLevels; 398 1.1 riastrad uint8_t MClkDpmEnabledLevels; 399 1.1 riastrad uint8_t LClkDpmEnabledLevels; 400 1.1 riastrad uint8_t PCIeDpmEnabledLevels; 401 1.1 riastrad 402 1.1 riastrad uint32_t DRAM_LOG_ADDR_H; 403 1.1 riastrad uint32_t DRAM_LOG_ADDR_L; 404 1.1 riastrad uint32_t DRAM_LOG_PHY_ADDR_H; 405 1.1 riastrad uint32_t DRAM_LOG_PHY_ADDR_L; 406 1.1 riastrad uint32_t DRAM_LOG_BUFF_SIZE; 407 1.1 riastrad uint32_t UlvEnterCount; 408 1.1 riastrad uint32_t UlvTime; 409 1.1 riastrad uint32_t UcodeLoadStatus; 410 1.1 riastrad uint8_t DPMFreezeAndForced; 411 1.1 riastrad uint8_t Activity_Weight; 412 1.1 riastrad uint8_t Reserved8[2]; 413 1.1 riastrad uint32_t Reserved; 414 1.1 riastrad }; 415 1.1 riastrad 416 1.1 riastrad typedef struct SMU71_SoftRegisters SMU71_SoftRegisters; 417 1.1 riastrad 418 1.1 riastrad struct SMU71_Firmware_Header 419 1.1 riastrad { 420 1.1 riastrad uint32_t Digest[5]; 421 1.1 riastrad uint32_t Version; 422 1.1 riastrad uint32_t HeaderSize; 423 1.1 riastrad uint32_t Flags; 424 1.1 riastrad uint32_t EntryPoint; 425 1.1 riastrad uint32_t CodeSize; 426 1.1 riastrad uint32_t ImageSize; 427 1.1 riastrad 428 1.1 riastrad uint32_t Rtos; 429 1.1 riastrad uint32_t SoftRegisters; 430 1.1 riastrad uint32_t DpmTable; 431 1.1 riastrad uint32_t FanTable; 432 1.1 riastrad uint32_t CacConfigTable; 433 1.1 riastrad uint32_t CacStatusTable; 434 1.1 riastrad 435 1.1 riastrad uint32_t mcRegisterTable; 436 1.1 riastrad 437 1.1 riastrad uint32_t mcArbDramTimingTable; 438 1.1 riastrad 439 1.1 riastrad uint32_t PmFuseTable; 440 1.1 riastrad uint32_t Globals; 441 1.1 riastrad uint32_t UvdDpmTable; 442 1.1 riastrad uint32_t AcpDpmTable; 443 1.1 riastrad uint32_t VceDpmTable; 444 1.1 riastrad uint32_t SamuDpmTable; 445 1.1 riastrad uint32_t UlvSettings; 446 1.1 riastrad uint32_t Reserved[37]; 447 1.1 riastrad uint32_t Signature; 448 1.1 riastrad }; 449 1.1 riastrad 450 1.1 riastrad typedef struct SMU71_Firmware_Header SMU71_Firmware_Header; 451 1.1 riastrad 452 1.1 riastrad struct SMU7_HystController_Data 453 1.1 riastrad { 454 1.1 riastrad uint8_t waterfall_up; 455 1.1 riastrad uint8_t waterfall_down; 456 1.1 riastrad uint8_t pstate; 457 1.1 riastrad uint8_t clamp_mode; 458 1.1 riastrad }; 459 1.1 riastrad 460 1.1 riastrad typedef struct SMU7_HystController_Data SMU7_HystController_Data; 461 1.1 riastrad 462 1.1 riastrad #define SMU71_FIRMWARE_HEADER_LOCATION 0x20000 463 1.1 riastrad 464 1.1 riastrad enum DisplayConfig { 465 1.1 riastrad PowerDown = 1, 466 1.1 riastrad DP54x4, 467 1.1 riastrad DP54x2, 468 1.1 riastrad DP54x1, 469 1.1 riastrad DP27x4, 470 1.1 riastrad DP27x2, 471 1.1 riastrad DP27x1, 472 1.1 riastrad HDMI297, 473 1.1 riastrad HDMI162, 474 1.1 riastrad LVDS, 475 1.1 riastrad DP324x4, 476 1.1 riastrad DP324x2, 477 1.1 riastrad DP324x1 478 1.1 riastrad }; 479 1.1 riastrad 480 1.1 riastrad //#define SX_BLOCK_COUNT 8 481 1.1 riastrad //#define MC_BLOCK_COUNT 1 482 1.1 riastrad //#define CPL_BLOCK_COUNT 27 483 1.1 riastrad 484 1.1 riastrad #if defined SMU__VARIANT__ICELAND 485 1.1 riastrad #define SX_BLOCK_COUNT 8 486 1.1 riastrad #define MC_BLOCK_COUNT 1 487 1.1 riastrad #define CPL_BLOCK_COUNT 29 488 1.1 riastrad #endif 489 1.1 riastrad 490 1.1 riastrad struct SMU7_Local_Cac { 491 1.1 riastrad uint8_t BlockId; 492 1.1 riastrad uint8_t SignalId; 493 1.1 riastrad uint8_t Threshold; 494 1.1 riastrad uint8_t Padding; 495 1.1 riastrad }; 496 1.1 riastrad 497 1.1 riastrad typedef struct SMU7_Local_Cac SMU7_Local_Cac; 498 1.1 riastrad 499 1.1 riastrad struct SMU7_Local_Cac_Table { 500 1.1 riastrad SMU7_Local_Cac SxLocalCac[SX_BLOCK_COUNT]; 501 1.1 riastrad SMU7_Local_Cac CplLocalCac[CPL_BLOCK_COUNT]; 502 1.1 riastrad SMU7_Local_Cac McLocalCac[MC_BLOCK_COUNT]; 503 1.1 riastrad }; 504 1.1 riastrad 505 1.1 riastrad typedef struct SMU7_Local_Cac_Table SMU7_Local_Cac_Table; 506 1.1 riastrad 507 1.1 riastrad #if !defined(SMC_MICROCODE) 508 1.1 riastrad #pragma pack(pop) 509 1.1 riastrad #endif 510 1.1 riastrad 511 1.1 riastrad #endif 512 1.1 riastrad 513