smu75.h revision 1.2 1 /* $NetBSD: smu75.h,v 1.2 2021/12/18 23:45:26 riastradh Exp $ */
2
3 /*
4 * Copyright 2017 Advanced Micro Devices, Inc.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
20 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 * OTHER DEALINGS IN THE SOFTWARE.
23 *
24 */
25 #ifndef SMU75_H
26 #define SMU75_H
27
28 #pragma pack(push, 1)
29
30 typedef struct {
31 uint32_t high;
32 uint32_t low;
33 } data_64_t;
34
35 typedef struct {
36 data_64_t high;
37 data_64_t low;
38 } data_128_t;
39
40 #define SMU__DGPU_ONLY
41
42 #define SMU__NUM_SCLK_DPM_STATE 8
43 #define SMU__NUM_MCLK_DPM_LEVELS 4
44 #define SMU__NUM_LCLK_DPM_LEVELS 8
45 #define SMU__NUM_PCIE_DPM_LEVELS 8
46
47 #define SMU7_CONTEXT_ID_SMC 1
48 #define SMU7_CONTEXT_ID_VBIOS 2
49
50 #define SMU75_MAX_LEVELS_VDDC 16
51 #define SMU75_MAX_LEVELS_VDDGFX 16
52 #define SMU75_MAX_LEVELS_VDDCI 8
53 #define SMU75_MAX_LEVELS_MVDD 4
54
55 #define SMU_MAX_SMIO_LEVELS 4
56
57 #define SMU75_MAX_LEVELS_GRAPHICS SMU__NUM_SCLK_DPM_STATE
58 #define SMU75_MAX_LEVELS_MEMORY SMU__NUM_MCLK_DPM_LEVELS
59 #define SMU75_MAX_LEVELS_GIO SMU__NUM_LCLK_DPM_LEVELS
60 #define SMU75_MAX_LEVELS_LINK SMU__NUM_PCIE_DPM_LEVELS
61 #define SMU75_MAX_LEVELS_UVD 8
62 #define SMU75_MAX_LEVELS_VCE 8
63 #define SMU75_MAX_LEVELS_ACP 8
64 #define SMU75_MAX_LEVELS_SAMU 8
65 #define SMU75_MAX_ENTRIES_SMIO 32
66
67 #define DPM_NO_LIMIT 0
68 #define DPM_NO_UP 1
69 #define DPM_GO_DOWN 2
70 #define DPM_GO_UP 3
71
72 #define SMU7_FIRST_DPM_GRAPHICS_LEVEL 0
73 #define SMU7_FIRST_DPM_MEMORY_LEVEL 0
74
75 #define GPIO_CLAMP_MODE_VRHOT 1
76 #define GPIO_CLAMP_MODE_THERM 2
77 #define GPIO_CLAMP_MODE_DC 4
78
79 #define SCRATCH_B_TARG_PCIE_INDEX_SHIFT 0
80 #define SCRATCH_B_TARG_PCIE_INDEX_MASK (0x7<<SCRATCH_B_TARG_PCIE_INDEX_SHIFT)
81 #define SCRATCH_B_CURR_PCIE_INDEX_SHIFT 3
82 #define SCRATCH_B_CURR_PCIE_INDEX_MASK (0x7<<SCRATCH_B_CURR_PCIE_INDEX_SHIFT)
83 #define SCRATCH_B_TARG_UVD_INDEX_SHIFT 6
84 #define SCRATCH_B_TARG_UVD_INDEX_MASK (0x7<<SCRATCH_B_TARG_UVD_INDEX_SHIFT)
85 #define SCRATCH_B_CURR_UVD_INDEX_SHIFT 9
86 #define SCRATCH_B_CURR_UVD_INDEX_MASK (0x7<<SCRATCH_B_CURR_UVD_INDEX_SHIFT)
87 #define SCRATCH_B_TARG_VCE_INDEX_SHIFT 12
88 #define SCRATCH_B_TARG_VCE_INDEX_MASK (0x7<<SCRATCH_B_TARG_VCE_INDEX_SHIFT)
89 #define SCRATCH_B_CURR_VCE_INDEX_SHIFT 15
90 #define SCRATCH_B_CURR_VCE_INDEX_MASK (0x7<<SCRATCH_B_CURR_VCE_INDEX_SHIFT)
91 #define SCRATCH_B_TARG_ACP_INDEX_SHIFT 18
92 #define SCRATCH_B_TARG_ACP_INDEX_MASK (0x7<<SCRATCH_B_TARG_ACP_INDEX_SHIFT)
93 #define SCRATCH_B_CURR_ACP_INDEX_SHIFT 21
94 #define SCRATCH_B_CURR_ACP_INDEX_MASK (0x7<<SCRATCH_B_CURR_ACP_INDEX_SHIFT)
95 #define SCRATCH_B_TARG_SAMU_INDEX_SHIFT 24
96 #define SCRATCH_B_TARG_SAMU_INDEX_MASK (0x7<<SCRATCH_B_TARG_SAMU_INDEX_SHIFT)
97 #define SCRATCH_B_CURR_SAMU_INDEX_SHIFT 27
98 #define SCRATCH_B_CURR_SAMU_INDEX_MASK (0x7<<SCRATCH_B_CURR_SAMU_INDEX_SHIFT)
99
100 /* Virtualization Defines */
101 #define CG_XDMA_MASK 0x1
102 #define CG_XDMA_SHIFT 0
103 #define CG_UVD_MASK 0x2
104 #define CG_UVD_SHIFT 1
105 #define CG_VCE_MASK 0x4
106 #define CG_VCE_SHIFT 2
107 #define CG_SAMU_MASK 0x8
108 #define CG_SAMU_SHIFT 3
109 #define CG_GFX_MASK 0x10
110 #define CG_GFX_SHIFT 4
111 #define CG_SDMA_MASK 0x20
112 #define CG_SDMA_SHIFT 5
113 #define CG_HDP_MASK 0x40
114 #define CG_HDP_SHIFT 6
115 #define CG_MC_MASK 0x80
116 #define CG_MC_SHIFT 7
117 #define CG_DRM_MASK 0x100
118 #define CG_DRM_SHIFT 8
119 #define CG_ROM_MASK 0x200
120 #define CG_ROM_SHIFT 9
121 #define CG_BIF_MASK 0x400
122 #define CG_BIF_SHIFT 10
123
124 #if defined SMU__DGPU_ONLY
125 #define SMU75_DTE_ITERATIONS 5
126 #define SMU75_DTE_SOURCES 3
127 #define SMU75_DTE_SINKS 1
128 #define SMU75_NUM_CPU_TES 0
129 #define SMU75_NUM_GPU_TES 1
130 #define SMU75_NUM_NON_TES 2
131 #define SMU75_DTE_FAN_SCALAR_MIN 0x100
132 #define SMU75_DTE_FAN_SCALAR_MAX 0x166
133 #define SMU75_DTE_FAN_TEMP_MAX 93
134 #define SMU75_DTE_FAN_TEMP_MIN 83
135 #endif
136 #define SMU75_THERMAL_INPUT_LOOP_COUNT 2
137 #define SMU75_THERMAL_CLAMP_MODE_COUNT 2
138
139 #define EXP_M1_1 93
140 #define EXP_M2_1 195759
141 #define EXP_B_1 111176531
142
143 #define EXP_M1_2 67
144 #define EXP_M2_2 153720
145 #define EXP_B_2 94415767
146
147 #define EXP_M1_3 48
148 #define EXP_M2_3 119796
149 #define EXP_B_3 79195279
150
151 #define EXP_M1_4 550
152 #define EXP_M2_4 1484190
153 #define EXP_B_4 1051432828
154
155 #define EXP_M1_5 394
156 #define EXP_M2_5 1143049
157 #define EXP_B_5 864288432
158
159 struct SMU7_HystController_Data {
160 uint16_t waterfall_up;
161 uint16_t waterfall_down;
162 uint16_t waterfall_limit;
163 uint16_t release_cnt;
164 uint16_t release_limit;
165 uint16_t spare;
166 };
167
168 typedef struct SMU7_HystController_Data SMU7_HystController_Data;
169
170 struct SMU75_PIDController {
171 uint32_t Ki;
172 int32_t LFWindupUpperLim;
173 int32_t LFWindupLowerLim;
174 uint32_t StatePrecision;
175 uint32_t LfPrecision;
176 uint32_t LfOffset;
177 uint32_t MaxState;
178 uint32_t MaxLfFraction;
179 uint32_t StateShift;
180 };
181
182 typedef struct SMU75_PIDController SMU75_PIDController;
183
184 struct SMU7_LocalDpmScoreboard {
185 uint32_t PercentageBusy;
186
187 int32_t PIDError;
188 int32_t PIDIntegral;
189 int32_t PIDOutput;
190
191 uint32_t SigmaDeltaAccum;
192 uint32_t SigmaDeltaOutput;
193 uint32_t SigmaDeltaLevel;
194
195 uint32_t UtilizationSetpoint;
196
197 uint8_t TdpClampMode;
198 uint8_t TdcClampMode;
199 uint8_t ThermClampMode;
200 uint8_t VoltageBusy;
201
202 int8_t CurrLevel;
203 int8_t TargLevel;
204 uint8_t LevelChangeInProgress;
205 uint8_t UpHyst;
206
207 uint8_t DownHyst;
208 uint8_t VoltageDownHyst;
209 uint8_t DpmEnable;
210 uint8_t DpmRunning;
211
212 uint8_t DpmForce;
213 uint8_t DpmForceLevel;
214 uint8_t DisplayWatermark;
215 uint8_t McArbIndex;
216
217 uint32_t MinimumPerfSclk;
218
219 uint8_t AcpiReq;
220 uint8_t AcpiAck;
221 uint8_t GfxClkSlow;
222 uint8_t GpioClampMode;
223
224 uint8_t EnableModeSwitchRLCNotification;
225 uint8_t EnabledLevelsChange;
226 uint8_t DteClampMode;
227 uint8_t FpsClampMode;
228
229 uint16_t LevelResidencyCounters [SMU75_MAX_LEVELS_GRAPHICS];
230 uint16_t LevelSwitchCounters [SMU75_MAX_LEVELS_GRAPHICS];
231
232 void (*TargetStateCalculator)(uint8_t);
233 void (*SavedTargetStateCalculator)(uint8_t);
234
235 uint16_t AutoDpmInterval;
236 uint16_t AutoDpmRange;
237
238 uint8_t FpsEnabled;
239 uint8_t MaxPerfLevel;
240 uint8_t AllowLowClkInterruptToHost;
241 uint8_t FpsRunning;
242
243 uint32_t MaxAllowedFrequency;
244
245 uint32_t FilteredSclkFrequency;
246 uint32_t LastSclkFrequency;
247 uint32_t FilteredSclkFrequencyCnt;
248
249 uint8_t MinPerfLevel;
250 #ifdef SMU__FIRMWARE_SCKS_PRESENT__1
251 uint8_t ScksClampMode;
252 uint8_t padding[2];
253 #else
254 uint8_t padding[3];
255 #endif
256
257 uint16_t FpsAlpha;
258 uint16_t DeltaTime;
259 uint32_t CurrentFps;
260 uint32_t FilteredFps;
261 uint32_t FrameCount;
262 uint32_t FrameCountLast;
263 uint16_t FpsTargetScalar;
264 uint16_t FpsWaterfallLimitScalar;
265 uint16_t FpsAlphaScalar;
266 uint16_t spare8;
267 SMU7_HystController_Data HystControllerData;
268 };
269
270 typedef struct SMU7_LocalDpmScoreboard SMU7_LocalDpmScoreboard;
271
272 #define SMU7_MAX_VOLTAGE_CLIENTS 12
273
274 typedef uint8_t (*VoltageChangeHandler_t)(uint16_t, uint8_t);
275
276 #define VDDC_MASK 0x00007FFF
277 #define VDDC_SHIFT 0
278 #define VDDCI_MASK 0x3FFF8000
279 #define VDDCI_SHIFT 15
280 #define PHASES_MASK 0xC0000000
281 #define PHASES_SHIFT 30
282
283 typedef uint32_t SMU_VoltageLevel;
284
285 struct SMU7_VoltageScoreboard {
286 SMU_VoltageLevel TargetVoltage;
287 uint16_t MaxVid;
288 uint8_t HighestVidOffset;
289 uint8_t CurrentVidOffset;
290
291 uint16_t CurrentVddc;
292 uint16_t CurrentVddci;
293
294 uint8_t ControllerBusy;
295 uint8_t CurrentVid;
296 uint8_t CurrentVddciVid;
297 uint8_t padding;
298
299 SMU_VoltageLevel RequestedVoltage[SMU7_MAX_VOLTAGE_CLIENTS];
300 SMU_VoltageLevel TargetVoltageState;
301 uint8_t EnabledRequest[SMU7_MAX_VOLTAGE_CLIENTS];
302
303 uint8_t padding2;
304 uint8_t padding3;
305 uint8_t ControllerEnable;
306 uint8_t ControllerRunning;
307 uint16_t CurrentStdVoltageHiSidd;
308 uint16_t CurrentStdVoltageLoSidd;
309 uint8_t OverrideVoltage;
310 uint8_t padding4;
311 uint8_t padding5;
312 uint8_t CurrentPhases;
313
314 VoltageChangeHandler_t ChangeVddc;
315 VoltageChangeHandler_t ChangeVddci;
316 VoltageChangeHandler_t ChangePhase;
317 VoltageChangeHandler_t ChangeMvdd;
318
319 VoltageChangeHandler_t functionLinks[6];
320
321 uint16_t * VddcFollower1;
322 int16_t Driver_OD_RequestedVidOffset1;
323 int16_t Driver_OD_RequestedVidOffset2;
324 };
325
326 typedef struct SMU7_VoltageScoreboard SMU7_VoltageScoreboard;
327
328 #define SMU7_MAX_PCIE_LINK_SPEEDS 3
329
330 struct SMU7_PCIeLinkSpeedScoreboard {
331 uint8_t DpmEnable;
332 uint8_t DpmRunning;
333 uint8_t DpmForce;
334 uint8_t DpmForceLevel;
335
336 uint8_t CurrentLinkSpeed;
337 uint8_t EnabledLevelsChange;
338 uint16_t AutoDpmInterval;
339
340 uint16_t AutoDpmRange;
341 uint16_t AutoDpmCount;
342
343 uint8_t DpmMode;
344 uint8_t AcpiReq;
345 uint8_t AcpiAck;
346 uint8_t CurrentLinkLevel;
347 };
348
349 typedef struct SMU7_PCIeLinkSpeedScoreboard SMU7_PCIeLinkSpeedScoreboard;
350
351 #define SMU7_LKGE_LUT_NUM_OF_TEMP_ENTRIES 16
352 #define SMU7_LKGE_LUT_NUM_OF_VOLT_ENTRIES 16
353
354 #define SMU7_SCALE_I 7
355 #define SMU7_SCALE_R 12
356
357 struct SMU7_PowerScoreboard {
358 uint32_t GpuPower;
359
360 uint32_t VddcPower;
361 uint32_t VddcVoltage;
362 uint32_t VddcCurrent;
363
364 uint32_t VddciPower;
365 uint32_t VddciVoltage;
366 uint32_t VddciCurrent;
367
368 uint32_t RocPower;
369
370 uint16_t Telemetry_1_slope;
371 uint16_t Telemetry_2_slope;
372 int32_t Telemetry_1_offset;
373 int32_t Telemetry_2_offset;
374
375 uint8_t MCLK_patch_flag;
376 uint8_t reserved[3];
377 };
378
379 typedef struct SMU7_PowerScoreboard SMU7_PowerScoreboard;
380
381 #define SMU7_SCLK_DPM_CONFIG_MASK 0x01
382 #define SMU7_VOLTAGE_CONTROLLER_CONFIG_MASK 0x02
383 #define SMU7_THERMAL_CONTROLLER_CONFIG_MASK 0x04
384 #define SMU7_MCLK_DPM_CONFIG_MASK 0x08
385 #define SMU7_UVD_DPM_CONFIG_MASK 0x10
386 #define SMU7_VCE_DPM_CONFIG_MASK 0x20
387 #define SMU7_ACP_DPM_CONFIG_MASK 0x40
388 #define SMU7_SAMU_DPM_CONFIG_MASK 0x80
389 #define SMU7_PCIEGEN_DPM_CONFIG_MASK 0x100
390
391 #define SMU7_ACP_MCLK_HANDSHAKE_DISABLE 0x00000001
392 #define SMU7_ACP_SCLK_HANDSHAKE_DISABLE 0x00000002
393 #define SMU7_UVD_MCLK_HANDSHAKE_DISABLE 0x00000100
394 #define SMU7_UVD_SCLK_HANDSHAKE_DISABLE 0x00000200
395 #define SMU7_VCE_MCLK_HANDSHAKE_DISABLE 0x00010000
396 #define SMU7_VCE_SCLK_HANDSHAKE_DISABLE 0x00020000
397
398 struct SMU75_SoftRegisters {
399 uint32_t RefClockFrequency;
400 uint32_t PmTimerPeriod;
401 uint32_t FeatureEnables;
402 #if defined (SMU__DGPU_ONLY)
403 uint32_t PreVBlankGap;
404 uint32_t VBlankTimeout;
405 uint32_t TrainTimeGap;
406 uint32_t MvddSwitchTime;
407 uint32_t LongestAcpiTrainTime;
408 uint32_t AcpiDelay;
409 uint32_t G5TrainTime;
410 uint32_t DelayMpllPwron;
411 uint32_t VoltageChangeTimeout;
412 #endif
413 uint32_t HandshakeDisables;
414
415 uint8_t DisplayPhy1Config;
416 uint8_t DisplayPhy2Config;
417 uint8_t DisplayPhy3Config;
418 uint8_t DisplayPhy4Config;
419
420 uint8_t DisplayPhy5Config;
421 uint8_t DisplayPhy6Config;
422 uint8_t DisplayPhy7Config;
423 uint8_t DisplayPhy8Config;
424
425 uint32_t AverageGraphicsActivity;
426 uint32_t AverageMemoryActivity;
427 uint32_t AverageGioActivity;
428
429 uint8_t SClkDpmEnabledLevels;
430 uint8_t MClkDpmEnabledLevels;
431 uint8_t LClkDpmEnabledLevels;
432 uint8_t PCIeDpmEnabledLevels;
433
434 uint8_t UVDDpmEnabledLevels;
435 uint8_t SAMUDpmEnabledLevels;
436 uint8_t ACPDpmEnabledLevels;
437 uint8_t VCEDpmEnabledLevels;
438
439 uint32_t DRAM_LOG_ADDR_H;
440 uint32_t DRAM_LOG_ADDR_L;
441 uint32_t DRAM_LOG_PHY_ADDR_H;
442 uint32_t DRAM_LOG_PHY_ADDR_L;
443 uint32_t DRAM_LOG_BUFF_SIZE;
444 uint32_t UlvEnterCount;
445 uint32_t UlvTime;
446 uint32_t UcodeLoadStatus;
447 uint32_t AllowMvddSwitch;
448 uint8_t Activity_Weight;
449 uint8_t Reserved8[3];
450 };
451
452 typedef struct SMU75_SoftRegisters SMU75_SoftRegisters;
453
454 struct SMU75_Firmware_Header {
455 uint32_t Digest[5];
456 uint32_t Version;
457 uint32_t HeaderSize;
458 uint32_t Flags;
459 uint32_t EntryPoint;
460 uint32_t CodeSize;
461 uint32_t ImageSize;
462
463 uint32_t Rtos;
464 uint32_t SoftRegisters;
465 uint32_t DpmTable;
466 uint32_t FanTable;
467 uint32_t CacConfigTable;
468 uint32_t CacStatusTable;
469 uint32_t mcRegisterTable;
470 uint32_t mcArbDramTimingTable;
471 uint32_t PmFuseTable;
472 uint32_t Globals;
473 uint32_t ClockStretcherTable;
474 uint32_t VftTable;
475 uint32_t Reserved1;
476 uint32_t AvfsCksOff_AvfsGbvTable;
477 uint32_t AvfsCksOff_BtcGbvTable;
478 uint32_t MM_AvfsTable;
479 uint32_t PowerSharingTable;
480 uint32_t AvfsTable;
481 uint32_t AvfsCksOffGbvTable;
482 uint32_t AvfsMeanNSigma;
483 uint32_t AvfsSclkOffsetTable;
484 uint32_t Reserved[12];
485 uint32_t Signature;
486 };
487
488 typedef struct SMU75_Firmware_Header SMU75_Firmware_Header;
489
490 #define SMU7_FIRMWARE_HEADER_LOCATION 0x20000
491
492 enum DisplayConfig {
493 PowerDown = 1,
494 DP54x4,
495 DP54x2,
496 DP54x1,
497 DP27x4,
498 DP27x2,
499 DP27x1,
500 HDMI297,
501 HDMI162,
502 LVDS,
503 DP324x4,
504 DP324x2,
505 DP324x1
506 };
507
508 #define MC_BLOCK_COUNT 1
509 #define CPL_BLOCK_COUNT 5
510 #define SE_BLOCK_COUNT 15
511 #define GC_BLOCK_COUNT 24
512
513 struct SMU7_Local_Cac {
514 uint8_t BlockId;
515 uint8_t SignalId;
516 uint8_t Threshold;
517 uint8_t Padding;
518 };
519
520 typedef struct SMU7_Local_Cac SMU7_Local_Cac;
521
522 struct SMU7_Local_Cac_Table {
523 SMU7_Local_Cac CplLocalCac[CPL_BLOCK_COUNT];
524 SMU7_Local_Cac McLocalCac[MC_BLOCK_COUNT];
525 SMU7_Local_Cac SeLocalCac[SE_BLOCK_COUNT];
526 SMU7_Local_Cac GcLocalCac[GC_BLOCK_COUNT];
527 };
528
529 typedef struct SMU7_Local_Cac_Table SMU7_Local_Cac_Table;
530
531 #pragma pack(pop)
532
533 #define CG_SYS_BITMASK_FIRST_BIT 0
534 #define CG_SYS_BITMASK_LAST_BIT 10
535 #define CG_SYS_BIF_MGLS_SHIFT 0
536 #define CG_SYS_ROM_SHIFT 1
537 #define CG_SYS_MC_MGCG_SHIFT 2
538 #define CG_SYS_MC_MGLS_SHIFT 3
539 #define CG_SYS_SDMA_MGCG_SHIFT 4
540 #define CG_SYS_SDMA_MGLS_SHIFT 5
541 #define CG_SYS_DRM_MGCG_SHIFT 6
542 #define CG_SYS_HDP_MGCG_SHIFT 7
543 #define CG_SYS_HDP_MGLS_SHIFT 8
544 #define CG_SYS_DRM_MGLS_SHIFT 9
545 #define CG_SYS_BIF_MGCG_SHIFT 10
546
547 #define CG_SYS_BIF_MGLS_MASK 0x1
548 #define CG_SYS_ROM_MASK 0x2
549 #define CG_SYS_MC_MGCG_MASK 0x4
550 #define CG_SYS_MC_MGLS_MASK 0x8
551 #define CG_SYS_SDMA_MGCG_MASK 0x10
552 #define CG_SYS_SDMA_MGLS_MASK 0x20
553 #define CG_SYS_DRM_MGCG_MASK 0x40
554 #define CG_SYS_HDP_MGCG_MASK 0x80
555 #define CG_SYS_HDP_MGLS_MASK 0x100
556 #define CG_SYS_DRM_MGLS_MASK 0x200
557 #define CG_SYS_BIF_MGCG_MASK 0x400
558
559 #define CG_GFX_BITMASK_FIRST_BIT 16
560 #define CG_GFX_BITMASK_LAST_BIT 24
561
562 #define CG_GFX_CGCG_SHIFT 16
563 #define CG_GFX_CGLS_SHIFT 17
564 #define CG_CPF_MGCG_SHIFT 18
565 #define CG_RLC_MGCG_SHIFT 19
566 #define CG_GFX_OTHERS_MGCG_SHIFT 20
567 #define CG_GFX_3DCG_SHIFT 21
568 #define CG_GFX_3DLS_SHIFT 22
569 #define CG_GFX_RLC_LS_SHIFT 23
570 #define CG_GFX_CP_LS_SHIFT 24
571
572 #define CG_GFX_CGCG_MASK 0x00010000
573 #define CG_GFX_CGLS_MASK 0x00020000
574 #define CG_CPF_MGCG_MASK 0x00040000
575 #define CG_RLC_MGCG_MASK 0x00080000
576 #define CG_GFX_OTHERS_MGCG_MASK 0x00100000
577 #define CG_GFX_3DCG_MASK 0x00200000
578 #define CG_GFX_3DLS_MASK 0x00400000
579 #define CG_GFX_RLC_LS_MASK 0x00800000
580 #define CG_GFX_CP_LS_MASK 0x01000000
581
582
583 #define VRCONF_VDDC_MASK 0x000000FF
584 #define VRCONF_VDDC_SHIFT 0
585 #define VRCONF_VDDGFX_MASK 0x0000FF00
586 #define VRCONF_VDDGFX_SHIFT 8
587 #define VRCONF_VDDCI_MASK 0x00FF0000
588 #define VRCONF_VDDCI_SHIFT 16
589 #define VRCONF_MVDD_MASK 0xFF000000
590 #define VRCONF_MVDD_SHIFT 24
591
592 #define VR_MERGED_WITH_VDDC 0
593 #define VR_SVI2_PLANE_1 1
594 #define VR_SVI2_PLANE_2 2
595 #define VR_SMIO_PATTERN_1 3
596 #define VR_SMIO_PATTERN_2 4
597 #define VR_STATIC_VOLTAGE 5
598
599 #define CLOCK_STRETCHER_MAX_ENTRIES 0x4
600 #define CKS_LOOKUPTable_MAX_ENTRIES 0x4
601
602 #define CLOCK_STRETCHER_SETTING_DDT_MASK 0x01
603 #define CLOCK_STRETCHER_SETTING_DDT_SHIFT 0x0
604 #define CLOCK_STRETCHER_SETTING_STRETCH_AMOUNT_MASK 0x1E
605 #define CLOCK_STRETCHER_SETTING_STRETCH_AMOUNT_SHIFT 0x1
606 #define CLOCK_STRETCHER_SETTING_ENABLE_MASK 0x80
607 #define CLOCK_STRETCHER_SETTING_ENABLE_SHIFT 0x7
608
609 struct SMU_ClockStretcherDataTableEntry {
610 uint8_t minVID;
611 uint8_t maxVID;
612
613 uint16_t setting;
614 };
615 typedef struct SMU_ClockStretcherDataTableEntry SMU_ClockStretcherDataTableEntry;
616
617 struct SMU_ClockStretcherDataTable {
618 SMU_ClockStretcherDataTableEntry ClockStretcherDataTableEntry[CLOCK_STRETCHER_MAX_ENTRIES];
619 };
620 typedef struct SMU_ClockStretcherDataTable SMU_ClockStretcherDataTable;
621
622 struct SMU_CKS_LOOKUPTableEntry {
623 uint16_t minFreq;
624 uint16_t maxFreq;
625
626 uint8_t setting;
627 uint8_t padding[3];
628 };
629 typedef struct SMU_CKS_LOOKUPTableEntry SMU_CKS_LOOKUPTableEntry;
630
631 struct SMU_CKS_LOOKUPTable {
632 SMU_CKS_LOOKUPTableEntry CKS_LOOKUPTableEntry[CKS_LOOKUPTable_MAX_ENTRIES];
633 };
634 typedef struct SMU_CKS_LOOKUPTable SMU_CKS_LOOKUPTable;
635
636 struct AgmAvfsData_t {
637 uint16_t avgPsmCount[28];
638 uint16_t minPsmCount[28];
639 };
640 typedef struct AgmAvfsData_t AgmAvfsData_t;
641
642 enum VFT_COLUMNS {
643 SCLK0,
644 SCLK1,
645 SCLK2,
646 SCLK3,
647 SCLK4,
648 SCLK5,
649 SCLK6,
650 SCLK7,
651
652 NUM_VFT_COLUMNS
653 };
654 enum {
655 SCS_FUSE_T0,
656 SCS_FUSE_T1,
657 NUM_SCS_FUSE_TEMPERATURE
658 };
659 enum {
660 SCKS_ON,
661 SCKS_OFF,
662 NUM_SCKS_STATE_TYPES
663 };
664
665 #define VFT_TABLE_DEFINED
666
667 #define TEMP_RANGE_MAXSTEPS 12
668 struct VFT_CELL_t {
669 uint16_t Voltage;
670 };
671
672 typedef struct VFT_CELL_t VFT_CELL_t;
673 #ifdef SMU__FIRMWARE_SCKS_PRESENT__1
674 struct SCS_CELL_t {
675 uint16_t PsmCnt[NUM_SCKS_STATE_TYPES];
676 };
677 typedef struct SCS_CELL_t SCS_CELL_t;
678 #endif
679
680 struct VFT_TABLE_t {
681 VFT_CELL_t Cell[TEMP_RANGE_MAXSTEPS][NUM_VFT_COLUMNS];
682 uint16_t AvfsGbv [NUM_VFT_COLUMNS];
683 uint16_t BtcGbv [NUM_VFT_COLUMNS];
684 int16_t Temperature [TEMP_RANGE_MAXSTEPS];
685
686 #ifdef SMU__FIRMWARE_SCKS_PRESENT__1
687 SCS_CELL_t ScksCell[TEMP_RANGE_MAXSTEPS][NUM_VFT_COLUMNS];
688 #endif
689
690 uint8_t NumTemperatureSteps;
691 uint8_t padding[3];
692 };
693 typedef struct VFT_TABLE_t VFT_TABLE_t;
694
695 #define BTCGB_VDROOP_TABLE_MAX_ENTRIES 2
696 #define AVFSGB_VDROOP_TABLE_MAX_ENTRIES 2
697
698 struct GB_VDROOP_TABLE_t {
699 int32_t a0;
700 int32_t a1;
701 int32_t a2;
702 uint32_t spare;
703 };
704 typedef struct GB_VDROOP_TABLE_t GB_VDROOP_TABLE_t;
705
706 struct SMU_QuadraticCoeffs {
707 int32_t m1;
708 int32_t b;
709
710 int16_t m2;
711 uint8_t m1_shift;
712 uint8_t m2_shift;
713 };
714 typedef struct SMU_QuadraticCoeffs SMU_QuadraticCoeffs;
715
716 struct AVFS_Margin_t {
717 VFT_CELL_t Cell[NUM_VFT_COLUMNS];
718 };
719 typedef struct AVFS_Margin_t AVFS_Margin_t;
720
721 struct AVFS_CksOff_Gbv_t {
722 VFT_CELL_t Cell[NUM_VFT_COLUMNS];
723 };
724 typedef struct AVFS_CksOff_Gbv_t AVFS_CksOff_Gbv_t;
725
726 struct AVFS_CksOff_AvfsGbv_t {
727 VFT_CELL_t Cell[NUM_VFT_COLUMNS];
728 };
729 typedef struct AVFS_CksOff_AvfsGbv_t AVFS_CksOff_AvfsGbv_t;
730
731 struct AVFS_CksOff_BtcGbv_t {
732 VFT_CELL_t Cell[NUM_VFT_COLUMNS];
733 };
734 typedef struct AVFS_CksOff_BtcGbv_t AVFS_CksOff_BtcGbv_t;
735
736 struct AVFS_meanNsigma_t {
737 uint32_t Aconstant[3];
738 uint16_t DC_tol_sigma;
739 uint16_t Platform_mean;
740 uint16_t Platform_sigma;
741 uint16_t PSM_Age_CompFactor;
742 uint8_t Static_Voltage_Offset[NUM_VFT_COLUMNS];
743 };
744 typedef struct AVFS_meanNsigma_t AVFS_meanNsigma_t;
745
746 struct AVFS_Sclk_Offset_t {
747 uint16_t Sclk_Offset[8];
748 };
749 typedef struct AVFS_Sclk_Offset_t AVFS_Sclk_Offset_t;
750
751 struct Power_Sharing_t {
752 uint32_t EnergyCounter;
753 uint32_t EngeryThreshold;
754 uint64_t AM_SCLK_CNT;
755 uint64_t AM_0_BUSY_CNT;
756 };
757 typedef struct Power_Sharing_t Power_Sharing_t;
758
759
760 #endif
761
762
763