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

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

INCLUDED FROM


   1 /*
   2  * Copyright 2015 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 _SMU73_H_
  24 #define _SMU73_H_
  25 
  26 #pragma pack(push, 1)
  27 enum SID_OPTION {
  28   SID_OPTION_HI,
  29   SID_OPTION_LO,
  30   SID_OPTION_COUNT
  31 };
  32 
  33 enum Poly3rdOrderCoeff {
  34     LEAKAGE_TEMPERATURE_SCALAR,
  35     LEAKAGE_VOLTAGE_SCALAR,
  36     DYNAMIC_VOLTAGE_SCALAR,
  37     POLY_3RD_ORDER_COUNT
  38 };
  39 
  40 struct SMU7_Poly3rdOrder_Data
  41 {
  42     int32_t a;
  43     int32_t b;
  44     int32_t c;
  45     int32_t d;
  46     uint8_t a_shift;
  47     uint8_t b_shift;
  48     uint8_t c_shift;
  49     uint8_t x_shift;
  50 };
  51 
  52 typedef struct SMU7_Poly3rdOrder_Data SMU7_Poly3rdOrder_Data;
  53 
  54 struct Power_Calculator_Data
  55 {
  56   uint16_t NoLoadVoltage;
  57   uint16_t LoadVoltage;
  58   uint16_t Resistance;
  59   uint16_t Temperature;
  60   uint16_t BaseLeakage;
  61   uint16_t LkgTempScalar;
  62   uint16_t LkgVoltScalar;
  63   uint16_t LkgAreaScalar;
  64   uint16_t LkgPower;
  65   uint16_t DynVoltScalar;
  66   uint32_t Cac;
  67   uint32_t DynPower;
  68   uint32_t TotalCurrent;
  69   uint32_t TotalPower;
  70 };
  71 
  72 typedef struct Power_Calculator_Data PowerCalculatorData_t;
  73 
  74 struct Gc_Cac_Weight_Data
  75 {
  76   uint8_t index;
  77   uint32_t value;
  78 };
  79 
  80 typedef struct Gc_Cac_Weight_Data GcCacWeight_Data;
  81 
  82 
  83 typedef struct {
  84   uint32_t high;
  85   uint32_t low;
  86 } data_64_t;
  87 
  88 typedef struct {
  89   data_64_t high;
  90   data_64_t low;
  91 } data_128_t;
  92 
  93 #define SMU__NUM_SCLK_DPM_STATE  8
  94 #define SMU__NUM_MCLK_DPM_LEVELS 4
  95 #define SMU__NUM_LCLK_DPM_LEVELS 8
  96 #define SMU__NUM_PCIE_DPM_LEVELS 8
  97 
  98 #define SMU7_CONTEXT_ID_SMC        1
  99 #define SMU7_CONTEXT_ID_VBIOS      2
 100 
 101 #define SMU73_MAX_LEVELS_VDDC            16
 102 #define SMU73_MAX_LEVELS_VDDGFX          16
 103 #define SMU73_MAX_LEVELS_VDDCI           8
 104 #define SMU73_MAX_LEVELS_MVDD            4
 105 
 106 #define SMU_MAX_SMIO_LEVELS              4
 107 
 108 #define SMU73_MAX_LEVELS_GRAPHICS        SMU__NUM_SCLK_DPM_STATE   // SCLK + SQ DPM + ULV
 109 #define SMU73_MAX_LEVELS_MEMORY          SMU__NUM_MCLK_DPM_LEVELS   // MCLK Levels DPM
 110 #define SMU73_MAX_LEVELS_GIO             SMU__NUM_LCLK_DPM_LEVELS  // LCLK Levels
 111 #define SMU73_MAX_LEVELS_LINK            SMU__NUM_PCIE_DPM_LEVELS  // PCIe speed and number of lanes.
 112 #define SMU73_MAX_LEVELS_UVD             8   // VCLK/DCLK levels for UVD.
 113 #define SMU73_MAX_LEVELS_VCE             8   // ECLK levels for VCE.
 114 #define SMU73_MAX_LEVELS_ACP             8   // ACLK levels for ACP.
 115 #define SMU73_MAX_LEVELS_SAMU            8   // SAMCLK levels for SAMU.
 116 #define SMU73_MAX_ENTRIES_SMIO           32  // Number of entries in SMIO table.
 117 
 118 #define DPM_NO_LIMIT 0
 119 #define DPM_NO_UP 1
 120 #define DPM_GO_DOWN 2
 121 #define DPM_GO_UP 3
 122 
 123 #define SMU7_FIRST_DPM_GRAPHICS_LEVEL    0
 124 #define SMU7_FIRST_DPM_MEMORY_LEVEL      0
 125 
 126 #define GPIO_CLAMP_MODE_VRHOT      1
 127 #define GPIO_CLAMP_MODE_THERM      2
 128 #define GPIO_CLAMP_MODE_DC         4
 129 
 130 #define SCRATCH_B_TARG_PCIE_INDEX_SHIFT 0
 131 #define SCRATCH_B_TARG_PCIE_INDEX_MASK  (0x7<<SCRATCH_B_TARG_PCIE_INDEX_SHIFT)
 132 #define SCRATCH_B_CURR_PCIE_INDEX_SHIFT 3
 133 #define SCRATCH_B_CURR_PCIE_INDEX_MASK  (0x7<<SCRATCH_B_CURR_PCIE_INDEX_SHIFT)
 134 #define SCRATCH_B_TARG_UVD_INDEX_SHIFT  6
 135 #define SCRATCH_B_TARG_UVD_INDEX_MASK   (0x7<<SCRATCH_B_TARG_UVD_INDEX_SHIFT)
 136 #define SCRATCH_B_CURR_UVD_INDEX_SHIFT  9
 137 #define SCRATCH_B_CURR_UVD_INDEX_MASK   (0x7<<SCRATCH_B_CURR_UVD_INDEX_SHIFT)
 138 #define SCRATCH_B_TARG_VCE_INDEX_SHIFT  12
 139 #define SCRATCH_B_TARG_VCE_INDEX_MASK   (0x7<<SCRATCH_B_TARG_VCE_INDEX_SHIFT)
 140 #define SCRATCH_B_CURR_VCE_INDEX_SHIFT  15
 141 #define SCRATCH_B_CURR_VCE_INDEX_MASK   (0x7<<SCRATCH_B_CURR_VCE_INDEX_SHIFT)
 142 #define SCRATCH_B_TARG_ACP_INDEX_SHIFT  18
 143 #define SCRATCH_B_TARG_ACP_INDEX_MASK   (0x7<<SCRATCH_B_TARG_ACP_INDEX_SHIFT)
 144 #define SCRATCH_B_CURR_ACP_INDEX_SHIFT  21
 145 #define SCRATCH_B_CURR_ACP_INDEX_MASK   (0x7<<SCRATCH_B_CURR_ACP_INDEX_SHIFT)
 146 #define SCRATCH_B_TARG_SAMU_INDEX_SHIFT 24
 147 #define SCRATCH_B_TARG_SAMU_INDEX_MASK  (0x7<<SCRATCH_B_TARG_SAMU_INDEX_SHIFT)
 148 #define SCRATCH_B_CURR_SAMU_INDEX_SHIFT 27
 149 #define SCRATCH_B_CURR_SAMU_INDEX_MASK  (0x7<<SCRATCH_B_CURR_SAMU_INDEX_SHIFT)
 150 
 151 // Virtualization Defines
 152 #define CG_XDMA_MASK  0x1
 153 #define CG_XDMA_SHIFT 0
 154 #define CG_UVD_MASK   0x2
 155 #define CG_UVD_SHIFT  1
 156 #define CG_VCE_MASK   0x4
 157 #define CG_VCE_SHIFT  2
 158 #define CG_SAMU_MASK  0x8
 159 #define CG_SAMU_SHIFT 3
 160 #define CG_GFX_MASK   0x10
 161 #define CG_GFX_SHIFT  4
 162 #define CG_SDMA_MASK  0x20
 163 #define CG_SDMA_SHIFT 5
 164 #define CG_HDP_MASK   0x40
 165 #define CG_HDP_SHIFT  6
 166 #define CG_MC_MASK    0x80
 167 #define CG_MC_SHIFT   7
 168 #define CG_DRM_MASK   0x100
 169 #define CG_DRM_SHIFT  8
 170 #define CG_ROM_MASK   0x200
 171 #define CG_ROM_SHIFT  9
 172 #define CG_BIF_MASK   0x400
 173 #define CG_BIF_SHIFT  10
 174 
 175 #define SMU73_DTE_ITERATIONS 5
 176 #define SMU73_DTE_SOURCES 3
 177 #define SMU73_DTE_SINKS 1
 178 #define SMU73_NUM_CPU_TES 0
 179 #define SMU73_NUM_GPU_TES 1
 180 #define SMU73_NUM_NON_TES 2
 181 #define SMU73_DTE_FAN_SCALAR_MIN 0x100
 182 #define SMU73_DTE_FAN_SCALAR_MAX 0x166
 183 #define SMU73_DTE_FAN_TEMP_MAX 93
 184 #define SMU73_DTE_FAN_TEMP_MIN 83
 185 
 186 #define SMU73_THERMAL_INPUT_LOOP_COUNT 6
 187 #define SMU73_THERMAL_CLAMP_MODE_COUNT 8
 188 
 189 
 190 struct SMU7_HystController_Data
 191 {
 192     uint16_t waterfall_up;
 193     uint16_t waterfall_down;
 194     uint16_t waterfall_limit;
 195     uint16_t release_cnt;
 196     uint16_t release_limit;
 197     uint16_t spare;
 198 };
 199 
 200 typedef struct SMU7_HystController_Data SMU7_HystController_Data;
 201 
 202 struct SMU73_PIDController
 203 {
 204     uint32_t Ki;
 205     int32_t LFWindupUpperLim;
 206     int32_t LFWindupLowerLim;
 207     uint32_t StatePrecision;
 208 
 209     uint32_t LfPrecision;
 210     uint32_t LfOffset;
 211     uint32_t MaxState;
 212     uint32_t MaxLfFraction;
 213     uint32_t StateShift;
 214 };
 215 
 216 typedef struct SMU73_PIDController SMU73_PIDController;
 217 
 218 struct SMU7_LocalDpmScoreboard
 219 {
 220     uint32_t PercentageBusy;
 221 
 222     int32_t  PIDError;
 223     int32_t  PIDIntegral;
 224     int32_t  PIDOutput;
 225 
 226     uint32_t SigmaDeltaAccum;
 227     uint32_t SigmaDeltaOutput;
 228     uint32_t SigmaDeltaLevel;
 229 
 230     uint32_t UtilizationSetpoint;
 231 
 232     uint8_t  TdpClampMode;
 233     uint8_t  TdcClampMode;
 234     uint8_t  ThermClampMode;
 235     uint8_t  VoltageBusy;
 236 
 237     int8_t   CurrLevel;
 238     int8_t   TargLevel;
 239     uint8_t  LevelChangeInProgress;
 240     uint8_t  UpHyst;
 241 
 242     uint8_t  DownHyst;
 243     uint8_t  VoltageDownHyst;
 244     uint8_t  DpmEnable;
 245     uint8_t  DpmRunning;
 246 
 247     uint8_t  DpmForce;
 248     uint8_t  DpmForceLevel;
 249     uint8_t  DisplayWatermark;
 250     uint8_t  McArbIndex;
 251 
 252     uint32_t MinimumPerfSclk;
 253 
 254     uint8_t  AcpiReq;
 255     uint8_t  AcpiAck;
 256     uint8_t  GfxClkSlow;
 257     uint8_t  GpioClampMode;
 258 
 259     uint8_t  spare2;
 260     uint8_t  EnabledLevelsChange;
 261     uint8_t  DteClampMode;
 262     uint8_t  FpsClampMode;
 263 
 264     uint16_t LevelResidencyCounters [SMU73_MAX_LEVELS_GRAPHICS];
 265     uint16_t LevelSwitchCounters [SMU73_MAX_LEVELS_GRAPHICS];
 266 
 267     void     (*TargetStateCalculator)(uint8_t);
 268     void     (*SavedTargetStateCalculator)(uint8_t);
 269 
 270     uint16_t AutoDpmInterval;
 271     uint16_t AutoDpmRange;
 272 
 273     uint8_t  FpsEnabled;
 274     uint8_t  MaxPerfLevel;
 275     uint8_t  AllowLowClkInterruptToHost;
 276     uint8_t  FpsRunning;
 277 
 278     uint32_t MaxAllowedFrequency;
 279 
 280     uint32_t FilteredSclkFrequency;
 281     uint32_t LastSclkFrequency;
 282     uint32_t FilteredSclkFrequencyCnt;
 283 
 284     uint8_t  LedEnable;
 285     uint8_t  LedPin0;
 286     uint8_t  LedPin1;
 287     uint8_t  LedPin2;
 288     uint32_t LedAndMask;
 289 
 290     uint16_t FpsAlpha;
 291     uint16_t DeltaTime;
 292     uint32_t CurrentFps;
 293     uint32_t FilteredFps;
 294     uint32_t FrameCount;
 295     uint32_t FrameCountLast;
 296     uint16_t FpsTargetScalar;
 297     uint16_t FpsWaterfallLimitScalar;
 298     uint16_t FpsAlphaScalar;
 299     uint16_t spare8;
 300     SMU7_HystController_Data HystControllerData;
 301 };
 302 
 303 typedef struct SMU7_LocalDpmScoreboard SMU7_LocalDpmScoreboard;
 304 
 305 #define SMU7_MAX_VOLTAGE_CLIENTS 12
 306 
 307 typedef uint8_t (*VoltageChangeHandler_t)(uint16_t, uint8_t);
 308 
 309 #define VDDC_MASK    0x00007FFF
 310 #define VDDC_SHIFT   0
 311 #define VDDCI_MASK   0x3FFF8000
 312 #define VDDCI_SHIFT  15
 313 #define PHASES_MASK  0xC0000000
 314 #define PHASES_SHIFT 30
 315 
 316 typedef uint32_t SMU_VoltageLevel;
 317 
 318 struct SMU7_VoltageScoreboard
 319 {
 320     SMU_VoltageLevel TargetVoltage;
 321     uint16_t MaxVid;
 322     uint8_t  HighestVidOffset;
 323     uint8_t  CurrentVidOffset;
 324 
 325     uint16_t CurrentVddc;
 326     uint16_t CurrentVddci;
 327 
 328 
 329     uint8_t  ControllerBusy;
 330     uint8_t  CurrentVid;
 331     uint8_t  CurrentVddciVid;
 332     uint8_t  padding;
 333 
 334     SMU_VoltageLevel RequestedVoltage[SMU7_MAX_VOLTAGE_CLIENTS];
 335     SMU_VoltageLevel TargetVoltageState;
 336     uint8_t  EnabledRequest[SMU7_MAX_VOLTAGE_CLIENTS];
 337 
 338     uint8_t  padding2;
 339     uint8_t  padding3;
 340     uint8_t  ControllerEnable;
 341     uint8_t  ControllerRunning;
 342     uint16_t CurrentStdVoltageHiSidd;
 343     uint16_t CurrentStdVoltageLoSidd;
 344     uint8_t  OverrideVoltage;
 345     uint8_t  padding4;
 346     uint8_t  padding5;
 347     uint8_t  CurrentPhases;
 348 
 349     VoltageChangeHandler_t ChangeVddc;
 350 
 351     VoltageChangeHandler_t ChangeVddci;
 352     VoltageChangeHandler_t ChangePhase;
 353     VoltageChangeHandler_t ChangeMvdd;
 354 
 355     VoltageChangeHandler_t functionLinks[6];
 356 
 357     uint16_t * VddcFollower1;
 358 
 359     int16_t  Driver_OD_RequestedVidOffset1;
 360     int16_t  Driver_OD_RequestedVidOffset2;
 361 
 362 };
 363 
 364 typedef struct SMU7_VoltageScoreboard SMU7_VoltageScoreboard;
 365 
 366 // -------------------------------------------------------------------------------------------------------------------------
 367 #define SMU7_MAX_PCIE_LINK_SPEEDS 3 /* 0:Gen1 1:Gen2 2:Gen3 */
 368 
 369 struct SMU7_PCIeLinkSpeedScoreboard
 370 {
 371     uint8_t     DpmEnable;
 372     uint8_t     DpmRunning;
 373     uint8_t     DpmForce;
 374     uint8_t     DpmForceLevel;
 375 
 376     uint8_t     CurrentLinkSpeed;
 377     uint8_t     EnabledLevelsChange;
 378     uint16_t    AutoDpmInterval;
 379 
 380     uint16_t    AutoDpmRange;
 381     uint16_t    AutoDpmCount;
 382 
 383     uint8_t     DpmMode;
 384     uint8_t     AcpiReq;
 385     uint8_t     AcpiAck;
 386     uint8_t     CurrentLinkLevel;
 387 
 388 };
 389 
 390 typedef struct SMU7_PCIeLinkSpeedScoreboard SMU7_PCIeLinkSpeedScoreboard;
 391 
 392 // -------------------------------------------------------- CAC table ------------------------------------------------------
 393 #define SMU7_LKGE_LUT_NUM_OF_TEMP_ENTRIES 16
 394 #define SMU7_LKGE_LUT_NUM_OF_VOLT_ENTRIES 16
 395 
 396 #define SMU7_SCALE_I  7
 397 #define SMU7_SCALE_R 12
 398 
 399 struct SMU7_PowerScoreboard
 400 {
 401     uint32_t GpuPower;
 402 
 403     uint32_t VddcPower;
 404     uint32_t VddcVoltage;
 405     uint32_t VddcCurrent;
 406 
 407     uint32_t MvddPower;
 408     uint32_t MvddVoltage;
 409     uint32_t MvddCurrent;
 410 
 411     uint32_t RocPower;
 412 
 413     uint16_t Telemetry_1_slope;
 414     uint16_t Telemetry_2_slope;
 415     int32_t  Telemetry_1_offset;
 416     int32_t  Telemetry_2_offset;
 417 };
 418 typedef struct SMU7_PowerScoreboard SMU7_PowerScoreboard;
 419 
 420 // For FeatureEnables:
 421 #define SMU7_SCLK_DPM_CONFIG_MASK                        0x01
 422 #define SMU7_VOLTAGE_CONTROLLER_CONFIG_MASK              0x02
 423 #define SMU7_THERMAL_CONTROLLER_CONFIG_MASK              0x04
 424 #define SMU7_MCLK_DPM_CONFIG_MASK                        0x08
 425 #define SMU7_UVD_DPM_CONFIG_MASK                         0x10
 426 #define SMU7_VCE_DPM_CONFIG_MASK                         0x20
 427 #define SMU7_ACP_DPM_CONFIG_MASK                         0x40
 428 #define SMU7_SAMU_DPM_CONFIG_MASK                        0x80
 429 #define SMU7_PCIEGEN_DPM_CONFIG_MASK                    0x100
 430 
 431 #define SMU7_ACP_MCLK_HANDSHAKE_DISABLE                  0x00000001
 432 #define SMU7_ACP_SCLK_HANDSHAKE_DISABLE                  0x00000002
 433 #define SMU7_UVD_MCLK_HANDSHAKE_DISABLE                  0x00000100
 434 #define SMU7_UVD_SCLK_HANDSHAKE_DISABLE                  0x00000200
 435 #define SMU7_VCE_MCLK_HANDSHAKE_DISABLE                  0x00010000
 436 #define SMU7_VCE_SCLK_HANDSHAKE_DISABLE                  0x00020000
 437 
 438 // All 'soft registers' should be uint32_t.
 439 struct SMU73_SoftRegisters
 440 {
 441     uint32_t        RefClockFrequency;
 442     uint32_t        PmTimerPeriod;
 443     uint32_t        FeatureEnables;
 444 
 445     uint32_t        PreVBlankGap;
 446     uint32_t        VBlankTimeout;
 447     uint32_t        TrainTimeGap;
 448 
 449     uint32_t        MvddSwitchTime;
 450     uint32_t        LongestAcpiTrainTime;
 451     uint32_t        AcpiDelay;
 452     uint32_t        G5TrainTime;
 453     uint32_t        DelayMpllPwron;
 454     uint32_t        VoltageChangeTimeout;
 455 
 456     uint32_t        HandshakeDisables;
 457 
 458     uint8_t         DisplayPhy1Config;
 459     uint8_t         DisplayPhy2Config;
 460     uint8_t         DisplayPhy3Config;
 461     uint8_t         DisplayPhy4Config;
 462 
 463     uint8_t         DisplayPhy5Config;
 464     uint8_t         DisplayPhy6Config;
 465     uint8_t         DisplayPhy7Config;
 466     uint8_t         DisplayPhy8Config;
 467 
 468     uint32_t        AverageGraphicsActivity;
 469     uint32_t        AverageMemoryActivity;
 470     uint32_t        AverageGioActivity;
 471 
 472     uint8_t         SClkDpmEnabledLevels;
 473     uint8_t         MClkDpmEnabledLevels;
 474     uint8_t         LClkDpmEnabledLevels;
 475     uint8_t         PCIeDpmEnabledLevels;
 476 
 477     uint8_t         UVDDpmEnabledLevels;
 478     uint8_t         SAMUDpmEnabledLevels;
 479     uint8_t         ACPDpmEnabledLevels;
 480     uint8_t         VCEDpmEnabledLevels;
 481 
 482     uint32_t        DRAM_LOG_ADDR_H;
 483     uint32_t        DRAM_LOG_ADDR_L;
 484     uint32_t        DRAM_LOG_PHY_ADDR_H;
 485     uint32_t        DRAM_LOG_PHY_ADDR_L;
 486     uint32_t        DRAM_LOG_BUFF_SIZE;
 487     uint32_t        UlvEnterCount;
 488     uint32_t        UlvTime;
 489     uint32_t        UcodeLoadStatus;
 490     uint32_t        Reserved[2];
 491 
 492 };
 493 
 494 typedef struct SMU73_SoftRegisters SMU73_SoftRegisters;
 495 
 496 struct SMU73_Firmware_Header
 497 {
 498     uint32_t Digest[5];
 499     uint32_t Version;
 500     uint32_t HeaderSize;
 501     uint32_t Flags;
 502     uint32_t EntryPoint;
 503     uint32_t CodeSize;
 504     uint32_t ImageSize;
 505 
 506     uint32_t Rtos;
 507     uint32_t SoftRegisters;
 508     uint32_t DpmTable;
 509     uint32_t FanTable;
 510     uint32_t CacConfigTable;
 511     uint32_t CacStatusTable;
 512 
 513 
 514     uint32_t mcRegisterTable;
 515 
 516 
 517     uint32_t mcArbDramTimingTable;
 518 
 519 
 520 
 521 
 522     uint32_t PmFuseTable;
 523     uint32_t Globals;
 524     uint32_t ClockStretcherTable;
 525     uint32_t Reserved[41];
 526     uint32_t Signature;
 527 };
 528 
 529 typedef struct SMU73_Firmware_Header SMU73_Firmware_Header;
 530 
 531 #define SMU7_FIRMWARE_HEADER_LOCATION 0x20000
 532 
 533 enum  DisplayConfig {
 534     PowerDown = 1,
 535     DP54x4,
 536     DP54x2,
 537     DP54x1,
 538     DP27x4,
 539     DP27x2,
 540     DP27x1,
 541     HDMI297,
 542     HDMI162,
 543     LVDS,
 544     DP324x4,
 545     DP324x2,
 546     DP324x1
 547 };
 548 
 549 
 550 #define MC_BLOCK_COUNT 1
 551 #define CPL_BLOCK_COUNT 5
 552 #define SE_BLOCK_COUNT 15
 553 #define GC_BLOCK_COUNT 24
 554 
 555 struct SMU7_Local_Cac {
 556   uint8_t BlockId;
 557   uint8_t SignalId;
 558   uint8_t Threshold;
 559   uint8_t Padding;
 560 };
 561 
 562 typedef struct SMU7_Local_Cac SMU7_Local_Cac;
 563 
 564 struct SMU7_Local_Cac_Table {
 565 
 566   SMU7_Local_Cac CplLocalCac[CPL_BLOCK_COUNT];
 567   SMU7_Local_Cac McLocalCac[MC_BLOCK_COUNT];
 568   SMU7_Local_Cac SeLocalCac[SE_BLOCK_COUNT];
 569   SMU7_Local_Cac GcLocalCac[GC_BLOCK_COUNT];
 570 };
 571 
 572 typedef struct SMU7_Local_Cac_Table SMU7_Local_Cac_Table;
 573 
 574 #if !defined(SMC_MICROCODE)
 575 #pragma pack(pop)
 576 #endif
 577 
 578 // Description of Clock Gating bitmask for Tonga:
 579 // System Clock Gating
 580 #define CG_SYS_BITMASK_FIRST_BIT      0  // First bit of Sys CG bitmask
 581 #define CG_SYS_BITMASK_LAST_BIT       9  // Last bit of Sys CG bitmask
 582 #define CG_SYS_BIF_MGLS_SHIFT         0
 583 #define CG_SYS_ROM_SHIFT              1
 584 #define CG_SYS_MC_MGCG_SHIFT          2
 585 #define CG_SYS_MC_MGLS_SHIFT          3
 586 #define CG_SYS_SDMA_MGCG_SHIFT        4
 587 #define CG_SYS_SDMA_MGLS_SHIFT        5
 588 #define CG_SYS_DRM_MGCG_SHIFT         6
 589 #define CG_SYS_HDP_MGCG_SHIFT         7
 590 #define CG_SYS_HDP_MGLS_SHIFT         8
 591 #define CG_SYS_DRM_MGLS_SHIFT         9
 592 
 593 #define CG_SYS_BIF_MGLS_MASK          0x1
 594 #define CG_SYS_ROM_MASK               0x2
 595 #define CG_SYS_MC_MGCG_MASK           0x4
 596 #define CG_SYS_MC_MGLS_MASK           0x8
 597 #define CG_SYS_SDMA_MGCG_MASK         0x10
 598 #define CG_SYS_SDMA_MGLS_MASK         0x20
 599 #define CG_SYS_DRM_MGCG_MASK          0x40
 600 #define CG_SYS_HDP_MGCG_MASK          0x80
 601 #define CG_SYS_HDP_MGLS_MASK          0x100
 602 #define CG_SYS_DRM_MGLS_MASK          0x200
 603 
 604 // Graphics Clock Gating
 605 #define CG_GFX_BITMASK_FIRST_BIT      16 // First bit of Gfx CG bitmask
 606 #define CG_GFX_BITMASK_LAST_BIT       20 // Last bit of Gfx CG bitmask
 607 #define CG_GFX_CGCG_SHIFT             16
 608 #define CG_GFX_CGLS_SHIFT             17
 609 #define CG_CPF_MGCG_SHIFT             18
 610 #define CG_RLC_MGCG_SHIFT             19
 611 #define CG_GFX_OTHERS_MGCG_SHIFT      20
 612 
 613 #define CG_GFX_CGCG_MASK              0x00010000
 614 #define CG_GFX_CGLS_MASK              0x00020000
 615 #define CG_CPF_MGCG_MASK              0x00040000
 616 #define CG_RLC_MGCG_MASK              0x00080000
 617 #define CG_GFX_OTHERS_MGCG_MASK       0x00100000
 618 
 619 
 620 
 621 // Voltage Regulator Configuration
 622 // VR Config info is contained in dpmTable.VRConfig
 623 
 624 #define VRCONF_VDDC_MASK         0x000000FF
 625 #define VRCONF_VDDC_SHIFT        0
 626 #define VRCONF_VDDGFX_MASK       0x0000FF00
 627 #define VRCONF_VDDGFX_SHIFT      8
 628 #define VRCONF_VDDCI_MASK        0x00FF0000
 629 #define VRCONF_VDDCI_SHIFT       16
 630 #define VRCONF_MVDD_MASK         0xFF000000
 631 #define VRCONF_MVDD_SHIFT        24
 632 
 633 #define VR_MERGED_WITH_VDDC      0
 634 #define VR_SVI2_PLANE_1          1
 635 #define VR_SVI2_PLANE_2          2
 636 #define VR_SMIO_PATTERN_1        3
 637 #define VR_SMIO_PATTERN_2        4
 638 #define VR_STATIC_VOLTAGE        5
 639 
 640 // Clock Stretcher Configuration
 641 
 642 #define CLOCK_STRETCHER_MAX_ENTRIES 0x4
 643 #define CKS_LOOKUPTable_MAX_ENTRIES 0x4
 644 
 645 // The 'settings' field is subdivided in the following way:
 646 #define CLOCK_STRETCHER_SETTING_DDT_MASK             0x01
 647 #define CLOCK_STRETCHER_SETTING_DDT_SHIFT            0x0
 648 #define CLOCK_STRETCHER_SETTING_STRETCH_AMOUNT_MASK  0x1E
 649 #define CLOCK_STRETCHER_SETTING_STRETCH_AMOUNT_SHIFT 0x1
 650 #define CLOCK_STRETCHER_SETTING_ENABLE_MASK          0x80
 651 #define CLOCK_STRETCHER_SETTING_ENABLE_SHIFT         0x7
 652 
 653 struct SMU_ClockStretcherDataTableEntry {
 654   uint8_t minVID;
 655   uint8_t maxVID;
 656 
 657 
 658   uint16_t setting;
 659 };
 660 typedef struct SMU_ClockStretcherDataTableEntry SMU_ClockStretcherDataTableEntry;
 661 
 662 struct SMU_ClockStretcherDataTable {
 663   SMU_ClockStretcherDataTableEntry ClockStretcherDataTableEntry[CLOCK_STRETCHER_MAX_ENTRIES];
 664 };
 665 typedef struct SMU_ClockStretcherDataTable SMU_ClockStretcherDataTable;
 666 
 667 struct SMU_CKS_LOOKUPTableEntry {
 668   uint16_t minFreq;
 669   uint16_t maxFreq;
 670 
 671   uint8_t setting;
 672   uint8_t padding[3];
 673 };
 674 typedef struct SMU_CKS_LOOKUPTableEntry SMU_CKS_LOOKUPTableEntry;
 675 
 676 struct SMU_CKS_LOOKUPTable {
 677   SMU_CKS_LOOKUPTableEntry CKS_LOOKUPTableEntry[CKS_LOOKUPTable_MAX_ENTRIES];
 678 };
 679 typedef struct SMU_CKS_LOOKUPTable SMU_CKS_LOOKUPTable;
 680 
 681 struct AgmAvfsData_t {
 682   uint16_t avgPsmCount[28];
 683   uint16_t minPsmCount[28];
 684 };
 685 typedef struct AgmAvfsData_t AgmAvfsData_t;
 686 
 687 // AVFS DEFINES
 688 
 689 enum VFT_COLUMNS {
 690   SCLK0,
 691   SCLK1,
 692   SCLK2,
 693   SCLK3,
 694   SCLK4,
 695   SCLK5,
 696   SCLK6,
 697   SCLK7,
 698 
 699   NUM_VFT_COLUMNS
 700 };
 701 
 702 #define TEMP_RANGE_MAXSTEPS 12
 703 struct VFT_CELL_t {
 704   uint16_t Voltage;
 705 };
 706 
 707 typedef struct VFT_CELL_t VFT_CELL_t;
 708 
 709 struct VFT_TABLE_t {
 710   VFT_CELL_t    Cell[TEMP_RANGE_MAXSTEPS][NUM_VFT_COLUMNS];
 711   uint16_t      AvfsGbv [NUM_VFT_COLUMNS];
 712   uint16_t      BtcGbv  [NUM_VFT_COLUMNS];
 713   uint16_t      Temperature [TEMP_RANGE_MAXSTEPS];
 714 
 715   uint8_t       NumTemperatureSteps;
 716   uint8_t       padding[3];
 717 };
 718 typedef struct VFT_TABLE_t VFT_TABLE_t;
 719 
 720 #endif

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