linux/drivers/gpu/drm/amd/powerplay/inc/smu73_discrete.h
<<
>>
Prefs
   1/*
   2 * Copyright 2015 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#ifndef _SMU73_DISCRETE_H_
  24#define _SMU73_DISCRETE_H_
  25
  26#include "smu73.h"
  27
  28#pragma pack(push, 1)
  29
  30struct SMIO_Pattern
  31{
  32  uint16_t Voltage;
  33  uint8_t  Smio;
  34  uint8_t  padding;
  35};
  36
  37typedef struct SMIO_Pattern SMIO_Pattern;
  38
  39struct SMIO_Table
  40{
  41  SMIO_Pattern Pattern[SMU_MAX_SMIO_LEVELS];
  42};
  43
  44typedef struct SMIO_Table SMIO_Table;
  45
  46struct SMU73_Discrete_GraphicsLevel {
  47        uint32_t    MinVoltage;
  48
  49        uint32_t    SclkFrequency;
  50
  51        uint8_t     pcieDpmLevel;
  52        uint8_t     DeepSleepDivId;
  53        uint16_t    ActivityLevel;
  54        uint32_t    CgSpllFuncCntl3;
  55        uint32_t    CgSpllFuncCntl4;
  56        uint32_t    SpllSpreadSpectrum;
  57        uint32_t    SpllSpreadSpectrum2;
  58        uint32_t    CcPwrDynRm;
  59        uint32_t    CcPwrDynRm1;
  60        uint8_t     SclkDid;
  61        uint8_t     DisplayWatermark;
  62        uint8_t     EnabledForActivity;
  63        uint8_t     EnabledForThrottle;
  64        uint8_t     UpHyst;
  65        uint8_t     DownHyst;
  66        uint8_t     VoltageDownHyst;
  67        uint8_t     PowerThrottle;
  68};
  69
  70typedef struct SMU73_Discrete_GraphicsLevel SMU73_Discrete_GraphicsLevel;
  71
  72struct SMU73_Discrete_ACPILevel {
  73    uint32_t    Flags;
  74    uint32_t MinVoltage;
  75    uint32_t    SclkFrequency;
  76    uint8_t     SclkDid;
  77    uint8_t     DisplayWatermark;
  78    uint8_t     DeepSleepDivId;
  79    uint8_t     padding;
  80    uint32_t    CgSpllFuncCntl;
  81    uint32_t    CgSpllFuncCntl2;
  82    uint32_t    CgSpllFuncCntl3;
  83    uint32_t    CgSpllFuncCntl4;
  84    uint32_t    SpllSpreadSpectrum;
  85    uint32_t    SpllSpreadSpectrum2;
  86    uint32_t    CcPwrDynRm;
  87    uint32_t    CcPwrDynRm1;
  88};
  89
  90typedef struct SMU73_Discrete_ACPILevel SMU73_Discrete_ACPILevel;
  91
  92struct SMU73_Discrete_Ulv {
  93        uint32_t    CcPwrDynRm;
  94        uint32_t    CcPwrDynRm1;
  95        uint16_t    VddcOffset;
  96        uint8_t     VddcOffsetVid;
  97        uint8_t     VddcPhase;
  98        uint32_t    Reserved;
  99};
 100
 101typedef struct SMU73_Discrete_Ulv SMU73_Discrete_Ulv;
 102
 103struct SMU73_Discrete_MemoryLevel
 104{
 105    uint32_t MinVoltage;
 106    uint32_t    MinMvdd;
 107
 108    uint32_t    MclkFrequency;
 109
 110    uint8_t     StutterEnable;
 111    uint8_t     FreqRange;
 112    uint8_t     EnabledForThrottle;
 113    uint8_t     EnabledForActivity;
 114
 115    uint8_t     UpHyst;
 116    uint8_t     DownHyst;
 117    uint8_t     VoltageDownHyst;
 118    uint8_t     padding;
 119
 120    uint16_t    ActivityLevel;
 121    uint8_t     DisplayWatermark;
 122    uint8_t     MclkDivider;
 123};
 124
 125typedef struct SMU73_Discrete_MemoryLevel SMU73_Discrete_MemoryLevel;
 126
 127struct SMU73_Discrete_LinkLevel
 128{
 129    uint8_t     PcieGenSpeed;           ///< 0:PciE-gen1 1:PciE-gen2 2:PciE-gen3
 130    uint8_t     PcieLaneCount;          ///< 1=x1, 2=x2, 3=x4, 4=x8, 5=x12, 6=x16 
 131    uint8_t     EnabledForActivity;
 132    uint8_t     SPC;
 133    uint32_t    DownThreshold;
 134    uint32_t    UpThreshold;
 135    uint32_t    Reserved;
 136};
 137
 138typedef struct SMU73_Discrete_LinkLevel SMU73_Discrete_LinkLevel;
 139
 140
 141// MC ARB DRAM Timing registers.
 142struct SMU73_Discrete_MCArbDramTimingTableEntry
 143{
 144    uint32_t McArbDramTiming;
 145    uint32_t McArbDramTiming2;
 146    uint8_t  McArbBurstTime;
 147    uint8_t  TRRDS;
 148    uint8_t  TRRDL;
 149    uint8_t  padding;
 150};
 151
 152typedef struct SMU73_Discrete_MCArbDramTimingTableEntry SMU73_Discrete_MCArbDramTimingTableEntry;
 153
 154struct SMU73_Discrete_MCArbDramTimingTable
 155{
 156    SMU73_Discrete_MCArbDramTimingTableEntry entries[SMU__NUM_SCLK_DPM_STATE][SMU__NUM_MCLK_DPM_LEVELS];
 157};
 158
 159typedef struct SMU73_Discrete_MCArbDramTimingTable SMU73_Discrete_MCArbDramTimingTable;
 160
 161// UVD VCLK/DCLK state (level) definition.
 162struct SMU73_Discrete_UvdLevel
 163{
 164    uint32_t VclkFrequency;
 165    uint32_t DclkFrequency;
 166    uint32_t MinVoltage;
 167    uint8_t  VclkDivider;
 168    uint8_t  DclkDivider;
 169    uint8_t  padding[2];
 170};
 171
 172typedef struct SMU73_Discrete_UvdLevel SMU73_Discrete_UvdLevel;
 173
 174// Clocks for other external blocks (VCE, ACP, SAMU).
 175struct SMU73_Discrete_ExtClkLevel
 176{
 177    uint32_t Frequency;
 178    uint32_t MinVoltage;
 179    uint8_t  Divider;
 180    uint8_t  padding[3];
 181};
 182
 183typedef struct SMU73_Discrete_ExtClkLevel SMU73_Discrete_ExtClkLevel;
 184
 185struct SMU73_Discrete_StateInfo
 186{
 187    uint32_t SclkFrequency;
 188    uint32_t MclkFrequency;
 189    uint32_t VclkFrequency;
 190    uint32_t DclkFrequency;
 191    uint32_t SamclkFrequency;
 192    uint32_t AclkFrequency;
 193    uint32_t EclkFrequency;
 194    uint16_t MvddVoltage;
 195    uint16_t padding16;
 196    uint8_t  DisplayWatermark;
 197    uint8_t  McArbIndex;
 198    uint8_t  McRegIndex;
 199    uint8_t  SeqIndex;
 200    uint8_t  SclkDid;
 201    int8_t   SclkIndex;
 202    int8_t   MclkIndex;
 203    uint8_t  PCIeGen;
 204
 205};
 206
 207typedef struct SMU73_Discrete_StateInfo SMU73_Discrete_StateInfo;
 208
 209struct SMU73_Discrete_DpmTable
 210{
 211    // Multi-DPM controller settings
 212    SMU73_PIDController                  GraphicsPIDController;
 213    SMU73_PIDController                  MemoryPIDController;
 214    SMU73_PIDController                  LinkPIDController;
 215
 216    uint32_t                            SystemFlags;
 217
 218    // SMIO masks for voltage and phase controls
 219    uint32_t                            VRConfig;
 220    uint32_t                            SmioMask1;
 221    uint32_t                            SmioMask2;
 222    SMIO_Table                          SmioTable1;
 223    SMIO_Table                          SmioTable2;
 224
 225    uint32_t                            MvddLevelCount;
 226
 227
 228    uint8_t                             BapmVddcVidHiSidd        [SMU73_MAX_LEVELS_VDDC];
 229    uint8_t                             BapmVddcVidLoSidd        [SMU73_MAX_LEVELS_VDDC];
 230    uint8_t                             BapmVddcVidHiSidd2       [SMU73_MAX_LEVELS_VDDC];
 231
 232    uint8_t                             GraphicsDpmLevelCount;
 233    uint8_t                             MemoryDpmLevelCount;
 234    uint8_t                             LinkLevelCount;
 235    uint8_t                             MasterDeepSleepControl;
 236
 237    uint8_t                             UvdLevelCount;
 238    uint8_t                             VceLevelCount;
 239    uint8_t                             AcpLevelCount;
 240    uint8_t                             SamuLevelCount;
 241
 242    uint8_t                             ThermOutGpio;
 243    uint8_t                             ThermOutPolarity;
 244    uint8_t                             ThermOutMode;
 245    uint8_t                             BootPhases;
 246    uint32_t                            Reserved[4];
 247
 248    // State table entries for each DPM state
 249    SMU73_Discrete_GraphicsLevel        GraphicsLevel           [SMU73_MAX_LEVELS_GRAPHICS];
 250    SMU73_Discrete_MemoryLevel          MemoryACPILevel;
 251    SMU73_Discrete_MemoryLevel          MemoryLevel             [SMU73_MAX_LEVELS_MEMORY];
 252    SMU73_Discrete_LinkLevel            LinkLevel               [SMU73_MAX_LEVELS_LINK];
 253    SMU73_Discrete_ACPILevel            ACPILevel;
 254    SMU73_Discrete_UvdLevel             UvdLevel                [SMU73_MAX_LEVELS_UVD];
 255    SMU73_Discrete_ExtClkLevel          VceLevel                [SMU73_MAX_LEVELS_VCE];
 256    SMU73_Discrete_ExtClkLevel          AcpLevel                [SMU73_MAX_LEVELS_ACP];
 257    SMU73_Discrete_ExtClkLevel          SamuLevel               [SMU73_MAX_LEVELS_SAMU];
 258    SMU73_Discrete_Ulv                  Ulv;
 259
 260    uint32_t                            SclkStepSize;
 261    uint32_t                            Smio                    [SMU73_MAX_ENTRIES_SMIO];
 262
 263    uint8_t                             UvdBootLevel;
 264    uint8_t                             VceBootLevel;
 265    uint8_t                             AcpBootLevel;
 266    uint8_t                             SamuBootLevel;
 267
 268    uint8_t                             GraphicsBootLevel;
 269    uint8_t                             GraphicsVoltageChangeEnable;
 270    uint8_t                             GraphicsThermThrottleEnable;
 271    uint8_t                             GraphicsInterval;
 272
 273    uint8_t                             VoltageInterval;
 274    uint8_t                             ThermalInterval;
 275    uint16_t                            TemperatureLimitHigh;
 276
 277    uint16_t                            TemperatureLimitLow;
 278    uint8_t                             MemoryBootLevel;
 279    uint8_t                             MemoryVoltageChangeEnable;
 280
 281    uint16_t                            BootMVdd;
 282    uint8_t                             MemoryInterval;
 283    uint8_t                             MemoryThermThrottleEnable;
 284
 285    uint16_t                            VoltageResponseTime;
 286    uint16_t                            PhaseResponseTime;
 287
 288    uint8_t                             PCIeBootLinkLevel;
 289    uint8_t                             PCIeGenInterval;
 290    uint8_t                             DTEInterval;
 291    uint8_t                             DTEMode;
 292
 293    uint8_t                             SVI2Enable;
 294    uint8_t                             VRHotGpio;
 295    uint8_t                             AcDcGpio;
 296    uint8_t                             ThermGpio;
 297
 298    uint16_t                            PPM_PkgPwrLimit;
 299    uint16_t                            PPM_TemperatureLimit;
 300
 301    uint16_t                            DefaultTdp;
 302    uint16_t                            TargetTdp;
 303
 304    uint16_t                            FpsHighThreshold;
 305    uint16_t                            FpsLowThreshold;
 306
 307    uint16_t                            TemperatureLimitEdge;
 308    uint16_t                            TemperatureLimitHotspot;
 309    uint16_t                            TemperatureLimitLiquid1;
 310    uint16_t                            TemperatureLimitLiquid2;
 311    uint16_t                            TemperatureLimitVrVddc;
 312    uint16_t                            TemperatureLimitVrMvdd;
 313    uint16_t                            TemperatureLimitPlx;
 314
 315    uint16_t                            FanGainEdge;
 316    uint16_t                            FanGainHotspot;
 317    uint16_t                            FanGainLiquid;
 318    uint16_t                            FanGainVrVddc;
 319    uint16_t                            FanGainVrMvdd;
 320    uint16_t                            FanGainPlx;
 321    uint16_t                            FanGainHbm;
 322
 323    uint8_t                             Liquid1_I2C_address;
 324    uint8_t                             Liquid2_I2C_address;
 325    uint8_t                             Vr_I2C_address;
 326    uint8_t                             Plx_I2C_address;
 327
 328    uint8_t                             GeminiMode;
 329    uint8_t                             spare17[3];
 330    uint32_t                            GeminiApertureHigh;
 331    uint32_t                            GeminiApertureLow;
 332
 333    uint8_t                             Liquid_I2C_LineSCL;
 334    uint8_t                             Liquid_I2C_LineSDA;
 335    uint8_t                             Vr_I2C_LineSCL;
 336    uint8_t                             Vr_I2C_LineSDA;
 337    uint8_t                             Plx_I2C_LineSCL;
 338    uint8_t                             Plx_I2C_LineSDA;
 339
 340    uint8_t                             spare1253[2];
 341    uint32_t                            spare123[2];
 342
 343    uint8_t                             DTEAmbientTempBase;
 344    uint8_t                             DTETjOffset;
 345    uint8_t                             GpuTjMax;
 346    uint8_t                             GpuTjHyst;
 347
 348    uint16_t                            BootVddc;
 349    uint16_t                            BootVddci;
 350
 351    uint32_t                            BAPM_TEMP_GRADIENT;
 352
 353    uint32_t                            LowSclkInterruptThreshold;
 354    uint32_t                            VddGfxReChkWait;
 355
 356    uint8_t                             ClockStretcherAmount;
 357    uint8_t                             Sclk_CKS_masterEn0_7;
 358    uint8_t                             Sclk_CKS_masterEn8_15;
 359    uint8_t                             DPMFreezeAndForced;
 360
 361    uint8_t                             Sclk_voltageOffset[8];
 362
 363    SMU_ClockStretcherDataTable         ClockStretcherDataTable;
 364    SMU_CKS_LOOKUPTable                 CKS_LOOKUPTable;
 365};
 366
 367typedef struct SMU73_Discrete_DpmTable SMU73_Discrete_DpmTable;
 368
 369
 370// --------------------------------------------------- Fan Table -----------------------------------------------------------
 371struct SMU73_Discrete_FanTable
 372{
 373    uint16_t FdoMode;
 374    int16_t  TempMin;
 375    int16_t  TempMed;
 376    int16_t  TempMax;
 377    int16_t  Slope1;
 378    int16_t  Slope2;
 379    int16_t  FdoMin;
 380    int16_t  HystUp;
 381    int16_t  HystDown;
 382    int16_t  HystSlope;
 383    int16_t  TempRespLim;
 384    int16_t  TempCurr;
 385    int16_t  SlopeCurr;
 386    int16_t  PwmCurr;
 387    uint32_t RefreshPeriod;
 388    int16_t  FdoMax;
 389    uint8_t  TempSrc;
 390    int8_t   Padding;
 391};
 392
 393typedef struct SMU73_Discrete_FanTable SMU73_Discrete_FanTable;
 394
 395#define SMU7_DISCRETE_GPIO_SCLK_DEBUG             4
 396#define SMU7_DISCRETE_GPIO_SCLK_DEBUG_BIT         (0x1 << SMU7_DISCRETE_GPIO_SCLK_DEBUG)
 397
 398
 399
 400struct SMU7_MclkDpmScoreboard
 401{
 402
 403    uint32_t PercentageBusy;
 404
 405    int32_t  PIDError;
 406    int32_t  PIDIntegral;
 407    int32_t  PIDOutput;
 408
 409    uint32_t SigmaDeltaAccum;
 410    uint32_t SigmaDeltaOutput;
 411    uint32_t SigmaDeltaLevel;
 412
 413    uint32_t UtilizationSetpoint;
 414
 415    uint8_t  TdpClampMode;
 416    uint8_t  TdcClampMode;
 417    uint8_t  ThermClampMode;
 418    uint8_t  VoltageBusy;
 419
 420    int8_t   CurrLevel;
 421    int8_t   TargLevel;
 422    uint8_t  LevelChangeInProgress;
 423    uint8_t  UpHyst;
 424
 425    uint8_t  DownHyst;
 426    uint8_t  VoltageDownHyst;
 427    uint8_t  DpmEnable;
 428    uint8_t  DpmRunning;
 429
 430    uint8_t  DpmForce;
 431    uint8_t  DpmForceLevel;
 432    uint8_t  DisplayWatermark;
 433    uint8_t  McArbIndex;
 434
 435    uint32_t MinimumPerfMclk;
 436
 437    uint8_t  AcpiReq;
 438    uint8_t  AcpiAck;
 439    uint8_t  MclkSwitchInProgress;
 440    uint8_t  MclkSwitchCritical;
 441
 442    uint8_t  IgnoreVBlank;
 443    uint8_t  TargetMclkIndex;
 444    uint8_t  TargetMvddIndex;
 445    uint8_t  MclkSwitchResult;
 446
 447    uint16_t VbiFailureCount;
 448    uint8_t  VbiWaitCounter;
 449    uint8_t  EnabledLevelsChange;
 450
 451    uint16_t LevelResidencyCounters [SMU73_MAX_LEVELS_MEMORY];
 452    uint16_t LevelSwitchCounters [SMU73_MAX_LEVELS_MEMORY];
 453
 454    void     (*TargetStateCalculator)(uint8_t);
 455    void     (*SavedTargetStateCalculator)(uint8_t);
 456
 457    uint16_t AutoDpmInterval;
 458    uint16_t AutoDpmRange;
 459
 460    uint16_t VbiTimeoutCount;
 461    uint16_t MclkSwitchingTime;
 462
 463    uint8_t  fastSwitch;
 464    uint8_t  Save_PIC_VDDGFX_EXIT;
 465    uint8_t  Save_PIC_VDDGFX_ENTER;
 466    uint8_t  padding;
 467
 468};
 469
 470typedef struct SMU7_MclkDpmScoreboard SMU7_MclkDpmScoreboard;
 471
 472struct SMU7_UlvScoreboard
 473{
 474    uint8_t     EnterUlv;
 475    uint8_t     ExitUlv;
 476    uint8_t     UlvActive;
 477    uint8_t     WaitingForUlv;
 478    uint8_t     UlvEnable;
 479    uint8_t     UlvRunning;
 480    uint8_t     UlvMasterEnable;
 481    uint8_t     padding;
 482    uint32_t    UlvAbortedCount;
 483    uint32_t    UlvTimeStamp;
 484};
 485
 486typedef struct SMU7_UlvScoreboard SMU7_UlvScoreboard;
 487
 488struct VddgfxSavedRegisters
 489{
 490  uint32_t GPU_DBG[3];
 491  uint32_t MEC_BaseAddress_Hi;
 492  uint32_t MEC_BaseAddress_Lo;
 493  uint32_t THM_TMON0_CTRL2__RDIR_PRESENT;
 494  uint32_t THM_TMON1_CTRL2__RDIR_PRESENT;
 495  uint32_t CP_INT_CNTL;
 496};
 497
 498typedef struct VddgfxSavedRegisters VddgfxSavedRegisters;
 499
 500struct SMU7_VddGfxScoreboard
 501{
 502    uint8_t     VddGfxEnable;
 503    uint8_t     VddGfxActive;
 504    uint8_t     VPUResetOccured;
 505    uint8_t     padding;
 506
 507    uint32_t    VddGfxEnteredCount;
 508    uint32_t    VddGfxAbortedCount;
 509
 510    uint32_t    VddGfxVid;
 511
 512    VddgfxSavedRegisters SavedRegisters;
 513};
 514
 515typedef struct SMU7_VddGfxScoreboard SMU7_VddGfxScoreboard;
 516
 517struct SMU7_TdcLimitScoreboard {
 518  uint8_t  Enable;
 519  uint8_t  Running;
 520  uint16_t Alpha;
 521  uint32_t FilteredIddc;
 522  uint32_t IddcLimit;
 523  uint32_t IddcHyst;
 524  SMU7_HystController_Data HystControllerData;
 525};
 526
 527typedef struct SMU7_TdcLimitScoreboard SMU7_TdcLimitScoreboard;
 528
 529struct SMU7_PkgPwrLimitScoreboard {
 530  uint8_t  Enable;
 531  uint8_t  Running;
 532  uint16_t Alpha;
 533  uint32_t FilteredPkgPwr;
 534  uint32_t Limit;
 535  uint32_t Hyst;
 536  uint32_t LimitFromDriver;
 537  SMU7_HystController_Data HystControllerData;
 538};
 539
 540typedef struct SMU7_PkgPwrLimitScoreboard SMU7_PkgPwrLimitScoreboard;
 541
 542struct SMU7_BapmScoreboard {
 543  uint32_t source_powers[SMU73_DTE_SOURCES];
 544  uint32_t source_powers_last[SMU73_DTE_SOURCES];
 545  int32_t entity_temperatures[SMU73_NUM_GPU_TES];
 546  int32_t initial_entity_temperatures[SMU73_NUM_GPU_TES];
 547  int32_t Limit;
 548  int32_t Hyst;
 549  int32_t therm_influence_coeff_table[SMU73_DTE_ITERATIONS * SMU73_DTE_SOURCES * SMU73_DTE_SINKS * 2];
 550  int32_t therm_node_table[SMU73_DTE_ITERATIONS * SMU73_DTE_SOURCES * SMU73_DTE_SINKS];
 551  uint16_t ConfigTDPPowerScalar;
 552  uint16_t FanSpeedPowerScalar;
 553  uint16_t OverDrivePowerScalar;
 554  uint16_t OverDriveLimitScalar;
 555  uint16_t FinalPowerScalar;
 556  uint8_t VariantID;
 557  uint8_t spare997;
 558
 559  SMU7_HystController_Data HystControllerData;
 560
 561  int32_t temperature_gradient_slope;
 562  int32_t temperature_gradient;
 563  uint32_t measured_temperature;
 564};
 565
 566
 567typedef struct SMU7_BapmScoreboard SMU7_BapmScoreboard;
 568
 569struct SMU7_AcpiScoreboard {
 570  uint32_t SavedInterruptMask[2];
 571  uint8_t LastACPIRequest;
 572  uint8_t CgBifResp;
 573  uint8_t RequestType;
 574  uint8_t Padding;
 575  SMU73_Discrete_ACPILevel D0Level;
 576};
 577
 578typedef struct SMU7_AcpiScoreboard SMU7_AcpiScoreboard;
 579
 580struct SMU_QuadraticCoeffs {
 581  int32_t m1;
 582  uint32_t b;
 583
 584  int16_t m2;
 585  uint8_t m1_shift;
 586  uint8_t m2_shift;
 587};
 588
 589typedef struct SMU_QuadraticCoeffs SMU_QuadraticCoeffs;
 590
 591struct SMU73_Discrete_PmFuses {
 592  /* dw0-dw1 */
 593  uint8_t BapmVddCVidHiSidd[8];
 594
 595  /* dw2-dw3 */
 596  uint8_t BapmVddCVidLoSidd[8];
 597
 598  /* dw4-dw5 */
 599  uint8_t VddCVid[8];
 600
 601  /* dw1*/
 602  uint8_t SviLoadLineEn;
 603  uint8_t SviLoadLineVddC;
 604  uint8_t SviLoadLineTrimVddC;
 605  uint8_t SviLoadLineOffsetVddC;
 606
 607  /* dw2 */
 608  uint16_t TDC_VDDC_PkgLimit;
 609  uint8_t TDC_VDDC_ThrottleReleaseLimitPerc;
 610  uint8_t TDC_MAWt;
 611
 612  /* dw3 */
 613  uint8_t TdcWaterfallCtl;
 614  uint8_t LPMLTemperatureMin;
 615  uint8_t LPMLTemperatureMax;
 616  uint8_t Reserved;
 617
 618  /* dw4-dw7 */
 619  uint8_t LPMLTemperatureScaler[16];
 620
 621  /* dw8-dw9 */
 622  int16_t FuzzyFan_ErrorSetDelta;
 623  int16_t FuzzyFan_ErrorRateSetDelta;
 624  int16_t FuzzyFan_PwmSetDelta;
 625  uint16_t Reserved6;
 626
 627  /* dw10-dw14 */
 628  uint8_t GnbLPML[16];
 629
 630  /* dw15 */
 631  uint8_t GnbLPMLMaxVid;
 632  uint8_t GnbLPMLMinVid;
 633  uint8_t Reserved1[2];
 634
 635  /* dw16 */
 636  uint16_t BapmVddCBaseLeakageHiSidd;
 637  uint16_t BapmVddCBaseLeakageLoSidd;
 638
 639  /* AVFS */
 640  uint16_t  VFT_Temp[3];
 641  uint16_t  padding;
 642
 643  SMU_QuadraticCoeffs VFT_ATE[3];
 644
 645  SMU_QuadraticCoeffs AVFS_GB;
 646  SMU_QuadraticCoeffs ATE_ACBTC_GB;
 647
 648  SMU_QuadraticCoeffs P2V;
 649
 650  uint32_t PsmCharzFreq;
 651
 652  uint16_t InversionVoltage;
 653  uint16_t PsmCharzTemp;
 654
 655  uint32_t EnabledAvfsModules;
 656};
 657
 658typedef struct SMU73_Discrete_PmFuses SMU73_Discrete_PmFuses;
 659
 660struct SMU7_Discrete_Log_Header_Table {
 661  uint32_t    version;
 662  uint32_t    asic_id;
 663  uint16_t    flags;
 664  uint16_t    entry_size;
 665  uint32_t    total_size;
 666  uint32_t    num_of_entries;
 667  uint8_t     type;
 668  uint8_t     mode;
 669  uint8_t     filler_0[2];
 670  uint32_t    filler_1[2];
 671};
 672
 673typedef struct SMU7_Discrete_Log_Header_Table SMU7_Discrete_Log_Header_Table;
 674
 675struct SMU7_Discrete_Log_Cntl {
 676    uint8_t             Enabled;
 677    uint8_t             Type;
 678    uint8_t             padding[2];
 679    uint32_t            BufferSize;
 680    uint32_t            SamplesLogged;
 681    uint32_t            SampleSize;
 682    uint32_t            AddrL;
 683    uint32_t            AddrH;
 684};
 685
 686typedef struct SMU7_Discrete_Log_Cntl SMU7_Discrete_Log_Cntl;
 687
 688#define CAC_ACC_NW_NUM_OF_SIGNALS 87
 689
 690struct SMU7_Discrete_Cac_Collection_Table {
 691  uint32_t temperature;
 692  uint32_t cac_acc_nw[CAC_ACC_NW_NUM_OF_SIGNALS];
 693};
 694
 695typedef struct SMU7_Discrete_Cac_Collection_Table SMU7_Discrete_Cac_Collection_Table;
 696
 697struct SMU7_Discrete_Cac_Verification_Table {
 698  uint32_t VddcTotalPower;
 699  uint32_t VddcLeakagePower;
 700  uint32_t VddcConstantPower;
 701  uint32_t VddcGfxDynamicPower;
 702  uint32_t VddcUvdDynamicPower;
 703  uint32_t VddcVceDynamicPower;
 704  uint32_t VddcAcpDynamicPower;
 705  uint32_t VddcPcieDynamicPower;
 706  uint32_t VddcDceDynamicPower;
 707  uint32_t VddcCurrent;
 708  uint32_t VddcVoltage;
 709  uint32_t VddciTotalPower;
 710  uint32_t VddciLeakagePower;
 711  uint32_t VddciConstantPower;
 712  uint32_t VddciDynamicPower;
 713  uint32_t Vddr1TotalPower;
 714  uint32_t Vddr1LeakagePower;
 715  uint32_t Vddr1ConstantPower;
 716  uint32_t Vddr1DynamicPower;
 717  uint32_t spare[4];
 718  uint32_t temperature;
 719};
 720
 721typedef struct SMU7_Discrete_Cac_Verification_Table SMU7_Discrete_Cac_Verification_Table;
 722
 723struct SMU7_Discrete_Pm_Status_Table {
 724  //Thermal entities
 725  int32_t  T_meas_max[SMU73_THERMAL_INPUT_LOOP_COUNT];
 726  int32_t  T_meas_acc[SMU73_THERMAL_INPUT_LOOP_COUNT];
 727  int32_t  T_meas_acc_cnt[SMU73_THERMAL_INPUT_LOOP_COUNT];
 728  uint32_t T_hbm_acc;
 729
 730  //Voltage domains
 731  uint32_t I_calc_max;
 732  uint32_t I_calc_acc;
 733  uint32_t P_meas_acc;
 734  uint32_t V_meas_load_acc;
 735  uint32_t I_meas_acc;
 736  uint32_t P_meas_acc_vddci;
 737  uint32_t V_meas_load_acc_vddci;
 738  uint32_t I_meas_acc_vddci;
 739
 740  //Frequency
 741  uint16_t Sclk_dpm_residency[8];
 742  uint16_t Uvd_dpm_residency[8];
 743  uint16_t Vce_dpm_residency[8];
 744
 745  //Chip
 746  uint32_t P_roc_acc;
 747  uint32_t PkgPwr_max;
 748  uint32_t PkgPwr_acc;
 749  uint32_t MclkSwitchingTime_max;
 750  uint32_t MclkSwitchingTime_acc;
 751  uint32_t FanPwm_acc;
 752  uint32_t FanRpm_acc;
 753  uint32_t Gfx_busy_acc;
 754  uint32_t Mc_busy_acc;
 755  uint32_t Fps_acc;
 756
 757  uint32_t AccCnt;
 758};
 759
 760typedef struct SMU7_Discrete_Pm_Status_Table SMU7_Discrete_Pm_Status_Table;
 761
 762//FIXME THESE NEED TO BE UPDATED
 763#define SMU7_SCLK_CAC 0x561
 764#define SMU7_MCLK_CAC 0xF9
 765#define SMU7_VCLK_CAC 0x2DE
 766#define SMU7_DCLK_CAC 0x2DE
 767#define SMU7_ECLK_CAC 0x25E
 768#define SMU7_ACLK_CAC 0x25E
 769#define SMU7_SAMCLK_CAC 0x25E
 770#define SMU7_DISPCLK_CAC 0x100
 771#define SMU7_CAC_CONSTANT 0x2EE3430
 772#define SMU7_CAC_CONSTANT_SHIFT 18
 773
 774#define SMU7_VDDCI_MCLK_CONST        1765
 775#define SMU7_VDDCI_MCLK_CONST_SHIFT  16
 776#define SMU7_VDDCI_VDDCI_CONST       50958
 777#define SMU7_VDDCI_VDDCI_CONST_SHIFT 14
 778#define SMU7_VDDCI_CONST             11781
 779#define SMU7_VDDCI_STROBE_PWR        1331
 780
 781#define SMU7_VDDR1_CONST            693
 782#define SMU7_VDDR1_CAC_WEIGHT       20
 783#define SMU7_VDDR1_CAC_WEIGHT_SHIFT 19
 784#define SMU7_VDDR1_STROBE_PWR       512
 785
 786#define SMU7_AREA_COEFF_UVD 0xA78
 787#define SMU7_AREA_COEFF_VCE 0x190A
 788#define SMU7_AREA_COEFF_ACP 0x22D1
 789#define SMU7_AREA_COEFF_SAMU 0x534
 790
 791//ThermOutMode values
 792#define SMU7_THERM_OUT_MODE_DISABLE       0x0
 793#define SMU7_THERM_OUT_MODE_THERM_ONLY    0x1
 794#define SMU7_THERM_OUT_MODE_THERM_VRHOT   0x2
 795
 796#pragma pack(pop)
 797
 798#endif
 799
 800