root/drivers/gpu/drm/amd/powerplay/inc/smu72_discrete.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2  * Copyright 2017 Advanced Micro Devices, Inc.
   3  *
   4  * Permission is hereby granted, free of charge, to any person obtaining a
   5  * copy of this software and associated documentation files (the "Software"),
   6  * to deal in the Software without restriction, including without limitation
   7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
   8  * and/or sell copies of the Software, and to permit persons to whom the
   9  * Software is furnished to do so, subject to the following conditions:
  10  *
  11  * The above copyright notice and this permission notice shall be included in
  12  * all copies or substantial portions of the Software.
  13  *
  14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  17  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
  18  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  19  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  20  * OTHER DEALINGS IN THE SOFTWARE.
  21  *
  22  */
  23 
  24 #ifndef SMU72_DISCRETE_H
  25 #define SMU72_DISCRETE_H
  26 
  27 #include "smu72.h"
  28 
  29 #if !defined(SMC_MICROCODE)
  30 #pragma pack(push, 1)
  31 #endif
  32 
  33 struct SMIO_Pattern {
  34         uint16_t Voltage;
  35         uint8_t  Smio;
  36         uint8_t  padding;
  37 };
  38 
  39 typedef struct SMIO_Pattern SMIO_Pattern;
  40 
  41 struct SMIO_Table {
  42         SMIO_Pattern Pattern[SMU_MAX_SMIO_LEVELS];
  43 };
  44 
  45 typedef struct SMIO_Table SMIO_Table;
  46 
  47 struct SMU72_Discrete_GraphicsLevel {
  48         SMU_VoltageLevel MinVoltage;
  49 
  50         uint32_t    SclkFrequency;
  51 
  52         uint8_t     pcieDpmLevel;
  53         uint8_t     DeepSleepDivId;
  54         uint16_t    ActivityLevel;
  55 
  56         uint32_t    CgSpllFuncCntl3;
  57         uint32_t    CgSpllFuncCntl4;
  58         uint32_t    SpllSpreadSpectrum;
  59         uint32_t    SpllSpreadSpectrum2;
  60         uint32_t    CcPwrDynRm;
  61         uint32_t    CcPwrDynRm1;
  62         uint8_t     SclkDid;
  63         uint8_t     DisplayWatermark;
  64         uint8_t     EnabledForActivity;
  65         uint8_t     EnabledForThrottle;
  66         uint8_t     UpHyst;
  67         uint8_t     DownHyst;
  68         uint8_t     VoltageDownHyst;
  69         uint8_t     PowerThrottle;
  70 };
  71 
  72 typedef struct SMU72_Discrete_GraphicsLevel SMU72_Discrete_GraphicsLevel;
  73 
  74 struct SMU72_Discrete_ACPILevel {
  75         uint32_t    Flags;
  76         SMU_VoltageLevel MinVoltage;
  77         uint32_t    SclkFrequency;
  78         uint8_t     SclkDid;
  79         uint8_t     DisplayWatermark;
  80         uint8_t     DeepSleepDivId;
  81         uint8_t     padding;
  82         uint32_t    CgSpllFuncCntl;
  83         uint32_t    CgSpllFuncCntl2;
  84         uint32_t    CgSpllFuncCntl3;
  85         uint32_t    CgSpllFuncCntl4;
  86         uint32_t    SpllSpreadSpectrum;
  87         uint32_t    SpllSpreadSpectrum2;
  88         uint32_t    CcPwrDynRm;
  89         uint32_t    CcPwrDynRm1;
  90 };
  91 
  92 typedef struct SMU72_Discrete_ACPILevel SMU72_Discrete_ACPILevel;
  93 
  94 struct SMU72_Discrete_Ulv {
  95         uint32_t    CcPwrDynRm;
  96         uint32_t    CcPwrDynRm1;
  97         uint16_t    VddcOffset;
  98         uint8_t     VddcOffsetVid;
  99         uint8_t     VddcPhase;
 100         uint32_t    Reserved;
 101 };
 102 
 103 typedef struct SMU72_Discrete_Ulv SMU72_Discrete_Ulv;
 104 
 105 struct SMU72_Discrete_MemoryLevel {
 106         SMU_VoltageLevel MinVoltage;
 107         uint32_t    MinMvdd;
 108 
 109         uint32_t    MclkFrequency;
 110 
 111         uint8_t     EdcReadEnable;
 112         uint8_t     EdcWriteEnable;
 113         uint8_t     RttEnable;
 114         uint8_t     StutterEnable;
 115 
 116         uint8_t     StrobeEnable;
 117         uint8_t     StrobeRatio;
 118         uint8_t     EnabledForThrottle;
 119         uint8_t     EnabledForActivity;
 120 
 121         uint8_t     UpHyst;
 122         uint8_t     DownHyst;
 123         uint8_t     VoltageDownHyst;
 124         uint8_t     padding;
 125 
 126         uint16_t    ActivityLevel;
 127         uint8_t     DisplayWatermark;
 128         uint8_t     padding1;
 129 
 130         uint32_t    MpllFuncCntl;
 131         uint32_t    MpllFuncCntl_1;
 132         uint32_t    MpllFuncCntl_2;
 133         uint32_t    MpllAdFuncCntl;
 134         uint32_t    MpllDqFuncCntl;
 135         uint32_t    MclkPwrmgtCntl;
 136         uint32_t    DllCntl;
 137         uint32_t    MpllSs1;
 138         uint32_t    MpllSs2;
 139 };
 140 
 141 typedef struct SMU72_Discrete_MemoryLevel SMU72_Discrete_MemoryLevel;
 142 
 143 struct SMU72_Discrete_LinkLevel {
 144         uint8_t     PcieGenSpeed;           /*< 0:PciE-gen1 1:PciE-gen2 2:PciE-gen3 */
 145         uint8_t     PcieLaneCount;          /*< 1=x1, 2=x2, 3=x4, 4=x8, 5=x12, 6=x16 */
 146         uint8_t     EnabledForActivity;
 147         uint8_t     SPC;
 148         uint32_t    DownThreshold;
 149         uint32_t    UpThreshold;
 150         uint32_t    Reserved;
 151 };
 152 
 153 typedef struct SMU72_Discrete_LinkLevel SMU72_Discrete_LinkLevel;
 154 
 155 /* MC ARB DRAM Timing registers. */
 156 struct SMU72_Discrete_MCArbDramTimingTableEntry {
 157         uint32_t McArbDramTiming;
 158         uint32_t McArbDramTiming2;
 159         uint8_t  McArbBurstTime;
 160         uint8_t  padding[3];
 161 };
 162 
 163 typedef struct SMU72_Discrete_MCArbDramTimingTableEntry SMU72_Discrete_MCArbDramTimingTableEntry;
 164 
 165 struct SMU72_Discrete_MCArbDramTimingTable {
 166         SMU72_Discrete_MCArbDramTimingTableEntry entries[SMU__NUM_SCLK_DPM_STATE][SMU__NUM_MCLK_DPM_LEVELS];
 167 };
 168 
 169 typedef struct SMU72_Discrete_MCArbDramTimingTable SMU72_Discrete_MCArbDramTimingTable;
 170 
 171 /* UVD VCLK/DCLK state (level) definition. */
 172 struct SMU72_Discrete_UvdLevel {
 173         uint32_t VclkFrequency;
 174         uint32_t DclkFrequency;
 175         SMU_VoltageLevel MinVoltage;
 176         uint8_t  VclkDivider;
 177         uint8_t  DclkDivider;
 178         uint8_t  padding[2];
 179 };
 180 
 181 typedef struct SMU72_Discrete_UvdLevel SMU72_Discrete_UvdLevel;
 182 
 183 /* Clocks for other external blocks (VCE, ACP, SAMU). */
 184 struct SMU72_Discrete_ExtClkLevel {
 185         uint32_t Frequency;
 186         SMU_VoltageLevel MinVoltage;
 187         uint8_t  Divider;
 188         uint8_t  padding[3];
 189 };
 190 
 191 typedef struct SMU72_Discrete_ExtClkLevel SMU72_Discrete_ExtClkLevel;
 192 
 193 struct SMU72_Discrete_StateInfo {
 194         uint32_t SclkFrequency;
 195         uint32_t MclkFrequency;
 196         uint32_t VclkFrequency;
 197         uint32_t DclkFrequency;
 198         uint32_t SamclkFrequency;
 199         uint32_t AclkFrequency;
 200         uint32_t EclkFrequency;
 201         uint16_t MvddVoltage;
 202         uint16_t padding16;
 203         uint8_t  DisplayWatermark;
 204         uint8_t  McArbIndex;
 205         uint8_t  McRegIndex;
 206         uint8_t  SeqIndex;
 207         uint8_t  SclkDid;
 208         int8_t   SclkIndex;
 209         int8_t   MclkIndex;
 210         uint8_t  PCIeGen;
 211 
 212 };
 213 
 214 typedef struct SMU72_Discrete_StateInfo SMU72_Discrete_StateInfo;
 215 
 216 struct SMU72_Discrete_DpmTable {
 217         /* Multi-DPM controller settings */
 218         SMU72_PIDController                  GraphicsPIDController;
 219         SMU72_PIDController                  MemoryPIDController;
 220         SMU72_PIDController                  LinkPIDController;
 221 
 222         uint32_t                            SystemFlags;
 223 
 224         /* SMIO masks for voltage and phase controls */
 225         uint32_t                            VRConfig;
 226         uint32_t                            SmioMask1;
 227         uint32_t                            SmioMask2;
 228         SMIO_Table                          SmioTable1;
 229         SMIO_Table                          SmioTable2;
 230 
 231         uint32_t                            VddcLevelCount;
 232         uint32_t                            VddciLevelCount;
 233         uint32_t                            VddGfxLevelCount;
 234         uint32_t                            MvddLevelCount;
 235 
 236         uint16_t                            VddcTable[SMU72_MAX_LEVELS_VDDC];
 237         uint16_t                            VddGfxTable[SMU72_MAX_LEVELS_VDDGFX];
 238         uint16_t                            VddciTable[SMU72_MAX_LEVELS_VDDCI];
 239 
 240         uint8_t                             BapmVddGfxVidHiSidd[SMU72_MAX_LEVELS_VDDGFX];
 241         uint8_t                             BapmVddGfxVidLoSidd[SMU72_MAX_LEVELS_VDDGFX];
 242         uint8_t                             BapmVddGfxVidHiSidd2[SMU72_MAX_LEVELS_VDDGFX];
 243 
 244         uint8_t                             BapmVddcVidHiSidd[SMU72_MAX_LEVELS_VDDC];
 245         uint8_t                             BapmVddcVidLoSidd[SMU72_MAX_LEVELS_VDDC];
 246         uint8_t                             BapmVddcVidHiSidd2[SMU72_MAX_LEVELS_VDDC];
 247 
 248         uint8_t                             GraphicsDpmLevelCount;
 249         uint8_t                             MemoryDpmLevelCount;
 250         uint8_t                             LinkLevelCount;
 251         uint8_t                             MasterDeepSleepControl;
 252 
 253         uint8_t                             UvdLevelCount;
 254         uint8_t                             VceLevelCount;
 255         uint8_t                             AcpLevelCount;
 256         uint8_t                             SamuLevelCount;
 257 
 258         uint8_t                             ThermOutGpio;
 259         uint8_t                             ThermOutPolarity;
 260         uint8_t                             ThermOutMode;
 261         uint8_t                             DPMFreezeAndForced;
 262         uint32_t                            Reserved[4];
 263 
 264         /* State table entries for each DPM state */
 265         SMU72_Discrete_GraphicsLevel        GraphicsLevel[SMU72_MAX_LEVELS_GRAPHICS];
 266         SMU72_Discrete_MemoryLevel          MemoryACPILevel;
 267         SMU72_Discrete_MemoryLevel          MemoryLevel[SMU72_MAX_LEVELS_MEMORY];
 268         SMU72_Discrete_LinkLevel            LinkLevel[SMU72_MAX_LEVELS_LINK];
 269         SMU72_Discrete_ACPILevel            ACPILevel;
 270         SMU72_Discrete_UvdLevel             UvdLevel[SMU72_MAX_LEVELS_UVD];
 271         SMU72_Discrete_ExtClkLevel          VceLevel[SMU72_MAX_LEVELS_VCE];
 272         SMU72_Discrete_ExtClkLevel          AcpLevel[SMU72_MAX_LEVELS_ACP];
 273         SMU72_Discrete_ExtClkLevel          SamuLevel[SMU72_MAX_LEVELS_SAMU];
 274         SMU72_Discrete_Ulv                  Ulv;
 275 
 276         uint32_t                            SclkStepSize;
 277         uint32_t                            Smio[SMU72_MAX_ENTRIES_SMIO];
 278 
 279         uint8_t                             UvdBootLevel;
 280         uint8_t                             VceBootLevel;
 281         uint8_t                             AcpBootLevel;
 282         uint8_t                             SamuBootLevel;
 283 
 284         uint8_t                             GraphicsBootLevel;
 285         uint8_t                             GraphicsVoltageChangeEnable;
 286         uint8_t                             GraphicsThermThrottleEnable;
 287         uint8_t                             GraphicsInterval;
 288 
 289         uint8_t                             VoltageInterval;
 290         uint8_t                             ThermalInterval;
 291         uint16_t                            TemperatureLimitHigh;
 292 
 293         uint16_t                            TemperatureLimitLow;
 294         uint8_t                             MemoryBootLevel;
 295         uint8_t                             MemoryVoltageChangeEnable;
 296 
 297         uint16_t                            BootMVdd;
 298         uint8_t                             MemoryInterval;
 299         uint8_t                             MemoryThermThrottleEnable;
 300 
 301         uint16_t                            VoltageResponseTime;
 302         uint16_t                            PhaseResponseTime;
 303 
 304         uint8_t                             PCIeBootLinkLevel;
 305         uint8_t                             PCIeGenInterval;
 306         uint8_t                             DTEInterval;
 307         uint8_t                             DTEMode;
 308 
 309         uint8_t                             SVI2Enable;
 310         uint8_t                             VRHotGpio;
 311         uint8_t                             AcDcGpio;
 312         uint8_t                             ThermGpio;
 313 
 314         uint16_t                            PPM_PkgPwrLimit;
 315         uint16_t                            PPM_TemperatureLimit;
 316 
 317         uint16_t                            DefaultTdp;
 318         uint16_t                            TargetTdp;
 319 
 320         uint16_t                            FpsHighThreshold;
 321         uint16_t                            FpsLowThreshold;
 322 
 323         uint16_t                            BAPMTI_R[SMU72_DTE_ITERATIONS][SMU72_DTE_SOURCES][SMU72_DTE_SINKS];
 324         uint16_t                            BAPMTI_RC[SMU72_DTE_ITERATIONS][SMU72_DTE_SOURCES][SMU72_DTE_SINKS];
 325 
 326         uint8_t                             DTEAmbientTempBase;
 327         uint8_t                             DTETjOffset;
 328         uint8_t                             GpuTjMax;
 329         uint8_t                             GpuTjHyst;
 330 
 331         SMU_VoltageLevel                    BootVoltage;
 332 
 333         uint32_t                            BAPM_TEMP_GRADIENT;
 334 
 335         uint32_t                            LowSclkInterruptThreshold;
 336         uint32_t                            VddGfxReChkWait;
 337 
 338         uint8_t                             ClockStretcherAmount;
 339 
 340         uint8_t                             Sclk_CKS_masterEn0_7;
 341         uint8_t                             Sclk_CKS_masterEn8_15;
 342         uint8_t                             padding[1];
 343 
 344         uint8_t                             Sclk_voltageOffset[8];
 345 
 346         SMU_ClockStretcherDataTable         ClockStretcherDataTable;
 347         SMU_CKS_LOOKUPTable                 CKS_LOOKUPTable;
 348 };
 349 
 350 typedef struct SMU72_Discrete_DpmTable SMU72_Discrete_DpmTable;
 351 
 352 /* --------------------------------------------------- AC Timing Parameters ------------------------------------------------ */
 353 #define SMU72_DISCRETE_MC_REGISTER_ARRAY_SIZE 16
 354 #define SMU72_DISCRETE_MC_REGISTER_ARRAY_SET_COUNT SMU72_MAX_LEVELS_MEMORY /* DPM */
 355 
 356 struct SMU72_Discrete_MCRegisterAddress {
 357         uint16_t s0;
 358         uint16_t s1;
 359 };
 360 
 361 typedef struct SMU72_Discrete_MCRegisterAddress SMU72_Discrete_MCRegisterAddress;
 362 
 363 struct SMU72_Discrete_MCRegisterSet {
 364         uint32_t value[SMU72_DISCRETE_MC_REGISTER_ARRAY_SIZE];
 365 };
 366 
 367 typedef struct SMU72_Discrete_MCRegisterSet SMU72_Discrete_MCRegisterSet;
 368 
 369 struct SMU72_Discrete_MCRegisters {
 370         uint8_t                             last;
 371         uint8_t                             reserved[3];
 372         SMU72_Discrete_MCRegisterAddress     address[SMU72_DISCRETE_MC_REGISTER_ARRAY_SIZE];
 373         SMU72_Discrete_MCRegisterSet         data[SMU72_DISCRETE_MC_REGISTER_ARRAY_SET_COUNT];
 374 };
 375 
 376 typedef struct SMU72_Discrete_MCRegisters SMU72_Discrete_MCRegisters;
 377 
 378 
 379 /* --------------------------------------------------- Fan Table ----------------------------------------------------------- */
 380 
 381 struct SMU72_Discrete_FanTable {
 382         uint16_t FdoMode;
 383         int16_t  TempMin;
 384         int16_t  TempMed;
 385         int16_t  TempMax;
 386         int16_t  Slope1;
 387         int16_t  Slope2;
 388         int16_t  FdoMin;
 389         int16_t  HystUp;
 390         int16_t  HystDown;
 391         int16_t  HystSlope;
 392         int16_t  TempRespLim;
 393         int16_t  TempCurr;
 394         int16_t  SlopeCurr;
 395         int16_t  PwmCurr;
 396         uint32_t RefreshPeriod;
 397         int16_t  FdoMax;
 398         uint8_t  TempSrc;
 399         int8_t   FanControl_GL_Flag;
 400 };
 401 
 402 typedef struct SMU72_Discrete_FanTable SMU72_Discrete_FanTable;
 403 
 404 #define SMU7_DISCRETE_GPIO_SCLK_DEBUG             4
 405 #define SMU7_DISCRETE_GPIO_SCLK_DEBUG_BIT         (0x1 << SMU7_DISCRETE_GPIO_SCLK_DEBUG)
 406 
 407 struct SMU7_MclkDpmScoreboard {
 408 
 409         uint32_t PercentageBusy;
 410 
 411         int32_t  PIDError;
 412         int32_t  PIDIntegral;
 413         int32_t  PIDOutput;
 414 
 415         uint32_t SigmaDeltaAccum;
 416         uint32_t SigmaDeltaOutput;
 417         uint32_t SigmaDeltaLevel;
 418 
 419         uint32_t UtilizationSetpoint;
 420 
 421         uint8_t  TdpClampMode;
 422         uint8_t  TdcClampMode;
 423         uint8_t  ThermClampMode;
 424         uint8_t  VoltageBusy;
 425 
 426         int8_t   CurrLevel;
 427         int8_t   TargLevel;
 428         uint8_t  LevelChangeInProgress;
 429         uint8_t  UpHyst;
 430 
 431         uint8_t  DownHyst;
 432         uint8_t  VoltageDownHyst;
 433         uint8_t  DpmEnable;
 434         uint8_t  DpmRunning;
 435 
 436         uint8_t  DpmForce;
 437         uint8_t  DpmForceLevel;
 438         uint8_t  DisplayWatermark;
 439         uint8_t  McArbIndex;
 440 
 441         uint32_t MinimumPerfMclk;
 442 
 443         uint8_t  AcpiReq;
 444         uint8_t  AcpiAck;
 445         uint8_t  MclkSwitchInProgress;
 446         uint8_t  MclkSwitchCritical;
 447 
 448         uint8_t  IgnoreVBlank;
 449         uint8_t  TargetMclkIndex;
 450         uint8_t  TargetMvddIndex;
 451         uint8_t  MclkSwitchResult;
 452 
 453         uint16_t VbiFailureCount;
 454         uint8_t  VbiWaitCounter;
 455         uint8_t  EnabledLevelsChange;
 456 
 457         uint16_t LevelResidencyCountersN[SMU72_MAX_LEVELS_MEMORY];
 458         uint16_t LevelSwitchCounters[SMU72_MAX_LEVELS_MEMORY];
 459 
 460         void     (*TargetStateCalculator)(uint8_t);
 461         void     (*SavedTargetStateCalculator)(uint8_t);
 462 
 463         uint16_t AutoDpmInterval;
 464         uint16_t AutoDpmRange;
 465 
 466         uint16_t VbiTimeoutCount;
 467         uint16_t MclkSwitchingTime;
 468 
 469         uint8_t  fastSwitch;
 470         uint8_t  Save_PIC_VDDGFX_EXIT;
 471         uint8_t  Save_PIC_VDDGFX_ENTER;
 472         uint8_t  padding;
 473 
 474 };
 475 
 476 typedef struct SMU7_MclkDpmScoreboard SMU7_MclkDpmScoreboard;
 477 
 478 struct SMU7_UlvScoreboard {
 479         uint8_t     EnterUlv;
 480         uint8_t     ExitUlv;
 481         uint8_t     UlvActive;
 482         uint8_t     WaitingForUlv;
 483         uint8_t     UlvEnable;
 484         uint8_t     UlvRunning;
 485         uint8_t     UlvMasterEnable;
 486         uint8_t     padding;
 487         uint32_t    UlvAbortedCount;
 488         uint32_t    UlvTimeStamp;
 489 };
 490 
 491 typedef struct SMU7_UlvScoreboard SMU7_UlvScoreboard;
 492 
 493 struct VddgfxSavedRegisters {
 494         uint32_t GPU_DBG[3];
 495         uint32_t MEC_BaseAddress_Hi;
 496         uint32_t MEC_BaseAddress_Lo;
 497         uint32_t THM_TMON0_CTRL2__RDIR_PRESENT;
 498         uint32_t THM_TMON1_CTRL2__RDIR_PRESENT;
 499         uint32_t CP_INT_CNTL;
 500 };
 501 
 502 typedef struct VddgfxSavedRegisters VddgfxSavedRegisters;
 503 
 504 struct SMU7_VddGfxScoreboard {
 505         uint8_t     VddGfxEnable;
 506         uint8_t     VddGfxActive;
 507         uint8_t     VPUResetOccured;
 508         uint8_t     padding;
 509 
 510         uint32_t    VddGfxEnteredCount;
 511         uint32_t    VddGfxAbortedCount;
 512 
 513         uint32_t    VddGfxVid;
 514 
 515         VddgfxSavedRegisters SavedRegisters;
 516 };
 517 
 518 typedef struct SMU7_VddGfxScoreboard SMU7_VddGfxScoreboard;
 519 
 520 struct SMU7_TdcLimitScoreboard {
 521         uint8_t  Enable;
 522         uint8_t  Running;
 523         uint16_t Alpha;
 524         uint32_t FilteredIddc;
 525         uint32_t IddcLimit;
 526         uint32_t IddcHyst;
 527         SMU7_HystController_Data HystControllerData;
 528 };
 529 
 530 typedef struct SMU7_TdcLimitScoreboard SMU7_TdcLimitScoreboard;
 531 
 532 struct SMU7_PkgPwrLimitScoreboard {
 533         uint8_t  Enable;
 534         uint8_t  Running;
 535         uint16_t Alpha;
 536         uint32_t FilteredPkgPwr;
 537         uint32_t Limit;
 538         uint32_t Hyst;
 539         uint32_t LimitFromDriver;
 540         SMU7_HystController_Data HystControllerData;
 541 };
 542 
 543 typedef struct SMU7_PkgPwrLimitScoreboard SMU7_PkgPwrLimitScoreboard;
 544 
 545 struct SMU7_BapmScoreboard {
 546         uint32_t source_powers[SMU72_DTE_SOURCES];
 547         uint32_t source_powers_last[SMU72_DTE_SOURCES];
 548         int32_t entity_temperatures[SMU72_NUM_GPU_TES];
 549         int32_t initial_entity_temperatures[SMU72_NUM_GPU_TES];
 550         int32_t Limit;
 551         int32_t Hyst;
 552         int32_t therm_influence_coeff_table[SMU72_DTE_ITERATIONS * SMU72_DTE_SOURCES * SMU72_DTE_SINKS * 2];
 553         int32_t therm_node_table[SMU72_DTE_ITERATIONS * SMU72_DTE_SOURCES * SMU72_DTE_SINKS];
 554         uint16_t ConfigTDPPowerScalar;
 555         uint16_t FanSpeedPowerScalar;
 556         uint16_t OverDrivePowerScalar;
 557         uint16_t OverDriveLimitScalar;
 558         uint16_t FinalPowerScalar;
 559         uint8_t VariantID;
 560         uint8_t spare997;
 561 
 562         SMU7_HystController_Data HystControllerData;
 563 
 564         int32_t temperature_gradient_slope;
 565         int32_t temperature_gradient;
 566         uint32_t measured_temperature;
 567 };
 568 
 569 
 570 typedef struct SMU7_BapmScoreboard SMU7_BapmScoreboard;
 571 
 572 struct SMU7_AcpiScoreboard {
 573         uint32_t SavedInterruptMask[2];
 574         uint8_t LastACPIRequest;
 575         uint8_t CgBifResp;
 576         uint8_t RequestType;
 577         uint8_t Padding;
 578         SMU72_Discrete_ACPILevel D0Level;
 579 };
 580 
 581 typedef struct SMU7_AcpiScoreboard SMU7_AcpiScoreboard;
 582 
 583 struct SMU72_Discrete_PmFuses {
 584         /* dw1  */
 585         uint8_t SviLoadLineEn;
 586         uint8_t SviLoadLineVddC;
 587         uint8_t SviLoadLineTrimVddC;
 588         uint8_t SviLoadLineOffsetVddC;
 589 
 590         /* dw2 */
 591         uint16_t TDC_VDDC_PkgLimit;
 592         uint8_t TDC_VDDC_ThrottleReleaseLimitPerc;
 593         uint8_t TDC_MAWt;
 594 
 595         /* dw3 */
 596         uint8_t TdcWaterfallCtl;
 597         uint8_t LPMLTemperatureMin;
 598         uint8_t LPMLTemperatureMax;
 599         uint8_t Reserved;
 600 
 601         /* dw4-dw7  */
 602         uint8_t LPMLTemperatureScaler[16];
 603 
 604         /* dw8-dw9  */
 605         int16_t FuzzyFan_ErrorSetDelta;
 606         int16_t FuzzyFan_ErrorRateSetDelta;
 607         int16_t FuzzyFan_PwmSetDelta;
 608         uint16_t Reserved6;
 609 
 610         /* dw10-dw14  */
 611         uint8_t GnbLPML[16];
 612 
 613         /* dw15 */
 614         uint8_t GnbLPMLMaxVid;
 615         uint8_t GnbLPMLMinVid;
 616         uint8_t Reserved1[2];
 617 
 618         /* dw16 */
 619         uint16_t BapmVddCBaseLeakageHiSidd;
 620         uint16_t BapmVddCBaseLeakageLoSidd;
 621 };
 622 
 623 typedef struct SMU72_Discrete_PmFuses SMU72_Discrete_PmFuses;
 624 
 625 struct SMU7_Discrete_Log_Header_Table {
 626         uint32_t    version;
 627         uint32_t    asic_id;
 628         uint16_t    flags;
 629         uint16_t    entry_size;
 630         uint32_t    total_size;
 631         uint32_t    num_of_entries;
 632         uint8_t     type;
 633         uint8_t     mode;
 634         uint8_t     filler_0[2];
 635         uint32_t    filler_1[2];
 636 };
 637 
 638 typedef struct SMU7_Discrete_Log_Header_Table SMU7_Discrete_Log_Header_Table;
 639 
 640 struct SMU7_Discrete_Log_Cntl {
 641         uint8_t             Enabled;
 642         uint8_t             Type;
 643         uint8_t             padding[2];
 644         uint32_t            BufferSize;
 645         uint32_t            SamplesLogged;
 646         uint32_t            SampleSize;
 647         uint32_t            AddrL;
 648         uint32_t            AddrH;
 649 };
 650 
 651 typedef struct SMU7_Discrete_Log_Cntl SMU7_Discrete_Log_Cntl;
 652 
 653 #define CAC_ACC_NW_NUM_OF_SIGNALS 87
 654 
 655 struct SMU7_Discrete_Cac_Collection_Table {
 656         uint32_t temperature;
 657         uint32_t cac_acc_nw[CAC_ACC_NW_NUM_OF_SIGNALS];
 658 };
 659 
 660 typedef struct SMU7_Discrete_Cac_Collection_Table SMU7_Discrete_Cac_Collection_Table;
 661 
 662 struct SMU7_Discrete_Cac_Verification_Table {
 663         uint32_t VddcTotalPower;
 664         uint32_t VddcLeakagePower;
 665         uint32_t VddcConstantPower;
 666         uint32_t VddcGfxDynamicPower;
 667         uint32_t VddcUvdDynamicPower;
 668         uint32_t VddcVceDynamicPower;
 669         uint32_t VddcAcpDynamicPower;
 670         uint32_t VddcPcieDynamicPower;
 671         uint32_t VddcDceDynamicPower;
 672         uint32_t VddcCurrent;
 673         uint32_t VddcVoltage;
 674         uint32_t VddciTotalPower;
 675         uint32_t VddciLeakagePower;
 676         uint32_t VddciConstantPower;
 677         uint32_t VddciDynamicPower;
 678         uint32_t Vddr1TotalPower;
 679         uint32_t Vddr1LeakagePower;
 680         uint32_t Vddr1ConstantPower;
 681         uint32_t Vddr1DynamicPower;
 682         uint32_t spare[4];
 683         uint32_t temperature;
 684 };
 685 
 686 typedef struct SMU7_Discrete_Cac_Verification_Table SMU7_Discrete_Cac_Verification_Table;
 687 
 688 struct SMU7_Discrete_Pm_Status_Table {
 689         /* Thermal entities */
 690         int32_t T_meas_max;
 691         int32_t T_meas_acc;
 692         int32_t T_calc_max;
 693         int32_t T_calc_acc;
 694         uint32_t P_scalar_acc;
 695         uint32_t P_calc_max;
 696         uint32_t P_calc_acc;
 697 
 698         /*Voltage domains */
 699         uint32_t I_calc_max;
 700         uint32_t I_calc_acc;
 701         uint32_t I_calc_acc_vddci;
 702         uint32_t V_calc_noload_acc;
 703         uint32_t V_calc_load_acc;
 704         uint32_t V_calc_noload_acc_vddci;
 705         uint32_t P_meas_acc;
 706         uint32_t V_meas_noload_acc;
 707         uint32_t V_meas_load_acc;
 708         uint32_t I_meas_acc;
 709         uint32_t P_meas_acc_vddci;
 710         uint32_t V_meas_noload_acc_vddci;
 711         uint32_t V_meas_load_acc_vddci;
 712         uint32_t I_meas_acc_vddci;
 713 
 714         /*Frequency */
 715         uint16_t Sclk_dpm_residency[8];
 716         uint16_t Uvd_dpm_residency[8];
 717         uint16_t Vce_dpm_residency[8];
 718         uint16_t Mclk_dpm_residency[4];
 719 
 720         /*Chip */
 721         uint32_t P_vddci_acc;
 722         uint32_t P_vddr1_acc;
 723         uint32_t P_nte1_acc;
 724         uint32_t PkgPwr_max;
 725         uint32_t PkgPwr_acc;
 726         uint32_t MclkSwitchingTime_max;
 727         uint32_t MclkSwitchingTime_acc;
 728         uint32_t FanPwm_acc;
 729         uint32_t FanRpm_acc;
 730 
 731         uint32_t AccCnt;
 732 };
 733 
 734 typedef struct SMU7_Discrete_Pm_Status_Table SMU7_Discrete_Pm_Status_Table;
 735 
 736 /*FIXME THESE NEED TO BE UPDATED */
 737 #define SMU7_SCLK_CAC 0x561
 738 #define SMU7_MCLK_CAC 0xF9
 739 #define SMU7_VCLK_CAC 0x2DE
 740 #define SMU7_DCLK_CAC 0x2DE
 741 #define SMU7_ECLK_CAC 0x25E
 742 #define SMU7_ACLK_CAC 0x25E
 743 #define SMU7_SAMCLK_CAC 0x25E
 744 #define SMU7_DISPCLK_CAC 0x100
 745 #define SMU7_CAC_CONSTANT 0x2EE3430
 746 #define SMU7_CAC_CONSTANT_SHIFT 18
 747 
 748 #define SMU7_VDDCI_MCLK_CONST        1765
 749 #define SMU7_VDDCI_MCLK_CONST_SHIFT  16
 750 #define SMU7_VDDCI_VDDCI_CONST       50958
 751 #define SMU7_VDDCI_VDDCI_CONST_SHIFT 14
 752 #define SMU7_VDDCI_CONST             11781
 753 
 754 #define SMU7_12C_VDDCI_MCLK_CONST        1623
 755 #define SMU7_12C_VDDCI_MCLK_CONST_SHIFT  15
 756 #define SMU7_12C_VDDCI_VDDCI_CONST       40088
 757 #define SMU7_12C_VDDCI_VDDCI_CONST_SHIFT 13
 758 #define SMU7_12C_VDDCI_CONST             20856
 759 
 760 #define SMU7_VDDCI_STROBE_PWR        1331
 761 
 762 #define SMU7_VDDR1_CONST            693
 763 #define SMU7_VDDR1_CAC_WEIGHT       20
 764 #define SMU7_VDDR1_CAC_WEIGHT_SHIFT 19
 765 #define SMU7_VDDR1_STROBE_PWR       512
 766 
 767 #define SMU7_AREA_COEFF_UVD 0xA78
 768 #define SMU7_AREA_COEFF_VCE 0x190A
 769 #define SMU7_AREA_COEFF_ACP 0x22D1
 770 #define SMU7_AREA_COEFF_SAMU 0x534
 771 
 772 /*ThermOutMode values */
 773 #define SMU7_THERM_OUT_MODE_DISABLE       0x0
 774 #define SMU7_THERM_OUT_MODE_THERM_ONLY    0x1
 775 #define SMU7_THERM_OUT_MODE_THERM_VRHOT   0x2
 776 
 777 #if !defined(SMC_MICROCODE)
 778 #pragma pack(pop)
 779 #endif
 780 
 781 
 782 #endif
 783 

/* [<][>][^][v][top][bottom][index][help] */