root/drivers/gpu/drm/amd/powerplay/inc/smu75.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


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

/* [<][>][^][v][top][bottom][index][help] */