linux/drivers/gpu/drm/amd/pm/inc/smu11_driver_if.h
<<
>>
Prefs
   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
 894