Path: blob/master/drivers/gpu/drm/amd/pm/powerplay/inc/smu75.h
26552 views
/*1* Copyright 2017 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 SMU75_H23#define SMU75_H2425#pragma pack(push, 1)2627typedef struct {28uint32_t high;29uint32_t low;30} data_64_t;3132typedef struct {33data_64_t high;34data_64_t low;35} data_128_t;3637#define SMU__DGPU_ONLY3839#define SMU__NUM_SCLK_DPM_STATE 840#define SMU__NUM_MCLK_DPM_LEVELS 441#define SMU__NUM_LCLK_DPM_LEVELS 842#define SMU__NUM_PCIE_DPM_LEVELS 84344#define SMU7_CONTEXT_ID_SMC 145#define SMU7_CONTEXT_ID_VBIOS 24647#define SMU75_MAX_LEVELS_VDDC 1648#define SMU75_MAX_LEVELS_VDDGFX 1649#define SMU75_MAX_LEVELS_VDDCI 850#define SMU75_MAX_LEVELS_MVDD 45152#define SMU_MAX_SMIO_LEVELS 45354#define SMU75_MAX_LEVELS_GRAPHICS SMU__NUM_SCLK_DPM_STATE55#define SMU75_MAX_LEVELS_MEMORY SMU__NUM_MCLK_DPM_LEVELS56#define SMU75_MAX_LEVELS_GIO SMU__NUM_LCLK_DPM_LEVELS57#define SMU75_MAX_LEVELS_LINK SMU__NUM_PCIE_DPM_LEVELS58#define SMU75_MAX_LEVELS_UVD 859#define SMU75_MAX_LEVELS_VCE 860#define SMU75_MAX_LEVELS_ACP 861#define SMU75_MAX_LEVELS_SAMU 862#define SMU75_MAX_ENTRIES_SMIO 326364#define DPM_NO_LIMIT 065#define DPM_NO_UP 166#define DPM_GO_DOWN 267#define DPM_GO_UP 36869#define SMU7_FIRST_DPM_GRAPHICS_LEVEL 070#define SMU7_FIRST_DPM_MEMORY_LEVEL 07172#define GPIO_CLAMP_MODE_VRHOT 173#define GPIO_CLAMP_MODE_THERM 274#define GPIO_CLAMP_MODE_DC 47576#define SCRATCH_B_TARG_PCIE_INDEX_SHIFT 077#define SCRATCH_B_TARG_PCIE_INDEX_MASK (0x7<<SCRATCH_B_TARG_PCIE_INDEX_SHIFT)78#define SCRATCH_B_CURR_PCIE_INDEX_SHIFT 379#define SCRATCH_B_CURR_PCIE_INDEX_MASK (0x7<<SCRATCH_B_CURR_PCIE_INDEX_SHIFT)80#define SCRATCH_B_TARG_UVD_INDEX_SHIFT 681#define SCRATCH_B_TARG_UVD_INDEX_MASK (0x7<<SCRATCH_B_TARG_UVD_INDEX_SHIFT)82#define SCRATCH_B_CURR_UVD_INDEX_SHIFT 983#define SCRATCH_B_CURR_UVD_INDEX_MASK (0x7<<SCRATCH_B_CURR_UVD_INDEX_SHIFT)84#define SCRATCH_B_TARG_VCE_INDEX_SHIFT 1285#define SCRATCH_B_TARG_VCE_INDEX_MASK (0x7<<SCRATCH_B_TARG_VCE_INDEX_SHIFT)86#define SCRATCH_B_CURR_VCE_INDEX_SHIFT 1587#define SCRATCH_B_CURR_VCE_INDEX_MASK (0x7<<SCRATCH_B_CURR_VCE_INDEX_SHIFT)88#define SCRATCH_B_TARG_ACP_INDEX_SHIFT 1889#define SCRATCH_B_TARG_ACP_INDEX_MASK (0x7<<SCRATCH_B_TARG_ACP_INDEX_SHIFT)90#define SCRATCH_B_CURR_ACP_INDEX_SHIFT 2191#define SCRATCH_B_CURR_ACP_INDEX_MASK (0x7<<SCRATCH_B_CURR_ACP_INDEX_SHIFT)92#define SCRATCH_B_TARG_SAMU_INDEX_SHIFT 2493#define SCRATCH_B_TARG_SAMU_INDEX_MASK (0x7<<SCRATCH_B_TARG_SAMU_INDEX_SHIFT)94#define SCRATCH_B_CURR_SAMU_INDEX_SHIFT 2795#define SCRATCH_B_CURR_SAMU_INDEX_MASK (0x7<<SCRATCH_B_CURR_SAMU_INDEX_SHIFT)9697/* Virtualization Defines */98#define CG_XDMA_MASK 0x199#define CG_XDMA_SHIFT 0100#define CG_UVD_MASK 0x2101#define CG_UVD_SHIFT 1102#define CG_VCE_MASK 0x4103#define CG_VCE_SHIFT 2104#define CG_SAMU_MASK 0x8105#define CG_SAMU_SHIFT 3106#define CG_GFX_MASK 0x10107#define CG_GFX_SHIFT 4108#define CG_SDMA_MASK 0x20109#define CG_SDMA_SHIFT 5110#define CG_HDP_MASK 0x40111#define CG_HDP_SHIFT 6112#define CG_MC_MASK 0x80113#define CG_MC_SHIFT 7114#define CG_DRM_MASK 0x100115#define CG_DRM_SHIFT 8116#define CG_ROM_MASK 0x200117#define CG_ROM_SHIFT 9118#define CG_BIF_MASK 0x400119#define CG_BIF_SHIFT 10120121#if defined SMU__DGPU_ONLY122#define SMU75_DTE_ITERATIONS 5123#define SMU75_DTE_SOURCES 3124#define SMU75_DTE_SINKS 1125#define SMU75_NUM_CPU_TES 0126#define SMU75_NUM_GPU_TES 1127#define SMU75_NUM_NON_TES 2128#define SMU75_DTE_FAN_SCALAR_MIN 0x100129#define SMU75_DTE_FAN_SCALAR_MAX 0x166130#define SMU75_DTE_FAN_TEMP_MAX 93131#define SMU75_DTE_FAN_TEMP_MIN 83132#endif133#define SMU75_THERMAL_INPUT_LOOP_COUNT 2134#define SMU75_THERMAL_CLAMP_MODE_COUNT 2135136#define EXP_M1_1 93137#define EXP_M2_1 195759138#define EXP_B_1 111176531139140#define EXP_M1_2 67141#define EXP_M2_2 153720142#define EXP_B_2 94415767143144#define EXP_M1_3 48145#define EXP_M2_3 119796146#define EXP_B_3 79195279147148#define EXP_M1_4 550149#define EXP_M2_4 1484190150#define EXP_B_4 1051432828151152#define EXP_M1_5 394153#define EXP_M2_5 1143049154#define EXP_B_5 864288432155156struct SMU7_HystController_Data {157uint16_t waterfall_up;158uint16_t waterfall_down;159uint16_t waterfall_limit;160uint16_t release_cnt;161uint16_t release_limit;162uint16_t spare;163};164165typedef struct SMU7_HystController_Data SMU7_HystController_Data;166167struct SMU75_PIDController {168uint32_t Ki;169int32_t LFWindupUpperLim;170int32_t LFWindupLowerLim;171uint32_t StatePrecision;172uint32_t LfPrecision;173uint32_t LfOffset;174uint32_t MaxState;175uint32_t MaxLfFraction;176uint32_t StateShift;177};178179typedef struct SMU75_PIDController SMU75_PIDController;180181struct SMU7_LocalDpmScoreboard {182uint32_t PercentageBusy;183184int32_t PIDError;185int32_t PIDIntegral;186int32_t PIDOutput;187188uint32_t SigmaDeltaAccum;189uint32_t SigmaDeltaOutput;190uint32_t SigmaDeltaLevel;191192uint32_t UtilizationSetpoint;193194uint8_t TdpClampMode;195uint8_t TdcClampMode;196uint8_t ThermClampMode;197uint8_t VoltageBusy;198199int8_t CurrLevel;200int8_t TargLevel;201uint8_t LevelChangeInProgress;202uint8_t UpHyst;203204uint8_t DownHyst;205uint8_t VoltageDownHyst;206uint8_t DpmEnable;207uint8_t DpmRunning;208209uint8_t DpmForce;210uint8_t DpmForceLevel;211uint8_t DisplayWatermark;212uint8_t McArbIndex;213214uint32_t MinimumPerfSclk;215216uint8_t AcpiReq;217uint8_t AcpiAck;218uint8_t GfxClkSlow;219uint8_t GpioClampMode;220221uint8_t EnableModeSwitchRLCNotification;222uint8_t EnabledLevelsChange;223uint8_t DteClampMode;224uint8_t FpsClampMode;225226uint16_t LevelResidencyCounters[SMU75_MAX_LEVELS_GRAPHICS];227uint16_t LevelSwitchCounters[SMU75_MAX_LEVELS_GRAPHICS];228229void (*TargetStateCalculator)(uint8_t);230void (*SavedTargetStateCalculator)(uint8_t);231232uint16_t AutoDpmInterval;233uint16_t AutoDpmRange;234235uint8_t FpsEnabled;236uint8_t MaxPerfLevel;237uint8_t AllowLowClkInterruptToHost;238uint8_t FpsRunning;239240uint32_t MaxAllowedFrequency;241242uint32_t FilteredSclkFrequency;243uint32_t LastSclkFrequency;244uint32_t FilteredSclkFrequencyCnt;245246uint8_t MinPerfLevel;247#ifdef SMU__FIRMWARE_SCKS_PRESENT__1248uint8_t ScksClampMode;249uint8_t padding[2];250#else251uint8_t padding[3];252#endif253254uint16_t FpsAlpha;255uint16_t DeltaTime;256uint32_t CurrentFps;257uint32_t FilteredFps;258uint32_t FrameCount;259uint32_t FrameCountLast;260uint16_t FpsTargetScalar;261uint16_t FpsWaterfallLimitScalar;262uint16_t FpsAlphaScalar;263uint16_t spare8;264SMU7_HystController_Data HystControllerData;265};266267typedef struct SMU7_LocalDpmScoreboard SMU7_LocalDpmScoreboard;268269#define SMU7_MAX_VOLTAGE_CLIENTS 12270271typedef uint8_t (*VoltageChangeHandler_t)(uint16_t, uint8_t);272273#define VDDC_MASK 0x00007FFF274#define VDDC_SHIFT 0275#define VDDCI_MASK 0x3FFF8000276#define VDDCI_SHIFT 15277#define PHASES_MASK 0xC0000000278#define PHASES_SHIFT 30279280typedef uint32_t SMU_VoltageLevel;281282struct SMU7_VoltageScoreboard {283SMU_VoltageLevel TargetVoltage;284uint16_t MaxVid;285uint8_t HighestVidOffset;286uint8_t CurrentVidOffset;287288uint16_t CurrentVddc;289uint16_t CurrentVddci;290291uint8_t ControllerBusy;292uint8_t CurrentVid;293uint8_t CurrentVddciVid;294uint8_t padding;295296SMU_VoltageLevel RequestedVoltage[SMU7_MAX_VOLTAGE_CLIENTS];297SMU_VoltageLevel TargetVoltageState;298uint8_t EnabledRequest[SMU7_MAX_VOLTAGE_CLIENTS];299300uint8_t padding2;301uint8_t padding3;302uint8_t ControllerEnable;303uint8_t ControllerRunning;304uint16_t CurrentStdVoltageHiSidd;305uint16_t CurrentStdVoltageLoSidd;306uint8_t OverrideVoltage;307uint8_t padding4;308uint8_t padding5;309uint8_t CurrentPhases;310311VoltageChangeHandler_t ChangeVddc;312VoltageChangeHandler_t ChangeVddci;313VoltageChangeHandler_t ChangePhase;314VoltageChangeHandler_t ChangeMvdd;315316VoltageChangeHandler_t functionLinks[6];317318uint16_t *VddcFollower1;319int16_t Driver_OD_RequestedVidOffset1;320int16_t Driver_OD_RequestedVidOffset2;321};322323typedef struct SMU7_VoltageScoreboard SMU7_VoltageScoreboard;324325#define SMU7_MAX_PCIE_LINK_SPEEDS 3326327struct SMU7_PCIeLinkSpeedScoreboard {328uint8_t DpmEnable;329uint8_t DpmRunning;330uint8_t DpmForce;331uint8_t DpmForceLevel;332333uint8_t CurrentLinkSpeed;334uint8_t EnabledLevelsChange;335uint16_t AutoDpmInterval;336337uint16_t AutoDpmRange;338uint16_t AutoDpmCount;339340uint8_t DpmMode;341uint8_t AcpiReq;342uint8_t AcpiAck;343uint8_t CurrentLinkLevel;344};345346typedef struct SMU7_PCIeLinkSpeedScoreboard SMU7_PCIeLinkSpeedScoreboard;347348#define SMU7_LKGE_LUT_NUM_OF_TEMP_ENTRIES 16349#define SMU7_LKGE_LUT_NUM_OF_VOLT_ENTRIES 16350351#define SMU7_SCALE_I 7352#define SMU7_SCALE_R 12353354struct SMU7_PowerScoreboard {355uint32_t GpuPower;356357uint32_t VddcPower;358uint32_t VddcVoltage;359uint32_t VddcCurrent;360361uint32_t VddciPower;362uint32_t VddciVoltage;363uint32_t VddciCurrent;364365uint32_t RocPower;366367uint16_t Telemetry_1_slope;368uint16_t Telemetry_2_slope;369int32_t Telemetry_1_offset;370int32_t Telemetry_2_offset;371372uint8_t MCLK_patch_flag;373uint8_t reserved[3];374};375376typedef struct SMU7_PowerScoreboard SMU7_PowerScoreboard;377378#define SMU7_SCLK_DPM_CONFIG_MASK 0x01379#define SMU7_VOLTAGE_CONTROLLER_CONFIG_MASK 0x02380#define SMU7_THERMAL_CONTROLLER_CONFIG_MASK 0x04381#define SMU7_MCLK_DPM_CONFIG_MASK 0x08382#define SMU7_UVD_DPM_CONFIG_MASK 0x10383#define SMU7_VCE_DPM_CONFIG_MASK 0x20384#define SMU7_ACP_DPM_CONFIG_MASK 0x40385#define SMU7_SAMU_DPM_CONFIG_MASK 0x80386#define SMU7_PCIEGEN_DPM_CONFIG_MASK 0x100387388#define SMU7_ACP_MCLK_HANDSHAKE_DISABLE 0x00000001389#define SMU7_ACP_SCLK_HANDSHAKE_DISABLE 0x00000002390#define SMU7_UVD_MCLK_HANDSHAKE_DISABLE 0x00000100391#define SMU7_UVD_SCLK_HANDSHAKE_DISABLE 0x00000200392#define SMU7_VCE_MCLK_HANDSHAKE_DISABLE 0x00010000393#define SMU7_VCE_SCLK_HANDSHAKE_DISABLE 0x00020000394395struct SMU75_SoftRegisters {396uint32_t RefClockFrequency;397uint32_t PmTimerPeriod;398uint32_t FeatureEnables;399#if defined (SMU__DGPU_ONLY)400uint32_t PreVBlankGap;401uint32_t VBlankTimeout;402uint32_t TrainTimeGap;403uint32_t MvddSwitchTime;404uint32_t LongestAcpiTrainTime;405uint32_t AcpiDelay;406uint32_t G5TrainTime;407uint32_t DelayMpllPwron;408uint32_t VoltageChangeTimeout;409#endif410uint32_t HandshakeDisables;411412uint8_t DisplayPhy1Config;413uint8_t DisplayPhy2Config;414uint8_t DisplayPhy3Config;415uint8_t DisplayPhy4Config;416417uint8_t DisplayPhy5Config;418uint8_t DisplayPhy6Config;419uint8_t DisplayPhy7Config;420uint8_t DisplayPhy8Config;421422uint32_t AverageGraphicsActivity;423uint32_t AverageMemoryActivity;424uint32_t AverageGioActivity;425426uint8_t SClkDpmEnabledLevels;427uint8_t MClkDpmEnabledLevels;428uint8_t LClkDpmEnabledLevels;429uint8_t PCIeDpmEnabledLevels;430431uint8_t UVDDpmEnabledLevels;432uint8_t SAMUDpmEnabledLevels;433uint8_t ACPDpmEnabledLevels;434uint8_t VCEDpmEnabledLevels;435436uint32_t DRAM_LOG_ADDR_H;437uint32_t DRAM_LOG_ADDR_L;438uint32_t DRAM_LOG_PHY_ADDR_H;439uint32_t DRAM_LOG_PHY_ADDR_L;440uint32_t DRAM_LOG_BUFF_SIZE;441uint32_t UlvEnterCount;442uint32_t UlvTime;443uint32_t UcodeLoadStatus;444uint32_t AllowMvddSwitch;445uint8_t Activity_Weight;446uint8_t Reserved8[3];447};448449typedef struct SMU75_SoftRegisters SMU75_SoftRegisters;450451struct SMU75_Firmware_Header {452uint32_t Digest[5];453uint32_t Version;454uint32_t HeaderSize;455uint32_t Flags;456uint32_t EntryPoint;457uint32_t CodeSize;458uint32_t ImageSize;459460uint32_t Rtos;461uint32_t SoftRegisters;462uint32_t DpmTable;463uint32_t FanTable;464uint32_t CacConfigTable;465uint32_t CacStatusTable;466uint32_t mcRegisterTable;467uint32_t mcArbDramTimingTable;468uint32_t PmFuseTable;469uint32_t Globals;470uint32_t ClockStretcherTable;471uint32_t VftTable;472uint32_t Reserved1;473uint32_t AvfsCksOff_AvfsGbvTable;474uint32_t AvfsCksOff_BtcGbvTable;475uint32_t MM_AvfsTable;476uint32_t PowerSharingTable;477uint32_t AvfsTable;478uint32_t AvfsCksOffGbvTable;479uint32_t AvfsMeanNSigma;480uint32_t AvfsSclkOffsetTable;481uint32_t Reserved[12];482uint32_t Signature;483};484485typedef struct SMU75_Firmware_Header SMU75_Firmware_Header;486487#define SMU7_FIRMWARE_HEADER_LOCATION 0x20000488489enum DisplayConfig {490PowerDown = 1,491DP54x4,492DP54x2,493DP54x1,494DP27x4,495DP27x2,496DP27x1,497HDMI297,498HDMI162,499LVDS,500DP324x4,501DP324x2,502DP324x1503};504505#define MC_BLOCK_COUNT 1506#define CPL_BLOCK_COUNT 5507#define SE_BLOCK_COUNT 15508#define GC_BLOCK_COUNT 24509510struct SMU7_Local_Cac {511uint8_t BlockId;512uint8_t SignalId;513uint8_t Threshold;514uint8_t Padding;515};516517typedef struct SMU7_Local_Cac SMU7_Local_Cac;518519struct SMU7_Local_Cac_Table {520SMU7_Local_Cac CplLocalCac[CPL_BLOCK_COUNT];521SMU7_Local_Cac McLocalCac[MC_BLOCK_COUNT];522SMU7_Local_Cac SeLocalCac[SE_BLOCK_COUNT];523SMU7_Local_Cac GcLocalCac[GC_BLOCK_COUNT];524};525526typedef struct SMU7_Local_Cac_Table SMU7_Local_Cac_Table;527528#pragma pack(pop)529530#define CG_SYS_BITMASK_FIRST_BIT 0531#define CG_SYS_BITMASK_LAST_BIT 10532#define CG_SYS_BIF_MGLS_SHIFT 0533#define CG_SYS_ROM_SHIFT 1534#define CG_SYS_MC_MGCG_SHIFT 2535#define CG_SYS_MC_MGLS_SHIFT 3536#define CG_SYS_SDMA_MGCG_SHIFT 4537#define CG_SYS_SDMA_MGLS_SHIFT 5538#define CG_SYS_DRM_MGCG_SHIFT 6539#define CG_SYS_HDP_MGCG_SHIFT 7540#define CG_SYS_HDP_MGLS_SHIFT 8541#define CG_SYS_DRM_MGLS_SHIFT 9542#define CG_SYS_BIF_MGCG_SHIFT 10543544#define CG_SYS_BIF_MGLS_MASK 0x1545#define CG_SYS_ROM_MASK 0x2546#define CG_SYS_MC_MGCG_MASK 0x4547#define CG_SYS_MC_MGLS_MASK 0x8548#define CG_SYS_SDMA_MGCG_MASK 0x10549#define CG_SYS_SDMA_MGLS_MASK 0x20550#define CG_SYS_DRM_MGCG_MASK 0x40551#define CG_SYS_HDP_MGCG_MASK 0x80552#define CG_SYS_HDP_MGLS_MASK 0x100553#define CG_SYS_DRM_MGLS_MASK 0x200554#define CG_SYS_BIF_MGCG_MASK 0x400555556#define CG_GFX_BITMASK_FIRST_BIT 16557#define CG_GFX_BITMASK_LAST_BIT 24558559#define CG_GFX_CGCG_SHIFT 16560#define CG_GFX_CGLS_SHIFT 17561#define CG_CPF_MGCG_SHIFT 18562#define CG_RLC_MGCG_SHIFT 19563#define CG_GFX_OTHERS_MGCG_SHIFT 20564#define CG_GFX_3DCG_SHIFT 21565#define CG_GFX_3DLS_SHIFT 22566#define CG_GFX_RLC_LS_SHIFT 23567#define CG_GFX_CP_LS_SHIFT 24568569#define CG_GFX_CGCG_MASK 0x00010000570#define CG_GFX_CGLS_MASK 0x00020000571#define CG_CPF_MGCG_MASK 0x00040000572#define CG_RLC_MGCG_MASK 0x00080000573#define CG_GFX_OTHERS_MGCG_MASK 0x00100000574#define CG_GFX_3DCG_MASK 0x00200000575#define CG_GFX_3DLS_MASK 0x00400000576#define CG_GFX_RLC_LS_MASK 0x00800000577#define CG_GFX_CP_LS_MASK 0x01000000578579580#define VRCONF_VDDC_MASK 0x000000FF581#define VRCONF_VDDC_SHIFT 0582#define VRCONF_VDDGFX_MASK 0x0000FF00583#define VRCONF_VDDGFX_SHIFT 8584#define VRCONF_VDDCI_MASK 0x00FF0000585#define VRCONF_VDDCI_SHIFT 16586#define VRCONF_MVDD_MASK 0xFF000000587#define VRCONF_MVDD_SHIFT 24588589#define VR_MERGED_WITH_VDDC 0590#define VR_SVI2_PLANE_1 1591#define VR_SVI2_PLANE_2 2592#define VR_SMIO_PATTERN_1 3593#define VR_SMIO_PATTERN_2 4594#define VR_STATIC_VOLTAGE 5595596#define CLOCK_STRETCHER_MAX_ENTRIES 0x4597#define CKS_LOOKUPTable_MAX_ENTRIES 0x4598599#define CLOCK_STRETCHER_SETTING_DDT_MASK 0x01600#define CLOCK_STRETCHER_SETTING_DDT_SHIFT 0x0601#define CLOCK_STRETCHER_SETTING_STRETCH_AMOUNT_MASK 0x1E602#define CLOCK_STRETCHER_SETTING_STRETCH_AMOUNT_SHIFT 0x1603#define CLOCK_STRETCHER_SETTING_ENABLE_MASK 0x80604#define CLOCK_STRETCHER_SETTING_ENABLE_SHIFT 0x7605606struct SMU_ClockStretcherDataTableEntry {607uint8_t minVID;608uint8_t maxVID;609610uint16_t setting;611};612typedef struct SMU_ClockStretcherDataTableEntry SMU_ClockStretcherDataTableEntry;613614struct SMU_ClockStretcherDataTable {615SMU_ClockStretcherDataTableEntry ClockStretcherDataTableEntry[CLOCK_STRETCHER_MAX_ENTRIES];616};617typedef struct SMU_ClockStretcherDataTable SMU_ClockStretcherDataTable;618619struct SMU_CKS_LOOKUPTableEntry {620uint16_t minFreq;621uint16_t maxFreq;622623uint8_t setting;624uint8_t padding[3];625};626typedef struct SMU_CKS_LOOKUPTableEntry SMU_CKS_LOOKUPTableEntry;627628struct SMU_CKS_LOOKUPTable {629SMU_CKS_LOOKUPTableEntry CKS_LOOKUPTableEntry[CKS_LOOKUPTable_MAX_ENTRIES];630};631typedef struct SMU_CKS_LOOKUPTable SMU_CKS_LOOKUPTable;632633struct AgmAvfsData_t {634uint16_t avgPsmCount[28];635uint16_t minPsmCount[28];636};637typedef struct AgmAvfsData_t AgmAvfsData_t;638639enum VFT_COLUMNS {640SCLK0,641SCLK1,642SCLK2,643SCLK3,644SCLK4,645SCLK5,646SCLK6,647SCLK7,648649NUM_VFT_COLUMNS650};651enum {652SCS_FUSE_T0,653SCS_FUSE_T1,654NUM_SCS_FUSE_TEMPERATURE655};656enum {657SCKS_ON,658SCKS_OFF,659NUM_SCKS_STATE_TYPES660};661662#define VFT_TABLE_DEFINED663664#define TEMP_RANGE_MAXSTEPS 12665struct VFT_CELL_t {666uint16_t Voltage;667};668669typedef struct VFT_CELL_t VFT_CELL_t;670#ifdef SMU__FIRMWARE_SCKS_PRESENT__1671struct SCS_CELL_t {672uint16_t PsmCnt[NUM_SCKS_STATE_TYPES];673};674typedef struct SCS_CELL_t SCS_CELL_t;675#endif676677struct VFT_TABLE_t {678VFT_CELL_t Cell[TEMP_RANGE_MAXSTEPS][NUM_VFT_COLUMNS];679uint16_t AvfsGbv[NUM_VFT_COLUMNS];680uint16_t BtcGbv[NUM_VFT_COLUMNS];681int16_t Temperature[TEMP_RANGE_MAXSTEPS];682683#ifdef SMU__FIRMWARE_SCKS_PRESENT__1684SCS_CELL_t ScksCell[TEMP_RANGE_MAXSTEPS][NUM_VFT_COLUMNS];685#endif686687uint8_t NumTemperatureSteps;688uint8_t padding[3];689};690typedef struct VFT_TABLE_t VFT_TABLE_t;691692#define BTCGB_VDROOP_TABLE_MAX_ENTRIES 2693#define AVFSGB_VDROOP_TABLE_MAX_ENTRIES 2694695struct GB_VDROOP_TABLE_t {696int32_t a0;697int32_t a1;698int32_t a2;699uint32_t spare;700};701typedef struct GB_VDROOP_TABLE_t GB_VDROOP_TABLE_t;702703struct SMU_QuadraticCoeffs {704int32_t m1;705int32_t b;706707int16_t m2;708uint8_t m1_shift;709uint8_t m2_shift;710};711typedef struct SMU_QuadraticCoeffs SMU_QuadraticCoeffs;712713struct AVFS_Margin_t {714VFT_CELL_t Cell[NUM_VFT_COLUMNS];715};716typedef struct AVFS_Margin_t AVFS_Margin_t;717718struct AVFS_CksOff_Gbv_t {719VFT_CELL_t Cell[NUM_VFT_COLUMNS];720};721typedef struct AVFS_CksOff_Gbv_t AVFS_CksOff_Gbv_t;722723struct AVFS_CksOff_AvfsGbv_t {724VFT_CELL_t Cell[NUM_VFT_COLUMNS];725};726typedef struct AVFS_CksOff_AvfsGbv_t AVFS_CksOff_AvfsGbv_t;727728struct AVFS_CksOff_BtcGbv_t {729VFT_CELL_t Cell[NUM_VFT_COLUMNS];730};731typedef struct AVFS_CksOff_BtcGbv_t AVFS_CksOff_BtcGbv_t;732733struct AVFS_meanNsigma_t {734uint32_t Aconstant[3];735uint16_t DC_tol_sigma;736uint16_t Platform_mean;737uint16_t Platform_sigma;738uint16_t PSM_Age_CompFactor;739uint8_t Static_Voltage_Offset[NUM_VFT_COLUMNS];740};741typedef struct AVFS_meanNsigma_t AVFS_meanNsigma_t;742743struct AVFS_Sclk_Offset_t {744uint16_t Sclk_Offset[8];745};746typedef struct AVFS_Sclk_Offset_t AVFS_Sclk_Offset_t;747748struct Power_Sharing_t {749uint32_t EnergyCounter;750uint32_t EngeryThreshold;751uint64_t AM_SCLK_CNT;752uint64_t AM_0_BUSY_CNT;753};754typedef struct Power_Sharing_t Power_Sharing_t;755756757#endif758759760761762