Linux 4.19.133
[linux/fpc-iii.git] / drivers / gpu / drm / amd / powerplay / inc / vega12 / smu9_driver_if.h
blobb6ffd08784e7ffeff0e89068bf3a6c0009c2145a
1 /*
2 * Copyright 2017 Advanced Micro Devices, Inc.
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:
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
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.
24 #ifndef VEGA12_SMU9_DRIVER_IF_H
25 #define VEGA12_SMU9_DRIVER_IF_H
27 /**** IMPORTANT ***
28 * SMU TEAM: Always increment the interface version if
29 * any structure is changed in this file
31 #define SMU9_DRIVER_IF_VERSION 0x10
33 #define PPTABLE_V12_SMU_VERSION 1
35 #define NUM_GFXCLK_DPM_LEVELS 16
36 #define NUM_VCLK_DPM_LEVELS 8
37 #define NUM_DCLK_DPM_LEVELS 8
38 #define NUM_ECLK_DPM_LEVELS 8
39 #define NUM_MP0CLK_DPM_LEVELS 2
40 #define NUM_UCLK_DPM_LEVELS 4
41 #define NUM_SOCCLK_DPM_LEVELS 8
42 #define NUM_DCEFCLK_DPM_LEVELS 8
43 #define NUM_DISPCLK_DPM_LEVELS 8
44 #define NUM_PIXCLK_DPM_LEVELS 8
45 #define NUM_PHYCLK_DPM_LEVELS 8
46 #define NUM_LINK_LEVELS 2
48 #define MAX_GFXCLK_DPM_LEVEL (NUM_GFXCLK_DPM_LEVELS - 1)
49 #define MAX_VCLK_DPM_LEVEL (NUM_VCLK_DPM_LEVELS - 1)
50 #define MAX_DCLK_DPM_LEVEL (NUM_DCLK_DPM_LEVELS - 1)
51 #define MAX_ECLK_DPM_LEVEL (NUM_ECLK_DPM_LEVELS - 1)
52 #define MAX_MP0CLK_DPM_LEVEL (NUM_MP0CLK_DPM_LEVELS - 1)
53 #define MAX_UCLK_DPM_LEVEL (NUM_UCLK_DPM_LEVELS - 1)
54 #define MAX_SOCCLK_DPM_LEVEL (NUM_SOCCLK_DPM_LEVELS - 1)
55 #define MAX_DCEFCLK_DPM_LEVEL (NUM_DCEFCLK_DPM_LEVELS - 1)
56 #define MAX_DISPCLK_DPM_LEVEL (NUM_DISPCLK_DPM_LEVELS - 1)
57 #define MAX_PIXCLK_DPM_LEVEL (NUM_PIXCLK_DPM_LEVELS - 1)
58 #define MAX_PHYCLK_DPM_LEVEL (NUM_PHYCLK_DPM_LEVELS - 1)
59 #define MAX_LINK_LEVEL (NUM_LINK_LEVELS - 1)
62 #define PPSMC_GeminiModeNone 0
63 #define PPSMC_GeminiModeMaster 1
64 #define PPSMC_GeminiModeSlave 2
67 #define FEATURE_DPM_PREFETCHER_BIT 0
68 #define FEATURE_DPM_GFXCLK_BIT 1
69 #define FEATURE_DPM_UCLK_BIT 2
70 #define FEATURE_DPM_SOCCLK_BIT 3
71 #define FEATURE_DPM_UVD_BIT 4
72 #define FEATURE_DPM_VCE_BIT 5
73 #define FEATURE_ULV_BIT 6
74 #define FEATURE_DPM_MP0CLK_BIT 7
75 #define FEATURE_DPM_LINK_BIT 8
76 #define FEATURE_DPM_DCEFCLK_BIT 9
77 #define FEATURE_DS_GFXCLK_BIT 10
78 #define FEATURE_DS_SOCCLK_BIT 11
79 #define FEATURE_DS_LCLK_BIT 12
80 #define FEATURE_PPT_BIT 13
81 #define FEATURE_TDC_BIT 14
82 #define FEATURE_THERMAL_BIT 15
83 #define FEATURE_GFX_PER_CU_CG_BIT 16
84 #define FEATURE_RM_BIT 17
85 #define FEATURE_DS_DCEFCLK_BIT 18
86 #define FEATURE_ACDC_BIT 19
87 #define FEATURE_VR0HOT_BIT 20
88 #define FEATURE_VR1HOT_BIT 21
89 #define FEATURE_FW_CTF_BIT 22
90 #define FEATURE_LED_DISPLAY_BIT 23
91 #define FEATURE_FAN_CONTROL_BIT 24
92 #define FEATURE_GFX_EDC_BIT 25
93 #define FEATURE_GFXOFF_BIT 26
94 #define FEATURE_CG_BIT 27
95 #define FEATURE_ACG_BIT 28
96 #define FEATURE_SPARE_29_BIT 29
97 #define FEATURE_SPARE_30_BIT 30
98 #define FEATURE_SPARE_31_BIT 31
100 #define NUM_FEATURES 32
102 #define FEATURE_DPM_PREFETCHER_MASK (1 << FEATURE_DPM_PREFETCHER_BIT )
103 #define FEATURE_DPM_GFXCLK_MASK (1 << FEATURE_DPM_GFXCLK_BIT )
104 #define FEATURE_DPM_UCLK_MASK (1 << FEATURE_DPM_UCLK_BIT )
105 #define FEATURE_DPM_SOCCLK_MASK (1 << FEATURE_DPM_SOCCLK_BIT )
106 #define FEATURE_DPM_UVD_MASK (1 << FEATURE_DPM_UVD_BIT )
107 #define FEATURE_DPM_VCE_MASK (1 << FEATURE_DPM_VCE_BIT )
108 #define FEATURE_ULV_MASK (1 << FEATURE_ULV_BIT )
109 #define FEATURE_DPM_MP0CLK_MASK (1 << FEATURE_DPM_MP0CLK_BIT )
110 #define FEATURE_DPM_LINK_MASK (1 << FEATURE_DPM_LINK_BIT )
111 #define FEATURE_DPM_DCEFCLK_MASK (1 << FEATURE_DPM_DCEFCLK_BIT )
112 #define FEATURE_DS_GFXCLK_MASK (1 << FEATURE_DS_GFXCLK_BIT )
113 #define FEATURE_DS_SOCCLK_MASK (1 << FEATURE_DS_SOCCLK_BIT )
114 #define FEATURE_DS_LCLK_MASK (1 << FEATURE_DS_LCLK_BIT )
115 #define FEATURE_PPT_MASK (1 << FEATURE_PPT_BIT )
116 #define FEATURE_TDC_MASK (1 << FEATURE_TDC_BIT )
117 #define FEATURE_THERMAL_MASK (1 << FEATURE_THERMAL_BIT )
118 #define FEATURE_GFX_PER_CU_CG_MASK (1 << FEATURE_GFX_PER_CU_CG_BIT )
119 #define FEATURE_RM_MASK (1 << FEATURE_RM_BIT )
120 #define FEATURE_DS_DCEFCLK_MASK (1 << FEATURE_DS_DCEFCLK_BIT )
121 #define FEATURE_ACDC_MASK (1 << FEATURE_ACDC_BIT )
122 #define FEATURE_VR0HOT_MASK (1 << FEATURE_VR0HOT_BIT )
123 #define FEATURE_VR1HOT_MASK (1 << FEATURE_VR1HOT_BIT )
124 #define FEATURE_FW_CTF_MASK (1 << FEATURE_FW_CTF_BIT )
125 #define FEATURE_LED_DISPLAY_MASK (1 << FEATURE_LED_DISPLAY_BIT )
126 #define FEATURE_FAN_CONTROL_MASK (1 << FEATURE_FAN_CONTROL_BIT )
127 #define FEATURE_GFX_EDC_MASK (1 << FEATURE_GFX_EDC_BIT )
128 #define FEATURE_GFXOFF_MASK (1 << FEATURE_GFXOFF_BIT )
129 #define FEATURE_CG_MASK (1 << FEATURE_CG_BIT )
130 #define FEATURE_ACG_MASK (1 << FEATURE_ACG_BIT)
131 #define FEATURE_SPARE_29_MASK (1 << FEATURE_SPARE_29_BIT )
132 #define FEATURE_SPARE_30_MASK (1 << FEATURE_SPARE_30_BIT )
133 #define FEATURE_SPARE_31_MASK (1 << FEATURE_SPARE_31_BIT )
136 #define DPM_OVERRIDE_DISABLE_SOCCLK_PID 0x00000001
137 #define DPM_OVERRIDE_DISABLE_UCLK_PID 0x00000002
138 #define DPM_OVERRIDE_ENABLE_VOLT_LINK_UVD_SOCCLK 0x00000004
139 #define DPM_OVERRIDE_ENABLE_VOLT_LINK_UVD_UCLK 0x00000008
140 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_VCLK_SOCCLK 0x00000010
141 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_VCLK_UCLK 0x00000020
142 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_DCLK_SOCCLK 0x00000040
143 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_DCLK_UCLK 0x00000080
144 #define DPM_OVERRIDE_ENABLE_VOLT_LINK_VCE_SOCCLK 0x00000100
145 #define DPM_OVERRIDE_ENABLE_VOLT_LINK_VCE_UCLK 0x00000200
146 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_ECLK_SOCCLK 0x00000400
147 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_ECLK_UCLK 0x00000800
148 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_GFXCLK_SOCCLK 0x00001000
149 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_GFXCLK_UCLK 0x00002000
150 #define DPM_OVERRIDE_ENABLE_GFXOFF_GFXCLK_SWITCH 0x00004000
151 #define DPM_OVERRIDE_ENABLE_GFXOFF_SOCCLK_SWITCH 0x00008000
152 #define DPM_OVERRIDE_ENABLE_GFXOFF_UCLK_SWITCH 0x00010000
155 #define VR_MAPPING_VR_SELECT_MASK 0x01
156 #define VR_MAPPING_VR_SELECT_SHIFT 0x00
158 #define VR_MAPPING_PLANE_SELECT_MASK 0x02
159 #define VR_MAPPING_PLANE_SELECT_SHIFT 0x01
162 #define PSI_SEL_VR0_PLANE0_PSI0 0x01
163 #define PSI_SEL_VR0_PLANE0_PSI1 0x02
164 #define PSI_SEL_VR0_PLANE1_PSI0 0x04
165 #define PSI_SEL_VR0_PLANE1_PSI1 0x08
166 #define PSI_SEL_VR1_PLANE0_PSI0 0x10
167 #define PSI_SEL_VR1_PLANE0_PSI1 0x20
168 #define PSI_SEL_VR1_PLANE1_PSI0 0x40
169 #define PSI_SEL_VR1_PLANE1_PSI1 0x80
172 #define THROTTLER_STATUS_PADDING_BIT 0
173 #define THROTTLER_STATUS_TEMP_EDGE_BIT 1
174 #define THROTTLER_STATUS_TEMP_HOTSPOT_BIT 2
175 #define THROTTLER_STATUS_TEMP_HBM_BIT 3
176 #define THROTTLER_STATUS_TEMP_VR_GFX_BIT 4
177 #define THROTTLER_STATUS_TEMP_VR_MEM_BIT 5
178 #define THROTTLER_STATUS_TEMP_LIQUID_BIT 6
179 #define THROTTLER_STATUS_TEMP_PLX_BIT 7
180 #define THROTTLER_STATUS_TEMP_SKIN_BIT 8
181 #define THROTTLER_STATUS_TDC_GFX_BIT 9
182 #define THROTTLER_STATUS_TDC_SOC_BIT 10
183 #define THROTTLER_STATUS_PPT_BIT 11
184 #define THROTTLER_STATUS_FIT_BIT 12
185 #define THROTTLER_STATUS_PPM_BIT 13
188 #define TABLE_TRANSFER_OK 0x0
189 #define TABLE_TRANSFER_FAILED 0xFF
192 #define WORKLOAD_DEFAULT_BIT 0
193 #define WORKLOAD_PPLIB_FULL_SCREEN_3D_BIT 1
194 #define WORKLOAD_PPLIB_POWER_SAVING_BIT 2
195 #define WORKLOAD_PPLIB_VIDEO_BIT 3
196 #define WORKLOAD_PPLIB_VR_BIT 4
197 #define WORKLOAD_PPLIB_COMPUTE_BIT 5
198 #define WORKLOAD_PPLIB_CUSTOM_BIT 6
199 #define WORKLOAD_PPLIB_COUNT 7
201 typedef struct {
202 uint32_t a;
203 uint32_t b;
204 uint32_t c;
205 } QuadraticInt_t;
207 typedef struct {
208 uint32_t m;
209 uint32_t b;
210 } LinearInt_t;
212 typedef struct {
213 uint32_t a;
214 uint32_t b;
215 uint32_t c;
216 } DroopInt_t;
218 typedef enum {
219 PPCLK_GFXCLK,
220 PPCLK_VCLK,
221 PPCLK_DCLK,
222 PPCLK_ECLK,
223 PPCLK_SOCCLK,
224 PPCLK_UCLK,
225 PPCLK_DCEFCLK,
226 PPCLK_DISPCLK,
227 PPCLK_PIXCLK,
228 PPCLK_PHYCLK,
229 PPCLK_COUNT,
230 } PPCLK_e;
232 enum {
233 VOLTAGE_MODE_AVFS,
234 VOLTAGE_MODE_AVFS_SS,
235 VOLTAGE_MODE_SS,
236 VOLTAGE_MODE_COUNT,
239 typedef struct {
240 uint8_t VoltageMode;
241 uint8_t SnapToDiscrete;
242 uint8_t NumDiscreteLevels;
243 uint8_t padding;
244 LinearInt_t ConversionToAvfsClk;
245 QuadraticInt_t SsCurve;
246 } DpmDescriptor_t;
248 typedef struct {
249 uint32_t Version;
252 uint32_t FeaturesToRun[2];
255 uint16_t SocketPowerLimitAc0;
256 uint16_t SocketPowerLimitAc0Tau;
257 uint16_t SocketPowerLimitAc1;
258 uint16_t SocketPowerLimitAc1Tau;
259 uint16_t SocketPowerLimitAc2;
260 uint16_t SocketPowerLimitAc2Tau;
261 uint16_t SocketPowerLimitAc3;
262 uint16_t SocketPowerLimitAc3Tau;
263 uint16_t SocketPowerLimitDc;
264 uint16_t SocketPowerLimitDcTau;
265 uint16_t TdcLimitSoc;
266 uint16_t TdcLimitSocTau;
267 uint16_t TdcLimitGfx;
268 uint16_t TdcLimitGfxTau;
270 uint16_t TedgeLimit;
271 uint16_t ThotspotLimit;
272 uint16_t ThbmLimit;
273 uint16_t Tvr_gfxLimit;
274 uint16_t Tvr_memLimit;
275 uint16_t Tliquid1Limit;
276 uint16_t Tliquid2Limit;
277 uint16_t TplxLimit;
278 uint32_t FitLimit;
280 uint16_t PpmPowerLimit;
281 uint16_t PpmTemperatureThreshold;
283 uint8_t MemoryOnPackage;
284 uint8_t padding8_limits[3];
287 uint16_t UlvVoltageOffsetSoc;
288 uint16_t UlvVoltageOffsetGfx;
290 uint8_t UlvSmnclkDid;
291 uint8_t UlvMp1clkDid;
292 uint8_t UlvGfxclkBypass;
293 uint8_t Padding234;
296 uint16_t MinVoltageGfx;
297 uint16_t MinVoltageSoc;
298 uint16_t MaxVoltageGfx;
299 uint16_t MaxVoltageSoc;
301 uint16_t LoadLineResistance;
302 uint16_t LoadLine_padding;
305 DpmDescriptor_t DpmDescriptor[PPCLK_COUNT];
307 uint16_t FreqTableGfx [NUM_GFXCLK_DPM_LEVELS ];
308 uint16_t FreqTableVclk [NUM_VCLK_DPM_LEVELS ];
309 uint16_t FreqTableDclk [NUM_DCLK_DPM_LEVELS ];
310 uint16_t FreqTableEclk [NUM_ECLK_DPM_LEVELS ];
311 uint16_t FreqTableSocclk [NUM_SOCCLK_DPM_LEVELS ];
312 uint16_t FreqTableUclk [NUM_UCLK_DPM_LEVELS ];
313 uint16_t FreqTableDcefclk [NUM_DCEFCLK_DPM_LEVELS ];
314 uint16_t FreqTableDispclk [NUM_DISPCLK_DPM_LEVELS ];
315 uint16_t FreqTablePixclk [NUM_PIXCLK_DPM_LEVELS ];
316 uint16_t FreqTablePhyclk [NUM_PHYCLK_DPM_LEVELS ];
318 uint16_t DcModeMaxFreq [PPCLK_COUNT ];
321 uint16_t Mp0clkFreq [NUM_MP0CLK_DPM_LEVELS];
322 uint16_t Mp0DpmVoltage [NUM_MP0CLK_DPM_LEVELS];
325 uint16_t GfxclkFidle;
326 uint16_t GfxclkSlewRate;
327 uint16_t CksEnableFreq;
328 uint16_t Padding789;
329 QuadraticInt_t CksVoltageOffset;
330 uint16_t AcgThresholdFreqHigh;
331 uint16_t AcgThresholdFreqLow;
332 uint16_t GfxclkDsMaxFreq;
333 uint8_t Padding456[2];
336 uint8_t LowestUclkReservedForUlv;
337 uint8_t Padding8_Uclk[3];
340 uint8_t PcieGenSpeed[NUM_LINK_LEVELS];
341 uint8_t PcieLaneCount[NUM_LINK_LEVELS];
342 uint16_t LclkFreq[NUM_LINK_LEVELS];
345 uint16_t EnableTdpm;
346 uint16_t TdpmHighHystTemperature;
347 uint16_t TdpmLowHystTemperature;
348 uint16_t GfxclkFreqHighTempLimit;
351 uint16_t FanStopTemp;
352 uint16_t FanStartTemp;
354 uint16_t FanGainEdge;
355 uint16_t FanGainHotspot;
356 uint16_t FanGainLiquid;
357 uint16_t FanGainVrVddc;
358 uint16_t FanGainVrMvdd;
359 uint16_t FanGainPlx;
360 uint16_t FanGainHbm;
361 uint16_t FanPwmMin;
362 uint16_t FanAcousticLimitRpm;
363 uint16_t FanThrottlingRpm;
364 uint16_t FanMaximumRpm;
365 uint16_t FanTargetTemperature;
366 uint16_t FanTargetGfxclk;
367 uint8_t FanZeroRpmEnable;
368 uint8_t FanTachEdgePerRev;
372 int16_t FuzzyFan_ErrorSetDelta;
373 int16_t FuzzyFan_ErrorRateSetDelta;
374 int16_t FuzzyFan_PwmSetDelta;
375 uint16_t FuzzyFan_Reserved;
380 uint8_t OverrideAvfsGb;
381 uint8_t Padding8_Avfs[3];
383 QuadraticInt_t qAvfsGb;
384 DroopInt_t dBtcGbGfxCksOn;
385 DroopInt_t dBtcGbGfxCksOff;
386 DroopInt_t dBtcGbGfxAcg;
387 DroopInt_t dBtcGbSoc;
388 LinearInt_t qAgingGbGfx;
389 LinearInt_t qAgingGbSoc;
391 QuadraticInt_t qStaticVoltageOffsetGfx;
392 QuadraticInt_t qStaticVoltageOffsetSoc;
394 uint16_t DcTolGfx;
395 uint16_t DcTolSoc;
397 uint8_t DcBtcGfxEnabled;
398 uint8_t DcBtcSocEnabled;
399 uint8_t Padding8_GfxBtc[2];
401 uint16_t DcBtcGfxMin;
402 uint16_t DcBtcGfxMax;
404 uint16_t DcBtcSocMin;
405 uint16_t DcBtcSocMax;
409 uint32_t DebugOverrides;
410 QuadraticInt_t ReservedEquation0;
411 QuadraticInt_t ReservedEquation1;
412 QuadraticInt_t ReservedEquation2;
413 QuadraticInt_t ReservedEquation3;
415 uint16_t MinVoltageUlvGfx;
416 uint16_t MinVoltageUlvSoc;
418 uint32_t Reserved[14];
422 uint8_t Liquid1_I2C_address;
423 uint8_t Liquid2_I2C_address;
424 uint8_t Vr_I2C_address;
425 uint8_t Plx_I2C_address;
427 uint8_t Liquid_I2C_LineSCL;
428 uint8_t Liquid_I2C_LineSDA;
429 uint8_t Vr_I2C_LineSCL;
430 uint8_t Vr_I2C_LineSDA;
432 uint8_t Plx_I2C_LineSCL;
433 uint8_t Plx_I2C_LineSDA;
434 uint8_t VrSensorPresent;
435 uint8_t LiquidSensorPresent;
437 uint16_t MaxVoltageStepGfx;
438 uint16_t MaxVoltageStepSoc;
440 uint8_t VddGfxVrMapping;
441 uint8_t VddSocVrMapping;
442 uint8_t VddMem0VrMapping;
443 uint8_t VddMem1VrMapping;
445 uint8_t GfxUlvPhaseSheddingMask;
446 uint8_t SocUlvPhaseSheddingMask;
447 uint8_t ExternalSensorPresent;
448 uint8_t Padding8_V;
451 uint16_t GfxMaxCurrent;
452 int8_t GfxOffset;
453 uint8_t Padding_TelemetryGfx;
455 uint16_t SocMaxCurrent;
456 int8_t SocOffset;
457 uint8_t Padding_TelemetrySoc;
459 uint16_t Mem0MaxCurrent;
460 int8_t Mem0Offset;
461 uint8_t Padding_TelemetryMem0;
463 uint16_t Mem1MaxCurrent;
464 int8_t Mem1Offset;
465 uint8_t Padding_TelemetryMem1;
468 uint8_t AcDcGpio;
469 uint8_t AcDcPolarity;
470 uint8_t VR0HotGpio;
471 uint8_t VR0HotPolarity;
473 uint8_t VR1HotGpio;
474 uint8_t VR1HotPolarity;
475 uint8_t Padding1;
476 uint8_t Padding2;
480 uint8_t LedPin0;
481 uint8_t LedPin1;
482 uint8_t LedPin2;
483 uint8_t padding8_4;
486 uint8_t PllGfxclkSpreadEnabled;
487 uint8_t PllGfxclkSpreadPercent;
488 uint16_t PllGfxclkSpreadFreq;
490 uint8_t UclkSpreadEnabled;
491 uint8_t UclkSpreadPercent;
492 uint16_t UclkSpreadFreq;
494 uint8_t SocclkSpreadEnabled;
495 uint8_t SocclkSpreadPercent;
496 uint16_t SocclkSpreadFreq;
498 uint8_t AcgGfxclkSpreadEnabled;
499 uint8_t AcgGfxclkSpreadPercent;
500 uint16_t AcgGfxclkSpreadFreq;
502 uint8_t Vr2_I2C_address;
503 uint8_t padding_vr2[3];
505 uint32_t BoardReserved[9];
508 uint32_t MmHubPadding[7];
510 } PPTable_t;
512 typedef struct {
514 uint16_t GfxclkAverageLpfTau;
515 uint16_t SocclkAverageLpfTau;
516 uint16_t UclkAverageLpfTau;
517 uint16_t GfxActivityLpfTau;
518 uint16_t UclkActivityLpfTau;
521 uint32_t MmHubPadding[7];
522 } DriverSmuConfig_t;
524 typedef struct {
526 uint16_t GfxclkFmin;
527 uint16_t GfxclkFmax;
528 uint16_t GfxclkFreq1;
529 uint16_t GfxclkOffsetVolt1;
530 uint16_t GfxclkFreq2;
531 uint16_t GfxclkOffsetVolt2;
532 uint16_t GfxclkFreq3;
533 uint16_t GfxclkOffsetVolt3;
534 uint16_t UclkFmax;
535 int16_t OverDrivePct;
536 uint16_t FanMaximumRpm;
537 uint16_t FanMinimumPwm;
538 uint16_t FanTargetTemperature;
539 uint16_t MaxOpTemp;
541 } OverDriveTable_t;
543 typedef struct {
544 uint16_t CurrClock[PPCLK_COUNT];
545 uint16_t AverageGfxclkFrequency;
546 uint16_t AverageSocclkFrequency;
547 uint16_t AverageUclkFrequency ;
548 uint16_t AverageGfxActivity ;
549 uint16_t AverageUclkActivity ;
550 uint8_t CurrSocVoltageOffset ;
551 uint8_t CurrGfxVoltageOffset ;
552 uint8_t CurrMemVidOffset ;
553 uint8_t Padding8 ;
554 uint16_t CurrSocketPower ;
555 uint16_t TemperatureEdge ;
556 uint16_t TemperatureHotspot ;
557 uint16_t TemperatureHBM ;
558 uint16_t TemperatureVrGfx ;
559 uint16_t TemperatureVrMem ;
560 uint16_t TemperatureLiquid ;
561 uint16_t TemperaturePlx ;
562 uint32_t ThrottlerStatus ;
564 uint8_t LinkDpmLevel;
565 uint8_t Padding[3];
568 uint32_t MmHubPadding[7];
569 } SmuMetrics_t;
571 typedef struct {
572 uint16_t MinClock;
573 uint16_t MaxClock;
574 uint16_t MinUclk;
575 uint16_t MaxUclk;
577 uint8_t WmSetting;
578 uint8_t Padding[3];
579 } WatermarkRowGeneric_t;
581 #define NUM_WM_RANGES 4
583 typedef enum {
584 WM_SOCCLK = 0,
585 WM_DCEFCLK,
586 WM_COUNT_PP,
587 } WM_CLOCK_e;
589 typedef struct {
591 WatermarkRowGeneric_t WatermarkRow[WM_COUNT_PP][NUM_WM_RANGES];
593 uint32_t MmHubPadding[7];
594 } Watermarks_t;
596 typedef struct {
597 uint16_t avgPsmCount[30];
598 uint16_t minPsmCount[30];
599 float avgPsmVoltage[30];
600 float minPsmVoltage[30];
602 uint32_t MmHubPadding[7];
603 } AvfsDebugTable_t;
605 typedef struct {
606 uint8_t AvfsEn;
607 uint8_t AvfsVersion;
608 uint8_t OverrideVFT;
609 uint8_t OverrideAvfsGb;
611 uint8_t OverrideTemperatures;
612 uint8_t OverrideVInversion;
613 uint8_t OverrideP2V;
614 uint8_t OverrideP2VCharzFreq;
616 int32_t VFT0_m1;
617 int32_t VFT0_m2;
618 int32_t VFT0_b;
620 int32_t VFT1_m1;
621 int32_t VFT1_m2;
622 int32_t VFT1_b;
624 int32_t VFT2_m1;
625 int32_t VFT2_m2;
626 int32_t VFT2_b;
628 int32_t AvfsGb0_m1;
629 int32_t AvfsGb0_m2;
630 int32_t AvfsGb0_b;
632 int32_t AcBtcGb_m1;
633 int32_t AcBtcGb_m2;
634 int32_t AcBtcGb_b;
636 uint32_t AvfsTempCold;
637 uint32_t AvfsTempMid;
638 uint32_t AvfsTempHot;
640 uint32_t GfxVInversion;
641 uint32_t SocVInversion;
643 int32_t P2V_m1;
644 int32_t P2V_m2;
645 int32_t P2V_b;
647 uint32_t P2VCharzFreq;
649 uint32_t EnabledAvfsModules;
651 uint32_t MmHubPadding[7];
652 } AvfsFuseOverride_t;
654 typedef struct {
656 uint8_t Gfx_ActiveHystLimit;
657 uint8_t Gfx_IdleHystLimit;
658 uint8_t Gfx_FPS;
659 uint8_t Gfx_MinActiveFreqType;
660 uint8_t Gfx_BoosterFreqType;
661 uint8_t Gfx_UseRlcBusy;
662 uint16_t Gfx_MinActiveFreq;
663 uint16_t Gfx_BoosterFreq;
664 uint16_t Gfx_PD_Data_time_constant;
665 uint32_t Gfx_PD_Data_limit_a;
666 uint32_t Gfx_PD_Data_limit_b;
667 uint32_t Gfx_PD_Data_limit_c;
668 uint32_t Gfx_PD_Data_error_coeff;
669 uint32_t Gfx_PD_Data_error_rate_coeff;
671 uint8_t Soc_ActiveHystLimit;
672 uint8_t Soc_IdleHystLimit;
673 uint8_t Soc_FPS;
674 uint8_t Soc_MinActiveFreqType;
675 uint8_t Soc_BoosterFreqType;
676 uint8_t Soc_UseRlcBusy;
677 uint16_t Soc_MinActiveFreq;
678 uint16_t Soc_BoosterFreq;
679 uint16_t Soc_PD_Data_time_constant;
680 uint32_t Soc_PD_Data_limit_a;
681 uint32_t Soc_PD_Data_limit_b;
682 uint32_t Soc_PD_Data_limit_c;
683 uint32_t Soc_PD_Data_error_coeff;
684 uint32_t Soc_PD_Data_error_rate_coeff;
686 uint8_t Mem_ActiveHystLimit;
687 uint8_t Mem_IdleHystLimit;
688 uint8_t Mem_FPS;
689 uint8_t Mem_MinActiveFreqType;
690 uint8_t Mem_BoosterFreqType;
691 uint8_t Mem_UseRlcBusy;
692 uint16_t Mem_MinActiveFreq;
693 uint16_t Mem_BoosterFreq;
694 uint16_t Mem_PD_Data_time_constant;
695 uint32_t Mem_PD_Data_limit_a;
696 uint32_t Mem_PD_Data_limit_b;
697 uint32_t Mem_PD_Data_limit_c;
698 uint32_t Mem_PD_Data_error_coeff;
699 uint32_t Mem_PD_Data_error_rate_coeff;
701 } DpmActivityMonitorCoeffInt_t;
706 #define TABLE_PPTABLE 0
707 #define TABLE_WATERMARKS 1
708 #define TABLE_AVFS 2
709 #define TABLE_AVFS_PSM_DEBUG 3
710 #define TABLE_AVFS_FUSE_OVERRIDE 4
711 #define TABLE_PMSTATUSLOG 5
712 #define TABLE_SMU_METRICS 6
713 #define TABLE_DRIVER_SMU_CONFIG 7
714 #define TABLE_ACTIVITY_MONITOR_COEFF 8
715 #define TABLE_OVERDRIVE 9
716 #define TABLE_COUNT 10
719 #define UCLK_SWITCH_SLOW 0
720 #define UCLK_SWITCH_FAST 1
723 #define SQ_Enable_MASK 0x1
724 #define SQ_IR_MASK 0x2
725 #define SQ_PCC_MASK 0x4
726 #define SQ_EDC_MASK 0x8
728 #define TCP_Enable_MASK 0x100
729 #define TCP_IR_MASK 0x200
730 #define TCP_PCC_MASK 0x400
731 #define TCP_EDC_MASK 0x800
733 #define TD_Enable_MASK 0x10000
734 #define TD_IR_MASK 0x20000
735 #define TD_PCC_MASK 0x40000
736 #define TD_EDC_MASK 0x80000
738 #define DB_Enable_MASK 0x1000000
739 #define DB_IR_MASK 0x2000000
740 #define DB_PCC_MASK 0x4000000
741 #define DB_EDC_MASK 0x8000000
743 #define SQ_Enable_SHIFT 0
744 #define SQ_IR_SHIFT 1
745 #define SQ_PCC_SHIFT 2
746 #define SQ_EDC_SHIFT 3
748 #define TCP_Enable_SHIFT 8
749 #define TCP_IR_SHIFT 9
750 #define TCP_PCC_SHIFT 10
751 #define TCP_EDC_SHIFT 11
753 #define TD_Enable_SHIFT 16
754 #define TD_IR_SHIFT 17
755 #define TD_PCC_SHIFT 18
756 #define TD_EDC_SHIFT 19
758 #define DB_Enable_SHIFT 24
759 #define DB_IR_SHIFT 25
760 #define DB_PCC_SHIFT 26
761 #define DB_EDC_SHIFT 27
763 #define REMOVE_FMAX_MARGIN_BIT 0x0
764 #define REMOVE_DCTOL_MARGIN_BIT 0x1
765 #define REMOVE_PLATFORM_MARGIN_BIT 0x2
767 #endif