Home | History | Annotate | Line # | Download | only in inc
      1  1.1  riastrad /*	$NetBSD: smu73.h,v 1.2 2021/12/18 23:45:26 riastradh Exp $	*/
      2  1.1  riastrad 
      3  1.1  riastrad /*
      4  1.1  riastrad  * Copyright 2015 Advanced Micro Devices, Inc.
      5  1.1  riastrad  *
      6  1.1  riastrad  * Permission is hereby granted, free of charge, to any person obtaining a
      7  1.1  riastrad  * copy of this software and associated documentation files (the "Software"),
      8  1.1  riastrad  * to deal in the Software without restriction, including without limitation
      9  1.1  riastrad  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
     10  1.1  riastrad  * and/or sell copies of the Software, and to permit persons to whom the
     11  1.1  riastrad  * Software is furnished to do so, subject to the following conditions:
     12  1.1  riastrad  *
     13  1.1  riastrad  * The above copyright notice and this permission notice shall be included in
     14  1.1  riastrad  * all copies or substantial portions of the Software.
     15  1.1  riastrad  *
     16  1.1  riastrad  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     17  1.1  riastrad  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     18  1.1  riastrad  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     19  1.1  riastrad  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
     20  1.1  riastrad  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
     21  1.1  riastrad  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
     22  1.1  riastrad  * OTHER DEALINGS IN THE SOFTWARE.
     23  1.1  riastrad  *
     24  1.1  riastrad  */
     25  1.1  riastrad #ifndef _SMU73_H_
     26  1.1  riastrad #define _SMU73_H_
     27  1.1  riastrad 
     28  1.1  riastrad #pragma pack(push, 1)
     29  1.1  riastrad enum SID_OPTION {
     30  1.1  riastrad   SID_OPTION_HI,
     31  1.1  riastrad   SID_OPTION_LO,
     32  1.1  riastrad   SID_OPTION_COUNT
     33  1.1  riastrad };
     34  1.1  riastrad 
     35  1.1  riastrad enum Poly3rdOrderCoeff {
     36  1.1  riastrad     LEAKAGE_TEMPERATURE_SCALAR,
     37  1.1  riastrad     LEAKAGE_VOLTAGE_SCALAR,
     38  1.1  riastrad     DYNAMIC_VOLTAGE_SCALAR,
     39  1.1  riastrad     POLY_3RD_ORDER_COUNT
     40  1.1  riastrad };
     41  1.1  riastrad 
     42  1.1  riastrad struct SMU7_Poly3rdOrder_Data
     43  1.1  riastrad {
     44  1.1  riastrad     int32_t a;
     45  1.1  riastrad     int32_t b;
     46  1.1  riastrad     int32_t c;
     47  1.1  riastrad     int32_t d;
     48  1.1  riastrad     uint8_t a_shift;
     49  1.1  riastrad     uint8_t b_shift;
     50  1.1  riastrad     uint8_t c_shift;
     51  1.1  riastrad     uint8_t x_shift;
     52  1.1  riastrad };
     53  1.1  riastrad 
     54  1.1  riastrad typedef struct SMU7_Poly3rdOrder_Data SMU7_Poly3rdOrder_Data;
     55  1.1  riastrad 
     56  1.1  riastrad struct Power_Calculator_Data
     57  1.1  riastrad {
     58  1.1  riastrad   uint16_t NoLoadVoltage;
     59  1.1  riastrad   uint16_t LoadVoltage;
     60  1.1  riastrad   uint16_t Resistance;
     61  1.1  riastrad   uint16_t Temperature;
     62  1.1  riastrad   uint16_t BaseLeakage;
     63  1.1  riastrad   uint16_t LkgTempScalar;
     64  1.1  riastrad   uint16_t LkgVoltScalar;
     65  1.1  riastrad   uint16_t LkgAreaScalar;
     66  1.1  riastrad   uint16_t LkgPower;
     67  1.1  riastrad   uint16_t DynVoltScalar;
     68  1.1  riastrad   uint32_t Cac;
     69  1.1  riastrad   uint32_t DynPower;
     70  1.1  riastrad   uint32_t TotalCurrent;
     71  1.1  riastrad   uint32_t TotalPower;
     72  1.1  riastrad };
     73  1.1  riastrad 
     74  1.1  riastrad typedef struct Power_Calculator_Data PowerCalculatorData_t;
     75  1.1  riastrad 
     76  1.1  riastrad struct Gc_Cac_Weight_Data
     77  1.1  riastrad {
     78  1.1  riastrad   uint8_t index;
     79  1.1  riastrad   uint32_t value;
     80  1.1  riastrad };
     81  1.1  riastrad 
     82  1.1  riastrad typedef struct Gc_Cac_Weight_Data GcCacWeight_Data;
     83  1.1  riastrad 
     84  1.1  riastrad 
     85  1.1  riastrad typedef struct {
     86  1.1  riastrad   uint32_t high;
     87  1.1  riastrad   uint32_t low;
     88  1.1  riastrad } data_64_t;
     89  1.1  riastrad 
     90  1.1  riastrad typedef struct {
     91  1.1  riastrad   data_64_t high;
     92  1.1  riastrad   data_64_t low;
     93  1.1  riastrad } data_128_t;
     94  1.1  riastrad 
     95  1.1  riastrad #define SMU__NUM_SCLK_DPM_STATE  8
     96  1.1  riastrad #define SMU__NUM_MCLK_DPM_LEVELS 4
     97  1.1  riastrad #define SMU__NUM_LCLK_DPM_LEVELS 8
     98  1.1  riastrad #define SMU__NUM_PCIE_DPM_LEVELS 8
     99  1.1  riastrad 
    100  1.1  riastrad #define SMU7_CONTEXT_ID_SMC        1
    101  1.1  riastrad #define SMU7_CONTEXT_ID_VBIOS      2
    102  1.1  riastrad 
    103  1.1  riastrad #define SMU73_MAX_LEVELS_VDDC            16
    104  1.1  riastrad #define SMU73_MAX_LEVELS_VDDGFX          16
    105  1.1  riastrad #define SMU73_MAX_LEVELS_VDDCI           8
    106  1.1  riastrad #define SMU73_MAX_LEVELS_MVDD            4
    107  1.1  riastrad 
    108  1.1  riastrad #define SMU_MAX_SMIO_LEVELS              4
    109  1.1  riastrad 
    110  1.1  riastrad #define SMU73_MAX_LEVELS_GRAPHICS        SMU__NUM_SCLK_DPM_STATE   // SCLK + SQ DPM + ULV
    111  1.1  riastrad #define SMU73_MAX_LEVELS_MEMORY          SMU__NUM_MCLK_DPM_LEVELS   // MCLK Levels DPM
    112  1.1  riastrad #define SMU73_MAX_LEVELS_GIO             SMU__NUM_LCLK_DPM_LEVELS  // LCLK Levels
    113  1.1  riastrad #define SMU73_MAX_LEVELS_LINK            SMU__NUM_PCIE_DPM_LEVELS  // PCIe speed and number of lanes.
    114  1.1  riastrad #define SMU73_MAX_LEVELS_UVD             8   // VCLK/DCLK levels for UVD.
    115  1.1  riastrad #define SMU73_MAX_LEVELS_VCE             8   // ECLK levels for VCE.
    116  1.1  riastrad #define SMU73_MAX_LEVELS_ACP             8   // ACLK levels for ACP.
    117  1.1  riastrad #define SMU73_MAX_LEVELS_SAMU            8   // SAMCLK levels for SAMU.
    118  1.1  riastrad #define SMU73_MAX_ENTRIES_SMIO           32  // Number of entries in SMIO table.
    119  1.1  riastrad 
    120  1.1  riastrad #define DPM_NO_LIMIT 0
    121  1.1  riastrad #define DPM_NO_UP 1
    122  1.1  riastrad #define DPM_GO_DOWN 2
    123  1.1  riastrad #define DPM_GO_UP 3
    124  1.1  riastrad 
    125  1.1  riastrad #define SMU7_FIRST_DPM_GRAPHICS_LEVEL    0
    126  1.1  riastrad #define SMU7_FIRST_DPM_MEMORY_LEVEL      0
    127  1.1  riastrad 
    128  1.1  riastrad #define GPIO_CLAMP_MODE_VRHOT      1
    129  1.1  riastrad #define GPIO_CLAMP_MODE_THERM      2
    130  1.1  riastrad #define GPIO_CLAMP_MODE_DC         4
    131  1.1  riastrad 
    132  1.1  riastrad #define SCRATCH_B_TARG_PCIE_INDEX_SHIFT 0
    133  1.1  riastrad #define SCRATCH_B_TARG_PCIE_INDEX_MASK  (0x7<<SCRATCH_B_TARG_PCIE_INDEX_SHIFT)
    134  1.1  riastrad #define SCRATCH_B_CURR_PCIE_INDEX_SHIFT 3
    135  1.1  riastrad #define SCRATCH_B_CURR_PCIE_INDEX_MASK  (0x7<<SCRATCH_B_CURR_PCIE_INDEX_SHIFT)
    136  1.1  riastrad #define SCRATCH_B_TARG_UVD_INDEX_SHIFT  6
    137  1.1  riastrad #define SCRATCH_B_TARG_UVD_INDEX_MASK   (0x7<<SCRATCH_B_TARG_UVD_INDEX_SHIFT)
    138  1.1  riastrad #define SCRATCH_B_CURR_UVD_INDEX_SHIFT  9
    139  1.1  riastrad #define SCRATCH_B_CURR_UVD_INDEX_MASK   (0x7<<SCRATCH_B_CURR_UVD_INDEX_SHIFT)
    140  1.1  riastrad #define SCRATCH_B_TARG_VCE_INDEX_SHIFT  12
    141  1.1  riastrad #define SCRATCH_B_TARG_VCE_INDEX_MASK   (0x7<<SCRATCH_B_TARG_VCE_INDEX_SHIFT)
    142  1.1  riastrad #define SCRATCH_B_CURR_VCE_INDEX_SHIFT  15
    143  1.1  riastrad #define SCRATCH_B_CURR_VCE_INDEX_MASK   (0x7<<SCRATCH_B_CURR_VCE_INDEX_SHIFT)
    144  1.1  riastrad #define SCRATCH_B_TARG_ACP_INDEX_SHIFT  18
    145  1.1  riastrad #define SCRATCH_B_TARG_ACP_INDEX_MASK   (0x7<<SCRATCH_B_TARG_ACP_INDEX_SHIFT)
    146  1.1  riastrad #define SCRATCH_B_CURR_ACP_INDEX_SHIFT  21
    147  1.1  riastrad #define SCRATCH_B_CURR_ACP_INDEX_MASK   (0x7<<SCRATCH_B_CURR_ACP_INDEX_SHIFT)
    148  1.1  riastrad #define SCRATCH_B_TARG_SAMU_INDEX_SHIFT 24
    149  1.1  riastrad #define SCRATCH_B_TARG_SAMU_INDEX_MASK  (0x7<<SCRATCH_B_TARG_SAMU_INDEX_SHIFT)
    150  1.1  riastrad #define SCRATCH_B_CURR_SAMU_INDEX_SHIFT 27
    151  1.1  riastrad #define SCRATCH_B_CURR_SAMU_INDEX_MASK  (0x7<<SCRATCH_B_CURR_SAMU_INDEX_SHIFT)
    152  1.1  riastrad 
    153  1.1  riastrad // Virtualization Defines
    154  1.1  riastrad #define CG_XDMA_MASK  0x1
    155  1.1  riastrad #define CG_XDMA_SHIFT 0
    156  1.1  riastrad #define CG_UVD_MASK   0x2
    157  1.1  riastrad #define CG_UVD_SHIFT  1
    158  1.1  riastrad #define CG_VCE_MASK   0x4
    159  1.1  riastrad #define CG_VCE_SHIFT  2
    160  1.1  riastrad #define CG_SAMU_MASK  0x8
    161  1.1  riastrad #define CG_SAMU_SHIFT 3
    162  1.1  riastrad #define CG_GFX_MASK   0x10
    163  1.1  riastrad #define CG_GFX_SHIFT  4
    164  1.1  riastrad #define CG_SDMA_MASK  0x20
    165  1.1  riastrad #define CG_SDMA_SHIFT 5
    166  1.1  riastrad #define CG_HDP_MASK   0x40
    167  1.1  riastrad #define CG_HDP_SHIFT  6
    168  1.1  riastrad #define CG_MC_MASK    0x80
    169  1.1  riastrad #define CG_MC_SHIFT   7
    170  1.1  riastrad #define CG_DRM_MASK   0x100
    171  1.1  riastrad #define CG_DRM_SHIFT  8
    172  1.1  riastrad #define CG_ROM_MASK   0x200
    173  1.1  riastrad #define CG_ROM_SHIFT  9
    174  1.1  riastrad #define CG_BIF_MASK   0x400
    175  1.1  riastrad #define CG_BIF_SHIFT  10
    176  1.1  riastrad 
    177  1.1  riastrad #define SMU73_DTE_ITERATIONS 5
    178  1.1  riastrad #define SMU73_DTE_SOURCES 3
    179  1.1  riastrad #define SMU73_DTE_SINKS 1
    180  1.1  riastrad #define SMU73_NUM_CPU_TES 0
    181  1.1  riastrad #define SMU73_NUM_GPU_TES 1
    182  1.1  riastrad #define SMU73_NUM_NON_TES 2
    183  1.1  riastrad #define SMU73_DTE_FAN_SCALAR_MIN 0x100
    184  1.1  riastrad #define SMU73_DTE_FAN_SCALAR_MAX 0x166
    185  1.1  riastrad #define SMU73_DTE_FAN_TEMP_MAX 93
    186  1.1  riastrad #define SMU73_DTE_FAN_TEMP_MIN 83
    187  1.1  riastrad 
    188  1.1  riastrad #define SMU73_THERMAL_INPUT_LOOP_COUNT 6
    189  1.1  riastrad #define SMU73_THERMAL_CLAMP_MODE_COUNT 8
    190  1.1  riastrad 
    191  1.1  riastrad 
    192  1.1  riastrad struct SMU7_HystController_Data
    193  1.1  riastrad {
    194  1.1  riastrad     uint16_t waterfall_up;
    195  1.1  riastrad     uint16_t waterfall_down;
    196  1.1  riastrad     uint16_t waterfall_limit;
    197  1.1  riastrad     uint16_t release_cnt;
    198  1.1  riastrad     uint16_t release_limit;
    199  1.1  riastrad     uint16_t spare;
    200  1.1  riastrad };
    201  1.1  riastrad 
    202  1.1  riastrad typedef struct SMU7_HystController_Data SMU7_HystController_Data;
    203  1.1  riastrad 
    204  1.1  riastrad struct SMU73_PIDController
    205  1.1  riastrad {
    206  1.1  riastrad     uint32_t Ki;
    207  1.1  riastrad     int32_t LFWindupUpperLim;
    208  1.1  riastrad     int32_t LFWindupLowerLim;
    209  1.1  riastrad     uint32_t StatePrecision;
    210  1.1  riastrad 
    211  1.1  riastrad     uint32_t LfPrecision;
    212  1.1  riastrad     uint32_t LfOffset;
    213  1.1  riastrad     uint32_t MaxState;
    214  1.1  riastrad     uint32_t MaxLfFraction;
    215  1.1  riastrad     uint32_t StateShift;
    216  1.1  riastrad };
    217  1.1  riastrad 
    218  1.1  riastrad typedef struct SMU73_PIDController SMU73_PIDController;
    219  1.1  riastrad 
    220  1.1  riastrad struct SMU7_LocalDpmScoreboard
    221  1.1  riastrad {
    222  1.1  riastrad     uint32_t PercentageBusy;
    223  1.1  riastrad 
    224  1.1  riastrad     int32_t  PIDError;
    225  1.1  riastrad     int32_t  PIDIntegral;
    226  1.1  riastrad     int32_t  PIDOutput;
    227  1.1  riastrad 
    228  1.1  riastrad     uint32_t SigmaDeltaAccum;
    229  1.1  riastrad     uint32_t SigmaDeltaOutput;
    230  1.1  riastrad     uint32_t SigmaDeltaLevel;
    231  1.1  riastrad 
    232  1.1  riastrad     uint32_t UtilizationSetpoint;
    233  1.1  riastrad 
    234  1.1  riastrad     uint8_t  TdpClampMode;
    235  1.1  riastrad     uint8_t  TdcClampMode;
    236  1.1  riastrad     uint8_t  ThermClampMode;
    237  1.1  riastrad     uint8_t  VoltageBusy;
    238  1.1  riastrad 
    239  1.1  riastrad     int8_t   CurrLevel;
    240  1.1  riastrad     int8_t   TargLevel;
    241  1.1  riastrad     uint8_t  LevelChangeInProgress;
    242  1.1  riastrad     uint8_t  UpHyst;
    243  1.1  riastrad 
    244  1.1  riastrad     uint8_t  DownHyst;
    245  1.1  riastrad     uint8_t  VoltageDownHyst;
    246  1.1  riastrad     uint8_t  DpmEnable;
    247  1.1  riastrad     uint8_t  DpmRunning;
    248  1.1  riastrad 
    249  1.1  riastrad     uint8_t  DpmForce;
    250  1.1  riastrad     uint8_t  DpmForceLevel;
    251  1.1  riastrad     uint8_t  DisplayWatermark;
    252  1.1  riastrad     uint8_t  McArbIndex;
    253  1.1  riastrad 
    254  1.1  riastrad     uint32_t MinimumPerfSclk;
    255  1.1  riastrad 
    256  1.1  riastrad     uint8_t  AcpiReq;
    257  1.1  riastrad     uint8_t  AcpiAck;
    258  1.1  riastrad     uint8_t  GfxClkSlow;
    259  1.1  riastrad     uint8_t  GpioClampMode;
    260  1.1  riastrad 
    261  1.1  riastrad     uint8_t  spare2;
    262  1.1  riastrad     uint8_t  EnabledLevelsChange;
    263  1.1  riastrad     uint8_t  DteClampMode;
    264  1.1  riastrad     uint8_t  FpsClampMode;
    265  1.1  riastrad 
    266  1.1  riastrad     uint16_t LevelResidencyCounters [SMU73_MAX_LEVELS_GRAPHICS];
    267  1.1  riastrad     uint16_t LevelSwitchCounters [SMU73_MAX_LEVELS_GRAPHICS];
    268  1.1  riastrad 
    269  1.1  riastrad     void     (*TargetStateCalculator)(uint8_t);
    270  1.1  riastrad     void     (*SavedTargetStateCalculator)(uint8_t);
    271  1.1  riastrad 
    272  1.1  riastrad     uint16_t AutoDpmInterval;
    273  1.1  riastrad     uint16_t AutoDpmRange;
    274  1.1  riastrad 
    275  1.1  riastrad     uint8_t  FpsEnabled;
    276  1.1  riastrad     uint8_t  MaxPerfLevel;
    277  1.1  riastrad     uint8_t  AllowLowClkInterruptToHost;
    278  1.1  riastrad     uint8_t  FpsRunning;
    279  1.1  riastrad 
    280  1.1  riastrad     uint32_t MaxAllowedFrequency;
    281  1.1  riastrad 
    282  1.1  riastrad     uint32_t FilteredSclkFrequency;
    283  1.1  riastrad     uint32_t LastSclkFrequency;
    284  1.1  riastrad     uint32_t FilteredSclkFrequencyCnt;
    285  1.1  riastrad 
    286  1.1  riastrad     uint8_t  LedEnable;
    287  1.1  riastrad     uint8_t  LedPin0;
    288  1.1  riastrad     uint8_t  LedPin1;
    289  1.1  riastrad     uint8_t  LedPin2;
    290  1.1  riastrad     uint32_t LedAndMask;
    291  1.1  riastrad 
    292  1.1  riastrad     uint16_t FpsAlpha;
    293  1.1  riastrad     uint16_t DeltaTime;
    294  1.1  riastrad     uint32_t CurrentFps;
    295  1.1  riastrad     uint32_t FilteredFps;
    296  1.1  riastrad     uint32_t FrameCount;
    297  1.1  riastrad     uint32_t FrameCountLast;
    298  1.1  riastrad     uint16_t FpsTargetScalar;
    299  1.1  riastrad     uint16_t FpsWaterfallLimitScalar;
    300  1.1  riastrad     uint16_t FpsAlphaScalar;
    301  1.1  riastrad     uint16_t spare8;
    302  1.1  riastrad     SMU7_HystController_Data HystControllerData;
    303  1.1  riastrad };
    304  1.1  riastrad 
    305  1.1  riastrad typedef struct SMU7_LocalDpmScoreboard SMU7_LocalDpmScoreboard;
    306  1.1  riastrad 
    307  1.1  riastrad #define SMU7_MAX_VOLTAGE_CLIENTS 12
    308  1.1  riastrad 
    309  1.1  riastrad typedef uint8_t (*VoltageChangeHandler_t)(uint16_t, uint8_t);
    310  1.1  riastrad 
    311  1.1  riastrad #define VDDC_MASK    0x00007FFF
    312  1.1  riastrad #define VDDC_SHIFT   0
    313  1.1  riastrad #define VDDCI_MASK   0x3FFF8000
    314  1.1  riastrad #define VDDCI_SHIFT  15
    315  1.1  riastrad #define PHASES_MASK  0xC0000000
    316  1.1  riastrad #define PHASES_SHIFT 30
    317  1.1  riastrad 
    318  1.1  riastrad typedef uint32_t SMU_VoltageLevel;
    319  1.1  riastrad 
    320  1.1  riastrad struct SMU7_VoltageScoreboard
    321  1.1  riastrad {
    322  1.1  riastrad     SMU_VoltageLevel TargetVoltage;
    323  1.1  riastrad     uint16_t MaxVid;
    324  1.1  riastrad     uint8_t  HighestVidOffset;
    325  1.1  riastrad     uint8_t  CurrentVidOffset;
    326  1.1  riastrad 
    327  1.1  riastrad     uint16_t CurrentVddc;
    328  1.1  riastrad     uint16_t CurrentVddci;
    329  1.1  riastrad 
    330  1.1  riastrad 
    331  1.1  riastrad     uint8_t  ControllerBusy;
    332  1.1  riastrad     uint8_t  CurrentVid;
    333  1.1  riastrad     uint8_t  CurrentVddciVid;
    334  1.1  riastrad     uint8_t  padding;
    335  1.1  riastrad 
    336  1.1  riastrad     SMU_VoltageLevel RequestedVoltage[SMU7_MAX_VOLTAGE_CLIENTS];
    337  1.1  riastrad     SMU_VoltageLevel TargetVoltageState;
    338  1.1  riastrad     uint8_t  EnabledRequest[SMU7_MAX_VOLTAGE_CLIENTS];
    339  1.1  riastrad 
    340  1.1  riastrad     uint8_t  padding2;
    341  1.1  riastrad     uint8_t  padding3;
    342  1.1  riastrad     uint8_t  ControllerEnable;
    343  1.1  riastrad     uint8_t  ControllerRunning;
    344  1.1  riastrad     uint16_t CurrentStdVoltageHiSidd;
    345  1.1  riastrad     uint16_t CurrentStdVoltageLoSidd;
    346  1.1  riastrad     uint8_t  OverrideVoltage;
    347  1.1  riastrad     uint8_t  padding4;
    348  1.1  riastrad     uint8_t  padding5;
    349  1.1  riastrad     uint8_t  CurrentPhases;
    350  1.1  riastrad 
    351  1.1  riastrad     VoltageChangeHandler_t ChangeVddc;
    352  1.1  riastrad 
    353  1.1  riastrad     VoltageChangeHandler_t ChangeVddci;
    354  1.1  riastrad     VoltageChangeHandler_t ChangePhase;
    355  1.1  riastrad     VoltageChangeHandler_t ChangeMvdd;
    356  1.1  riastrad 
    357  1.1  riastrad     VoltageChangeHandler_t functionLinks[6];
    358  1.1  riastrad 
    359  1.1  riastrad     uint16_t * VddcFollower1;
    360  1.1  riastrad 
    361  1.1  riastrad     int16_t  Driver_OD_RequestedVidOffset1;
    362  1.1  riastrad     int16_t  Driver_OD_RequestedVidOffset2;
    363  1.1  riastrad 
    364  1.1  riastrad };
    365  1.1  riastrad 
    366  1.1  riastrad typedef struct SMU7_VoltageScoreboard SMU7_VoltageScoreboard;
    367  1.1  riastrad 
    368  1.1  riastrad // -------------------------------------------------------------------------------------------------------------------------
    369  1.1  riastrad #define SMU7_MAX_PCIE_LINK_SPEEDS 3 /* 0:Gen1 1:Gen2 2:Gen3 */
    370  1.1  riastrad 
    371  1.1  riastrad struct SMU7_PCIeLinkSpeedScoreboard
    372  1.1  riastrad {
    373  1.1  riastrad     uint8_t     DpmEnable;
    374  1.1  riastrad     uint8_t     DpmRunning;
    375  1.1  riastrad     uint8_t     DpmForce;
    376  1.1  riastrad     uint8_t     DpmForceLevel;
    377  1.1  riastrad 
    378  1.1  riastrad     uint8_t     CurrentLinkSpeed;
    379  1.1  riastrad     uint8_t     EnabledLevelsChange;
    380  1.1  riastrad     uint16_t    AutoDpmInterval;
    381  1.1  riastrad 
    382  1.1  riastrad     uint16_t    AutoDpmRange;
    383  1.1  riastrad     uint16_t    AutoDpmCount;
    384  1.1  riastrad 
    385  1.1  riastrad     uint8_t     DpmMode;
    386  1.1  riastrad     uint8_t     AcpiReq;
    387  1.1  riastrad     uint8_t     AcpiAck;
    388  1.1  riastrad     uint8_t     CurrentLinkLevel;
    389  1.1  riastrad 
    390  1.1  riastrad };
    391  1.1  riastrad 
    392  1.1  riastrad typedef struct SMU7_PCIeLinkSpeedScoreboard SMU7_PCIeLinkSpeedScoreboard;
    393  1.1  riastrad 
    394  1.1  riastrad // -------------------------------------------------------- CAC table ------------------------------------------------------
    395  1.1  riastrad #define SMU7_LKGE_LUT_NUM_OF_TEMP_ENTRIES 16
    396  1.1  riastrad #define SMU7_LKGE_LUT_NUM_OF_VOLT_ENTRIES 16
    397  1.1  riastrad 
    398  1.1  riastrad #define SMU7_SCALE_I  7
    399  1.1  riastrad #define SMU7_SCALE_R 12
    400  1.1  riastrad 
    401  1.1  riastrad struct SMU7_PowerScoreboard
    402  1.1  riastrad {
    403  1.1  riastrad     uint32_t GpuPower;
    404  1.1  riastrad 
    405  1.1  riastrad     uint32_t VddcPower;
    406  1.1  riastrad     uint32_t VddcVoltage;
    407  1.1  riastrad     uint32_t VddcCurrent;
    408  1.1  riastrad 
    409  1.1  riastrad     uint32_t MvddPower;
    410  1.1  riastrad     uint32_t MvddVoltage;
    411  1.1  riastrad     uint32_t MvddCurrent;
    412  1.1  riastrad 
    413  1.1  riastrad     uint32_t RocPower;
    414  1.1  riastrad 
    415  1.1  riastrad     uint16_t Telemetry_1_slope;
    416  1.1  riastrad     uint16_t Telemetry_2_slope;
    417  1.1  riastrad     int32_t  Telemetry_1_offset;
    418  1.1  riastrad     int32_t  Telemetry_2_offset;
    419  1.1  riastrad };
    420  1.1  riastrad typedef struct SMU7_PowerScoreboard SMU7_PowerScoreboard;
    421  1.1  riastrad 
    422  1.1  riastrad // For FeatureEnables:
    423  1.1  riastrad #define SMU7_SCLK_DPM_CONFIG_MASK                        0x01
    424  1.1  riastrad #define SMU7_VOLTAGE_CONTROLLER_CONFIG_MASK              0x02
    425  1.1  riastrad #define SMU7_THERMAL_CONTROLLER_CONFIG_MASK              0x04
    426  1.1  riastrad #define SMU7_MCLK_DPM_CONFIG_MASK                        0x08
    427  1.1  riastrad #define SMU7_UVD_DPM_CONFIG_MASK                         0x10
    428  1.1  riastrad #define SMU7_VCE_DPM_CONFIG_MASK                         0x20
    429  1.1  riastrad #define SMU7_ACP_DPM_CONFIG_MASK                         0x40
    430  1.1  riastrad #define SMU7_SAMU_DPM_CONFIG_MASK                        0x80
    431  1.1  riastrad #define SMU7_PCIEGEN_DPM_CONFIG_MASK                    0x100
    432  1.1  riastrad 
    433  1.1  riastrad #define SMU7_ACP_MCLK_HANDSHAKE_DISABLE                  0x00000001
    434  1.1  riastrad #define SMU7_ACP_SCLK_HANDSHAKE_DISABLE                  0x00000002
    435  1.1  riastrad #define SMU7_UVD_MCLK_HANDSHAKE_DISABLE                  0x00000100
    436  1.1  riastrad #define SMU7_UVD_SCLK_HANDSHAKE_DISABLE                  0x00000200
    437  1.1  riastrad #define SMU7_VCE_MCLK_HANDSHAKE_DISABLE                  0x00010000
    438  1.1  riastrad #define SMU7_VCE_SCLK_HANDSHAKE_DISABLE                  0x00020000
    439  1.1  riastrad 
    440  1.1  riastrad // All 'soft registers' should be uint32_t.
    441  1.1  riastrad struct SMU73_SoftRegisters
    442  1.1  riastrad {
    443  1.1  riastrad     uint32_t        RefClockFrequency;
    444  1.1  riastrad     uint32_t        PmTimerPeriod;
    445  1.1  riastrad     uint32_t        FeatureEnables;
    446  1.1  riastrad 
    447  1.1  riastrad     uint32_t        PreVBlankGap;
    448  1.1  riastrad     uint32_t        VBlankTimeout;
    449  1.1  riastrad     uint32_t        TrainTimeGap;
    450  1.1  riastrad 
    451  1.1  riastrad     uint32_t        MvddSwitchTime;
    452  1.1  riastrad     uint32_t        LongestAcpiTrainTime;
    453  1.1  riastrad     uint32_t        AcpiDelay;
    454  1.1  riastrad     uint32_t        G5TrainTime;
    455  1.1  riastrad     uint32_t        DelayMpllPwron;
    456  1.1  riastrad     uint32_t        VoltageChangeTimeout;
    457  1.1  riastrad 
    458  1.1  riastrad     uint32_t        HandshakeDisables;
    459  1.1  riastrad 
    460  1.1  riastrad     uint8_t         DisplayPhy1Config;
    461  1.1  riastrad     uint8_t         DisplayPhy2Config;
    462  1.1  riastrad     uint8_t         DisplayPhy3Config;
    463  1.1  riastrad     uint8_t         DisplayPhy4Config;
    464  1.1  riastrad 
    465  1.1  riastrad     uint8_t         DisplayPhy5Config;
    466  1.1  riastrad     uint8_t         DisplayPhy6Config;
    467  1.1  riastrad     uint8_t         DisplayPhy7Config;
    468  1.1  riastrad     uint8_t         DisplayPhy8Config;
    469  1.1  riastrad 
    470  1.1  riastrad     uint32_t        AverageGraphicsActivity;
    471  1.1  riastrad     uint32_t        AverageMemoryActivity;
    472  1.1  riastrad     uint32_t        AverageGioActivity;
    473  1.1  riastrad 
    474  1.1  riastrad     uint8_t         SClkDpmEnabledLevels;
    475  1.1  riastrad     uint8_t         MClkDpmEnabledLevels;
    476  1.1  riastrad     uint8_t         LClkDpmEnabledLevels;
    477  1.1  riastrad     uint8_t         PCIeDpmEnabledLevels;
    478  1.1  riastrad 
    479  1.1  riastrad     uint8_t         UVDDpmEnabledLevels;
    480  1.1  riastrad     uint8_t         SAMUDpmEnabledLevels;
    481  1.1  riastrad     uint8_t         ACPDpmEnabledLevels;
    482  1.1  riastrad     uint8_t         VCEDpmEnabledLevels;
    483  1.1  riastrad 
    484  1.1  riastrad     uint32_t        DRAM_LOG_ADDR_H;
    485  1.1  riastrad     uint32_t        DRAM_LOG_ADDR_L;
    486  1.1  riastrad     uint32_t        DRAM_LOG_PHY_ADDR_H;
    487  1.1  riastrad     uint32_t        DRAM_LOG_PHY_ADDR_L;
    488  1.1  riastrad     uint32_t        DRAM_LOG_BUFF_SIZE;
    489  1.1  riastrad     uint32_t        UlvEnterCount;
    490  1.1  riastrad     uint32_t        UlvTime;
    491  1.1  riastrad     uint32_t        UcodeLoadStatus;
    492  1.1  riastrad     uint32_t        Reserved[2];
    493  1.1  riastrad 
    494  1.1  riastrad };
    495  1.1  riastrad 
    496  1.1  riastrad typedef struct SMU73_SoftRegisters SMU73_SoftRegisters;
    497  1.1  riastrad 
    498  1.1  riastrad struct SMU73_Firmware_Header
    499  1.1  riastrad {
    500  1.1  riastrad     uint32_t Digest[5];
    501  1.1  riastrad     uint32_t Version;
    502  1.1  riastrad     uint32_t HeaderSize;
    503  1.1  riastrad     uint32_t Flags;
    504  1.1  riastrad     uint32_t EntryPoint;
    505  1.1  riastrad     uint32_t CodeSize;
    506  1.1  riastrad     uint32_t ImageSize;
    507  1.1  riastrad 
    508  1.1  riastrad     uint32_t Rtos;
    509  1.1  riastrad     uint32_t SoftRegisters;
    510  1.1  riastrad     uint32_t DpmTable;
    511  1.1  riastrad     uint32_t FanTable;
    512  1.1  riastrad     uint32_t CacConfigTable;
    513  1.1  riastrad     uint32_t CacStatusTable;
    514  1.1  riastrad 
    515  1.1  riastrad 
    516  1.1  riastrad     uint32_t mcRegisterTable;
    517  1.1  riastrad 
    518  1.1  riastrad 
    519  1.1  riastrad     uint32_t mcArbDramTimingTable;
    520  1.1  riastrad 
    521  1.1  riastrad 
    522  1.1  riastrad 
    523  1.1  riastrad 
    524  1.1  riastrad     uint32_t PmFuseTable;
    525  1.1  riastrad     uint32_t Globals;
    526  1.1  riastrad     uint32_t ClockStretcherTable;
    527  1.1  riastrad     uint32_t Reserved[41];
    528  1.1  riastrad     uint32_t Signature;
    529  1.1  riastrad };
    530  1.1  riastrad 
    531  1.1  riastrad typedef struct SMU73_Firmware_Header SMU73_Firmware_Header;
    532  1.1  riastrad 
    533  1.1  riastrad #define SMU7_FIRMWARE_HEADER_LOCATION 0x20000
    534  1.1  riastrad 
    535  1.1  riastrad enum  DisplayConfig {
    536  1.1  riastrad     PowerDown = 1,
    537  1.1  riastrad     DP54x4,
    538  1.1  riastrad     DP54x2,
    539  1.1  riastrad     DP54x1,
    540  1.1  riastrad     DP27x4,
    541  1.1  riastrad     DP27x2,
    542  1.1  riastrad     DP27x1,
    543  1.1  riastrad     HDMI297,
    544  1.1  riastrad     HDMI162,
    545  1.1  riastrad     LVDS,
    546  1.1  riastrad     DP324x4,
    547  1.1  riastrad     DP324x2,
    548  1.1  riastrad     DP324x1
    549  1.1  riastrad };
    550  1.1  riastrad 
    551  1.1  riastrad 
    552  1.1  riastrad #define MC_BLOCK_COUNT 1
    553  1.1  riastrad #define CPL_BLOCK_COUNT 5
    554  1.1  riastrad #define SE_BLOCK_COUNT 15
    555  1.1  riastrad #define GC_BLOCK_COUNT 24
    556  1.1  riastrad 
    557  1.1  riastrad struct SMU7_Local_Cac {
    558  1.1  riastrad   uint8_t BlockId;
    559  1.1  riastrad   uint8_t SignalId;
    560  1.1  riastrad   uint8_t Threshold;
    561  1.1  riastrad   uint8_t Padding;
    562  1.1  riastrad };
    563  1.1  riastrad 
    564  1.1  riastrad typedef struct SMU7_Local_Cac SMU7_Local_Cac;
    565  1.1  riastrad 
    566  1.1  riastrad struct SMU7_Local_Cac_Table {
    567  1.1  riastrad 
    568  1.1  riastrad   SMU7_Local_Cac CplLocalCac[CPL_BLOCK_COUNT];
    569  1.1  riastrad   SMU7_Local_Cac McLocalCac[MC_BLOCK_COUNT];
    570  1.1  riastrad   SMU7_Local_Cac SeLocalCac[SE_BLOCK_COUNT];
    571  1.1  riastrad   SMU7_Local_Cac GcLocalCac[GC_BLOCK_COUNT];
    572  1.1  riastrad };
    573  1.1  riastrad 
    574  1.1  riastrad typedef struct SMU7_Local_Cac_Table SMU7_Local_Cac_Table;
    575  1.1  riastrad 
    576  1.1  riastrad #if !defined(SMC_MICROCODE)
    577  1.1  riastrad #pragma pack(pop)
    578  1.1  riastrad #endif
    579  1.1  riastrad 
    580  1.1  riastrad // Description of Clock Gating bitmask for Tonga:
    581  1.1  riastrad // System Clock Gating
    582  1.1  riastrad #define CG_SYS_BITMASK_FIRST_BIT      0  // First bit of Sys CG bitmask
    583  1.1  riastrad #define CG_SYS_BITMASK_LAST_BIT       9  // Last bit of Sys CG bitmask
    584  1.1  riastrad #define CG_SYS_BIF_MGLS_SHIFT         0
    585  1.1  riastrad #define CG_SYS_ROM_SHIFT              1
    586  1.1  riastrad #define CG_SYS_MC_MGCG_SHIFT          2
    587  1.1  riastrad #define CG_SYS_MC_MGLS_SHIFT          3
    588  1.1  riastrad #define CG_SYS_SDMA_MGCG_SHIFT        4
    589  1.1  riastrad #define CG_SYS_SDMA_MGLS_SHIFT        5
    590  1.1  riastrad #define CG_SYS_DRM_MGCG_SHIFT         6
    591  1.1  riastrad #define CG_SYS_HDP_MGCG_SHIFT         7
    592  1.1  riastrad #define CG_SYS_HDP_MGLS_SHIFT         8
    593  1.1  riastrad #define CG_SYS_DRM_MGLS_SHIFT         9
    594  1.1  riastrad 
    595  1.1  riastrad #define CG_SYS_BIF_MGLS_MASK          0x1
    596  1.1  riastrad #define CG_SYS_ROM_MASK               0x2
    597  1.1  riastrad #define CG_SYS_MC_MGCG_MASK           0x4
    598  1.1  riastrad #define CG_SYS_MC_MGLS_MASK           0x8
    599  1.1  riastrad #define CG_SYS_SDMA_MGCG_MASK         0x10
    600  1.1  riastrad #define CG_SYS_SDMA_MGLS_MASK         0x20
    601  1.1  riastrad #define CG_SYS_DRM_MGCG_MASK          0x40
    602  1.1  riastrad #define CG_SYS_HDP_MGCG_MASK          0x80
    603  1.1  riastrad #define CG_SYS_HDP_MGLS_MASK          0x100
    604  1.1  riastrad #define CG_SYS_DRM_MGLS_MASK          0x200
    605  1.1  riastrad 
    606  1.1  riastrad // Graphics Clock Gating
    607  1.1  riastrad #define CG_GFX_BITMASK_FIRST_BIT      16 // First bit of Gfx CG bitmask
    608  1.1  riastrad #define CG_GFX_BITMASK_LAST_BIT       20 // Last bit of Gfx CG bitmask
    609  1.1  riastrad #define CG_GFX_CGCG_SHIFT             16
    610  1.1  riastrad #define CG_GFX_CGLS_SHIFT             17
    611  1.1  riastrad #define CG_CPF_MGCG_SHIFT             18
    612  1.1  riastrad #define CG_RLC_MGCG_SHIFT             19
    613  1.1  riastrad #define CG_GFX_OTHERS_MGCG_SHIFT      20
    614  1.1  riastrad 
    615  1.1  riastrad #define CG_GFX_CGCG_MASK              0x00010000
    616  1.1  riastrad #define CG_GFX_CGLS_MASK              0x00020000
    617  1.1  riastrad #define CG_CPF_MGCG_MASK              0x00040000
    618  1.1  riastrad #define CG_RLC_MGCG_MASK              0x00080000
    619  1.1  riastrad #define CG_GFX_OTHERS_MGCG_MASK       0x00100000
    620  1.1  riastrad 
    621  1.1  riastrad 
    622  1.1  riastrad 
    623  1.1  riastrad // Voltage Regulator Configuration
    624  1.1  riastrad // VR Config info is contained in dpmTable.VRConfig
    625  1.1  riastrad 
    626  1.1  riastrad #define VRCONF_VDDC_MASK         0x000000FF
    627  1.1  riastrad #define VRCONF_VDDC_SHIFT        0
    628  1.1  riastrad #define VRCONF_VDDGFX_MASK       0x0000FF00
    629  1.1  riastrad #define VRCONF_VDDGFX_SHIFT      8
    630  1.1  riastrad #define VRCONF_VDDCI_MASK        0x00FF0000
    631  1.1  riastrad #define VRCONF_VDDCI_SHIFT       16
    632  1.1  riastrad #define VRCONF_MVDD_MASK         0xFF000000
    633  1.1  riastrad #define VRCONF_MVDD_SHIFT        24
    634  1.1  riastrad 
    635  1.1  riastrad #define VR_MERGED_WITH_VDDC      0
    636  1.1  riastrad #define VR_SVI2_PLANE_1          1
    637  1.1  riastrad #define VR_SVI2_PLANE_2          2
    638  1.1  riastrad #define VR_SMIO_PATTERN_1        3
    639  1.1  riastrad #define VR_SMIO_PATTERN_2        4
    640  1.1  riastrad #define VR_STATIC_VOLTAGE        5
    641  1.1  riastrad 
    642  1.1  riastrad // Clock Stretcher Configuration
    643  1.1  riastrad 
    644  1.1  riastrad #define CLOCK_STRETCHER_MAX_ENTRIES 0x4
    645  1.1  riastrad #define CKS_LOOKUPTable_MAX_ENTRIES 0x4
    646  1.1  riastrad 
    647  1.1  riastrad // The 'settings' field is subdivided in the following way:
    648  1.1  riastrad #define CLOCK_STRETCHER_SETTING_DDT_MASK             0x01
    649  1.1  riastrad #define CLOCK_STRETCHER_SETTING_DDT_SHIFT            0x0
    650  1.1  riastrad #define CLOCK_STRETCHER_SETTING_STRETCH_AMOUNT_MASK  0x1E
    651  1.1  riastrad #define CLOCK_STRETCHER_SETTING_STRETCH_AMOUNT_SHIFT 0x1
    652  1.1  riastrad #define CLOCK_STRETCHER_SETTING_ENABLE_MASK          0x80
    653  1.1  riastrad #define CLOCK_STRETCHER_SETTING_ENABLE_SHIFT         0x7
    654  1.1  riastrad 
    655  1.1  riastrad struct SMU_ClockStretcherDataTableEntry {
    656  1.1  riastrad   uint8_t minVID;
    657  1.1  riastrad   uint8_t maxVID;
    658  1.1  riastrad 
    659  1.1  riastrad 
    660  1.1  riastrad   uint16_t setting;
    661  1.1  riastrad };
    662  1.1  riastrad typedef struct SMU_ClockStretcherDataTableEntry SMU_ClockStretcherDataTableEntry;
    663  1.1  riastrad 
    664  1.1  riastrad struct SMU_ClockStretcherDataTable {
    665  1.1  riastrad   SMU_ClockStretcherDataTableEntry ClockStretcherDataTableEntry[CLOCK_STRETCHER_MAX_ENTRIES];
    666  1.1  riastrad };
    667  1.1  riastrad typedef struct SMU_ClockStretcherDataTable SMU_ClockStretcherDataTable;
    668  1.1  riastrad 
    669  1.1  riastrad struct SMU_CKS_LOOKUPTableEntry {
    670  1.1  riastrad   uint16_t minFreq;
    671  1.1  riastrad   uint16_t maxFreq;
    672  1.1  riastrad 
    673  1.1  riastrad   uint8_t setting;
    674  1.1  riastrad   uint8_t padding[3];
    675  1.1  riastrad };
    676  1.1  riastrad typedef struct SMU_CKS_LOOKUPTableEntry SMU_CKS_LOOKUPTableEntry;
    677  1.1  riastrad 
    678  1.1  riastrad struct SMU_CKS_LOOKUPTable {
    679  1.1  riastrad   SMU_CKS_LOOKUPTableEntry CKS_LOOKUPTableEntry[CKS_LOOKUPTable_MAX_ENTRIES];
    680  1.1  riastrad };
    681  1.1  riastrad typedef struct SMU_CKS_LOOKUPTable SMU_CKS_LOOKUPTable;
    682  1.1  riastrad 
    683  1.1  riastrad struct AgmAvfsData_t {
    684  1.1  riastrad   uint16_t avgPsmCount[28];
    685  1.1  riastrad   uint16_t minPsmCount[28];
    686  1.1  riastrad };
    687  1.1  riastrad typedef struct AgmAvfsData_t AgmAvfsData_t;
    688  1.1  riastrad 
    689  1.1  riastrad // AVFS DEFINES
    690  1.1  riastrad 
    691  1.1  riastrad enum VFT_COLUMNS {
    692  1.1  riastrad   SCLK0,
    693  1.1  riastrad   SCLK1,
    694  1.1  riastrad   SCLK2,
    695  1.1  riastrad   SCLK3,
    696  1.1  riastrad   SCLK4,
    697  1.1  riastrad   SCLK5,
    698  1.1  riastrad   SCLK6,
    699  1.1  riastrad   SCLK7,
    700  1.1  riastrad 
    701  1.1  riastrad   NUM_VFT_COLUMNS
    702  1.1  riastrad };
    703  1.1  riastrad 
    704  1.1  riastrad #define TEMP_RANGE_MAXSTEPS 12
    705  1.1  riastrad struct VFT_CELL_t {
    706  1.1  riastrad   uint16_t Voltage;
    707  1.1  riastrad };
    708  1.1  riastrad 
    709  1.1  riastrad typedef struct VFT_CELL_t VFT_CELL_t;
    710  1.1  riastrad 
    711  1.1  riastrad struct VFT_TABLE_t {
    712  1.1  riastrad   VFT_CELL_t    Cell[TEMP_RANGE_MAXSTEPS][NUM_VFT_COLUMNS];
    713  1.1  riastrad   uint16_t      AvfsGbv [NUM_VFT_COLUMNS];
    714  1.1  riastrad   uint16_t      BtcGbv  [NUM_VFT_COLUMNS];
    715  1.1  riastrad   uint16_t      Temperature [TEMP_RANGE_MAXSTEPS];
    716  1.1  riastrad 
    717  1.1  riastrad   uint8_t       NumTemperatureSteps;
    718  1.1  riastrad   uint8_t       padding[3];
    719  1.1  riastrad };
    720  1.1  riastrad typedef struct VFT_TABLE_t VFT_TABLE_t;
    721  1.1  riastrad 
    722  1.1  riastrad #endif
    723