Path: blob/master/drivers/gpu/drm/amd/pm/powerplay/inc/smu71.h
26552 views
/*1* Copyright 2016 Advanced Micro Devices, Inc.2*3* Permission is hereby granted, free of charge, to any person obtaining a4* copy of this software and associated documentation files (the "Software"),5* to deal in the Software without restriction, including without limitation6* the rights to use, copy, modify, merge, publish, distribute, sublicense,7* and/or sell copies of the Software, and to permit persons to whom the8* Software is furnished to do so, subject to the following conditions:9*10* The above copyright notice and this permission notice shall be included in11* all copies or substantial portions of the Software.12*13* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR14* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,15* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL16* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR17* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,18* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR19* OTHER DEALINGS IN THE SOFTWARE.20*21*/22#ifndef SMU71_H23#define SMU71_H2425#if !defined(SMC_MICROCODE)26#pragma pack(push, 1)27#endif2829#define SMU__NUM_PCIE_DPM_LEVELS 830#define SMU__NUM_SCLK_DPM_STATE 831#define SMU__NUM_MCLK_DPM_LEVELS 432#define SMU__VARIANT__ICELAND 133#define SMU__DGPU_ONLY 134#define SMU__DYNAMIC_MCARB_SETTINGS 13536enum SID_OPTION {37SID_OPTION_HI,38SID_OPTION_LO,39SID_OPTION_COUNT40};4142typedef struct {43uint32_t high;44uint32_t low;45} data_64_t;4647typedef struct {48data_64_t high;49data_64_t low;50} data_128_t;5152#define SMU7_CONTEXT_ID_SMC 153#define SMU7_CONTEXT_ID_VBIOS 25455#define SMU71_MAX_LEVELS_VDDC 856#define SMU71_MAX_LEVELS_VDDCI 457#define SMU71_MAX_LEVELS_MVDD 458#define SMU71_MAX_LEVELS_VDDNB 85960#define SMU71_MAX_LEVELS_GRAPHICS SMU__NUM_SCLK_DPM_STATE61#define SMU71_MAX_LEVELS_MEMORY SMU__NUM_MCLK_DPM_LEVELS62#define SMU71_MAX_LEVELS_GIO SMU__NUM_LCLK_DPM_LEVELS63#define SMU71_MAX_LEVELS_LINK SMU__NUM_PCIE_DPM_LEVELS64#define SMU71_MAX_ENTRIES_SMIO 326566#define DPM_NO_LIMIT 067#define DPM_NO_UP 168#define DPM_GO_DOWN 269#define DPM_GO_UP 37071#define SMU7_FIRST_DPM_GRAPHICS_LEVEL 072#define SMU7_FIRST_DPM_MEMORY_LEVEL 07374#define GPIO_CLAMP_MODE_VRHOT 175#define GPIO_CLAMP_MODE_THERM 276#define GPIO_CLAMP_MODE_DC 47778#define SCRATCH_B_TARG_PCIE_INDEX_SHIFT 079#define SCRATCH_B_TARG_PCIE_INDEX_MASK (0x7<<SCRATCH_B_TARG_PCIE_INDEX_SHIFT)80#define SCRATCH_B_CURR_PCIE_INDEX_SHIFT 381#define SCRATCH_B_CURR_PCIE_INDEX_MASK (0x7<<SCRATCH_B_CURR_PCIE_INDEX_SHIFT)82#define SCRATCH_B_TARG_UVD_INDEX_SHIFT 683#define SCRATCH_B_TARG_UVD_INDEX_MASK (0x7<<SCRATCH_B_TARG_UVD_INDEX_SHIFT)84#define SCRATCH_B_CURR_UVD_INDEX_SHIFT 985#define SCRATCH_B_CURR_UVD_INDEX_MASK (0x7<<SCRATCH_B_CURR_UVD_INDEX_SHIFT)86#define SCRATCH_B_TARG_VCE_INDEX_SHIFT 1287#define SCRATCH_B_TARG_VCE_INDEX_MASK (0x7<<SCRATCH_B_TARG_VCE_INDEX_SHIFT)88#define SCRATCH_B_CURR_VCE_INDEX_SHIFT 1589#define SCRATCH_B_CURR_VCE_INDEX_MASK (0x7<<SCRATCH_B_CURR_VCE_INDEX_SHIFT)90#define SCRATCH_B_TARG_ACP_INDEX_SHIFT 1891#define SCRATCH_B_TARG_ACP_INDEX_MASK (0x7<<SCRATCH_B_TARG_ACP_INDEX_SHIFT)92#define SCRATCH_B_CURR_ACP_INDEX_SHIFT 2193#define SCRATCH_B_CURR_ACP_INDEX_MASK (0x7<<SCRATCH_B_CURR_ACP_INDEX_SHIFT)94#define SCRATCH_B_TARG_SAMU_INDEX_SHIFT 2495#define SCRATCH_B_TARG_SAMU_INDEX_MASK (0x7<<SCRATCH_B_TARG_SAMU_INDEX_SHIFT)96#define SCRATCH_B_CURR_SAMU_INDEX_SHIFT 2797#define SCRATCH_B_CURR_SAMU_INDEX_MASK (0x7<<SCRATCH_B_CURR_SAMU_INDEX_SHIFT)9899100#if defined SMU__DGPU_ONLY101#define SMU71_DTE_ITERATIONS 5102#define SMU71_DTE_SOURCES 3103#define SMU71_DTE_SINKS 1104#define SMU71_NUM_CPU_TES 0105#define SMU71_NUM_GPU_TES 1106#define SMU71_NUM_NON_TES 2107108#endif109110#if defined SMU__FUSION_ONLY111#define SMU7_DTE_ITERATIONS 5112#define SMU7_DTE_SOURCES 5113#define SMU7_DTE_SINKS 3114#define SMU7_NUM_CPU_TES 2115#define SMU7_NUM_GPU_TES 1116#define SMU7_NUM_NON_TES 2117118#endif119120struct SMU71_PIDController {121uint32_t Ki;122int32_t LFWindupUpperLim;123int32_t LFWindupLowerLim;124uint32_t StatePrecision;125uint32_t LfPrecision;126uint32_t LfOffset;127uint32_t MaxState;128uint32_t MaxLfFraction;129uint32_t StateShift;130};131132typedef struct SMU71_PIDController SMU71_PIDController;133134struct SMU7_LocalDpmScoreboard {135uint32_t PercentageBusy;136137int32_t PIDError;138int32_t PIDIntegral;139int32_t PIDOutput;140141uint32_t SigmaDeltaAccum;142uint32_t SigmaDeltaOutput;143uint32_t SigmaDeltaLevel;144145uint32_t UtilizationSetpoint;146147uint8_t TdpClampMode;148uint8_t TdcClampMode;149uint8_t ThermClampMode;150uint8_t VoltageBusy;151152int8_t CurrLevel;153int8_t TargLevel;154uint8_t LevelChangeInProgress;155uint8_t UpHyst;156157uint8_t DownHyst;158uint8_t VoltageDownHyst;159uint8_t DpmEnable;160uint8_t DpmRunning;161162uint8_t DpmForce;163uint8_t DpmForceLevel;164uint8_t DisplayWatermark;165uint8_t McArbIndex;166167uint32_t MinimumPerfSclk;168169uint8_t AcpiReq;170uint8_t AcpiAck;171uint8_t GfxClkSlow;172uint8_t GpioClampMode;173174uint8_t FpsFilterWeight;175uint8_t EnabledLevelsChange;176uint8_t DteClampMode;177uint8_t FpsClampMode;178179uint16_t LevelResidencyCounters[SMU71_MAX_LEVELS_GRAPHICS];180uint16_t LevelSwitchCounters[SMU71_MAX_LEVELS_GRAPHICS];181182void (*TargetStateCalculator)(uint8_t);183void (*SavedTargetStateCalculator)(uint8_t);184185uint16_t AutoDpmInterval;186uint16_t AutoDpmRange;187188uint8_t FpsEnabled;189uint8_t MaxPerfLevel;190uint8_t AllowLowClkInterruptToHost;191uint8_t FpsRunning;192193uint32_t MaxAllowedFrequency;194};195196typedef struct SMU7_LocalDpmScoreboard SMU7_LocalDpmScoreboard;197198#define SMU7_MAX_VOLTAGE_CLIENTS 12199200struct SMU7_VoltageScoreboard {201uint16_t CurrentVoltage;202uint16_t HighestVoltage;203uint16_t MaxVid;204uint8_t HighestVidOffset;205uint8_t CurrentVidOffset;206#if defined (SMU__DGPU_ONLY)207uint8_t CurrentPhases;208uint8_t HighestPhases;209#else210uint8_t AvsOffset;211uint8_t AvsOffsetApplied;212#endif213uint8_t ControllerBusy;214uint8_t CurrentVid;215uint16_t RequestedVoltage[SMU7_MAX_VOLTAGE_CLIENTS];216#if defined (SMU__DGPU_ONLY)217uint8_t RequestedPhases[SMU7_MAX_VOLTAGE_CLIENTS];218#endif219uint8_t EnabledRequest[SMU7_MAX_VOLTAGE_CLIENTS];220uint8_t TargetIndex;221uint8_t Delay;222uint8_t ControllerEnable;223uint8_t ControllerRunning;224uint16_t CurrentStdVoltageHiSidd;225uint16_t CurrentStdVoltageLoSidd;226#if defined (SMU__DGPU_ONLY)227uint16_t RequestedVddci;228uint16_t CurrentVddci;229uint16_t HighestVddci;230uint8_t CurrentVddciVid;231uint8_t TargetVddciIndex;232#endif233};234235typedef struct SMU7_VoltageScoreboard SMU7_VoltageScoreboard;236237// -------------------------------------------------------------------------------------------------------------------------238#define SMU7_MAX_PCIE_LINK_SPEEDS 3 /* 0:Gen1 1:Gen2 2:Gen3 */239240struct SMU7_PCIeLinkSpeedScoreboard241{242uint8_t DpmEnable;243uint8_t DpmRunning;244uint8_t DpmForce;245uint8_t DpmForceLevel;246247uint8_t CurrentLinkSpeed;248uint8_t EnabledLevelsChange;249uint16_t AutoDpmInterval;250251uint16_t AutoDpmRange;252uint16_t AutoDpmCount;253254uint8_t DpmMode;255uint8_t AcpiReq;256uint8_t AcpiAck;257uint8_t CurrentLinkLevel;258259};260261typedef struct SMU7_PCIeLinkSpeedScoreboard SMU7_PCIeLinkSpeedScoreboard;262263// -------------------------------------------------------- CAC table ------------------------------------------------------264#define SMU7_LKGE_LUT_NUM_OF_TEMP_ENTRIES 16265#define SMU7_LKGE_LUT_NUM_OF_VOLT_ENTRIES 16266267#define SMU7_SCALE_I 7268#define SMU7_SCALE_R 12269270struct SMU7_PowerScoreboard271{272uint16_t MinVoltage;273uint16_t MaxVoltage;274275uint32_t AvgGpuPower;276277uint16_t VddcLeakagePower[SID_OPTION_COUNT];278uint16_t VddcSclkConstantPower[SID_OPTION_COUNT];279uint16_t VddcSclkDynamicPower[SID_OPTION_COUNT];280uint16_t VddcNonSclkDynamicPower[SID_OPTION_COUNT];281uint16_t VddcTotalPower[SID_OPTION_COUNT];282uint16_t VddcTotalCurrent[SID_OPTION_COUNT];283uint16_t VddcLoadVoltage[SID_OPTION_COUNT];284uint16_t VddcNoLoadVoltage[SID_OPTION_COUNT];285286uint16_t DisplayPhyPower;287uint16_t PciePhyPower;288289uint16_t VddciTotalPower;290uint16_t Vddr1TotalPower;291292uint32_t RocPower;293294uint32_t last_power;295uint32_t enableWinAvg;296297uint32_t lkg_acc;298uint16_t VoltLkgeScaler;299uint16_t TempLkgeScaler;300301uint32_t uvd_cac_dclk;302uint32_t uvd_cac_vclk;303uint32_t vce_cac_eclk;304uint32_t samu_cac_samclk;305uint32_t display_cac_dispclk;306uint32_t acp_cac_aclk;307uint32_t unb_cac;308309uint32_t WinTime;310311uint16_t GpuPwr_MAWt;312uint16_t FilteredVddcTotalPower;313314uint8_t CalculationRepeats;315uint8_t WaterfallUp;316uint8_t WaterfallDown;317uint8_t WaterfallLimit;318};319320typedef struct SMU7_PowerScoreboard SMU7_PowerScoreboard;321322// --------------------------------------------------------------------------------------------------323324struct SMU7_ThermalScoreboard {325int16_t GpuLimit;326int16_t GpuHyst;327uint16_t CurrGnbTemp;328uint16_t FilteredGnbTemp;329uint8_t ControllerEnable;330uint8_t ControllerRunning;331uint8_t WaterfallUp;332uint8_t WaterfallDown;333uint8_t WaterfallLimit;334uint8_t padding[3];335};336337typedef struct SMU7_ThermalScoreboard SMU7_ThermalScoreboard;338339// For FeatureEnables:340#define SMU7_SCLK_DPM_CONFIG_MASK 0x01341#define SMU7_VOLTAGE_CONTROLLER_CONFIG_MASK 0x02342#define SMU7_THERMAL_CONTROLLER_CONFIG_MASK 0x04343#define SMU7_MCLK_DPM_CONFIG_MASK 0x08344#define SMU7_UVD_DPM_CONFIG_MASK 0x10345#define SMU7_VCE_DPM_CONFIG_MASK 0x20346#define SMU7_ACP_DPM_CONFIG_MASK 0x40347#define SMU7_SAMU_DPM_CONFIG_MASK 0x80348#define SMU7_PCIEGEN_DPM_CONFIG_MASK 0x100349350#define SMU7_ACP_MCLK_HANDSHAKE_DISABLE 0x00000001351#define SMU7_ACP_SCLK_HANDSHAKE_DISABLE 0x00000002352#define SMU7_UVD_MCLK_HANDSHAKE_DISABLE 0x00000100353#define SMU7_UVD_SCLK_HANDSHAKE_DISABLE 0x00000200354#define SMU7_VCE_MCLK_HANDSHAKE_DISABLE 0x00010000355#define SMU7_VCE_SCLK_HANDSHAKE_DISABLE 0x00020000356357// All 'soft registers' should be uint32_t.358struct SMU71_SoftRegisters {359uint32_t RefClockFrequency;360uint32_t PmTimerPeriod;361uint32_t FeatureEnables;362#if defined (SMU__DGPU_ONLY)363uint32_t PreVBlankGap;364uint32_t VBlankTimeout;365uint32_t TrainTimeGap;366uint32_t MvddSwitchTime;367uint32_t LongestAcpiTrainTime;368uint32_t AcpiDelay;369uint32_t G5TrainTime;370uint32_t DelayMpllPwron;371uint32_t VoltageChangeTimeout;372#endif373uint32_t HandshakeDisables;374375uint8_t DisplayPhy1Config;376uint8_t DisplayPhy2Config;377uint8_t DisplayPhy3Config;378uint8_t DisplayPhy4Config;379380uint8_t DisplayPhy5Config;381uint8_t DisplayPhy6Config;382uint8_t DisplayPhy7Config;383uint8_t DisplayPhy8Config;384385uint32_t AverageGraphicsActivity;386uint32_t AverageMemoryActivity;387uint32_t AverageGioActivity;388389uint8_t SClkDpmEnabledLevels;390uint8_t MClkDpmEnabledLevels;391uint8_t LClkDpmEnabledLevels;392uint8_t PCIeDpmEnabledLevels;393394uint32_t DRAM_LOG_ADDR_H;395uint32_t DRAM_LOG_ADDR_L;396uint32_t DRAM_LOG_PHY_ADDR_H;397uint32_t DRAM_LOG_PHY_ADDR_L;398uint32_t DRAM_LOG_BUFF_SIZE;399uint32_t UlvEnterCount;400uint32_t UlvTime;401uint32_t UcodeLoadStatus;402uint8_t DPMFreezeAndForced;403uint8_t Activity_Weight;404uint8_t Reserved8[2];405uint32_t Reserved;406};407408typedef struct SMU71_SoftRegisters SMU71_SoftRegisters;409410struct SMU71_Firmware_Header {411uint32_t Digest[5];412uint32_t Version;413uint32_t HeaderSize;414uint32_t Flags;415uint32_t EntryPoint;416uint32_t CodeSize;417uint32_t ImageSize;418419uint32_t Rtos;420uint32_t SoftRegisters;421uint32_t DpmTable;422uint32_t FanTable;423uint32_t CacConfigTable;424uint32_t CacStatusTable;425426uint32_t mcRegisterTable;427428uint32_t mcArbDramTimingTable;429430uint32_t PmFuseTable;431uint32_t Globals;432uint32_t UvdDpmTable;433uint32_t AcpDpmTable;434uint32_t VceDpmTable;435uint32_t SamuDpmTable;436uint32_t UlvSettings;437uint32_t Reserved[37];438uint32_t Signature;439};440441typedef struct SMU71_Firmware_Header SMU71_Firmware_Header;442443struct SMU7_HystController_Data444{445uint8_t waterfall_up;446uint8_t waterfall_down;447uint8_t pstate;448uint8_t clamp_mode;449};450451typedef struct SMU7_HystController_Data SMU7_HystController_Data;452453#define SMU71_FIRMWARE_HEADER_LOCATION 0x20000454455enum DisplayConfig {456PowerDown = 1,457DP54x4,458DP54x2,459DP54x1,460DP27x4,461DP27x2,462DP27x1,463HDMI297,464HDMI162,465LVDS,466DP324x4,467DP324x2,468DP324x1469};470471//#define SX_BLOCK_COUNT 8472//#define MC_BLOCK_COUNT 1473//#define CPL_BLOCK_COUNT 27474475#if defined SMU__VARIANT__ICELAND476#define SX_BLOCK_COUNT 8477#define MC_BLOCK_COUNT 1478#define CPL_BLOCK_COUNT 29479#endif480481struct SMU7_Local_Cac {482uint8_t BlockId;483uint8_t SignalId;484uint8_t Threshold;485uint8_t Padding;486};487488typedef struct SMU7_Local_Cac SMU7_Local_Cac;489490struct SMU7_Local_Cac_Table {491SMU7_Local_Cac SxLocalCac[SX_BLOCK_COUNT];492SMU7_Local_Cac CplLocalCac[CPL_BLOCK_COUNT];493SMU7_Local_Cac McLocalCac[MC_BLOCK_COUNT];494};495496typedef struct SMU7_Local_Cac_Table SMU7_Local_Cac_Table;497498#if !defined(SMC_MICROCODE)499#pragma pack(pop)500#endif501502#endif503504505506