Home | History | Annotate | Line # | Download | only in inc
      1  1.1  riastrad /*	$NetBSD: smu74.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 2014 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 
     26  1.1  riastrad 
     27  1.1  riastrad #ifndef SMU74_H
     28  1.1  riastrad #define SMU74_H
     29  1.1  riastrad 
     30  1.1  riastrad #pragma pack(push, 1)
     31  1.1  riastrad 
     32  1.1  riastrad #define SMU__DGPU_ONLY
     33  1.1  riastrad 
     34  1.1  riastrad #define SMU__NUM_SCLK_DPM_STATE  8
     35  1.1  riastrad #define SMU__NUM_MCLK_DPM_LEVELS 4
     36  1.1  riastrad #define SMU__NUM_LCLK_DPM_LEVELS 8
     37  1.1  riastrad #define SMU__NUM_PCIE_DPM_LEVELS 8
     38  1.1  riastrad 
     39  1.1  riastrad #define EXP_M1  35
     40  1.1  riastrad #define EXP_M2  92821
     41  1.1  riastrad #define EXP_B   66629747
     42  1.1  riastrad 
     43  1.1  riastrad #define EXP_M1_1  365
     44  1.1  riastrad #define EXP_M2_1  658700
     45  1.1  riastrad #define EXP_B_1   305506134
     46  1.1  riastrad 
     47  1.1  riastrad #define EXP_M1_2  189
     48  1.1  riastrad #define EXP_M2_2  379692
     49  1.1  riastrad #define EXP_B_2   194609469
     50  1.1  riastrad 
     51  1.1  riastrad #define EXP_M1_3  99
     52  1.1  riastrad #define EXP_M2_3  217915
     53  1.1  riastrad #define EXP_B_3   122255994
     54  1.1  riastrad 
     55  1.1  riastrad #define EXP_M1_4  51
     56  1.1  riastrad #define EXP_M2_4  122643
     57  1.1  riastrad #define EXP_B_4   74893384
     58  1.1  riastrad 
     59  1.1  riastrad #define EXP_M1_5  423
     60  1.1  riastrad #define EXP_M2_5  1103326
     61  1.1  riastrad #define EXP_B_5   728122621
     62  1.1  riastrad 
     63  1.1  riastrad enum SID_OPTION {
     64  1.1  riastrad 	SID_OPTION_HI,
     65  1.1  riastrad 	SID_OPTION_LO,
     66  1.1  riastrad 	SID_OPTION_COUNT
     67  1.1  riastrad };
     68  1.1  riastrad 
     69  1.1  riastrad enum Poly3rdOrderCoeff {
     70  1.1  riastrad 	LEAKAGE_TEMPERATURE_SCALAR,
     71  1.1  riastrad 	LEAKAGE_VOLTAGE_SCALAR,
     72  1.1  riastrad 	DYNAMIC_VOLTAGE_SCALAR,
     73  1.1  riastrad 	POLY_3RD_ORDER_COUNT
     74  1.1  riastrad };
     75  1.1  riastrad 
     76  1.1  riastrad struct SMU7_Poly3rdOrder_Data {
     77  1.1  riastrad 	int32_t a;
     78  1.1  riastrad 	int32_t b;
     79  1.1  riastrad 	int32_t c;
     80  1.1  riastrad 	int32_t d;
     81  1.1  riastrad 	uint8_t a_shift;
     82  1.1  riastrad 	uint8_t b_shift;
     83  1.1  riastrad 	uint8_t c_shift;
     84  1.1  riastrad 	uint8_t x_shift;
     85  1.1  riastrad };
     86  1.1  riastrad 
     87  1.1  riastrad typedef struct SMU7_Poly3rdOrder_Data SMU7_Poly3rdOrder_Data;
     88  1.1  riastrad 
     89  1.1  riastrad struct Power_Calculator_Data {
     90  1.1  riastrad 	uint16_t NoLoadVoltage;
     91  1.1  riastrad 	uint16_t LoadVoltage;
     92  1.1  riastrad 	uint16_t Resistance;
     93  1.1  riastrad 	uint16_t Temperature;
     94  1.1  riastrad 	uint16_t BaseLeakage;
     95  1.1  riastrad 	uint16_t LkgTempScalar;
     96  1.1  riastrad 	uint16_t LkgVoltScalar;
     97  1.1  riastrad 	uint16_t LkgAreaScalar;
     98  1.1  riastrad 	uint16_t LkgPower;
     99  1.1  riastrad 	uint16_t DynVoltScalar;
    100  1.1  riastrad 	uint32_t Cac;
    101  1.1  riastrad 	uint32_t DynPower;
    102  1.1  riastrad 	uint32_t TotalCurrent;
    103  1.1  riastrad 	uint32_t TotalPower;
    104  1.1  riastrad };
    105  1.1  riastrad 
    106  1.1  riastrad typedef struct Power_Calculator_Data PowerCalculatorData_t;
    107  1.1  riastrad 
    108  1.1  riastrad struct Gc_Cac_Weight_Data {
    109  1.1  riastrad 	uint8_t index;
    110  1.1  riastrad 	uint32_t value;
    111  1.1  riastrad };
    112  1.1  riastrad 
    113  1.1  riastrad typedef struct Gc_Cac_Weight_Data GcCacWeight_Data;
    114  1.1  riastrad 
    115  1.1  riastrad 
    116  1.1  riastrad typedef struct {
    117  1.1  riastrad 	uint32_t high;
    118  1.1  riastrad 	uint32_t low;
    119  1.1  riastrad } data_64_t;
    120  1.1  riastrad 
    121  1.1  riastrad typedef struct {
    122  1.1  riastrad 	data_64_t high;
    123  1.1  riastrad 	data_64_t low;
    124  1.1  riastrad } data_128_t;
    125  1.1  riastrad 
    126  1.1  riastrad #define SMU7_CONTEXT_ID_SMC        1
    127  1.1  riastrad #define SMU7_CONTEXT_ID_VBIOS      2
    128  1.1  riastrad 
    129  1.1  riastrad #define SMU74_MAX_LEVELS_VDDC            16
    130  1.1  riastrad #define SMU74_MAX_LEVELS_VDDGFX          16
    131  1.1  riastrad #define SMU74_MAX_LEVELS_VDDCI           8
    132  1.1  riastrad #define SMU74_MAX_LEVELS_MVDD            4
    133  1.1  riastrad 
    134  1.1  riastrad #define SMU_MAX_SMIO_LEVELS              4
    135  1.1  riastrad 
    136  1.1  riastrad #define SMU74_MAX_LEVELS_GRAPHICS        SMU__NUM_SCLK_DPM_STATE   /* SCLK + SQ DPM + ULV */
    137  1.1  riastrad #define SMU74_MAX_LEVELS_MEMORY          SMU__NUM_MCLK_DPM_LEVELS   /* MCLK Levels DPM */
    138  1.1  riastrad #define SMU74_MAX_LEVELS_GIO             SMU__NUM_LCLK_DPM_LEVELS  /* LCLK Levels */
    139  1.1  riastrad #define SMU74_MAX_LEVELS_LINK            SMU__NUM_PCIE_DPM_LEVELS  /* PCIe speed and number of lanes */
    140  1.1  riastrad #define SMU74_MAX_LEVELS_UVD             8   /* VCLK/DCLK levels for UVD */
    141  1.1  riastrad #define SMU74_MAX_LEVELS_VCE             8   /* ECLK levels for VCE */
    142  1.1  riastrad #define SMU74_MAX_LEVELS_ACP             8   /* ACLK levels for ACP */
    143  1.1  riastrad #define SMU74_MAX_LEVELS_SAMU            8   /* SAMCLK levels for SAMU */
    144  1.1  riastrad #define SMU74_MAX_ENTRIES_SMIO           32  /* Number of entries in SMIO table */
    145  1.1  riastrad 
    146  1.1  riastrad #define DPM_NO_LIMIT 0
    147  1.1  riastrad #define DPM_NO_UP 1
    148  1.1  riastrad #define DPM_GO_DOWN 2
    149  1.1  riastrad #define DPM_GO_UP 3
    150  1.1  riastrad 
    151  1.1  riastrad #define SMU7_FIRST_DPM_GRAPHICS_LEVEL    0
    152  1.1  riastrad #define SMU7_FIRST_DPM_MEMORY_LEVEL      0
    153  1.1  riastrad 
    154  1.1  riastrad #define GPIO_CLAMP_MODE_VRHOT      1
    155  1.1  riastrad #define GPIO_CLAMP_MODE_THERM      2
    156  1.1  riastrad #define GPIO_CLAMP_MODE_DC         4
    157  1.1  riastrad 
    158  1.1  riastrad #define SCRATCH_B_TARG_PCIE_INDEX_SHIFT 0
    159  1.1  riastrad #define SCRATCH_B_TARG_PCIE_INDEX_MASK  (0x7<<SCRATCH_B_TARG_PCIE_INDEX_SHIFT)
    160  1.1  riastrad #define SCRATCH_B_CURR_PCIE_INDEX_SHIFT 3
    161  1.1  riastrad #define SCRATCH_B_CURR_PCIE_INDEX_MASK  (0x7<<SCRATCH_B_CURR_PCIE_INDEX_SHIFT)
    162  1.1  riastrad #define SCRATCH_B_TARG_UVD_INDEX_SHIFT  6
    163  1.1  riastrad #define SCRATCH_B_TARG_UVD_INDEX_MASK   (0x7<<SCRATCH_B_TARG_UVD_INDEX_SHIFT)
    164  1.1  riastrad #define SCRATCH_B_CURR_UVD_INDEX_SHIFT  9
    165  1.1  riastrad #define SCRATCH_B_CURR_UVD_INDEX_MASK   (0x7<<SCRATCH_B_CURR_UVD_INDEX_SHIFT)
    166  1.1  riastrad #define SCRATCH_B_TARG_VCE_INDEX_SHIFT  12
    167  1.1  riastrad #define SCRATCH_B_TARG_VCE_INDEX_MASK   (0x7<<SCRATCH_B_TARG_VCE_INDEX_SHIFT)
    168  1.1  riastrad #define SCRATCH_B_CURR_VCE_INDEX_SHIFT  15
    169  1.1  riastrad #define SCRATCH_B_CURR_VCE_INDEX_MASK   (0x7<<SCRATCH_B_CURR_VCE_INDEX_SHIFT)
    170  1.1  riastrad #define SCRATCH_B_TARG_ACP_INDEX_SHIFT  18
    171  1.1  riastrad #define SCRATCH_B_TARG_ACP_INDEX_MASK   (0x7<<SCRATCH_B_TARG_ACP_INDEX_SHIFT)
    172  1.1  riastrad #define SCRATCH_B_CURR_ACP_INDEX_SHIFT  21
    173  1.1  riastrad #define SCRATCH_B_CURR_ACP_INDEX_MASK   (0x7<<SCRATCH_B_CURR_ACP_INDEX_SHIFT)
    174  1.1  riastrad #define SCRATCH_B_TARG_SAMU_INDEX_SHIFT 24
    175  1.1  riastrad #define SCRATCH_B_TARG_SAMU_INDEX_MASK  (0x7<<SCRATCH_B_TARG_SAMU_INDEX_SHIFT)
    176  1.1  riastrad #define SCRATCH_B_CURR_SAMU_INDEX_SHIFT 27
    177  1.1  riastrad #define SCRATCH_B_CURR_SAMU_INDEX_MASK  (0x7<<SCRATCH_B_CURR_SAMU_INDEX_SHIFT)
    178  1.1  riastrad 
    179  1.1  riastrad /* Virtualization Defines */
    180  1.1  riastrad #define CG_XDMA_MASK  0x1
    181  1.1  riastrad #define CG_XDMA_SHIFT 0
    182  1.1  riastrad #define CG_UVD_MASK   0x2
    183  1.1  riastrad #define CG_UVD_SHIFT  1
    184  1.1  riastrad #define CG_VCE_MASK   0x4
    185  1.1  riastrad #define CG_VCE_SHIFT  2
    186  1.1  riastrad #define CG_SAMU_MASK  0x8
    187  1.1  riastrad #define CG_SAMU_SHIFT 3
    188  1.1  riastrad #define CG_GFX_MASK   0x10
    189  1.1  riastrad #define CG_GFX_SHIFT  4
    190  1.1  riastrad #define CG_SDMA_MASK  0x20
    191  1.1  riastrad #define CG_SDMA_SHIFT 5
    192  1.1  riastrad #define CG_HDP_MASK   0x40
    193  1.1  riastrad #define CG_HDP_SHIFT  6
    194  1.1  riastrad #define CG_MC_MASK    0x80
    195  1.1  riastrad #define CG_MC_SHIFT   7
    196  1.1  riastrad #define CG_DRM_MASK   0x100
    197  1.1  riastrad #define CG_DRM_SHIFT  8
    198  1.1  riastrad #define CG_ROM_MASK   0x200
    199  1.1  riastrad #define CG_ROM_SHIFT  9
    200  1.1  riastrad #define CG_BIF_MASK   0x400
    201  1.1  riastrad #define CG_BIF_SHIFT  10
    202  1.1  riastrad 
    203  1.1  riastrad 
    204  1.1  riastrad #define SMU74_DTE_ITERATIONS 5
    205  1.1  riastrad #define SMU74_DTE_SOURCES 3
    206  1.1  riastrad #define SMU74_DTE_SINKS 1
    207  1.1  riastrad #define SMU74_NUM_CPU_TES 0
    208  1.1  riastrad #define SMU74_NUM_GPU_TES 1
    209  1.1  riastrad #define SMU74_NUM_NON_TES 2
    210  1.1  riastrad #define SMU74_DTE_FAN_SCALAR_MIN 0x100
    211  1.1  riastrad #define SMU74_DTE_FAN_SCALAR_MAX 0x166
    212  1.1  riastrad #define SMU74_DTE_FAN_TEMP_MAX 93
    213  1.1  riastrad #define SMU74_DTE_FAN_TEMP_MIN 83
    214  1.1  riastrad 
    215  1.1  riastrad 
    216  1.1  riastrad #if defined SMU__FUSION_ONLY
    217  1.1  riastrad #define SMU7_DTE_ITERATIONS 5
    218  1.1  riastrad #define SMU7_DTE_SOURCES 5
    219  1.1  riastrad #define SMU7_DTE_SINKS 3
    220  1.1  riastrad #define SMU7_NUM_CPU_TES 2
    221  1.1  riastrad #define SMU7_NUM_GPU_TES 1
    222  1.1  riastrad #define SMU7_NUM_NON_TES 2
    223  1.1  riastrad #endif
    224  1.1  riastrad 
    225  1.1  riastrad struct SMU7_HystController_Data {
    226  1.1  riastrad 	uint8_t waterfall_up;
    227  1.1  riastrad 	uint8_t waterfall_down;
    228  1.1  riastrad 	uint8_t waterfall_limit;
    229  1.1  riastrad 	uint8_t spare;
    230  1.1  riastrad 	uint16_t release_cnt;
    231  1.1  riastrad 	uint16_t release_limit;
    232  1.1  riastrad };
    233  1.1  riastrad 
    234  1.1  riastrad typedef struct SMU7_HystController_Data SMU7_HystController_Data;
    235  1.1  riastrad 
    236  1.1  riastrad struct SMU74_PIDController {
    237  1.1  riastrad 	uint32_t Ki;
    238  1.1  riastrad 	int32_t LFWindupUpperLim;
    239  1.1  riastrad 	int32_t LFWindupLowerLim;
    240  1.1  riastrad 	uint32_t StatePrecision;
    241  1.1  riastrad 	uint32_t LfPrecision;
    242  1.1  riastrad 	uint32_t LfOffset;
    243  1.1  riastrad 	uint32_t MaxState;
    244  1.1  riastrad 	uint32_t MaxLfFraction;
    245  1.1  riastrad 	uint32_t StateShift;
    246  1.1  riastrad };
    247  1.1  riastrad 
    248  1.1  riastrad typedef struct SMU74_PIDController SMU74_PIDController;
    249  1.1  riastrad 
    250  1.1  riastrad struct SMU7_LocalDpmScoreboard {
    251  1.1  riastrad 	uint32_t PercentageBusy;
    252  1.1  riastrad 
    253  1.1  riastrad 	int32_t  PIDError;
    254  1.1  riastrad 	int32_t  PIDIntegral;
    255  1.1  riastrad 	int32_t  PIDOutput;
    256  1.1  riastrad 
    257  1.1  riastrad 	uint32_t SigmaDeltaAccum;
    258  1.1  riastrad 	uint32_t SigmaDeltaOutput;
    259  1.1  riastrad 	uint32_t SigmaDeltaLevel;
    260  1.1  riastrad 
    261  1.1  riastrad 	uint32_t UtilizationSetpoint;
    262  1.1  riastrad 
    263  1.1  riastrad 	uint8_t  TdpClampMode;
    264  1.1  riastrad 	uint8_t  TdcClampMode;
    265  1.1  riastrad 	uint8_t  ThermClampMode;
    266  1.1  riastrad 	uint8_t  VoltageBusy;
    267  1.1  riastrad 
    268  1.1  riastrad 	int8_t   CurrLevel;
    269  1.1  riastrad 	int8_t   TargLevel;
    270  1.1  riastrad 	uint8_t  LevelChangeInProgress;
    271  1.1  riastrad 	uint8_t  UpHyst;
    272  1.1  riastrad 
    273  1.1  riastrad 	uint8_t  DownHyst;
    274  1.1  riastrad 	uint8_t  VoltageDownHyst;
    275  1.1  riastrad 	uint8_t  DpmEnable;
    276  1.1  riastrad 	uint8_t  DpmRunning;
    277  1.1  riastrad 
    278  1.1  riastrad 	uint8_t  DpmForce;
    279  1.1  riastrad 	uint8_t  DpmForceLevel;
    280  1.1  riastrad 	uint8_t  DisplayWatermark;
    281  1.1  riastrad 	uint8_t  McArbIndex;
    282  1.1  riastrad 
    283  1.1  riastrad 	uint32_t MinimumPerfSclk;
    284  1.1  riastrad 
    285  1.1  riastrad 	uint8_t  AcpiReq;
    286  1.1  riastrad 	uint8_t  AcpiAck;
    287  1.1  riastrad 	uint8_t  GfxClkSlow;
    288  1.1  riastrad 	uint8_t  GpioClampMode;
    289  1.1  riastrad 
    290  1.1  riastrad 	uint8_t  spare2;
    291  1.1  riastrad 	uint8_t  EnabledLevelsChange;
    292  1.1  riastrad 	uint8_t  DteClampMode;
    293  1.1  riastrad 	uint8_t  FpsClampMode;
    294  1.1  riastrad 
    295  1.1  riastrad 	uint16_t LevelResidencyCounters[SMU74_MAX_LEVELS_GRAPHICS];
    296  1.1  riastrad 	uint16_t LevelSwitchCounters[SMU74_MAX_LEVELS_GRAPHICS];
    297  1.1  riastrad 
    298  1.1  riastrad 	void     (*TargetStateCalculator)(uint8_t);
    299  1.1  riastrad 	void     (*SavedTargetStateCalculator)(uint8_t);
    300  1.1  riastrad 
    301  1.1  riastrad 	uint16_t AutoDpmInterval;
    302  1.1  riastrad 	uint16_t AutoDpmRange;
    303  1.1  riastrad 
    304  1.1  riastrad 	uint8_t  FpsEnabled;
    305  1.1  riastrad 	uint8_t  MaxPerfLevel;
    306  1.1  riastrad 	uint8_t  AllowLowClkInterruptToHost;
    307  1.1  riastrad 	uint8_t  FpsRunning;
    308  1.1  riastrad 
    309  1.1  riastrad 	uint32_t MaxAllowedFrequency;
    310  1.1  riastrad 
    311  1.1  riastrad 	uint32_t FilteredSclkFrequency;
    312  1.1  riastrad 	uint32_t LastSclkFrequency;
    313  1.1  riastrad 	uint32_t FilteredSclkFrequencyCnt;
    314  1.1  riastrad 
    315  1.1  riastrad 	uint8_t MinPerfLevel;
    316  1.1  riastrad 	uint8_t padding[3];
    317  1.1  riastrad 
    318  1.1  riastrad 	uint16_t FpsAlpha;
    319  1.1  riastrad 	uint16_t DeltaTime;
    320  1.1  riastrad 	uint32_t CurrentFps;
    321  1.1  riastrad 	uint32_t FilteredFps;
    322  1.1  riastrad 	uint32_t FrameCount;
    323  1.1  riastrad 	uint32_t FrameCountLast;
    324  1.1  riastrad 	uint16_t FpsTargetScalar;
    325  1.1  riastrad 	uint16_t FpsWaterfallLimitScalar;
    326  1.1  riastrad 	uint16_t FpsAlphaScalar;
    327  1.1  riastrad 	uint16_t spare8;
    328  1.1  riastrad 	SMU7_HystController_Data HystControllerData;
    329  1.1  riastrad };
    330  1.1  riastrad 
    331  1.1  riastrad typedef struct SMU7_LocalDpmScoreboard SMU7_LocalDpmScoreboard;
    332  1.1  riastrad 
    333  1.1  riastrad #define SMU7_MAX_VOLTAGE_CLIENTS 12
    334  1.1  riastrad 
    335  1.1  riastrad typedef uint8_t (*VoltageChangeHandler_t)(uint16_t, uint8_t);
    336  1.1  riastrad 
    337  1.1  riastrad #define VDDC_MASK    0x00007FFF
    338  1.1  riastrad #define VDDC_SHIFT   0
    339  1.1  riastrad #define VDDCI_MASK   0x3FFF8000
    340  1.1  riastrad #define VDDCI_SHIFT  15
    341  1.1  riastrad #define PHASES_MASK  0xC0000000
    342  1.1  riastrad #define PHASES_SHIFT 30
    343  1.1  riastrad 
    344  1.1  riastrad typedef uint32_t SMU_VoltageLevel;
    345  1.1  riastrad 
    346  1.1  riastrad struct SMU7_VoltageScoreboard {
    347  1.1  riastrad 
    348  1.1  riastrad 	SMU_VoltageLevel TargetVoltage;
    349  1.1  riastrad 	uint16_t MaxVid;
    350  1.1  riastrad 	uint8_t  HighestVidOffset;
    351  1.1  riastrad 	uint8_t  CurrentVidOffset;
    352  1.1  riastrad 
    353  1.1  riastrad 	uint16_t CurrentVddc;
    354  1.1  riastrad 	uint16_t CurrentVddci;
    355  1.1  riastrad 
    356  1.1  riastrad 
    357  1.1  riastrad 	uint8_t  ControllerBusy;
    358  1.1  riastrad 	uint8_t  CurrentVid;
    359  1.1  riastrad 	uint8_t  CurrentVddciVid;
    360  1.1  riastrad 	uint8_t  padding;
    361  1.1  riastrad 
    362  1.1  riastrad 	SMU_VoltageLevel RequestedVoltage[SMU7_MAX_VOLTAGE_CLIENTS];
    363  1.1  riastrad 	SMU_VoltageLevel TargetVoltageState;
    364  1.1  riastrad 	uint8_t  EnabledRequest[SMU7_MAX_VOLTAGE_CLIENTS];
    365  1.1  riastrad 
    366  1.1  riastrad 	uint8_t  padding2;
    367  1.1  riastrad 	uint8_t  padding3;
    368  1.1  riastrad 	uint8_t  ControllerEnable;
    369  1.1  riastrad 	uint8_t  ControllerRunning;
    370  1.1  riastrad 	uint16_t CurrentStdVoltageHiSidd;
    371  1.1  riastrad 	uint16_t CurrentStdVoltageLoSidd;
    372  1.1  riastrad 	uint8_t  OverrideVoltage;
    373  1.1  riastrad 	uint8_t  padding4;
    374  1.1  riastrad 	uint8_t  padding5;
    375  1.1  riastrad 	uint8_t  CurrentPhases;
    376  1.1  riastrad 
    377  1.1  riastrad 	VoltageChangeHandler_t ChangeVddc;
    378  1.1  riastrad 
    379  1.1  riastrad 	VoltageChangeHandler_t ChangeVddci;
    380  1.1  riastrad 	VoltageChangeHandler_t ChangePhase;
    381  1.1  riastrad 	VoltageChangeHandler_t ChangeMvdd;
    382  1.1  riastrad 
    383  1.1  riastrad 	VoltageChangeHandler_t functionLinks[6];
    384  1.1  riastrad 
    385  1.1  riastrad 	uint16_t *VddcFollower1;
    386  1.1  riastrad 
    387  1.1  riastrad 	int16_t  Driver_OD_RequestedVidOffset1;
    388  1.1  riastrad 	int16_t  Driver_OD_RequestedVidOffset2;
    389  1.1  riastrad };
    390  1.1  riastrad 
    391  1.1  riastrad typedef struct SMU7_VoltageScoreboard SMU7_VoltageScoreboard;
    392  1.1  riastrad 
    393  1.1  riastrad #define SMU7_MAX_PCIE_LINK_SPEEDS 3 /* 0:Gen1 1:Gen2 2:Gen3 */
    394  1.1  riastrad 
    395  1.1  riastrad struct SMU7_PCIeLinkSpeedScoreboard {
    396  1.1  riastrad 	uint8_t     DpmEnable;
    397  1.1  riastrad 	uint8_t     DpmRunning;
    398  1.1  riastrad 	uint8_t     DpmForce;
    399  1.1  riastrad 	uint8_t     DpmForceLevel;
    400  1.1  riastrad 
    401  1.1  riastrad 	uint8_t     CurrentLinkSpeed;
    402  1.1  riastrad 	uint8_t     EnabledLevelsChange;
    403  1.1  riastrad 	uint16_t    AutoDpmInterval;
    404  1.1  riastrad 
    405  1.1  riastrad 	uint16_t    AutoDpmRange;
    406  1.1  riastrad 	uint16_t    AutoDpmCount;
    407  1.1  riastrad 
    408  1.1  riastrad 	uint8_t     DpmMode;
    409  1.1  riastrad 	uint8_t     AcpiReq;
    410  1.1  riastrad 	uint8_t     AcpiAck;
    411  1.1  riastrad 	uint8_t     CurrentLinkLevel;
    412  1.1  riastrad 
    413  1.1  riastrad };
    414  1.1  riastrad 
    415  1.1  riastrad typedef struct SMU7_PCIeLinkSpeedScoreboard SMU7_PCIeLinkSpeedScoreboard;
    416  1.1  riastrad 
    417  1.1  riastrad #define SMU7_LKGE_LUT_NUM_OF_TEMP_ENTRIES 16
    418  1.1  riastrad #define SMU7_LKGE_LUT_NUM_OF_VOLT_ENTRIES 16
    419  1.1  riastrad 
    420  1.1  riastrad #define SMU7_SCALE_I  7
    421  1.1  riastrad #define SMU7_SCALE_R 12
    422  1.1  riastrad 
    423  1.1  riastrad struct SMU7_PowerScoreboard {
    424  1.1  riastrad 	PowerCalculatorData_t VddcPowerData[SID_OPTION_COUNT];
    425  1.1  riastrad 
    426  1.1  riastrad 	uint32_t TotalGpuPower;
    427  1.1  riastrad 	uint32_t TdcCurrent;
    428  1.1  riastrad 
    429  1.1  riastrad 	uint16_t   VddciTotalPower;
    430  1.1  riastrad 	uint16_t   sparesasfsdfd;
    431  1.1  riastrad 	uint16_t   Vddr1Power;
    432  1.1  riastrad 	uint16_t   RocPower;
    433  1.1  riastrad 
    434  1.1  riastrad 	uint16_t   CalcMeasPowerBlend;
    435  1.1  riastrad 	uint8_t    SidOptionPower;
    436  1.1  riastrad 	uint8_t    SidOptionCurrent;
    437  1.1  riastrad 
    438  1.1  riastrad 	uint32_t   WinTime;
    439  1.1  riastrad 
    440  1.1  riastrad 	uint16_t Telemetry_1_slope;
    441  1.1  riastrad 	uint16_t Telemetry_2_slope;
    442  1.1  riastrad 	int32_t Telemetry_1_offset;
    443  1.1  riastrad 	int32_t Telemetry_2_offset;
    444  1.1  riastrad 
    445  1.1  riastrad 	uint32_t VddcCurrentTelemetry;
    446  1.1  riastrad 	uint32_t VddGfxCurrentTelemetry;
    447  1.1  riastrad 	uint32_t VddcPowerTelemetry;
    448  1.1  riastrad 	uint32_t VddGfxPowerTelemetry;
    449  1.1  riastrad 	uint32_t VddciPowerTelemetry;
    450  1.1  riastrad 
    451  1.1  riastrad 	uint32_t VddcPower;
    452  1.1  riastrad 	uint32_t VddGfxPower;
    453  1.1  riastrad 	uint32_t VddciPower;
    454  1.1  riastrad 
    455  1.1  riastrad 	uint32_t TelemetryCurrent[2];
    456  1.1  riastrad 	uint32_t TelemetryVoltage[2];
    457  1.1  riastrad 	uint32_t TelemetryPower[2];
    458  1.1  riastrad };
    459  1.1  riastrad 
    460  1.1  riastrad typedef struct SMU7_PowerScoreboard SMU7_PowerScoreboard;
    461  1.1  riastrad 
    462  1.1  riastrad struct SMU7_ThermalScoreboard {
    463  1.1  riastrad 	int16_t  GpuLimit;
    464  1.1  riastrad 	int16_t  GpuHyst;
    465  1.1  riastrad 	uint16_t CurrGnbTemp;
    466  1.1  riastrad 	uint16_t FilteredGnbTemp;
    467  1.1  riastrad 
    468  1.1  riastrad 	uint8_t  ControllerEnable;
    469  1.1  riastrad 	uint8_t  ControllerRunning;
    470  1.1  riastrad 	uint8_t  AutoTmonCalInterval;
    471  1.1  riastrad 	uint8_t  AutoTmonCalEnable;
    472  1.1  riastrad 
    473  1.1  riastrad 	uint8_t  ThermalDpmEnabled;
    474  1.1  riastrad 	uint8_t  SclkEnabledMask;
    475  1.1  riastrad 	uint8_t  spare[2];
    476  1.1  riastrad 	int32_t  temperature_gradient;
    477  1.1  riastrad 
    478  1.1  riastrad 	SMU7_HystController_Data HystControllerData;
    479  1.1  riastrad 	int32_t  WeightedSensorTemperature;
    480  1.1  riastrad 	uint16_t TemperatureLimit[SMU74_MAX_LEVELS_GRAPHICS];
    481  1.1  riastrad 	uint32_t Alpha;
    482  1.1  riastrad };
    483  1.1  riastrad 
    484  1.1  riastrad typedef struct SMU7_ThermalScoreboard SMU7_ThermalScoreboard;
    485  1.1  riastrad 
    486  1.1  riastrad #define SMU7_SCLK_DPM_CONFIG_MASK                        0x01
    487  1.1  riastrad #define SMU7_VOLTAGE_CONTROLLER_CONFIG_MASK              0x02
    488  1.1  riastrad #define SMU7_THERMAL_CONTROLLER_CONFIG_MASK              0x04
    489  1.1  riastrad #define SMU7_MCLK_DPM_CONFIG_MASK                        0x08
    490  1.1  riastrad #define SMU7_UVD_DPM_CONFIG_MASK                         0x10
    491  1.1  riastrad #define SMU7_VCE_DPM_CONFIG_MASK                         0x20
    492  1.1  riastrad #define SMU7_ACP_DPM_CONFIG_MASK                         0x40
    493  1.1  riastrad #define SMU7_SAMU_DPM_CONFIG_MASK                        0x80
    494  1.1  riastrad #define SMU7_PCIEGEN_DPM_CONFIG_MASK                    0x100
    495  1.1  riastrad 
    496  1.1  riastrad #define SMU7_ACP_MCLK_HANDSHAKE_DISABLE                  0x00000001
    497  1.1  riastrad #define SMU7_ACP_SCLK_HANDSHAKE_DISABLE                  0x00000002
    498  1.1  riastrad #define SMU7_UVD_MCLK_HANDSHAKE_DISABLE                  0x00000100
    499  1.1  riastrad #define SMU7_UVD_SCLK_HANDSHAKE_DISABLE                  0x00000200
    500  1.1  riastrad #define SMU7_VCE_MCLK_HANDSHAKE_DISABLE                  0x00010000
    501  1.1  riastrad #define SMU7_VCE_SCLK_HANDSHAKE_DISABLE                  0x00020000
    502  1.1  riastrad 
    503  1.1  riastrad /* All 'soft registers' should be uint32_t. */
    504  1.1  riastrad struct SMU74_SoftRegisters {
    505  1.1  riastrad 	uint32_t        RefClockFrequency;
    506  1.1  riastrad 	uint32_t        PmTimerPeriod;
    507  1.1  riastrad 	uint32_t        FeatureEnables;
    508  1.1  riastrad 
    509  1.1  riastrad 	uint32_t        PreVBlankGap;
    510  1.1  riastrad 	uint32_t        VBlankTimeout;
    511  1.1  riastrad 	uint32_t        TrainTimeGap;
    512  1.1  riastrad 
    513  1.1  riastrad 	uint32_t        MvddSwitchTime;
    514  1.1  riastrad 	uint32_t        LongestAcpiTrainTime;
    515  1.1  riastrad 	uint32_t        AcpiDelay;
    516  1.1  riastrad 	uint32_t        G5TrainTime;
    517  1.1  riastrad 	uint32_t        DelayMpllPwron;
    518  1.1  riastrad 	uint32_t        VoltageChangeTimeout;
    519  1.1  riastrad 
    520  1.1  riastrad 	uint32_t        HandshakeDisables;
    521  1.1  riastrad 
    522  1.1  riastrad 	uint8_t         DisplayPhy1Config;
    523  1.1  riastrad 	uint8_t         DisplayPhy2Config;
    524  1.1  riastrad 	uint8_t         DisplayPhy3Config;
    525  1.1  riastrad 	uint8_t         DisplayPhy4Config;
    526  1.1  riastrad 
    527  1.1  riastrad 	uint8_t         DisplayPhy5Config;
    528  1.1  riastrad 	uint8_t         DisplayPhy6Config;
    529  1.1  riastrad 	uint8_t         DisplayPhy7Config;
    530  1.1  riastrad 	uint8_t         DisplayPhy8Config;
    531  1.1  riastrad 
    532  1.1  riastrad 	uint32_t        AverageGraphicsActivity;
    533  1.1  riastrad 	uint32_t        AverageMemoryActivity;
    534  1.1  riastrad 	uint32_t        AverageGioActivity;
    535  1.1  riastrad 
    536  1.1  riastrad 	uint8_t         SClkDpmEnabledLevels;
    537  1.1  riastrad 	uint8_t         MClkDpmEnabledLevels;
    538  1.1  riastrad 	uint8_t         LClkDpmEnabledLevels;
    539  1.1  riastrad 	uint8_t         PCIeDpmEnabledLevels;
    540  1.1  riastrad 
    541  1.1  riastrad 	uint8_t         UVDDpmEnabledLevels;
    542  1.1  riastrad 	uint8_t         SAMUDpmEnabledLevels;
    543  1.1  riastrad 	uint8_t         ACPDpmEnabledLevels;
    544  1.1  riastrad 	uint8_t         VCEDpmEnabledLevels;
    545  1.1  riastrad 
    546  1.1  riastrad 	uint32_t        DRAM_LOG_ADDR_H;
    547  1.1  riastrad 	uint32_t        DRAM_LOG_ADDR_L;
    548  1.1  riastrad 	uint32_t        DRAM_LOG_PHY_ADDR_H;
    549  1.1  riastrad 	uint32_t        DRAM_LOG_PHY_ADDR_L;
    550  1.1  riastrad 	uint32_t        DRAM_LOG_BUFF_SIZE;
    551  1.1  riastrad 	uint32_t        UlvEnterCount;
    552  1.1  riastrad 	uint32_t        UlvTime;
    553  1.1  riastrad 	uint32_t        UcodeLoadStatus;
    554  1.1  riastrad 	uint32_t        AllowMvddSwitch;
    555  1.1  riastrad 	uint8_t         Activity_Weight;
    556  1.1  riastrad 	uint8_t         Reserved8[3];
    557  1.1  riastrad };
    558  1.1  riastrad 
    559  1.1  riastrad typedef struct SMU74_SoftRegisters SMU74_SoftRegisters;
    560  1.1  riastrad 
    561  1.1  riastrad struct SMU74_Firmware_Header {
    562  1.1  riastrad 	uint32_t Digest[5];
    563  1.1  riastrad 	uint32_t Version;
    564  1.1  riastrad 	uint32_t HeaderSize;
    565  1.1  riastrad 	uint32_t Flags;
    566  1.1  riastrad 	uint32_t EntryPoint;
    567  1.1  riastrad 	uint32_t CodeSize;
    568  1.1  riastrad 	uint32_t ImageSize;
    569  1.1  riastrad 
    570  1.1  riastrad 	uint32_t Rtos;
    571  1.1  riastrad 	uint32_t SoftRegisters;
    572  1.1  riastrad 	uint32_t DpmTable;
    573  1.1  riastrad 	uint32_t FanTable;
    574  1.1  riastrad 	uint32_t CacConfigTable;
    575  1.1  riastrad 	uint32_t CacStatusTable;
    576  1.1  riastrad 
    577  1.1  riastrad 	uint32_t mcRegisterTable;
    578  1.1  riastrad 
    579  1.1  riastrad 	uint32_t mcArbDramTimingTable;
    580  1.1  riastrad 
    581  1.1  riastrad 	uint32_t PmFuseTable;
    582  1.1  riastrad 	uint32_t Globals;
    583  1.1  riastrad 	uint32_t ClockStretcherTable;
    584  1.1  riastrad 	uint32_t VftTable;
    585  1.1  riastrad 	uint32_t Reserved1;
    586  1.1  riastrad 	uint32_t AvfsTable;
    587  1.1  riastrad 	uint32_t AvfsCksOffGbvTable;
    588  1.1  riastrad 	uint32_t AvfsMeanNSigma;
    589  1.1  riastrad 	uint32_t AvfsSclkOffsetTable;
    590  1.1  riastrad 	uint32_t Reserved[16];
    591  1.1  riastrad 	uint32_t Signature;
    592  1.1  riastrad };
    593  1.1  riastrad 
    594  1.1  riastrad typedef struct SMU74_Firmware_Header SMU74_Firmware_Header;
    595  1.1  riastrad 
    596  1.1  riastrad #define SMU7_FIRMWARE_HEADER_LOCATION 0x20000
    597  1.1  riastrad 
    598  1.1  riastrad enum  DisplayConfig {
    599  1.1  riastrad 	PowerDown = 1,
    600  1.1  riastrad 	DP54x4,
    601  1.1  riastrad 	DP54x2,
    602  1.1  riastrad 	DP54x1,
    603  1.1  riastrad 	DP27x4,
    604  1.1  riastrad 	DP27x2,
    605  1.1  riastrad 	DP27x1,
    606  1.1  riastrad 	HDMI297,
    607  1.1  riastrad 	HDMI162,
    608  1.1  riastrad 	LVDS,
    609  1.1  riastrad 	DP324x4,
    610  1.1  riastrad 	DP324x2,
    611  1.1  riastrad 	DP324x1
    612  1.1  riastrad };
    613  1.1  riastrad 
    614  1.1  riastrad 
    615  1.1  riastrad #define MC_BLOCK_COUNT 1
    616  1.1  riastrad #define CPL_BLOCK_COUNT 5
    617  1.1  riastrad #define SE_BLOCK_COUNT 15
    618  1.1  riastrad #define GC_BLOCK_COUNT 24
    619  1.1  riastrad 
    620  1.1  riastrad struct SMU7_Local_Cac {
    621  1.1  riastrad 	uint8_t BlockId;
    622  1.1  riastrad 	uint8_t SignalId;
    623  1.1  riastrad 	uint8_t Threshold;
    624  1.1  riastrad 	uint8_t Padding;
    625  1.1  riastrad };
    626  1.1  riastrad 
    627  1.1  riastrad typedef struct SMU7_Local_Cac SMU7_Local_Cac;
    628  1.1  riastrad 
    629  1.1  riastrad struct SMU7_Local_Cac_Table {
    630  1.1  riastrad 
    631  1.1  riastrad 	SMU7_Local_Cac CplLocalCac[CPL_BLOCK_COUNT];
    632  1.1  riastrad 	SMU7_Local_Cac McLocalCac[MC_BLOCK_COUNT];
    633  1.1  riastrad 	SMU7_Local_Cac SeLocalCac[SE_BLOCK_COUNT];
    634  1.1  riastrad 	SMU7_Local_Cac GcLocalCac[GC_BLOCK_COUNT];
    635  1.1  riastrad };
    636  1.1  riastrad 
    637  1.1  riastrad typedef struct SMU7_Local_Cac_Table SMU7_Local_Cac_Table;
    638  1.1  riastrad 
    639  1.1  riastrad #pragma pack(pop)
    640  1.1  riastrad 
    641  1.1  riastrad /* Description of Clock Gating bitmask for Tonga:
    642  1.1  riastrad  * System Clock Gating
    643  1.1  riastrad  */
    644  1.1  riastrad #define CG_SYS_BITMASK_FIRST_BIT      0  /* First bit of Sys CG bitmask */
    645  1.1  riastrad #define CG_SYS_BITMASK_LAST_BIT       9  /* Last bit of Sys CG bitmask */
    646  1.1  riastrad #define CG_SYS_BIF_MGLS_SHIFT         0
    647  1.1  riastrad #define CG_SYS_ROM_SHIFT              1
    648  1.1  riastrad #define CG_SYS_MC_MGCG_SHIFT          2
    649  1.1  riastrad #define CG_SYS_MC_MGLS_SHIFT          3
    650  1.1  riastrad #define CG_SYS_SDMA_MGCG_SHIFT        4
    651  1.1  riastrad #define CG_SYS_SDMA_MGLS_SHIFT        5
    652  1.1  riastrad #define CG_SYS_DRM_MGCG_SHIFT         6
    653  1.1  riastrad #define CG_SYS_HDP_MGCG_SHIFT         7
    654  1.1  riastrad #define CG_SYS_HDP_MGLS_SHIFT         8
    655  1.1  riastrad #define CG_SYS_DRM_MGLS_SHIFT         9
    656  1.1  riastrad #define CG_SYS_BIF_MGCG_SHIFT         10
    657  1.1  riastrad 
    658  1.1  riastrad #define CG_SYS_BIF_MGLS_MASK          0x1
    659  1.1  riastrad #define CG_SYS_ROM_MASK               0x2
    660  1.1  riastrad #define CG_SYS_MC_MGCG_MASK           0x4
    661  1.1  riastrad #define CG_SYS_MC_MGLS_MASK           0x8
    662  1.1  riastrad #define CG_SYS_SDMA_MGCG_MASK         0x10
    663  1.1  riastrad #define CG_SYS_SDMA_MGLS_MASK         0x20
    664  1.1  riastrad #define CG_SYS_DRM_MGCG_MASK          0x40
    665  1.1  riastrad #define CG_SYS_HDP_MGCG_MASK          0x80
    666  1.1  riastrad #define CG_SYS_HDP_MGLS_MASK          0x100
    667  1.1  riastrad #define CG_SYS_DRM_MGLS_MASK          0x200
    668  1.1  riastrad #define CG_SYS_BIF_MGCG_MASK          0x400
    669  1.1  riastrad 
    670  1.1  riastrad /* Graphics Clock Gating */
    671  1.1  riastrad #define CG_GFX_BITMASK_FIRST_BIT      16 /* First bit of Gfx CG bitmask */
    672  1.1  riastrad #define CG_GFX_BITMASK_LAST_BIT       24 /* Last bit of Gfx CG bitmask */
    673  1.1  riastrad 
    674  1.1  riastrad #define CG_GFX_CGCG_SHIFT             16
    675  1.1  riastrad #define CG_GFX_CGLS_SHIFT             17
    676  1.1  riastrad #define CG_CPF_MGCG_SHIFT             18
    677  1.1  riastrad #define CG_RLC_MGCG_SHIFT             19
    678  1.1  riastrad #define CG_GFX_OTHERS_MGCG_SHIFT      20
    679  1.1  riastrad #define CG_GFX_3DCG_SHIFT             21
    680  1.1  riastrad #define CG_GFX_3DLS_SHIFT             22
    681  1.1  riastrad #define CG_GFX_RLC_LS_SHIFT           23
    682  1.1  riastrad #define CG_GFX_CP_LS_SHIFT            24
    683  1.1  riastrad 
    684  1.1  riastrad #define CG_GFX_CGCG_MASK              0x00010000
    685  1.1  riastrad #define CG_GFX_CGLS_MASK              0x00020000
    686  1.1  riastrad #define CG_CPF_MGCG_MASK              0x00040000
    687  1.1  riastrad #define CG_RLC_MGCG_MASK              0x00080000
    688  1.1  riastrad #define CG_GFX_OTHERS_MGCG_MASK       0x00100000
    689  1.1  riastrad #define CG_GFX_3DCG_MASK              0x00200000
    690  1.1  riastrad #define CG_GFX_3DLS_MASK              0x00400000
    691  1.1  riastrad #define CG_GFX_RLC_LS_MASK            0x00800000
    692  1.1  riastrad #define CG_GFX_CP_LS_MASK             0x01000000
    693  1.1  riastrad 
    694  1.1  riastrad 
    695  1.1  riastrad /* Voltage Regulator Configuration
    696  1.1  riastrad VR Config info is contained in dpmTable.VRConfig */
    697  1.1  riastrad 
    698  1.1  riastrad #define VRCONF_VDDC_MASK         0x000000FF
    699  1.1  riastrad #define VRCONF_VDDC_SHIFT        0
    700  1.1  riastrad #define VRCONF_VDDGFX_MASK       0x0000FF00
    701  1.1  riastrad #define VRCONF_VDDGFX_SHIFT      8
    702  1.1  riastrad #define VRCONF_VDDCI_MASK        0x00FF0000
    703  1.1  riastrad #define VRCONF_VDDCI_SHIFT       16
    704  1.1  riastrad #define VRCONF_MVDD_MASK         0xFF000000
    705  1.1  riastrad #define VRCONF_MVDD_SHIFT        24
    706  1.1  riastrad 
    707  1.1  riastrad #define VR_MERGED_WITH_VDDC      0
    708  1.1  riastrad #define VR_SVI2_PLANE_1          1
    709  1.1  riastrad #define VR_SVI2_PLANE_2          2
    710  1.1  riastrad #define VR_SMIO_PATTERN_1        3
    711  1.1  riastrad #define VR_SMIO_PATTERN_2        4
    712  1.1  riastrad #define VR_STATIC_VOLTAGE        5
    713  1.1  riastrad 
    714  1.1  riastrad /* Clock Stretcher Configuration */
    715  1.1  riastrad 
    716  1.1  riastrad #define CLOCK_STRETCHER_MAX_ENTRIES 0x4
    717  1.1  riastrad #define CKS_LOOKUPTable_MAX_ENTRIES 0x4
    718  1.1  riastrad 
    719  1.1  riastrad /* The 'settings' field is subdivided in the following way: */
    720  1.1  riastrad #define CLOCK_STRETCHER_SETTING_DDT_MASK             0x01
    721  1.1  riastrad #define CLOCK_STRETCHER_SETTING_DDT_SHIFT            0x0
    722  1.1  riastrad #define CLOCK_STRETCHER_SETTING_STRETCH_AMOUNT_MASK  0x1E
    723  1.1  riastrad #define CLOCK_STRETCHER_SETTING_STRETCH_AMOUNT_SHIFT 0x1
    724  1.1  riastrad #define CLOCK_STRETCHER_SETTING_ENABLE_MASK          0x80
    725  1.1  riastrad #define CLOCK_STRETCHER_SETTING_ENABLE_SHIFT         0x7
    726  1.1  riastrad 
    727  1.1  riastrad struct SMU_ClockStretcherDataTableEntry {
    728  1.1  riastrad 	uint8_t minVID;
    729  1.1  riastrad 	uint8_t maxVID;
    730  1.1  riastrad 	uint16_t setting;
    731  1.1  riastrad };
    732  1.1  riastrad typedef struct SMU_ClockStretcherDataTableEntry SMU_ClockStretcherDataTableEntry;
    733  1.1  riastrad 
    734  1.1  riastrad struct SMU_ClockStretcherDataTable {
    735  1.1  riastrad 	SMU_ClockStretcherDataTableEntry ClockStretcherDataTableEntry[CLOCK_STRETCHER_MAX_ENTRIES];
    736  1.1  riastrad };
    737  1.1  riastrad typedef struct SMU_ClockStretcherDataTable SMU_ClockStretcherDataTable;
    738  1.1  riastrad 
    739  1.1  riastrad struct SMU_CKS_LOOKUPTableEntry {
    740  1.1  riastrad 	uint16_t minFreq;
    741  1.1  riastrad 	uint16_t maxFreq;
    742  1.1  riastrad 
    743  1.1  riastrad 	uint8_t setting;
    744  1.1  riastrad 	uint8_t padding[3];
    745  1.1  riastrad };
    746  1.1  riastrad typedef struct SMU_CKS_LOOKUPTableEntry SMU_CKS_LOOKUPTableEntry;
    747  1.1  riastrad 
    748  1.1  riastrad struct SMU_CKS_LOOKUPTable {
    749  1.1  riastrad 	SMU_CKS_LOOKUPTableEntry CKS_LOOKUPTableEntry[CKS_LOOKUPTable_MAX_ENTRIES];
    750  1.1  riastrad };
    751  1.1  riastrad typedef struct SMU_CKS_LOOKUPTable SMU_CKS_LOOKUPTable;
    752  1.1  riastrad 
    753  1.1  riastrad struct AgmAvfsData_t {
    754  1.1  riastrad 	uint16_t avgPsmCount[28];
    755  1.1  riastrad 	uint16_t minPsmCount[28];
    756  1.1  riastrad };
    757  1.1  riastrad 
    758  1.1  riastrad typedef struct AgmAvfsData_t AgmAvfsData_t;
    759  1.1  riastrad 
    760  1.1  riastrad enum VFT_COLUMNS {
    761  1.1  riastrad 	SCLK0,
    762  1.1  riastrad 	SCLK1,
    763  1.1  riastrad 	SCLK2,
    764  1.1  riastrad 	SCLK3,
    765  1.1  riastrad 	SCLK4,
    766  1.1  riastrad 	SCLK5,
    767  1.1  riastrad 	SCLK6,
    768  1.1  riastrad 	SCLK7,
    769  1.1  riastrad 
    770  1.1  riastrad 	NUM_VFT_COLUMNS
    771  1.1  riastrad };
    772  1.1  riastrad 
    773  1.1  riastrad #define VFT_TABLE_DEFINED
    774  1.1  riastrad 
    775  1.1  riastrad #define TEMP_RANGE_MAXSTEPS 12
    776  1.1  riastrad 
    777  1.1  riastrad struct VFT_CELL_t {
    778  1.1  riastrad 	uint16_t Voltage;
    779  1.1  riastrad };
    780  1.1  riastrad 
    781  1.1  riastrad typedef struct VFT_CELL_t VFT_CELL_t;
    782  1.1  riastrad 
    783  1.1  riastrad struct VFT_TABLE_t {
    784  1.1  riastrad 	VFT_CELL_t    Cell[TEMP_RANGE_MAXSTEPS][NUM_VFT_COLUMNS];
    785  1.1  riastrad 	uint16_t      AvfsGbv[NUM_VFT_COLUMNS];
    786  1.1  riastrad 	uint16_t      BtcGbv[NUM_VFT_COLUMNS];
    787  1.1  riastrad 	uint16_t      Temperature[TEMP_RANGE_MAXSTEPS];
    788  1.1  riastrad 
    789  1.1  riastrad 	uint8_t       NumTemperatureSteps;
    790  1.1  riastrad 	uint8_t       padding[3];
    791  1.1  riastrad };
    792  1.1  riastrad 
    793  1.1  riastrad typedef struct VFT_TABLE_t VFT_TABLE_t;
    794  1.1  riastrad 
    795  1.1  riastrad 
    796  1.1  riastrad /* Total margin, root mean square of Fmax + DC + Platform */
    797  1.1  riastrad struct AVFS_Margin_t {
    798  1.1  riastrad 	VFT_CELL_t Cell[NUM_VFT_COLUMNS];
    799  1.1  riastrad };
    800  1.1  riastrad typedef struct AVFS_Margin_t AVFS_Margin_t;
    801  1.1  riastrad 
    802  1.1  riastrad #define BTCGB_VDROOP_TABLE_MAX_ENTRIES 2
    803  1.1  riastrad #define AVFSGB_VDROOP_TABLE_MAX_ENTRIES 2
    804  1.1  riastrad 
    805  1.1  riastrad struct GB_VDROOP_TABLE_t {
    806  1.1  riastrad 	int32_t a0;
    807  1.1  riastrad 	int32_t a1;
    808  1.1  riastrad 	int32_t a2;
    809  1.1  riastrad 	uint32_t spare;
    810  1.1  riastrad };
    811  1.1  riastrad typedef struct GB_VDROOP_TABLE_t GB_VDROOP_TABLE_t;
    812  1.1  riastrad 
    813  1.1  riastrad struct AVFS_CksOff_Gbv_t {
    814  1.1  riastrad 	VFT_CELL_t Cell[NUM_VFT_COLUMNS];
    815  1.1  riastrad };
    816  1.1  riastrad typedef struct AVFS_CksOff_Gbv_t AVFS_CksOff_Gbv_t;
    817  1.1  riastrad 
    818  1.1  riastrad struct AVFS_meanNsigma_t {
    819  1.1  riastrad 	uint32_t Aconstant[3];
    820  1.1  riastrad 	uint16_t DC_tol_sigma;
    821  1.1  riastrad 	uint16_t Platform_mean;
    822  1.1  riastrad 	uint16_t Platform_sigma;
    823  1.1  riastrad 	uint16_t PSM_Age_CompFactor;
    824  1.1  riastrad 	uint8_t  Static_Voltage_Offset[NUM_VFT_COLUMNS];
    825  1.1  riastrad };
    826  1.1  riastrad typedef struct AVFS_meanNsigma_t AVFS_meanNsigma_t;
    827  1.1  riastrad 
    828  1.1  riastrad struct AVFS_Sclk_Offset_t {
    829  1.1  riastrad 	uint16_t Sclk_Offset[8];
    830  1.1  riastrad };
    831  1.1  riastrad typedef struct AVFS_Sclk_Offset_t AVFS_Sclk_Offset_t;
    832  1.1  riastrad 
    833  1.1  riastrad #endif
    834  1.1  riastrad 
    835  1.1  riastrad 
    836