Home | History | Annotate | Line # | Download | only in vega12
      1 /*	$NetBSD: smu9_driver_if.h,v 1.2 2021/12/18 23:45:27 riastradh Exp $	*/
      2 
      3 /*
      4  * Copyright 2017 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 
     26 #ifndef VEGA12_SMU9_DRIVER_IF_H
     27 #define VEGA12_SMU9_DRIVER_IF_H
     28 
     29 /**** IMPORTANT ***
     30  * SMU TEAM: Always increment the interface version if
     31  * any structure is changed in this file
     32  */
     33 #define SMU9_DRIVER_IF_VERSION 0x10
     34 
     35 #define PPTABLE_V12_SMU_VERSION 1
     36 
     37 #define NUM_GFXCLK_DPM_LEVELS  16
     38 #define NUM_VCLK_DPM_LEVELS    8
     39 #define NUM_DCLK_DPM_LEVELS    8
     40 #define NUM_ECLK_DPM_LEVELS    8
     41 #define NUM_MP0CLK_DPM_LEVELS  2
     42 #define NUM_UCLK_DPM_LEVELS    4
     43 #define NUM_SOCCLK_DPM_LEVELS  8
     44 #define NUM_DCEFCLK_DPM_LEVELS 8
     45 #define NUM_DISPCLK_DPM_LEVELS 8
     46 #define NUM_PIXCLK_DPM_LEVELS  8
     47 #define NUM_PHYCLK_DPM_LEVELS  8
     48 #define NUM_LINK_LEVELS        2
     49 
     50 #define MAX_GFXCLK_DPM_LEVEL  (NUM_GFXCLK_DPM_LEVELS  - 1)
     51 #define MAX_VCLK_DPM_LEVEL    (NUM_VCLK_DPM_LEVELS    - 1)
     52 #define MAX_DCLK_DPM_LEVEL    (NUM_DCLK_DPM_LEVELS    - 1)
     53 #define MAX_ECLK_DPM_LEVEL    (NUM_ECLK_DPM_LEVELS    - 1)
     54 #define MAX_MP0CLK_DPM_LEVEL  (NUM_MP0CLK_DPM_LEVELS  - 1)
     55 #define MAX_UCLK_DPM_LEVEL    (NUM_UCLK_DPM_LEVELS    - 1)
     56 #define MAX_SOCCLK_DPM_LEVEL  (NUM_SOCCLK_DPM_LEVELS  - 1)
     57 #define MAX_DCEFCLK_DPM_LEVEL (NUM_DCEFCLK_DPM_LEVELS - 1)
     58 #define MAX_DISPCLK_DPM_LEVEL (NUM_DISPCLK_DPM_LEVELS - 1)
     59 #define MAX_PIXCLK_DPM_LEVEL  (NUM_PIXCLK_DPM_LEVELS  - 1)
     60 #define MAX_PHYCLK_DPM_LEVEL  (NUM_PHYCLK_DPM_LEVELS  - 1)
     61 #define MAX_LINK_LEVEL        (NUM_LINK_LEVELS        - 1)
     62 
     63 
     64 #define PPSMC_GeminiModeNone   0
     65 #define PPSMC_GeminiModeMaster 1
     66 #define PPSMC_GeminiModeSlave  2
     67 
     68 
     69 #define FEATURE_DPM_PREFETCHER_BIT      0
     70 #define FEATURE_DPM_GFXCLK_BIT          1
     71 #define FEATURE_DPM_UCLK_BIT            2
     72 #define FEATURE_DPM_SOCCLK_BIT          3
     73 #define FEATURE_DPM_UVD_BIT             4
     74 #define FEATURE_DPM_VCE_BIT             5
     75 #define FEATURE_ULV_BIT                 6
     76 #define FEATURE_DPM_MP0CLK_BIT          7
     77 #define FEATURE_DPM_LINK_BIT            8
     78 #define FEATURE_DPM_DCEFCLK_BIT         9
     79 #define FEATURE_DS_GFXCLK_BIT           10
     80 #define FEATURE_DS_SOCCLK_BIT           11
     81 #define FEATURE_DS_LCLK_BIT             12
     82 #define FEATURE_PPT_BIT                 13
     83 #define FEATURE_TDC_BIT                 14
     84 #define FEATURE_THERMAL_BIT             15
     85 #define FEATURE_GFX_PER_CU_CG_BIT       16
     86 #define FEATURE_RM_BIT                  17
     87 #define FEATURE_DS_DCEFCLK_BIT          18
     88 #define FEATURE_ACDC_BIT                19
     89 #define FEATURE_VR0HOT_BIT              20
     90 #define FEATURE_VR1HOT_BIT              21
     91 #define FEATURE_FW_CTF_BIT              22
     92 #define FEATURE_LED_DISPLAY_BIT         23
     93 #define FEATURE_FAN_CONTROL_BIT         24
     94 #define FEATURE_GFX_EDC_BIT             25
     95 #define FEATURE_GFXOFF_BIT              26
     96 #define FEATURE_CG_BIT                  27
     97 #define FEATURE_ACG_BIT                 28
     98 #define FEATURE_SPARE_29_BIT            29
     99 #define FEATURE_SPARE_30_BIT            30
    100 #define FEATURE_SPARE_31_BIT            31
    101 
    102 #define NUM_FEATURES                    32
    103 
    104 #define FEATURE_DPM_PREFETCHER_MASK     (1 << FEATURE_DPM_PREFETCHER_BIT     )
    105 #define FEATURE_DPM_GFXCLK_MASK         (1 << FEATURE_DPM_GFXCLK_BIT         )
    106 #define FEATURE_DPM_UCLK_MASK           (1 << FEATURE_DPM_UCLK_BIT           )
    107 #define FEATURE_DPM_SOCCLK_MASK         (1 << FEATURE_DPM_SOCCLK_BIT         )
    108 #define FEATURE_DPM_UVD_MASK            (1 << FEATURE_DPM_UVD_BIT            )
    109 #define FEATURE_DPM_VCE_MASK            (1 << FEATURE_DPM_VCE_BIT            )
    110 #define FEATURE_ULV_MASK                (1 << FEATURE_ULV_BIT                )
    111 #define FEATURE_DPM_MP0CLK_MASK         (1 << FEATURE_DPM_MP0CLK_BIT         )
    112 #define FEATURE_DPM_LINK_MASK           (1 << FEATURE_DPM_LINK_BIT           )
    113 #define FEATURE_DPM_DCEFCLK_MASK        (1 << FEATURE_DPM_DCEFCLK_BIT        )
    114 #define FEATURE_DS_GFXCLK_MASK          (1 << FEATURE_DS_GFXCLK_BIT          )
    115 #define FEATURE_DS_SOCCLK_MASK          (1 << FEATURE_DS_SOCCLK_BIT          )
    116 #define FEATURE_DS_LCLK_MASK            (1 << FEATURE_DS_LCLK_BIT            )
    117 #define FEATURE_PPT_MASK                (1 << FEATURE_PPT_BIT                )
    118 #define FEATURE_TDC_MASK                (1 << FEATURE_TDC_BIT                )
    119 #define FEATURE_THERMAL_MASK            (1 << FEATURE_THERMAL_BIT            )
    120 #define FEATURE_GFX_PER_CU_CG_MASK      (1 << FEATURE_GFX_PER_CU_CG_BIT      )
    121 #define FEATURE_RM_MASK                 (1 << FEATURE_RM_BIT                 )
    122 #define FEATURE_DS_DCEFCLK_MASK         (1 << FEATURE_DS_DCEFCLK_BIT         )
    123 #define FEATURE_ACDC_MASK               (1 << FEATURE_ACDC_BIT               )
    124 #define FEATURE_VR0HOT_MASK             (1 << FEATURE_VR0HOT_BIT             )
    125 #define FEATURE_VR1HOT_MASK             (1 << FEATURE_VR1HOT_BIT             )
    126 #define FEATURE_FW_CTF_MASK             (1 << FEATURE_FW_CTF_BIT             )
    127 #define FEATURE_LED_DISPLAY_MASK        (1 << FEATURE_LED_DISPLAY_BIT        )
    128 #define FEATURE_FAN_CONTROL_MASK        (1 << FEATURE_FAN_CONTROL_BIT        )
    129 #define FEATURE_GFX_EDC_MASK            (1 << FEATURE_GFX_EDC_BIT            )
    130 #define FEATURE_GFXOFF_MASK             (1 << FEATURE_GFXOFF_BIT             )
    131 #define FEATURE_CG_MASK                 (1 << FEATURE_CG_BIT                 )
    132 #define FEATURE_ACG_MASK          (1 << FEATURE_ACG_BIT)
    133 #define FEATURE_SPARE_29_MASK           (1 << FEATURE_SPARE_29_BIT           )
    134 #define FEATURE_SPARE_30_MASK           (1 << FEATURE_SPARE_30_BIT           )
    135 #define FEATURE_SPARE_31_MASK           (1 << FEATURE_SPARE_31_BIT           )
    136 
    137 
    138 #define DPM_OVERRIDE_DISABLE_SOCCLK_PID             0x00000001
    139 #define DPM_OVERRIDE_DISABLE_UCLK_PID               0x00000002
    140 #define DPM_OVERRIDE_ENABLE_VOLT_LINK_UVD_SOCCLK    0x00000004
    141 #define DPM_OVERRIDE_ENABLE_VOLT_LINK_UVD_UCLK      0x00000008
    142 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_VCLK_SOCCLK   0x00000010
    143 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_VCLK_UCLK     0x00000020
    144 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_DCLK_SOCCLK   0x00000040
    145 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_DCLK_UCLK     0x00000080
    146 #define DPM_OVERRIDE_ENABLE_VOLT_LINK_VCE_SOCCLK    0x00000100
    147 #define DPM_OVERRIDE_ENABLE_VOLT_LINK_VCE_UCLK      0x00000200
    148 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_ECLK_SOCCLK   0x00000400
    149 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_ECLK_UCLK     0x00000800
    150 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_GFXCLK_SOCCLK 0x00001000
    151 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_GFXCLK_UCLK   0x00002000
    152 #define DPM_OVERRIDE_ENABLE_GFXOFF_GFXCLK_SWITCH    0x00004000
    153 #define DPM_OVERRIDE_ENABLE_GFXOFF_SOCCLK_SWITCH    0x00008000
    154 #define DPM_OVERRIDE_ENABLE_GFXOFF_UCLK_SWITCH      0x00010000
    155 
    156 
    157 #define VR_MAPPING_VR_SELECT_MASK  0x01
    158 #define VR_MAPPING_VR_SELECT_SHIFT 0x00
    159 
    160 #define VR_MAPPING_PLANE_SELECT_MASK  0x02
    161 #define VR_MAPPING_PLANE_SELECT_SHIFT 0x01
    162 
    163 
    164 #define PSI_SEL_VR0_PLANE0_PSI0  0x01
    165 #define PSI_SEL_VR0_PLANE0_PSI1  0x02
    166 #define PSI_SEL_VR0_PLANE1_PSI0  0x04
    167 #define PSI_SEL_VR0_PLANE1_PSI1  0x08
    168 #define PSI_SEL_VR1_PLANE0_PSI0  0x10
    169 #define PSI_SEL_VR1_PLANE0_PSI1  0x20
    170 #define PSI_SEL_VR1_PLANE1_PSI0  0x40
    171 #define PSI_SEL_VR1_PLANE1_PSI1  0x80
    172 
    173 
    174 #define THROTTLER_STATUS_PADDING_BIT      0
    175 #define THROTTLER_STATUS_TEMP_EDGE_BIT    1
    176 #define THROTTLER_STATUS_TEMP_HOTSPOT_BIT 2
    177 #define THROTTLER_STATUS_TEMP_HBM_BIT     3
    178 #define THROTTLER_STATUS_TEMP_VR_GFX_BIT  4
    179 #define THROTTLER_STATUS_TEMP_VR_MEM_BIT  5
    180 #define THROTTLER_STATUS_TEMP_LIQUID_BIT  6
    181 #define THROTTLER_STATUS_TEMP_PLX_BIT     7
    182 #define THROTTLER_STATUS_TEMP_SKIN_BIT    8
    183 #define THROTTLER_STATUS_TDC_GFX_BIT      9
    184 #define THROTTLER_STATUS_TDC_SOC_BIT      10
    185 #define THROTTLER_STATUS_PPT_BIT          11
    186 #define THROTTLER_STATUS_FIT_BIT          12
    187 #define THROTTLER_STATUS_PPM_BIT          13
    188 
    189 
    190 #define TABLE_TRANSFER_OK         0x0
    191 #define TABLE_TRANSFER_FAILED     0xFF
    192 
    193 
    194 #define WORKLOAD_DEFAULT_BIT              0
    195 #define WORKLOAD_PPLIB_FULL_SCREEN_3D_BIT 1
    196 #define WORKLOAD_PPLIB_POWER_SAVING_BIT   2
    197 #define WORKLOAD_PPLIB_VIDEO_BIT          3
    198 #define WORKLOAD_PPLIB_VR_BIT             4
    199 #define WORKLOAD_PPLIB_COMPUTE_BIT        5
    200 #define WORKLOAD_PPLIB_CUSTOM_BIT         6
    201 #define WORKLOAD_PPLIB_COUNT              7
    202 
    203 typedef struct {
    204   uint32_t a;
    205   uint32_t b;
    206   uint32_t c;
    207 } QuadraticInt_t;
    208 
    209 typedef struct {
    210   uint32_t m;
    211   uint32_t b;
    212 } LinearInt_t;
    213 
    214 typedef struct {
    215   uint32_t a;
    216   uint32_t b;
    217   uint32_t c;
    218 } DroopInt_t;
    219 
    220 typedef enum {
    221   PPCLK_GFXCLK,
    222   PPCLK_VCLK,
    223   PPCLK_DCLK,
    224   PPCLK_ECLK,
    225   PPCLK_SOCCLK,
    226   PPCLK_UCLK,
    227   PPCLK_DCEFCLK,
    228   PPCLK_DISPCLK,
    229   PPCLK_PIXCLK,
    230   PPCLK_PHYCLK,
    231   PPCLK_COUNT,
    232 } PPCLK_e;
    233 
    234 enum {
    235   VOLTAGE_MODE_AVFS,
    236   VOLTAGE_MODE_AVFS_SS,
    237   VOLTAGE_MODE_SS,
    238   VOLTAGE_MODE_COUNT,
    239 };
    240 
    241 typedef struct {
    242   uint8_t        VoltageMode;
    243   uint8_t        SnapToDiscrete;
    244   uint8_t        NumDiscreteLevels;
    245   uint8_t        padding;
    246   LinearInt_t    ConversionToAvfsClk;
    247   QuadraticInt_t SsCurve;
    248 } DpmDescriptor_t;
    249 
    250 typedef struct {
    251   uint32_t Version;
    252 
    253 
    254   uint32_t FeaturesToRun[2];
    255 
    256 
    257   uint16_t SocketPowerLimitAc0;
    258   uint16_t SocketPowerLimitAc0Tau;
    259   uint16_t SocketPowerLimitAc1;
    260   uint16_t SocketPowerLimitAc1Tau;
    261   uint16_t SocketPowerLimitAc2;
    262   uint16_t SocketPowerLimitAc2Tau;
    263   uint16_t SocketPowerLimitAc3;
    264   uint16_t SocketPowerLimitAc3Tau;
    265   uint16_t SocketPowerLimitDc;
    266   uint16_t SocketPowerLimitDcTau;
    267   uint16_t TdcLimitSoc;
    268   uint16_t TdcLimitSocTau;
    269   uint16_t TdcLimitGfx;
    270   uint16_t TdcLimitGfxTau;
    271 
    272   uint16_t TedgeLimit;
    273   uint16_t ThotspotLimit;
    274   uint16_t ThbmLimit;
    275   uint16_t Tvr_gfxLimit;
    276   uint16_t Tvr_memLimit;
    277   uint16_t Tliquid1Limit;
    278   uint16_t Tliquid2Limit;
    279   uint16_t TplxLimit;
    280   uint32_t FitLimit;
    281 
    282   uint16_t PpmPowerLimit;
    283   uint16_t PpmTemperatureThreshold;
    284 
    285   uint8_t  MemoryOnPackage;
    286   uint8_t  padding8_limits[3];
    287 
    288 
    289   uint16_t  UlvVoltageOffsetSoc;
    290   uint16_t  UlvVoltageOffsetGfx;
    291 
    292   uint8_t  UlvSmnclkDid;
    293   uint8_t  UlvMp1clkDid;
    294   uint8_t  UlvGfxclkBypass;
    295   uint8_t  Padding234;
    296 
    297 
    298   uint16_t     MinVoltageGfx;
    299   uint16_t     MinVoltageSoc;
    300   uint16_t     MaxVoltageGfx;
    301   uint16_t     MaxVoltageSoc;
    302 
    303   uint16_t     LoadLineResistance;
    304   uint16_t     LoadLine_padding;
    305 
    306 
    307   DpmDescriptor_t DpmDescriptor[PPCLK_COUNT];
    308 
    309   uint16_t       FreqTableGfx      [NUM_GFXCLK_DPM_LEVELS  ];
    310   uint16_t       FreqTableVclk     [NUM_VCLK_DPM_LEVELS    ];
    311   uint16_t       FreqTableDclk     [NUM_DCLK_DPM_LEVELS    ];
    312   uint16_t       FreqTableEclk     [NUM_ECLK_DPM_LEVELS    ];
    313   uint16_t       FreqTableSocclk   [NUM_SOCCLK_DPM_LEVELS  ];
    314   uint16_t       FreqTableUclk     [NUM_UCLK_DPM_LEVELS    ];
    315   uint16_t       FreqTableDcefclk  [NUM_DCEFCLK_DPM_LEVELS ];
    316   uint16_t       FreqTableDispclk  [NUM_DISPCLK_DPM_LEVELS ];
    317   uint16_t       FreqTablePixclk   [NUM_PIXCLK_DPM_LEVELS  ];
    318   uint16_t       FreqTablePhyclk   [NUM_PHYCLK_DPM_LEVELS  ];
    319 
    320   uint16_t       DcModeMaxFreq     [PPCLK_COUNT            ];
    321 
    322 
    323   uint16_t       Mp0clkFreq        [NUM_MP0CLK_DPM_LEVELS];
    324   uint16_t       Mp0DpmVoltage     [NUM_MP0CLK_DPM_LEVELS];
    325 
    326 
    327   uint16_t        GfxclkFidle;
    328   uint16_t        GfxclkSlewRate;
    329   uint16_t        CksEnableFreq;
    330   uint16_t        Padding789;
    331   QuadraticInt_t  CksVoltageOffset;
    332   uint16_t        AcgThresholdFreqHigh;
    333   uint16_t        AcgThresholdFreqLow;
    334   uint16_t        GfxclkDsMaxFreq;
    335   uint8_t         Padding456[2];
    336 
    337 
    338   uint8_t      LowestUclkReservedForUlv;
    339   uint8_t      Padding8_Uclk[3];
    340 
    341 
    342   uint8_t      PcieGenSpeed[NUM_LINK_LEVELS];
    343   uint8_t      PcieLaneCount[NUM_LINK_LEVELS];
    344   uint16_t     LclkFreq[NUM_LINK_LEVELS];
    345 
    346 
    347   uint16_t     EnableTdpm;
    348   uint16_t     TdpmHighHystTemperature;
    349   uint16_t     TdpmLowHystTemperature;
    350   uint16_t     GfxclkFreqHighTempLimit;
    351 
    352 
    353   uint16_t     FanStopTemp;
    354   uint16_t     FanStartTemp;
    355 
    356   uint16_t     FanGainEdge;
    357   uint16_t     FanGainHotspot;
    358   uint16_t     FanGainLiquid;
    359   uint16_t     FanGainVrVddc;
    360   uint16_t     FanGainVrMvdd;
    361   uint16_t     FanGainPlx;
    362   uint16_t     FanGainHbm;
    363   uint16_t     FanPwmMin;
    364   uint16_t     FanAcousticLimitRpm;
    365   uint16_t     FanThrottlingRpm;
    366   uint16_t     FanMaximumRpm;
    367   uint16_t     FanTargetTemperature;
    368   uint16_t     FanTargetGfxclk;
    369   uint8_t      FanZeroRpmEnable;
    370   uint8_t      FanTachEdgePerRev;
    371 
    372 
    373 
    374   int16_t      FuzzyFan_ErrorSetDelta;
    375   int16_t      FuzzyFan_ErrorRateSetDelta;
    376   int16_t      FuzzyFan_PwmSetDelta;
    377   uint16_t     FuzzyFan_Reserved;
    378 
    379 
    380 
    381 
    382   uint8_t           OverrideAvfsGb;
    383   uint8_t           Padding8_Avfs[3];
    384 
    385   QuadraticInt_t    qAvfsGb;
    386   DroopInt_t        dBtcGbGfxCksOn;
    387   DroopInt_t        dBtcGbGfxCksOff;
    388   DroopInt_t        dBtcGbGfxAcg;
    389   DroopInt_t        dBtcGbSoc;
    390   LinearInt_t       qAgingGbGfx;
    391   LinearInt_t       qAgingGbSoc;
    392 
    393   QuadraticInt_t    qStaticVoltageOffsetGfx;
    394   QuadraticInt_t    qStaticVoltageOffsetSoc;
    395 
    396   uint16_t          DcTolGfx;
    397   uint16_t          DcTolSoc;
    398 
    399   uint8_t           DcBtcGfxEnabled;
    400   uint8_t           DcBtcSocEnabled;
    401   uint8_t           Padding8_GfxBtc[2];
    402 
    403   uint16_t          DcBtcGfxMin;
    404   uint16_t          DcBtcGfxMax;
    405 
    406   uint16_t          DcBtcSocMin;
    407   uint16_t          DcBtcSocMax;
    408 
    409 
    410 
    411   uint32_t          DebugOverrides;
    412   QuadraticInt_t    ReservedEquation0;
    413   QuadraticInt_t    ReservedEquation1;
    414   QuadraticInt_t    ReservedEquation2;
    415   QuadraticInt_t    ReservedEquation3;
    416 
    417   uint16_t     MinVoltageUlvGfx;
    418   uint16_t     MinVoltageUlvSoc;
    419 
    420   uint32_t     Reserved[14];
    421 
    422 
    423 
    424   uint8_t      Liquid1_I2C_address;
    425   uint8_t      Liquid2_I2C_address;
    426   uint8_t      Vr_I2C_address;
    427   uint8_t      Plx_I2C_address;
    428 
    429   uint8_t      Liquid_I2C_LineSCL;
    430   uint8_t      Liquid_I2C_LineSDA;
    431   uint8_t      Vr_I2C_LineSCL;
    432   uint8_t      Vr_I2C_LineSDA;
    433 
    434   uint8_t      Plx_I2C_LineSCL;
    435   uint8_t      Plx_I2C_LineSDA;
    436   uint8_t      VrSensorPresent;
    437   uint8_t      LiquidSensorPresent;
    438 
    439   uint16_t     MaxVoltageStepGfx;
    440   uint16_t     MaxVoltageStepSoc;
    441 
    442   uint8_t      VddGfxVrMapping;
    443   uint8_t      VddSocVrMapping;
    444   uint8_t      VddMem0VrMapping;
    445   uint8_t      VddMem1VrMapping;
    446 
    447   uint8_t      GfxUlvPhaseSheddingMask;
    448   uint8_t      SocUlvPhaseSheddingMask;
    449   uint8_t      ExternalSensorPresent;
    450   uint8_t      Padding8_V;
    451 
    452 
    453   uint16_t     GfxMaxCurrent;
    454   int8_t       GfxOffset;
    455   uint8_t      Padding_TelemetryGfx;
    456 
    457   uint16_t     SocMaxCurrent;
    458   int8_t       SocOffset;
    459   uint8_t      Padding_TelemetrySoc;
    460 
    461   uint16_t     Mem0MaxCurrent;
    462   int8_t       Mem0Offset;
    463   uint8_t      Padding_TelemetryMem0;
    464 
    465   uint16_t     Mem1MaxCurrent;
    466   int8_t       Mem1Offset;
    467   uint8_t      Padding_TelemetryMem1;
    468 
    469 
    470   uint8_t      AcDcGpio;
    471   uint8_t      AcDcPolarity;
    472   uint8_t      VR0HotGpio;
    473   uint8_t      VR0HotPolarity;
    474 
    475   uint8_t      VR1HotGpio;
    476   uint8_t      VR1HotPolarity;
    477   uint8_t      Padding1;
    478   uint8_t      Padding2;
    479 
    480 
    481 
    482   uint8_t      LedPin0;
    483   uint8_t      LedPin1;
    484   uint8_t      LedPin2;
    485   uint8_t      padding8_4;
    486 
    487 
    488   uint8_t      PllGfxclkSpreadEnabled;
    489   uint8_t      PllGfxclkSpreadPercent;
    490   uint16_t     PllGfxclkSpreadFreq;
    491 
    492   uint8_t      UclkSpreadEnabled;
    493   uint8_t      UclkSpreadPercent;
    494   uint16_t     UclkSpreadFreq;
    495 
    496   uint8_t      SocclkSpreadEnabled;
    497   uint8_t      SocclkSpreadPercent;
    498   uint16_t     SocclkSpreadFreq;
    499 
    500   uint8_t      AcgGfxclkSpreadEnabled;
    501   uint8_t      AcgGfxclkSpreadPercent;
    502   uint16_t     AcgGfxclkSpreadFreq;
    503 
    504   uint8_t      Vr2_I2C_address;
    505   uint8_t      padding_vr2[3];
    506 
    507   uint32_t     BoardReserved[9];
    508 
    509 
    510   uint32_t     MmHubPadding[7];
    511 
    512 } PPTable_t;
    513 
    514 typedef struct {
    515 
    516   uint16_t     GfxclkAverageLpfTau;
    517   uint16_t     SocclkAverageLpfTau;
    518   uint16_t     UclkAverageLpfTau;
    519   uint16_t     GfxActivityLpfTau;
    520   uint16_t     UclkActivityLpfTau;
    521 
    522 
    523   uint32_t     MmHubPadding[7];
    524 } DriverSmuConfig_t;
    525 
    526 typedef struct {
    527 
    528   uint16_t      GfxclkFmin;
    529   uint16_t      GfxclkFmax;
    530   uint16_t      GfxclkFreq1;
    531   uint16_t      GfxclkOffsetVolt1;
    532   uint16_t      GfxclkFreq2;
    533   uint16_t      GfxclkOffsetVolt2;
    534   uint16_t      GfxclkFreq3;
    535   uint16_t      GfxclkOffsetVolt3;
    536   uint16_t      UclkFmax;
    537   int16_t       OverDrivePct;
    538   uint16_t      FanMaximumRpm;
    539   uint16_t      FanMinimumPwm;
    540   uint16_t      FanTargetTemperature;
    541   uint16_t      MaxOpTemp;
    542 
    543 } OverDriveTable_t;
    544 
    545 typedef struct {
    546   uint16_t CurrClock[PPCLK_COUNT];
    547   uint16_t AverageGfxclkFrequency;
    548   uint16_t AverageSocclkFrequency;
    549   uint16_t AverageUclkFrequency  ;
    550   uint16_t AverageGfxActivity    ;
    551   uint16_t AverageUclkActivity   ;
    552   uint8_t  CurrSocVoltageOffset  ;
    553   uint8_t  CurrGfxVoltageOffset  ;
    554   uint8_t  CurrMemVidOffset      ;
    555   uint8_t  Padding8              ;
    556   uint16_t CurrSocketPower       ;
    557   uint16_t TemperatureEdge       ;
    558   uint16_t TemperatureHotspot    ;
    559   uint16_t TemperatureHBM        ;
    560   uint16_t TemperatureVrGfx      ;
    561   uint16_t TemperatureVrMem      ;
    562   uint16_t TemperatureLiquid     ;
    563   uint16_t TemperaturePlx        ;
    564   uint32_t ThrottlerStatus       ;
    565 
    566   uint8_t  LinkDpmLevel;
    567   uint8_t  Padding[3];
    568 
    569 
    570   uint32_t     MmHubPadding[7];
    571 } SmuMetrics_t;
    572 
    573 typedef struct {
    574   uint16_t MinClock;
    575   uint16_t MaxClock;
    576   uint16_t MinUclk;
    577   uint16_t MaxUclk;
    578 
    579   uint8_t  WmSetting;
    580   uint8_t  Padding[3];
    581 } WatermarkRowGeneric_t;
    582 
    583 #define NUM_WM_RANGES 4
    584 
    585 typedef enum {
    586   WM_SOCCLK = 0,
    587   WM_DCEFCLK,
    588   WM_COUNT_PP,
    589 } WM_CLOCK_e;
    590 
    591 typedef struct {
    592 
    593   WatermarkRowGeneric_t WatermarkRow[WM_COUNT_PP][NUM_WM_RANGES];
    594 
    595   uint32_t     MmHubPadding[7];
    596 } Watermarks_t;
    597 
    598 typedef struct {
    599   uint16_t avgPsmCount[30];
    600   uint16_t minPsmCount[30];
    601   float    avgPsmVoltage[30];
    602   float    minPsmVoltage[30];
    603 
    604   uint32_t MmHubPadding[7];
    605 } AvfsDebugTable_t;
    606 
    607 typedef struct {
    608   uint8_t  AvfsEn;
    609   uint8_t  AvfsVersion;
    610   uint8_t  OverrideVFT;
    611   uint8_t  OverrideAvfsGb;
    612 
    613   uint8_t  OverrideTemperatures;
    614   uint8_t  OverrideVInversion;
    615   uint8_t  OverrideP2V;
    616   uint8_t  OverrideP2VCharzFreq;
    617 
    618   int32_t VFT0_m1;
    619   int32_t VFT0_m2;
    620   int32_t VFT0_b;
    621 
    622   int32_t VFT1_m1;
    623   int32_t VFT1_m2;
    624   int32_t VFT1_b;
    625 
    626   int32_t VFT2_m1;
    627   int32_t VFT2_m2;
    628   int32_t VFT2_b;
    629 
    630   int32_t AvfsGb0_m1;
    631   int32_t AvfsGb0_m2;
    632   int32_t AvfsGb0_b;
    633 
    634   int32_t AcBtcGb_m1;
    635   int32_t AcBtcGb_m2;
    636   int32_t AcBtcGb_b;
    637 
    638   uint32_t AvfsTempCold;
    639   uint32_t AvfsTempMid;
    640   uint32_t AvfsTempHot;
    641 
    642   uint32_t GfxVInversion;
    643   uint32_t SocVInversion;
    644 
    645   int32_t P2V_m1;
    646   int32_t P2V_m2;
    647   int32_t P2V_b;
    648 
    649   uint32_t P2VCharzFreq;
    650 
    651   uint32_t EnabledAvfsModules;
    652 
    653   uint32_t MmHubPadding[7];
    654 } AvfsFuseOverride_t;
    655 
    656 typedef struct {
    657 
    658   uint8_t   Gfx_ActiveHystLimit;
    659   uint8_t   Gfx_IdleHystLimit;
    660   uint8_t   Gfx_FPS;
    661   uint8_t   Gfx_MinActiveFreqType;
    662   uint8_t   Gfx_BoosterFreqType;
    663   uint8_t   Gfx_UseRlcBusy;
    664   uint16_t  Gfx_MinActiveFreq;
    665   uint16_t  Gfx_BoosterFreq;
    666   uint16_t  Gfx_PD_Data_time_constant;
    667   uint32_t  Gfx_PD_Data_limit_a;
    668   uint32_t  Gfx_PD_Data_limit_b;
    669   uint32_t  Gfx_PD_Data_limit_c;
    670   uint32_t  Gfx_PD_Data_error_coeff;
    671   uint32_t  Gfx_PD_Data_error_rate_coeff;
    672 
    673   uint8_t   Soc_ActiveHystLimit;
    674   uint8_t   Soc_IdleHystLimit;
    675   uint8_t   Soc_FPS;
    676   uint8_t   Soc_MinActiveFreqType;
    677   uint8_t   Soc_BoosterFreqType;
    678   uint8_t   Soc_UseRlcBusy;
    679   uint16_t  Soc_MinActiveFreq;
    680   uint16_t  Soc_BoosterFreq;
    681   uint16_t  Soc_PD_Data_time_constant;
    682   uint32_t  Soc_PD_Data_limit_a;
    683   uint32_t  Soc_PD_Data_limit_b;
    684   uint32_t  Soc_PD_Data_limit_c;
    685   uint32_t  Soc_PD_Data_error_coeff;
    686   uint32_t  Soc_PD_Data_error_rate_coeff;
    687 
    688   uint8_t   Mem_ActiveHystLimit;
    689   uint8_t   Mem_IdleHystLimit;
    690   uint8_t   Mem_FPS;
    691   uint8_t   Mem_MinActiveFreqType;
    692   uint8_t   Mem_BoosterFreqType;
    693   uint8_t   Mem_UseRlcBusy;
    694   uint16_t  Mem_MinActiveFreq;
    695   uint16_t  Mem_BoosterFreq;
    696   uint16_t  Mem_PD_Data_time_constant;
    697   uint32_t  Mem_PD_Data_limit_a;
    698   uint32_t  Mem_PD_Data_limit_b;
    699   uint32_t  Mem_PD_Data_limit_c;
    700   uint32_t  Mem_PD_Data_error_coeff;
    701   uint32_t  Mem_PD_Data_error_rate_coeff;
    702 
    703 } DpmActivityMonitorCoeffInt_t;
    704 
    705 
    706 
    707 
    708 #define TABLE_PPTABLE                 0
    709 #define TABLE_WATERMARKS              1
    710 #define TABLE_AVFS                    2
    711 #define TABLE_AVFS_PSM_DEBUG          3
    712 #define TABLE_AVFS_FUSE_OVERRIDE      4
    713 #define TABLE_PMSTATUSLOG             5
    714 #define TABLE_SMU_METRICS             6
    715 #define TABLE_DRIVER_SMU_CONFIG       7
    716 #define TABLE_ACTIVITY_MONITOR_COEFF  8
    717 #define TABLE_OVERDRIVE               9
    718 #define TABLE_COUNT                  10
    719 
    720 
    721 #define UCLK_SWITCH_SLOW 0
    722 #define UCLK_SWITCH_FAST 1
    723 
    724 
    725 #define SQ_Enable_MASK 0x1
    726 #define SQ_IR_MASK 0x2
    727 #define SQ_PCC_MASK 0x4
    728 #define SQ_EDC_MASK 0x8
    729 
    730 #define TCP_Enable_MASK 0x100
    731 #define TCP_IR_MASK 0x200
    732 #define TCP_PCC_MASK 0x400
    733 #define TCP_EDC_MASK 0x800
    734 
    735 #define TD_Enable_MASK 0x10000
    736 #define TD_IR_MASK 0x20000
    737 #define TD_PCC_MASK 0x40000
    738 #define TD_EDC_MASK 0x80000
    739 
    740 #define DB_Enable_MASK 0x1000000
    741 #define DB_IR_MASK 0x2000000
    742 #define DB_PCC_MASK 0x4000000
    743 #define DB_EDC_MASK 0x8000000
    744 
    745 #define SQ_Enable_SHIFT 0
    746 #define SQ_IR_SHIFT 1
    747 #define SQ_PCC_SHIFT 2
    748 #define SQ_EDC_SHIFT 3
    749 
    750 #define TCP_Enable_SHIFT 8
    751 #define TCP_IR_SHIFT 9
    752 #define TCP_PCC_SHIFT 10
    753 #define TCP_EDC_SHIFT 11
    754 
    755 #define TD_Enable_SHIFT 16
    756 #define TD_IR_SHIFT 17
    757 #define TD_PCC_SHIFT 18
    758 #define TD_EDC_SHIFT 19
    759 
    760 #define DB_Enable_SHIFT 24
    761 #define DB_IR_SHIFT 25
    762 #define DB_PCC_SHIFT 26
    763 #define DB_EDC_SHIFT 27
    764 
    765 #define REMOVE_FMAX_MARGIN_BIT     0x0
    766 #define REMOVE_DCTOL_MARGIN_BIT    0x1
    767 #define REMOVE_PLATFORM_MARGIN_BIT 0x2
    768 
    769 #endif
    770