1 | /* |
---|---|
2 | * Copyright 2017 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 SMU72_DISCRETE_H |
25 | #define SMU72_DISCRETE_H |
26 | |
27 | #include "smu72.h" |
28 | |
29 | #if !defined(SMC_MICROCODE) |
30 | #pragma pack(push, 1) |
31 | #endif |
32 | |
33 | struct SMIO_Pattern { |
34 | uint16_t Voltage; |
35 | uint8_t Smio; |
36 | uint8_t padding; |
37 | }; |
38 | |
39 | typedef struct SMIO_Pattern SMIO_Pattern; |
40 | |
41 | struct SMIO_Table { |
42 | SMIO_Pattern Pattern[SMU_MAX_SMIO_LEVELS]; |
43 | }; |
44 | |
45 | typedef struct SMIO_Table SMIO_Table; |
46 | |
47 | struct SMU72_Discrete_GraphicsLevel { |
48 | SMU_VoltageLevel MinVoltage; |
49 | |
50 | uint32_t SclkFrequency; |
51 | |
52 | uint8_t pcieDpmLevel; |
53 | uint8_t DeepSleepDivId; |
54 | uint16_t ActivityLevel; |
55 | |
56 | uint32_t CgSpllFuncCntl3; |
57 | uint32_t CgSpllFuncCntl4; |
58 | uint32_t SpllSpreadSpectrum; |
59 | uint32_t SpllSpreadSpectrum2; |
60 | uint32_t CcPwrDynRm; |
61 | uint32_t CcPwrDynRm1; |
62 | uint8_t SclkDid; |
63 | uint8_t DisplayWatermark; |
64 | uint8_t EnabledForActivity; |
65 | uint8_t EnabledForThrottle; |
66 | uint8_t UpHyst; |
67 | uint8_t DownHyst; |
68 | uint8_t VoltageDownHyst; |
69 | uint8_t PowerThrottle; |
70 | }; |
71 | |
72 | typedef struct SMU72_Discrete_GraphicsLevel SMU72_Discrete_GraphicsLevel; |
73 | |
74 | struct SMU72_Discrete_ACPILevel { |
75 | uint32_t Flags; |
76 | SMU_VoltageLevel MinVoltage; |
77 | uint32_t SclkFrequency; |
78 | uint8_t SclkDid; |
79 | uint8_t DisplayWatermark; |
80 | uint8_t DeepSleepDivId; |
81 | uint8_t padding; |
82 | uint32_t CgSpllFuncCntl; |
83 | uint32_t CgSpllFuncCntl2; |
84 | uint32_t CgSpllFuncCntl3; |
85 | uint32_t CgSpllFuncCntl4; |
86 | uint32_t SpllSpreadSpectrum; |
87 | uint32_t SpllSpreadSpectrum2; |
88 | uint32_t CcPwrDynRm; |
89 | uint32_t CcPwrDynRm1; |
90 | }; |
91 | |
92 | typedef struct SMU72_Discrete_ACPILevel SMU72_Discrete_ACPILevel; |
93 | |
94 | struct SMU72_Discrete_Ulv { |
95 | uint32_t CcPwrDynRm; |
96 | uint32_t CcPwrDynRm1; |
97 | uint16_t VddcOffset; |
98 | uint8_t VddcOffsetVid; |
99 | uint8_t VddcPhase; |
100 | uint32_t Reserved; |
101 | }; |
102 | |
103 | typedef struct SMU72_Discrete_Ulv SMU72_Discrete_Ulv; |
104 | |
105 | struct SMU72_Discrete_MemoryLevel { |
106 | SMU_VoltageLevel MinVoltage; |
107 | uint32_t MinMvdd; |
108 | |
109 | uint32_t MclkFrequency; |
110 | |
111 | uint8_t EdcReadEnable; |
112 | uint8_t EdcWriteEnable; |
113 | uint8_t RttEnable; |
114 | uint8_t StutterEnable; |
115 | |
116 | uint8_t StrobeEnable; |
117 | uint8_t StrobeRatio; |
118 | uint8_t EnabledForThrottle; |
119 | uint8_t EnabledForActivity; |
120 | |
121 | uint8_t UpHyst; |
122 | uint8_t DownHyst; |
123 | uint8_t VoltageDownHyst; |
124 | uint8_t padding; |
125 | |
126 | uint16_t ActivityLevel; |
127 | uint8_t DisplayWatermark; |
128 | uint8_t padding1; |
129 | |
130 | uint32_t MpllFuncCntl; |
131 | uint32_t MpllFuncCntl_1; |
132 | uint32_t MpllFuncCntl_2; |
133 | uint32_t MpllAdFuncCntl; |
134 | uint32_t MpllDqFuncCntl; |
135 | uint32_t MclkPwrmgtCntl; |
136 | uint32_t DllCntl; |
137 | uint32_t MpllSs1; |
138 | uint32_t MpllSs2; |
139 | }; |
140 | |
141 | typedef struct SMU72_Discrete_MemoryLevel SMU72_Discrete_MemoryLevel; |
142 | |
143 | struct SMU72_Discrete_LinkLevel { |
144 | uint8_t PcieGenSpeed; /*< 0:PciE-gen1 1:PciE-gen2 2:PciE-gen3 */ |
145 | uint8_t PcieLaneCount; /*< 1=x1, 2=x2, 3=x4, 4=x8, 5=x12, 6=x16 */ |
146 | uint8_t EnabledForActivity; |
147 | uint8_t SPC; |
148 | uint32_t DownThreshold; |
149 | uint32_t UpThreshold; |
150 | uint32_t Reserved; |
151 | }; |
152 | |
153 | typedef struct SMU72_Discrete_LinkLevel SMU72_Discrete_LinkLevel; |
154 | |
155 | /* MC ARB DRAM Timing registers. */ |
156 | struct SMU72_Discrete_MCArbDramTimingTableEntry { |
157 | uint32_t McArbDramTiming; |
158 | uint32_t McArbDramTiming2; |
159 | uint8_t McArbBurstTime; |
160 | uint8_t padding[3]; |
161 | }; |
162 | |
163 | typedef struct SMU72_Discrete_MCArbDramTimingTableEntry SMU72_Discrete_MCArbDramTimingTableEntry; |
164 | |
165 | struct SMU72_Discrete_MCArbDramTimingTable { |
166 | SMU72_Discrete_MCArbDramTimingTableEntry entries[SMU__NUM_SCLK_DPM_STATE][SMU__NUM_MCLK_DPM_LEVELS]; |
167 | }; |
168 | |
169 | typedef struct SMU72_Discrete_MCArbDramTimingTable SMU72_Discrete_MCArbDramTimingTable; |
170 | |
171 | /* UVD VCLK/DCLK state (level) definition. */ |
172 | struct SMU72_Discrete_UvdLevel { |
173 | uint32_t VclkFrequency; |
174 | uint32_t DclkFrequency; |
175 | SMU_VoltageLevel MinVoltage; |
176 | uint8_t VclkDivider; |
177 | uint8_t DclkDivider; |
178 | uint8_t padding[2]; |
179 | }; |
180 | |
181 | typedef struct SMU72_Discrete_UvdLevel SMU72_Discrete_UvdLevel; |
182 | |
183 | /* Clocks for other external blocks (VCE, ACP, SAMU). */ |
184 | struct SMU72_Discrete_ExtClkLevel { |
185 | uint32_t Frequency; |
186 | SMU_VoltageLevel MinVoltage; |
187 | uint8_t Divider; |
188 | uint8_t padding[3]; |
189 | }; |
190 | |
191 | typedef struct SMU72_Discrete_ExtClkLevel SMU72_Discrete_ExtClkLevel; |
192 | |
193 | struct SMU72_Discrete_StateInfo { |
194 | uint32_t SclkFrequency; |
195 | uint32_t MclkFrequency; |
196 | uint32_t VclkFrequency; |
197 | uint32_t DclkFrequency; |
198 | uint32_t SamclkFrequency; |
199 | uint32_t AclkFrequency; |
200 | uint32_t EclkFrequency; |
201 | uint16_t MvddVoltage; |
202 | uint16_t padding16; |
203 | uint8_t DisplayWatermark; |
204 | uint8_t McArbIndex; |
205 | uint8_t McRegIndex; |
206 | uint8_t SeqIndex; |
207 | uint8_t SclkDid; |
208 | int8_t SclkIndex; |
209 | int8_t MclkIndex; |
210 | uint8_t PCIeGen; |
211 | |
212 | }; |
213 | |
214 | typedef struct SMU72_Discrete_StateInfo SMU72_Discrete_StateInfo; |
215 | |
216 | struct SMU72_Discrete_DpmTable { |
217 | /* Multi-DPM controller settings */ |
218 | SMU72_PIDController GraphicsPIDController; |
219 | SMU72_PIDController MemoryPIDController; |
220 | SMU72_PIDController LinkPIDController; |
221 | |
222 | uint32_t SystemFlags; |
223 | |
224 | /* SMIO masks for voltage and phase controls */ |
225 | uint32_t VRConfig; |
226 | uint32_t SmioMask1; |
227 | uint32_t SmioMask2; |
228 | SMIO_Table SmioTable1; |
229 | SMIO_Table SmioTable2; |
230 | |
231 | uint32_t VddcLevelCount; |
232 | uint32_t VddciLevelCount; |
233 | uint32_t VddGfxLevelCount; |
234 | uint32_t MvddLevelCount; |
235 | |
236 | uint16_t VddcTable[SMU72_MAX_LEVELS_VDDC]; |
237 | uint16_t VddGfxTable[SMU72_MAX_LEVELS_VDDGFX]; |
238 | uint16_t VddciTable[SMU72_MAX_LEVELS_VDDCI]; |
239 | |
240 | uint8_t BapmVddGfxVidHiSidd[SMU72_MAX_LEVELS_VDDGFX]; |
241 | uint8_t BapmVddGfxVidLoSidd[SMU72_MAX_LEVELS_VDDGFX]; |
242 | uint8_t BapmVddGfxVidHiSidd2[SMU72_MAX_LEVELS_VDDGFX]; |
243 | |
244 | uint8_t BapmVddcVidHiSidd[SMU72_MAX_LEVELS_VDDC]; |
245 | uint8_t BapmVddcVidLoSidd[SMU72_MAX_LEVELS_VDDC]; |
246 | uint8_t BapmVddcVidHiSidd2[SMU72_MAX_LEVELS_VDDC]; |
247 | |
248 | uint8_t GraphicsDpmLevelCount; |
249 | uint8_t MemoryDpmLevelCount; |
250 | uint8_t LinkLevelCount; |
251 | uint8_t MasterDeepSleepControl; |
252 | |
253 | uint8_t UvdLevelCount; |
254 | uint8_t VceLevelCount; |
255 | uint8_t AcpLevelCount; |
256 | uint8_t SamuLevelCount; |
257 | |
258 | uint8_t ThermOutGpio; |
259 | uint8_t ThermOutPolarity; |
260 | uint8_t ThermOutMode; |
261 | uint8_t DPMFreezeAndForced; |
262 | uint32_t Reserved[4]; |
263 | |
264 | /* State table entries for each DPM state */ |
265 | SMU72_Discrete_GraphicsLevel GraphicsLevel[SMU72_MAX_LEVELS_GRAPHICS]; |
266 | SMU72_Discrete_MemoryLevel MemoryACPILevel; |
267 | SMU72_Discrete_MemoryLevel MemoryLevel[SMU72_MAX_LEVELS_MEMORY]; |
268 | SMU72_Discrete_LinkLevel LinkLevel[SMU72_MAX_LEVELS_LINK]; |
269 | SMU72_Discrete_ACPILevel ACPILevel; |
270 | SMU72_Discrete_UvdLevel UvdLevel[SMU72_MAX_LEVELS_UVD]; |
271 | SMU72_Discrete_ExtClkLevel VceLevel[SMU72_MAX_LEVELS_VCE]; |
272 | SMU72_Discrete_ExtClkLevel AcpLevel[SMU72_MAX_LEVELS_ACP]; |
273 | SMU72_Discrete_ExtClkLevel SamuLevel[SMU72_MAX_LEVELS_SAMU]; |
274 | SMU72_Discrete_Ulv Ulv; |
275 | |
276 | uint32_t SclkStepSize; |
277 | uint32_t Smio[SMU72_MAX_ENTRIES_SMIO]; |
278 | |
279 | uint8_t UvdBootLevel; |
280 | uint8_t VceBootLevel; |
281 | uint8_t AcpBootLevel; |
282 | uint8_t SamuBootLevel; |
283 | |
284 | uint8_t GraphicsBootLevel; |
285 | uint8_t GraphicsVoltageChangeEnable; |
286 | uint8_t GraphicsThermThrottleEnable; |
287 | uint8_t GraphicsInterval; |
288 | |
289 | uint8_t VoltageInterval; |
290 | uint8_t ThermalInterval; |
291 | uint16_t TemperatureLimitHigh; |
292 | |
293 | uint16_t TemperatureLimitLow; |
294 | uint8_t MemoryBootLevel; |
295 | uint8_t MemoryVoltageChangeEnable; |
296 | |
297 | uint16_t BootMVdd; |
298 | uint8_t MemoryInterval; |
299 | uint8_t MemoryThermThrottleEnable; |
300 | |
301 | uint16_t VoltageResponseTime; |
302 | uint16_t PhaseResponseTime; |
303 | |
304 | uint8_t PCIeBootLinkLevel; |
305 | uint8_t PCIeGenInterval; |
306 | uint8_t DTEInterval; |
307 | uint8_t DTEMode; |
308 | |
309 | uint8_t SVI2Enable; |
310 | uint8_t VRHotGpio; |
311 | uint8_t AcDcGpio; |
312 | uint8_t ThermGpio; |
313 | |
314 | uint16_t PPM_PkgPwrLimit; |
315 | uint16_t PPM_TemperatureLimit; |
316 | |
317 | uint16_t DefaultTdp; |
318 | uint16_t TargetTdp; |
319 | |
320 | uint16_t FpsHighThreshold; |
321 | uint16_t FpsLowThreshold; |
322 | |
323 | uint16_t BAPMTI_R[SMU72_DTE_ITERATIONS][SMU72_DTE_SOURCES][SMU72_DTE_SINKS]; |
324 | uint16_t BAPMTI_RC[SMU72_DTE_ITERATIONS][SMU72_DTE_SOURCES][SMU72_DTE_SINKS]; |
325 | |
326 | uint8_t DTEAmbientTempBase; |
327 | uint8_t DTETjOffset; |
328 | uint8_t GpuTjMax; |
329 | uint8_t GpuTjHyst; |
330 | |
331 | SMU_VoltageLevel BootVoltage; |
332 | |
333 | uint32_t BAPM_TEMP_GRADIENT; |
334 | |
335 | uint32_t LowSclkInterruptThreshold; |
336 | uint32_t VddGfxReChkWait; |
337 | |
338 | uint8_t ClockStretcherAmount; |
339 | |
340 | uint8_t Sclk_CKS_masterEn0_7; |
341 | uint8_t Sclk_CKS_masterEn8_15; |
342 | uint8_t padding[1]; |
343 | |
344 | uint8_t Sclk_voltageOffset[8]; |
345 | |
346 | SMU_ClockStretcherDataTable ClockStretcherDataTable; |
347 | SMU_CKS_LOOKUPTable CKS_LOOKUPTable; |
348 | }; |
349 | |
350 | typedef struct SMU72_Discrete_DpmTable SMU72_Discrete_DpmTable; |
351 | |
352 | /* --------------------------------------------------- AC Timing Parameters ------------------------------------------------ */ |
353 | #define SMU72_DISCRETE_MC_REGISTER_ARRAY_SIZE 16 |
354 | #define SMU72_DISCRETE_MC_REGISTER_ARRAY_SET_COUNT SMU72_MAX_LEVELS_MEMORY /* DPM */ |
355 | |
356 | struct SMU72_Discrete_MCRegisterAddress { |
357 | uint16_t s0; |
358 | uint16_t s1; |
359 | }; |
360 | |
361 | typedef struct SMU72_Discrete_MCRegisterAddress SMU72_Discrete_MCRegisterAddress; |
362 | |
363 | struct SMU72_Discrete_MCRegisterSet { |
364 | uint32_t value[SMU72_DISCRETE_MC_REGISTER_ARRAY_SIZE]; |
365 | }; |
366 | |
367 | typedef struct SMU72_Discrete_MCRegisterSet SMU72_Discrete_MCRegisterSet; |
368 | |
369 | struct SMU72_Discrete_MCRegisters { |
370 | uint8_t last; |
371 | uint8_t reserved[3]; |
372 | SMU72_Discrete_MCRegisterAddress address[SMU72_DISCRETE_MC_REGISTER_ARRAY_SIZE]; |
373 | SMU72_Discrete_MCRegisterSet data[SMU72_DISCRETE_MC_REGISTER_ARRAY_SET_COUNT]; |
374 | }; |
375 | |
376 | typedef struct SMU72_Discrete_MCRegisters SMU72_Discrete_MCRegisters; |
377 | |
378 | |
379 | /* --------------------------------------------------- Fan Table ----------------------------------------------------------- */ |
380 | |
381 | struct SMU72_Discrete_FanTable { |
382 | uint16_t FdoMode; |
383 | int16_t TempMin; |
384 | int16_t TempMed; |
385 | int16_t TempMax; |
386 | int16_t Slope1; |
387 | int16_t Slope2; |
388 | int16_t FdoMin; |
389 | int16_t HystUp; |
390 | int16_t HystDown; |
391 | int16_t HystSlope; |
392 | int16_t TempRespLim; |
393 | int16_t TempCurr; |
394 | int16_t SlopeCurr; |
395 | int16_t PwmCurr; |
396 | uint32_t RefreshPeriod; |
397 | int16_t FdoMax; |
398 | uint8_t TempSrc; |
399 | int8_t FanControl_GL_Flag; |
400 | }; |
401 | |
402 | typedef struct SMU72_Discrete_FanTable SMU72_Discrete_FanTable; |
403 | |
404 | #define SMU7_DISCRETE_GPIO_SCLK_DEBUG 4 |
405 | #define SMU7_DISCRETE_GPIO_SCLK_DEBUG_BIT (0x1 << SMU7_DISCRETE_GPIO_SCLK_DEBUG) |
406 | |
407 | struct SMU7_MclkDpmScoreboard { |
408 | |
409 | uint32_t PercentageBusy; |
410 | |
411 | int32_t PIDError; |
412 | int32_t PIDIntegral; |
413 | int32_t PIDOutput; |
414 | |
415 | uint32_t SigmaDeltaAccum; |
416 | uint32_t SigmaDeltaOutput; |
417 | uint32_t SigmaDeltaLevel; |
418 | |
419 | uint32_t UtilizationSetpoint; |
420 | |
421 | uint8_t TdpClampMode; |
422 | uint8_t TdcClampMode; |
423 | uint8_t ThermClampMode; |
424 | uint8_t VoltageBusy; |
425 | |
426 | int8_t CurrLevel; |
427 | int8_t TargLevel; |
428 | uint8_t LevelChangeInProgress; |
429 | uint8_t UpHyst; |
430 | |
431 | uint8_t DownHyst; |
432 | uint8_t VoltageDownHyst; |
433 | uint8_t DpmEnable; |
434 | uint8_t DpmRunning; |
435 | |
436 | uint8_t DpmForce; |
437 | uint8_t DpmForceLevel; |
438 | uint8_t DisplayWatermark; |
439 | uint8_t McArbIndex; |
440 | |
441 | uint32_t MinimumPerfMclk; |
442 | |
443 | uint8_t AcpiReq; |
444 | uint8_t AcpiAck; |
445 | uint8_t MclkSwitchInProgress; |
446 | uint8_t MclkSwitchCritical; |
447 | |
448 | uint8_t IgnoreVBlank; |
449 | uint8_t TargetMclkIndex; |
450 | uint8_t TargetMvddIndex; |
451 | uint8_t MclkSwitchResult; |
452 | |
453 | uint16_t VbiFailureCount; |
454 | uint8_t VbiWaitCounter; |
455 | uint8_t EnabledLevelsChange; |
456 | |
457 | uint16_t LevelResidencyCountersN[SMU72_MAX_LEVELS_MEMORY]; |
458 | uint16_t LevelSwitchCounters[SMU72_MAX_LEVELS_MEMORY]; |
459 | |
460 | void (*TargetStateCalculator)(uint8_t); |
461 | void (*SavedTargetStateCalculator)(uint8_t); |
462 | |
463 | uint16_t AutoDpmInterval; |
464 | uint16_t AutoDpmRange; |
465 | |
466 | uint16_t VbiTimeoutCount; |
467 | uint16_t MclkSwitchingTime; |
468 | |
469 | uint8_t fastSwitch; |
470 | uint8_t Save_PIC_VDDGFX_EXIT; |
471 | uint8_t Save_PIC_VDDGFX_ENTER; |
472 | uint8_t padding; |
473 | |
474 | }; |
475 | |
476 | typedef struct SMU7_MclkDpmScoreboard SMU7_MclkDpmScoreboard; |
477 | |
478 | struct SMU7_UlvScoreboard { |
479 | uint8_t EnterUlv; |
480 | uint8_t ExitUlv; |
481 | uint8_t UlvActive; |
482 | uint8_t WaitingForUlv; |
483 | uint8_t UlvEnable; |
484 | uint8_t UlvRunning; |
485 | uint8_t UlvMasterEnable; |
486 | uint8_t padding; |
487 | uint32_t UlvAbortedCount; |
488 | uint32_t UlvTimeStamp; |
489 | }; |
490 | |
491 | typedef struct SMU7_UlvScoreboard SMU7_UlvScoreboard; |
492 | |
493 | struct VddgfxSavedRegisters { |
494 | uint32_t GPU_DBG[3]; |
495 | uint32_t MEC_BaseAddress_Hi; |
496 | uint32_t MEC_BaseAddress_Lo; |
497 | uint32_t THM_TMON0_CTRL2__RDIR_PRESENT; |
498 | uint32_t THM_TMON1_CTRL2__RDIR_PRESENT; |
499 | uint32_t CP_INT_CNTL; |
500 | }; |
501 | |
502 | typedef struct VddgfxSavedRegisters VddgfxSavedRegisters; |
503 | |
504 | struct SMU7_VddGfxScoreboard { |
505 | uint8_t VddGfxEnable; |
506 | uint8_t VddGfxActive; |
507 | uint8_t VPUResetOccured; |
508 | uint8_t padding; |
509 | |
510 | uint32_t VddGfxEnteredCount; |
511 | uint32_t VddGfxAbortedCount; |
512 | |
513 | uint32_t VddGfxVid; |
514 | |
515 | VddgfxSavedRegisters SavedRegisters; |
516 | }; |
517 | |
518 | typedef struct SMU7_VddGfxScoreboard SMU7_VddGfxScoreboard; |
519 | |
520 | struct SMU7_TdcLimitScoreboard { |
521 | uint8_t Enable; |
522 | uint8_t Running; |
523 | uint16_t Alpha; |
524 | uint32_t FilteredIddc; |
525 | uint32_t IddcLimit; |
526 | uint32_t IddcHyst; |
527 | SMU7_HystController_Data HystControllerData; |
528 | }; |
529 | |
530 | typedef struct SMU7_TdcLimitScoreboard SMU7_TdcLimitScoreboard; |
531 | |
532 | struct SMU7_PkgPwrLimitScoreboard { |
533 | uint8_t Enable; |
534 | uint8_t Running; |
535 | uint16_t Alpha; |
536 | uint32_t FilteredPkgPwr; |
537 | uint32_t Limit; |
538 | uint32_t Hyst; |
539 | uint32_t LimitFromDriver; |
540 | SMU7_HystController_Data HystControllerData; |
541 | }; |
542 | |
543 | typedef struct SMU7_PkgPwrLimitScoreboard SMU7_PkgPwrLimitScoreboard; |
544 | |
545 | struct SMU7_BapmScoreboard { |
546 | uint32_t source_powers[SMU72_DTE_SOURCES]; |
547 | uint32_t source_powers_last[SMU72_DTE_SOURCES]; |
548 | int32_t entity_temperatures[SMU72_NUM_GPU_TES]; |
549 | int32_t initial_entity_temperatures[SMU72_NUM_GPU_TES]; |
550 | int32_t Limit; |
551 | int32_t Hyst; |
552 | int32_t therm_influence_coeff_table[SMU72_DTE_ITERATIONS * SMU72_DTE_SOURCES * SMU72_DTE_SINKS * 2]; |
553 | int32_t therm_node_table[SMU72_DTE_ITERATIONS * SMU72_DTE_SOURCES * SMU72_DTE_SINKS]; |
554 | uint16_t ConfigTDPPowerScalar; |
555 | uint16_t FanSpeedPowerScalar; |
556 | uint16_t OverDrivePowerScalar; |
557 | uint16_t OverDriveLimitScalar; |
558 | uint16_t FinalPowerScalar; |
559 | uint8_t VariantID; |
560 | uint8_t spare997; |
561 | |
562 | SMU7_HystController_Data HystControllerData; |
563 | |
564 | int32_t temperature_gradient_slope; |
565 | int32_t temperature_gradient; |
566 | uint32_t measured_temperature; |
567 | }; |
568 | |
569 | |
570 | typedef struct SMU7_BapmScoreboard SMU7_BapmScoreboard; |
571 | |
572 | struct SMU7_AcpiScoreboard { |
573 | uint32_t SavedInterruptMask[2]; |
574 | uint8_t LastACPIRequest; |
575 | uint8_t CgBifResp; |
576 | uint8_t RequestType; |
577 | uint8_t Padding; |
578 | SMU72_Discrete_ACPILevel D0Level; |
579 | }; |
580 | |
581 | typedef struct SMU7_AcpiScoreboard SMU7_AcpiScoreboard; |
582 | |
583 | struct SMU72_Discrete_PmFuses { |
584 | /* dw1 */ |
585 | uint8_t SviLoadLineEn; |
586 | uint8_t SviLoadLineVddC; |
587 | uint8_t SviLoadLineTrimVddC; |
588 | uint8_t SviLoadLineOffsetVddC; |
589 | |
590 | /* dw2 */ |
591 | uint16_t TDC_VDDC_PkgLimit; |
592 | uint8_t TDC_VDDC_ThrottleReleaseLimitPerc; |
593 | uint8_t TDC_MAWt; |
594 | |
595 | /* dw3 */ |
596 | uint8_t TdcWaterfallCtl; |
597 | uint8_t LPMLTemperatureMin; |
598 | uint8_t LPMLTemperatureMax; |
599 | uint8_t Reserved; |
600 | |
601 | /* dw4-dw7 */ |
602 | uint8_t LPMLTemperatureScaler[16]; |
603 | |
604 | /* dw8-dw9 */ |
605 | int16_t FuzzyFan_ErrorSetDelta; |
606 | int16_t FuzzyFan_ErrorRateSetDelta; |
607 | int16_t FuzzyFan_PwmSetDelta; |
608 | uint16_t Reserved6; |
609 | |
610 | /* dw10-dw14 */ |
611 | uint8_t GnbLPML[16]; |
612 | |
613 | /* dw15 */ |
614 | uint8_t GnbLPMLMaxVid; |
615 | uint8_t GnbLPMLMinVid; |
616 | uint8_t Reserved1[2]; |
617 | |
618 | /* dw16 */ |
619 | uint16_t BapmVddCBaseLeakageHiSidd; |
620 | uint16_t BapmVddCBaseLeakageLoSidd; |
621 | }; |
622 | |
623 | typedef struct SMU72_Discrete_PmFuses SMU72_Discrete_PmFuses; |
624 | |
625 | struct SMU7_Discrete_Log_Header_Table { |
626 | uint32_t version; |
627 | uint32_t asic_id; |
628 | uint16_t flags; |
629 | uint16_t entry_size; |
630 | uint32_t total_size; |
631 | uint32_t num_of_entries; |
632 | uint8_t type; |
633 | uint8_t mode; |
634 | uint8_t filler_0[2]; |
635 | uint32_t filler_1[2]; |
636 | }; |
637 | |
638 | typedef struct SMU7_Discrete_Log_Header_Table SMU7_Discrete_Log_Header_Table; |
639 | |
640 | struct SMU7_Discrete_Log_Cntl { |
641 | uint8_t Enabled; |
642 | uint8_t Type; |
643 | uint8_t padding[2]; |
644 | uint32_t BufferSize; |
645 | uint32_t SamplesLogged; |
646 | uint32_t SampleSize; |
647 | uint32_t AddrL; |
648 | uint32_t AddrH; |
649 | }; |
650 | |
651 | typedef struct SMU7_Discrete_Log_Cntl SMU7_Discrete_Log_Cntl; |
652 | |
653 | #define CAC_ACC_NW_NUM_OF_SIGNALS 87 |
654 | |
655 | struct SMU7_Discrete_Cac_Collection_Table { |
656 | uint32_t temperature; |
657 | uint32_t cac_acc_nw[CAC_ACC_NW_NUM_OF_SIGNALS]; |
658 | }; |
659 | |
660 | typedef struct SMU7_Discrete_Cac_Collection_Table SMU7_Discrete_Cac_Collection_Table; |
661 | |
662 | struct SMU7_Discrete_Cac_Verification_Table { |
663 | uint32_t VddcTotalPower; |
664 | uint32_t VddcLeakagePower; |
665 | uint32_t VddcConstantPower; |
666 | uint32_t VddcGfxDynamicPower; |
667 | uint32_t VddcUvdDynamicPower; |
668 | uint32_t VddcVceDynamicPower; |
669 | uint32_t VddcAcpDynamicPower; |
670 | uint32_t VddcPcieDynamicPower; |
671 | uint32_t VddcDceDynamicPower; |
672 | uint32_t VddcCurrent; |
673 | uint32_t VddcVoltage; |
674 | uint32_t VddciTotalPower; |
675 | uint32_t VddciLeakagePower; |
676 | uint32_t VddciConstantPower; |
677 | uint32_t VddciDynamicPower; |
678 | uint32_t Vddr1TotalPower; |
679 | uint32_t Vddr1LeakagePower; |
680 | uint32_t Vddr1ConstantPower; |
681 | uint32_t Vddr1DynamicPower; |
682 | uint32_t spare[4]; |
683 | uint32_t temperature; |
684 | }; |
685 | |
686 | typedef struct SMU7_Discrete_Cac_Verification_Table SMU7_Discrete_Cac_Verification_Table; |
687 | |
688 | struct SMU7_Discrete_Pm_Status_Table { |
689 | /* Thermal entities */ |
690 | int32_t T_meas_max; |
691 | int32_t T_meas_acc; |
692 | int32_t T_calc_max; |
693 | int32_t T_calc_acc; |
694 | uint32_t P_scalar_acc; |
695 | uint32_t P_calc_max; |
696 | uint32_t P_calc_acc; |
697 | |
698 | /*Voltage domains */ |
699 | uint32_t I_calc_max; |
700 | uint32_t I_calc_acc; |
701 | uint32_t I_calc_acc_vddci; |
702 | uint32_t V_calc_noload_acc; |
703 | uint32_t V_calc_load_acc; |
704 | uint32_t V_calc_noload_acc_vddci; |
705 | uint32_t P_meas_acc; |
706 | uint32_t V_meas_noload_acc; |
707 | uint32_t V_meas_load_acc; |
708 | uint32_t I_meas_acc; |
709 | uint32_t P_meas_acc_vddci; |
710 | uint32_t V_meas_noload_acc_vddci; |
711 | uint32_t V_meas_load_acc_vddci; |
712 | uint32_t I_meas_acc_vddci; |
713 | |
714 | /*Frequency */ |
715 | uint16_t Sclk_dpm_residency[8]; |
716 | uint16_t Uvd_dpm_residency[8]; |
717 | uint16_t Vce_dpm_residency[8]; |
718 | uint16_t Mclk_dpm_residency[4]; |
719 | |
720 | /*Chip */ |
721 | uint32_t P_vddci_acc; |
722 | uint32_t P_vddr1_acc; |
723 | uint32_t P_nte1_acc; |
724 | uint32_t PkgPwr_max; |
725 | uint32_t PkgPwr_acc; |
726 | uint32_t MclkSwitchingTime_max; |
727 | uint32_t MclkSwitchingTime_acc; |
728 | uint32_t FanPwm_acc; |
729 | uint32_t FanRpm_acc; |
730 | |
731 | uint32_t AccCnt; |
732 | }; |
733 | |
734 | typedef struct SMU7_Discrete_Pm_Status_Table SMU7_Discrete_Pm_Status_Table; |
735 | |
736 | /*FIXME THESE NEED TO BE UPDATED */ |
737 | #define SMU7_SCLK_CAC 0x561 |
738 | #define SMU7_MCLK_CAC 0xF9 |
739 | #define SMU7_VCLK_CAC 0x2DE |
740 | #define SMU7_DCLK_CAC 0x2DE |
741 | #define SMU7_ECLK_CAC 0x25E |
742 | #define SMU7_ACLK_CAC 0x25E |
743 | #define SMU7_SAMCLK_CAC 0x25E |
744 | #define SMU7_DISPCLK_CAC 0x100 |
745 | #define SMU7_CAC_CONSTANT 0x2EE3430 |
746 | #define SMU7_CAC_CONSTANT_SHIFT 18 |
747 | |
748 | #define SMU7_VDDCI_MCLK_CONST 1765 |
749 | #define SMU7_VDDCI_MCLK_CONST_SHIFT 16 |
750 | #define SMU7_VDDCI_VDDCI_CONST 50958 |
751 | #define SMU7_VDDCI_VDDCI_CONST_SHIFT 14 |
752 | #define SMU7_VDDCI_CONST 11781 |
753 | |
754 | #define SMU7_12C_VDDCI_MCLK_CONST 1623 |
755 | #define SMU7_12C_VDDCI_MCLK_CONST_SHIFT 15 |
756 | #define SMU7_12C_VDDCI_VDDCI_CONST 40088 |
757 | #define SMU7_12C_VDDCI_VDDCI_CONST_SHIFT 13 |
758 | #define SMU7_12C_VDDCI_CONST 20856 |
759 | |
760 | #define SMU7_VDDCI_STROBE_PWR 1331 |
761 | |
762 | #define SMU7_VDDR1_CONST 693 |
763 | #define SMU7_VDDR1_CAC_WEIGHT 20 |
764 | #define SMU7_VDDR1_CAC_WEIGHT_SHIFT 19 |
765 | #define SMU7_VDDR1_STROBE_PWR 512 |
766 | |
767 | #define SMU7_AREA_COEFF_UVD 0xA78 |
768 | #define SMU7_AREA_COEFF_VCE 0x190A |
769 | #define SMU7_AREA_COEFF_ACP 0x22D1 |
770 | #define SMU7_AREA_COEFF_SAMU 0x534 |
771 | |
772 | /*ThermOutMode values */ |
773 | #define SMU7_THERM_OUT_MODE_DISABLE 0x0 |
774 | #define SMU7_THERM_OUT_MODE_THERM_ONLY 0x1 |
775 | #define SMU7_THERM_OUT_MODE_THERM_VRHOT 0x2 |
776 | |
777 | #if !defined(SMC_MICROCODE) |
778 | #pragma pack(pop) |
779 | #endif |
780 | |
781 | |
782 | #endif |
783 | |
784 |
Definitions
- SMIO_Pattern
- SMIO_Table
- SMU72_Discrete_GraphicsLevel
- SMU72_Discrete_ACPILevel
- SMU72_Discrete_Ulv
- SMU72_Discrete_MemoryLevel
- SMU72_Discrete_LinkLevel
- SMU72_Discrete_MCArbDramTimingTableEntry
- SMU72_Discrete_MCArbDramTimingTable
- SMU72_Discrete_UvdLevel
- SMU72_Discrete_ExtClkLevel
- SMU72_Discrete_StateInfo
- SMU72_Discrete_DpmTable
- SMU72_Discrete_MCRegisterAddress
- SMU72_Discrete_MCRegisterSet
- SMU72_Discrete_MCRegisters
- SMU72_Discrete_FanTable
- SMU7_MclkDpmScoreboard
- SMU7_UlvScoreboard
- VddgfxSavedRegisters
- SMU7_VddGfxScoreboard
- SMU7_TdcLimitScoreboard
- SMU7_PkgPwrLimitScoreboard
- SMU7_BapmScoreboard
- SMU7_AcpiScoreboard
- SMU72_Discrete_PmFuses
- SMU7_Discrete_Log_Header_Table
- SMU7_Discrete_Log_Cntl
- SMU7_Discrete_Cac_Collection_Table
- SMU7_Discrete_Cac_Verification_Table
Improve your Profiling and Debugging skills
Find out more