1 1.1 riastrad /* $NetBSD: smu73.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 2015 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 _SMU73_H_ 26 1.1 riastrad #define _SMU73_H_ 27 1.1 riastrad 28 1.1 riastrad #pragma pack(push, 1) 29 1.1 riastrad enum SID_OPTION { 30 1.1 riastrad SID_OPTION_HI, 31 1.1 riastrad SID_OPTION_LO, 32 1.1 riastrad SID_OPTION_COUNT 33 1.1 riastrad }; 34 1.1 riastrad 35 1.1 riastrad enum Poly3rdOrderCoeff { 36 1.1 riastrad LEAKAGE_TEMPERATURE_SCALAR, 37 1.1 riastrad LEAKAGE_VOLTAGE_SCALAR, 38 1.1 riastrad DYNAMIC_VOLTAGE_SCALAR, 39 1.1 riastrad POLY_3RD_ORDER_COUNT 40 1.1 riastrad }; 41 1.1 riastrad 42 1.1 riastrad struct SMU7_Poly3rdOrder_Data 43 1.1 riastrad { 44 1.1 riastrad int32_t a; 45 1.1 riastrad int32_t b; 46 1.1 riastrad int32_t c; 47 1.1 riastrad int32_t d; 48 1.1 riastrad uint8_t a_shift; 49 1.1 riastrad uint8_t b_shift; 50 1.1 riastrad uint8_t c_shift; 51 1.1 riastrad uint8_t x_shift; 52 1.1 riastrad }; 53 1.1 riastrad 54 1.1 riastrad typedef struct SMU7_Poly3rdOrder_Data SMU7_Poly3rdOrder_Data; 55 1.1 riastrad 56 1.1 riastrad struct Power_Calculator_Data 57 1.1 riastrad { 58 1.1 riastrad uint16_t NoLoadVoltage; 59 1.1 riastrad uint16_t LoadVoltage; 60 1.1 riastrad uint16_t Resistance; 61 1.1 riastrad uint16_t Temperature; 62 1.1 riastrad uint16_t BaseLeakage; 63 1.1 riastrad uint16_t LkgTempScalar; 64 1.1 riastrad uint16_t LkgVoltScalar; 65 1.1 riastrad uint16_t LkgAreaScalar; 66 1.1 riastrad uint16_t LkgPower; 67 1.1 riastrad uint16_t DynVoltScalar; 68 1.1 riastrad uint32_t Cac; 69 1.1 riastrad uint32_t DynPower; 70 1.1 riastrad uint32_t TotalCurrent; 71 1.1 riastrad uint32_t TotalPower; 72 1.1 riastrad }; 73 1.1 riastrad 74 1.1 riastrad typedef struct Power_Calculator_Data PowerCalculatorData_t; 75 1.1 riastrad 76 1.1 riastrad struct Gc_Cac_Weight_Data 77 1.1 riastrad { 78 1.1 riastrad uint8_t index; 79 1.1 riastrad uint32_t value; 80 1.1 riastrad }; 81 1.1 riastrad 82 1.1 riastrad typedef struct Gc_Cac_Weight_Data GcCacWeight_Data; 83 1.1 riastrad 84 1.1 riastrad 85 1.1 riastrad typedef struct { 86 1.1 riastrad uint32_t high; 87 1.1 riastrad uint32_t low; 88 1.1 riastrad } data_64_t; 89 1.1 riastrad 90 1.1 riastrad typedef struct { 91 1.1 riastrad data_64_t high; 92 1.1 riastrad data_64_t low; 93 1.1 riastrad } data_128_t; 94 1.1 riastrad 95 1.1 riastrad #define SMU__NUM_SCLK_DPM_STATE 8 96 1.1 riastrad #define SMU__NUM_MCLK_DPM_LEVELS 4 97 1.1 riastrad #define SMU__NUM_LCLK_DPM_LEVELS 8 98 1.1 riastrad #define SMU__NUM_PCIE_DPM_LEVELS 8 99 1.1 riastrad 100 1.1 riastrad #define SMU7_CONTEXT_ID_SMC 1 101 1.1 riastrad #define SMU7_CONTEXT_ID_VBIOS 2 102 1.1 riastrad 103 1.1 riastrad #define SMU73_MAX_LEVELS_VDDC 16 104 1.1 riastrad #define SMU73_MAX_LEVELS_VDDGFX 16 105 1.1 riastrad #define SMU73_MAX_LEVELS_VDDCI 8 106 1.1 riastrad #define SMU73_MAX_LEVELS_MVDD 4 107 1.1 riastrad 108 1.1 riastrad #define SMU_MAX_SMIO_LEVELS 4 109 1.1 riastrad 110 1.1 riastrad #define SMU73_MAX_LEVELS_GRAPHICS SMU__NUM_SCLK_DPM_STATE // SCLK + SQ DPM + ULV 111 1.1 riastrad #define SMU73_MAX_LEVELS_MEMORY SMU__NUM_MCLK_DPM_LEVELS // MCLK Levels DPM 112 1.1 riastrad #define SMU73_MAX_LEVELS_GIO SMU__NUM_LCLK_DPM_LEVELS // LCLK Levels 113 1.1 riastrad #define SMU73_MAX_LEVELS_LINK SMU__NUM_PCIE_DPM_LEVELS // PCIe speed and number of lanes. 114 1.1 riastrad #define SMU73_MAX_LEVELS_UVD 8 // VCLK/DCLK levels for UVD. 115 1.1 riastrad #define SMU73_MAX_LEVELS_VCE 8 // ECLK levels for VCE. 116 1.1 riastrad #define SMU73_MAX_LEVELS_ACP 8 // ACLK levels for ACP. 117 1.1 riastrad #define SMU73_MAX_LEVELS_SAMU 8 // SAMCLK levels for SAMU. 118 1.1 riastrad #define SMU73_MAX_ENTRIES_SMIO 32 // Number of entries in SMIO table. 119 1.1 riastrad 120 1.1 riastrad #define DPM_NO_LIMIT 0 121 1.1 riastrad #define DPM_NO_UP 1 122 1.1 riastrad #define DPM_GO_DOWN 2 123 1.1 riastrad #define DPM_GO_UP 3 124 1.1 riastrad 125 1.1 riastrad #define SMU7_FIRST_DPM_GRAPHICS_LEVEL 0 126 1.1 riastrad #define SMU7_FIRST_DPM_MEMORY_LEVEL 0 127 1.1 riastrad 128 1.1 riastrad #define GPIO_CLAMP_MODE_VRHOT 1 129 1.1 riastrad #define GPIO_CLAMP_MODE_THERM 2 130 1.1 riastrad #define GPIO_CLAMP_MODE_DC 4 131 1.1 riastrad 132 1.1 riastrad #define SCRATCH_B_TARG_PCIE_INDEX_SHIFT 0 133 1.1 riastrad #define SCRATCH_B_TARG_PCIE_INDEX_MASK (0x7<<SCRATCH_B_TARG_PCIE_INDEX_SHIFT) 134 1.1 riastrad #define SCRATCH_B_CURR_PCIE_INDEX_SHIFT 3 135 1.1 riastrad #define SCRATCH_B_CURR_PCIE_INDEX_MASK (0x7<<SCRATCH_B_CURR_PCIE_INDEX_SHIFT) 136 1.1 riastrad #define SCRATCH_B_TARG_UVD_INDEX_SHIFT 6 137 1.1 riastrad #define SCRATCH_B_TARG_UVD_INDEX_MASK (0x7<<SCRATCH_B_TARG_UVD_INDEX_SHIFT) 138 1.1 riastrad #define SCRATCH_B_CURR_UVD_INDEX_SHIFT 9 139 1.1 riastrad #define SCRATCH_B_CURR_UVD_INDEX_MASK (0x7<<SCRATCH_B_CURR_UVD_INDEX_SHIFT) 140 1.1 riastrad #define SCRATCH_B_TARG_VCE_INDEX_SHIFT 12 141 1.1 riastrad #define SCRATCH_B_TARG_VCE_INDEX_MASK (0x7<<SCRATCH_B_TARG_VCE_INDEX_SHIFT) 142 1.1 riastrad #define SCRATCH_B_CURR_VCE_INDEX_SHIFT 15 143 1.1 riastrad #define SCRATCH_B_CURR_VCE_INDEX_MASK (0x7<<SCRATCH_B_CURR_VCE_INDEX_SHIFT) 144 1.1 riastrad #define SCRATCH_B_TARG_ACP_INDEX_SHIFT 18 145 1.1 riastrad #define SCRATCH_B_TARG_ACP_INDEX_MASK (0x7<<SCRATCH_B_TARG_ACP_INDEX_SHIFT) 146 1.1 riastrad #define SCRATCH_B_CURR_ACP_INDEX_SHIFT 21 147 1.1 riastrad #define SCRATCH_B_CURR_ACP_INDEX_MASK (0x7<<SCRATCH_B_CURR_ACP_INDEX_SHIFT) 148 1.1 riastrad #define SCRATCH_B_TARG_SAMU_INDEX_SHIFT 24 149 1.1 riastrad #define SCRATCH_B_TARG_SAMU_INDEX_MASK (0x7<<SCRATCH_B_TARG_SAMU_INDEX_SHIFT) 150 1.1 riastrad #define SCRATCH_B_CURR_SAMU_INDEX_SHIFT 27 151 1.1 riastrad #define SCRATCH_B_CURR_SAMU_INDEX_MASK (0x7<<SCRATCH_B_CURR_SAMU_INDEX_SHIFT) 152 1.1 riastrad 153 1.1 riastrad // Virtualization Defines 154 1.1 riastrad #define CG_XDMA_MASK 0x1 155 1.1 riastrad #define CG_XDMA_SHIFT 0 156 1.1 riastrad #define CG_UVD_MASK 0x2 157 1.1 riastrad #define CG_UVD_SHIFT 1 158 1.1 riastrad #define CG_VCE_MASK 0x4 159 1.1 riastrad #define CG_VCE_SHIFT 2 160 1.1 riastrad #define CG_SAMU_MASK 0x8 161 1.1 riastrad #define CG_SAMU_SHIFT 3 162 1.1 riastrad #define CG_GFX_MASK 0x10 163 1.1 riastrad #define CG_GFX_SHIFT 4 164 1.1 riastrad #define CG_SDMA_MASK 0x20 165 1.1 riastrad #define CG_SDMA_SHIFT 5 166 1.1 riastrad #define CG_HDP_MASK 0x40 167 1.1 riastrad #define CG_HDP_SHIFT 6 168 1.1 riastrad #define CG_MC_MASK 0x80 169 1.1 riastrad #define CG_MC_SHIFT 7 170 1.1 riastrad #define CG_DRM_MASK 0x100 171 1.1 riastrad #define CG_DRM_SHIFT 8 172 1.1 riastrad #define CG_ROM_MASK 0x200 173 1.1 riastrad #define CG_ROM_SHIFT 9 174 1.1 riastrad #define CG_BIF_MASK 0x400 175 1.1 riastrad #define CG_BIF_SHIFT 10 176 1.1 riastrad 177 1.1 riastrad #define SMU73_DTE_ITERATIONS 5 178 1.1 riastrad #define SMU73_DTE_SOURCES 3 179 1.1 riastrad #define SMU73_DTE_SINKS 1 180 1.1 riastrad #define SMU73_NUM_CPU_TES 0 181 1.1 riastrad #define SMU73_NUM_GPU_TES 1 182 1.1 riastrad #define SMU73_NUM_NON_TES 2 183 1.1 riastrad #define SMU73_DTE_FAN_SCALAR_MIN 0x100 184 1.1 riastrad #define SMU73_DTE_FAN_SCALAR_MAX 0x166 185 1.1 riastrad #define SMU73_DTE_FAN_TEMP_MAX 93 186 1.1 riastrad #define SMU73_DTE_FAN_TEMP_MIN 83 187 1.1 riastrad 188 1.1 riastrad #define SMU73_THERMAL_INPUT_LOOP_COUNT 6 189 1.1 riastrad #define SMU73_THERMAL_CLAMP_MODE_COUNT 8 190 1.1 riastrad 191 1.1 riastrad 192 1.1 riastrad struct SMU7_HystController_Data 193 1.1 riastrad { 194 1.1 riastrad uint16_t waterfall_up; 195 1.1 riastrad uint16_t waterfall_down; 196 1.1 riastrad uint16_t waterfall_limit; 197 1.1 riastrad uint16_t release_cnt; 198 1.1 riastrad uint16_t release_limit; 199 1.1 riastrad uint16_t spare; 200 1.1 riastrad }; 201 1.1 riastrad 202 1.1 riastrad typedef struct SMU7_HystController_Data SMU7_HystController_Data; 203 1.1 riastrad 204 1.1 riastrad struct SMU73_PIDController 205 1.1 riastrad { 206 1.1 riastrad uint32_t Ki; 207 1.1 riastrad int32_t LFWindupUpperLim; 208 1.1 riastrad int32_t LFWindupLowerLim; 209 1.1 riastrad uint32_t StatePrecision; 210 1.1 riastrad 211 1.1 riastrad uint32_t LfPrecision; 212 1.1 riastrad uint32_t LfOffset; 213 1.1 riastrad uint32_t MaxState; 214 1.1 riastrad uint32_t MaxLfFraction; 215 1.1 riastrad uint32_t StateShift; 216 1.1 riastrad }; 217 1.1 riastrad 218 1.1 riastrad typedef struct SMU73_PIDController SMU73_PIDController; 219 1.1 riastrad 220 1.1 riastrad struct SMU7_LocalDpmScoreboard 221 1.1 riastrad { 222 1.1 riastrad uint32_t PercentageBusy; 223 1.1 riastrad 224 1.1 riastrad int32_t PIDError; 225 1.1 riastrad int32_t PIDIntegral; 226 1.1 riastrad int32_t PIDOutput; 227 1.1 riastrad 228 1.1 riastrad uint32_t SigmaDeltaAccum; 229 1.1 riastrad uint32_t SigmaDeltaOutput; 230 1.1 riastrad uint32_t SigmaDeltaLevel; 231 1.1 riastrad 232 1.1 riastrad uint32_t UtilizationSetpoint; 233 1.1 riastrad 234 1.1 riastrad uint8_t TdpClampMode; 235 1.1 riastrad uint8_t TdcClampMode; 236 1.1 riastrad uint8_t ThermClampMode; 237 1.1 riastrad uint8_t VoltageBusy; 238 1.1 riastrad 239 1.1 riastrad int8_t CurrLevel; 240 1.1 riastrad int8_t TargLevel; 241 1.1 riastrad uint8_t LevelChangeInProgress; 242 1.1 riastrad uint8_t UpHyst; 243 1.1 riastrad 244 1.1 riastrad uint8_t DownHyst; 245 1.1 riastrad uint8_t VoltageDownHyst; 246 1.1 riastrad uint8_t DpmEnable; 247 1.1 riastrad uint8_t DpmRunning; 248 1.1 riastrad 249 1.1 riastrad uint8_t DpmForce; 250 1.1 riastrad uint8_t DpmForceLevel; 251 1.1 riastrad uint8_t DisplayWatermark; 252 1.1 riastrad uint8_t McArbIndex; 253 1.1 riastrad 254 1.1 riastrad uint32_t MinimumPerfSclk; 255 1.1 riastrad 256 1.1 riastrad uint8_t AcpiReq; 257 1.1 riastrad uint8_t AcpiAck; 258 1.1 riastrad uint8_t GfxClkSlow; 259 1.1 riastrad uint8_t GpioClampMode; 260 1.1 riastrad 261 1.1 riastrad uint8_t spare2; 262 1.1 riastrad uint8_t EnabledLevelsChange; 263 1.1 riastrad uint8_t DteClampMode; 264 1.1 riastrad uint8_t FpsClampMode; 265 1.1 riastrad 266 1.1 riastrad uint16_t LevelResidencyCounters [SMU73_MAX_LEVELS_GRAPHICS]; 267 1.1 riastrad uint16_t LevelSwitchCounters [SMU73_MAX_LEVELS_GRAPHICS]; 268 1.1 riastrad 269 1.1 riastrad void (*TargetStateCalculator)(uint8_t); 270 1.1 riastrad void (*SavedTargetStateCalculator)(uint8_t); 271 1.1 riastrad 272 1.1 riastrad uint16_t AutoDpmInterval; 273 1.1 riastrad uint16_t AutoDpmRange; 274 1.1 riastrad 275 1.1 riastrad uint8_t FpsEnabled; 276 1.1 riastrad uint8_t MaxPerfLevel; 277 1.1 riastrad uint8_t AllowLowClkInterruptToHost; 278 1.1 riastrad uint8_t FpsRunning; 279 1.1 riastrad 280 1.1 riastrad uint32_t MaxAllowedFrequency; 281 1.1 riastrad 282 1.1 riastrad uint32_t FilteredSclkFrequency; 283 1.1 riastrad uint32_t LastSclkFrequency; 284 1.1 riastrad uint32_t FilteredSclkFrequencyCnt; 285 1.1 riastrad 286 1.1 riastrad uint8_t LedEnable; 287 1.1 riastrad uint8_t LedPin0; 288 1.1 riastrad uint8_t LedPin1; 289 1.1 riastrad uint8_t LedPin2; 290 1.1 riastrad uint32_t LedAndMask; 291 1.1 riastrad 292 1.1 riastrad uint16_t FpsAlpha; 293 1.1 riastrad uint16_t DeltaTime; 294 1.1 riastrad uint32_t CurrentFps; 295 1.1 riastrad uint32_t FilteredFps; 296 1.1 riastrad uint32_t FrameCount; 297 1.1 riastrad uint32_t FrameCountLast; 298 1.1 riastrad uint16_t FpsTargetScalar; 299 1.1 riastrad uint16_t FpsWaterfallLimitScalar; 300 1.1 riastrad uint16_t FpsAlphaScalar; 301 1.1 riastrad uint16_t spare8; 302 1.1 riastrad SMU7_HystController_Data HystControllerData; 303 1.1 riastrad }; 304 1.1 riastrad 305 1.1 riastrad typedef struct SMU7_LocalDpmScoreboard SMU7_LocalDpmScoreboard; 306 1.1 riastrad 307 1.1 riastrad #define SMU7_MAX_VOLTAGE_CLIENTS 12 308 1.1 riastrad 309 1.1 riastrad typedef uint8_t (*VoltageChangeHandler_t)(uint16_t, uint8_t); 310 1.1 riastrad 311 1.1 riastrad #define VDDC_MASK 0x00007FFF 312 1.1 riastrad #define VDDC_SHIFT 0 313 1.1 riastrad #define VDDCI_MASK 0x3FFF8000 314 1.1 riastrad #define VDDCI_SHIFT 15 315 1.1 riastrad #define PHASES_MASK 0xC0000000 316 1.1 riastrad #define PHASES_SHIFT 30 317 1.1 riastrad 318 1.1 riastrad typedef uint32_t SMU_VoltageLevel; 319 1.1 riastrad 320 1.1 riastrad struct SMU7_VoltageScoreboard 321 1.1 riastrad { 322 1.1 riastrad SMU_VoltageLevel TargetVoltage; 323 1.1 riastrad uint16_t MaxVid; 324 1.1 riastrad uint8_t HighestVidOffset; 325 1.1 riastrad uint8_t CurrentVidOffset; 326 1.1 riastrad 327 1.1 riastrad uint16_t CurrentVddc; 328 1.1 riastrad uint16_t CurrentVddci; 329 1.1 riastrad 330 1.1 riastrad 331 1.1 riastrad uint8_t ControllerBusy; 332 1.1 riastrad uint8_t CurrentVid; 333 1.1 riastrad uint8_t CurrentVddciVid; 334 1.1 riastrad uint8_t padding; 335 1.1 riastrad 336 1.1 riastrad SMU_VoltageLevel RequestedVoltage[SMU7_MAX_VOLTAGE_CLIENTS]; 337 1.1 riastrad SMU_VoltageLevel TargetVoltageState; 338 1.1 riastrad uint8_t EnabledRequest[SMU7_MAX_VOLTAGE_CLIENTS]; 339 1.1 riastrad 340 1.1 riastrad uint8_t padding2; 341 1.1 riastrad uint8_t padding3; 342 1.1 riastrad uint8_t ControllerEnable; 343 1.1 riastrad uint8_t ControllerRunning; 344 1.1 riastrad uint16_t CurrentStdVoltageHiSidd; 345 1.1 riastrad uint16_t CurrentStdVoltageLoSidd; 346 1.1 riastrad uint8_t OverrideVoltage; 347 1.1 riastrad uint8_t padding4; 348 1.1 riastrad uint8_t padding5; 349 1.1 riastrad uint8_t CurrentPhases; 350 1.1 riastrad 351 1.1 riastrad VoltageChangeHandler_t ChangeVddc; 352 1.1 riastrad 353 1.1 riastrad VoltageChangeHandler_t ChangeVddci; 354 1.1 riastrad VoltageChangeHandler_t ChangePhase; 355 1.1 riastrad VoltageChangeHandler_t ChangeMvdd; 356 1.1 riastrad 357 1.1 riastrad VoltageChangeHandler_t functionLinks[6]; 358 1.1 riastrad 359 1.1 riastrad uint16_t * VddcFollower1; 360 1.1 riastrad 361 1.1 riastrad int16_t Driver_OD_RequestedVidOffset1; 362 1.1 riastrad int16_t Driver_OD_RequestedVidOffset2; 363 1.1 riastrad 364 1.1 riastrad }; 365 1.1 riastrad 366 1.1 riastrad typedef struct SMU7_VoltageScoreboard SMU7_VoltageScoreboard; 367 1.1 riastrad 368 1.1 riastrad // ------------------------------------------------------------------------------------------------------------------------- 369 1.1 riastrad #define SMU7_MAX_PCIE_LINK_SPEEDS 3 /* 0:Gen1 1:Gen2 2:Gen3 */ 370 1.1 riastrad 371 1.1 riastrad struct SMU7_PCIeLinkSpeedScoreboard 372 1.1 riastrad { 373 1.1 riastrad uint8_t DpmEnable; 374 1.1 riastrad uint8_t DpmRunning; 375 1.1 riastrad uint8_t DpmForce; 376 1.1 riastrad uint8_t DpmForceLevel; 377 1.1 riastrad 378 1.1 riastrad uint8_t CurrentLinkSpeed; 379 1.1 riastrad uint8_t EnabledLevelsChange; 380 1.1 riastrad uint16_t AutoDpmInterval; 381 1.1 riastrad 382 1.1 riastrad uint16_t AutoDpmRange; 383 1.1 riastrad uint16_t AutoDpmCount; 384 1.1 riastrad 385 1.1 riastrad uint8_t DpmMode; 386 1.1 riastrad uint8_t AcpiReq; 387 1.1 riastrad uint8_t AcpiAck; 388 1.1 riastrad uint8_t CurrentLinkLevel; 389 1.1 riastrad 390 1.1 riastrad }; 391 1.1 riastrad 392 1.1 riastrad typedef struct SMU7_PCIeLinkSpeedScoreboard SMU7_PCIeLinkSpeedScoreboard; 393 1.1 riastrad 394 1.1 riastrad // -------------------------------------------------------- CAC table ------------------------------------------------------ 395 1.1 riastrad #define SMU7_LKGE_LUT_NUM_OF_TEMP_ENTRIES 16 396 1.1 riastrad #define SMU7_LKGE_LUT_NUM_OF_VOLT_ENTRIES 16 397 1.1 riastrad 398 1.1 riastrad #define SMU7_SCALE_I 7 399 1.1 riastrad #define SMU7_SCALE_R 12 400 1.1 riastrad 401 1.1 riastrad struct SMU7_PowerScoreboard 402 1.1 riastrad { 403 1.1 riastrad uint32_t GpuPower; 404 1.1 riastrad 405 1.1 riastrad uint32_t VddcPower; 406 1.1 riastrad uint32_t VddcVoltage; 407 1.1 riastrad uint32_t VddcCurrent; 408 1.1 riastrad 409 1.1 riastrad uint32_t MvddPower; 410 1.1 riastrad uint32_t MvddVoltage; 411 1.1 riastrad uint32_t MvddCurrent; 412 1.1 riastrad 413 1.1 riastrad uint32_t RocPower; 414 1.1 riastrad 415 1.1 riastrad uint16_t Telemetry_1_slope; 416 1.1 riastrad uint16_t Telemetry_2_slope; 417 1.1 riastrad int32_t Telemetry_1_offset; 418 1.1 riastrad int32_t Telemetry_2_offset; 419 1.1 riastrad }; 420 1.1 riastrad typedef struct SMU7_PowerScoreboard SMU7_PowerScoreboard; 421 1.1 riastrad 422 1.1 riastrad // For FeatureEnables: 423 1.1 riastrad #define SMU7_SCLK_DPM_CONFIG_MASK 0x01 424 1.1 riastrad #define SMU7_VOLTAGE_CONTROLLER_CONFIG_MASK 0x02 425 1.1 riastrad #define SMU7_THERMAL_CONTROLLER_CONFIG_MASK 0x04 426 1.1 riastrad #define SMU7_MCLK_DPM_CONFIG_MASK 0x08 427 1.1 riastrad #define SMU7_UVD_DPM_CONFIG_MASK 0x10 428 1.1 riastrad #define SMU7_VCE_DPM_CONFIG_MASK 0x20 429 1.1 riastrad #define SMU7_ACP_DPM_CONFIG_MASK 0x40 430 1.1 riastrad #define SMU7_SAMU_DPM_CONFIG_MASK 0x80 431 1.1 riastrad #define SMU7_PCIEGEN_DPM_CONFIG_MASK 0x100 432 1.1 riastrad 433 1.1 riastrad #define SMU7_ACP_MCLK_HANDSHAKE_DISABLE 0x00000001 434 1.1 riastrad #define SMU7_ACP_SCLK_HANDSHAKE_DISABLE 0x00000002 435 1.1 riastrad #define SMU7_UVD_MCLK_HANDSHAKE_DISABLE 0x00000100 436 1.1 riastrad #define SMU7_UVD_SCLK_HANDSHAKE_DISABLE 0x00000200 437 1.1 riastrad #define SMU7_VCE_MCLK_HANDSHAKE_DISABLE 0x00010000 438 1.1 riastrad #define SMU7_VCE_SCLK_HANDSHAKE_DISABLE 0x00020000 439 1.1 riastrad 440 1.1 riastrad // All 'soft registers' should be uint32_t. 441 1.1 riastrad struct SMU73_SoftRegisters 442 1.1 riastrad { 443 1.1 riastrad uint32_t RefClockFrequency; 444 1.1 riastrad uint32_t PmTimerPeriod; 445 1.1 riastrad uint32_t FeatureEnables; 446 1.1 riastrad 447 1.1 riastrad uint32_t PreVBlankGap; 448 1.1 riastrad uint32_t VBlankTimeout; 449 1.1 riastrad uint32_t TrainTimeGap; 450 1.1 riastrad 451 1.1 riastrad uint32_t MvddSwitchTime; 452 1.1 riastrad uint32_t LongestAcpiTrainTime; 453 1.1 riastrad uint32_t AcpiDelay; 454 1.1 riastrad uint32_t G5TrainTime; 455 1.1 riastrad uint32_t DelayMpllPwron; 456 1.1 riastrad uint32_t VoltageChangeTimeout; 457 1.1 riastrad 458 1.1 riastrad uint32_t HandshakeDisables; 459 1.1 riastrad 460 1.1 riastrad uint8_t DisplayPhy1Config; 461 1.1 riastrad uint8_t DisplayPhy2Config; 462 1.1 riastrad uint8_t DisplayPhy3Config; 463 1.1 riastrad uint8_t DisplayPhy4Config; 464 1.1 riastrad 465 1.1 riastrad uint8_t DisplayPhy5Config; 466 1.1 riastrad uint8_t DisplayPhy6Config; 467 1.1 riastrad uint8_t DisplayPhy7Config; 468 1.1 riastrad uint8_t DisplayPhy8Config; 469 1.1 riastrad 470 1.1 riastrad uint32_t AverageGraphicsActivity; 471 1.1 riastrad uint32_t AverageMemoryActivity; 472 1.1 riastrad uint32_t AverageGioActivity; 473 1.1 riastrad 474 1.1 riastrad uint8_t SClkDpmEnabledLevels; 475 1.1 riastrad uint8_t MClkDpmEnabledLevels; 476 1.1 riastrad uint8_t LClkDpmEnabledLevels; 477 1.1 riastrad uint8_t PCIeDpmEnabledLevels; 478 1.1 riastrad 479 1.1 riastrad uint8_t UVDDpmEnabledLevels; 480 1.1 riastrad uint8_t SAMUDpmEnabledLevels; 481 1.1 riastrad uint8_t ACPDpmEnabledLevels; 482 1.1 riastrad uint8_t VCEDpmEnabledLevels; 483 1.1 riastrad 484 1.1 riastrad uint32_t DRAM_LOG_ADDR_H; 485 1.1 riastrad uint32_t DRAM_LOG_ADDR_L; 486 1.1 riastrad uint32_t DRAM_LOG_PHY_ADDR_H; 487 1.1 riastrad uint32_t DRAM_LOG_PHY_ADDR_L; 488 1.1 riastrad uint32_t DRAM_LOG_BUFF_SIZE; 489 1.1 riastrad uint32_t UlvEnterCount; 490 1.1 riastrad uint32_t UlvTime; 491 1.1 riastrad uint32_t UcodeLoadStatus; 492 1.1 riastrad uint32_t Reserved[2]; 493 1.1 riastrad 494 1.1 riastrad }; 495 1.1 riastrad 496 1.1 riastrad typedef struct SMU73_SoftRegisters SMU73_SoftRegisters; 497 1.1 riastrad 498 1.1 riastrad struct SMU73_Firmware_Header 499 1.1 riastrad { 500 1.1 riastrad uint32_t Digest[5]; 501 1.1 riastrad uint32_t Version; 502 1.1 riastrad uint32_t HeaderSize; 503 1.1 riastrad uint32_t Flags; 504 1.1 riastrad uint32_t EntryPoint; 505 1.1 riastrad uint32_t CodeSize; 506 1.1 riastrad uint32_t ImageSize; 507 1.1 riastrad 508 1.1 riastrad uint32_t Rtos; 509 1.1 riastrad uint32_t SoftRegisters; 510 1.1 riastrad uint32_t DpmTable; 511 1.1 riastrad uint32_t FanTable; 512 1.1 riastrad uint32_t CacConfigTable; 513 1.1 riastrad uint32_t CacStatusTable; 514 1.1 riastrad 515 1.1 riastrad 516 1.1 riastrad uint32_t mcRegisterTable; 517 1.1 riastrad 518 1.1 riastrad 519 1.1 riastrad uint32_t mcArbDramTimingTable; 520 1.1 riastrad 521 1.1 riastrad 522 1.1 riastrad 523 1.1 riastrad 524 1.1 riastrad uint32_t PmFuseTable; 525 1.1 riastrad uint32_t Globals; 526 1.1 riastrad uint32_t ClockStretcherTable; 527 1.1 riastrad uint32_t Reserved[41]; 528 1.1 riastrad uint32_t Signature; 529 1.1 riastrad }; 530 1.1 riastrad 531 1.1 riastrad typedef struct SMU73_Firmware_Header SMU73_Firmware_Header; 532 1.1 riastrad 533 1.1 riastrad #define SMU7_FIRMWARE_HEADER_LOCATION 0x20000 534 1.1 riastrad 535 1.1 riastrad enum DisplayConfig { 536 1.1 riastrad PowerDown = 1, 537 1.1 riastrad DP54x4, 538 1.1 riastrad DP54x2, 539 1.1 riastrad DP54x1, 540 1.1 riastrad DP27x4, 541 1.1 riastrad DP27x2, 542 1.1 riastrad DP27x1, 543 1.1 riastrad HDMI297, 544 1.1 riastrad HDMI162, 545 1.1 riastrad LVDS, 546 1.1 riastrad DP324x4, 547 1.1 riastrad DP324x2, 548 1.1 riastrad DP324x1 549 1.1 riastrad }; 550 1.1 riastrad 551 1.1 riastrad 552 1.1 riastrad #define MC_BLOCK_COUNT 1 553 1.1 riastrad #define CPL_BLOCK_COUNT 5 554 1.1 riastrad #define SE_BLOCK_COUNT 15 555 1.1 riastrad #define GC_BLOCK_COUNT 24 556 1.1 riastrad 557 1.1 riastrad struct SMU7_Local_Cac { 558 1.1 riastrad uint8_t BlockId; 559 1.1 riastrad uint8_t SignalId; 560 1.1 riastrad uint8_t Threshold; 561 1.1 riastrad uint8_t Padding; 562 1.1 riastrad }; 563 1.1 riastrad 564 1.1 riastrad typedef struct SMU7_Local_Cac SMU7_Local_Cac; 565 1.1 riastrad 566 1.1 riastrad struct SMU7_Local_Cac_Table { 567 1.1 riastrad 568 1.1 riastrad SMU7_Local_Cac CplLocalCac[CPL_BLOCK_COUNT]; 569 1.1 riastrad SMU7_Local_Cac McLocalCac[MC_BLOCK_COUNT]; 570 1.1 riastrad SMU7_Local_Cac SeLocalCac[SE_BLOCK_COUNT]; 571 1.1 riastrad SMU7_Local_Cac GcLocalCac[GC_BLOCK_COUNT]; 572 1.1 riastrad }; 573 1.1 riastrad 574 1.1 riastrad typedef struct SMU7_Local_Cac_Table SMU7_Local_Cac_Table; 575 1.1 riastrad 576 1.1 riastrad #if !defined(SMC_MICROCODE) 577 1.1 riastrad #pragma pack(pop) 578 1.1 riastrad #endif 579 1.1 riastrad 580 1.1 riastrad // Description of Clock Gating bitmask for Tonga: 581 1.1 riastrad // System Clock Gating 582 1.1 riastrad #define CG_SYS_BITMASK_FIRST_BIT 0 // First bit of Sys CG bitmask 583 1.1 riastrad #define CG_SYS_BITMASK_LAST_BIT 9 // Last bit of Sys CG bitmask 584 1.1 riastrad #define CG_SYS_BIF_MGLS_SHIFT 0 585 1.1 riastrad #define CG_SYS_ROM_SHIFT 1 586 1.1 riastrad #define CG_SYS_MC_MGCG_SHIFT 2 587 1.1 riastrad #define CG_SYS_MC_MGLS_SHIFT 3 588 1.1 riastrad #define CG_SYS_SDMA_MGCG_SHIFT 4 589 1.1 riastrad #define CG_SYS_SDMA_MGLS_SHIFT 5 590 1.1 riastrad #define CG_SYS_DRM_MGCG_SHIFT 6 591 1.1 riastrad #define CG_SYS_HDP_MGCG_SHIFT 7 592 1.1 riastrad #define CG_SYS_HDP_MGLS_SHIFT 8 593 1.1 riastrad #define CG_SYS_DRM_MGLS_SHIFT 9 594 1.1 riastrad 595 1.1 riastrad #define CG_SYS_BIF_MGLS_MASK 0x1 596 1.1 riastrad #define CG_SYS_ROM_MASK 0x2 597 1.1 riastrad #define CG_SYS_MC_MGCG_MASK 0x4 598 1.1 riastrad #define CG_SYS_MC_MGLS_MASK 0x8 599 1.1 riastrad #define CG_SYS_SDMA_MGCG_MASK 0x10 600 1.1 riastrad #define CG_SYS_SDMA_MGLS_MASK 0x20 601 1.1 riastrad #define CG_SYS_DRM_MGCG_MASK 0x40 602 1.1 riastrad #define CG_SYS_HDP_MGCG_MASK 0x80 603 1.1 riastrad #define CG_SYS_HDP_MGLS_MASK 0x100 604 1.1 riastrad #define CG_SYS_DRM_MGLS_MASK 0x200 605 1.1 riastrad 606 1.1 riastrad // Graphics Clock Gating 607 1.1 riastrad #define CG_GFX_BITMASK_FIRST_BIT 16 // First bit of Gfx CG bitmask 608 1.1 riastrad #define CG_GFX_BITMASK_LAST_BIT 20 // Last bit of Gfx CG bitmask 609 1.1 riastrad #define CG_GFX_CGCG_SHIFT 16 610 1.1 riastrad #define CG_GFX_CGLS_SHIFT 17 611 1.1 riastrad #define CG_CPF_MGCG_SHIFT 18 612 1.1 riastrad #define CG_RLC_MGCG_SHIFT 19 613 1.1 riastrad #define CG_GFX_OTHERS_MGCG_SHIFT 20 614 1.1 riastrad 615 1.1 riastrad #define CG_GFX_CGCG_MASK 0x00010000 616 1.1 riastrad #define CG_GFX_CGLS_MASK 0x00020000 617 1.1 riastrad #define CG_CPF_MGCG_MASK 0x00040000 618 1.1 riastrad #define CG_RLC_MGCG_MASK 0x00080000 619 1.1 riastrad #define CG_GFX_OTHERS_MGCG_MASK 0x00100000 620 1.1 riastrad 621 1.1 riastrad 622 1.1 riastrad 623 1.1 riastrad // Voltage Regulator Configuration 624 1.1 riastrad // VR Config info is contained in dpmTable.VRConfig 625 1.1 riastrad 626 1.1 riastrad #define VRCONF_VDDC_MASK 0x000000FF 627 1.1 riastrad #define VRCONF_VDDC_SHIFT 0 628 1.1 riastrad #define VRCONF_VDDGFX_MASK 0x0000FF00 629 1.1 riastrad #define VRCONF_VDDGFX_SHIFT 8 630 1.1 riastrad #define VRCONF_VDDCI_MASK 0x00FF0000 631 1.1 riastrad #define VRCONF_VDDCI_SHIFT 16 632 1.1 riastrad #define VRCONF_MVDD_MASK 0xFF000000 633 1.1 riastrad #define VRCONF_MVDD_SHIFT 24 634 1.1 riastrad 635 1.1 riastrad #define VR_MERGED_WITH_VDDC 0 636 1.1 riastrad #define VR_SVI2_PLANE_1 1 637 1.1 riastrad #define VR_SVI2_PLANE_2 2 638 1.1 riastrad #define VR_SMIO_PATTERN_1 3 639 1.1 riastrad #define VR_SMIO_PATTERN_2 4 640 1.1 riastrad #define VR_STATIC_VOLTAGE 5 641 1.1 riastrad 642 1.1 riastrad // Clock Stretcher Configuration 643 1.1 riastrad 644 1.1 riastrad #define CLOCK_STRETCHER_MAX_ENTRIES 0x4 645 1.1 riastrad #define CKS_LOOKUPTable_MAX_ENTRIES 0x4 646 1.1 riastrad 647 1.1 riastrad // The 'settings' field is subdivided in the following way: 648 1.1 riastrad #define CLOCK_STRETCHER_SETTING_DDT_MASK 0x01 649 1.1 riastrad #define CLOCK_STRETCHER_SETTING_DDT_SHIFT 0x0 650 1.1 riastrad #define CLOCK_STRETCHER_SETTING_STRETCH_AMOUNT_MASK 0x1E 651 1.1 riastrad #define CLOCK_STRETCHER_SETTING_STRETCH_AMOUNT_SHIFT 0x1 652 1.1 riastrad #define CLOCK_STRETCHER_SETTING_ENABLE_MASK 0x80 653 1.1 riastrad #define CLOCK_STRETCHER_SETTING_ENABLE_SHIFT 0x7 654 1.1 riastrad 655 1.1 riastrad struct SMU_ClockStretcherDataTableEntry { 656 1.1 riastrad uint8_t minVID; 657 1.1 riastrad uint8_t maxVID; 658 1.1 riastrad 659 1.1 riastrad 660 1.1 riastrad uint16_t setting; 661 1.1 riastrad }; 662 1.1 riastrad typedef struct SMU_ClockStretcherDataTableEntry SMU_ClockStretcherDataTableEntry; 663 1.1 riastrad 664 1.1 riastrad struct SMU_ClockStretcherDataTable { 665 1.1 riastrad SMU_ClockStretcherDataTableEntry ClockStretcherDataTableEntry[CLOCK_STRETCHER_MAX_ENTRIES]; 666 1.1 riastrad }; 667 1.1 riastrad typedef struct SMU_ClockStretcherDataTable SMU_ClockStretcherDataTable; 668 1.1 riastrad 669 1.1 riastrad struct SMU_CKS_LOOKUPTableEntry { 670 1.1 riastrad uint16_t minFreq; 671 1.1 riastrad uint16_t maxFreq; 672 1.1 riastrad 673 1.1 riastrad uint8_t setting; 674 1.1 riastrad uint8_t padding[3]; 675 1.1 riastrad }; 676 1.1 riastrad typedef struct SMU_CKS_LOOKUPTableEntry SMU_CKS_LOOKUPTableEntry; 677 1.1 riastrad 678 1.1 riastrad struct SMU_CKS_LOOKUPTable { 679 1.1 riastrad SMU_CKS_LOOKUPTableEntry CKS_LOOKUPTableEntry[CKS_LOOKUPTable_MAX_ENTRIES]; 680 1.1 riastrad }; 681 1.1 riastrad typedef struct SMU_CKS_LOOKUPTable SMU_CKS_LOOKUPTable; 682 1.1 riastrad 683 1.1 riastrad struct AgmAvfsData_t { 684 1.1 riastrad uint16_t avgPsmCount[28]; 685 1.1 riastrad uint16_t minPsmCount[28]; 686 1.1 riastrad }; 687 1.1 riastrad typedef struct AgmAvfsData_t AgmAvfsData_t; 688 1.1 riastrad 689 1.1 riastrad // AVFS DEFINES 690 1.1 riastrad 691 1.1 riastrad enum VFT_COLUMNS { 692 1.1 riastrad SCLK0, 693 1.1 riastrad SCLK1, 694 1.1 riastrad SCLK2, 695 1.1 riastrad SCLK3, 696 1.1 riastrad SCLK4, 697 1.1 riastrad SCLK5, 698 1.1 riastrad SCLK6, 699 1.1 riastrad SCLK7, 700 1.1 riastrad 701 1.1 riastrad NUM_VFT_COLUMNS 702 1.1 riastrad }; 703 1.1 riastrad 704 1.1 riastrad #define TEMP_RANGE_MAXSTEPS 12 705 1.1 riastrad struct VFT_CELL_t { 706 1.1 riastrad uint16_t Voltage; 707 1.1 riastrad }; 708 1.1 riastrad 709 1.1 riastrad typedef struct VFT_CELL_t VFT_CELL_t; 710 1.1 riastrad 711 1.1 riastrad struct VFT_TABLE_t { 712 1.1 riastrad VFT_CELL_t Cell[TEMP_RANGE_MAXSTEPS][NUM_VFT_COLUMNS]; 713 1.1 riastrad uint16_t AvfsGbv [NUM_VFT_COLUMNS]; 714 1.1 riastrad uint16_t BtcGbv [NUM_VFT_COLUMNS]; 715 1.1 riastrad uint16_t Temperature [TEMP_RANGE_MAXSTEPS]; 716 1.1 riastrad 717 1.1 riastrad uint8_t NumTemperatureSteps; 718 1.1 riastrad uint8_t padding[3]; 719 1.1 riastrad }; 720 1.1 riastrad typedef struct VFT_TABLE_t VFT_TABLE_t; 721 1.1 riastrad 722 1.1 riastrad #endif 723