cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

smu11_driver_if.h (27273B)


      1/*
      2 * Copyright 2018 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 SMU11_DRIVER_IF_H
     25#define SMU11_DRIVER_IF_H
     26
     27// *** IMPORTANT ***
     28// SMU TEAM: Always increment the interface version if
     29// any structure is changed in this file
     30// Be aware of that the version should be updated in
     31// smu_v11_0.h, rename is also needed.
     32// #define SMU11_DRIVER_IF_VERSION 0x13
     33
     34#define PPTABLE_V20_SMU_VERSION 3
     35
     36#define NUM_GFXCLK_DPM_LEVELS  16
     37#define NUM_VCLK_DPM_LEVELS    8
     38#define NUM_DCLK_DPM_LEVELS    8
     39#define NUM_ECLK_DPM_LEVELS    8
     40#define NUM_MP0CLK_DPM_LEVELS  2
     41#define NUM_SOCCLK_DPM_LEVELS  8
     42#define NUM_UCLK_DPM_LEVELS    4
     43#define NUM_FCLK_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#define NUM_XGMI_LEVELS        2
     50
     51#define MAX_GFXCLK_DPM_LEVEL  (NUM_GFXCLK_DPM_LEVELS  - 1)
     52#define MAX_VCLK_DPM_LEVEL    (NUM_VCLK_DPM_LEVELS    - 1)
     53#define MAX_DCLK_DPM_LEVEL    (NUM_DCLK_DPM_LEVELS    - 1)
     54#define MAX_ECLK_DPM_LEVEL    (NUM_ECLK_DPM_LEVELS    - 1)
     55#define MAX_MP0CLK_DPM_LEVEL  (NUM_MP0CLK_DPM_LEVELS  - 1)
     56#define MAX_SOCCLK_DPM_LEVEL  (NUM_SOCCLK_DPM_LEVELS  - 1)
     57#define MAX_UCLK_DPM_LEVEL    (NUM_UCLK_DPM_LEVELS    - 1)
     58#define MAX_FCLK_DPM_LEVEL    (NUM_FCLK_DPM_LEVELS    - 1)
     59#define MAX_DCEFCLK_DPM_LEVEL (NUM_DCEFCLK_DPM_LEVELS - 1)
     60#define MAX_DISPCLK_DPM_LEVEL (NUM_DISPCLK_DPM_LEVELS - 1)
     61#define MAX_PIXCLK_DPM_LEVEL  (NUM_PIXCLK_DPM_LEVELS  - 1)
     62#define MAX_PHYCLK_DPM_LEVEL  (NUM_PHYCLK_DPM_LEVELS  - 1)
     63#define MAX_LINK_LEVEL        (NUM_LINK_LEVELS        - 1)
     64#define MAX_XGMI_LEVEL        (NUM_XGMI_LEVELS        - 1)
     65
     66#define PPSMC_GeminiModeNone   0
     67#define PPSMC_GeminiModeMaster 1
     68#define PPSMC_GeminiModeSlave  2
     69
     70
     71#define FEATURE_DPM_PREFETCHER_BIT      0
     72#define FEATURE_DPM_GFXCLK_BIT          1
     73#define FEATURE_DPM_UCLK_BIT            2
     74#define FEATURE_DPM_SOCCLK_BIT          3
     75#define FEATURE_DPM_UVD_BIT             4
     76#define FEATURE_DPM_VCE_BIT             5
     77#define FEATURE_ULV_BIT                 6
     78#define FEATURE_DPM_MP0CLK_BIT          7
     79#define FEATURE_DPM_LINK_BIT            8
     80#define FEATURE_DPM_DCEFCLK_BIT         9
     81#define FEATURE_DS_GFXCLK_BIT           10
     82#define FEATURE_DS_SOCCLK_BIT           11
     83#define FEATURE_DS_LCLK_BIT             12
     84#define FEATURE_PPT_BIT                 13
     85#define FEATURE_TDC_BIT                 14
     86#define FEATURE_THERMAL_BIT             15
     87#define FEATURE_GFX_PER_CU_CG_BIT       16
     88#define FEATURE_RM_BIT                  17
     89#define FEATURE_DS_DCEFCLK_BIT          18
     90#define FEATURE_ACDC_BIT                19
     91#define FEATURE_VR0HOT_BIT              20
     92#define FEATURE_VR1HOT_BIT              21
     93#define FEATURE_FW_CTF_BIT              22
     94#define FEATURE_LED_DISPLAY_BIT         23
     95#define FEATURE_FAN_CONTROL_BIT         24
     96#define FEATURE_GFX_EDC_BIT             25
     97#define FEATURE_GFXOFF_BIT              26
     98#define FEATURE_CG_BIT                  27
     99#define FEATURE_DPM_FCLK_BIT            28
    100#define FEATURE_DS_FCLK_BIT             29
    101#define FEATURE_DS_MP1CLK_BIT           30
    102#define FEATURE_DS_MP0CLK_BIT           31
    103#define FEATURE_XGMI_BIT                32
    104#define FEATURE_ECC_BIT                 33
    105#define FEATURE_SPARE_34_BIT            34
    106#define FEATURE_SPARE_35_BIT            35
    107#define FEATURE_SPARE_36_BIT            36
    108#define FEATURE_SPARE_37_BIT            37
    109#define FEATURE_SPARE_38_BIT            38
    110#define FEATURE_SPARE_39_BIT            39
    111#define FEATURE_SPARE_40_BIT            40
    112#define FEATURE_SPARE_41_BIT            41
    113#define FEATURE_SPARE_42_BIT            42
    114#define FEATURE_SPARE_43_BIT            43
    115#define FEATURE_SPARE_44_BIT            44
    116#define FEATURE_SPARE_45_BIT            45
    117#define FEATURE_SPARE_46_BIT            46
    118#define FEATURE_SPARE_47_BIT            47
    119#define FEATURE_SPARE_48_BIT            48
    120#define FEATURE_SPARE_49_BIT            49
    121#define FEATURE_SPARE_50_BIT            50
    122#define FEATURE_SPARE_51_BIT            51
    123#define FEATURE_SPARE_52_BIT            52
    124#define FEATURE_SPARE_53_BIT            53
    125#define FEATURE_SPARE_54_BIT            54
    126#define FEATURE_SPARE_55_BIT            55
    127#define FEATURE_SPARE_56_BIT            56
    128#define FEATURE_SPARE_57_BIT            57
    129#define FEATURE_SPARE_58_BIT            58
    130#define FEATURE_SPARE_59_BIT            59
    131#define FEATURE_SPARE_60_BIT            60
    132#define FEATURE_SPARE_61_BIT            61
    133#define FEATURE_SPARE_62_BIT            62
    134#define FEATURE_SPARE_63_BIT            63
    135
    136#define NUM_FEATURES                    64
    137
    138#define FEATURE_DPM_PREFETCHER_MASK     (1 << FEATURE_DPM_PREFETCHER_BIT     )
    139#define FEATURE_DPM_GFXCLK_MASK         (1 << FEATURE_DPM_GFXCLK_BIT         )
    140#define FEATURE_DPM_UCLK_MASK           (1 << FEATURE_DPM_UCLK_BIT           )
    141#define FEATURE_DPM_SOCCLK_MASK         (1 << FEATURE_DPM_SOCCLK_BIT         )
    142#define FEATURE_DPM_UVD_MASK            (1 << FEATURE_DPM_UVD_BIT            )
    143#define FEATURE_DPM_VCE_MASK            (1 << FEATURE_DPM_VCE_BIT            )
    144#define FEATURE_ULV_MASK                (1 << FEATURE_ULV_BIT                )
    145#define FEATURE_DPM_MP0CLK_MASK         (1 << FEATURE_DPM_MP0CLK_BIT         )
    146#define FEATURE_DPM_LINK_MASK           (1 << FEATURE_DPM_LINK_BIT           )
    147#define FEATURE_DPM_DCEFCLK_MASK        (1 << FEATURE_DPM_DCEFCLK_BIT        )
    148#define FEATURE_DS_GFXCLK_MASK          (1 << FEATURE_DS_GFXCLK_BIT          )
    149#define FEATURE_DS_SOCCLK_MASK          (1 << FEATURE_DS_SOCCLK_BIT          )
    150#define FEATURE_DS_LCLK_MASK            (1 << FEATURE_DS_LCLK_BIT            )
    151#define FEATURE_PPT_MASK                (1 << FEATURE_PPT_BIT                )
    152#define FEATURE_TDC_MASK                (1 << FEATURE_TDC_BIT                )
    153#define FEATURE_THERMAL_MASK            (1 << FEATURE_THERMAL_BIT            )
    154#define FEATURE_GFX_PER_CU_CG_MASK      (1 << FEATURE_GFX_PER_CU_CG_BIT      )
    155#define FEATURE_RM_MASK                 (1 << FEATURE_RM_BIT                 )
    156#define FEATURE_DS_DCEFCLK_MASK         (1 << FEATURE_DS_DCEFCLK_BIT         )
    157#define FEATURE_ACDC_MASK               (1 << FEATURE_ACDC_BIT               )
    158#define FEATURE_VR0HOT_MASK             (1 << FEATURE_VR0HOT_BIT             )
    159#define FEATURE_VR1HOT_MASK             (1 << FEATURE_VR1HOT_BIT             )
    160#define FEATURE_FW_CTF_MASK             (1 << FEATURE_FW_CTF_BIT             )
    161#define FEATURE_LED_DISPLAY_MASK        (1 << FEATURE_LED_DISPLAY_BIT        )
    162#define FEATURE_FAN_CONTROL_MASK        (1 << FEATURE_FAN_CONTROL_BIT        )
    163#define FEATURE_GFX_EDC_MASK            (1 << FEATURE_GFX_EDC_BIT            )
    164#define FEATURE_GFXOFF_MASK             (1 << FEATURE_GFXOFF_BIT             )
    165#define FEATURE_CG_MASK                 (1 << FEATURE_CG_BIT                 )
    166#define FEATURE_DPM_FCLK_MASK           (1 << FEATURE_DPM_FCLK_BIT           )
    167#define FEATURE_DS_FCLK_MASK            (1 << FEATURE_DS_FCLK_BIT            )
    168#define FEATURE_DS_MP1CLK_MASK          (1 << FEATURE_DS_MP1CLK_BIT          )
    169#define FEATURE_DS_MP0CLK_MASK          (1 << FEATURE_DS_MP0CLK_BIT          )
    170#define FEATURE_XGMI_MASK               (1ULL << FEATURE_XGMI_BIT               )
    171#define FEATURE_ECC_MASK                (1ULL << FEATURE_ECC_BIT                )
    172
    173#define DPM_OVERRIDE_DISABLE_SOCCLK_PID             0x00000001
    174#define DPM_OVERRIDE_DISABLE_UCLK_PID               0x00000002
    175#define DPM_OVERRIDE_ENABLE_VOLT_LINK_UVD_SOCCLK    0x00000004
    176#define DPM_OVERRIDE_ENABLE_VOLT_LINK_UVD_UCLK      0x00000008
    177#define DPM_OVERRIDE_ENABLE_FREQ_LINK_VCLK_SOCCLK   0x00000010
    178#define DPM_OVERRIDE_ENABLE_FREQ_LINK_VCLK_UCLK     0x00000020
    179#define DPM_OVERRIDE_ENABLE_FREQ_LINK_DCLK_SOCCLK   0x00000040
    180#define DPM_OVERRIDE_ENABLE_FREQ_LINK_DCLK_UCLK     0x00000080
    181#define DPM_OVERRIDE_ENABLE_VOLT_LINK_VCE_SOCCLK    0x00000100
    182#define DPM_OVERRIDE_ENABLE_VOLT_LINK_VCE_UCLK      0x00000200
    183#define DPM_OVERRIDE_ENABLE_FREQ_LINK_ECLK_SOCCLK   0x00000400
    184#define DPM_OVERRIDE_ENABLE_FREQ_LINK_ECLK_UCLK     0x00000800
    185#define DPM_OVERRIDE_ENABLE_FREQ_LINK_GFXCLK_SOCCLK 0x00001000
    186#define DPM_OVERRIDE_ENABLE_FREQ_LINK_GFXCLK_UCLK   0x00002000
    187#define DPM_OVERRIDE_ENABLE_GFXOFF_GFXCLK_SWITCH    0x00004000
    188#define DPM_OVERRIDE_ENABLE_GFXOFF_SOCCLK_SWITCH    0x00008000
    189#define DPM_OVERRIDE_ENABLE_GFXOFF_UCLK_SWITCH      0x00010000
    190#define DPM_OVERRIDE_ENABLE_GFXOFF_FCLK_SWITCH      0x00020000
    191
    192#define I2C_CONTROLLER_ENABLED     1
    193#define I2C_CONTROLLER_DISABLED    0
    194
    195#define VR_MAPPING_VR_SELECT_MASK  0x01
    196#define VR_MAPPING_VR_SELECT_SHIFT 0x00
    197
    198#define VR_MAPPING_PLANE_SELECT_MASK  0x02
    199#define VR_MAPPING_PLANE_SELECT_SHIFT 0x01
    200
    201
    202#define PSI_SEL_VR0_PLANE0_PSI0  0x01
    203#define PSI_SEL_VR0_PLANE0_PSI1  0x02
    204#define PSI_SEL_VR0_PLANE1_PSI0  0x04
    205#define PSI_SEL_VR0_PLANE1_PSI1  0x08
    206#define PSI_SEL_VR1_PLANE0_PSI0  0x10
    207#define PSI_SEL_VR1_PLANE0_PSI1  0x20
    208#define PSI_SEL_VR1_PLANE1_PSI0  0x40
    209#define PSI_SEL_VR1_PLANE1_PSI1  0x80
    210
    211
    212#define THROTTLER_STATUS_PADDING_BIT      0
    213#define THROTTLER_STATUS_TEMP_EDGE_BIT    1
    214#define THROTTLER_STATUS_TEMP_HOTSPOT_BIT 2
    215#define THROTTLER_STATUS_TEMP_HBM_BIT     3
    216#define THROTTLER_STATUS_TEMP_VR_GFX_BIT  4
    217#define THROTTLER_STATUS_TEMP_VR_SOC_BIT  5
    218#define THROTTLER_STATUS_TEMP_VR_MEM0_BIT 6
    219#define THROTTLER_STATUS_TEMP_VR_MEM1_BIT 7
    220#define THROTTLER_STATUS_TEMP_LIQUID_BIT  8
    221#define THROTTLER_STATUS_TEMP_PLX_BIT     9
    222#define THROTTLER_STATUS_TEMP_SKIN_BIT    10
    223#define THROTTLER_STATUS_TDC_GFX_BIT      11
    224#define THROTTLER_STATUS_TDC_SOC_BIT      12
    225#define THROTTLER_STATUS_PPT_BIT          13
    226#define THROTTLER_STATUS_FIT_BIT          14
    227#define THROTTLER_STATUS_PPM_BIT          15
    228
    229
    230#define TABLE_TRANSFER_OK         0x0
    231#define TABLE_TRANSFER_FAILED     0xFF
    232
    233
    234#define WORKLOAD_DEFAULT_BIT              0
    235#define WORKLOAD_PPLIB_FULL_SCREEN_3D_BIT 1
    236#define WORKLOAD_PPLIB_POWER_SAVING_BIT   2
    237#define WORKLOAD_PPLIB_VIDEO_BIT          3
    238#define WORKLOAD_PPLIB_VR_BIT             4
    239#define WORKLOAD_PPLIB_COMPUTE_BIT        5
    240#define WORKLOAD_PPLIB_CUSTOM_BIT         6
    241#define WORKLOAD_PPLIB_COUNT              7
    242
    243
    244#define XGMI_STATE_D0 1
    245#define XGMI_STATE_D3 0
    246
    247typedef enum {
    248  I2C_CONTROLLER_PORT_0 = 0,
    249  I2C_CONTROLLER_PORT_1 = 1,
    250} I2cControllerPort_e;
    251
    252typedef enum {
    253  I2C_CONTROLLER_NAME_VR_GFX = 0,
    254  I2C_CONTROLLER_NAME_VR_SOC,
    255  I2C_CONTROLLER_NAME_VR_VDDCI,
    256  I2C_CONTROLLER_NAME_VR_HBM,
    257  I2C_CONTROLLER_NAME_LIQUID_0,
    258  I2C_CONTROLLER_NAME_LIQUID_1,
    259  I2C_CONTROLLER_NAME_PLX,
    260  I2C_CONTROLLER_NAME_COUNT,
    261} I2cControllerName_e;
    262
    263typedef enum {
    264  I2C_CONTROLLER_THROTTLER_TYPE_NONE = 0,
    265  I2C_CONTROLLER_THROTTLER_VR_GFX,
    266  I2C_CONTROLLER_THROTTLER_VR_SOC,
    267  I2C_CONTROLLER_THROTTLER_VR_VDDCI,
    268  I2C_CONTROLLER_THROTTLER_VR_HBM,
    269  I2C_CONTROLLER_THROTTLER_LIQUID_0,
    270  I2C_CONTROLLER_THROTTLER_LIQUID_1,
    271  I2C_CONTROLLER_THROTTLER_PLX,
    272} I2cControllerThrottler_e;
    273
    274typedef enum {
    275  I2C_CONTROLLER_PROTOCOL_VR_XPDE132G5,
    276  I2C_CONTROLLER_PROTOCOL_VR_IR35217,
    277  I2C_CONTROLLER_PROTOCOL_TMP_TMP102A,
    278  I2C_CONTROLLER_PROTOCOL_SPARE_0,
    279  I2C_CONTROLLER_PROTOCOL_SPARE_1,
    280  I2C_CONTROLLER_PROTOCOL_SPARE_2,
    281} I2cControllerProtocol_e;
    282
    283typedef enum {
    284  I2C_CONTROLLER_SPEED_SLOW = 0,
    285  I2C_CONTROLLER_SPEED_FAST = 1,
    286} I2cControllerSpeed_e;
    287
    288typedef struct {
    289  uint32_t Enabled;
    290  uint32_t SlaveAddress;
    291  uint32_t ControllerPort;
    292  uint32_t ControllerName;
    293
    294  uint32_t ThermalThrottler;
    295  uint32_t I2cProtocol;
    296  uint32_t I2cSpeed;
    297} I2cControllerConfig_t;
    298
    299typedef struct {
    300  uint32_t a;
    301  uint32_t b;
    302  uint32_t c;
    303} QuadraticInt_t;
    304
    305typedef struct {
    306  uint32_t m;
    307  uint32_t b;
    308} LinearInt_t;
    309
    310typedef struct {
    311  uint32_t a;
    312  uint32_t b;
    313  uint32_t c;
    314} DroopInt_t;
    315
    316typedef enum {
    317  PPCLK_GFXCLK,
    318  PPCLK_VCLK,
    319  PPCLK_DCLK,
    320  PPCLK_ECLK,
    321  PPCLK_SOCCLK,
    322  PPCLK_UCLK,
    323  PPCLK_DCEFCLK,
    324  PPCLK_DISPCLK,
    325  PPCLK_PIXCLK,
    326  PPCLK_PHYCLK,
    327  PPCLK_FCLK,
    328  PPCLK_COUNT,
    329} PPCLK_e;
    330
    331typedef enum {
    332  POWER_SOURCE_AC,
    333  POWER_SOURCE_DC,
    334  POWER_SOURCE_COUNT,
    335} POWER_SOURCE_e;
    336
    337typedef enum {
    338  VOLTAGE_MODE_AVFS = 0,
    339  VOLTAGE_MODE_AVFS_SS,
    340  VOLTAGE_MODE_SS,
    341  VOLTAGE_MODE_COUNT,
    342} VOLTAGE_MODE_e;
    343
    344
    345typedef enum {
    346  AVFS_VOLTAGE_GFX = 0,
    347  AVFS_VOLTAGE_SOC,
    348  AVFS_VOLTAGE_COUNT,
    349} AVFS_VOLTAGE_TYPE_e;
    350
    351
    352typedef struct {
    353  uint8_t        VoltageMode;
    354  uint8_t        SnapToDiscrete;
    355  uint8_t        NumDiscreteLevels;
    356  uint8_t        padding;
    357  LinearInt_t    ConversionToAvfsClk;
    358  QuadraticInt_t SsCurve;
    359} DpmDescriptor_t;
    360
    361typedef struct {
    362  uint32_t Version;
    363
    364
    365  uint32_t FeaturesToRun[2];
    366
    367
    368  uint16_t SocketPowerLimitAc0;
    369  uint16_t SocketPowerLimitAc0Tau;
    370  uint16_t SocketPowerLimitAc1;
    371  uint16_t SocketPowerLimitAc1Tau;
    372  uint16_t SocketPowerLimitAc2;
    373  uint16_t SocketPowerLimitAc2Tau;
    374  uint16_t SocketPowerLimitAc3;
    375  uint16_t SocketPowerLimitAc3Tau;
    376  uint16_t SocketPowerLimitDc;
    377  uint16_t SocketPowerLimitDcTau;
    378  uint16_t TdcLimitSoc;
    379  uint16_t TdcLimitSocTau;
    380  uint16_t TdcLimitGfx;
    381  uint16_t TdcLimitGfxTau;
    382
    383  uint16_t TedgeLimit;
    384  uint16_t ThotspotLimit;
    385  uint16_t ThbmLimit;
    386  uint16_t Tvr_gfxLimit;
    387  uint16_t Tvr_memLimit;
    388  uint16_t Tliquid1Limit;
    389  uint16_t Tliquid2Limit;
    390  uint16_t TplxLimit;
    391  uint32_t FitLimit;
    392
    393  uint16_t PpmPowerLimit;
    394  uint16_t PpmTemperatureThreshold;
    395
    396  uint8_t  MemoryOnPackage;
    397  uint8_t  padding8_limits;
    398  uint16_t Tvr_SocLimit;
    399
    400  uint16_t  UlvVoltageOffsetSoc;
    401  uint16_t  UlvVoltageOffsetGfx;
    402
    403  uint8_t  UlvSmnclkDid;
    404  uint8_t  UlvMp1clkDid;
    405  uint8_t  UlvGfxclkBypass;
    406  uint8_t  Padding234;
    407
    408
    409  uint16_t     MinVoltageGfx;
    410  uint16_t     MinVoltageSoc;
    411  uint16_t     MaxVoltageGfx;
    412  uint16_t     MaxVoltageSoc;
    413
    414  uint16_t     LoadLineResistanceGfx;
    415  uint16_t     LoadLineResistanceSoc;
    416
    417  DpmDescriptor_t DpmDescriptor[PPCLK_COUNT];
    418
    419  uint16_t       FreqTableGfx      [NUM_GFXCLK_DPM_LEVELS  ];
    420  uint16_t       FreqTableVclk     [NUM_VCLK_DPM_LEVELS    ];
    421  uint16_t       FreqTableDclk     [NUM_DCLK_DPM_LEVELS    ];
    422  uint16_t       FreqTableEclk     [NUM_ECLK_DPM_LEVELS    ];
    423  uint16_t       FreqTableSocclk   [NUM_SOCCLK_DPM_LEVELS  ];
    424  uint16_t       FreqTableUclk     [NUM_UCLK_DPM_LEVELS    ];
    425  uint16_t       FreqTableFclk     [NUM_FCLK_DPM_LEVELS    ];
    426  uint16_t       FreqTableDcefclk  [NUM_DCEFCLK_DPM_LEVELS ];
    427  uint16_t       FreqTableDispclk  [NUM_DISPCLK_DPM_LEVELS ];
    428  uint16_t       FreqTablePixclk   [NUM_PIXCLK_DPM_LEVELS  ];
    429  uint16_t       FreqTablePhyclk   [NUM_PHYCLK_DPM_LEVELS  ];
    430
    431  uint16_t       DcModeMaxFreq     [PPCLK_COUNT            ];
    432  uint16_t       Padding8_Clks;
    433
    434  uint16_t       Mp0clkFreq        [NUM_MP0CLK_DPM_LEVELS];
    435  uint16_t       Mp0DpmVoltage     [NUM_MP0CLK_DPM_LEVELS];
    436
    437
    438  uint16_t        GfxclkFidle;
    439  uint16_t        GfxclkSlewRate;
    440  uint16_t        CksEnableFreq;
    441  uint16_t        Padding789;
    442  QuadraticInt_t  CksVoltageOffset;
    443  uint8_t         Padding567[4];
    444  uint16_t        GfxclkDsMaxFreq;
    445  uint8_t         GfxclkSource;
    446  uint8_t         Padding456;
    447
    448  uint8_t      LowestUclkReservedForUlv;
    449  uint8_t      Padding8_Uclk[3];
    450
    451
    452  uint8_t      PcieGenSpeed[NUM_LINK_LEVELS];
    453  uint8_t      PcieLaneCount[NUM_LINK_LEVELS];
    454  uint16_t     LclkFreq[NUM_LINK_LEVELS];
    455
    456
    457  uint16_t     EnableTdpm;
    458  uint16_t     TdpmHighHystTemperature;
    459  uint16_t     TdpmLowHystTemperature;
    460  uint16_t     GfxclkFreqHighTempLimit;
    461
    462
    463  uint16_t     FanStopTemp;
    464  uint16_t     FanStartTemp;
    465
    466  uint16_t     FanGainEdge;
    467  uint16_t     FanGainHotspot;
    468  uint16_t     FanGainLiquid;
    469  uint16_t     FanGainVrGfx;
    470  uint16_t     FanGainVrSoc;
    471  uint16_t     FanGainPlx;
    472  uint16_t     FanGainHbm;
    473  uint16_t     FanPwmMin;
    474  uint16_t     FanAcousticLimitRpm;
    475  uint16_t     FanThrottlingRpm;
    476  uint16_t     FanMaximumRpm;
    477  uint16_t     FanTargetTemperature;
    478  uint16_t     FanTargetGfxclk;
    479  uint8_t      FanZeroRpmEnable;
    480  uint8_t      FanTachEdgePerRev;
    481
    482
    483
    484  int16_t      FuzzyFan_ErrorSetDelta;
    485  int16_t      FuzzyFan_ErrorRateSetDelta;
    486  int16_t      FuzzyFan_PwmSetDelta;
    487  uint16_t     FuzzyFan_Reserved;
    488
    489
    490  uint8_t           OverrideAvfsGb[AVFS_VOLTAGE_COUNT];
    491  uint8_t           Padding8_Avfs[2];
    492
    493  QuadraticInt_t    qAvfsGb[AVFS_VOLTAGE_COUNT];
    494  DroopInt_t        dBtcGbGfxCksOn;
    495  DroopInt_t        dBtcGbGfxCksOff;
    496  DroopInt_t        dBtcGbGfxAfll;
    497  DroopInt_t        dBtcGbSoc;
    498  LinearInt_t       qAgingGb[AVFS_VOLTAGE_COUNT];
    499
    500  QuadraticInt_t    qStaticVoltageOffset[AVFS_VOLTAGE_COUNT];
    501
    502  uint16_t          DcTol[AVFS_VOLTAGE_COUNT];
    503
    504  uint8_t           DcBtcEnabled[AVFS_VOLTAGE_COUNT];
    505  uint8_t           Padding8_GfxBtc[2];
    506
    507  int16_t           DcBtcMin[AVFS_VOLTAGE_COUNT];
    508  uint16_t          DcBtcMax[AVFS_VOLTAGE_COUNT];
    509
    510
    511  uint8_t           XgmiLinkSpeed   [NUM_XGMI_LEVELS];
    512  uint8_t           XgmiLinkWidth   [NUM_XGMI_LEVELS];
    513  uint16_t          XgmiFclkFreq    [NUM_XGMI_LEVELS];
    514  uint16_t          XgmiUclkFreq    [NUM_XGMI_LEVELS];
    515  uint16_t          XgmiSocclkFreq  [NUM_XGMI_LEVELS];
    516  uint16_t          XgmiSocVoltage  [NUM_XGMI_LEVELS];
    517
    518  uint32_t          DebugOverrides;
    519  QuadraticInt_t    ReservedEquation0;
    520  QuadraticInt_t    ReservedEquation1;
    521  QuadraticInt_t    ReservedEquation2;
    522  QuadraticInt_t    ReservedEquation3;
    523
    524  uint16_t     MinVoltageUlvGfx;
    525  uint16_t     MinVoltageUlvSoc;
    526
    527  uint16_t     MGpuFanBoostLimitRpm;
    528  uint16_t     padding16_Fan;
    529
    530  uint16_t     FanGainVrMem0;
    531  uint16_t     FanGainVrMem1;
    532
    533  uint16_t     DcBtcGb[AVFS_VOLTAGE_COUNT];
    534
    535  uint32_t     Reserved[11];
    536
    537  uint32_t     Padding32[3];
    538
    539  uint16_t     MaxVoltageStepGfx;
    540  uint16_t     MaxVoltageStepSoc;
    541
    542  uint8_t      VddGfxVrMapping;
    543  uint8_t      VddSocVrMapping;
    544  uint8_t      VddMem0VrMapping;
    545  uint8_t      VddMem1VrMapping;
    546
    547  uint8_t      GfxUlvPhaseSheddingMask;
    548  uint8_t      SocUlvPhaseSheddingMask;
    549  uint8_t      ExternalSensorPresent;
    550  uint8_t      Padding8_V;
    551
    552
    553  uint16_t     GfxMaxCurrent;
    554  int8_t       GfxOffset;
    555  uint8_t      Padding_TelemetryGfx;
    556
    557  uint16_t     SocMaxCurrent;
    558  int8_t       SocOffset;
    559  uint8_t      Padding_TelemetrySoc;
    560
    561  uint16_t     Mem0MaxCurrent;
    562  int8_t       Mem0Offset;
    563  uint8_t      Padding_TelemetryMem0;
    564
    565  uint16_t     Mem1MaxCurrent;
    566  int8_t       Mem1Offset;
    567  uint8_t      Padding_TelemetryMem1;
    568
    569
    570  uint8_t      AcDcGpio;
    571  uint8_t      AcDcPolarity;
    572  uint8_t      VR0HotGpio;
    573  uint8_t      VR0HotPolarity;
    574
    575  uint8_t      VR1HotGpio;
    576  uint8_t      VR1HotPolarity;
    577  uint8_t      Padding1;
    578  uint8_t      Padding2;
    579
    580
    581
    582  uint8_t      LedPin0;
    583  uint8_t      LedPin1;
    584  uint8_t      LedPin2;
    585  uint8_t      padding8_4;
    586
    587
    588  uint8_t      PllGfxclkSpreadEnabled;
    589  uint8_t      PllGfxclkSpreadPercent;
    590  uint16_t     PllGfxclkSpreadFreq;
    591
    592  uint8_t      UclkSpreadEnabled;
    593  uint8_t      UclkSpreadPercent;
    594  uint16_t     UclkSpreadFreq;
    595
    596  uint8_t      FclkSpreadEnabled;
    597  uint8_t      FclkSpreadPercent;
    598  uint16_t     FclkSpreadFreq;
    599
    600  uint8_t      FllGfxclkSpreadEnabled;
    601  uint8_t      FllGfxclkSpreadPercent;
    602  uint16_t     FllGfxclkSpreadFreq;
    603
    604  I2cControllerConfig_t I2cControllers[I2C_CONTROLLER_NAME_COUNT];
    605
    606  uint32_t     BoardReserved[10];
    607
    608
    609  uint32_t     MmHubPadding[8];
    610
    611} PPTable_t;
    612
    613typedef struct {
    614
    615  uint16_t     GfxclkAverageLpfTau;
    616  uint16_t     SocclkAverageLpfTau;
    617  uint16_t     UclkAverageLpfTau;
    618  uint16_t     GfxActivityLpfTau;
    619  uint16_t     UclkActivityLpfTau;
    620  uint16_t     SocketPowerLpfTau;
    621
    622
    623  uint32_t     MmHubPadding[8];
    624} DriverSmuConfig_t;
    625
    626typedef struct {
    627
    628  uint16_t      GfxclkFmin;
    629  uint16_t      GfxclkFmax;
    630  uint16_t      GfxclkFreq1;
    631  uint16_t      GfxclkVolt1;
    632  uint16_t      GfxclkFreq2;
    633  uint16_t      GfxclkVolt2;
    634  uint16_t      GfxclkFreq3;
    635  uint16_t      GfxclkVolt3;
    636  uint16_t      UclkFmax;
    637  int16_t       OverDrivePct;
    638  uint16_t      FanMaximumRpm;
    639  uint16_t      FanMinimumPwm;
    640  uint16_t      FanTargetTemperature;
    641  uint16_t      MaxOpTemp;
    642  uint16_t      FanZeroRpmEnable;
    643  uint16_t      Padding;
    644
    645} OverDriveTable_t;
    646
    647typedef struct {
    648  uint16_t CurrClock[PPCLK_COUNT];
    649  uint16_t AverageGfxclkFrequency;
    650  uint16_t AverageSocclkFrequency;
    651  uint16_t AverageUclkFrequency  ;
    652  uint16_t AverageGfxActivity    ;
    653  uint16_t AverageUclkActivity   ;
    654  uint8_t  CurrSocVoltageOffset  ;
    655  uint8_t  CurrGfxVoltageOffset  ;
    656  uint8_t  CurrMemVidOffset      ;
    657  uint8_t  Padding8              ;
    658  uint16_t CurrSocketPower       ;
    659  uint16_t TemperatureEdge       ;
    660  uint16_t TemperatureHotspot    ;
    661  uint16_t TemperatureHBM        ;
    662  uint16_t TemperatureVrGfx      ;
    663  uint16_t TemperatureVrSoc      ;
    664  uint16_t TemperatureVrMem0     ;
    665  uint16_t TemperatureVrMem1     ;
    666  uint16_t TemperatureLiquid     ;
    667  uint16_t TemperaturePlx        ;
    668  uint32_t ThrottlerStatus       ;
    669
    670  uint8_t  LinkDpmLevel;
    671  uint16_t AverageSocketPower;
    672  uint8_t  Padding;
    673
    674
    675  uint32_t     MmHubPadding[7];
    676} SmuMetrics_t;
    677
    678typedef struct {
    679  uint16_t MinClock;
    680  uint16_t MaxClock;
    681  uint16_t MinUclk;
    682  uint16_t MaxUclk;
    683
    684  uint8_t  WmSetting;
    685  uint8_t  Padding[3];
    686} WatermarkRowGeneric_t;
    687
    688#define NUM_WM_RANGES 4
    689
    690typedef enum {
    691  WM_SOCCLK = 0,
    692  WM_DCEFCLK,
    693  WM_COUNT_PP,
    694} WM_CLOCK_e;
    695
    696typedef struct {
    697
    698  WatermarkRowGeneric_t WatermarkRow[WM_COUNT_PP][NUM_WM_RANGES];
    699
    700  uint32_t     MmHubPadding[7];
    701} Watermarks_t;
    702
    703typedef struct {
    704  uint16_t avgPsmCount[45];
    705  uint16_t minPsmCount[45];
    706  float    avgPsmVoltage[45];
    707  float    minPsmVoltage[45];
    708
    709  uint16_t avgScsPsmCount;
    710  uint16_t minScsPsmCount;
    711  float    avgScsPsmVoltage;
    712  float    minScsPsmVoltage;
    713
    714
    715  uint32_t MmHubPadding[6];
    716} AvfsDebugTable_t;
    717
    718typedef struct {
    719  uint8_t  AvfsVersion;
    720  uint8_t  AvfsEn[AVFS_VOLTAGE_COUNT];
    721
    722  uint8_t  OverrideVFT[AVFS_VOLTAGE_COUNT];
    723  uint8_t  OverrideAvfsGb[AVFS_VOLTAGE_COUNT];
    724
    725  uint8_t  OverrideTemperatures[AVFS_VOLTAGE_COUNT];
    726  uint8_t  OverrideVInversion[AVFS_VOLTAGE_COUNT];
    727  uint8_t  OverrideP2V[AVFS_VOLTAGE_COUNT];
    728  uint8_t  OverrideP2VCharzFreq[AVFS_VOLTAGE_COUNT];
    729
    730  int32_t VFT0_m1[AVFS_VOLTAGE_COUNT];
    731  int32_t VFT0_m2[AVFS_VOLTAGE_COUNT];
    732  int32_t VFT0_b[AVFS_VOLTAGE_COUNT];
    733
    734  int32_t VFT1_m1[AVFS_VOLTAGE_COUNT];
    735  int32_t VFT1_m2[AVFS_VOLTAGE_COUNT];
    736  int32_t VFT1_b[AVFS_VOLTAGE_COUNT];
    737
    738  int32_t VFT2_m1[AVFS_VOLTAGE_COUNT];
    739  int32_t VFT2_m2[AVFS_VOLTAGE_COUNT];
    740  int32_t VFT2_b[AVFS_VOLTAGE_COUNT];
    741
    742  int32_t AvfsGb0_m1[AVFS_VOLTAGE_COUNT];
    743  int32_t AvfsGb0_m2[AVFS_VOLTAGE_COUNT];
    744  int32_t AvfsGb0_b[AVFS_VOLTAGE_COUNT];
    745
    746  int32_t AcBtcGb_m1[AVFS_VOLTAGE_COUNT];
    747  int32_t AcBtcGb_m2[AVFS_VOLTAGE_COUNT];
    748  int32_t AcBtcGb_b[AVFS_VOLTAGE_COUNT];
    749
    750  uint32_t AvfsTempCold[AVFS_VOLTAGE_COUNT];
    751  uint32_t AvfsTempMid[AVFS_VOLTAGE_COUNT];
    752  uint32_t AvfsTempHot[AVFS_VOLTAGE_COUNT];
    753
    754  uint32_t VInversion[AVFS_VOLTAGE_COUNT];
    755
    756
    757  int32_t P2V_m1[AVFS_VOLTAGE_COUNT];
    758  int32_t P2V_m2[AVFS_VOLTAGE_COUNT];
    759  int32_t P2V_b[AVFS_VOLTAGE_COUNT];
    760
    761  uint32_t P2VCharzFreq[AVFS_VOLTAGE_COUNT];
    762
    763  uint32_t EnabledAvfsModules;
    764
    765  uint32_t MmHubPadding[7];
    766} AvfsFuseOverride_t;
    767
    768typedef struct {
    769
    770  uint8_t   Gfx_ActiveHystLimit;
    771  uint8_t   Gfx_IdleHystLimit;
    772  uint8_t   Gfx_FPS;
    773  uint8_t   Gfx_MinActiveFreqType;
    774  uint8_t   Gfx_BoosterFreqType; 
    775  uint8_t   Gfx_UseRlcBusy; 
    776  uint16_t  Gfx_MinActiveFreq;
    777  uint16_t  Gfx_BoosterFreq;
    778  uint16_t  Gfx_PD_Data_time_constant;
    779  uint32_t  Gfx_PD_Data_limit_a;
    780  uint32_t  Gfx_PD_Data_limit_b;
    781  uint32_t  Gfx_PD_Data_limit_c;
    782  uint32_t  Gfx_PD_Data_error_coeff;
    783  uint32_t  Gfx_PD_Data_error_rate_coeff;
    784
    785  uint8_t   Soc_ActiveHystLimit;
    786  uint8_t   Soc_IdleHystLimit;
    787  uint8_t   Soc_FPS;
    788  uint8_t   Soc_MinActiveFreqType;
    789  uint8_t   Soc_BoosterFreqType; 
    790  uint8_t   Soc_UseRlcBusy;
    791  uint16_t  Soc_MinActiveFreq;
    792  uint16_t  Soc_BoosterFreq;
    793  uint16_t  Soc_PD_Data_time_constant;
    794  uint32_t  Soc_PD_Data_limit_a;
    795  uint32_t  Soc_PD_Data_limit_b;
    796  uint32_t  Soc_PD_Data_limit_c;
    797  uint32_t  Soc_PD_Data_error_coeff;
    798  uint32_t  Soc_PD_Data_error_rate_coeff;
    799
    800  uint8_t   Mem_ActiveHystLimit;
    801  uint8_t   Mem_IdleHystLimit;
    802  uint8_t   Mem_FPS;
    803  uint8_t   Mem_MinActiveFreqType;
    804  uint8_t   Mem_BoosterFreqType;
    805  uint8_t   Mem_UseRlcBusy; 
    806  uint16_t  Mem_MinActiveFreq;
    807  uint16_t  Mem_BoosterFreq;
    808  uint16_t  Mem_PD_Data_time_constant;
    809  uint32_t  Mem_PD_Data_limit_a;
    810  uint32_t  Mem_PD_Data_limit_b;
    811  uint32_t  Mem_PD_Data_limit_c;
    812  uint32_t  Mem_PD_Data_error_coeff;
    813  uint32_t  Mem_PD_Data_error_rate_coeff;
    814
    815  uint8_t   Fclk_ActiveHystLimit;
    816  uint8_t   Fclk_IdleHystLimit;
    817  uint8_t   Fclk_FPS;
    818  uint8_t   Fclk_MinActiveFreqType;
    819  uint8_t   Fclk_BoosterFreqType;
    820  uint8_t   Fclk_UseRlcBusy;
    821  uint16_t  Fclk_MinActiveFreq;
    822  uint16_t  Fclk_BoosterFreq;
    823  uint16_t  Fclk_PD_Data_time_constant;
    824  uint32_t  Fclk_PD_Data_limit_a;
    825  uint32_t  Fclk_PD_Data_limit_b;
    826  uint32_t  Fclk_PD_Data_limit_c;
    827  uint32_t  Fclk_PD_Data_error_coeff;
    828  uint32_t  Fclk_PD_Data_error_rate_coeff;
    829
    830} DpmActivityMonitorCoeffInt_t;
    831
    832#define TABLE_PPTABLE                 0
    833#define TABLE_WATERMARKS              1
    834#define TABLE_AVFS                    2
    835#define TABLE_AVFS_PSM_DEBUG          3
    836#define TABLE_AVFS_FUSE_OVERRIDE      4
    837#define TABLE_PMSTATUSLOG             5
    838#define TABLE_SMU_METRICS             6
    839#define TABLE_DRIVER_SMU_CONFIG       7
    840#define TABLE_ACTIVITY_MONITOR_COEFF  8
    841#define TABLE_OVERDRIVE               9
    842#define TABLE_COUNT                  10
    843
    844
    845#define UCLK_SWITCH_SLOW 0
    846#define UCLK_SWITCH_FAST 1
    847
    848
    849#define SQ_Enable_MASK 0x1
    850#define SQ_IR_MASK 0x2
    851#define SQ_PCC_MASK 0x4
    852#define SQ_EDC_MASK 0x8
    853
    854#define TCP_Enable_MASK 0x100
    855#define TCP_IR_MASK 0x200
    856#define TCP_PCC_MASK 0x400
    857#define TCP_EDC_MASK 0x800
    858
    859#define TD_Enable_MASK 0x10000
    860#define TD_IR_MASK 0x20000
    861#define TD_PCC_MASK 0x40000
    862#define TD_EDC_MASK 0x80000
    863
    864#define DB_Enable_MASK 0x1000000
    865#define DB_IR_MASK 0x2000000
    866#define DB_PCC_MASK 0x4000000
    867#define DB_EDC_MASK 0x8000000
    868
    869#define SQ_Enable_SHIFT 0
    870#define SQ_IR_SHIFT 1
    871#define SQ_PCC_SHIFT 2
    872#define SQ_EDC_SHIFT 3
    873
    874#define TCP_Enable_SHIFT 8
    875#define TCP_IR_SHIFT 9
    876#define TCP_PCC_SHIFT 10
    877#define TCP_EDC_SHIFT 11
    878
    879#define TD_Enable_SHIFT 16
    880#define TD_IR_SHIFT 17
    881#define TD_PCC_SHIFT 18
    882#define TD_EDC_SHIFT 19
    883
    884#define DB_Enable_SHIFT 24
    885#define DB_IR_SHIFT 25
    886#define DB_PCC_SHIFT 26
    887#define DB_EDC_SHIFT 27
    888
    889#define REMOVE_FMAX_MARGIN_BIT     0x0
    890#define REMOVE_DCTOL_MARGIN_BIT    0x1
    891#define REMOVE_PLATFORM_MARGIN_BIT 0x2
    892
    893#endif