Home | History | Annotate | Line # | Download | only in inc
      1 /*	$NetBSD: smu71_discrete.h,v 1.2 2021/12/18 23:45:26 riastradh Exp $	*/
      2 
      3 /*
      4  * Copyright 2016 Advanced Micro Devices, Inc.
      5  *
      6  * Permission is hereby granted, free of charge, to any person obtaining a
      7  * copy of this software and associated documentation files (the "Software"),
      8  * to deal in the Software without restriction, including without limitation
      9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
     10  * and/or sell copies of the Software, and to permit persons to whom the
     11  * Software is furnished to do so, subject to the following conditions:
     12  *
     13  * The above copyright notice and this permission notice shall be included in
     14  * all copies or substantial portions of the Software.
     15  *
     16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     19  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
     20  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
     21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
     22  * OTHER DEALINGS IN THE SOFTWARE.
     23  *
     24  */
     25 #ifndef SMU71_DISCRETE_H
     26 #define SMU71_DISCRETE_H
     27 
     28 #include "smu71.h"
     29 
     30 #if !defined(SMC_MICROCODE)
     31 #pragma pack(push, 1)
     32 #endif
     33 
     34 #define VDDC_ON_SVI2  0x1
     35 #define VDDCI_ON_SVI2 0x2
     36 #define MVDD_ON_SVI2  0x4
     37 
     38 struct SMU71_Discrete_VoltageLevel
     39 {
     40     uint16_t    Voltage;
     41     uint16_t    StdVoltageHiSidd;
     42     uint16_t    StdVoltageLoSidd;
     43     uint8_t     Smio;
     44     uint8_t     padding;
     45 };
     46 
     47 typedef struct SMU71_Discrete_VoltageLevel SMU71_Discrete_VoltageLevel;
     48 
     49 struct SMU71_Discrete_GraphicsLevel
     50 {
     51     uint32_t    MinVddc;
     52     uint32_t    MinVddcPhases;
     53 
     54     uint32_t    SclkFrequency;
     55 
     56     uint8_t     pcieDpmLevel;
     57     uint8_t     DeepSleepDivId;
     58     uint16_t    ActivityLevel;
     59 
     60     uint32_t    CgSpllFuncCntl3;
     61     uint32_t    CgSpllFuncCntl4;
     62     uint32_t    SpllSpreadSpectrum;
     63     uint32_t    SpllSpreadSpectrum2;
     64     uint32_t    CcPwrDynRm;
     65     uint32_t    CcPwrDynRm1;
     66     uint8_t     SclkDid;
     67     uint8_t     DisplayWatermark;
     68     uint8_t     EnabledForActivity;
     69     uint8_t     EnabledForThrottle;
     70     uint8_t     UpHyst;
     71     uint8_t     DownHyst;
     72     uint8_t     VoltageDownHyst;
     73     uint8_t     PowerThrottle;
     74 };
     75 
     76 typedef struct SMU71_Discrete_GraphicsLevel SMU71_Discrete_GraphicsLevel;
     77 
     78 struct SMU71_Discrete_ACPILevel
     79 {
     80     uint32_t    Flags;
     81     uint32_t    MinVddc;
     82     uint32_t    MinVddcPhases;
     83     uint32_t    SclkFrequency;
     84     uint8_t     SclkDid;
     85     uint8_t     DisplayWatermark;
     86     uint8_t     DeepSleepDivId;
     87     uint8_t     padding;
     88     uint32_t    CgSpllFuncCntl;
     89     uint32_t    CgSpllFuncCntl2;
     90     uint32_t    CgSpllFuncCntl3;
     91     uint32_t    CgSpllFuncCntl4;
     92     uint32_t    SpllSpreadSpectrum;
     93     uint32_t    SpllSpreadSpectrum2;
     94     uint32_t    CcPwrDynRm;
     95     uint32_t    CcPwrDynRm1;
     96 };
     97 
     98 typedef struct SMU71_Discrete_ACPILevel SMU71_Discrete_ACPILevel;
     99 
    100 struct SMU71_Discrete_Ulv
    101 {
    102     uint32_t    CcPwrDynRm;
    103     uint32_t    CcPwrDynRm1;
    104     uint16_t    VddcOffset;
    105     uint8_t     VddcOffsetVid;
    106     uint8_t     VddcPhase;
    107     uint32_t    Reserved;
    108 };
    109 
    110 typedef struct SMU71_Discrete_Ulv SMU71_Discrete_Ulv;
    111 
    112 struct SMU71_Discrete_MemoryLevel
    113 {
    114     uint32_t    MinVddc;
    115     uint32_t    MinVddcPhases;
    116     uint32_t    MinVddci;
    117     uint32_t    MinMvdd;
    118 
    119     uint32_t    MclkFrequency;
    120 
    121     uint8_t     EdcReadEnable;
    122     uint8_t     EdcWriteEnable;
    123     uint8_t     RttEnable;
    124     uint8_t     StutterEnable;
    125 
    126     uint8_t     StrobeEnable;
    127     uint8_t     StrobeRatio;
    128     uint8_t     EnabledForThrottle;
    129     uint8_t     EnabledForActivity;
    130 
    131     uint8_t     UpHyst;
    132     uint8_t     DownHyst;
    133     uint8_t     VoltageDownHyst;
    134     uint8_t     padding;
    135 
    136     uint16_t    ActivityLevel;
    137     uint8_t     DisplayWatermark;
    138     uint8_t     padding1;
    139 
    140     uint32_t    MpllFuncCntl;
    141     uint32_t    MpllFuncCntl_1;
    142     uint32_t    MpllFuncCntl_2;
    143     uint32_t    MpllAdFuncCntl;
    144     uint32_t    MpllDqFuncCntl;
    145     uint32_t    MclkPwrmgtCntl;
    146     uint32_t    DllCntl;
    147     uint32_t    MpllSs1;
    148     uint32_t    MpllSs2;
    149 };
    150 
    151 typedef struct SMU71_Discrete_MemoryLevel SMU71_Discrete_MemoryLevel;
    152 
    153 struct SMU71_Discrete_LinkLevel
    154 {
    155     uint8_t     PcieGenSpeed;           ///< 0:PciE-gen1 1:PciE-gen2 2:PciE-gen3
    156     uint8_t     PcieLaneCount;          ///< 1=x1, 2=x2, 3=x4, 4=x8, 5=x12, 6=x16
    157     uint8_t     EnabledForActivity;
    158     uint8_t     SPC;
    159     uint32_t    DownThreshold;
    160     uint32_t    UpThreshold;
    161     uint32_t    Reserved;
    162 };
    163 
    164 typedef struct SMU71_Discrete_LinkLevel SMU71_Discrete_LinkLevel;
    165 
    166 
    167 #ifdef SMU__DYNAMIC_MCARB_SETTINGS
    168 // MC ARB DRAM Timing registers.
    169 struct SMU71_Discrete_MCArbDramTimingTableEntry
    170 {
    171     uint32_t McArbDramTiming;
    172     uint32_t McArbDramTiming2;
    173     uint8_t  McArbBurstTime;
    174     uint8_t  padding[3];
    175 };
    176 
    177 typedef struct SMU71_Discrete_MCArbDramTimingTableEntry SMU71_Discrete_MCArbDramTimingTableEntry;
    178 
    179 struct SMU71_Discrete_MCArbDramTimingTable
    180 {
    181     SMU71_Discrete_MCArbDramTimingTableEntry entries[SMU__NUM_SCLK_DPM_STATE][SMU__NUM_MCLK_DPM_LEVELS];
    182 };
    183 
    184 typedef struct SMU71_Discrete_MCArbDramTimingTable SMU71_Discrete_MCArbDramTimingTable;
    185 #endif
    186 
    187 // UVD VCLK/DCLK state (level) definition.
    188 struct SMU71_Discrete_UvdLevel
    189 {
    190     uint32_t VclkFrequency;
    191     uint32_t DclkFrequency;
    192     uint16_t MinVddc;
    193     uint8_t  MinVddcPhases;
    194     uint8_t  VclkDivider;
    195     uint8_t  DclkDivider;
    196     uint8_t  padding[3];
    197 };
    198 
    199 typedef struct SMU71_Discrete_UvdLevel SMU71_Discrete_UvdLevel;
    200 
    201 // Clocks for other external blocks (VCE, ACP, SAMU).
    202 struct SMU71_Discrete_ExtClkLevel
    203 {
    204     uint32_t Frequency;
    205     uint16_t MinVoltage;
    206     uint8_t  MinPhases;
    207     uint8_t  Divider;
    208 };
    209 
    210 typedef struct SMU71_Discrete_ExtClkLevel SMU71_Discrete_ExtClkLevel;
    211 
    212 // Everything that we need to keep track of about the current state.
    213 // Use this instead of copies of the GraphicsLevel and MemoryLevel structures to keep track of state parameters
    214 // that need to be checked later.
    215 // We don't need to cache everything about a state, just a few parameters.
    216 struct SMU71_Discrete_StateInfo
    217 {
    218     uint32_t SclkFrequency;
    219     uint32_t MclkFrequency;
    220     uint32_t VclkFrequency;
    221     uint32_t DclkFrequency;
    222     uint32_t SamclkFrequency;
    223     uint32_t AclkFrequency;
    224     uint32_t EclkFrequency;
    225     uint16_t MvddVoltage;
    226     uint16_t padding16;
    227     uint8_t  DisplayWatermark;
    228     uint8_t  McArbIndex;
    229     uint8_t  McRegIndex;
    230     uint8_t  SeqIndex;
    231     uint8_t  SclkDid;
    232     int8_t   SclkIndex;
    233     int8_t   MclkIndex;
    234     uint8_t  PCIeGen;
    235 
    236 };
    237 
    238 typedef struct SMU71_Discrete_StateInfo SMU71_Discrete_StateInfo;
    239 
    240 
    241 struct SMU71_Discrete_DpmTable
    242 {
    243     // Multi-DPM controller settings
    244     SMU71_PIDController                  GraphicsPIDController;
    245     SMU71_PIDController                  MemoryPIDController;
    246     SMU71_PIDController                  LinkPIDController;
    247 
    248     uint32_t                            SystemFlags;
    249 
    250     // SMIO masks for voltage and phase controls
    251     uint32_t                            SmioMaskVddcVid;
    252     uint32_t                            SmioMaskVddcPhase;
    253     uint32_t                            SmioMaskVddciVid;
    254     uint32_t                            SmioMaskMvddVid;
    255 
    256     uint32_t                            VddcLevelCount;
    257     uint32_t                            VddciLevelCount;
    258     uint32_t                            MvddLevelCount;
    259 
    260     SMU71_Discrete_VoltageLevel          VddcLevel               [SMU71_MAX_LEVELS_VDDC];
    261     SMU71_Discrete_VoltageLevel          VddciLevel              [SMU71_MAX_LEVELS_VDDCI];
    262     SMU71_Discrete_VoltageLevel          MvddLevel               [SMU71_MAX_LEVELS_MVDD];
    263 
    264     uint8_t                             GraphicsDpmLevelCount;
    265     uint8_t                             MemoryDpmLevelCount;
    266     uint8_t                             LinkLevelCount;
    267     uint8_t                             MasterDeepSleepControl;
    268 
    269     uint32_t                            Reserved[5];
    270 
    271     // State table entries for each DPM state
    272     SMU71_Discrete_GraphicsLevel         GraphicsLevel           [SMU71_MAX_LEVELS_GRAPHICS];
    273     SMU71_Discrete_MemoryLevel           MemoryACPILevel;
    274     SMU71_Discrete_MemoryLevel           MemoryLevel             [SMU71_MAX_LEVELS_MEMORY];
    275     SMU71_Discrete_LinkLevel             LinkLevel               [SMU71_MAX_LEVELS_LINK];
    276     SMU71_Discrete_ACPILevel             ACPILevel;
    277 
    278     uint32_t                            SclkStepSize;
    279     uint32_t                            Smio                    [SMU71_MAX_ENTRIES_SMIO];
    280 
    281     uint8_t                             GraphicsBootLevel;
    282     uint8_t                             GraphicsVoltageChangeEnable;
    283     uint8_t                             GraphicsThermThrottleEnable;
    284     uint8_t                             GraphicsInterval;
    285 
    286     uint8_t                             VoltageInterval;
    287     uint8_t                             ThermalInterval;
    288     uint16_t                            TemperatureLimitHigh;
    289 
    290     uint16_t                            TemperatureLimitLow;
    291     uint8_t                             MemoryBootLevel;
    292     uint8_t                             MemoryVoltageChangeEnable;
    293 
    294     uint8_t                             MemoryInterval;
    295     uint8_t                             MemoryThermThrottleEnable;
    296     uint8_t                             MergedVddci;
    297     uint8_t                             padding2;
    298 
    299     uint16_t                            VoltageResponseTime;
    300     uint16_t                            PhaseResponseTime;
    301 
    302     uint8_t                             PCIeBootLinkLevel;
    303     uint8_t                             PCIeGenInterval;
    304     uint8_t                             DTEInterval;
    305     uint8_t                             DTEMode;
    306 
    307     uint8_t                             SVI2Enable;
    308     uint8_t                             VRHotGpio;
    309     uint8_t                             AcDcGpio;
    310     uint8_t                             ThermGpio;
    311 
    312     uint32_t                            DisplayCac;
    313 
    314     uint16_t                            MaxPwr;
    315     uint16_t                            NomPwr;
    316 
    317     uint16_t                            FpsHighThreshold;
    318     uint16_t                            FpsLowThreshold;
    319 
    320     uint16_t                            BAPMTI_R  [SMU71_DTE_ITERATIONS][SMU71_DTE_SOURCES][SMU71_DTE_SINKS];
    321     uint16_t                            BAPMTI_RC [SMU71_DTE_ITERATIONS][SMU71_DTE_SOURCES][SMU71_DTE_SINKS];
    322 
    323     uint8_t                             DTEAmbientTempBase;
    324     uint8_t                             DTETjOffset;
    325     uint8_t                             GpuTjMax;
    326     uint8_t                             GpuTjHyst;
    327 
    328     uint16_t                            BootVddc;
    329     uint16_t                            BootVddci;
    330 
    331     uint16_t                            BootMVdd;
    332     uint16_t                            padding;
    333 
    334     uint32_t                            BAPM_TEMP_GRADIENT;
    335 
    336     uint32_t                            LowSclkInterruptThreshold;
    337     uint32_t                            VddGfxReChkWait;
    338 
    339     uint16_t                            PPM_PkgPwrLimit;
    340     uint16_t                            PPM_TemperatureLimit;
    341 
    342     uint16_t                            DefaultTdp;
    343     uint16_t                            TargetTdp;
    344 };
    345 
    346 typedef struct SMU71_Discrete_DpmTable SMU71_Discrete_DpmTable;
    347 
    348 // --------------------------------------------------- AC Timing Parameters ------------------------------------------------
    349 #define SMU71_DISCRETE_MC_REGISTER_ARRAY_SIZE 16
    350 #define SMU71_DISCRETE_MC_REGISTER_ARRAY_SET_COUNT SMU71_MAX_LEVELS_MEMORY
    351 
    352 struct SMU71_Discrete_MCRegisterAddress
    353 {
    354     uint16_t s0;
    355     uint16_t s1;
    356 };
    357 
    358 typedef struct SMU71_Discrete_MCRegisterAddress SMU71_Discrete_MCRegisterAddress;
    359 
    360 struct SMU71_Discrete_MCRegisterSet
    361 {
    362     uint32_t value[SMU71_DISCRETE_MC_REGISTER_ARRAY_SIZE];
    363 };
    364 
    365 typedef struct SMU71_Discrete_MCRegisterSet SMU71_Discrete_MCRegisterSet;
    366 
    367 struct SMU71_Discrete_MCRegisters
    368 {
    369     uint8_t                             last;
    370     uint8_t                             reserved[3];
    371     SMU71_Discrete_MCRegisterAddress     address[SMU71_DISCRETE_MC_REGISTER_ARRAY_SIZE];
    372     SMU71_Discrete_MCRegisterSet         data[SMU71_DISCRETE_MC_REGISTER_ARRAY_SET_COUNT];
    373 };
    374 
    375 typedef struct SMU71_Discrete_MCRegisters SMU71_Discrete_MCRegisters;
    376 
    377 
    378 // --------------------------------------------------- Fan Table -----------------------------------------------------------
    379 struct SMU71_Discrete_FanTable
    380 {
    381     uint16_t FdoMode;
    382     int16_t  TempMin;
    383     int16_t  TempMed;
    384     int16_t  TempMax;
    385     int16_t  Slope1;
    386     int16_t  Slope2;
    387     int16_t  FdoMin;
    388     int16_t  HystUp;
    389     int16_t  HystDown;
    390     int16_t  HystSlope;
    391     int16_t  TempRespLim;
    392     int16_t  TempCurr;
    393     int16_t  SlopeCurr;
    394     int16_t  PwmCurr;
    395     uint32_t RefreshPeriod;
    396     int16_t  FdoMax;
    397     uint8_t  TempSrc;
    398     int8_t   Padding;
    399 };
    400 
    401 typedef struct SMU71_Discrete_FanTable SMU71_Discrete_FanTable;
    402 
    403 #define SMU7_DISCRETE_GPIO_SCLK_DEBUG             4
    404 #define SMU7_DISCRETE_GPIO_SCLK_DEBUG_BIT         (0x1 << SMU7_DISCRETE_GPIO_SCLK_DEBUG)
    405 
    406 struct SMU71_MclkDpmScoreboard
    407 {
    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  TargetMclkIndex;
    449     uint8_t  TargetMvddIndex;
    450     uint8_t  MclkSwitchResult;
    451 
    452     uint8_t  EnabledLevelsChange;
    453 
    454     uint16_t LevelResidencyCounters [SMU71_MAX_LEVELS_MEMORY];
    455     uint16_t LevelSwitchCounters [SMU71_MAX_LEVELS_MEMORY];
    456 
    457     void     (*TargetStateCalculator)(uint8_t);
    458     void     (*SavedTargetStateCalculator)(uint8_t);
    459 
    460     uint16_t AutoDpmInterval;
    461     uint16_t AutoDpmRange;
    462 
    463     uint16_t  MclkSwitchingTime;
    464     uint8_t padding[2];
    465 };
    466 
    467 typedef struct SMU71_MclkDpmScoreboard SMU71_MclkDpmScoreboard;
    468 
    469 struct SMU71_UlvScoreboard
    470 {
    471     uint8_t     EnterUlv;
    472     uint8_t     ExitUlv;
    473     uint8_t     UlvActive;
    474     uint8_t     WaitingForUlv;
    475     uint8_t     UlvEnable;
    476     uint8_t     UlvRunning;
    477     uint8_t     UlvMasterEnable;
    478     uint8_t     padding;
    479     uint32_t    UlvAbortedCount;
    480     uint32_t    UlvTimeStamp;
    481 };
    482 
    483 typedef struct SMU71_UlvScoreboard SMU71_UlvScoreboard;
    484 
    485 struct SMU71_VddGfxScoreboard
    486 {
    487     uint8_t     VddGfxEnable;
    488     uint8_t     VddGfxActive;
    489     uint8_t     padding[2];
    490 
    491     uint32_t    VddGfxEnteredCount;
    492     uint32_t    VddGfxAbortedCount;
    493 };
    494 
    495 typedef struct SMU71_VddGfxScoreboard SMU71_VddGfxScoreboard;
    496 
    497 struct SMU71_AcpiScoreboard {
    498   uint32_t SavedInterruptMask[2];
    499   uint8_t LastACPIRequest;
    500   uint8_t CgBifResp;
    501   uint8_t RequestType;
    502   uint8_t Padding;
    503   SMU71_Discrete_ACPILevel D0Level;
    504 };
    505 
    506 typedef struct SMU71_AcpiScoreboard SMU71_AcpiScoreboard;
    507 
    508 
    509 struct SMU71_Discrete_PmFuses {
    510   // dw0-dw1
    511   uint8_t BapmVddCVidHiSidd[8];
    512 
    513   // dw2-dw3
    514   uint8_t BapmVddCVidLoSidd[8];
    515 
    516   // dw4-dw5
    517   uint8_t VddCVid[8];
    518 
    519   // dw6
    520   uint8_t SviLoadLineEn;
    521   uint8_t SviLoadLineVddC;
    522   uint8_t SviLoadLineTrimVddC;
    523   uint8_t SviLoadLineOffsetVddC;
    524 
    525   // dw7
    526   uint16_t TDC_VDDC_PkgLimit;
    527   uint8_t TDC_VDDC_ThrottleReleaseLimitPerc;
    528   uint8_t TDC_MAWt;
    529 
    530   // dw8
    531   uint8_t TdcWaterfallCtl;
    532   uint8_t LPMLTemperatureMin;
    533   uint8_t LPMLTemperatureMax;
    534   uint8_t Reserved;
    535 
    536   // dw9-dw12
    537   uint8_t LPMLTemperatureScaler[16];
    538 
    539   // dw13-dw14
    540   int16_t FuzzyFan_ErrorSetDelta;
    541   int16_t FuzzyFan_ErrorRateSetDelta;
    542   int16_t FuzzyFan_PwmSetDelta;
    543   uint16_t Reserved6;
    544 
    545   // dw15
    546   uint8_t GnbLPML[16];
    547 
    548   // dw15
    549   uint8_t GnbLPMLMaxVid;
    550   uint8_t GnbLPMLMinVid;
    551   uint8_t Reserved1[2];
    552 
    553   // dw16
    554   uint16_t BapmVddCBaseLeakageHiSidd;
    555   uint16_t BapmVddCBaseLeakageLoSidd;
    556 };
    557 
    558 typedef struct SMU71_Discrete_PmFuses SMU71_Discrete_PmFuses;
    559 
    560 struct SMU71_Discrete_Log_Header_Table {
    561   uint32_t    version;
    562   uint32_t    asic_id;
    563   uint16_t    flags;
    564   uint16_t    entry_size;
    565   uint32_t    total_size;
    566   uint32_t    num_of_entries;
    567   uint8_t     type;
    568   uint8_t     mode;
    569   uint8_t     filler_0[2];
    570   uint32_t    filler_1[2];
    571 };
    572 
    573 typedef struct SMU71_Discrete_Log_Header_Table SMU71_Discrete_Log_Header_Table;
    574 
    575 struct SMU71_Discrete_Log_Cntl {
    576     uint8_t             Enabled;
    577     uint8_t             Type;
    578     uint8_t             padding[2];
    579     uint32_t            BufferSize;
    580     uint32_t            SamplesLogged;
    581     uint32_t            SampleSize;
    582     uint32_t            AddrL;
    583     uint32_t            AddrH;
    584 };
    585 
    586 typedef struct SMU71_Discrete_Log_Cntl SMU71_Discrete_Log_Cntl;
    587 
    588 #if defined SMU__DGPU_ONLY
    589   #define CAC_ACC_NW_NUM_OF_SIGNALS 83
    590 #endif
    591 
    592 
    593 struct SMU71_Discrete_Cac_Collection_Table {
    594   uint32_t temperature;
    595   uint32_t cac_acc_nw[CAC_ACC_NW_NUM_OF_SIGNALS];
    596   uint32_t filler[4];
    597 };
    598 
    599 typedef struct SMU71_Discrete_Cac_Collection_Table SMU71_Discrete_Cac_Collection_Table;
    600 
    601 struct SMU71_Discrete_Cac_Verification_Table {
    602   uint32_t VddcTotalPower;
    603   uint32_t VddcLeakagePower;
    604   uint32_t VddcConstantPower;
    605   uint32_t VddcGfxDynamicPower;
    606   uint32_t VddcUvdDynamicPower;
    607   uint32_t VddcVceDynamicPower;
    608   uint32_t VddcAcpDynamicPower;
    609   uint32_t VddcPcieDynamicPower;
    610   uint32_t VddcDceDynamicPower;
    611   uint32_t VddcCurrent;
    612   uint32_t VddcVoltage;
    613   uint32_t VddciTotalPower;
    614   uint32_t VddciLeakagePower;
    615   uint32_t VddciConstantPower;
    616   uint32_t VddciDynamicPower;
    617   uint32_t Vddr1TotalPower;
    618   uint32_t Vddr1LeakagePower;
    619   uint32_t Vddr1ConstantPower;
    620   uint32_t Vddr1DynamicPower;
    621   uint32_t spare[8];
    622   uint32_t temperature;
    623 };
    624 
    625 typedef struct SMU71_Discrete_Cac_Verification_Table SMU71_Discrete_Cac_Verification_Table;
    626 
    627 #if !defined(SMC_MICROCODE)
    628 #pragma pack(pop)
    629 #endif
    630 
    631 
    632 #endif
    633 
    634