1*b843c749SSergey Zigachev /*
2*b843c749SSergey Zigachev  * Copyright 2016 Advanced Micro Devices, Inc.
3*b843c749SSergey Zigachev  *
4*b843c749SSergey Zigachev  * Permission is hereby granted, free of charge, to any person obtaining a
5*b843c749SSergey Zigachev  * copy of this software and associated documentation files (the "Software"),
6*b843c749SSergey Zigachev  * to deal in the Software without restriction, including without limitation
7*b843c749SSergey Zigachev  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*b843c749SSergey Zigachev  * and/or sell copies of the Software, and to permit persons to whom the
9*b843c749SSergey Zigachev  * Software is furnished to do so, subject to the following conditions:
10*b843c749SSergey Zigachev  *
11*b843c749SSergey Zigachev  * The above copyright notice and this permission notice shall be included in
12*b843c749SSergey Zigachev  * all copies or substantial portions of the Software.
13*b843c749SSergey Zigachev  *
14*b843c749SSergey Zigachev  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15*b843c749SSergey Zigachev  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*b843c749SSergey Zigachev  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17*b843c749SSergey Zigachev  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18*b843c749SSergey Zigachev  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19*b843c749SSergey Zigachev  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20*b843c749SSergey Zigachev  * OTHER DEALINGS IN THE SOFTWARE.
21*b843c749SSergey Zigachev  *
22*b843c749SSergey Zigachev  */
23*b843c749SSergey Zigachev #ifndef _VEGA10_PPTABLE_H_
24*b843c749SSergey Zigachev #define _VEGA10_PPTABLE_H_
25*b843c749SSergey Zigachev 
26*b843c749SSergey Zigachev #pragma pack(push, 1)
27*b843c749SSergey Zigachev 
28*b843c749SSergey Zigachev #define ATOM_VEGA10_PP_FANPARAMETERS_TACHOMETER_PULSES_PER_REVOLUTION_MASK 0x0f
29*b843c749SSergey Zigachev #define ATOM_VEGA10_PP_FANPARAMETERS_NOFAN                                 0x80
30*b843c749SSergey Zigachev 
31*b843c749SSergey Zigachev #define ATOM_VEGA10_PP_THERMALCONTROLLER_NONE      0
32*b843c749SSergey Zigachev #define ATOM_VEGA10_PP_THERMALCONTROLLER_LM96163   17
33*b843c749SSergey Zigachev #define ATOM_VEGA10_PP_THERMALCONTROLLER_VEGA10    24
34*b843c749SSergey Zigachev 
35*b843c749SSergey Zigachev #define ATOM_VEGA10_PP_THERMALCONTROLLER_ADT7473_WITH_INTERNAL   0x89
36*b843c749SSergey Zigachev #define ATOM_VEGA10_PP_THERMALCONTROLLER_EMC2103_WITH_INTERNAL   0x8D
37*b843c749SSergey Zigachev 
38*b843c749SSergey Zigachev #define ATOM_VEGA10_PP_PLATFORM_CAP_POWERPLAY                   0x1
39*b843c749SSergey Zigachev #define ATOM_VEGA10_PP_PLATFORM_CAP_SBIOSPOWERSOURCE            0x2
40*b843c749SSergey Zigachev #define ATOM_VEGA10_PP_PLATFORM_CAP_HARDWAREDC                  0x4
41*b843c749SSergey Zigachev #define ATOM_VEGA10_PP_PLATFORM_CAP_BACO                        0x8
42*b843c749SSergey Zigachev #define ATOM_VEGA10_PP_PLATFORM_COMBINE_PCC_WITH_THERMAL_SIGNAL 0x10
43*b843c749SSergey Zigachev 
44*b843c749SSergey Zigachev 
45*b843c749SSergey Zigachev /* ATOM_PPLIB_NONCLOCK_INFO::usClassification */
46*b843c749SSergey Zigachev #define ATOM_PPLIB_CLASSIFICATION_UI_MASK               0x0007
47*b843c749SSergey Zigachev #define ATOM_PPLIB_CLASSIFICATION_UI_SHIFT              0
48*b843c749SSergey Zigachev #define ATOM_PPLIB_CLASSIFICATION_UI_NONE               0
49*b843c749SSergey Zigachev #define ATOM_PPLIB_CLASSIFICATION_UI_BATTERY            1
50*b843c749SSergey Zigachev #define ATOM_PPLIB_CLASSIFICATION_UI_BALANCED           3
51*b843c749SSergey Zigachev #define ATOM_PPLIB_CLASSIFICATION_UI_PERFORMANCE        5
52*b843c749SSergey Zigachev /* 2, 4, 6, 7 are reserved */
53*b843c749SSergey Zigachev 
54*b843c749SSergey Zigachev #define ATOM_PPLIB_CLASSIFICATION_BOOT                  0x0008
55*b843c749SSergey Zigachev #define ATOM_PPLIB_CLASSIFICATION_THERMAL               0x0010
56*b843c749SSergey Zigachev #define ATOM_PPLIB_CLASSIFICATION_LIMITEDPOWERSOURCE    0x0020
57*b843c749SSergey Zigachev #define ATOM_PPLIB_CLASSIFICATION_REST                  0x0040
58*b843c749SSergey Zigachev #define ATOM_PPLIB_CLASSIFICATION_FORCED                0x0080
59*b843c749SSergey Zigachev #define ATOM_PPLIB_CLASSIFICATION_ACPI                  0x1000
60*b843c749SSergey Zigachev 
61*b843c749SSergey Zigachev /* ATOM_PPLIB_NONCLOCK_INFO::usClassification2 */
62*b843c749SSergey Zigachev #define ATOM_PPLIB_CLASSIFICATION2_LIMITEDPOWERSOURCE_2 0x0001
63*b843c749SSergey Zigachev 
64*b843c749SSergey Zigachev #define ATOM_Vega10_DISALLOW_ON_DC                   0x00004000
65*b843c749SSergey Zigachev #define ATOM_Vega10_ENABLE_VARIBRIGHT                0x00008000
66*b843c749SSergey Zigachev 
67*b843c749SSergey Zigachev #define ATOM_Vega10_TABLE_REVISION_VEGA10         8
68*b843c749SSergey Zigachev 
69*b843c749SSergey Zigachev #define ATOM_Vega10_VoltageMode_AVFS_Interpolate     0
70*b843c749SSergey Zigachev #define ATOM_Vega10_VoltageMode_AVFS_WorstCase       1
71*b843c749SSergey Zigachev #define ATOM_Vega10_VoltageMode_Static               2
72*b843c749SSergey Zigachev 
73*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_POWERPLAYTABLE {
74*b843c749SSergey Zigachev 	struct atom_common_table_header sHeader;
75*b843c749SSergey Zigachev 	UCHAR  ucTableRevision;
76*b843c749SSergey Zigachev 	USHORT usTableSize;                        /* the size of header structure */
77*b843c749SSergey Zigachev 	ULONG  ulGoldenPPID;                       /* PPGen use only */
78*b843c749SSergey Zigachev 	ULONG  ulGoldenRevision;                   /* PPGen use only */
79*b843c749SSergey Zigachev 	USHORT usFormatID;                         /* PPGen use only */
80*b843c749SSergey Zigachev 	ULONG  ulPlatformCaps;                     /* See ATOM_Vega10_CAPS_* */
81*b843c749SSergey Zigachev 	ULONG  ulMaxODEngineClock;                 /* For Overdrive. */
82*b843c749SSergey Zigachev 	ULONG  ulMaxODMemoryClock;                 /* For Overdrive. */
83*b843c749SSergey Zigachev 	USHORT usPowerControlLimit;
84*b843c749SSergey Zigachev 	USHORT usUlvVoltageOffset;                 /* in mv units */
85*b843c749SSergey Zigachev 	USHORT usUlvSmnclkDid;
86*b843c749SSergey Zigachev 	USHORT usUlvMp1clkDid;
87*b843c749SSergey Zigachev 	USHORT usUlvGfxclkBypass;
88*b843c749SSergey Zigachev 	USHORT usGfxclkSlewRate;
89*b843c749SSergey Zigachev 	UCHAR  ucGfxVoltageMode;
90*b843c749SSergey Zigachev 	UCHAR  ucSocVoltageMode;
91*b843c749SSergey Zigachev 	UCHAR  ucUclkVoltageMode;
92*b843c749SSergey Zigachev 	UCHAR  ucUvdVoltageMode;
93*b843c749SSergey Zigachev 	UCHAR  ucVceVoltageMode;
94*b843c749SSergey Zigachev 	UCHAR  ucMp0VoltageMode;
95*b843c749SSergey Zigachev 	UCHAR  ucDcefVoltageMode;
96*b843c749SSergey Zigachev 	USHORT usStateArrayOffset;                 /* points to ATOM_Vega10_State_Array */
97*b843c749SSergey Zigachev 	USHORT usFanTableOffset;                   /* points to ATOM_Vega10_Fan_Table */
98*b843c749SSergey Zigachev 	USHORT usThermalControllerOffset;          /* points to ATOM_Vega10_Thermal_Controller */
99*b843c749SSergey Zigachev 	USHORT usSocclkDependencyTableOffset;      /* points to ATOM_Vega10_SOCCLK_Dependency_Table */
100*b843c749SSergey Zigachev 	USHORT usMclkDependencyTableOffset;        /* points to ATOM_Vega10_MCLK_Dependency_Table */
101*b843c749SSergey Zigachev 	USHORT usGfxclkDependencyTableOffset;      /* points to ATOM_Vega10_GFXCLK_Dependency_Table */
102*b843c749SSergey Zigachev 	USHORT usDcefclkDependencyTableOffset;     /* points to ATOM_Vega10_DCEFCLK_Dependency_Table */
103*b843c749SSergey Zigachev 	USHORT usVddcLookupTableOffset;            /* points to ATOM_Vega10_Voltage_Lookup_Table */
104*b843c749SSergey Zigachev 	USHORT usVddmemLookupTableOffset;          /* points to ATOM_Vega10_Voltage_Lookup_Table */
105*b843c749SSergey Zigachev 	USHORT usMMDependencyTableOffset;          /* points to ATOM_Vega10_MM_Dependency_Table */
106*b843c749SSergey Zigachev 	USHORT usVCEStateTableOffset;              /* points to ATOM_Vega10_VCE_State_Table */
107*b843c749SSergey Zigachev 	USHORT usReserve;                          /* No PPM Support for Vega10 */
108*b843c749SSergey Zigachev 	USHORT usPowerTuneTableOffset;             /* points to ATOM_Vega10_PowerTune_Table */
109*b843c749SSergey Zigachev 	USHORT usHardLimitTableOffset;             /* points to ATOM_Vega10_Hard_Limit_Table */
110*b843c749SSergey Zigachev 	USHORT usVddciLookupTableOffset;           /* points to ATOM_Vega10_Voltage_Lookup_Table */
111*b843c749SSergey Zigachev 	USHORT usPCIETableOffset;                  /* points to ATOM_Vega10_PCIE_Table */
112*b843c749SSergey Zigachev 	USHORT usPixclkDependencyTableOffset;      /* points to ATOM_Vega10_PIXCLK_Dependency_Table */
113*b843c749SSergey Zigachev 	USHORT usDispClkDependencyTableOffset;     /* points to ATOM_Vega10_DISPCLK_Dependency_Table */
114*b843c749SSergey Zigachev 	USHORT usPhyClkDependencyTableOffset;      /* points to ATOM_Vega10_PHYCLK_Dependency_Table */
115*b843c749SSergey Zigachev } ATOM_Vega10_POWERPLAYTABLE;
116*b843c749SSergey Zigachev 
117*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_State {
118*b843c749SSergey Zigachev 	UCHAR  ucSocClockIndexHigh;
119*b843c749SSergey Zigachev 	UCHAR  ucSocClockIndexLow;
120*b843c749SSergey Zigachev 	UCHAR  ucGfxClockIndexHigh;
121*b843c749SSergey Zigachev 	UCHAR  ucGfxClockIndexLow;
122*b843c749SSergey Zigachev 	UCHAR  ucMemClockIndexHigh;
123*b843c749SSergey Zigachev 	UCHAR  ucMemClockIndexLow;
124*b843c749SSergey Zigachev 	USHORT usClassification;
125*b843c749SSergey Zigachev 	ULONG  ulCapsAndSettings;
126*b843c749SSergey Zigachev 	USHORT usClassification2;
127*b843c749SSergey Zigachev } ATOM_Vega10_State;
128*b843c749SSergey Zigachev 
129*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_State_Array {
130*b843c749SSergey Zigachev 	UCHAR ucRevId;
131*b843c749SSergey Zigachev 	UCHAR ucNumEntries;                                         /* Number of entries. */
132*b843c749SSergey Zigachev 	ATOM_Vega10_State states[1];                             /* Dynamically allocate entries. */
133*b843c749SSergey Zigachev } ATOM_Vega10_State_Array;
134*b843c749SSergey Zigachev 
135*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_CLK_Dependency_Record {
136*b843c749SSergey Zigachev 	ULONG  ulClk;                                               /* Frequency of Clock */
137*b843c749SSergey Zigachev 	UCHAR  ucVddInd;                                            /* Base voltage */
138*b843c749SSergey Zigachev } ATOM_Vega10_CLK_Dependency_Record;
139*b843c749SSergey Zigachev 
140*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_GFXCLK_Dependency_Record {
141*b843c749SSergey Zigachev 	ULONG  ulClk;                                               /* Clock Frequency */
142*b843c749SSergey Zigachev 	UCHAR  ucVddInd;                                            /* SOC_VDD index */
143*b843c749SSergey Zigachev 	USHORT usCKSVOffsetandDisable;                              /* Bits 0~30: Voltage offset for CKS, Bit 31: Disable/enable for the GFXCLK level. */
144*b843c749SSergey Zigachev 	USHORT usAVFSOffset;                                        /* AVFS Voltage offset */
145*b843c749SSergey Zigachev } ATOM_Vega10_GFXCLK_Dependency_Record;
146*b843c749SSergey Zigachev 
147*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_GFXCLK_Dependency_Record_V2 {
148*b843c749SSergey Zigachev 	ULONG  ulClk;
149*b843c749SSergey Zigachev 	UCHAR  ucVddInd;
150*b843c749SSergey Zigachev 	USHORT usCKSVOffsetandDisable;
151*b843c749SSergey Zigachev 	USHORT usAVFSOffset;
152*b843c749SSergey Zigachev 	UCHAR  ucACGEnable;
153*b843c749SSergey Zigachev 	UCHAR  ucReserved[3];
154*b843c749SSergey Zigachev } ATOM_Vega10_GFXCLK_Dependency_Record_V2;
155*b843c749SSergey Zigachev 
156*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_MCLK_Dependency_Record {
157*b843c749SSergey Zigachev 	ULONG  ulMemClk;                                            /* Clock Frequency */
158*b843c749SSergey Zigachev 	UCHAR  ucVddInd;                                            /* SOC_VDD index */
159*b843c749SSergey Zigachev 	UCHAR  ucVddMemInd;                                         /* MEM_VDD - only non zero for MCLK record */
160*b843c749SSergey Zigachev 	UCHAR  ucVddciInd;                                          /* VDDCI   = only non zero for MCLK record */
161*b843c749SSergey Zigachev } ATOM_Vega10_MCLK_Dependency_Record;
162*b843c749SSergey Zigachev 
163*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_GFXCLK_Dependency_Table {
164*b843c749SSergey Zigachev     UCHAR ucRevId;
165*b843c749SSergey Zigachev     UCHAR ucNumEntries;                                         /* Number of entries. */
166*b843c749SSergey Zigachev     ATOM_Vega10_GFXCLK_Dependency_Record entries[1];            /* Dynamically allocate entries. */
167*b843c749SSergey Zigachev } ATOM_Vega10_GFXCLK_Dependency_Table;
168*b843c749SSergey Zigachev 
169*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_MCLK_Dependency_Table {
170*b843c749SSergey Zigachev     UCHAR ucRevId;
171*b843c749SSergey Zigachev     UCHAR ucNumEntries;                                         /* Number of entries. */
172*b843c749SSergey Zigachev     ATOM_Vega10_MCLK_Dependency_Record entries[1];            /* Dynamically allocate entries. */
173*b843c749SSergey Zigachev } ATOM_Vega10_MCLK_Dependency_Table;
174*b843c749SSergey Zigachev 
175*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_SOCCLK_Dependency_Table {
176*b843c749SSergey Zigachev     UCHAR ucRevId;
177*b843c749SSergey Zigachev     UCHAR ucNumEntries;                                         /* Number of entries. */
178*b843c749SSergey Zigachev     ATOM_Vega10_CLK_Dependency_Record entries[1];            /* Dynamically allocate entries. */
179*b843c749SSergey Zigachev } ATOM_Vega10_SOCCLK_Dependency_Table;
180*b843c749SSergey Zigachev 
181*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_DCEFCLK_Dependency_Table {
182*b843c749SSergey Zigachev     UCHAR ucRevId;
183*b843c749SSergey Zigachev     UCHAR ucNumEntries;                                         /* Number of entries. */
184*b843c749SSergey Zigachev     ATOM_Vega10_CLK_Dependency_Record entries[1];            /* Dynamically allocate entries. */
185*b843c749SSergey Zigachev } ATOM_Vega10_DCEFCLK_Dependency_Table;
186*b843c749SSergey Zigachev 
187*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_PIXCLK_Dependency_Table {
188*b843c749SSergey Zigachev 	UCHAR ucRevId;
189*b843c749SSergey Zigachev 	UCHAR ucNumEntries;                                         /* Number of entries. */
190*b843c749SSergey Zigachev 	ATOM_Vega10_CLK_Dependency_Record entries[1];            /* Dynamically allocate entries. */
191*b843c749SSergey Zigachev } ATOM_Vega10_PIXCLK_Dependency_Table;
192*b843c749SSergey Zigachev 
193*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_DISPCLK_Dependency_Table {
194*b843c749SSergey Zigachev 	UCHAR ucRevId;
195*b843c749SSergey Zigachev 	UCHAR ucNumEntries;                                         /* Number of entries.*/
196*b843c749SSergey Zigachev 	ATOM_Vega10_CLK_Dependency_Record entries[1];            /* Dynamically allocate entries. */
197*b843c749SSergey Zigachev } ATOM_Vega10_DISPCLK_Dependency_Table;
198*b843c749SSergey Zigachev 
199*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_PHYCLK_Dependency_Table {
200*b843c749SSergey Zigachev 	UCHAR ucRevId;
201*b843c749SSergey Zigachev 	UCHAR ucNumEntries;                                         /* Number of entries. */
202*b843c749SSergey Zigachev 	ATOM_Vega10_CLK_Dependency_Record entries[1];            /* Dynamically allocate entries. */
203*b843c749SSergey Zigachev } ATOM_Vega10_PHYCLK_Dependency_Table;
204*b843c749SSergey Zigachev 
205*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_MM_Dependency_Record {
206*b843c749SSergey Zigachev     UCHAR  ucVddcInd;                                           /* SOC_VDD voltage */
207*b843c749SSergey Zigachev     ULONG  ulDClk;                                              /* UVD D-clock */
208*b843c749SSergey Zigachev     ULONG  ulVClk;                                              /* UVD V-clock */
209*b843c749SSergey Zigachev     ULONG  ulEClk;                                              /* VCE clock */
210*b843c749SSergey Zigachev     ULONG  ulPSPClk;                                            /* PSP clock */
211*b843c749SSergey Zigachev } ATOM_Vega10_MM_Dependency_Record;
212*b843c749SSergey Zigachev 
213*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_MM_Dependency_Table {
214*b843c749SSergey Zigachev 	UCHAR ucRevId;
215*b843c749SSergey Zigachev 	UCHAR ucNumEntries;                                         /* Number of entries */
216*b843c749SSergey Zigachev 	ATOM_Vega10_MM_Dependency_Record entries[1];             /* Dynamically allocate entries */
217*b843c749SSergey Zigachev } ATOM_Vega10_MM_Dependency_Table;
218*b843c749SSergey Zigachev 
219*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_PCIE_Record {
220*b843c749SSergey Zigachev 	ULONG ulLCLK;                                               /* LClock */
221*b843c749SSergey Zigachev 	UCHAR ucPCIEGenSpeed;                                       /* PCIE Speed */
222*b843c749SSergey Zigachev 	UCHAR ucPCIELaneWidth;                                      /* PCIE Lane Width */
223*b843c749SSergey Zigachev } ATOM_Vega10_PCIE_Record;
224*b843c749SSergey Zigachev 
225*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_PCIE_Table {
226*b843c749SSergey Zigachev 	UCHAR  ucRevId;
227*b843c749SSergey Zigachev 	UCHAR  ucNumEntries;                                        /* Number of entries */
228*b843c749SSergey Zigachev 	ATOM_Vega10_PCIE_Record entries[1];                      /* Dynamically allocate entries. */
229*b843c749SSergey Zigachev } ATOM_Vega10_PCIE_Table;
230*b843c749SSergey Zigachev 
231*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_Voltage_Lookup_Record {
232*b843c749SSergey Zigachev 	USHORT usVdd;                                               /* Base voltage */
233*b843c749SSergey Zigachev } ATOM_Vega10_Voltage_Lookup_Record;
234*b843c749SSergey Zigachev 
235*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_Voltage_Lookup_Table {
236*b843c749SSergey Zigachev 	UCHAR ucRevId;
237*b843c749SSergey Zigachev 	UCHAR ucNumEntries;                                          /* Number of entries */
238*b843c749SSergey Zigachev 	ATOM_Vega10_Voltage_Lookup_Record entries[1];             /* Dynamically allocate entries */
239*b843c749SSergey Zigachev } ATOM_Vega10_Voltage_Lookup_Table;
240*b843c749SSergey Zigachev 
241*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_Fan_Table {
242*b843c749SSergey Zigachev 	UCHAR   ucRevId;                         /* Change this if the table format changes or version changes so that the other fields are not the same. */
243*b843c749SSergey Zigachev 	USHORT  usFanOutputSensitivity;          /* Sensitivity of fan reaction to temepature changes. */
244*b843c749SSergey Zigachev 	USHORT  usFanRPMMax;                     /* The default value in RPM. */
245*b843c749SSergey Zigachev 	USHORT  usThrottlingRPM;
246*b843c749SSergey Zigachev 	USHORT  usFanAcousticLimit;              /* Minimum Fan Controller Frequency Acoustic Limit. */
247*b843c749SSergey Zigachev 	USHORT  usTargetTemperature;             /* The default ideal temperature in Celcius. */
248*b843c749SSergey Zigachev 	USHORT  usMinimumPWMLimit;               /* The minimum PWM that the advanced fan controller can set. */
249*b843c749SSergey Zigachev 	USHORT  usTargetGfxClk;                   /* The ideal Fan Controller GFXCLK Frequency Acoustic Limit. */
250*b843c749SSergey Zigachev 	USHORT  usFanGainEdge;
251*b843c749SSergey Zigachev 	USHORT  usFanGainHotspot;
252*b843c749SSergey Zigachev 	USHORT  usFanGainLiquid;
253*b843c749SSergey Zigachev 	USHORT  usFanGainVrVddc;
254*b843c749SSergey Zigachev 	USHORT  usFanGainVrMvdd;
255*b843c749SSergey Zigachev 	USHORT  usFanGainPlx;
256*b843c749SSergey Zigachev 	USHORT  usFanGainHbm;
257*b843c749SSergey Zigachev 	UCHAR   ucEnableZeroRPM;
258*b843c749SSergey Zigachev 	USHORT  usFanStopTemperature;
259*b843c749SSergey Zigachev 	USHORT  usFanStartTemperature;
260*b843c749SSergey Zigachev } ATOM_Vega10_Fan_Table;
261*b843c749SSergey Zigachev 
262*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_Fan_Table_V2 {
263*b843c749SSergey Zigachev 	UCHAR   ucRevId;
264*b843c749SSergey Zigachev 	USHORT  usFanOutputSensitivity;
265*b843c749SSergey Zigachev 	USHORT  usFanAcousticLimitRpm;
266*b843c749SSergey Zigachev 	USHORT  usThrottlingRPM;
267*b843c749SSergey Zigachev 	USHORT  usTargetTemperature;
268*b843c749SSergey Zigachev 	USHORT  usMinimumPWMLimit;
269*b843c749SSergey Zigachev 	USHORT  usTargetGfxClk;
270*b843c749SSergey Zigachev 	USHORT  usFanGainEdge;
271*b843c749SSergey Zigachev 	USHORT  usFanGainHotspot;
272*b843c749SSergey Zigachev 	USHORT  usFanGainLiquid;
273*b843c749SSergey Zigachev 	USHORT  usFanGainVrVddc;
274*b843c749SSergey Zigachev 	USHORT  usFanGainVrMvdd;
275*b843c749SSergey Zigachev 	USHORT  usFanGainPlx;
276*b843c749SSergey Zigachev 	USHORT  usFanGainHbm;
277*b843c749SSergey Zigachev 	UCHAR   ucEnableZeroRPM;
278*b843c749SSergey Zigachev 	USHORT  usFanStopTemperature;
279*b843c749SSergey Zigachev 	USHORT  usFanStartTemperature;
280*b843c749SSergey Zigachev 	UCHAR   ucFanParameters;
281*b843c749SSergey Zigachev 	UCHAR   ucFanMinRPM;
282*b843c749SSergey Zigachev 	UCHAR   ucFanMaxRPM;
283*b843c749SSergey Zigachev } ATOM_Vega10_Fan_Table_V2;
284*b843c749SSergey Zigachev 
285*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_Thermal_Controller {
286*b843c749SSergey Zigachev 	UCHAR ucRevId;
287*b843c749SSergey Zigachev 	UCHAR ucType;           /* one of ATOM_VEGA10_PP_THERMALCONTROLLER_*/
288*b843c749SSergey Zigachev 	UCHAR ucI2cLine;        /* as interpreted by DAL I2C */
289*b843c749SSergey Zigachev 	UCHAR ucI2cAddress;
290*b843c749SSergey Zigachev 	UCHAR ucFanParameters;  /* Fan Control Parameters. */
291*b843c749SSergey Zigachev 	UCHAR ucFanMinRPM;      /* Fan Minimum RPM (hundreds) -- for display purposes only.*/
292*b843c749SSergey Zigachev 	UCHAR ucFanMaxRPM;      /* Fan Maximum RPM (hundreds) -- for display purposes only.*/
293*b843c749SSergey Zigachev     UCHAR ucFlags;          /* to be defined */
294*b843c749SSergey Zigachev } ATOM_Vega10_Thermal_Controller;
295*b843c749SSergey Zigachev 
296*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_VCE_State_Record
297*b843c749SSergey Zigachev {
298*b843c749SSergey Zigachev     UCHAR  ucVCEClockIndex;         /*index into usVCEDependencyTableOffset of 'ATOM_Vega10_MM_Dependency_Table' type */
299*b843c749SSergey Zigachev     UCHAR  ucFlag;                  /* 2 bits indicates memory p-states */
300*b843c749SSergey Zigachev     UCHAR  ucSCLKIndex;             /* index into ATOM_Vega10_SCLK_Dependency_Table */
301*b843c749SSergey Zigachev     UCHAR  ucMCLKIndex;             /* index into ATOM_Vega10_MCLK_Dependency_Table */
302*b843c749SSergey Zigachev } ATOM_Vega10_VCE_State_Record;
303*b843c749SSergey Zigachev 
304*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_VCE_State_Table
305*b843c749SSergey Zigachev {
306*b843c749SSergey Zigachev     UCHAR ucRevId;
307*b843c749SSergey Zigachev     UCHAR ucNumEntries;
308*b843c749SSergey Zigachev     ATOM_Vega10_VCE_State_Record entries[1];
309*b843c749SSergey Zigachev } ATOM_Vega10_VCE_State_Table;
310*b843c749SSergey Zigachev 
311*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_PowerTune_Table {
312*b843c749SSergey Zigachev 	UCHAR  ucRevId;
313*b843c749SSergey Zigachev 	USHORT usSocketPowerLimit;
314*b843c749SSergey Zigachev 	USHORT usBatteryPowerLimit;
315*b843c749SSergey Zigachev 	USHORT usSmallPowerLimit;
316*b843c749SSergey Zigachev 	USHORT usTdcLimit;
317*b843c749SSergey Zigachev 	USHORT usEdcLimit;
318*b843c749SSergey Zigachev 	USHORT usSoftwareShutdownTemp;
319*b843c749SSergey Zigachev 	USHORT usTemperatureLimitHotSpot;
320*b843c749SSergey Zigachev 	USHORT usTemperatureLimitLiquid1;
321*b843c749SSergey Zigachev 	USHORT usTemperatureLimitLiquid2;
322*b843c749SSergey Zigachev 	USHORT usTemperatureLimitHBM;
323*b843c749SSergey Zigachev 	USHORT usTemperatureLimitVrSoc;
324*b843c749SSergey Zigachev 	USHORT usTemperatureLimitVrMem;
325*b843c749SSergey Zigachev 	USHORT usTemperatureLimitPlx;
326*b843c749SSergey Zigachev 	USHORT usLoadLineResistance;
327*b843c749SSergey Zigachev 	UCHAR  ucLiquid1_I2C_address;
328*b843c749SSergey Zigachev 	UCHAR  ucLiquid2_I2C_address;
329*b843c749SSergey Zigachev 	UCHAR  ucVr_I2C_address;
330*b843c749SSergey Zigachev 	UCHAR  ucPlx_I2C_address;
331*b843c749SSergey Zigachev 	UCHAR  ucLiquid_I2C_LineSCL;
332*b843c749SSergey Zigachev 	UCHAR  ucLiquid_I2C_LineSDA;
333*b843c749SSergey Zigachev 	UCHAR  ucVr_I2C_LineSCL;
334*b843c749SSergey Zigachev 	UCHAR  ucVr_I2C_LineSDA;
335*b843c749SSergey Zigachev 	UCHAR  ucPlx_I2C_LineSCL;
336*b843c749SSergey Zigachev 	UCHAR  ucPlx_I2C_LineSDA;
337*b843c749SSergey Zigachev 	USHORT usTemperatureLimitTedge;
338*b843c749SSergey Zigachev } ATOM_Vega10_PowerTune_Table;
339*b843c749SSergey Zigachev 
340*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_PowerTune_Table_V2
341*b843c749SSergey Zigachev {
342*b843c749SSergey Zigachev 	UCHAR  ucRevId;
343*b843c749SSergey Zigachev 	USHORT usSocketPowerLimit;
344*b843c749SSergey Zigachev 	USHORT usBatteryPowerLimit;
345*b843c749SSergey Zigachev 	USHORT usSmallPowerLimit;
346*b843c749SSergey Zigachev 	USHORT usTdcLimit;
347*b843c749SSergey Zigachev 	USHORT usEdcLimit;
348*b843c749SSergey Zigachev 	USHORT usSoftwareShutdownTemp;
349*b843c749SSergey Zigachev 	USHORT usTemperatureLimitHotSpot;
350*b843c749SSergey Zigachev 	USHORT usTemperatureLimitLiquid1;
351*b843c749SSergey Zigachev 	USHORT usTemperatureLimitLiquid2;
352*b843c749SSergey Zigachev 	USHORT usTemperatureLimitHBM;
353*b843c749SSergey Zigachev 	USHORT usTemperatureLimitVrSoc;
354*b843c749SSergey Zigachev 	USHORT usTemperatureLimitVrMem;
355*b843c749SSergey Zigachev 	USHORT usTemperatureLimitPlx;
356*b843c749SSergey Zigachev 	USHORT usLoadLineResistance;
357*b843c749SSergey Zigachev 	UCHAR ucLiquid1_I2C_address;
358*b843c749SSergey Zigachev 	UCHAR ucLiquid2_I2C_address;
359*b843c749SSergey Zigachev 	UCHAR ucLiquid_I2C_Line;
360*b843c749SSergey Zigachev 	UCHAR ucVr_I2C_address;
361*b843c749SSergey Zigachev 	UCHAR ucVr_I2C_Line;
362*b843c749SSergey Zigachev 	UCHAR ucPlx_I2C_address;
363*b843c749SSergey Zigachev 	UCHAR ucPlx_I2C_Line;
364*b843c749SSergey Zigachev 	USHORT usTemperatureLimitTedge;
365*b843c749SSergey Zigachev } ATOM_Vega10_PowerTune_Table_V2;
366*b843c749SSergey Zigachev 
367*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_PowerTune_Table_V3
368*b843c749SSergey Zigachev {
369*b843c749SSergey Zigachev 	UCHAR  ucRevId;
370*b843c749SSergey Zigachev 	USHORT usSocketPowerLimit;
371*b843c749SSergey Zigachev 	USHORT usBatteryPowerLimit;
372*b843c749SSergey Zigachev 	USHORT usSmallPowerLimit;
373*b843c749SSergey Zigachev 	USHORT usTdcLimit;
374*b843c749SSergey Zigachev 	USHORT usEdcLimit;
375*b843c749SSergey Zigachev 	USHORT usSoftwareShutdownTemp;
376*b843c749SSergey Zigachev 	USHORT usTemperatureLimitHotSpot;
377*b843c749SSergey Zigachev 	USHORT usTemperatureLimitLiquid1;
378*b843c749SSergey Zigachev 	USHORT usTemperatureLimitLiquid2;
379*b843c749SSergey Zigachev 	USHORT usTemperatureLimitHBM;
380*b843c749SSergey Zigachev 	USHORT usTemperatureLimitVrSoc;
381*b843c749SSergey Zigachev 	USHORT usTemperatureLimitVrMem;
382*b843c749SSergey Zigachev 	USHORT usTemperatureLimitPlx;
383*b843c749SSergey Zigachev 	USHORT usLoadLineResistance;
384*b843c749SSergey Zigachev 	UCHAR  ucLiquid1_I2C_address;
385*b843c749SSergey Zigachev 	UCHAR  ucLiquid2_I2C_address;
386*b843c749SSergey Zigachev 	UCHAR  ucLiquid_I2C_Line;
387*b843c749SSergey Zigachev 	UCHAR  ucVr_I2C_address;
388*b843c749SSergey Zigachev 	UCHAR  ucVr_I2C_Line;
389*b843c749SSergey Zigachev 	UCHAR  ucPlx_I2C_address;
390*b843c749SSergey Zigachev 	UCHAR  ucPlx_I2C_Line;
391*b843c749SSergey Zigachev 	USHORT usTemperatureLimitTedge;
392*b843c749SSergey Zigachev 	USHORT usBoostStartTemperature;
393*b843c749SSergey Zigachev 	USHORT usBoostStopTemperature;
394*b843c749SSergey Zigachev 	ULONG  ulBoostClock;
395*b843c749SSergey Zigachev 	ULONG  Reserved[2];
396*b843c749SSergey Zigachev } ATOM_Vega10_PowerTune_Table_V3;
397*b843c749SSergey Zigachev 
398*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_Hard_Limit_Record {
399*b843c749SSergey Zigachev     ULONG  ulSOCCLKLimit;
400*b843c749SSergey Zigachev     ULONG  ulGFXCLKLimit;
401*b843c749SSergey Zigachev     ULONG  ulMCLKLimit;
402*b843c749SSergey Zigachev     USHORT usVddcLimit;
403*b843c749SSergey Zigachev     USHORT usVddciLimit;
404*b843c749SSergey Zigachev     USHORT usVddMemLimit;
405*b843c749SSergey Zigachev } ATOM_Vega10_Hard_Limit_Record;
406*b843c749SSergey Zigachev 
407*b843c749SSergey Zigachev typedef struct _ATOM_Vega10_Hard_Limit_Table
408*b843c749SSergey Zigachev {
409*b843c749SSergey Zigachev     UCHAR ucRevId;
410*b843c749SSergey Zigachev     UCHAR ucNumEntries;
411*b843c749SSergey Zigachev     ATOM_Vega10_Hard_Limit_Record entries[1];
412*b843c749SSergey Zigachev } ATOM_Vega10_Hard_Limit_Table;
413*b843c749SSergey Zigachev 
414*b843c749SSergey Zigachev typedef struct _Vega10_PPTable_Generic_SubTable_Header
415*b843c749SSergey Zigachev {
416*b843c749SSergey Zigachev     UCHAR  ucRevId;
417*b843c749SSergey Zigachev } Vega10_PPTable_Generic_SubTable_Header;
418*b843c749SSergey Zigachev 
419*b843c749SSergey Zigachev #pragma pack(pop)
420*b843c749SSergey Zigachev 
421*b843c749SSergey Zigachev #endif
422