1 /*
2  * Copyright 2015 Advanced Micro Devices, Inc.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20  * OTHER DEALINGS IN THE SOFTWARE.
21  *
22  */
23 
24 #ifndef TONGA_PPTABLE_H
25 #define TONGA_PPTABLE_H
26 
27 /** \file
28  * This is a PowerPlay table header file
29  */
30 #pragma pack(push, 1)
31 
32 #include "hwmgr.h"
33 
34 #define ATOM_TONGA_PP_FANPARAMETERS_TACHOMETER_PULSES_PER_REVOLUTION_MASK 0x0f
35 #define ATOM_TONGA_PP_FANPARAMETERS_NOFAN                                 0x80    /* No fan is connected to this controller. */
36 
37 #define ATOM_TONGA_PP_THERMALCONTROLLER_NONE      0
38 #define ATOM_TONGA_PP_THERMALCONTROLLER_LM96163   17
39 #define ATOM_TONGA_PP_THERMALCONTROLLER_TONGA     21
40 #define ATOM_TONGA_PP_THERMALCONTROLLER_FIJI      22
41 
42 /*
43  * Thermal controller 'combo type' to use an external controller for Fan control and an internal controller for thermal.
44  * We probably should reserve the bit 0x80 for this use.
45  * To keep the number of these types low we should also use the same code for all ASICs (i.e. do not distinguish RV6xx and RV7xx Internal here).
46  * The driver can pick the correct internal controller based on the ASIC.
47  */
48 
49 #define ATOM_TONGA_PP_THERMALCONTROLLER_ADT7473_WITH_INTERNAL   0x89    /* ADT7473 Fan Control + Internal Thermal Controller */
50 #define ATOM_TONGA_PP_THERMALCONTROLLER_EMC2103_WITH_INTERNAL   0x8D    /* EMC2103 Fan Control + Internal Thermal Controller */
51 
52 /*/* ATOM_TONGA_POWERPLAYTABLE::ulPlatformCaps */
53 #define ATOM_TONGA_PP_PLATFORM_CAP_VDDGFX_CONTROL              0x1            /* This cap indicates whether vddgfx will be a separated power rail. */
54 #define ATOM_TONGA_PP_PLATFORM_CAP_POWERPLAY                   0x2            /* This cap indicates whether this is a mobile part and CCC need to show Powerplay page. */
55 #define ATOM_TONGA_PP_PLATFORM_CAP_SBIOSPOWERSOURCE            0x4            /* This cap indicates whether power source notificaiton is done by SBIOS directly. */
56 #define ATOM_TONGA_PP_PLATFORM_CAP_DISABLE_VOLTAGE_ISLAND      0x8            /* Enable the option to overwrite voltage island feature to be disabled, regardless of VddGfx power rail support. */
57 #define ____RETIRE16____                                0x10
58 #define ATOM_TONGA_PP_PLATFORM_CAP_HARDWAREDC                 0x20            /* This cap indicates whether power source notificaiton is done by GPIO directly. */
59 #define ____RETIRE64____                                0x40
60 #define ____RETIRE128____                               0x80
61 #define ____RETIRE256____                              0x100
62 #define ____RETIRE512____                              0x200
63 #define ____RETIRE1024____                             0x400
64 #define ____RETIRE2048____                             0x800
65 #define ATOM_TONGA_PP_PLATFORM_CAP_MVDD_CONTROL             0x1000            /* This cap indicates dynamic MVDD is required. Uncheck to disable it. */
66 #define ____RETIRE2000____                            0x2000
67 #define ____RETIRE4000____                            0x4000
68 #define ATOM_TONGA_PP_PLATFORM_CAP_VDDCI_CONTROL            0x8000            /* This cap indicates dynamic VDDCI is required. Uncheck to disable it. */
69 #define ____RETIRE10000____                          0x10000
70 #define ATOM_TONGA_PP_PLATFORM_CAP_BACO                    0x20000            /* Enable to indicate the driver supports BACO state. */
71 
72 #define ATOM_TONGA_PP_PLATFORM_CAP_OUTPUT_THERMAL2GPIO17         0x100000     /* Enable to indicate the driver supports thermal2GPIO17. */
73 #define ATOM_TONGA_PP_PLATFORM_COMBINE_PCC_WITH_THERMAL_SIGNAL  0x1000000     /* Enable to indicate if thermal and PCC are sharing the same GPIO */
74 #define ATOM_TONGA_PLATFORM_LOAD_POST_PRODUCTION_FIRMWARE       0x2000000
75 
76 /* ATOM_PPLIB_NONCLOCK_INFO::usClassification */
77 #define ATOM_PPLIB_CLASSIFICATION_UI_MASK               0x0007
78 #define ATOM_PPLIB_CLASSIFICATION_UI_SHIFT              0
79 #define ATOM_PPLIB_CLASSIFICATION_UI_NONE               0
80 #define ATOM_PPLIB_CLASSIFICATION_UI_BATTERY            1
81 #define ATOM_PPLIB_CLASSIFICATION_UI_BALANCED           3
82 #define ATOM_PPLIB_CLASSIFICATION_UI_PERFORMANCE        5
83 /* 2, 4, 6, 7 are reserved */
84 
85 #define ATOM_PPLIB_CLASSIFICATION_BOOT                  0x0008
86 #define ATOM_PPLIB_CLASSIFICATION_THERMAL               0x0010
87 #define ATOM_PPLIB_CLASSIFICATION_LIMITEDPOWERSOURCE    0x0020
88 #define ATOM_PPLIB_CLASSIFICATION_REST                  0x0040
89 #define ATOM_PPLIB_CLASSIFICATION_FORCED                0x0080
90 #define ATOM_PPLIB_CLASSIFICATION_ACPI                  0x1000
91 
92 /* ATOM_PPLIB_NONCLOCK_INFO::usClassification2 */
93 #define ATOM_PPLIB_CLASSIFICATION2_LIMITEDPOWERSOURCE_2 0x0001
94 
95 #define ATOM_Tonga_DISALLOW_ON_DC                       0x00004000
96 #define ATOM_Tonga_ENABLE_VARIBRIGHT                    0x00008000
97 
98 #define ATOM_Tonga_TABLE_REVISION_TONGA                 7
99 
100 typedef struct _ATOM_Tonga_POWERPLAYTABLE {
101 	ATOM_COMMON_TABLE_HEADER sHeader;
102 
103 	UCHAR  ucTableRevision;
104 	USHORT usTableSize;						/*the size of header structure */
105 
106 	ULONG	ulGoldenPPID;
107 	ULONG	ulGoldenRevision;
108 	USHORT	usFormatID;
109 
110 	USHORT	usVoltageTime;					 /*in microseconds */
111 	ULONG	ulPlatformCaps;					  /*See ATOM_Tonga_CAPS_* */
112 
113 	ULONG	ulMaxODEngineClock; 			   /*For Overdrive.  */
114 	ULONG	ulMaxODMemoryClock; 			   /*For Overdrive. */
115 
116 	USHORT	usPowerControlLimit;
117 	USHORT	usUlvVoltageOffset;				  /*in mv units */
118 
119 	USHORT	usStateArrayOffset;				  /*points to ATOM_Tonga_State_Array */
120 	USHORT	usFanTableOffset;				  /*points to ATOM_Tonga_Fan_Table */
121 	USHORT	usThermalControllerOffset;		   /*points to ATOM_Tonga_Thermal_Controller */
122 	USHORT	usReserv;						   /*CustomThermalPolicy removed for Tonga. Keep this filed as reserved. */
123 
124 	USHORT	usMclkDependencyTableOffset;	   /*points to ATOM_Tonga_MCLK_Dependency_Table */
125 	USHORT	usSclkDependencyTableOffset;	   /*points to ATOM_Tonga_SCLK_Dependency_Table */
126 	USHORT	usVddcLookupTableOffset;		   /*points to ATOM_Tonga_Voltage_Lookup_Table */
127 	USHORT	usVddgfxLookupTableOffset; 		/*points to ATOM_Tonga_Voltage_Lookup_Table */
128 
129 	USHORT	usMMDependencyTableOffset;		  /*points to ATOM_Tonga_MM_Dependency_Table */
130 
131 	USHORT	usVCEStateTableOffset;			   /*points to ATOM_Tonga_VCE_State_Table; */
132 
133 	USHORT	usPPMTableOffset;				  /*points to ATOM_Tonga_PPM_Table */
134 	USHORT	usPowerTuneTableOffset;			  /*points to ATOM_PowerTune_Table */
135 
136 	USHORT	usHardLimitTableOffset; 		   /*points to ATOM_Tonga_Hard_Limit_Table */
137 
138 	USHORT	usPCIETableOffset;				  /*points to ATOM_Tonga_PCIE_Table */
139 
140 	USHORT	usGPIOTableOffset;				  /*points to ATOM_Tonga_GPIO_Table */
141 
142 	USHORT	usReserved[6];					   /*TODO: modify reserved size to fit structure aligning */
143 } ATOM_Tonga_POWERPLAYTABLE;
144 
145 typedef struct _ATOM_Tonga_State {
146 	UCHAR  ucEngineClockIndexHigh;
147 	UCHAR  ucEngineClockIndexLow;
148 
149 	UCHAR  ucMemoryClockIndexHigh;
150 	UCHAR  ucMemoryClockIndexLow;
151 
152 	UCHAR  ucPCIEGenLow;
153 	UCHAR  ucPCIEGenHigh;
154 
155 	UCHAR  ucPCIELaneLow;
156 	UCHAR  ucPCIELaneHigh;
157 
158 	USHORT usClassification;
159 	ULONG ulCapsAndSettings;
160 	USHORT usClassification2;
161 	UCHAR  ucUnused[4];
162 } ATOM_Tonga_State;
163 
164 typedef struct _ATOM_Tonga_State_Array {
165 	UCHAR ucRevId;
166 	UCHAR ucNumEntries;
167 	ATOM_Tonga_State entries[] __counted_by(ucNumEntries);
168 } ATOM_Tonga_State_Array;
169 
170 typedef struct _ATOM_Tonga_MCLK_Dependency_Record {
171 	UCHAR  ucVddcInd;	/* Vddc voltage */
172 	USHORT usVddci;
173 	USHORT usVddgfxOffset;	/* Offset relative to Vddc voltage */
174 	USHORT usMvdd;
175 	ULONG ulMclk;
176 	USHORT usReserved;
177 } ATOM_Tonga_MCLK_Dependency_Record;
178 
179 typedef struct _ATOM_Tonga_MCLK_Dependency_Table {
180 	UCHAR ucRevId;
181 	UCHAR ucNumEntries;
182 	ATOM_Tonga_MCLK_Dependency_Record entries[] __counted_by(ucNumEntries);
183 } ATOM_Tonga_MCLK_Dependency_Table;
184 
185 typedef struct _ATOM_Tonga_SCLK_Dependency_Record {
186 	UCHAR  ucVddInd;											/* Base voltage */
187 	USHORT usVddcOffset;										/* Offset relative to base voltage */
188 	ULONG ulSclk;
189 	USHORT usEdcCurrent;
190 	UCHAR  ucReliabilityTemperature;
191 	UCHAR  ucCKSVOffsetandDisable;							  /* Bits 0~6: Voltage offset for CKS, Bit 7: Disable/enable for the SCLK level. */
192 } ATOM_Tonga_SCLK_Dependency_Record;
193 
194 typedef struct _ATOM_Tonga_SCLK_Dependency_Table {
195 	UCHAR ucRevId;
196 	UCHAR ucNumEntries;
197 	ATOM_Tonga_SCLK_Dependency_Record entries[] __counted_by(ucNumEntries);
198 } ATOM_Tonga_SCLK_Dependency_Table;
199 
200 typedef struct _ATOM_Polaris_SCLK_Dependency_Record {
201 	UCHAR  ucVddInd;											/* Base voltage */
202 	USHORT usVddcOffset;										/* Offset relative to base voltage */
203 	ULONG ulSclk;
204 	USHORT usEdcCurrent;
205 	UCHAR  ucReliabilityTemperature;
206 	UCHAR  ucCKSVOffsetandDisable;			/* Bits 0~6: Voltage offset for CKS, Bit 7: Disable/enable for the SCLK level. */
207 	ULONG  ulSclkOffset;
208 } ATOM_Polaris_SCLK_Dependency_Record;
209 
210 typedef struct _ATOM_Polaris_SCLK_Dependency_Table {
211 	UCHAR ucRevId;
212 	UCHAR ucNumEntries;
213 	ATOM_Polaris_SCLK_Dependency_Record entries[] __counted_by(ucNumEntries);
214 } ATOM_Polaris_SCLK_Dependency_Table;
215 
216 typedef struct _ATOM_Tonga_PCIE_Record {
217 	UCHAR ucPCIEGenSpeed;
218 	UCHAR usPCIELaneWidth;
219 	UCHAR ucReserved[2];
220 } ATOM_Tonga_PCIE_Record;
221 
222 typedef struct _ATOM_Tonga_PCIE_Table {
223 	UCHAR ucRevId;
224 	UCHAR ucNumEntries;
225 	ATOM_Tonga_PCIE_Record entries[] __counted_by(ucNumEntries);
226 } ATOM_Tonga_PCIE_Table;
227 
228 typedef struct _ATOM_Polaris10_PCIE_Record {
229 	UCHAR ucPCIEGenSpeed;
230 	UCHAR usPCIELaneWidth;
231 	UCHAR ucReserved[2];
232 	ULONG ulPCIE_Sclk;
233 } ATOM_Polaris10_PCIE_Record;
234 
235 typedef struct _ATOM_Polaris10_PCIE_Table {
236 	UCHAR ucRevId;
237 	UCHAR ucNumEntries;
238 	ATOM_Polaris10_PCIE_Record entries[] __counted_by(ucNumEntries);
239 } ATOM_Polaris10_PCIE_Table;
240 
241 
242 typedef struct _ATOM_Tonga_MM_Dependency_Record {
243 	UCHAR   ucVddcInd;											 /* VDDC voltage */
244 	USHORT  usVddgfxOffset;									  /* Offset relative to VDDC voltage */
245 	ULONG  ulDClk;												/* UVD D-clock */
246 	ULONG  ulVClk;												/* UVD V-clock */
247 	ULONG  ulEClk;												/* VCE clock */
248 	ULONG  ulAClk;												/* ACP clock */
249 	ULONG  ulSAMUClk;											/* SAMU clock */
250 } ATOM_Tonga_MM_Dependency_Record;
251 
252 typedef struct _ATOM_Tonga_MM_Dependency_Table {
253 	UCHAR ucRevId;
254 	UCHAR ucNumEntries;
255 	ATOM_Tonga_MM_Dependency_Record entries[] __counted_by(ucNumEntries);
256 } ATOM_Tonga_MM_Dependency_Table;
257 
258 typedef struct _ATOM_Tonga_Voltage_Lookup_Record {
259 	USHORT usVdd;											   /* Base voltage */
260 	USHORT usCACLow;
261 	USHORT usCACMid;
262 	USHORT usCACHigh;
263 } ATOM_Tonga_Voltage_Lookup_Record;
264 
265 typedef struct _ATOM_Tonga_Voltage_Lookup_Table {
266 	UCHAR ucRevId;
267 	UCHAR ucNumEntries;
268 	ATOM_Tonga_Voltage_Lookup_Record entries[] __counted_by(ucNumEntries);
269 } ATOM_Tonga_Voltage_Lookup_Table;
270 
271 typedef struct _ATOM_Tonga_Fan_Table {
272 	UCHAR   ucRevId;						 /* Change this if the table format changes or version changes so that the other fields are not the same. */
273 	UCHAR   ucTHyst;						 /* Temperature hysteresis. Integer. */
274 	USHORT  usTMin; 						 /* The temperature, in 0.01 centigrades, below which we just run at a minimal PWM. */
275 	USHORT  usTMed; 						 /* The middle temperature where we change slopes. */
276 	USHORT  usTHigh;						 /* The high point above TMed for adjusting the second slope. */
277 	USHORT  usPWMMin;						 /* The minimum PWM value in percent (0.01% increments). */
278 	USHORT  usPWMMed;						 /* The PWM value (in percent) at TMed. */
279 	USHORT  usPWMHigh;						 /* The PWM value at THigh. */
280 	USHORT  usTMax; 						 /* The max temperature */
281 	UCHAR   ucFanControlMode;				  /* Legacy or Fuzzy Fan mode */
282 	USHORT  usFanPWMMax;					  /* Maximum allowed fan power in percent */
283 	USHORT  usFanOutputSensitivity;		  /* Sensitivity of fan reaction to temepature changes */
284 	USHORT  usFanRPMMax;					  /* The default value in RPM */
285 	ULONG  ulMinFanSCLKAcousticLimit;	   /* Minimum Fan Controller SCLK Frequency Acoustic Limit. */
286 	UCHAR   ucTargetTemperature;			 /* Advanced fan controller target temperature. */
287 	UCHAR   ucMinimumPWMLimit; 			  /* The minimum PWM that the advanced fan controller can set.	This should be set to the highest PWM that will run the fan at its lowest RPM. */
288 	USHORT  usReserved;
289 } ATOM_Tonga_Fan_Table;
290 
291 typedef struct _ATOM_Fiji_Fan_Table {
292 	UCHAR   ucRevId;						 /* Change this if the table format changes or version changes so that the other fields are not the same. */
293 	UCHAR   ucTHyst;						 /* Temperature hysteresis. Integer. */
294 	USHORT  usTMin; 						 /* The temperature, in 0.01 centigrades, below which we just run at a minimal PWM. */
295 	USHORT  usTMed; 						 /* The middle temperature where we change slopes. */
296 	USHORT  usTHigh;						 /* The high point above TMed for adjusting the second slope. */
297 	USHORT  usPWMMin;						 /* The minimum PWM value in percent (0.01% increments). */
298 	USHORT  usPWMMed;						 /* The PWM value (in percent) at TMed. */
299 	USHORT  usPWMHigh;						 /* The PWM value at THigh. */
300 	USHORT  usTMax; 						 /* The max temperature */
301 	UCHAR   ucFanControlMode;				  /* Legacy or Fuzzy Fan mode */
302 	USHORT  usFanPWMMax;					  /* Maximum allowed fan power in percent */
303 	USHORT  usFanOutputSensitivity;		  /* Sensitivity of fan reaction to temepature changes */
304 	USHORT  usFanRPMMax;					  /* The default value in RPM */
305 	ULONG  ulMinFanSCLKAcousticLimit;		/* Minimum Fan Controller SCLK Frequency Acoustic Limit. */
306 	UCHAR   ucTargetTemperature;			 /* Advanced fan controller target temperature. */
307 	UCHAR   ucMinimumPWMLimit; 			  /* The minimum PWM that the advanced fan controller can set.	This should be set to the highest PWM that will run the fan at its lowest RPM. */
308 	USHORT  usFanGainEdge;
309 	USHORT  usFanGainHotspot;
310 	USHORT  usFanGainLiquid;
311 	USHORT  usFanGainVrVddc;
312 	USHORT  usFanGainVrMvdd;
313 	USHORT  usFanGainPlx;
314 	USHORT  usFanGainHbm;
315 	USHORT  usReserved;
316 } ATOM_Fiji_Fan_Table;
317 
318 typedef struct _ATOM_Polaris_Fan_Table {
319 	UCHAR   ucRevId;						 /* Change this if the table format changes or version changes so that the other fields are not the same. */
320 	UCHAR   ucTHyst;						 /* Temperature hysteresis. Integer. */
321 	USHORT  usTMin; 						 /* The temperature, in 0.01 centigrades, below which we just run at a minimal PWM. */
322 	USHORT  usTMed; 						 /* The middle temperature where we change slopes. */
323 	USHORT  usTHigh;						 /* The high point above TMed for adjusting the second slope. */
324 	USHORT  usPWMMin;						 /* The minimum PWM value in percent (0.01% increments). */
325 	USHORT  usPWMMed;						 /* The PWM value (in percent) at TMed. */
326 	USHORT  usPWMHigh;						 /* The PWM value at THigh. */
327 	USHORT  usTMax; 						 /* The max temperature */
328 	UCHAR   ucFanControlMode;				  /* Legacy or Fuzzy Fan mode */
329 	USHORT  usFanPWMMax;					  /* Maximum allowed fan power in percent */
330 	USHORT  usFanOutputSensitivity;		  /* Sensitivity of fan reaction to temepature changes */
331 	USHORT  usFanRPMMax;					  /* The default value in RPM */
332 	ULONG  ulMinFanSCLKAcousticLimit;		/* Minimum Fan Controller SCLK Frequency Acoustic Limit. */
333 	UCHAR   ucTargetTemperature;			 /* Advanced fan controller target temperature. */
334 	UCHAR   ucMinimumPWMLimit; 			  /* The minimum PWM that the advanced fan controller can set.	This should be set to the highest PWM that will run the fan at its lowest RPM. */
335 	USHORT  usFanGainEdge;
336 	USHORT  usFanGainHotspot;
337 	USHORT  usFanGainLiquid;
338 	USHORT  usFanGainVrVddc;
339 	USHORT  usFanGainVrMvdd;
340 	USHORT  usFanGainPlx;
341 	USHORT  usFanGainHbm;
342 	UCHAR   ucEnableZeroRPM;
343 	UCHAR   ucFanStopTemperature;
344 	UCHAR   ucFanStartTemperature;
345 	USHORT  usReserved;
346 } ATOM_Polaris_Fan_Table;
347 
348 typedef struct _ATOM_Tonga_Thermal_Controller {
349 	UCHAR ucRevId;
350 	UCHAR ucType;		   /* one of ATOM_TONGA_PP_THERMALCONTROLLER_* */
351 	UCHAR ucI2cLine;		/* as interpreted by DAL I2C */
352 	UCHAR ucI2cAddress;
353 	UCHAR ucFanParameters;	/* Fan Control Parameters. */
354 	UCHAR ucFanMinRPM; 	 /* Fan Minimum RPM (hundreds) -- for display purposes only. */
355 	UCHAR ucFanMaxRPM; 	 /* Fan Maximum RPM (hundreds) -- for display purposes only. */
356 	UCHAR ucReserved;
357 	UCHAR ucFlags;		   /* to be defined */
358 } ATOM_Tonga_Thermal_Controller;
359 
360 typedef struct _ATOM_Tonga_VCE_State_Record {
361 	UCHAR  ucVCEClockIndex;	/*index into usVCEDependencyTableOffset of 'ATOM_Tonga_MM_Dependency_Table' type */
362 	UCHAR  ucFlag;		/* 2 bits indicates memory p-states */
363 	UCHAR  ucSCLKIndex;		/*index into ATOM_Tonga_SCLK_Dependency_Table */
364 	UCHAR  ucMCLKIndex;		/*index into ATOM_Tonga_MCLK_Dependency_Table */
365 } ATOM_Tonga_VCE_State_Record;
366 
367 typedef struct _ATOM_Tonga_VCE_State_Table {
368 	UCHAR ucRevId;
369 	UCHAR ucNumEntries;
370 	ATOM_Tonga_VCE_State_Record entries[] __counted_by(ucNumEntries);
371 } ATOM_Tonga_VCE_State_Table;
372 
373 typedef struct _ATOM_Tonga_PowerTune_Table {
374 	UCHAR  ucRevId;
375 	USHORT usTDP;
376 	USHORT usConfigurableTDP;
377 	USHORT usTDC;
378 	USHORT usBatteryPowerLimit;
379 	USHORT usSmallPowerLimit;
380 	USHORT usLowCACLeakage;
381 	USHORT usHighCACLeakage;
382 	USHORT usMaximumPowerDeliveryLimit;
383 	USHORT usTjMax;
384 	USHORT usPowerTuneDataSetID;
385 	USHORT usEDCLimit;
386 	USHORT usSoftwareShutdownTemp;
387 	USHORT usClockStretchAmount;
388 	USHORT usReserve[2];
389 } ATOM_Tonga_PowerTune_Table;
390 
391 typedef struct _ATOM_Fiji_PowerTune_Table {
392 	UCHAR  ucRevId;
393 	USHORT usTDP;
394 	USHORT usConfigurableTDP;
395 	USHORT usTDC;
396 	USHORT usBatteryPowerLimit;
397 	USHORT usSmallPowerLimit;
398 	USHORT usLowCACLeakage;
399 	USHORT usHighCACLeakage;
400 	USHORT usMaximumPowerDeliveryLimit;
401 	USHORT usTjMax;  /* For Fiji, this is also usTemperatureLimitEdge; */
402 	USHORT usPowerTuneDataSetID;
403 	USHORT usEDCLimit;
404 	USHORT usSoftwareShutdownTemp;
405 	USHORT usClockStretchAmount;
406 	USHORT usTemperatureLimitHotspot;  /*The following are added for Fiji */
407 	USHORT usTemperatureLimitLiquid1;
408 	USHORT usTemperatureLimitLiquid2;
409 	USHORT usTemperatureLimitVrVddc;
410 	USHORT usTemperatureLimitVrMvdd;
411 	USHORT usTemperatureLimitPlx;
412 	UCHAR  ucLiquid1_I2C_address;  /*Liquid */
413 	UCHAR  ucLiquid2_I2C_address;
414 	UCHAR  ucLiquid_I2C_Line;
415 	UCHAR  ucVr_I2C_address;	/*VR */
416 	UCHAR  ucVr_I2C_Line;
417 	UCHAR  ucPlx_I2C_address;  /*PLX */
418 	UCHAR  ucPlx_I2C_Line;
419 	USHORT usReserved;
420 } ATOM_Fiji_PowerTune_Table;
421 
422 typedef struct _ATOM_Polaris_PowerTune_Table {
423     UCHAR  ucRevId;
424     USHORT usTDP;
425     USHORT usConfigurableTDP;
426     USHORT usTDC;
427     USHORT usBatteryPowerLimit;
428     USHORT usSmallPowerLimit;
429     USHORT usLowCACLeakage;
430     USHORT usHighCACLeakage;
431     USHORT usMaximumPowerDeliveryLimit;
432     USHORT usTjMax;  // For Fiji, this is also usTemperatureLimitEdge;
433     USHORT usPowerTuneDataSetID;
434     USHORT usEDCLimit;
435     USHORT usSoftwareShutdownTemp;
436     USHORT usClockStretchAmount;
437     USHORT usTemperatureLimitHotspot;  //The following are added for Fiji
438     USHORT usTemperatureLimitLiquid1;
439     USHORT usTemperatureLimitLiquid2;
440     USHORT usTemperatureLimitVrVddc;
441     USHORT usTemperatureLimitVrMvdd;
442     USHORT usTemperatureLimitPlx;
443     UCHAR  ucLiquid1_I2C_address;  //Liquid
444     UCHAR  ucLiquid2_I2C_address;
445     UCHAR  ucLiquid_I2C_Line;
446     UCHAR  ucVr_I2C_address;  //VR
447     UCHAR  ucVr_I2C_Line;
448     UCHAR  ucPlx_I2C_address;  //PLX
449     UCHAR  ucPlx_I2C_Line;
450     USHORT usBoostPowerLimit;
451     UCHAR  ucCKS_LDO_REFSEL;
452     UCHAR  ucHotSpotOnly;
453     UCHAR  ucReserve;
454     USHORT usReserve;
455 } ATOM_Polaris_PowerTune_Table;
456 
457 #define ATOM_PPM_A_A    1
458 #define ATOM_PPM_A_I    2
459 typedef struct _ATOM_Tonga_PPM_Table {
460 	UCHAR   ucRevId;
461 	UCHAR   ucPpmDesign;		  /*A+I or A+A */
462 	USHORT  usCpuCoreNumber;
463 	ULONG  ulPlatformTDP;
464 	ULONG  ulSmallACPlatformTDP;
465 	ULONG  ulPlatformTDC;
466 	ULONG  ulSmallACPlatformTDC;
467 	ULONG  ulApuTDP;
468 	ULONG  ulDGpuTDP;
469 	ULONG  ulDGpuUlvPower;
470 	ULONG  ulTjmax;
471 } ATOM_Tonga_PPM_Table;
472 
473 typedef struct _ATOM_Tonga_Hard_Limit_Record {
474 	ULONG  ulSCLKLimit;
475 	ULONG  ulMCLKLimit;
476 	USHORT  usVddcLimit;
477 	USHORT  usVddciLimit;
478 	USHORT  usVddgfxLimit;
479 } ATOM_Tonga_Hard_Limit_Record;
480 
481 typedef struct _ATOM_Tonga_Hard_Limit_Table {
482 	UCHAR ucRevId;
483 	UCHAR ucNumEntries;
484 	ATOM_Tonga_Hard_Limit_Record entries[] __counted_by(ucNumEntries);
485 } ATOM_Tonga_Hard_Limit_Table;
486 
487 typedef struct _ATOM_Tonga_GPIO_Table {
488 	UCHAR  ucRevId;
489 	UCHAR  ucVRHotTriggeredSclkDpmIndex;		/* If VRHot signal is triggered SCLK will be limited to this DPM level */
490 	UCHAR  ucReserve[5];
491 } ATOM_Tonga_GPIO_Table;
492 
493 typedef struct _PPTable_Generic_SubTable_Header {
494 	UCHAR  ucRevId;
495 } PPTable_Generic_SubTable_Header;
496 
497 
498 #pragma pack(pop)
499 
500 
501 #endif
502