Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  1/*
  2 * Copyright 2013 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 SMU7_DISCRETE_H
 25#define SMU7_DISCRETE_H
 26
 27#include "smu7.h"
 28
 29#pragma pack(push, 1)
 30
 31#define SMU7_DTE_ITERATIONS 5
 32#define SMU7_DTE_SOURCES 3
 33#define SMU7_DTE_SINKS 1
 34#define SMU7_NUM_CPU_TES 0
 35#define SMU7_NUM_GPU_TES 1
 36#define SMU7_NUM_NON_TES 2
 37
 38struct SMU7_SoftRegisters
 39{
 40    uint32_t        RefClockFrequency;
 41    uint32_t        PmTimerP;
 42    uint32_t        FeatureEnables;
 43    uint32_t        PreVBlankGap;
 44    uint32_t        VBlankTimeout;
 45    uint32_t        TrainTimeGap;
 46
 47    uint32_t        MvddSwitchTime;
 48    uint32_t        LongestAcpiTrainTime;
 49    uint32_t        AcpiDelay;
 50    uint32_t        G5TrainTime;
 51    uint32_t        DelayMpllPwron;
 52    uint32_t        VoltageChangeTimeout;
 53    uint32_t        HandshakeDisables;
 54
 55    uint8_t         DisplayPhy1Config;
 56    uint8_t         DisplayPhy2Config;
 57    uint8_t         DisplayPhy3Config;
 58    uint8_t         DisplayPhy4Config;
 59
 60    uint8_t         DisplayPhy5Config;
 61    uint8_t         DisplayPhy6Config;
 62    uint8_t         DisplayPhy7Config;
 63    uint8_t         DisplayPhy8Config;
 64
 65    uint32_t        AverageGraphicsA;
 66    uint32_t        AverageMemoryA;
 67    uint32_t        AverageGioA;
 68
 69    uint8_t         SClkDpmEnabledLevels;
 70    uint8_t         MClkDpmEnabledLevels;
 71    uint8_t         LClkDpmEnabledLevels;
 72    uint8_t         PCIeDpmEnabledLevels;
 73
 74    uint8_t         UVDDpmEnabledLevels;
 75    uint8_t         SAMUDpmEnabledLevels;
 76    uint8_t         ACPDpmEnabledLevels;
 77    uint8_t         VCEDpmEnabledLevels;
 78
 79    uint32_t        DRAM_LOG_ADDR_H;
 80    uint32_t        DRAM_LOG_ADDR_L;
 81    uint32_t        DRAM_LOG_PHY_ADDR_H;
 82    uint32_t        DRAM_LOG_PHY_ADDR_L;
 83    uint32_t        DRAM_LOG_BUFF_SIZE;
 84    uint32_t        UlvEnterC;
 85    uint32_t        UlvTime;
 86    uint32_t        Reserved[3];
 87
 88};
 89
 90typedef struct SMU7_SoftRegisters SMU7_SoftRegisters;
 91
 92struct SMU7_Discrete_VoltageLevel
 93{
 94    uint16_t    Voltage;
 95    uint16_t    StdVoltageHiSidd;
 96    uint16_t    StdVoltageLoSidd;
 97    uint8_t     Smio;
 98    uint8_t     padding;
 99};
100
101typedef struct SMU7_Discrete_VoltageLevel SMU7_Discrete_VoltageLevel;
102
103struct SMU7_Discrete_GraphicsLevel
104{
105    uint32_t    Flags;
106    uint32_t    MinVddc;
107    uint32_t    MinVddcPhases;
108
109    uint32_t    SclkFrequency;
110
111    uint8_t     padding1[2];
112    uint16_t    ActivityLevel;
113
114    uint32_t    CgSpllFuncCntl3;
115    uint32_t    CgSpllFuncCntl4;
116    uint32_t    SpllSpreadSpectrum;
117    uint32_t    SpllSpreadSpectrum2;
118    uint32_t    CcPwrDynRm;
119    uint32_t    CcPwrDynRm1;
120    uint8_t     SclkDid;
121    uint8_t     DisplayWatermark;
122    uint8_t     EnabledForActivity;
123    uint8_t     EnabledForThrottle;
124    uint8_t     UpH;
125    uint8_t     DownH;
126    uint8_t     VoltageDownH;
127    uint8_t     PowerThrottle;
128    uint8_t     DeepSleepDivId;
129    uint8_t     padding[3];
130};
131
132typedef struct SMU7_Discrete_GraphicsLevel SMU7_Discrete_GraphicsLevel;
133
134struct SMU7_Discrete_ACPILevel
135{
136    uint32_t    Flags;
137    uint32_t    MinVddc;
138    uint32_t    MinVddcPhases;
139    uint32_t    SclkFrequency;
140    uint8_t     SclkDid;
141    uint8_t     DisplayWatermark;
142    uint8_t     DeepSleepDivId;
143    uint8_t     padding;
144    uint32_t    CgSpllFuncCntl;
145    uint32_t    CgSpllFuncCntl2;
146    uint32_t    CgSpllFuncCntl3;
147    uint32_t    CgSpllFuncCntl4;
148    uint32_t    SpllSpreadSpectrum;
149    uint32_t    SpllSpreadSpectrum2;
150    uint32_t    CcPwrDynRm;
151    uint32_t    CcPwrDynRm1;
152};
153
154typedef struct SMU7_Discrete_ACPILevel SMU7_Discrete_ACPILevel;
155
156struct SMU7_Discrete_Ulv
157{
158    uint32_t    CcPwrDynRm;
159    uint32_t    CcPwrDynRm1;
160    uint16_t    VddcOffset;
161    uint8_t     VddcOffsetVid;
162    uint8_t     VddcPhase;
163    uint32_t    Reserved;
164};
165
166typedef struct SMU7_Discrete_Ulv SMU7_Discrete_Ulv;
167
168struct SMU7_Discrete_MemoryLevel
169{
170    uint32_t    MinVddc;
171    uint32_t    MinVddcPhases;
172    uint32_t    MinVddci;
173    uint32_t    MinMvdd;
174
175    uint32_t    MclkFrequency;
176
177    uint8_t     EdcReadEnable;
178    uint8_t     EdcWriteEnable;
179    uint8_t     RttEnable;
180    uint8_t     StutterEnable;
181
182    uint8_t     StrobeEnable;
183    uint8_t     StrobeRatio;
184    uint8_t     EnabledForThrottle;
185    uint8_t     EnabledForActivity;
186
187    uint8_t     UpH;
188    uint8_t     DownH;
189    uint8_t     VoltageDownH;
190    uint8_t     padding;
191
192    uint16_t    ActivityLevel;
193    uint8_t     DisplayWatermark;
194    uint8_t     padding1;
195
196    uint32_t    MpllFuncCntl;
197    uint32_t    MpllFuncCntl_1;
198    uint32_t    MpllFuncCntl_2;
199    uint32_t    MpllAdFuncCntl;
200    uint32_t    MpllDqFuncCntl;
201    uint32_t    MclkPwrmgtCntl;
202    uint32_t    DllCntl;
203    uint32_t    MpllSs1;
204    uint32_t    MpllSs2;
205};
206
207typedef struct SMU7_Discrete_MemoryLevel SMU7_Discrete_MemoryLevel;
208
209struct SMU7_Discrete_LinkLevel
210{
211    uint8_t     PcieGenSpeed;
212    uint8_t     PcieLaneCount;
213    uint8_t     EnabledForActivity;
214    uint8_t     Padding;
215    uint32_t    DownT;
216    uint32_t    UpT;
217    uint32_t    Reserved;
218};
219
220typedef struct SMU7_Discrete_LinkLevel SMU7_Discrete_LinkLevel;
221
222
223struct SMU7_Discrete_MCArbDramTimingTableEntry
224{
225    uint32_t McArbDramTiming;
226    uint32_t McArbDramTiming2;
227    uint8_t  McArbBurstTime;
228    uint8_t  padding[3];
229};
230
231typedef struct SMU7_Discrete_MCArbDramTimingTableEntry SMU7_Discrete_MCArbDramTimingTableEntry;
232
233struct SMU7_Discrete_MCArbDramTimingTable
234{
235    SMU7_Discrete_MCArbDramTimingTableEntry entries[SMU__NUM_SCLK_DPM_STATE][SMU__NUM_MCLK_DPM_LEVELS];
236};
237
238typedef struct SMU7_Discrete_MCArbDramTimingTable SMU7_Discrete_MCArbDramTimingTable;
239
240struct SMU7_Discrete_UvdLevel
241{
242    uint32_t VclkFrequency;
243    uint32_t DclkFrequency;
244    uint16_t MinVddc;
245    uint8_t  MinVddcPhases;
246    uint8_t  VclkDivider;
247    uint8_t  DclkDivider;
248    uint8_t  padding[3];
249};
250
251typedef struct SMU7_Discrete_UvdLevel SMU7_Discrete_UvdLevel;
252
253struct SMU7_Discrete_ExtClkLevel
254{
255    uint32_t Frequency;
256    uint16_t MinVoltage;
257    uint8_t  MinPhases;
258    uint8_t  Divider;
259};
260
261typedef struct SMU7_Discrete_ExtClkLevel SMU7_Discrete_ExtClkLevel;
262
263struct SMU7_Discrete_StateInfo
264{
265    uint32_t SclkFrequency;
266    uint32_t MclkFrequency;
267    uint32_t VclkFrequency;
268    uint32_t DclkFrequency;
269    uint32_t SamclkFrequency;
270    uint32_t AclkFrequency;
271    uint32_t EclkFrequency;
272    uint16_t MvddVoltage;
273    uint16_t padding16;
274    uint8_t  DisplayWatermark;
275    uint8_t  McArbIndex;
276    uint8_t  McRegIndex;
277    uint8_t  SeqIndex;
278    uint8_t  SclkDid;
279    int8_t   SclkIndex;
280    int8_t   MclkIndex;
281    uint8_t  PCIeGen;
282
283};
284
285typedef struct SMU7_Discrete_StateInfo SMU7_Discrete_StateInfo;
286
287
288struct SMU7_Discrete_DpmTable
289{
290    SMU7_PIDController                  GraphicsPIDController;
291    SMU7_PIDController                  MemoryPIDController;
292    SMU7_PIDController                  LinkPIDController;
293
294    uint32_t                            SystemFlags;
295
296
297    uint32_t                            SmioMaskVddcVid;
298    uint32_t                            SmioMaskVddcPhase;
299    uint32_t                            SmioMaskVddciVid;
300    uint32_t                            SmioMaskMvddVid;
301
302    uint32_t                            VddcLevelCount;
303    uint32_t                            VddciLevelCount;
304    uint32_t                            MvddLevelCount;
305
306    SMU7_Discrete_VoltageLevel          VddcLevel               [SMU7_MAX_LEVELS_VDDC];
307//    SMU7_Discrete_VoltageLevel          VddcStandardReference   [SMU7_MAX_LEVELS_VDDC];
308    SMU7_Discrete_VoltageLevel          VddciLevel              [SMU7_MAX_LEVELS_VDDCI];
309    SMU7_Discrete_VoltageLevel          MvddLevel               [SMU7_MAX_LEVELS_MVDD];
310
311    uint8_t                             GraphicsDpmLevelCount;
312    uint8_t                             MemoryDpmLevelCount;
313    uint8_t                             LinkLevelCount;
314    uint8_t                             UvdLevelCount;
315    uint8_t                             VceLevelCount;
316    uint8_t                             AcpLevelCount;
317    uint8_t                             SamuLevelCount;
318    uint8_t                             MasterDeepSleepControl;
319    uint32_t                            VRConfig;
320    uint32_t                            Reserved[4];
321//    uint32_t                            SamuDefaultLevel;
322
323    SMU7_Discrete_GraphicsLevel         GraphicsLevel           [SMU7_MAX_LEVELS_GRAPHICS];
324    SMU7_Discrete_MemoryLevel           MemoryACPILevel;
325    SMU7_Discrete_MemoryLevel           MemoryLevel             [SMU7_MAX_LEVELS_MEMORY];
326    SMU7_Discrete_LinkLevel             LinkLevel               [SMU7_MAX_LEVELS_LINK];
327    SMU7_Discrete_ACPILevel             ACPILevel;
328    SMU7_Discrete_UvdLevel              UvdLevel                [SMU7_MAX_LEVELS_UVD];
329    SMU7_Discrete_ExtClkLevel           VceLevel                [SMU7_MAX_LEVELS_VCE];
330    SMU7_Discrete_ExtClkLevel           AcpLevel                [SMU7_MAX_LEVELS_ACP];
331    SMU7_Discrete_ExtClkLevel           SamuLevel               [SMU7_MAX_LEVELS_SAMU];
332    SMU7_Discrete_Ulv                   Ulv;
333
334    uint32_t                            SclkStepSize;
335    uint32_t                            Smio                    [SMU7_MAX_ENTRIES_SMIO];
336
337    uint8_t                             UvdBootLevel;
338    uint8_t                             VceBootLevel;
339    uint8_t                             AcpBootLevel;
340    uint8_t                             SamuBootLevel;
341
342    uint8_t                             UVDInterval;
343    uint8_t                             VCEInterval;
344    uint8_t                             ACPInterval;
345    uint8_t                             SAMUInterval;
346
347    uint8_t                             GraphicsBootLevel;
348    uint8_t                             GraphicsVoltageChangeEnable;
349    uint8_t                             GraphicsThermThrottleEnable;
350    uint8_t                             GraphicsInterval;
351
352    uint8_t                             VoltageInterval;
353    uint8_t                             ThermalInterval;
354    uint16_t                            TemperatureLimitHigh;
355
356    uint16_t                            TemperatureLimitLow;
357    uint8_t                             MemoryBootLevel;
358    uint8_t                             MemoryVoltageChangeEnable;
359
360    uint8_t                             MemoryInterval;
361    uint8_t                             MemoryThermThrottleEnable;
362    uint16_t                            VddcVddciDelta;
363
364    uint16_t                            VoltageResponseTime;
365    uint16_t                            PhaseResponseTime;
366
367    uint8_t                             PCIeBootLinkLevel;
368    uint8_t                             PCIeGenInterval;
369    uint8_t                             DTEInterval;
370    uint8_t                             DTEMode;
371
372    uint8_t                             SVI2Enable;
373    uint8_t                             VRHotGpio;
374    uint8_t                             AcDcGpio;
375    uint8_t                             ThermGpio;
376
377    uint16_t                            PPM_PkgPwrLimit;
378    uint16_t                            PPM_TemperatureLimit;
379
380    uint16_t                            DefaultTdp;
381    uint16_t                            TargetTdp;
382
383    uint16_t                            FpsHighT;
384    uint16_t                            FpsLowT;
385
386    uint16_t                            BAPMTI_R  [SMU7_DTE_ITERATIONS][SMU7_DTE_SOURCES][SMU7_DTE_SINKS];
387    uint16_t                            BAPMTI_RC [SMU7_DTE_ITERATIONS][SMU7_DTE_SOURCES][SMU7_DTE_SINKS];
388
389    uint8_t                             DTEAmbientTempBase;
390    uint8_t                             DTETjOffset;
391    uint8_t                             GpuTjMax;
392    uint8_t                             GpuTjHyst;
393
394    uint16_t                            BootVddc;
395    uint16_t                            BootVddci;
396
397    uint16_t                            BootMVdd;
398    uint16_t                            padding;
399
400    uint32_t                            BAPM_TEMP_GRADIENT;
401
402    uint32_t                            LowSclkInterruptT;
403};
404
405typedef struct SMU7_Discrete_DpmTable SMU7_Discrete_DpmTable;
406
407#define SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE 16
408#define SMU7_DISCRETE_MC_REGISTER_ARRAY_SET_COUNT SMU7_MAX_LEVELS_MEMORY
409
410struct SMU7_Discrete_MCRegisterAddress
411{
412    uint16_t s0;
413    uint16_t s1;
414};
415
416typedef struct SMU7_Discrete_MCRegisterAddress SMU7_Discrete_MCRegisterAddress;
417
418struct SMU7_Discrete_MCRegisterSet
419{
420    uint32_t value[SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE];
421};
422
423typedef struct SMU7_Discrete_MCRegisterSet SMU7_Discrete_MCRegisterSet;
424
425struct SMU7_Discrete_MCRegisters
426{
427    uint8_t                             last;
428    uint8_t                             reserved[3];
429    SMU7_Discrete_MCRegisterAddress     address[SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE];
430    SMU7_Discrete_MCRegisterSet         data[SMU7_DISCRETE_MC_REGISTER_ARRAY_SET_COUNT];
431};
432
433typedef struct SMU7_Discrete_MCRegisters SMU7_Discrete_MCRegisters;
434
435struct SMU7_Discrete_FanTable
436{
437	uint16_t FdoMode;
438	int16_t  TempMin;
439	int16_t  TempMed;
440	int16_t  TempMax;
441	int16_t  Slope1;
442	int16_t  Slope2;
443	int16_t  FdoMin;
444	int16_t  HystUp;
445	int16_t  HystDown;
446	int16_t  HystSlope;
447	int16_t  TempRespLim;
448	int16_t  TempCurr;
449	int16_t  SlopeCurr;
450	int16_t  PwmCurr;
451	uint32_t RefreshPeriod;
452	int16_t  FdoMax;
453	uint8_t  TempSrc;
454	int8_t   Padding;
455};
456
457typedef struct SMU7_Discrete_FanTable SMU7_Discrete_FanTable;
458
459
460struct SMU7_Discrete_PmFuses {
461  // dw0-dw1
462  uint8_t BapmVddCVidHiSidd[8];
463
464  // dw2-dw3
465  uint8_t BapmVddCVidLoSidd[8];
466
467  // dw4-dw5
468  uint8_t VddCVid[8];
469
470  // dw6
471  uint8_t SviLoadLineEn;
472  uint8_t SviLoadLineVddC;
473  uint8_t SviLoadLineTrimVddC;
474  uint8_t SviLoadLineOffsetVddC;
475
476  // dw7
477  uint16_t TDC_VDDC_PkgLimit;
478  uint8_t TDC_VDDC_ThrottleReleaseLimitPerc;
479  uint8_t TDC_MAWt;
480
481  // dw8
482  uint8_t TdcWaterfallCtl;
483  uint8_t LPMLTemperatureMin;
484  uint8_t LPMLTemperatureMax;
485  uint8_t Reserved;
486
487  // dw9-dw10
488  uint8_t BapmVddCVidHiSidd2[8];
489
490  // dw11-dw12
491  int16_t FuzzyFan_ErrorSetDelta;
492  int16_t FuzzyFan_ErrorRateSetDelta;
493  int16_t FuzzyFan_PwmSetDelta;
494  uint16_t CalcMeasPowerBlend;
495
496  // dw13-dw16
497  uint8_t GnbLPML[16];
498
499  // dw17
500  uint8_t GnbLPMLMaxVid;
501  uint8_t GnbLPMLMinVid;
502  uint8_t Reserved1[2];
503
504  // dw18
505  uint16_t BapmVddCBaseLeakageHiSidd;
506  uint16_t BapmVddCBaseLeakageLoSidd;
507};
508
509typedef struct SMU7_Discrete_PmFuses SMU7_Discrete_PmFuses;
510
511
512#pragma pack(pop)
513
514#endif
515