]> asedeno.scripts.mit.edu Git - linux.git/blob - drivers/gpu/drm/amd/powerplay/inc/smu11_driver_if.h
drm/amd/powerplay/vega20: correct the hwmon interface ppt limit output
[linux.git] / drivers / gpu / drm / amd / powerplay / inc / smu11_driver_if.h
1 /*
2  * Copyright 2018 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 SMU11_DRIVER_IF_H
25 #define SMU11_DRIVER_IF_H
26
27 // *** IMPORTANT ***
28 // SMU TEAM: Always increment the interface version if
29 // any structure is changed in this file
30 #define SMU11_DRIVER_IF_VERSION 0x11
31
32 #define PPTABLE_V20_SMU_VERSION 2
33
34 #define NUM_GFXCLK_DPM_LEVELS  16
35 #define NUM_VCLK_DPM_LEVELS    8
36 #define NUM_DCLK_DPM_LEVELS    8
37 #define NUM_ECLK_DPM_LEVELS    8
38 #define NUM_MP0CLK_DPM_LEVELS  2
39 #define NUM_SOCCLK_DPM_LEVELS  8
40 #define NUM_UCLK_DPM_LEVELS    4
41 #define NUM_FCLK_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
47 #define NUM_XGMI_LEVELS        2
48
49 #define MAX_GFXCLK_DPM_LEVEL  (NUM_GFXCLK_DPM_LEVELS  - 1)
50 #define MAX_VCLK_DPM_LEVEL    (NUM_VCLK_DPM_LEVELS    - 1)
51 #define MAX_DCLK_DPM_LEVEL    (NUM_DCLK_DPM_LEVELS    - 1)
52 #define MAX_ECLK_DPM_LEVEL    (NUM_ECLK_DPM_LEVELS    - 1)
53 #define MAX_MP0CLK_DPM_LEVEL  (NUM_MP0CLK_DPM_LEVELS  - 1)
54 #define MAX_SOCCLK_DPM_LEVEL  (NUM_SOCCLK_DPM_LEVELS  - 1)
55 #define MAX_UCLK_DPM_LEVEL    (NUM_UCLK_DPM_LEVELS    - 1)
56 #define MAX_FCLK_DPM_LEVEL    (NUM_FCLK_DPM_LEVELS    - 1)
57 #define MAX_DCEFCLK_DPM_LEVEL (NUM_DCEFCLK_DPM_LEVELS - 1)
58 #define MAX_DISPCLK_DPM_LEVEL (NUM_DISPCLK_DPM_LEVELS - 1)
59 #define MAX_PIXCLK_DPM_LEVEL  (NUM_PIXCLK_DPM_LEVELS  - 1)
60 #define MAX_PHYCLK_DPM_LEVEL  (NUM_PHYCLK_DPM_LEVELS  - 1)
61 #define MAX_LINK_LEVEL        (NUM_LINK_LEVELS        - 1)
62 #define MAX_XGMI_LEVEL        (NUM_XGMI_LEVELS        - 1)
63
64 #define PPSMC_GeminiModeNone   0
65 #define PPSMC_GeminiModeMaster 1
66 #define PPSMC_GeminiModeSlave  2
67
68
69 #define FEATURE_DPM_PREFETCHER_BIT      0
70 #define FEATURE_DPM_GFXCLK_BIT          1
71 #define FEATURE_DPM_UCLK_BIT            2
72 #define FEATURE_DPM_SOCCLK_BIT          3
73 #define FEATURE_DPM_UVD_BIT             4
74 #define FEATURE_DPM_VCE_BIT             5
75 #define FEATURE_ULV_BIT                 6
76 #define FEATURE_DPM_MP0CLK_BIT          7
77 #define FEATURE_DPM_LINK_BIT            8
78 #define FEATURE_DPM_DCEFCLK_BIT         9
79 #define FEATURE_DS_GFXCLK_BIT           10
80 #define FEATURE_DS_SOCCLK_BIT           11
81 #define FEATURE_DS_LCLK_BIT             12
82 #define FEATURE_PPT_BIT                 13
83 #define FEATURE_TDC_BIT                 14
84 #define FEATURE_THERMAL_BIT             15
85 #define FEATURE_GFX_PER_CU_CG_BIT       16
86 #define FEATURE_RM_BIT                  17
87 #define FEATURE_DS_DCEFCLK_BIT          18
88 #define FEATURE_ACDC_BIT                19
89 #define FEATURE_VR0HOT_BIT              20
90 #define FEATURE_VR1HOT_BIT              21
91 #define FEATURE_FW_CTF_BIT              22
92 #define FEATURE_LED_DISPLAY_BIT         23
93 #define FEATURE_FAN_CONTROL_BIT         24
94 #define FEATURE_GFX_EDC_BIT             25
95 #define FEATURE_GFXOFF_BIT              26
96 #define FEATURE_CG_BIT                  27
97 #define FEATURE_DPM_FCLK_BIT            28
98 #define FEATURE_DS_FCLK_BIT             29
99 #define FEATURE_DS_MP1CLK_BIT           30
100 #define FEATURE_DS_MP0CLK_BIT           31
101 #define FEATURE_XGMI_BIT                32
102 #define FEATURE_SPARE_33_BIT            33
103 #define FEATURE_SPARE_34_BIT            34
104 #define FEATURE_SPARE_35_BIT            35
105 #define FEATURE_SPARE_36_BIT            36
106 #define FEATURE_SPARE_37_BIT            37
107 #define FEATURE_SPARE_38_BIT            38
108 #define FEATURE_SPARE_39_BIT            39
109 #define FEATURE_SPARE_40_BIT            40
110 #define FEATURE_SPARE_41_BIT            41
111 #define FEATURE_SPARE_42_BIT            42
112 #define FEATURE_SPARE_43_BIT            43
113 #define FEATURE_SPARE_44_BIT            44
114 #define FEATURE_SPARE_45_BIT            45
115 #define FEATURE_SPARE_46_BIT            46
116 #define FEATURE_SPARE_47_BIT            47
117 #define FEATURE_SPARE_48_BIT            48
118 #define FEATURE_SPARE_49_BIT            49
119 #define FEATURE_SPARE_50_BIT            50
120 #define FEATURE_SPARE_51_BIT            51
121 #define FEATURE_SPARE_52_BIT            52
122 #define FEATURE_SPARE_53_BIT            53
123 #define FEATURE_SPARE_54_BIT            54
124 #define FEATURE_SPARE_55_BIT            55
125 #define FEATURE_SPARE_56_BIT            56
126 #define FEATURE_SPARE_57_BIT            57
127 #define FEATURE_SPARE_58_BIT            58
128 #define FEATURE_SPARE_59_BIT            59
129 #define FEATURE_SPARE_60_BIT            60
130 #define FEATURE_SPARE_61_BIT            61
131 #define FEATURE_SPARE_62_BIT            62
132 #define FEATURE_SPARE_63_BIT            63
133
134 #define NUM_FEATURES                    64
135
136 #define FEATURE_DPM_PREFETCHER_MASK     (1 << FEATURE_DPM_PREFETCHER_BIT     )
137 #define FEATURE_DPM_GFXCLK_MASK         (1 << FEATURE_DPM_GFXCLK_BIT         )
138 #define FEATURE_DPM_UCLK_MASK           (1 << FEATURE_DPM_UCLK_BIT           )
139 #define FEATURE_DPM_SOCCLK_MASK         (1 << FEATURE_DPM_SOCCLK_BIT         )
140 #define FEATURE_DPM_UVD_MASK            (1 << FEATURE_DPM_UVD_BIT            )
141 #define FEATURE_DPM_VCE_MASK            (1 << FEATURE_DPM_VCE_BIT            )
142 #define FEATURE_ULV_MASK                (1 << FEATURE_ULV_BIT                )
143 #define FEATURE_DPM_MP0CLK_MASK         (1 << FEATURE_DPM_MP0CLK_BIT         )
144 #define FEATURE_DPM_LINK_MASK           (1 << FEATURE_DPM_LINK_BIT           )
145 #define FEATURE_DPM_DCEFCLK_MASK        (1 << FEATURE_DPM_DCEFCLK_BIT        )
146 #define FEATURE_DS_GFXCLK_MASK          (1 << FEATURE_DS_GFXCLK_BIT          )
147 #define FEATURE_DS_SOCCLK_MASK          (1 << FEATURE_DS_SOCCLK_BIT          )
148 #define FEATURE_DS_LCLK_MASK            (1 << FEATURE_DS_LCLK_BIT            )
149 #define FEATURE_PPT_MASK                (1 << FEATURE_PPT_BIT                )
150 #define FEATURE_TDC_MASK                (1 << FEATURE_TDC_BIT                )
151 #define FEATURE_THERMAL_MASK            (1 << FEATURE_THERMAL_BIT            )
152 #define FEATURE_GFX_PER_CU_CG_MASK      (1 << FEATURE_GFX_PER_CU_CG_BIT      )
153 #define FEATURE_RM_MASK                 (1 << FEATURE_RM_BIT                 )
154 #define FEATURE_DS_DCEFCLK_MASK         (1 << FEATURE_DS_DCEFCLK_BIT         )
155 #define FEATURE_ACDC_MASK               (1 << FEATURE_ACDC_BIT               )
156 #define FEATURE_VR0HOT_MASK             (1 << FEATURE_VR0HOT_BIT             )
157 #define FEATURE_VR1HOT_MASK             (1 << FEATURE_VR1HOT_BIT             )
158 #define FEATURE_FW_CTF_MASK             (1 << FEATURE_FW_CTF_BIT             )
159 #define FEATURE_LED_DISPLAY_MASK        (1 << FEATURE_LED_DISPLAY_BIT        )
160 #define FEATURE_FAN_CONTROL_MASK        (1 << FEATURE_FAN_CONTROL_BIT        )
161 #define FEATURE_GFX_EDC_MASK            (1 << FEATURE_GFX_EDC_BIT            )
162 #define FEATURE_GFXOFF_MASK             (1 << FEATURE_GFXOFF_BIT             )
163 #define FEATURE_CG_MASK                 (1 << FEATURE_CG_BIT                 )
164 #define FEATURE_DPM_FCLK_MASK           (1 << FEATURE_DPM_FCLK_BIT           )
165 #define FEATURE_DS_FCLK_MASK            (1 << FEATURE_DS_FCLK_BIT            )
166 #define FEATURE_DS_MP1CLK_MASK          (1 << FEATURE_DS_MP1CLK_BIT          )
167 #define FEATURE_DS_MP0CLK_MASK          (1 << FEATURE_DS_MP0CLK_BIT          )
168
169
170 #define DPM_OVERRIDE_DISABLE_SOCCLK_PID             0x00000001
171 #define DPM_OVERRIDE_DISABLE_UCLK_PID               0x00000002
172 #define DPM_OVERRIDE_ENABLE_VOLT_LINK_UVD_SOCCLK    0x00000004
173 #define DPM_OVERRIDE_ENABLE_VOLT_LINK_UVD_UCLK      0x00000008
174 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_VCLK_SOCCLK   0x00000010
175 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_VCLK_UCLK     0x00000020
176 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_DCLK_SOCCLK   0x00000040
177 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_DCLK_UCLK     0x00000080
178 #define DPM_OVERRIDE_ENABLE_VOLT_LINK_VCE_SOCCLK    0x00000100
179 #define DPM_OVERRIDE_ENABLE_VOLT_LINK_VCE_UCLK      0x00000200
180 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_ECLK_SOCCLK   0x00000400
181 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_ECLK_UCLK     0x00000800
182 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_GFXCLK_SOCCLK 0x00001000
183 #define DPM_OVERRIDE_ENABLE_FREQ_LINK_GFXCLK_UCLK   0x00002000
184 #define DPM_OVERRIDE_ENABLE_GFXOFF_GFXCLK_SWITCH    0x00004000
185 #define DPM_OVERRIDE_ENABLE_GFXOFF_SOCCLK_SWITCH    0x00008000
186 #define DPM_OVERRIDE_ENABLE_GFXOFF_UCLK_SWITCH      0x00010000
187 #define DPM_OVERRIDE_ENABLE_GFXOFF_FCLK_SWITCH      0x00020000
188
189 #define VR_MAPPING_VR_SELECT_MASK  0x01
190 #define VR_MAPPING_VR_SELECT_SHIFT 0x00
191
192 #define VR_MAPPING_PLANE_SELECT_MASK  0x02
193 #define VR_MAPPING_PLANE_SELECT_SHIFT 0x01
194
195
196 #define PSI_SEL_VR0_PLANE0_PSI0  0x01
197 #define PSI_SEL_VR0_PLANE0_PSI1  0x02
198 #define PSI_SEL_VR0_PLANE1_PSI0  0x04
199 #define PSI_SEL_VR0_PLANE1_PSI1  0x08
200 #define PSI_SEL_VR1_PLANE0_PSI0  0x10
201 #define PSI_SEL_VR1_PLANE0_PSI1  0x20
202 #define PSI_SEL_VR1_PLANE1_PSI0  0x40
203 #define PSI_SEL_VR1_PLANE1_PSI1  0x80
204
205
206 #define THROTTLER_STATUS_PADDING_BIT      0
207 #define THROTTLER_STATUS_TEMP_EDGE_BIT    1
208 #define THROTTLER_STATUS_TEMP_HOTSPOT_BIT 2
209 #define THROTTLER_STATUS_TEMP_HBM_BIT     3
210 #define THROTTLER_STATUS_TEMP_VR_GFX_BIT  4
211 #define THROTTLER_STATUS_TEMP_VR_MEM_BIT  5
212 #define THROTTLER_STATUS_TEMP_LIQUID_BIT  6
213 #define THROTTLER_STATUS_TEMP_PLX_BIT     7
214 #define THROTTLER_STATUS_TEMP_SKIN_BIT    8
215 #define THROTTLER_STATUS_TDC_GFX_BIT      9
216 #define THROTTLER_STATUS_TDC_SOC_BIT      10
217 #define THROTTLER_STATUS_PPT_BIT          11
218 #define THROTTLER_STATUS_FIT_BIT          12
219 #define THROTTLER_STATUS_PPM_BIT          13
220
221
222 #define TABLE_TRANSFER_OK         0x0
223 #define TABLE_TRANSFER_FAILED     0xFF
224
225
226 #define WORKLOAD_DEFAULT_BIT              0
227 #define WORKLOAD_PPLIB_FULL_SCREEN_3D_BIT 1
228 #define WORKLOAD_PPLIB_POWER_SAVING_BIT   2
229 #define WORKLOAD_PPLIB_VIDEO_BIT          3
230 #define WORKLOAD_PPLIB_VR_BIT             4
231 #define WORKLOAD_PPLIB_COMPUTE_BIT        5
232 #define WORKLOAD_PPLIB_CUSTOM_BIT         6
233 #define WORKLOAD_PPLIB_COUNT              7
234
235
236 #define XGMI_STATE_D0 1
237 #define XGMI_STATE_D3 0
238
239 typedef struct {
240   uint32_t a;
241   uint32_t b;
242   uint32_t c;
243 } QuadraticInt_t;
244
245 typedef struct {
246   uint32_t m;
247   uint32_t b;
248 } LinearInt_t;
249
250 typedef struct {
251   uint32_t a;
252   uint32_t b;
253   uint32_t c;
254 } DroopInt_t;
255
256 typedef enum {
257   PPCLK_GFXCLK,
258   PPCLK_VCLK,
259   PPCLK_DCLK,
260   PPCLK_ECLK,
261   PPCLK_SOCCLK,
262   PPCLK_UCLK,
263   PPCLK_DCEFCLK,
264   PPCLK_DISPCLK,
265   PPCLK_PIXCLK,
266   PPCLK_PHYCLK,
267   PPCLK_FCLK,
268   PPCLK_COUNT,
269 } PPCLK_e;
270
271 typedef enum {
272   POWER_SOURCE_AC,
273   POWER_SOURCE_DC,
274   POWER_SOURCE_COUNT,
275 } POWER_SOURCE_e;
276
277 typedef enum {
278   VOLTAGE_MODE_AVFS = 0,
279   VOLTAGE_MODE_AVFS_SS,
280   VOLTAGE_MODE_SS,
281   VOLTAGE_MODE_COUNT,
282 } VOLTAGE_MODE_e;
283
284
285 typedef enum {
286   AVFS_VOLTAGE_GFX = 0,
287   AVFS_VOLTAGE_SOC,
288   AVFS_VOLTAGE_COUNT,
289 } AVFS_VOLTAGE_TYPE_e;
290
291
292 typedef struct {
293   uint8_t        VoltageMode;
294   uint8_t        SnapToDiscrete;
295   uint8_t        NumDiscreteLevels;
296   uint8_t        padding;
297   LinearInt_t    ConversionToAvfsClk;
298   QuadraticInt_t SsCurve;
299 } DpmDescriptor_t;
300
301 typedef struct {
302   uint32_t Version;
303
304
305   uint32_t FeaturesToRun[2];
306
307
308   uint16_t SocketPowerLimitAc0;
309   uint16_t SocketPowerLimitAc0Tau;
310   uint16_t SocketPowerLimitAc1;
311   uint16_t SocketPowerLimitAc1Tau;
312   uint16_t SocketPowerLimitAc2;
313   uint16_t SocketPowerLimitAc2Tau;
314   uint16_t SocketPowerLimitAc3;
315   uint16_t SocketPowerLimitAc3Tau;
316   uint16_t SocketPowerLimitDc;
317   uint16_t SocketPowerLimitDcTau;
318   uint16_t TdcLimitSoc;
319   uint16_t TdcLimitSocTau;
320   uint16_t TdcLimitGfx;
321   uint16_t TdcLimitGfxTau;
322
323   uint16_t TedgeLimit;
324   uint16_t ThotspotLimit;
325   uint16_t ThbmLimit;
326   uint16_t Tvr_gfxLimit;
327   uint16_t Tvr_memLimit;
328   uint16_t Tliquid1Limit;
329   uint16_t Tliquid2Limit;
330   uint16_t TplxLimit;
331   uint32_t FitLimit;
332
333   uint16_t PpmPowerLimit;
334   uint16_t PpmTemperatureThreshold;
335
336   uint8_t  MemoryOnPackage;
337   uint8_t  padding8_limits[3];
338
339
340   uint16_t  UlvVoltageOffsetSoc;
341   uint16_t  UlvVoltageOffsetGfx;
342
343   uint8_t  UlvSmnclkDid;
344   uint8_t  UlvMp1clkDid;
345   uint8_t  UlvGfxclkBypass;
346   uint8_t  Padding234;
347
348
349   uint16_t     MinVoltageGfx;
350   uint16_t     MinVoltageSoc;
351   uint16_t     MaxVoltageGfx;
352   uint16_t     MaxVoltageSoc;
353
354   uint16_t     LoadLineResistanceGfx;
355   uint16_t     LoadLineResistanceSoc;
356
357   DpmDescriptor_t DpmDescriptor[PPCLK_COUNT];
358
359   uint16_t       FreqTableGfx      [NUM_GFXCLK_DPM_LEVELS  ];
360   uint16_t       FreqTableVclk     [NUM_VCLK_DPM_LEVELS    ];
361   uint16_t       FreqTableDclk     [NUM_DCLK_DPM_LEVELS    ];
362   uint16_t       FreqTableEclk     [NUM_ECLK_DPM_LEVELS    ];
363   uint16_t       FreqTableSocclk   [NUM_SOCCLK_DPM_LEVELS  ];
364   uint16_t       FreqTableUclk     [NUM_UCLK_DPM_LEVELS    ];
365   uint16_t       FreqTableFclk     [NUM_FCLK_DPM_LEVELS    ];
366   uint16_t       FreqTableDcefclk  [NUM_DCEFCLK_DPM_LEVELS ];
367   uint16_t       FreqTableDispclk  [NUM_DISPCLK_DPM_LEVELS ];
368   uint16_t       FreqTablePixclk   [NUM_PIXCLK_DPM_LEVELS  ];
369   uint16_t       FreqTablePhyclk   [NUM_PHYCLK_DPM_LEVELS  ];
370
371   uint16_t       DcModeMaxFreq     [PPCLK_COUNT            ];
372   uint16_t       Padding8_Clks;
373
374   uint16_t       Mp0clkFreq        [NUM_MP0CLK_DPM_LEVELS];
375   uint16_t       Mp0DpmVoltage     [NUM_MP0CLK_DPM_LEVELS];
376
377
378   uint16_t        GfxclkFidle;
379   uint16_t        GfxclkSlewRate;
380   uint16_t        CksEnableFreq;
381   uint16_t        Padding789;
382   QuadraticInt_t  CksVoltageOffset;
383   uint8_t         Padding567[4];
384   uint16_t        GfxclkDsMaxFreq;
385   uint8_t         GfxclkSource;
386   uint8_t         Padding456;
387
388   uint8_t      LowestUclkReservedForUlv;
389   uint8_t      Padding8_Uclk[3];
390
391
392   uint8_t      PcieGenSpeed[NUM_LINK_LEVELS];
393   uint8_t      PcieLaneCount[NUM_LINK_LEVELS];
394   uint16_t     LclkFreq[NUM_LINK_LEVELS];
395
396
397   uint16_t     EnableTdpm;
398   uint16_t     TdpmHighHystTemperature;
399   uint16_t     TdpmLowHystTemperature;
400   uint16_t     GfxclkFreqHighTempLimit;
401
402
403   uint16_t     FanStopTemp;
404   uint16_t     FanStartTemp;
405
406   uint16_t     FanGainEdge;
407   uint16_t     FanGainHotspot;
408   uint16_t     FanGainLiquid;
409   uint16_t     FanGainVrVddc;
410   uint16_t     FanGainVrMvdd;
411   uint16_t     FanGainPlx;
412   uint16_t     FanGainHbm;
413   uint16_t     FanPwmMin;
414   uint16_t     FanAcousticLimitRpm;
415   uint16_t     FanThrottlingRpm;
416   uint16_t     FanMaximumRpm;
417   uint16_t     FanTargetTemperature;
418   uint16_t     FanTargetGfxclk;
419   uint8_t      FanZeroRpmEnable;
420   uint8_t      FanTachEdgePerRev;
421
422
423
424   int16_t      FuzzyFan_ErrorSetDelta;
425   int16_t      FuzzyFan_ErrorRateSetDelta;
426   int16_t      FuzzyFan_PwmSetDelta;
427   uint16_t     FuzzyFan_Reserved;
428
429
430   uint8_t           OverrideAvfsGb[AVFS_VOLTAGE_COUNT];
431   uint8_t           Padding8_Avfs[2];
432
433   QuadraticInt_t    qAvfsGb[AVFS_VOLTAGE_COUNT];
434   DroopInt_t        dBtcGbGfxCksOn;
435   DroopInt_t        dBtcGbGfxCksOff;
436   DroopInt_t        dBtcGbGfxAfll;
437   DroopInt_t        dBtcGbSoc;
438   LinearInt_t       qAgingGb[AVFS_VOLTAGE_COUNT];
439
440   QuadraticInt_t    qStaticVoltageOffset[AVFS_VOLTAGE_COUNT];
441
442   uint16_t          DcTol[AVFS_VOLTAGE_COUNT];
443
444   uint8_t           DcBtcEnabled[AVFS_VOLTAGE_COUNT];
445   uint8_t           Padding8_GfxBtc[2];
446
447   uint16_t          DcBtcMin[AVFS_VOLTAGE_COUNT];
448   uint16_t          DcBtcMax[AVFS_VOLTAGE_COUNT];
449
450
451   uint8_t           XgmiLinkSpeed   [NUM_XGMI_LEVELS];
452   uint8_t           XgmiLinkWidth   [NUM_XGMI_LEVELS];
453   uint16_t          XgmiFclkFreq    [NUM_XGMI_LEVELS];
454   uint16_t          XgmiUclkFreq    [NUM_XGMI_LEVELS];
455   uint16_t          XgmiSocclkFreq  [NUM_XGMI_LEVELS];
456   uint16_t          XgmiSocVoltage  [NUM_XGMI_LEVELS];
457
458   uint32_t          DebugOverrides;
459   QuadraticInt_t    ReservedEquation0;
460   QuadraticInt_t    ReservedEquation1;
461   QuadraticInt_t    ReservedEquation2;
462   QuadraticInt_t    ReservedEquation3;
463
464   uint16_t     MinVoltageUlvGfx;
465   uint16_t     MinVoltageUlvSoc;
466
467   uint16_t     MGpuFanBoostLimitRpm;
468   uint16_t     padding16_Fan;
469
470   uint32_t     Reserved[13];
471
472
473
474   uint8_t      Liquid1_I2C_address;
475   uint8_t      Liquid2_I2C_address;
476   uint8_t      Vr_I2C_address;
477   uint8_t      Plx_I2C_address;
478
479   uint8_t      Liquid_I2C_LineSCL;
480   uint8_t      Liquid_I2C_LineSDA;
481   uint8_t      Vr_I2C_LineSCL;
482   uint8_t      Vr_I2C_LineSDA;
483
484   uint8_t      Plx_I2C_LineSCL;
485   uint8_t      Plx_I2C_LineSDA;
486   uint8_t      VrSensorPresent;
487   uint8_t      LiquidSensorPresent;
488
489   uint16_t     MaxVoltageStepGfx;
490   uint16_t     MaxVoltageStepSoc;
491
492   uint8_t      VddGfxVrMapping;
493   uint8_t      VddSocVrMapping;
494   uint8_t      VddMem0VrMapping;
495   uint8_t      VddMem1VrMapping;
496
497   uint8_t      GfxUlvPhaseSheddingMask;
498   uint8_t      SocUlvPhaseSheddingMask;
499   uint8_t      ExternalSensorPresent;
500   uint8_t      Padding8_V;
501
502
503   uint16_t     GfxMaxCurrent;
504   int8_t       GfxOffset;
505   uint8_t      Padding_TelemetryGfx;
506
507   uint16_t     SocMaxCurrent;
508   int8_t       SocOffset;
509   uint8_t      Padding_TelemetrySoc;
510
511   uint16_t     Mem0MaxCurrent;
512   int8_t       Mem0Offset;
513   uint8_t      Padding_TelemetryMem0;
514
515   uint16_t     Mem1MaxCurrent;
516   int8_t       Mem1Offset;
517   uint8_t      Padding_TelemetryMem1;
518
519
520   uint8_t      AcDcGpio;
521   uint8_t      AcDcPolarity;
522   uint8_t      VR0HotGpio;
523   uint8_t      VR0HotPolarity;
524
525   uint8_t      VR1HotGpio;
526   uint8_t      VR1HotPolarity;
527   uint8_t      Padding1;
528   uint8_t      Padding2;
529
530
531
532   uint8_t      LedPin0;
533   uint8_t      LedPin1;
534   uint8_t      LedPin2;
535   uint8_t      padding8_4;
536
537
538   uint8_t      PllGfxclkSpreadEnabled;
539   uint8_t      PllGfxclkSpreadPercent;
540   uint16_t     PllGfxclkSpreadFreq;
541
542   uint8_t      UclkSpreadEnabled;
543   uint8_t      UclkSpreadPercent;
544   uint16_t     UclkSpreadFreq;
545
546   uint8_t      FclkSpreadEnabled;
547   uint8_t      FclkSpreadPercent;
548   uint16_t     FclkSpreadFreq;
549
550   uint8_t      FllGfxclkSpreadEnabled;
551   uint8_t      FllGfxclkSpreadPercent;
552   uint16_t     FllGfxclkSpreadFreq;
553
554   uint32_t     BoardReserved[10];
555
556
557   uint32_t     MmHubPadding[8];
558
559 } PPTable_t;
560
561 typedef struct {
562
563   uint16_t     GfxclkAverageLpfTau;
564   uint16_t     SocclkAverageLpfTau;
565   uint16_t     UclkAverageLpfTau;
566   uint16_t     GfxActivityLpfTau;
567   uint16_t     UclkActivityLpfTau;
568
569
570   uint32_t     MmHubPadding[8];
571 } DriverSmuConfig_t;
572
573 typedef struct {
574
575   uint16_t      GfxclkFmin;
576   uint16_t      GfxclkFmax;
577   uint16_t      GfxclkFreq1;
578   uint16_t      GfxclkVolt1;
579   uint16_t      GfxclkFreq2;
580   uint16_t      GfxclkVolt2;
581   uint16_t      GfxclkFreq3;
582   uint16_t      GfxclkVolt3;
583   uint16_t      UclkFmax;
584   int16_t       OverDrivePct;
585   uint16_t      FanMaximumRpm;
586   uint16_t      FanMinimumPwm;
587   uint16_t      FanTargetTemperature;
588   uint16_t      MaxOpTemp;
589   uint16_t      FanZeroRpmEnable;
590   uint16_t      Padding;
591
592 } OverDriveTable_t;
593
594 typedef struct {
595   uint16_t CurrClock[PPCLK_COUNT];
596   uint16_t AverageGfxclkFrequency;
597   uint16_t AverageSocclkFrequency;
598   uint16_t AverageUclkFrequency  ;
599   uint16_t AverageGfxActivity    ;
600   uint16_t AverageUclkActivity   ;
601   uint8_t  CurrSocVoltageOffset  ;
602   uint8_t  CurrGfxVoltageOffset  ;
603   uint8_t  CurrMemVidOffset      ;
604   uint8_t  Padding8              ;
605   uint16_t CurrSocketPower       ;
606   uint16_t TemperatureEdge       ;
607   uint16_t TemperatureHotspot    ;
608   uint16_t TemperatureHBM        ;
609   uint16_t TemperatureVrGfx      ;
610   uint16_t TemperatureVrMem      ;
611   uint16_t TemperatureLiquid     ;
612   uint16_t TemperaturePlx        ;
613   uint32_t ThrottlerStatus       ;
614
615   uint8_t  LinkDpmLevel;
616   uint8_t  Padding[3];
617
618
619   uint32_t     MmHubPadding[7];
620 } SmuMetrics_t;
621
622 typedef struct {
623   uint16_t MinClock;
624   uint16_t MaxClock;
625   uint16_t MinUclk;
626   uint16_t MaxUclk;
627
628   uint8_t  WmSetting;
629   uint8_t  Padding[3];
630 } WatermarkRowGeneric_t;
631
632 #define NUM_WM_RANGES 4
633
634 typedef enum {
635   WM_SOCCLK = 0,
636   WM_DCEFCLK,
637   WM_COUNT_PP,
638 } WM_CLOCK_e;
639
640 typedef struct {
641
642   WatermarkRowGeneric_t WatermarkRow[WM_COUNT_PP][NUM_WM_RANGES];
643
644   uint32_t     MmHubPadding[7];
645 } Watermarks_t;
646
647 typedef struct {
648   uint16_t avgPsmCount[45];
649   uint16_t minPsmCount[45];
650   float    avgPsmVoltage[45];
651   float    minPsmVoltage[45];
652
653   uint16_t avgScsPsmCount;
654   uint16_t minScsPsmCount;
655   float    avgScsPsmVoltage;
656   float    minScsPsmVoltage;
657
658
659   uint32_t MmHubPadding[6];
660 } AvfsDebugTable_t;
661
662 typedef struct {
663   uint8_t  AvfsVersion;
664   uint8_t  AvfsEn[AVFS_VOLTAGE_COUNT];
665
666   uint8_t  OverrideVFT[AVFS_VOLTAGE_COUNT];
667   uint8_t  OverrideAvfsGb[AVFS_VOLTAGE_COUNT];
668
669   uint8_t  OverrideTemperatures[AVFS_VOLTAGE_COUNT];
670   uint8_t  OverrideVInversion[AVFS_VOLTAGE_COUNT];
671   uint8_t  OverrideP2V[AVFS_VOLTAGE_COUNT];
672   uint8_t  OverrideP2VCharzFreq[AVFS_VOLTAGE_COUNT];
673
674   int32_t VFT0_m1[AVFS_VOLTAGE_COUNT];
675   int32_t VFT0_m2[AVFS_VOLTAGE_COUNT];
676   int32_t VFT0_b[AVFS_VOLTAGE_COUNT];
677
678   int32_t VFT1_m1[AVFS_VOLTAGE_COUNT];
679   int32_t VFT1_m2[AVFS_VOLTAGE_COUNT];
680   int32_t VFT1_b[AVFS_VOLTAGE_COUNT];
681
682   int32_t VFT2_m1[AVFS_VOLTAGE_COUNT];
683   int32_t VFT2_m2[AVFS_VOLTAGE_COUNT];
684   int32_t VFT2_b[AVFS_VOLTAGE_COUNT];
685
686   int32_t AvfsGb0_m1[AVFS_VOLTAGE_COUNT];
687   int32_t AvfsGb0_m2[AVFS_VOLTAGE_COUNT];
688   int32_t AvfsGb0_b[AVFS_VOLTAGE_COUNT];
689
690   int32_t AcBtcGb_m1[AVFS_VOLTAGE_COUNT];
691   int32_t AcBtcGb_m2[AVFS_VOLTAGE_COUNT];
692   int32_t AcBtcGb_b[AVFS_VOLTAGE_COUNT];
693
694   uint32_t AvfsTempCold[AVFS_VOLTAGE_COUNT];
695   uint32_t AvfsTempMid[AVFS_VOLTAGE_COUNT];
696   uint32_t AvfsTempHot[AVFS_VOLTAGE_COUNT];
697
698   uint32_t VInversion[AVFS_VOLTAGE_COUNT];
699
700
701   int32_t P2V_m1[AVFS_VOLTAGE_COUNT];
702   int32_t P2V_m2[AVFS_VOLTAGE_COUNT];
703   int32_t P2V_b[AVFS_VOLTAGE_COUNT];
704
705   uint32_t P2VCharzFreq[AVFS_VOLTAGE_COUNT];
706
707   uint32_t EnabledAvfsModules;
708
709   uint32_t MmHubPadding[7];
710 } AvfsFuseOverride_t;
711
712 typedef struct {
713
714   uint8_t   Gfx_ActiveHystLimit;
715   uint8_t   Gfx_IdleHystLimit;
716   uint8_t   Gfx_FPS;
717   uint8_t   Gfx_MinActiveFreqType;
718   uint8_t   Gfx_BoosterFreqType; 
719   uint8_t   Gfx_UseRlcBusy; 
720   uint16_t  Gfx_MinActiveFreq;
721   uint16_t  Gfx_BoosterFreq;
722   uint16_t  Gfx_PD_Data_time_constant;
723   uint32_t  Gfx_PD_Data_limit_a;
724   uint32_t  Gfx_PD_Data_limit_b;
725   uint32_t  Gfx_PD_Data_limit_c;
726   uint32_t  Gfx_PD_Data_error_coeff;
727   uint32_t  Gfx_PD_Data_error_rate_coeff;
728
729   uint8_t   Soc_ActiveHystLimit;
730   uint8_t   Soc_IdleHystLimit;
731   uint8_t   Soc_FPS;
732   uint8_t   Soc_MinActiveFreqType;
733   uint8_t   Soc_BoosterFreqType; 
734   uint8_t   Soc_UseRlcBusy;
735   uint16_t  Soc_MinActiveFreq;
736   uint16_t  Soc_BoosterFreq;
737   uint16_t  Soc_PD_Data_time_constant;
738   uint32_t  Soc_PD_Data_limit_a;
739   uint32_t  Soc_PD_Data_limit_b;
740   uint32_t  Soc_PD_Data_limit_c;
741   uint32_t  Soc_PD_Data_error_coeff;
742   uint32_t  Soc_PD_Data_error_rate_coeff;
743
744   uint8_t   Mem_ActiveHystLimit;
745   uint8_t   Mem_IdleHystLimit;
746   uint8_t   Mem_FPS;
747   uint8_t   Mem_MinActiveFreqType;
748   uint8_t   Mem_BoosterFreqType;
749   uint8_t   Mem_UseRlcBusy; 
750   uint16_t  Mem_MinActiveFreq;
751   uint16_t  Mem_BoosterFreq;
752   uint16_t  Mem_PD_Data_time_constant;
753   uint32_t  Mem_PD_Data_limit_a;
754   uint32_t  Mem_PD_Data_limit_b;
755   uint32_t  Mem_PD_Data_limit_c;
756   uint32_t  Mem_PD_Data_error_coeff;
757   uint32_t  Mem_PD_Data_error_rate_coeff;
758
759   uint8_t   Fclk_ActiveHystLimit;
760   uint8_t   Fclk_IdleHystLimit;
761   uint8_t   Fclk_FPS;
762   uint8_t   Fclk_MinActiveFreqType;
763   uint8_t   Fclk_BoosterFreqType;
764   uint8_t   Fclk_UseRlcBusy;
765   uint16_t  Fclk_MinActiveFreq;
766   uint16_t  Fclk_BoosterFreq;
767   uint16_t  Fclk_PD_Data_time_constant;
768   uint32_t  Fclk_PD_Data_limit_a;
769   uint32_t  Fclk_PD_Data_limit_b;
770   uint32_t  Fclk_PD_Data_limit_c;
771   uint32_t  Fclk_PD_Data_error_coeff;
772   uint32_t  Fclk_PD_Data_error_rate_coeff;
773
774 } DpmActivityMonitorCoeffInt_t;
775
776 #define TABLE_PPTABLE                 0
777 #define TABLE_WATERMARKS              1
778 #define TABLE_AVFS                    2
779 #define TABLE_AVFS_PSM_DEBUG          3
780 #define TABLE_AVFS_FUSE_OVERRIDE      4
781 #define TABLE_PMSTATUSLOG             5
782 #define TABLE_SMU_METRICS             6
783 #define TABLE_DRIVER_SMU_CONFIG       7
784 #define TABLE_ACTIVITY_MONITOR_COEFF  8
785 #define TABLE_OVERDRIVE               9
786 #define TABLE_COUNT                  10
787
788
789 #define UCLK_SWITCH_SLOW 0
790 #define UCLK_SWITCH_FAST 1
791
792
793 #define SQ_Enable_MASK 0x1
794 #define SQ_IR_MASK 0x2
795 #define SQ_PCC_MASK 0x4
796 #define SQ_EDC_MASK 0x8
797
798 #define TCP_Enable_MASK 0x100
799 #define TCP_IR_MASK 0x200
800 #define TCP_PCC_MASK 0x400
801 #define TCP_EDC_MASK 0x800
802
803 #define TD_Enable_MASK 0x10000
804 #define TD_IR_MASK 0x20000
805 #define TD_PCC_MASK 0x40000
806 #define TD_EDC_MASK 0x80000
807
808 #define DB_Enable_MASK 0x1000000
809 #define DB_IR_MASK 0x2000000
810 #define DB_PCC_MASK 0x4000000
811 #define DB_EDC_MASK 0x8000000
812
813 #define SQ_Enable_SHIFT 0
814 #define SQ_IR_SHIFT 1
815 #define SQ_PCC_SHIFT 2
816 #define SQ_EDC_SHIFT 3
817
818 #define TCP_Enable_SHIFT 8
819 #define TCP_IR_SHIFT 9
820 #define TCP_PCC_SHIFT 10
821 #define TCP_EDC_SHIFT 11
822
823 #define TD_Enable_SHIFT 16
824 #define TD_IR_SHIFT 17
825 #define TD_PCC_SHIFT 18
826 #define TD_EDC_SHIFT 19
827
828 #define DB_Enable_SHIFT 24
829 #define DB_IR_SHIFT 25
830 #define DB_PCC_SHIFT 26
831 #define DB_EDC_SHIFT 27
832
833 #define REMOVE_FMAX_MARGIN_BIT     0x0
834 #define REMOVE_DCTOL_MARGIN_BIT    0x1
835 #define REMOVE_PLATFORM_MARGIN_BIT 0x2
836
837 #endif