1*837d542aSEvan Quan /*
2*837d542aSEvan Quan  * Copyright 2013 Advanced Micro Devices, Inc.
3*837d542aSEvan Quan  *
4*837d542aSEvan Quan  * Permission is hereby granted, free of charge, to any person obtaining a
5*837d542aSEvan Quan  * copy of this software and associated documentation files (the "Software"),
6*837d542aSEvan Quan  * to deal in the Software without restriction, including without limitation
7*837d542aSEvan Quan  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*837d542aSEvan Quan  * and/or sell copies of the Software, and to permit persons to whom the
9*837d542aSEvan Quan  * Software is furnished to do so, subject to the following conditions:
10*837d542aSEvan Quan  *
11*837d542aSEvan Quan  * The above copyright notice and this permission notice shall be included in
12*837d542aSEvan Quan  * all copies or substantial portions of the Software.
13*837d542aSEvan Quan  *
14*837d542aSEvan Quan  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15*837d542aSEvan Quan  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*837d542aSEvan Quan  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17*837d542aSEvan Quan  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18*837d542aSEvan Quan  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19*837d542aSEvan Quan  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20*837d542aSEvan Quan  * OTHER DEALINGS IN THE SOFTWARE.
21*837d542aSEvan Quan  *
22*837d542aSEvan Quan  */
23*837d542aSEvan Quan 
24*837d542aSEvan Quan #ifndef SMU7_DISCRETE_H
25*837d542aSEvan Quan #define SMU7_DISCRETE_H
26*837d542aSEvan Quan 
27*837d542aSEvan Quan #include "smu7.h"
28*837d542aSEvan Quan 
29*837d542aSEvan Quan #pragma pack(push, 1)
30*837d542aSEvan Quan 
31*837d542aSEvan Quan #define SMU7_DTE_ITERATIONS 5
32*837d542aSEvan Quan #define SMU7_DTE_SOURCES 3
33*837d542aSEvan Quan #define SMU7_DTE_SINKS 1
34*837d542aSEvan Quan #define SMU7_NUM_CPU_TES 0
35*837d542aSEvan Quan #define SMU7_NUM_GPU_TES 1
36*837d542aSEvan Quan #define SMU7_NUM_NON_TES 2
37*837d542aSEvan Quan 
38*837d542aSEvan Quan struct SMU7_SoftRegisters
39*837d542aSEvan Quan {
40*837d542aSEvan Quan     uint32_t        RefClockFrequency;
41*837d542aSEvan Quan     uint32_t        PmTimerP;
42*837d542aSEvan Quan     uint32_t        FeatureEnables;
43*837d542aSEvan Quan     uint32_t        PreVBlankGap;
44*837d542aSEvan Quan     uint32_t        VBlankTimeout;
45*837d542aSEvan Quan     uint32_t        TrainTimeGap;
46*837d542aSEvan Quan 
47*837d542aSEvan Quan     uint32_t        MvddSwitchTime;
48*837d542aSEvan Quan     uint32_t        LongestAcpiTrainTime;
49*837d542aSEvan Quan     uint32_t        AcpiDelay;
50*837d542aSEvan Quan     uint32_t        G5TrainTime;
51*837d542aSEvan Quan     uint32_t        DelayMpllPwron;
52*837d542aSEvan Quan     uint32_t        VoltageChangeTimeout;
53*837d542aSEvan Quan     uint32_t        HandshakeDisables;
54*837d542aSEvan Quan 
55*837d542aSEvan Quan     uint8_t         DisplayPhy1Config;
56*837d542aSEvan Quan     uint8_t         DisplayPhy2Config;
57*837d542aSEvan Quan     uint8_t         DisplayPhy3Config;
58*837d542aSEvan Quan     uint8_t         DisplayPhy4Config;
59*837d542aSEvan Quan 
60*837d542aSEvan Quan     uint8_t         DisplayPhy5Config;
61*837d542aSEvan Quan     uint8_t         DisplayPhy6Config;
62*837d542aSEvan Quan     uint8_t         DisplayPhy7Config;
63*837d542aSEvan Quan     uint8_t         DisplayPhy8Config;
64*837d542aSEvan Quan 
65*837d542aSEvan Quan     uint32_t        AverageGraphicsA;
66*837d542aSEvan Quan     uint32_t        AverageMemoryA;
67*837d542aSEvan Quan     uint32_t        AverageGioA;
68*837d542aSEvan Quan 
69*837d542aSEvan Quan     uint8_t         SClkDpmEnabledLevels;
70*837d542aSEvan Quan     uint8_t         MClkDpmEnabledLevels;
71*837d542aSEvan Quan     uint8_t         LClkDpmEnabledLevels;
72*837d542aSEvan Quan     uint8_t         PCIeDpmEnabledLevels;
73*837d542aSEvan Quan 
74*837d542aSEvan Quan     uint8_t         UVDDpmEnabledLevels;
75*837d542aSEvan Quan     uint8_t         SAMUDpmEnabledLevels;
76*837d542aSEvan Quan     uint8_t         ACPDpmEnabledLevels;
77*837d542aSEvan Quan     uint8_t         VCEDpmEnabledLevels;
78*837d542aSEvan Quan 
79*837d542aSEvan Quan     uint32_t        DRAM_LOG_ADDR_H;
80*837d542aSEvan Quan     uint32_t        DRAM_LOG_ADDR_L;
81*837d542aSEvan Quan     uint32_t        DRAM_LOG_PHY_ADDR_H;
82*837d542aSEvan Quan     uint32_t        DRAM_LOG_PHY_ADDR_L;
83*837d542aSEvan Quan     uint32_t        DRAM_LOG_BUFF_SIZE;
84*837d542aSEvan Quan     uint32_t        UlvEnterC;
85*837d542aSEvan Quan     uint32_t        UlvTime;
86*837d542aSEvan Quan     uint32_t        Reserved[3];
87*837d542aSEvan Quan 
88*837d542aSEvan Quan };
89*837d542aSEvan Quan 
90*837d542aSEvan Quan typedef struct SMU7_SoftRegisters SMU7_SoftRegisters;
91*837d542aSEvan Quan 
92*837d542aSEvan Quan struct SMU7_Discrete_VoltageLevel
93*837d542aSEvan Quan {
94*837d542aSEvan Quan     uint16_t    Voltage;
95*837d542aSEvan Quan     uint16_t    StdVoltageHiSidd;
96*837d542aSEvan Quan     uint16_t    StdVoltageLoSidd;
97*837d542aSEvan Quan     uint8_t     Smio;
98*837d542aSEvan Quan     uint8_t     padding;
99*837d542aSEvan Quan };
100*837d542aSEvan Quan 
101*837d542aSEvan Quan typedef struct SMU7_Discrete_VoltageLevel SMU7_Discrete_VoltageLevel;
102*837d542aSEvan Quan 
103*837d542aSEvan Quan struct SMU7_Discrete_GraphicsLevel
104*837d542aSEvan Quan {
105*837d542aSEvan Quan     uint32_t    Flags;
106*837d542aSEvan Quan     uint32_t    MinVddc;
107*837d542aSEvan Quan     uint32_t    MinVddcPhases;
108*837d542aSEvan Quan 
109*837d542aSEvan Quan     uint32_t    SclkFrequency;
110*837d542aSEvan Quan 
111*837d542aSEvan Quan     uint8_t     padding1[2];
112*837d542aSEvan Quan     uint16_t    ActivityLevel;
113*837d542aSEvan Quan 
114*837d542aSEvan Quan     uint32_t    CgSpllFuncCntl3;
115*837d542aSEvan Quan     uint32_t    CgSpllFuncCntl4;
116*837d542aSEvan Quan     uint32_t    SpllSpreadSpectrum;
117*837d542aSEvan Quan     uint32_t    SpllSpreadSpectrum2;
118*837d542aSEvan Quan     uint32_t    CcPwrDynRm;
119*837d542aSEvan Quan     uint32_t    CcPwrDynRm1;
120*837d542aSEvan Quan     uint8_t     SclkDid;
121*837d542aSEvan Quan     uint8_t     DisplayWatermark;
122*837d542aSEvan Quan     uint8_t     EnabledForActivity;
123*837d542aSEvan Quan     uint8_t     EnabledForThrottle;
124*837d542aSEvan Quan     uint8_t     UpH;
125*837d542aSEvan Quan     uint8_t     DownH;
126*837d542aSEvan Quan     uint8_t     VoltageDownH;
127*837d542aSEvan Quan     uint8_t     PowerThrottle;
128*837d542aSEvan Quan     uint8_t     DeepSleepDivId;
129*837d542aSEvan Quan     uint8_t     padding[3];
130*837d542aSEvan Quan };
131*837d542aSEvan Quan 
132*837d542aSEvan Quan typedef struct SMU7_Discrete_GraphicsLevel SMU7_Discrete_GraphicsLevel;
133*837d542aSEvan Quan 
134*837d542aSEvan Quan struct SMU7_Discrete_ACPILevel
135*837d542aSEvan Quan {
136*837d542aSEvan Quan     uint32_t    Flags;
137*837d542aSEvan Quan     uint32_t    MinVddc;
138*837d542aSEvan Quan     uint32_t    MinVddcPhases;
139*837d542aSEvan Quan     uint32_t    SclkFrequency;
140*837d542aSEvan Quan     uint8_t     SclkDid;
141*837d542aSEvan Quan     uint8_t     DisplayWatermark;
142*837d542aSEvan Quan     uint8_t     DeepSleepDivId;
143*837d542aSEvan Quan     uint8_t     padding;
144*837d542aSEvan Quan     uint32_t    CgSpllFuncCntl;
145*837d542aSEvan Quan     uint32_t    CgSpllFuncCntl2;
146*837d542aSEvan Quan     uint32_t    CgSpllFuncCntl3;
147*837d542aSEvan Quan     uint32_t    CgSpllFuncCntl4;
148*837d542aSEvan Quan     uint32_t    SpllSpreadSpectrum;
149*837d542aSEvan Quan     uint32_t    SpllSpreadSpectrum2;
150*837d542aSEvan Quan     uint32_t    CcPwrDynRm;
151*837d542aSEvan Quan     uint32_t    CcPwrDynRm1;
152*837d542aSEvan Quan };
153*837d542aSEvan Quan 
154*837d542aSEvan Quan typedef struct SMU7_Discrete_ACPILevel SMU7_Discrete_ACPILevel;
155*837d542aSEvan Quan 
156*837d542aSEvan Quan struct SMU7_Discrete_Ulv
157*837d542aSEvan Quan {
158*837d542aSEvan Quan     uint32_t    CcPwrDynRm;
159*837d542aSEvan Quan     uint32_t    CcPwrDynRm1;
160*837d542aSEvan Quan     uint16_t    VddcOffset;
161*837d542aSEvan Quan     uint8_t     VddcOffsetVid;
162*837d542aSEvan Quan     uint8_t     VddcPhase;
163*837d542aSEvan Quan     uint32_t    Reserved;
164*837d542aSEvan Quan };
165*837d542aSEvan Quan 
166*837d542aSEvan Quan typedef struct SMU7_Discrete_Ulv SMU7_Discrete_Ulv;
167*837d542aSEvan Quan 
168*837d542aSEvan Quan struct SMU7_Discrete_MemoryLevel
169*837d542aSEvan Quan {
170*837d542aSEvan Quan     uint32_t    MinVddc;
171*837d542aSEvan Quan     uint32_t    MinVddcPhases;
172*837d542aSEvan Quan     uint32_t    MinVddci;
173*837d542aSEvan Quan     uint32_t    MinMvdd;
174*837d542aSEvan Quan 
175*837d542aSEvan Quan     uint32_t    MclkFrequency;
176*837d542aSEvan Quan 
177*837d542aSEvan Quan     uint8_t     EdcReadEnable;
178*837d542aSEvan Quan     uint8_t     EdcWriteEnable;
179*837d542aSEvan Quan     uint8_t     RttEnable;
180*837d542aSEvan Quan     uint8_t     StutterEnable;
181*837d542aSEvan Quan 
182*837d542aSEvan Quan     uint8_t     StrobeEnable;
183*837d542aSEvan Quan     uint8_t     StrobeRatio;
184*837d542aSEvan Quan     uint8_t     EnabledForThrottle;
185*837d542aSEvan Quan     uint8_t     EnabledForActivity;
186*837d542aSEvan Quan 
187*837d542aSEvan Quan     uint8_t     UpH;
188*837d542aSEvan Quan     uint8_t     DownH;
189*837d542aSEvan Quan     uint8_t     VoltageDownH;
190*837d542aSEvan Quan     uint8_t     padding;
191*837d542aSEvan Quan 
192*837d542aSEvan Quan     uint16_t    ActivityLevel;
193*837d542aSEvan Quan     uint8_t     DisplayWatermark;
194*837d542aSEvan Quan     uint8_t     padding1;
195*837d542aSEvan Quan 
196*837d542aSEvan Quan     uint32_t    MpllFuncCntl;
197*837d542aSEvan Quan     uint32_t    MpllFuncCntl_1;
198*837d542aSEvan Quan     uint32_t    MpllFuncCntl_2;
199*837d542aSEvan Quan     uint32_t    MpllAdFuncCntl;
200*837d542aSEvan Quan     uint32_t    MpllDqFuncCntl;
201*837d542aSEvan Quan     uint32_t    MclkPwrmgtCntl;
202*837d542aSEvan Quan     uint32_t    DllCntl;
203*837d542aSEvan Quan     uint32_t    MpllSs1;
204*837d542aSEvan Quan     uint32_t    MpllSs2;
205*837d542aSEvan Quan };
206*837d542aSEvan Quan 
207*837d542aSEvan Quan typedef struct SMU7_Discrete_MemoryLevel SMU7_Discrete_MemoryLevel;
208*837d542aSEvan Quan 
209*837d542aSEvan Quan struct SMU7_Discrete_LinkLevel
210*837d542aSEvan Quan {
211*837d542aSEvan Quan     uint8_t     PcieGenSpeed;
212*837d542aSEvan Quan     uint8_t     PcieLaneCount;
213*837d542aSEvan Quan     uint8_t     EnabledForActivity;
214*837d542aSEvan Quan     uint8_t     Padding;
215*837d542aSEvan Quan     uint32_t    DownT;
216*837d542aSEvan Quan     uint32_t    UpT;
217*837d542aSEvan Quan     uint32_t    Reserved;
218*837d542aSEvan Quan };
219*837d542aSEvan Quan 
220*837d542aSEvan Quan typedef struct SMU7_Discrete_LinkLevel SMU7_Discrete_LinkLevel;
221*837d542aSEvan Quan 
222*837d542aSEvan Quan 
223*837d542aSEvan Quan struct SMU7_Discrete_MCArbDramTimingTableEntry
224*837d542aSEvan Quan {
225*837d542aSEvan Quan     uint32_t McArbDramTiming;
226*837d542aSEvan Quan     uint32_t McArbDramTiming2;
227*837d542aSEvan Quan     uint8_t  McArbBurstTime;
228*837d542aSEvan Quan     uint8_t  padding[3];
229*837d542aSEvan Quan };
230*837d542aSEvan Quan 
231*837d542aSEvan Quan typedef struct SMU7_Discrete_MCArbDramTimingTableEntry SMU7_Discrete_MCArbDramTimingTableEntry;
232*837d542aSEvan Quan 
233*837d542aSEvan Quan struct SMU7_Discrete_MCArbDramTimingTable
234*837d542aSEvan Quan {
235*837d542aSEvan Quan     SMU7_Discrete_MCArbDramTimingTableEntry entries[SMU__NUM_SCLK_DPM_STATE][SMU__NUM_MCLK_DPM_LEVELS];
236*837d542aSEvan Quan };
237*837d542aSEvan Quan 
238*837d542aSEvan Quan typedef struct SMU7_Discrete_MCArbDramTimingTable SMU7_Discrete_MCArbDramTimingTable;
239*837d542aSEvan Quan 
240*837d542aSEvan Quan struct SMU7_Discrete_UvdLevel
241*837d542aSEvan Quan {
242*837d542aSEvan Quan     uint32_t VclkFrequency;
243*837d542aSEvan Quan     uint32_t DclkFrequency;
244*837d542aSEvan Quan     uint16_t MinVddc;
245*837d542aSEvan Quan     uint8_t  MinVddcPhases;
246*837d542aSEvan Quan     uint8_t  VclkDivider;
247*837d542aSEvan Quan     uint8_t  DclkDivider;
248*837d542aSEvan Quan     uint8_t  padding[3];
249*837d542aSEvan Quan };
250*837d542aSEvan Quan 
251*837d542aSEvan Quan typedef struct SMU7_Discrete_UvdLevel SMU7_Discrete_UvdLevel;
252*837d542aSEvan Quan 
253*837d542aSEvan Quan struct SMU7_Discrete_ExtClkLevel
254*837d542aSEvan Quan {
255*837d542aSEvan Quan     uint32_t Frequency;
256*837d542aSEvan Quan     uint16_t MinVoltage;
257*837d542aSEvan Quan     uint8_t  MinPhases;
258*837d542aSEvan Quan     uint8_t  Divider;
259*837d542aSEvan Quan };
260*837d542aSEvan Quan 
261*837d542aSEvan Quan typedef struct SMU7_Discrete_ExtClkLevel SMU7_Discrete_ExtClkLevel;
262*837d542aSEvan Quan 
263*837d542aSEvan Quan struct SMU7_Discrete_StateInfo
264*837d542aSEvan Quan {
265*837d542aSEvan Quan     uint32_t SclkFrequency;
266*837d542aSEvan Quan     uint32_t MclkFrequency;
267*837d542aSEvan Quan     uint32_t VclkFrequency;
268*837d542aSEvan Quan     uint32_t DclkFrequency;
269*837d542aSEvan Quan     uint32_t SamclkFrequency;
270*837d542aSEvan Quan     uint32_t AclkFrequency;
271*837d542aSEvan Quan     uint32_t EclkFrequency;
272*837d542aSEvan Quan     uint16_t MvddVoltage;
273*837d542aSEvan Quan     uint16_t padding16;
274*837d542aSEvan Quan     uint8_t  DisplayWatermark;
275*837d542aSEvan Quan     uint8_t  McArbIndex;
276*837d542aSEvan Quan     uint8_t  McRegIndex;
277*837d542aSEvan Quan     uint8_t  SeqIndex;
278*837d542aSEvan Quan     uint8_t  SclkDid;
279*837d542aSEvan Quan     int8_t   SclkIndex;
280*837d542aSEvan Quan     int8_t   MclkIndex;
281*837d542aSEvan Quan     uint8_t  PCIeGen;
282*837d542aSEvan Quan 
283*837d542aSEvan Quan };
284*837d542aSEvan Quan 
285*837d542aSEvan Quan typedef struct SMU7_Discrete_StateInfo SMU7_Discrete_StateInfo;
286*837d542aSEvan Quan 
287*837d542aSEvan Quan 
288*837d542aSEvan Quan struct SMU7_Discrete_DpmTable
289*837d542aSEvan Quan {
290*837d542aSEvan Quan     SMU7_PIDController                  GraphicsPIDController;
291*837d542aSEvan Quan     SMU7_PIDController                  MemoryPIDController;
292*837d542aSEvan Quan     SMU7_PIDController                  LinkPIDController;
293*837d542aSEvan Quan 
294*837d542aSEvan Quan     uint32_t                            SystemFlags;
295*837d542aSEvan Quan 
296*837d542aSEvan Quan 
297*837d542aSEvan Quan     uint32_t                            SmioMaskVddcVid;
298*837d542aSEvan Quan     uint32_t                            SmioMaskVddcPhase;
299*837d542aSEvan Quan     uint32_t                            SmioMaskVddciVid;
300*837d542aSEvan Quan     uint32_t                            SmioMaskMvddVid;
301*837d542aSEvan Quan 
302*837d542aSEvan Quan     uint32_t                            VddcLevelCount;
303*837d542aSEvan Quan     uint32_t                            VddciLevelCount;
304*837d542aSEvan Quan     uint32_t                            MvddLevelCount;
305*837d542aSEvan Quan 
306*837d542aSEvan Quan     SMU7_Discrete_VoltageLevel          VddcLevel               [SMU7_MAX_LEVELS_VDDC];
307*837d542aSEvan Quan //    SMU7_Discrete_VoltageLevel          VddcStandardReference   [SMU7_MAX_LEVELS_VDDC];
308*837d542aSEvan Quan     SMU7_Discrete_VoltageLevel          VddciLevel              [SMU7_MAX_LEVELS_VDDCI];
309*837d542aSEvan Quan     SMU7_Discrete_VoltageLevel          MvddLevel               [SMU7_MAX_LEVELS_MVDD];
310*837d542aSEvan Quan 
311*837d542aSEvan Quan     uint8_t                             GraphicsDpmLevelCount;
312*837d542aSEvan Quan     uint8_t                             MemoryDpmLevelCount;
313*837d542aSEvan Quan     uint8_t                             LinkLevelCount;
314*837d542aSEvan Quan     uint8_t                             UvdLevelCount;
315*837d542aSEvan Quan     uint8_t                             VceLevelCount;
316*837d542aSEvan Quan     uint8_t                             AcpLevelCount;
317*837d542aSEvan Quan     uint8_t                             SamuLevelCount;
318*837d542aSEvan Quan     uint8_t                             MasterDeepSleepControl;
319*837d542aSEvan Quan     uint32_t                            VRConfig;
320*837d542aSEvan Quan     uint32_t                            Reserved[4];
321*837d542aSEvan Quan //    uint32_t                            SamuDefaultLevel;
322*837d542aSEvan Quan 
323*837d542aSEvan Quan     SMU7_Discrete_GraphicsLevel         GraphicsLevel           [SMU7_MAX_LEVELS_GRAPHICS];
324*837d542aSEvan Quan     SMU7_Discrete_MemoryLevel           MemoryACPILevel;
325*837d542aSEvan Quan     SMU7_Discrete_MemoryLevel           MemoryLevel             [SMU7_MAX_LEVELS_MEMORY];
326*837d542aSEvan Quan     SMU7_Discrete_LinkLevel             LinkLevel               [SMU7_MAX_LEVELS_LINK];
327*837d542aSEvan Quan     SMU7_Discrete_ACPILevel             ACPILevel;
328*837d542aSEvan Quan     SMU7_Discrete_UvdLevel              UvdLevel                [SMU7_MAX_LEVELS_UVD];
329*837d542aSEvan Quan     SMU7_Discrete_ExtClkLevel           VceLevel                [SMU7_MAX_LEVELS_VCE];
330*837d542aSEvan Quan     SMU7_Discrete_ExtClkLevel           AcpLevel                [SMU7_MAX_LEVELS_ACP];
331*837d542aSEvan Quan     SMU7_Discrete_ExtClkLevel           SamuLevel               [SMU7_MAX_LEVELS_SAMU];
332*837d542aSEvan Quan     SMU7_Discrete_Ulv                   Ulv;
333*837d542aSEvan Quan 
334*837d542aSEvan Quan     uint32_t                            SclkStepSize;
335*837d542aSEvan Quan     uint32_t                            Smio                    [SMU7_MAX_ENTRIES_SMIO];
336*837d542aSEvan Quan 
337*837d542aSEvan Quan     uint8_t                             UvdBootLevel;
338*837d542aSEvan Quan     uint8_t                             VceBootLevel;
339*837d542aSEvan Quan     uint8_t                             AcpBootLevel;
340*837d542aSEvan Quan     uint8_t                             SamuBootLevel;
341*837d542aSEvan Quan 
342*837d542aSEvan Quan     uint8_t                             UVDInterval;
343*837d542aSEvan Quan     uint8_t                             VCEInterval;
344*837d542aSEvan Quan     uint8_t                             ACPInterval;
345*837d542aSEvan Quan     uint8_t                             SAMUInterval;
346*837d542aSEvan Quan 
347*837d542aSEvan Quan     uint8_t                             GraphicsBootLevel;
348*837d542aSEvan Quan     uint8_t                             GraphicsVoltageChangeEnable;
349*837d542aSEvan Quan     uint8_t                             GraphicsThermThrottleEnable;
350*837d542aSEvan Quan     uint8_t                             GraphicsInterval;
351*837d542aSEvan Quan 
352*837d542aSEvan Quan     uint8_t                             VoltageInterval;
353*837d542aSEvan Quan     uint8_t                             ThermalInterval;
354*837d542aSEvan Quan     uint16_t                            TemperatureLimitHigh;
355*837d542aSEvan Quan 
356*837d542aSEvan Quan     uint16_t                            TemperatureLimitLow;
357*837d542aSEvan Quan     uint8_t                             MemoryBootLevel;
358*837d542aSEvan Quan     uint8_t                             MemoryVoltageChangeEnable;
359*837d542aSEvan Quan 
360*837d542aSEvan Quan     uint8_t                             MemoryInterval;
361*837d542aSEvan Quan     uint8_t                             MemoryThermThrottleEnable;
362*837d542aSEvan Quan     uint16_t                            VddcVddciDelta;
363*837d542aSEvan Quan 
364*837d542aSEvan Quan     uint16_t                            VoltageResponseTime;
365*837d542aSEvan Quan     uint16_t                            PhaseResponseTime;
366*837d542aSEvan Quan 
367*837d542aSEvan Quan     uint8_t                             PCIeBootLinkLevel;
368*837d542aSEvan Quan     uint8_t                             PCIeGenInterval;
369*837d542aSEvan Quan     uint8_t                             DTEInterval;
370*837d542aSEvan Quan     uint8_t                             DTEMode;
371*837d542aSEvan Quan 
372*837d542aSEvan Quan     uint8_t                             SVI2Enable;
373*837d542aSEvan Quan     uint8_t                             VRHotGpio;
374*837d542aSEvan Quan     uint8_t                             AcDcGpio;
375*837d542aSEvan Quan     uint8_t                             ThermGpio;
376*837d542aSEvan Quan 
377*837d542aSEvan Quan     uint16_t                            PPM_PkgPwrLimit;
378*837d542aSEvan Quan     uint16_t                            PPM_TemperatureLimit;
379*837d542aSEvan Quan 
380*837d542aSEvan Quan     uint16_t                            DefaultTdp;
381*837d542aSEvan Quan     uint16_t                            TargetTdp;
382*837d542aSEvan Quan 
383*837d542aSEvan Quan     uint16_t                            FpsHighT;
384*837d542aSEvan Quan     uint16_t                            FpsLowT;
385*837d542aSEvan Quan 
386*837d542aSEvan Quan     uint16_t                            BAPMTI_R  [SMU7_DTE_ITERATIONS][SMU7_DTE_SOURCES][SMU7_DTE_SINKS];
387*837d542aSEvan Quan     uint16_t                            BAPMTI_RC [SMU7_DTE_ITERATIONS][SMU7_DTE_SOURCES][SMU7_DTE_SINKS];
388*837d542aSEvan Quan 
389*837d542aSEvan Quan     uint8_t                             DTEAmbientTempBase;
390*837d542aSEvan Quan     uint8_t                             DTETjOffset;
391*837d542aSEvan Quan     uint8_t                             GpuTjMax;
392*837d542aSEvan Quan     uint8_t                             GpuTjHyst;
393*837d542aSEvan Quan 
394*837d542aSEvan Quan     uint16_t                            BootVddc;
395*837d542aSEvan Quan     uint16_t                            BootVddci;
396*837d542aSEvan Quan 
397*837d542aSEvan Quan     uint16_t                            BootMVdd;
398*837d542aSEvan Quan     uint16_t                            padding;
399*837d542aSEvan Quan 
400*837d542aSEvan Quan     uint32_t                            BAPM_TEMP_GRADIENT;
401*837d542aSEvan Quan 
402*837d542aSEvan Quan     uint32_t                            LowSclkInterruptT;
403*837d542aSEvan Quan };
404*837d542aSEvan Quan 
405*837d542aSEvan Quan typedef struct SMU7_Discrete_DpmTable SMU7_Discrete_DpmTable;
406*837d542aSEvan Quan 
407*837d542aSEvan Quan #define SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE 16
408*837d542aSEvan Quan #define SMU7_DISCRETE_MC_REGISTER_ARRAY_SET_COUNT SMU7_MAX_LEVELS_MEMORY
409*837d542aSEvan Quan 
410*837d542aSEvan Quan struct SMU7_Discrete_MCRegisterAddress
411*837d542aSEvan Quan {
412*837d542aSEvan Quan     uint16_t s0;
413*837d542aSEvan Quan     uint16_t s1;
414*837d542aSEvan Quan };
415*837d542aSEvan Quan 
416*837d542aSEvan Quan typedef struct SMU7_Discrete_MCRegisterAddress SMU7_Discrete_MCRegisterAddress;
417*837d542aSEvan Quan 
418*837d542aSEvan Quan struct SMU7_Discrete_MCRegisterSet
419*837d542aSEvan Quan {
420*837d542aSEvan Quan     uint32_t value[SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE];
421*837d542aSEvan Quan };
422*837d542aSEvan Quan 
423*837d542aSEvan Quan typedef struct SMU7_Discrete_MCRegisterSet SMU7_Discrete_MCRegisterSet;
424*837d542aSEvan Quan 
425*837d542aSEvan Quan struct SMU7_Discrete_MCRegisters
426*837d542aSEvan Quan {
427*837d542aSEvan Quan     uint8_t                             last;
428*837d542aSEvan Quan     uint8_t                             reserved[3];
429*837d542aSEvan Quan     SMU7_Discrete_MCRegisterAddress     address[SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE];
430*837d542aSEvan Quan     SMU7_Discrete_MCRegisterSet         data[SMU7_DISCRETE_MC_REGISTER_ARRAY_SET_COUNT];
431*837d542aSEvan Quan };
432*837d542aSEvan Quan 
433*837d542aSEvan Quan typedef struct SMU7_Discrete_MCRegisters SMU7_Discrete_MCRegisters;
434*837d542aSEvan Quan 
435*837d542aSEvan Quan struct SMU7_Discrete_FanTable
436*837d542aSEvan Quan {
437*837d542aSEvan Quan 	uint16_t FdoMode;
438*837d542aSEvan Quan 	int16_t  TempMin;
439*837d542aSEvan Quan 	int16_t  TempMed;
440*837d542aSEvan Quan 	int16_t  TempMax;
441*837d542aSEvan Quan 	int16_t  Slope1;
442*837d542aSEvan Quan 	int16_t  Slope2;
443*837d542aSEvan Quan 	int16_t  FdoMin;
444*837d542aSEvan Quan 	int16_t  HystUp;
445*837d542aSEvan Quan 	int16_t  HystDown;
446*837d542aSEvan Quan 	int16_t  HystSlope;
447*837d542aSEvan Quan 	int16_t  TempRespLim;
448*837d542aSEvan Quan 	int16_t  TempCurr;
449*837d542aSEvan Quan 	int16_t  SlopeCurr;
450*837d542aSEvan Quan 	int16_t  PwmCurr;
451*837d542aSEvan Quan 	uint32_t RefreshPeriod;
452*837d542aSEvan Quan 	int16_t  FdoMax;
453*837d542aSEvan Quan 	uint8_t  TempSrc;
454*837d542aSEvan Quan 	int8_t   Padding;
455*837d542aSEvan Quan };
456*837d542aSEvan Quan 
457*837d542aSEvan Quan typedef struct SMU7_Discrete_FanTable SMU7_Discrete_FanTable;
458*837d542aSEvan Quan 
459*837d542aSEvan Quan 
460*837d542aSEvan Quan struct SMU7_Discrete_PmFuses {
461*837d542aSEvan Quan   // dw0-dw1
462*837d542aSEvan Quan   uint8_t BapmVddCVidHiSidd[8];
463*837d542aSEvan Quan 
464*837d542aSEvan Quan   // dw2-dw3
465*837d542aSEvan Quan   uint8_t BapmVddCVidLoSidd[8];
466*837d542aSEvan Quan 
467*837d542aSEvan Quan   // dw4-dw5
468*837d542aSEvan Quan   uint8_t VddCVid[8];
469*837d542aSEvan Quan 
470*837d542aSEvan Quan   // dw6
471*837d542aSEvan Quan   uint8_t SviLoadLineEn;
472*837d542aSEvan Quan   uint8_t SviLoadLineVddC;
473*837d542aSEvan Quan   uint8_t SviLoadLineTrimVddC;
474*837d542aSEvan Quan   uint8_t SviLoadLineOffsetVddC;
475*837d542aSEvan Quan 
476*837d542aSEvan Quan   // dw7
477*837d542aSEvan Quan   uint16_t TDC_VDDC_PkgLimit;
478*837d542aSEvan Quan   uint8_t TDC_VDDC_ThrottleReleaseLimitPerc;
479*837d542aSEvan Quan   uint8_t TDC_MAWt;
480*837d542aSEvan Quan 
481*837d542aSEvan Quan   // dw8
482*837d542aSEvan Quan   uint8_t TdcWaterfallCtl;
483*837d542aSEvan Quan   uint8_t LPMLTemperatureMin;
484*837d542aSEvan Quan   uint8_t LPMLTemperatureMax;
485*837d542aSEvan Quan   uint8_t Reserved;
486*837d542aSEvan Quan 
487*837d542aSEvan Quan   // dw9-dw10
488*837d542aSEvan Quan   uint8_t BapmVddCVidHiSidd2[8];
489*837d542aSEvan Quan 
490*837d542aSEvan Quan   // dw11-dw12
491*837d542aSEvan Quan   int16_t FuzzyFan_ErrorSetDelta;
492*837d542aSEvan Quan   int16_t FuzzyFan_ErrorRateSetDelta;
493*837d542aSEvan Quan   int16_t FuzzyFan_PwmSetDelta;
494*837d542aSEvan Quan   uint16_t CalcMeasPowerBlend;
495*837d542aSEvan Quan 
496*837d542aSEvan Quan   // dw13-dw16
497*837d542aSEvan Quan   uint8_t GnbLPML[16];
498*837d542aSEvan Quan 
499*837d542aSEvan Quan   // dw17
500*837d542aSEvan Quan   uint8_t GnbLPMLMaxVid;
501*837d542aSEvan Quan   uint8_t GnbLPMLMinVid;
502*837d542aSEvan Quan   uint8_t Reserved1[2];
503*837d542aSEvan Quan 
504*837d542aSEvan Quan   // dw18
505*837d542aSEvan Quan   uint16_t BapmVddCBaseLeakageHiSidd;
506*837d542aSEvan Quan   uint16_t BapmVddCBaseLeakageLoSidd;
507*837d542aSEvan Quan };
508*837d542aSEvan Quan 
509*837d542aSEvan Quan typedef struct SMU7_Discrete_PmFuses SMU7_Discrete_PmFuses;
510*837d542aSEvan Quan 
511*837d542aSEvan Quan 
512*837d542aSEvan Quan #pragma pack(pop)
513*837d542aSEvan Quan 
514*837d542aSEvan Quan #endif
515*837d542aSEvan Quan 
516