1 1.1 riastrad /* $NetBSD: smu75.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 2017 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 SMU75_H 26 1.1 riastrad #define SMU75_H 27 1.1 riastrad 28 1.1 riastrad #pragma pack(push, 1) 29 1.1 riastrad 30 1.1 riastrad typedef struct { 31 1.1 riastrad uint32_t high; 32 1.1 riastrad uint32_t low; 33 1.1 riastrad } data_64_t; 34 1.1 riastrad 35 1.1 riastrad typedef struct { 36 1.1 riastrad data_64_t high; 37 1.1 riastrad data_64_t low; 38 1.1 riastrad } data_128_t; 39 1.1 riastrad 40 1.1 riastrad #define SMU__DGPU_ONLY 41 1.1 riastrad 42 1.1 riastrad #define SMU__NUM_SCLK_DPM_STATE 8 43 1.1 riastrad #define SMU__NUM_MCLK_DPM_LEVELS 4 44 1.1 riastrad #define SMU__NUM_LCLK_DPM_LEVELS 8 45 1.1 riastrad #define SMU__NUM_PCIE_DPM_LEVELS 8 46 1.1 riastrad 47 1.1 riastrad #define SMU7_CONTEXT_ID_SMC 1 48 1.1 riastrad #define SMU7_CONTEXT_ID_VBIOS 2 49 1.1 riastrad 50 1.1 riastrad #define SMU75_MAX_LEVELS_VDDC 16 51 1.1 riastrad #define SMU75_MAX_LEVELS_VDDGFX 16 52 1.1 riastrad #define SMU75_MAX_LEVELS_VDDCI 8 53 1.1 riastrad #define SMU75_MAX_LEVELS_MVDD 4 54 1.1 riastrad 55 1.1 riastrad #define SMU_MAX_SMIO_LEVELS 4 56 1.1 riastrad 57 1.1 riastrad #define SMU75_MAX_LEVELS_GRAPHICS SMU__NUM_SCLK_DPM_STATE 58 1.1 riastrad #define SMU75_MAX_LEVELS_MEMORY SMU__NUM_MCLK_DPM_LEVELS 59 1.1 riastrad #define SMU75_MAX_LEVELS_GIO SMU__NUM_LCLK_DPM_LEVELS 60 1.1 riastrad #define SMU75_MAX_LEVELS_LINK SMU__NUM_PCIE_DPM_LEVELS 61 1.1 riastrad #define SMU75_MAX_LEVELS_UVD 8 62 1.1 riastrad #define SMU75_MAX_LEVELS_VCE 8 63 1.1 riastrad #define SMU75_MAX_LEVELS_ACP 8 64 1.1 riastrad #define SMU75_MAX_LEVELS_SAMU 8 65 1.1 riastrad #define SMU75_MAX_ENTRIES_SMIO 32 66 1.1 riastrad 67 1.1 riastrad #define DPM_NO_LIMIT 0 68 1.1 riastrad #define DPM_NO_UP 1 69 1.1 riastrad #define DPM_GO_DOWN 2 70 1.1 riastrad #define DPM_GO_UP 3 71 1.1 riastrad 72 1.1 riastrad #define SMU7_FIRST_DPM_GRAPHICS_LEVEL 0 73 1.1 riastrad #define SMU7_FIRST_DPM_MEMORY_LEVEL 0 74 1.1 riastrad 75 1.1 riastrad #define GPIO_CLAMP_MODE_VRHOT 1 76 1.1 riastrad #define GPIO_CLAMP_MODE_THERM 2 77 1.1 riastrad #define GPIO_CLAMP_MODE_DC 4 78 1.1 riastrad 79 1.1 riastrad #define SCRATCH_B_TARG_PCIE_INDEX_SHIFT 0 80 1.1 riastrad #define SCRATCH_B_TARG_PCIE_INDEX_MASK (0x7<<SCRATCH_B_TARG_PCIE_INDEX_SHIFT) 81 1.1 riastrad #define SCRATCH_B_CURR_PCIE_INDEX_SHIFT 3 82 1.1 riastrad #define SCRATCH_B_CURR_PCIE_INDEX_MASK (0x7<<SCRATCH_B_CURR_PCIE_INDEX_SHIFT) 83 1.1 riastrad #define SCRATCH_B_TARG_UVD_INDEX_SHIFT 6 84 1.1 riastrad #define SCRATCH_B_TARG_UVD_INDEX_MASK (0x7<<SCRATCH_B_TARG_UVD_INDEX_SHIFT) 85 1.1 riastrad #define SCRATCH_B_CURR_UVD_INDEX_SHIFT 9 86 1.1 riastrad #define SCRATCH_B_CURR_UVD_INDEX_MASK (0x7<<SCRATCH_B_CURR_UVD_INDEX_SHIFT) 87 1.1 riastrad #define SCRATCH_B_TARG_VCE_INDEX_SHIFT 12 88 1.1 riastrad #define SCRATCH_B_TARG_VCE_INDEX_MASK (0x7<<SCRATCH_B_TARG_VCE_INDEX_SHIFT) 89 1.1 riastrad #define SCRATCH_B_CURR_VCE_INDEX_SHIFT 15 90 1.1 riastrad #define SCRATCH_B_CURR_VCE_INDEX_MASK (0x7<<SCRATCH_B_CURR_VCE_INDEX_SHIFT) 91 1.1 riastrad #define SCRATCH_B_TARG_ACP_INDEX_SHIFT 18 92 1.1 riastrad #define SCRATCH_B_TARG_ACP_INDEX_MASK (0x7<<SCRATCH_B_TARG_ACP_INDEX_SHIFT) 93 1.1 riastrad #define SCRATCH_B_CURR_ACP_INDEX_SHIFT 21 94 1.1 riastrad #define SCRATCH_B_CURR_ACP_INDEX_MASK (0x7<<SCRATCH_B_CURR_ACP_INDEX_SHIFT) 95 1.1 riastrad #define SCRATCH_B_TARG_SAMU_INDEX_SHIFT 24 96 1.1 riastrad #define SCRATCH_B_TARG_SAMU_INDEX_MASK (0x7<<SCRATCH_B_TARG_SAMU_INDEX_SHIFT) 97 1.1 riastrad #define SCRATCH_B_CURR_SAMU_INDEX_SHIFT 27 98 1.1 riastrad #define SCRATCH_B_CURR_SAMU_INDEX_MASK (0x7<<SCRATCH_B_CURR_SAMU_INDEX_SHIFT) 99 1.1 riastrad 100 1.1 riastrad /* Virtualization Defines */ 101 1.1 riastrad #define CG_XDMA_MASK 0x1 102 1.1 riastrad #define CG_XDMA_SHIFT 0 103 1.1 riastrad #define CG_UVD_MASK 0x2 104 1.1 riastrad #define CG_UVD_SHIFT 1 105 1.1 riastrad #define CG_VCE_MASK 0x4 106 1.1 riastrad #define CG_VCE_SHIFT 2 107 1.1 riastrad #define CG_SAMU_MASK 0x8 108 1.1 riastrad #define CG_SAMU_SHIFT 3 109 1.1 riastrad #define CG_GFX_MASK 0x10 110 1.1 riastrad #define CG_GFX_SHIFT 4 111 1.1 riastrad #define CG_SDMA_MASK 0x20 112 1.1 riastrad #define CG_SDMA_SHIFT 5 113 1.1 riastrad #define CG_HDP_MASK 0x40 114 1.1 riastrad #define CG_HDP_SHIFT 6 115 1.1 riastrad #define CG_MC_MASK 0x80 116 1.1 riastrad #define CG_MC_SHIFT 7 117 1.1 riastrad #define CG_DRM_MASK 0x100 118 1.1 riastrad #define CG_DRM_SHIFT 8 119 1.1 riastrad #define CG_ROM_MASK 0x200 120 1.1 riastrad #define CG_ROM_SHIFT 9 121 1.1 riastrad #define CG_BIF_MASK 0x400 122 1.1 riastrad #define CG_BIF_SHIFT 10 123 1.1 riastrad 124 1.1 riastrad #if defined SMU__DGPU_ONLY 125 1.1 riastrad #define SMU75_DTE_ITERATIONS 5 126 1.1 riastrad #define SMU75_DTE_SOURCES 3 127 1.1 riastrad #define SMU75_DTE_SINKS 1 128 1.1 riastrad #define SMU75_NUM_CPU_TES 0 129 1.1 riastrad #define SMU75_NUM_GPU_TES 1 130 1.1 riastrad #define SMU75_NUM_NON_TES 2 131 1.1 riastrad #define SMU75_DTE_FAN_SCALAR_MIN 0x100 132 1.1 riastrad #define SMU75_DTE_FAN_SCALAR_MAX 0x166 133 1.1 riastrad #define SMU75_DTE_FAN_TEMP_MAX 93 134 1.1 riastrad #define SMU75_DTE_FAN_TEMP_MIN 83 135 1.1 riastrad #endif 136 1.1 riastrad #define SMU75_THERMAL_INPUT_LOOP_COUNT 2 137 1.1 riastrad #define SMU75_THERMAL_CLAMP_MODE_COUNT 2 138 1.1 riastrad 139 1.1 riastrad #define EXP_M1_1 93 140 1.1 riastrad #define EXP_M2_1 195759 141 1.1 riastrad #define EXP_B_1 111176531 142 1.1 riastrad 143 1.1 riastrad #define EXP_M1_2 67 144 1.1 riastrad #define EXP_M2_2 153720 145 1.1 riastrad #define EXP_B_2 94415767 146 1.1 riastrad 147 1.1 riastrad #define EXP_M1_3 48 148 1.1 riastrad #define EXP_M2_3 119796 149 1.1 riastrad #define EXP_B_3 79195279 150 1.1 riastrad 151 1.1 riastrad #define EXP_M1_4 550 152 1.1 riastrad #define EXP_M2_4 1484190 153 1.1 riastrad #define EXP_B_4 1051432828 154 1.1 riastrad 155 1.1 riastrad #define EXP_M1_5 394 156 1.1 riastrad #define EXP_M2_5 1143049 157 1.1 riastrad #define EXP_B_5 864288432 158 1.1 riastrad 159 1.1 riastrad struct SMU7_HystController_Data { 160 1.1 riastrad uint16_t waterfall_up; 161 1.1 riastrad uint16_t waterfall_down; 162 1.1 riastrad uint16_t waterfall_limit; 163 1.1 riastrad uint16_t release_cnt; 164 1.1 riastrad uint16_t release_limit; 165 1.1 riastrad uint16_t spare; 166 1.1 riastrad }; 167 1.1 riastrad 168 1.1 riastrad typedef struct SMU7_HystController_Data SMU7_HystController_Data; 169 1.1 riastrad 170 1.1 riastrad struct SMU75_PIDController { 171 1.1 riastrad uint32_t Ki; 172 1.1 riastrad int32_t LFWindupUpperLim; 173 1.1 riastrad int32_t LFWindupLowerLim; 174 1.1 riastrad uint32_t StatePrecision; 175 1.1 riastrad uint32_t LfPrecision; 176 1.1 riastrad uint32_t LfOffset; 177 1.1 riastrad uint32_t MaxState; 178 1.1 riastrad uint32_t MaxLfFraction; 179 1.1 riastrad uint32_t StateShift; 180 1.1 riastrad }; 181 1.1 riastrad 182 1.1 riastrad typedef struct SMU75_PIDController SMU75_PIDController; 183 1.1 riastrad 184 1.1 riastrad struct SMU7_LocalDpmScoreboard { 185 1.1 riastrad uint32_t PercentageBusy; 186 1.1 riastrad 187 1.1 riastrad int32_t PIDError; 188 1.1 riastrad int32_t PIDIntegral; 189 1.1 riastrad int32_t PIDOutput; 190 1.1 riastrad 191 1.1 riastrad uint32_t SigmaDeltaAccum; 192 1.1 riastrad uint32_t SigmaDeltaOutput; 193 1.1 riastrad uint32_t SigmaDeltaLevel; 194 1.1 riastrad 195 1.1 riastrad uint32_t UtilizationSetpoint; 196 1.1 riastrad 197 1.1 riastrad uint8_t TdpClampMode; 198 1.1 riastrad uint8_t TdcClampMode; 199 1.1 riastrad uint8_t ThermClampMode; 200 1.1 riastrad uint8_t VoltageBusy; 201 1.1 riastrad 202 1.1 riastrad int8_t CurrLevel; 203 1.1 riastrad int8_t TargLevel; 204 1.1 riastrad uint8_t LevelChangeInProgress; 205 1.1 riastrad uint8_t UpHyst; 206 1.1 riastrad 207 1.1 riastrad uint8_t DownHyst; 208 1.1 riastrad uint8_t VoltageDownHyst; 209 1.1 riastrad uint8_t DpmEnable; 210 1.1 riastrad uint8_t DpmRunning; 211 1.1 riastrad 212 1.1 riastrad uint8_t DpmForce; 213 1.1 riastrad uint8_t DpmForceLevel; 214 1.1 riastrad uint8_t DisplayWatermark; 215 1.1 riastrad uint8_t McArbIndex; 216 1.1 riastrad 217 1.1 riastrad uint32_t MinimumPerfSclk; 218 1.1 riastrad 219 1.1 riastrad uint8_t AcpiReq; 220 1.1 riastrad uint8_t AcpiAck; 221 1.1 riastrad uint8_t GfxClkSlow; 222 1.1 riastrad uint8_t GpioClampMode; 223 1.1 riastrad 224 1.1 riastrad uint8_t EnableModeSwitchRLCNotification; 225 1.1 riastrad uint8_t EnabledLevelsChange; 226 1.1 riastrad uint8_t DteClampMode; 227 1.1 riastrad uint8_t FpsClampMode; 228 1.1 riastrad 229 1.1 riastrad uint16_t LevelResidencyCounters [SMU75_MAX_LEVELS_GRAPHICS]; 230 1.1 riastrad uint16_t LevelSwitchCounters [SMU75_MAX_LEVELS_GRAPHICS]; 231 1.1 riastrad 232 1.1 riastrad void (*TargetStateCalculator)(uint8_t); 233 1.1 riastrad void (*SavedTargetStateCalculator)(uint8_t); 234 1.1 riastrad 235 1.1 riastrad uint16_t AutoDpmInterval; 236 1.1 riastrad uint16_t AutoDpmRange; 237 1.1 riastrad 238 1.1 riastrad uint8_t FpsEnabled; 239 1.1 riastrad uint8_t MaxPerfLevel; 240 1.1 riastrad uint8_t AllowLowClkInterruptToHost; 241 1.1 riastrad uint8_t FpsRunning; 242 1.1 riastrad 243 1.1 riastrad uint32_t MaxAllowedFrequency; 244 1.1 riastrad 245 1.1 riastrad uint32_t FilteredSclkFrequency; 246 1.1 riastrad uint32_t LastSclkFrequency; 247 1.1 riastrad uint32_t FilteredSclkFrequencyCnt; 248 1.1 riastrad 249 1.1 riastrad uint8_t MinPerfLevel; 250 1.1 riastrad #ifdef SMU__FIRMWARE_SCKS_PRESENT__1 251 1.1 riastrad uint8_t ScksClampMode; 252 1.1 riastrad uint8_t padding[2]; 253 1.1 riastrad #else 254 1.1 riastrad uint8_t padding[3]; 255 1.1 riastrad #endif 256 1.1 riastrad 257 1.1 riastrad uint16_t FpsAlpha; 258 1.1 riastrad uint16_t DeltaTime; 259 1.1 riastrad uint32_t CurrentFps; 260 1.1 riastrad uint32_t FilteredFps; 261 1.1 riastrad uint32_t FrameCount; 262 1.1 riastrad uint32_t FrameCountLast; 263 1.1 riastrad uint16_t FpsTargetScalar; 264 1.1 riastrad uint16_t FpsWaterfallLimitScalar; 265 1.1 riastrad uint16_t FpsAlphaScalar; 266 1.1 riastrad uint16_t spare8; 267 1.1 riastrad SMU7_HystController_Data HystControllerData; 268 1.1 riastrad }; 269 1.1 riastrad 270 1.1 riastrad typedef struct SMU7_LocalDpmScoreboard SMU7_LocalDpmScoreboard; 271 1.1 riastrad 272 1.1 riastrad #define SMU7_MAX_VOLTAGE_CLIENTS 12 273 1.1 riastrad 274 1.1 riastrad typedef uint8_t (*VoltageChangeHandler_t)(uint16_t, uint8_t); 275 1.1 riastrad 276 1.1 riastrad #define VDDC_MASK 0x00007FFF 277 1.1 riastrad #define VDDC_SHIFT 0 278 1.1 riastrad #define VDDCI_MASK 0x3FFF8000 279 1.1 riastrad #define VDDCI_SHIFT 15 280 1.1 riastrad #define PHASES_MASK 0xC0000000 281 1.1 riastrad #define PHASES_SHIFT 30 282 1.1 riastrad 283 1.1 riastrad typedef uint32_t SMU_VoltageLevel; 284 1.1 riastrad 285 1.1 riastrad struct SMU7_VoltageScoreboard { 286 1.1 riastrad SMU_VoltageLevel TargetVoltage; 287 1.1 riastrad uint16_t MaxVid; 288 1.1 riastrad uint8_t HighestVidOffset; 289 1.1 riastrad uint8_t CurrentVidOffset; 290 1.1 riastrad 291 1.1 riastrad uint16_t CurrentVddc; 292 1.1 riastrad uint16_t CurrentVddci; 293 1.1 riastrad 294 1.1 riastrad uint8_t ControllerBusy; 295 1.1 riastrad uint8_t CurrentVid; 296 1.1 riastrad uint8_t CurrentVddciVid; 297 1.1 riastrad uint8_t padding; 298 1.1 riastrad 299 1.1 riastrad SMU_VoltageLevel RequestedVoltage[SMU7_MAX_VOLTAGE_CLIENTS]; 300 1.1 riastrad SMU_VoltageLevel TargetVoltageState; 301 1.1 riastrad uint8_t EnabledRequest[SMU7_MAX_VOLTAGE_CLIENTS]; 302 1.1 riastrad 303 1.1 riastrad uint8_t padding2; 304 1.1 riastrad uint8_t padding3; 305 1.1 riastrad uint8_t ControllerEnable; 306 1.1 riastrad uint8_t ControllerRunning; 307 1.1 riastrad uint16_t CurrentStdVoltageHiSidd; 308 1.1 riastrad uint16_t CurrentStdVoltageLoSidd; 309 1.1 riastrad uint8_t OverrideVoltage; 310 1.1 riastrad uint8_t padding4; 311 1.1 riastrad uint8_t padding5; 312 1.1 riastrad uint8_t CurrentPhases; 313 1.1 riastrad 314 1.1 riastrad VoltageChangeHandler_t ChangeVddc; 315 1.1 riastrad VoltageChangeHandler_t ChangeVddci; 316 1.1 riastrad VoltageChangeHandler_t ChangePhase; 317 1.1 riastrad VoltageChangeHandler_t ChangeMvdd; 318 1.1 riastrad 319 1.1 riastrad VoltageChangeHandler_t functionLinks[6]; 320 1.1 riastrad 321 1.1 riastrad uint16_t * VddcFollower1; 322 1.1 riastrad int16_t Driver_OD_RequestedVidOffset1; 323 1.1 riastrad int16_t Driver_OD_RequestedVidOffset2; 324 1.1 riastrad }; 325 1.1 riastrad 326 1.1 riastrad typedef struct SMU7_VoltageScoreboard SMU7_VoltageScoreboard; 327 1.1 riastrad 328 1.1 riastrad #define SMU7_MAX_PCIE_LINK_SPEEDS 3 329 1.1 riastrad 330 1.1 riastrad struct SMU7_PCIeLinkSpeedScoreboard { 331 1.1 riastrad uint8_t DpmEnable; 332 1.1 riastrad uint8_t DpmRunning; 333 1.1 riastrad uint8_t DpmForce; 334 1.1 riastrad uint8_t DpmForceLevel; 335 1.1 riastrad 336 1.1 riastrad uint8_t CurrentLinkSpeed; 337 1.1 riastrad uint8_t EnabledLevelsChange; 338 1.1 riastrad uint16_t AutoDpmInterval; 339 1.1 riastrad 340 1.1 riastrad uint16_t AutoDpmRange; 341 1.1 riastrad uint16_t AutoDpmCount; 342 1.1 riastrad 343 1.1 riastrad uint8_t DpmMode; 344 1.1 riastrad uint8_t AcpiReq; 345 1.1 riastrad uint8_t AcpiAck; 346 1.1 riastrad uint8_t CurrentLinkLevel; 347 1.1 riastrad }; 348 1.1 riastrad 349 1.1 riastrad typedef struct SMU7_PCIeLinkSpeedScoreboard SMU7_PCIeLinkSpeedScoreboard; 350 1.1 riastrad 351 1.1 riastrad #define SMU7_LKGE_LUT_NUM_OF_TEMP_ENTRIES 16 352 1.1 riastrad #define SMU7_LKGE_LUT_NUM_OF_VOLT_ENTRIES 16 353 1.1 riastrad 354 1.1 riastrad #define SMU7_SCALE_I 7 355 1.1 riastrad #define SMU7_SCALE_R 12 356 1.1 riastrad 357 1.1 riastrad struct SMU7_PowerScoreboard { 358 1.1 riastrad uint32_t GpuPower; 359 1.1 riastrad 360 1.1 riastrad uint32_t VddcPower; 361 1.1 riastrad uint32_t VddcVoltage; 362 1.1 riastrad uint32_t VddcCurrent; 363 1.1 riastrad 364 1.1 riastrad uint32_t VddciPower; 365 1.1 riastrad uint32_t VddciVoltage; 366 1.1 riastrad uint32_t VddciCurrent; 367 1.1 riastrad 368 1.1 riastrad uint32_t RocPower; 369 1.1 riastrad 370 1.1 riastrad uint16_t Telemetry_1_slope; 371 1.1 riastrad uint16_t Telemetry_2_slope; 372 1.1 riastrad int32_t Telemetry_1_offset; 373 1.1 riastrad int32_t Telemetry_2_offset; 374 1.1 riastrad 375 1.1 riastrad uint8_t MCLK_patch_flag; 376 1.1 riastrad uint8_t reserved[3]; 377 1.1 riastrad }; 378 1.1 riastrad 379 1.1 riastrad typedef struct SMU7_PowerScoreboard SMU7_PowerScoreboard; 380 1.1 riastrad 381 1.1 riastrad #define SMU7_SCLK_DPM_CONFIG_MASK 0x01 382 1.1 riastrad #define SMU7_VOLTAGE_CONTROLLER_CONFIG_MASK 0x02 383 1.1 riastrad #define SMU7_THERMAL_CONTROLLER_CONFIG_MASK 0x04 384 1.1 riastrad #define SMU7_MCLK_DPM_CONFIG_MASK 0x08 385 1.1 riastrad #define SMU7_UVD_DPM_CONFIG_MASK 0x10 386 1.1 riastrad #define SMU7_VCE_DPM_CONFIG_MASK 0x20 387 1.1 riastrad #define SMU7_ACP_DPM_CONFIG_MASK 0x40 388 1.1 riastrad #define SMU7_SAMU_DPM_CONFIG_MASK 0x80 389 1.1 riastrad #define SMU7_PCIEGEN_DPM_CONFIG_MASK 0x100 390 1.1 riastrad 391 1.1 riastrad #define SMU7_ACP_MCLK_HANDSHAKE_DISABLE 0x00000001 392 1.1 riastrad #define SMU7_ACP_SCLK_HANDSHAKE_DISABLE 0x00000002 393 1.1 riastrad #define SMU7_UVD_MCLK_HANDSHAKE_DISABLE 0x00000100 394 1.1 riastrad #define SMU7_UVD_SCLK_HANDSHAKE_DISABLE 0x00000200 395 1.1 riastrad #define SMU7_VCE_MCLK_HANDSHAKE_DISABLE 0x00010000 396 1.1 riastrad #define SMU7_VCE_SCLK_HANDSHAKE_DISABLE 0x00020000 397 1.1 riastrad 398 1.1 riastrad struct SMU75_SoftRegisters { 399 1.1 riastrad uint32_t RefClockFrequency; 400 1.1 riastrad uint32_t PmTimerPeriod; 401 1.1 riastrad uint32_t FeatureEnables; 402 1.1 riastrad #if defined (SMU__DGPU_ONLY) 403 1.1 riastrad uint32_t PreVBlankGap; 404 1.1 riastrad uint32_t VBlankTimeout; 405 1.1 riastrad uint32_t TrainTimeGap; 406 1.1 riastrad uint32_t MvddSwitchTime; 407 1.1 riastrad uint32_t LongestAcpiTrainTime; 408 1.1 riastrad uint32_t AcpiDelay; 409 1.1 riastrad uint32_t G5TrainTime; 410 1.1 riastrad uint32_t DelayMpllPwron; 411 1.1 riastrad uint32_t VoltageChangeTimeout; 412 1.1 riastrad #endif 413 1.1 riastrad uint32_t HandshakeDisables; 414 1.1 riastrad 415 1.1 riastrad uint8_t DisplayPhy1Config; 416 1.1 riastrad uint8_t DisplayPhy2Config; 417 1.1 riastrad uint8_t DisplayPhy3Config; 418 1.1 riastrad uint8_t DisplayPhy4Config; 419 1.1 riastrad 420 1.1 riastrad uint8_t DisplayPhy5Config; 421 1.1 riastrad uint8_t DisplayPhy6Config; 422 1.1 riastrad uint8_t DisplayPhy7Config; 423 1.1 riastrad uint8_t DisplayPhy8Config; 424 1.1 riastrad 425 1.1 riastrad uint32_t AverageGraphicsActivity; 426 1.1 riastrad uint32_t AverageMemoryActivity; 427 1.1 riastrad uint32_t AverageGioActivity; 428 1.1 riastrad 429 1.1 riastrad uint8_t SClkDpmEnabledLevels; 430 1.1 riastrad uint8_t MClkDpmEnabledLevels; 431 1.1 riastrad uint8_t LClkDpmEnabledLevels; 432 1.1 riastrad uint8_t PCIeDpmEnabledLevels; 433 1.1 riastrad 434 1.1 riastrad uint8_t UVDDpmEnabledLevels; 435 1.1 riastrad uint8_t SAMUDpmEnabledLevels; 436 1.1 riastrad uint8_t ACPDpmEnabledLevels; 437 1.1 riastrad uint8_t VCEDpmEnabledLevels; 438 1.1 riastrad 439 1.1 riastrad uint32_t DRAM_LOG_ADDR_H; 440 1.1 riastrad uint32_t DRAM_LOG_ADDR_L; 441 1.1 riastrad uint32_t DRAM_LOG_PHY_ADDR_H; 442 1.1 riastrad uint32_t DRAM_LOG_PHY_ADDR_L; 443 1.1 riastrad uint32_t DRAM_LOG_BUFF_SIZE; 444 1.1 riastrad uint32_t UlvEnterCount; 445 1.1 riastrad uint32_t UlvTime; 446 1.1 riastrad uint32_t UcodeLoadStatus; 447 1.1 riastrad uint32_t AllowMvddSwitch; 448 1.1 riastrad uint8_t Activity_Weight; 449 1.1 riastrad uint8_t Reserved8[3]; 450 1.1 riastrad }; 451 1.1 riastrad 452 1.1 riastrad typedef struct SMU75_SoftRegisters SMU75_SoftRegisters; 453 1.1 riastrad 454 1.1 riastrad struct SMU75_Firmware_Header { 455 1.1 riastrad uint32_t Digest[5]; 456 1.1 riastrad uint32_t Version; 457 1.1 riastrad uint32_t HeaderSize; 458 1.1 riastrad uint32_t Flags; 459 1.1 riastrad uint32_t EntryPoint; 460 1.1 riastrad uint32_t CodeSize; 461 1.1 riastrad uint32_t ImageSize; 462 1.1 riastrad 463 1.1 riastrad uint32_t Rtos; 464 1.1 riastrad uint32_t SoftRegisters; 465 1.1 riastrad uint32_t DpmTable; 466 1.1 riastrad uint32_t FanTable; 467 1.1 riastrad uint32_t CacConfigTable; 468 1.1 riastrad uint32_t CacStatusTable; 469 1.1 riastrad uint32_t mcRegisterTable; 470 1.1 riastrad uint32_t mcArbDramTimingTable; 471 1.1 riastrad uint32_t PmFuseTable; 472 1.1 riastrad uint32_t Globals; 473 1.1 riastrad uint32_t ClockStretcherTable; 474 1.1 riastrad uint32_t VftTable; 475 1.1 riastrad uint32_t Reserved1; 476 1.1 riastrad uint32_t AvfsCksOff_AvfsGbvTable; 477 1.1 riastrad uint32_t AvfsCksOff_BtcGbvTable; 478 1.1 riastrad uint32_t MM_AvfsTable; 479 1.1 riastrad uint32_t PowerSharingTable; 480 1.1 riastrad uint32_t AvfsTable; 481 1.1 riastrad uint32_t AvfsCksOffGbvTable; 482 1.1 riastrad uint32_t AvfsMeanNSigma; 483 1.1 riastrad uint32_t AvfsSclkOffsetTable; 484 1.1 riastrad uint32_t Reserved[12]; 485 1.1 riastrad uint32_t Signature; 486 1.1 riastrad }; 487 1.1 riastrad 488 1.1 riastrad typedef struct SMU75_Firmware_Header SMU75_Firmware_Header; 489 1.1 riastrad 490 1.1 riastrad #define SMU7_FIRMWARE_HEADER_LOCATION 0x20000 491 1.1 riastrad 492 1.1 riastrad enum DisplayConfig { 493 1.1 riastrad PowerDown = 1, 494 1.1 riastrad DP54x4, 495 1.1 riastrad DP54x2, 496 1.1 riastrad DP54x1, 497 1.1 riastrad DP27x4, 498 1.1 riastrad DP27x2, 499 1.1 riastrad DP27x1, 500 1.1 riastrad HDMI297, 501 1.1 riastrad HDMI162, 502 1.1 riastrad LVDS, 503 1.1 riastrad DP324x4, 504 1.1 riastrad DP324x2, 505 1.1 riastrad DP324x1 506 1.1 riastrad }; 507 1.1 riastrad 508 1.1 riastrad #define MC_BLOCK_COUNT 1 509 1.1 riastrad #define CPL_BLOCK_COUNT 5 510 1.1 riastrad #define SE_BLOCK_COUNT 15 511 1.1 riastrad #define GC_BLOCK_COUNT 24 512 1.1 riastrad 513 1.1 riastrad struct SMU7_Local_Cac { 514 1.1 riastrad uint8_t BlockId; 515 1.1 riastrad uint8_t SignalId; 516 1.1 riastrad uint8_t Threshold; 517 1.1 riastrad uint8_t Padding; 518 1.1 riastrad }; 519 1.1 riastrad 520 1.1 riastrad typedef struct SMU7_Local_Cac SMU7_Local_Cac; 521 1.1 riastrad 522 1.1 riastrad struct SMU7_Local_Cac_Table { 523 1.1 riastrad SMU7_Local_Cac CplLocalCac[CPL_BLOCK_COUNT]; 524 1.1 riastrad SMU7_Local_Cac McLocalCac[MC_BLOCK_COUNT]; 525 1.1 riastrad SMU7_Local_Cac SeLocalCac[SE_BLOCK_COUNT]; 526 1.1 riastrad SMU7_Local_Cac GcLocalCac[GC_BLOCK_COUNT]; 527 1.1 riastrad }; 528 1.1 riastrad 529 1.1 riastrad typedef struct SMU7_Local_Cac_Table SMU7_Local_Cac_Table; 530 1.1 riastrad 531 1.1 riastrad #pragma pack(pop) 532 1.1 riastrad 533 1.1 riastrad #define CG_SYS_BITMASK_FIRST_BIT 0 534 1.1 riastrad #define CG_SYS_BITMASK_LAST_BIT 10 535 1.1 riastrad #define CG_SYS_BIF_MGLS_SHIFT 0 536 1.1 riastrad #define CG_SYS_ROM_SHIFT 1 537 1.1 riastrad #define CG_SYS_MC_MGCG_SHIFT 2 538 1.1 riastrad #define CG_SYS_MC_MGLS_SHIFT 3 539 1.1 riastrad #define CG_SYS_SDMA_MGCG_SHIFT 4 540 1.1 riastrad #define CG_SYS_SDMA_MGLS_SHIFT 5 541 1.1 riastrad #define CG_SYS_DRM_MGCG_SHIFT 6 542 1.1 riastrad #define CG_SYS_HDP_MGCG_SHIFT 7 543 1.1 riastrad #define CG_SYS_HDP_MGLS_SHIFT 8 544 1.1 riastrad #define CG_SYS_DRM_MGLS_SHIFT 9 545 1.1 riastrad #define CG_SYS_BIF_MGCG_SHIFT 10 546 1.1 riastrad 547 1.1 riastrad #define CG_SYS_BIF_MGLS_MASK 0x1 548 1.1 riastrad #define CG_SYS_ROM_MASK 0x2 549 1.1 riastrad #define CG_SYS_MC_MGCG_MASK 0x4 550 1.1 riastrad #define CG_SYS_MC_MGLS_MASK 0x8 551 1.1 riastrad #define CG_SYS_SDMA_MGCG_MASK 0x10 552 1.1 riastrad #define CG_SYS_SDMA_MGLS_MASK 0x20 553 1.1 riastrad #define CG_SYS_DRM_MGCG_MASK 0x40 554 1.1 riastrad #define CG_SYS_HDP_MGCG_MASK 0x80 555 1.1 riastrad #define CG_SYS_HDP_MGLS_MASK 0x100 556 1.1 riastrad #define CG_SYS_DRM_MGLS_MASK 0x200 557 1.1 riastrad #define CG_SYS_BIF_MGCG_MASK 0x400 558 1.1 riastrad 559 1.1 riastrad #define CG_GFX_BITMASK_FIRST_BIT 16 560 1.1 riastrad #define CG_GFX_BITMASK_LAST_BIT 24 561 1.1 riastrad 562 1.1 riastrad #define CG_GFX_CGCG_SHIFT 16 563 1.1 riastrad #define CG_GFX_CGLS_SHIFT 17 564 1.1 riastrad #define CG_CPF_MGCG_SHIFT 18 565 1.1 riastrad #define CG_RLC_MGCG_SHIFT 19 566 1.1 riastrad #define CG_GFX_OTHERS_MGCG_SHIFT 20 567 1.1 riastrad #define CG_GFX_3DCG_SHIFT 21 568 1.1 riastrad #define CG_GFX_3DLS_SHIFT 22 569 1.1 riastrad #define CG_GFX_RLC_LS_SHIFT 23 570 1.1 riastrad #define CG_GFX_CP_LS_SHIFT 24 571 1.1 riastrad 572 1.1 riastrad #define CG_GFX_CGCG_MASK 0x00010000 573 1.1 riastrad #define CG_GFX_CGLS_MASK 0x00020000 574 1.1 riastrad #define CG_CPF_MGCG_MASK 0x00040000 575 1.1 riastrad #define CG_RLC_MGCG_MASK 0x00080000 576 1.1 riastrad #define CG_GFX_OTHERS_MGCG_MASK 0x00100000 577 1.1 riastrad #define CG_GFX_3DCG_MASK 0x00200000 578 1.1 riastrad #define CG_GFX_3DLS_MASK 0x00400000 579 1.1 riastrad #define CG_GFX_RLC_LS_MASK 0x00800000 580 1.1 riastrad #define CG_GFX_CP_LS_MASK 0x01000000 581 1.1 riastrad 582 1.1 riastrad 583 1.1 riastrad #define VRCONF_VDDC_MASK 0x000000FF 584 1.1 riastrad #define VRCONF_VDDC_SHIFT 0 585 1.1 riastrad #define VRCONF_VDDGFX_MASK 0x0000FF00 586 1.1 riastrad #define VRCONF_VDDGFX_SHIFT 8 587 1.1 riastrad #define VRCONF_VDDCI_MASK 0x00FF0000 588 1.1 riastrad #define VRCONF_VDDCI_SHIFT 16 589 1.1 riastrad #define VRCONF_MVDD_MASK 0xFF000000 590 1.1 riastrad #define VRCONF_MVDD_SHIFT 24 591 1.1 riastrad 592 1.1 riastrad #define VR_MERGED_WITH_VDDC 0 593 1.1 riastrad #define VR_SVI2_PLANE_1 1 594 1.1 riastrad #define VR_SVI2_PLANE_2 2 595 1.1 riastrad #define VR_SMIO_PATTERN_1 3 596 1.1 riastrad #define VR_SMIO_PATTERN_2 4 597 1.1 riastrad #define VR_STATIC_VOLTAGE 5 598 1.1 riastrad 599 1.1 riastrad #define CLOCK_STRETCHER_MAX_ENTRIES 0x4 600 1.1 riastrad #define CKS_LOOKUPTable_MAX_ENTRIES 0x4 601 1.1 riastrad 602 1.1 riastrad #define CLOCK_STRETCHER_SETTING_DDT_MASK 0x01 603 1.1 riastrad #define CLOCK_STRETCHER_SETTING_DDT_SHIFT 0x0 604 1.1 riastrad #define CLOCK_STRETCHER_SETTING_STRETCH_AMOUNT_MASK 0x1E 605 1.1 riastrad #define CLOCK_STRETCHER_SETTING_STRETCH_AMOUNT_SHIFT 0x1 606 1.1 riastrad #define CLOCK_STRETCHER_SETTING_ENABLE_MASK 0x80 607 1.1 riastrad #define CLOCK_STRETCHER_SETTING_ENABLE_SHIFT 0x7 608 1.1 riastrad 609 1.1 riastrad struct SMU_ClockStretcherDataTableEntry { 610 1.1 riastrad uint8_t minVID; 611 1.1 riastrad uint8_t maxVID; 612 1.1 riastrad 613 1.1 riastrad uint16_t setting; 614 1.1 riastrad }; 615 1.1 riastrad typedef struct SMU_ClockStretcherDataTableEntry SMU_ClockStretcherDataTableEntry; 616 1.1 riastrad 617 1.1 riastrad struct SMU_ClockStretcherDataTable { 618 1.1 riastrad SMU_ClockStretcherDataTableEntry ClockStretcherDataTableEntry[CLOCK_STRETCHER_MAX_ENTRIES]; 619 1.1 riastrad }; 620 1.1 riastrad typedef struct SMU_ClockStretcherDataTable SMU_ClockStretcherDataTable; 621 1.1 riastrad 622 1.1 riastrad struct SMU_CKS_LOOKUPTableEntry { 623 1.1 riastrad uint16_t minFreq; 624 1.1 riastrad uint16_t maxFreq; 625 1.1 riastrad 626 1.1 riastrad uint8_t setting; 627 1.1 riastrad uint8_t padding[3]; 628 1.1 riastrad }; 629 1.1 riastrad typedef struct SMU_CKS_LOOKUPTableEntry SMU_CKS_LOOKUPTableEntry; 630 1.1 riastrad 631 1.1 riastrad struct SMU_CKS_LOOKUPTable { 632 1.1 riastrad SMU_CKS_LOOKUPTableEntry CKS_LOOKUPTableEntry[CKS_LOOKUPTable_MAX_ENTRIES]; 633 1.1 riastrad }; 634 1.1 riastrad typedef struct SMU_CKS_LOOKUPTable SMU_CKS_LOOKUPTable; 635 1.1 riastrad 636 1.1 riastrad struct AgmAvfsData_t { 637 1.1 riastrad uint16_t avgPsmCount[28]; 638 1.1 riastrad uint16_t minPsmCount[28]; 639 1.1 riastrad }; 640 1.1 riastrad typedef struct AgmAvfsData_t AgmAvfsData_t; 641 1.1 riastrad 642 1.1 riastrad enum VFT_COLUMNS { 643 1.1 riastrad SCLK0, 644 1.1 riastrad SCLK1, 645 1.1 riastrad SCLK2, 646 1.1 riastrad SCLK3, 647 1.1 riastrad SCLK4, 648 1.1 riastrad SCLK5, 649 1.1 riastrad SCLK6, 650 1.1 riastrad SCLK7, 651 1.1 riastrad 652 1.1 riastrad NUM_VFT_COLUMNS 653 1.1 riastrad }; 654 1.1 riastrad enum { 655 1.1 riastrad SCS_FUSE_T0, 656 1.1 riastrad SCS_FUSE_T1, 657 1.1 riastrad NUM_SCS_FUSE_TEMPERATURE 658 1.1 riastrad }; 659 1.1 riastrad enum { 660 1.1 riastrad SCKS_ON, 661 1.1 riastrad SCKS_OFF, 662 1.1 riastrad NUM_SCKS_STATE_TYPES 663 1.1 riastrad }; 664 1.1 riastrad 665 1.1 riastrad #define VFT_TABLE_DEFINED 666 1.1 riastrad 667 1.1 riastrad #define TEMP_RANGE_MAXSTEPS 12 668 1.1 riastrad struct VFT_CELL_t { 669 1.1 riastrad uint16_t Voltage; 670 1.1 riastrad }; 671 1.1 riastrad 672 1.1 riastrad typedef struct VFT_CELL_t VFT_CELL_t; 673 1.1 riastrad #ifdef SMU__FIRMWARE_SCKS_PRESENT__1 674 1.1 riastrad struct SCS_CELL_t { 675 1.1 riastrad uint16_t PsmCnt[NUM_SCKS_STATE_TYPES]; 676 1.1 riastrad }; 677 1.1 riastrad typedef struct SCS_CELL_t SCS_CELL_t; 678 1.1 riastrad #endif 679 1.1 riastrad 680 1.1 riastrad struct VFT_TABLE_t { 681 1.1 riastrad VFT_CELL_t Cell[TEMP_RANGE_MAXSTEPS][NUM_VFT_COLUMNS]; 682 1.1 riastrad uint16_t AvfsGbv [NUM_VFT_COLUMNS]; 683 1.1 riastrad uint16_t BtcGbv [NUM_VFT_COLUMNS]; 684 1.1 riastrad int16_t Temperature [TEMP_RANGE_MAXSTEPS]; 685 1.1 riastrad 686 1.1 riastrad #ifdef SMU__FIRMWARE_SCKS_PRESENT__1 687 1.1 riastrad SCS_CELL_t ScksCell[TEMP_RANGE_MAXSTEPS][NUM_VFT_COLUMNS]; 688 1.1 riastrad #endif 689 1.1 riastrad 690 1.1 riastrad uint8_t NumTemperatureSteps; 691 1.1 riastrad uint8_t padding[3]; 692 1.1 riastrad }; 693 1.1 riastrad typedef struct VFT_TABLE_t VFT_TABLE_t; 694 1.1 riastrad 695 1.1 riastrad #define BTCGB_VDROOP_TABLE_MAX_ENTRIES 2 696 1.1 riastrad #define AVFSGB_VDROOP_TABLE_MAX_ENTRIES 2 697 1.1 riastrad 698 1.1 riastrad struct GB_VDROOP_TABLE_t { 699 1.1 riastrad int32_t a0; 700 1.1 riastrad int32_t a1; 701 1.1 riastrad int32_t a2; 702 1.1 riastrad uint32_t spare; 703 1.1 riastrad }; 704 1.1 riastrad typedef struct GB_VDROOP_TABLE_t GB_VDROOP_TABLE_t; 705 1.1 riastrad 706 1.1 riastrad struct SMU_QuadraticCoeffs { 707 1.1 riastrad int32_t m1; 708 1.1 riastrad int32_t b; 709 1.1 riastrad 710 1.1 riastrad int16_t m2; 711 1.1 riastrad uint8_t m1_shift; 712 1.1 riastrad uint8_t m2_shift; 713 1.1 riastrad }; 714 1.1 riastrad typedef struct SMU_QuadraticCoeffs SMU_QuadraticCoeffs; 715 1.1 riastrad 716 1.1 riastrad struct AVFS_Margin_t { 717 1.1 riastrad VFT_CELL_t Cell[NUM_VFT_COLUMNS]; 718 1.1 riastrad }; 719 1.1 riastrad typedef struct AVFS_Margin_t AVFS_Margin_t; 720 1.1 riastrad 721 1.1 riastrad struct AVFS_CksOff_Gbv_t { 722 1.1 riastrad VFT_CELL_t Cell[NUM_VFT_COLUMNS]; 723 1.1 riastrad }; 724 1.1 riastrad typedef struct AVFS_CksOff_Gbv_t AVFS_CksOff_Gbv_t; 725 1.1 riastrad 726 1.1 riastrad struct AVFS_CksOff_AvfsGbv_t { 727 1.1 riastrad VFT_CELL_t Cell[NUM_VFT_COLUMNS]; 728 1.1 riastrad }; 729 1.1 riastrad typedef struct AVFS_CksOff_AvfsGbv_t AVFS_CksOff_AvfsGbv_t; 730 1.1 riastrad 731 1.1 riastrad struct AVFS_CksOff_BtcGbv_t { 732 1.1 riastrad VFT_CELL_t Cell[NUM_VFT_COLUMNS]; 733 1.1 riastrad }; 734 1.1 riastrad typedef struct AVFS_CksOff_BtcGbv_t AVFS_CksOff_BtcGbv_t; 735 1.1 riastrad 736 1.1 riastrad struct AVFS_meanNsigma_t { 737 1.1 riastrad uint32_t Aconstant[3]; 738 1.1 riastrad uint16_t DC_tol_sigma; 739 1.1 riastrad uint16_t Platform_mean; 740 1.1 riastrad uint16_t Platform_sigma; 741 1.1 riastrad uint16_t PSM_Age_CompFactor; 742 1.1 riastrad uint8_t Static_Voltage_Offset[NUM_VFT_COLUMNS]; 743 1.1 riastrad }; 744 1.1 riastrad typedef struct AVFS_meanNsigma_t AVFS_meanNsigma_t; 745 1.1 riastrad 746 1.1 riastrad struct AVFS_Sclk_Offset_t { 747 1.1 riastrad uint16_t Sclk_Offset[8]; 748 1.1 riastrad }; 749 1.1 riastrad typedef struct AVFS_Sclk_Offset_t AVFS_Sclk_Offset_t; 750 1.1 riastrad 751 1.1 riastrad struct Power_Sharing_t { 752 1.1 riastrad uint32_t EnergyCounter; 753 1.1 riastrad uint32_t EngeryThreshold; 754 1.1 riastrad uint64_t AM_SCLK_CNT; 755 1.1 riastrad uint64_t AM_0_BUSY_CNT; 756 1.1 riastrad }; 757 1.1 riastrad typedef struct Power_Sharing_t Power_Sharing_t; 758 1.1 riastrad 759 1.1 riastrad 760 1.1 riastrad #endif 761 1.1 riastrad 762 1.1 riastrad 763