Home | History | Annotate | Line # | Download | only in inc
      1  1.1  riastrad /*	$NetBSD: smu71.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 2016 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 SMU71_H
     26  1.1  riastrad #define SMU71_H
     27  1.1  riastrad 
     28  1.1  riastrad #if !defined(SMC_MICROCODE)
     29  1.1  riastrad #pragma pack(push, 1)
     30  1.1  riastrad #endif
     31  1.1  riastrad 
     32  1.1  riastrad #define SMU__NUM_PCIE_DPM_LEVELS 8
     33  1.1  riastrad #define SMU__NUM_SCLK_DPM_STATE 8
     34  1.1  riastrad #define SMU__NUM_MCLK_DPM_LEVELS 4
     35  1.1  riastrad #define SMU__VARIANT__ICELAND 1
     36  1.1  riastrad #define SMU__DGPU_ONLY 1
     37  1.1  riastrad #define SMU__DYNAMIC_MCARB_SETTINGS 1
     38  1.1  riastrad 
     39  1.1  riastrad enum SID_OPTION {
     40  1.1  riastrad   SID_OPTION_HI,
     41  1.1  riastrad   SID_OPTION_LO,
     42  1.1  riastrad   SID_OPTION_COUNT
     43  1.1  riastrad };
     44  1.1  riastrad 
     45  1.1  riastrad typedef struct {
     46  1.1  riastrad   uint32_t high;
     47  1.1  riastrad   uint32_t low;
     48  1.1  riastrad } data_64_t;
     49  1.1  riastrad 
     50  1.1  riastrad typedef struct {
     51  1.1  riastrad   data_64_t high;
     52  1.1  riastrad   data_64_t low;
     53  1.1  riastrad } data_128_t;
     54  1.1  riastrad 
     55  1.1  riastrad #define SMU7_CONTEXT_ID_SMC        1
     56  1.1  riastrad #define SMU7_CONTEXT_ID_VBIOS      2
     57  1.1  riastrad 
     58  1.1  riastrad #define SMU71_MAX_LEVELS_VDDC            8
     59  1.1  riastrad #define SMU71_MAX_LEVELS_VDDCI           4
     60  1.1  riastrad #define SMU71_MAX_LEVELS_MVDD            4
     61  1.1  riastrad #define SMU71_MAX_LEVELS_VDDNB           8
     62  1.1  riastrad 
     63  1.1  riastrad #define SMU71_MAX_LEVELS_GRAPHICS        SMU__NUM_SCLK_DPM_STATE
     64  1.1  riastrad #define SMU71_MAX_LEVELS_MEMORY          SMU__NUM_MCLK_DPM_LEVELS
     65  1.1  riastrad #define SMU71_MAX_LEVELS_GIO             SMU__NUM_LCLK_DPM_LEVELS
     66  1.1  riastrad #define SMU71_MAX_LEVELS_LINK            SMU__NUM_PCIE_DPM_LEVELS
     67  1.1  riastrad #define SMU71_MAX_ENTRIES_SMIO           32
     68  1.1  riastrad 
     69  1.1  riastrad #define DPM_NO_LIMIT 0
     70  1.1  riastrad #define DPM_NO_UP 1
     71  1.1  riastrad #define DPM_GO_DOWN 2
     72  1.1  riastrad #define DPM_GO_UP 3
     73  1.1  riastrad 
     74  1.1  riastrad #define SMU7_FIRST_DPM_GRAPHICS_LEVEL    0
     75  1.1  riastrad #define SMU7_FIRST_DPM_MEMORY_LEVEL      0
     76  1.1  riastrad 
     77  1.1  riastrad #define GPIO_CLAMP_MODE_VRHOT      1
     78  1.1  riastrad #define GPIO_CLAMP_MODE_THERM      2
     79  1.1  riastrad #define GPIO_CLAMP_MODE_DC         4
     80  1.1  riastrad 
     81  1.1  riastrad #define SCRATCH_B_TARG_PCIE_INDEX_SHIFT 0
     82  1.1  riastrad #define SCRATCH_B_TARG_PCIE_INDEX_MASK  (0x7<<SCRATCH_B_TARG_PCIE_INDEX_SHIFT)
     83  1.1  riastrad #define SCRATCH_B_CURR_PCIE_INDEX_SHIFT 3
     84  1.1  riastrad #define SCRATCH_B_CURR_PCIE_INDEX_MASK  (0x7<<SCRATCH_B_CURR_PCIE_INDEX_SHIFT)
     85  1.1  riastrad #define SCRATCH_B_TARG_UVD_INDEX_SHIFT  6
     86  1.1  riastrad #define SCRATCH_B_TARG_UVD_INDEX_MASK   (0x7<<SCRATCH_B_TARG_UVD_INDEX_SHIFT)
     87  1.1  riastrad #define SCRATCH_B_CURR_UVD_INDEX_SHIFT  9
     88  1.1  riastrad #define SCRATCH_B_CURR_UVD_INDEX_MASK   (0x7<<SCRATCH_B_CURR_UVD_INDEX_SHIFT)
     89  1.1  riastrad #define SCRATCH_B_TARG_VCE_INDEX_SHIFT  12
     90  1.1  riastrad #define SCRATCH_B_TARG_VCE_INDEX_MASK   (0x7<<SCRATCH_B_TARG_VCE_INDEX_SHIFT)
     91  1.1  riastrad #define SCRATCH_B_CURR_VCE_INDEX_SHIFT  15
     92  1.1  riastrad #define SCRATCH_B_CURR_VCE_INDEX_MASK   (0x7<<SCRATCH_B_CURR_VCE_INDEX_SHIFT)
     93  1.1  riastrad #define SCRATCH_B_TARG_ACP_INDEX_SHIFT  18
     94  1.1  riastrad #define SCRATCH_B_TARG_ACP_INDEX_MASK   (0x7<<SCRATCH_B_TARG_ACP_INDEX_SHIFT)
     95  1.1  riastrad #define SCRATCH_B_CURR_ACP_INDEX_SHIFT  21
     96  1.1  riastrad #define SCRATCH_B_CURR_ACP_INDEX_MASK   (0x7<<SCRATCH_B_CURR_ACP_INDEX_SHIFT)
     97  1.1  riastrad #define SCRATCH_B_TARG_SAMU_INDEX_SHIFT 24
     98  1.1  riastrad #define SCRATCH_B_TARG_SAMU_INDEX_MASK  (0x7<<SCRATCH_B_TARG_SAMU_INDEX_SHIFT)
     99  1.1  riastrad #define SCRATCH_B_CURR_SAMU_INDEX_SHIFT 27
    100  1.1  riastrad #define SCRATCH_B_CURR_SAMU_INDEX_MASK  (0x7<<SCRATCH_B_CURR_SAMU_INDEX_SHIFT)
    101  1.1  riastrad 
    102  1.1  riastrad 
    103  1.1  riastrad #if defined SMU__DGPU_ONLY
    104  1.1  riastrad #define SMU71_DTE_ITERATIONS 5
    105  1.1  riastrad #define SMU71_DTE_SOURCES 3
    106  1.1  riastrad #define SMU71_DTE_SINKS 1
    107  1.1  riastrad #define SMU71_NUM_CPU_TES 0
    108  1.1  riastrad #define SMU71_NUM_GPU_TES 1
    109  1.1  riastrad #define SMU71_NUM_NON_TES 2
    110  1.1  riastrad 
    111  1.1  riastrad #endif
    112  1.1  riastrad 
    113  1.1  riastrad #if defined SMU__FUSION_ONLY
    114  1.1  riastrad #define SMU7_DTE_ITERATIONS 5
    115  1.1  riastrad #define SMU7_DTE_SOURCES 5
    116  1.1  riastrad #define SMU7_DTE_SINKS 3
    117  1.1  riastrad #define SMU7_NUM_CPU_TES 2
    118  1.1  riastrad #define SMU7_NUM_GPU_TES 1
    119  1.1  riastrad #define SMU7_NUM_NON_TES 2
    120  1.1  riastrad 
    121  1.1  riastrad #endif
    122  1.1  riastrad 
    123  1.1  riastrad struct SMU71_PIDController
    124  1.1  riastrad {
    125  1.1  riastrad     uint32_t Ki;
    126  1.1  riastrad     int32_t LFWindupUpperLim;
    127  1.1  riastrad     int32_t LFWindupLowerLim;
    128  1.1  riastrad     uint32_t StatePrecision;
    129  1.1  riastrad     uint32_t LfPrecision;
    130  1.1  riastrad     uint32_t LfOffset;
    131  1.1  riastrad     uint32_t MaxState;
    132  1.1  riastrad     uint32_t MaxLfFraction;
    133  1.1  riastrad     uint32_t StateShift;
    134  1.1  riastrad };
    135  1.1  riastrad 
    136  1.1  riastrad typedef struct SMU71_PIDController SMU71_PIDController;
    137  1.1  riastrad 
    138  1.1  riastrad struct SMU7_LocalDpmScoreboard
    139  1.1  riastrad {
    140  1.1  riastrad     uint32_t PercentageBusy;
    141  1.1  riastrad 
    142  1.1  riastrad     int32_t  PIDError;
    143  1.1  riastrad     int32_t  PIDIntegral;
    144  1.1  riastrad     int32_t  PIDOutput;
    145  1.1  riastrad 
    146  1.1  riastrad     uint32_t SigmaDeltaAccum;
    147  1.1  riastrad     uint32_t SigmaDeltaOutput;
    148  1.1  riastrad     uint32_t SigmaDeltaLevel;
    149  1.1  riastrad 
    150  1.1  riastrad     uint32_t UtilizationSetpoint;
    151  1.1  riastrad 
    152  1.1  riastrad     uint8_t  TdpClampMode;
    153  1.1  riastrad     uint8_t  TdcClampMode;
    154  1.1  riastrad     uint8_t  ThermClampMode;
    155  1.1  riastrad     uint8_t  VoltageBusy;
    156  1.1  riastrad 
    157  1.1  riastrad     int8_t   CurrLevel;
    158  1.1  riastrad     int8_t   TargLevel;
    159  1.1  riastrad     uint8_t  LevelChangeInProgress;
    160  1.1  riastrad     uint8_t  UpHyst;
    161  1.1  riastrad 
    162  1.1  riastrad     uint8_t  DownHyst;
    163  1.1  riastrad     uint8_t  VoltageDownHyst;
    164  1.1  riastrad     uint8_t  DpmEnable;
    165  1.1  riastrad     uint8_t  DpmRunning;
    166  1.1  riastrad 
    167  1.1  riastrad     uint8_t  DpmForce;
    168  1.1  riastrad     uint8_t  DpmForceLevel;
    169  1.1  riastrad     uint8_t  DisplayWatermark;
    170  1.1  riastrad     uint8_t  McArbIndex;
    171  1.1  riastrad 
    172  1.1  riastrad     uint32_t MinimumPerfSclk;
    173  1.1  riastrad 
    174  1.1  riastrad     uint8_t  AcpiReq;
    175  1.1  riastrad     uint8_t  AcpiAck;
    176  1.1  riastrad     uint8_t  GfxClkSlow;
    177  1.1  riastrad     uint8_t  GpioClampMode;
    178  1.1  riastrad 
    179  1.1  riastrad     uint8_t  FpsFilterWeight;
    180  1.1  riastrad     uint8_t  EnabledLevelsChange;
    181  1.1  riastrad     uint8_t  DteClampMode;
    182  1.1  riastrad     uint8_t  FpsClampMode;
    183  1.1  riastrad 
    184  1.1  riastrad     uint16_t LevelResidencyCounters [SMU71_MAX_LEVELS_GRAPHICS];
    185  1.1  riastrad     uint16_t LevelSwitchCounters [SMU71_MAX_LEVELS_GRAPHICS];
    186  1.1  riastrad 
    187  1.1  riastrad     void     (*TargetStateCalculator)(uint8_t);
    188  1.1  riastrad     void     (*SavedTargetStateCalculator)(uint8_t);
    189  1.1  riastrad 
    190  1.1  riastrad     uint16_t AutoDpmInterval;
    191  1.1  riastrad     uint16_t AutoDpmRange;
    192  1.1  riastrad 
    193  1.1  riastrad     uint8_t  FpsEnabled;
    194  1.1  riastrad     uint8_t  MaxPerfLevel;
    195  1.1  riastrad     uint8_t  AllowLowClkInterruptToHost;
    196  1.1  riastrad     uint8_t  FpsRunning;
    197  1.1  riastrad 
    198  1.1  riastrad     uint32_t MaxAllowedFrequency;
    199  1.1  riastrad };
    200  1.1  riastrad 
    201  1.1  riastrad typedef struct SMU7_LocalDpmScoreboard SMU7_LocalDpmScoreboard;
    202  1.1  riastrad 
    203  1.1  riastrad #define SMU7_MAX_VOLTAGE_CLIENTS 12
    204  1.1  riastrad 
    205  1.1  riastrad struct SMU7_VoltageScoreboard
    206  1.1  riastrad {
    207  1.1  riastrad     uint16_t CurrentVoltage;
    208  1.1  riastrad     uint16_t HighestVoltage;
    209  1.1  riastrad     uint16_t MaxVid;
    210  1.1  riastrad     uint8_t  HighestVidOffset;
    211  1.1  riastrad     uint8_t  CurrentVidOffset;
    212  1.1  riastrad #if defined (SMU__DGPU_ONLY)
    213  1.1  riastrad     uint8_t  CurrentPhases;
    214  1.1  riastrad     uint8_t  HighestPhases;
    215  1.1  riastrad #else
    216  1.1  riastrad     uint8_t  AvsOffset;
    217  1.1  riastrad     uint8_t  AvsOffsetApplied;
    218  1.1  riastrad #endif
    219  1.1  riastrad     uint8_t  ControllerBusy;
    220  1.1  riastrad     uint8_t  CurrentVid;
    221  1.1  riastrad     uint16_t RequestedVoltage[SMU7_MAX_VOLTAGE_CLIENTS];
    222  1.1  riastrad #if defined (SMU__DGPU_ONLY)
    223  1.1  riastrad     uint8_t  RequestedPhases[SMU7_MAX_VOLTAGE_CLIENTS];
    224  1.1  riastrad #endif
    225  1.1  riastrad     uint8_t  EnabledRequest[SMU7_MAX_VOLTAGE_CLIENTS];
    226  1.1  riastrad     uint8_t  TargetIndex;
    227  1.1  riastrad     uint8_t  Delay;
    228  1.1  riastrad     uint8_t  ControllerEnable;
    229  1.1  riastrad     uint8_t  ControllerRunning;
    230  1.1  riastrad     uint16_t CurrentStdVoltageHiSidd;
    231  1.1  riastrad     uint16_t CurrentStdVoltageLoSidd;
    232  1.1  riastrad #if defined (SMU__DGPU_ONLY)
    233  1.1  riastrad     uint16_t RequestedVddci;
    234  1.1  riastrad     uint16_t CurrentVddci;
    235  1.1  riastrad     uint16_t HighestVddci;
    236  1.1  riastrad     uint8_t  CurrentVddciVid;
    237  1.1  riastrad     uint8_t  TargetVddciIndex;
    238  1.1  riastrad #endif
    239  1.1  riastrad };
    240  1.1  riastrad 
    241  1.1  riastrad typedef struct SMU7_VoltageScoreboard SMU7_VoltageScoreboard;
    242  1.1  riastrad 
    243  1.1  riastrad // -------------------------------------------------------------------------------------------------------------------------
    244  1.1  riastrad #define SMU7_MAX_PCIE_LINK_SPEEDS 3 /* 0:Gen1 1:Gen2 2:Gen3 */
    245  1.1  riastrad 
    246  1.1  riastrad struct SMU7_PCIeLinkSpeedScoreboard
    247  1.1  riastrad {
    248  1.1  riastrad     uint8_t     DpmEnable;
    249  1.1  riastrad     uint8_t     DpmRunning;
    250  1.1  riastrad     uint8_t     DpmForce;
    251  1.1  riastrad     uint8_t     DpmForceLevel;
    252  1.1  riastrad 
    253  1.1  riastrad     uint8_t     CurrentLinkSpeed;
    254  1.1  riastrad     uint8_t     EnabledLevelsChange;
    255  1.1  riastrad     uint16_t    AutoDpmInterval;
    256  1.1  riastrad 
    257  1.1  riastrad     uint16_t    AutoDpmRange;
    258  1.1  riastrad     uint16_t    AutoDpmCount;
    259  1.1  riastrad 
    260  1.1  riastrad     uint8_t     DpmMode;
    261  1.1  riastrad     uint8_t     AcpiReq;
    262  1.1  riastrad     uint8_t     AcpiAck;
    263  1.1  riastrad     uint8_t     CurrentLinkLevel;
    264  1.1  riastrad 
    265  1.1  riastrad };
    266  1.1  riastrad 
    267  1.1  riastrad typedef struct SMU7_PCIeLinkSpeedScoreboard SMU7_PCIeLinkSpeedScoreboard;
    268  1.1  riastrad 
    269  1.1  riastrad // -------------------------------------------------------- CAC table ------------------------------------------------------
    270  1.1  riastrad #define SMU7_LKGE_LUT_NUM_OF_TEMP_ENTRIES 16
    271  1.1  riastrad #define SMU7_LKGE_LUT_NUM_OF_VOLT_ENTRIES 16
    272  1.1  riastrad 
    273  1.1  riastrad #define SMU7_SCALE_I  7
    274  1.1  riastrad #define SMU7_SCALE_R 12
    275  1.1  riastrad 
    276  1.1  riastrad struct SMU7_PowerScoreboard
    277  1.1  riastrad {
    278  1.1  riastrad     uint16_t   MinVoltage;
    279  1.1  riastrad     uint16_t   MaxVoltage;
    280  1.1  riastrad 
    281  1.1  riastrad     uint32_t   AvgGpuPower;
    282  1.1  riastrad 
    283  1.1  riastrad     uint16_t   VddcLeakagePower[SID_OPTION_COUNT];
    284  1.1  riastrad     uint16_t   VddcSclkConstantPower[SID_OPTION_COUNT];
    285  1.1  riastrad     uint16_t   VddcSclkDynamicPower[SID_OPTION_COUNT];
    286  1.1  riastrad     uint16_t   VddcNonSclkDynamicPower[SID_OPTION_COUNT];
    287  1.1  riastrad     uint16_t   VddcTotalPower[SID_OPTION_COUNT];
    288  1.1  riastrad     uint16_t   VddcTotalCurrent[SID_OPTION_COUNT];
    289  1.1  riastrad     uint16_t   VddcLoadVoltage[SID_OPTION_COUNT];
    290  1.1  riastrad     uint16_t   VddcNoLoadVoltage[SID_OPTION_COUNT];
    291  1.1  riastrad 
    292  1.1  riastrad     uint16_t   DisplayPhyPower;
    293  1.1  riastrad     uint16_t   PciePhyPower;
    294  1.1  riastrad 
    295  1.1  riastrad     uint16_t   VddciTotalPower;
    296  1.1  riastrad     uint16_t   Vddr1TotalPower;
    297  1.1  riastrad 
    298  1.1  riastrad     uint32_t   RocPower;
    299  1.1  riastrad 
    300  1.1  riastrad     uint32_t   last_power;
    301  1.1  riastrad     uint32_t   enableWinAvg;
    302  1.1  riastrad 
    303  1.1  riastrad     uint32_t   lkg_acc;
    304  1.1  riastrad     uint16_t   VoltLkgeScaler;
    305  1.1  riastrad     uint16_t   TempLkgeScaler;
    306  1.1  riastrad 
    307  1.1  riastrad     uint32_t   uvd_cac_dclk;
    308  1.1  riastrad     uint32_t   uvd_cac_vclk;
    309  1.1  riastrad     uint32_t   vce_cac_eclk;
    310  1.1  riastrad     uint32_t   samu_cac_samclk;
    311  1.1  riastrad     uint32_t   display_cac_dispclk;
    312  1.1  riastrad     uint32_t   acp_cac_aclk;
    313  1.1  riastrad     uint32_t   unb_cac;
    314  1.1  riastrad 
    315  1.1  riastrad     uint32_t   WinTime;
    316  1.1  riastrad 
    317  1.1  riastrad     uint16_t  GpuPwr_MAWt;
    318  1.1  riastrad     uint16_t  FilteredVddcTotalPower;
    319  1.1  riastrad 
    320  1.1  riastrad     uint8_t   CalculationRepeats;
    321  1.1  riastrad     uint8_t   WaterfallUp;
    322  1.1  riastrad     uint8_t   WaterfallDown;
    323  1.1  riastrad     uint8_t   WaterfallLimit;
    324  1.1  riastrad };
    325  1.1  riastrad 
    326  1.1  riastrad typedef struct SMU7_PowerScoreboard SMU7_PowerScoreboard;
    327  1.1  riastrad 
    328  1.1  riastrad // --------------------------------------------------------------------------------------------------
    329  1.1  riastrad 
    330  1.1  riastrad struct SMU7_ThermalScoreboard
    331  1.1  riastrad {
    332  1.1  riastrad    int16_t  GpuLimit;
    333  1.1  riastrad    int16_t  GpuHyst;
    334  1.1  riastrad    uint16_t CurrGnbTemp;
    335  1.1  riastrad    uint16_t FilteredGnbTemp;
    336  1.1  riastrad    uint8_t  ControllerEnable;
    337  1.1  riastrad    uint8_t  ControllerRunning;
    338  1.1  riastrad    uint8_t  WaterfallUp;
    339  1.1  riastrad    uint8_t  WaterfallDown;
    340  1.1  riastrad    uint8_t  WaterfallLimit;
    341  1.1  riastrad    uint8_t  padding[3];
    342  1.1  riastrad };
    343  1.1  riastrad 
    344  1.1  riastrad typedef struct SMU7_ThermalScoreboard SMU7_ThermalScoreboard;
    345  1.1  riastrad 
    346  1.1  riastrad // For FeatureEnables:
    347  1.1  riastrad #define SMU7_SCLK_DPM_CONFIG_MASK                        0x01
    348  1.1  riastrad #define SMU7_VOLTAGE_CONTROLLER_CONFIG_MASK              0x02
    349  1.1  riastrad #define SMU7_THERMAL_CONTROLLER_CONFIG_MASK              0x04
    350  1.1  riastrad #define SMU7_MCLK_DPM_CONFIG_MASK                        0x08
    351  1.1  riastrad #define SMU7_UVD_DPM_CONFIG_MASK                         0x10
    352  1.1  riastrad #define SMU7_VCE_DPM_CONFIG_MASK                         0x20
    353  1.1  riastrad #define SMU7_ACP_DPM_CONFIG_MASK                         0x40
    354  1.1  riastrad #define SMU7_SAMU_DPM_CONFIG_MASK                        0x80
    355  1.1  riastrad #define SMU7_PCIEGEN_DPM_CONFIG_MASK                    0x100
    356  1.1  riastrad 
    357  1.1  riastrad #define SMU7_ACP_MCLK_HANDSHAKE_DISABLE                  0x00000001
    358  1.1  riastrad #define SMU7_ACP_SCLK_HANDSHAKE_DISABLE                  0x00000002
    359  1.1  riastrad #define SMU7_UVD_MCLK_HANDSHAKE_DISABLE                  0x00000100
    360  1.1  riastrad #define SMU7_UVD_SCLK_HANDSHAKE_DISABLE                  0x00000200
    361  1.1  riastrad #define SMU7_VCE_MCLK_HANDSHAKE_DISABLE                  0x00010000
    362  1.1  riastrad #define SMU7_VCE_SCLK_HANDSHAKE_DISABLE                  0x00020000
    363  1.1  riastrad 
    364  1.1  riastrad // All 'soft registers' should be uint32_t.
    365  1.1  riastrad struct SMU71_SoftRegisters
    366  1.1  riastrad {
    367  1.1  riastrad     uint32_t        RefClockFrequency;
    368  1.1  riastrad     uint32_t        PmTimerPeriod;
    369  1.1  riastrad     uint32_t        FeatureEnables;
    370  1.1  riastrad #if defined (SMU__DGPU_ONLY)
    371  1.1  riastrad     uint32_t        PreVBlankGap;
    372  1.1  riastrad     uint32_t        VBlankTimeout;
    373  1.1  riastrad     uint32_t        TrainTimeGap;
    374  1.1  riastrad     uint32_t        MvddSwitchTime;
    375  1.1  riastrad     uint32_t        LongestAcpiTrainTime;
    376  1.1  riastrad     uint32_t        AcpiDelay;
    377  1.1  riastrad     uint32_t        G5TrainTime;
    378  1.1  riastrad     uint32_t        DelayMpllPwron;
    379  1.1  riastrad     uint32_t        VoltageChangeTimeout;
    380  1.1  riastrad #endif
    381  1.1  riastrad     uint32_t        HandshakeDisables;
    382  1.1  riastrad 
    383  1.1  riastrad     uint8_t         DisplayPhy1Config;
    384  1.1  riastrad     uint8_t         DisplayPhy2Config;
    385  1.1  riastrad     uint8_t         DisplayPhy3Config;
    386  1.1  riastrad     uint8_t         DisplayPhy4Config;
    387  1.1  riastrad 
    388  1.1  riastrad     uint8_t         DisplayPhy5Config;
    389  1.1  riastrad     uint8_t         DisplayPhy6Config;
    390  1.1  riastrad     uint8_t         DisplayPhy7Config;
    391  1.1  riastrad     uint8_t         DisplayPhy8Config;
    392  1.1  riastrad 
    393  1.1  riastrad     uint32_t        AverageGraphicsActivity;
    394  1.1  riastrad     uint32_t        AverageMemoryActivity;
    395  1.1  riastrad     uint32_t        AverageGioActivity;
    396  1.1  riastrad 
    397  1.1  riastrad     uint8_t         SClkDpmEnabledLevels;
    398  1.1  riastrad     uint8_t         MClkDpmEnabledLevels;
    399  1.1  riastrad     uint8_t         LClkDpmEnabledLevels;
    400  1.1  riastrad     uint8_t         PCIeDpmEnabledLevels;
    401  1.1  riastrad 
    402  1.1  riastrad     uint32_t        DRAM_LOG_ADDR_H;
    403  1.1  riastrad     uint32_t        DRAM_LOG_ADDR_L;
    404  1.1  riastrad     uint32_t        DRAM_LOG_PHY_ADDR_H;
    405  1.1  riastrad     uint32_t        DRAM_LOG_PHY_ADDR_L;
    406  1.1  riastrad     uint32_t        DRAM_LOG_BUFF_SIZE;
    407  1.1  riastrad     uint32_t        UlvEnterCount;
    408  1.1  riastrad     uint32_t        UlvTime;
    409  1.1  riastrad     uint32_t        UcodeLoadStatus;
    410  1.1  riastrad     uint8_t         DPMFreezeAndForced;
    411  1.1  riastrad     uint8_t         Activity_Weight;
    412  1.1  riastrad     uint8_t         Reserved8[2];
    413  1.1  riastrad     uint32_t        Reserved;
    414  1.1  riastrad };
    415  1.1  riastrad 
    416  1.1  riastrad typedef struct SMU71_SoftRegisters SMU71_SoftRegisters;
    417  1.1  riastrad 
    418  1.1  riastrad struct SMU71_Firmware_Header
    419  1.1  riastrad {
    420  1.1  riastrad     uint32_t Digest[5];
    421  1.1  riastrad     uint32_t Version;
    422  1.1  riastrad     uint32_t HeaderSize;
    423  1.1  riastrad     uint32_t Flags;
    424  1.1  riastrad     uint32_t EntryPoint;
    425  1.1  riastrad     uint32_t CodeSize;
    426  1.1  riastrad     uint32_t ImageSize;
    427  1.1  riastrad 
    428  1.1  riastrad     uint32_t Rtos;
    429  1.1  riastrad     uint32_t SoftRegisters;
    430  1.1  riastrad     uint32_t DpmTable;
    431  1.1  riastrad     uint32_t FanTable;
    432  1.1  riastrad     uint32_t CacConfigTable;
    433  1.1  riastrad     uint32_t CacStatusTable;
    434  1.1  riastrad 
    435  1.1  riastrad     uint32_t mcRegisterTable;
    436  1.1  riastrad 
    437  1.1  riastrad     uint32_t mcArbDramTimingTable;
    438  1.1  riastrad 
    439  1.1  riastrad     uint32_t PmFuseTable;
    440  1.1  riastrad     uint32_t Globals;
    441  1.1  riastrad     uint32_t UvdDpmTable;
    442  1.1  riastrad     uint32_t AcpDpmTable;
    443  1.1  riastrad     uint32_t VceDpmTable;
    444  1.1  riastrad     uint32_t SamuDpmTable;
    445  1.1  riastrad     uint32_t UlvSettings;
    446  1.1  riastrad     uint32_t Reserved[37];
    447  1.1  riastrad     uint32_t Signature;
    448  1.1  riastrad };
    449  1.1  riastrad 
    450  1.1  riastrad typedef struct SMU71_Firmware_Header SMU71_Firmware_Header;
    451  1.1  riastrad 
    452  1.1  riastrad struct SMU7_HystController_Data
    453  1.1  riastrad {
    454  1.1  riastrad     uint8_t waterfall_up;
    455  1.1  riastrad     uint8_t waterfall_down;
    456  1.1  riastrad     uint8_t pstate;
    457  1.1  riastrad     uint8_t clamp_mode;
    458  1.1  riastrad };
    459  1.1  riastrad 
    460  1.1  riastrad typedef struct SMU7_HystController_Data SMU7_HystController_Data;
    461  1.1  riastrad 
    462  1.1  riastrad #define SMU71_FIRMWARE_HEADER_LOCATION 0x20000
    463  1.1  riastrad 
    464  1.1  riastrad enum  DisplayConfig {
    465  1.1  riastrad     PowerDown = 1,
    466  1.1  riastrad     DP54x4,
    467  1.1  riastrad     DP54x2,
    468  1.1  riastrad     DP54x1,
    469  1.1  riastrad     DP27x4,
    470  1.1  riastrad     DP27x2,
    471  1.1  riastrad     DP27x1,
    472  1.1  riastrad     HDMI297,
    473  1.1  riastrad     HDMI162,
    474  1.1  riastrad     LVDS,
    475  1.1  riastrad     DP324x4,
    476  1.1  riastrad     DP324x2,
    477  1.1  riastrad     DP324x1
    478  1.1  riastrad };
    479  1.1  riastrad 
    480  1.1  riastrad //#define SX_BLOCK_COUNT 8
    481  1.1  riastrad //#define MC_BLOCK_COUNT 1
    482  1.1  riastrad //#define CPL_BLOCK_COUNT 27
    483  1.1  riastrad 
    484  1.1  riastrad #if defined SMU__VARIANT__ICELAND
    485  1.1  riastrad   #define SX_BLOCK_COUNT 8
    486  1.1  riastrad   #define MC_BLOCK_COUNT 1
    487  1.1  riastrad   #define CPL_BLOCK_COUNT 29
    488  1.1  riastrad #endif
    489  1.1  riastrad 
    490  1.1  riastrad struct SMU7_Local_Cac {
    491  1.1  riastrad   uint8_t BlockId;
    492  1.1  riastrad   uint8_t SignalId;
    493  1.1  riastrad   uint8_t Threshold;
    494  1.1  riastrad   uint8_t Padding;
    495  1.1  riastrad };
    496  1.1  riastrad 
    497  1.1  riastrad typedef struct SMU7_Local_Cac SMU7_Local_Cac;
    498  1.1  riastrad 
    499  1.1  riastrad struct SMU7_Local_Cac_Table {
    500  1.1  riastrad   SMU7_Local_Cac SxLocalCac[SX_BLOCK_COUNT];
    501  1.1  riastrad   SMU7_Local_Cac CplLocalCac[CPL_BLOCK_COUNT];
    502  1.1  riastrad   SMU7_Local_Cac McLocalCac[MC_BLOCK_COUNT];
    503  1.1  riastrad };
    504  1.1  riastrad 
    505  1.1  riastrad typedef struct SMU7_Local_Cac_Table SMU7_Local_Cac_Table;
    506  1.1  riastrad 
    507  1.1  riastrad #if !defined(SMC_MICROCODE)
    508  1.1  riastrad #pragma pack(pop)
    509  1.1  riastrad #endif
    510  1.1  riastrad 
    511  1.1  riastrad #endif
    512  1.1  riastrad 
    513