Path: blob/master/drivers/gpu/drm/amd/pm/powerplay/inc/smu73.h
26552 views
/*1* Copyright 2015 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 _SMU73_H_23#define _SMU73_H_2425#pragma pack(push, 1)26enum SID_OPTION {27SID_OPTION_HI,28SID_OPTION_LO,29SID_OPTION_COUNT30};3132enum Poly3rdOrderCoeff {33LEAKAGE_TEMPERATURE_SCALAR,34LEAKAGE_VOLTAGE_SCALAR,35DYNAMIC_VOLTAGE_SCALAR,36POLY_3RD_ORDER_COUNT37};3839struct SMU7_Poly3rdOrder_Data {40int32_t a;41int32_t b;42int32_t c;43int32_t d;44uint8_t a_shift;45uint8_t b_shift;46uint8_t c_shift;47uint8_t x_shift;48};4950typedef struct SMU7_Poly3rdOrder_Data SMU7_Poly3rdOrder_Data;5152struct Power_Calculator_Data {53uint16_t NoLoadVoltage;54uint16_t LoadVoltage;55uint16_t Resistance;56uint16_t Temperature;57uint16_t BaseLeakage;58uint16_t LkgTempScalar;59uint16_t LkgVoltScalar;60uint16_t LkgAreaScalar;61uint16_t LkgPower;62uint16_t DynVoltScalar;63uint32_t Cac;64uint32_t DynPower;65uint32_t TotalCurrent;66uint32_t TotalPower;67};6869typedef struct Power_Calculator_Data PowerCalculatorData_t;7071struct Gc_Cac_Weight_Data {72uint8_t index;73uint32_t value;74};7576typedef struct Gc_Cac_Weight_Data GcCacWeight_Data;777879typedef struct {80uint32_t high;81uint32_t low;82} data_64_t;8384typedef struct {85data_64_t high;86data_64_t low;87} data_128_t;8889#define SMU__NUM_SCLK_DPM_STATE 890#define SMU__NUM_MCLK_DPM_LEVELS 491#define SMU__NUM_LCLK_DPM_LEVELS 892#define SMU__NUM_PCIE_DPM_LEVELS 89394#define SMU7_CONTEXT_ID_SMC 195#define SMU7_CONTEXT_ID_VBIOS 29697#define SMU73_MAX_LEVELS_VDDC 1698#define SMU73_MAX_LEVELS_VDDGFX 1699#define SMU73_MAX_LEVELS_VDDCI 8100#define SMU73_MAX_LEVELS_MVDD 4101102#define SMU_MAX_SMIO_LEVELS 4103104#define SMU73_MAX_LEVELS_GRAPHICS SMU__NUM_SCLK_DPM_STATE // SCLK + SQ DPM + ULV105#define SMU73_MAX_LEVELS_MEMORY SMU__NUM_MCLK_DPM_LEVELS // MCLK Levels DPM106#define SMU73_MAX_LEVELS_GIO SMU__NUM_LCLK_DPM_LEVELS // LCLK Levels107#define SMU73_MAX_LEVELS_LINK SMU__NUM_PCIE_DPM_LEVELS // PCIe speed and number of lanes.108#define SMU73_MAX_LEVELS_UVD 8 // VCLK/DCLK levels for UVD.109#define SMU73_MAX_LEVELS_VCE 8 // ECLK levels for VCE.110#define SMU73_MAX_LEVELS_ACP 8 // ACLK levels for ACP.111#define SMU73_MAX_LEVELS_SAMU 8 // SAMCLK levels for SAMU.112#define SMU73_MAX_ENTRIES_SMIO 32 // Number of entries in SMIO table.113114#define DPM_NO_LIMIT 0115#define DPM_NO_UP 1116#define DPM_GO_DOWN 2117#define DPM_GO_UP 3118119#define SMU7_FIRST_DPM_GRAPHICS_LEVEL 0120#define SMU7_FIRST_DPM_MEMORY_LEVEL 0121122#define GPIO_CLAMP_MODE_VRHOT 1123#define GPIO_CLAMP_MODE_THERM 2124#define GPIO_CLAMP_MODE_DC 4125126#define SCRATCH_B_TARG_PCIE_INDEX_SHIFT 0127#define SCRATCH_B_TARG_PCIE_INDEX_MASK (0x7<<SCRATCH_B_TARG_PCIE_INDEX_SHIFT)128#define SCRATCH_B_CURR_PCIE_INDEX_SHIFT 3129#define SCRATCH_B_CURR_PCIE_INDEX_MASK (0x7<<SCRATCH_B_CURR_PCIE_INDEX_SHIFT)130#define SCRATCH_B_TARG_UVD_INDEX_SHIFT 6131#define SCRATCH_B_TARG_UVD_INDEX_MASK (0x7<<SCRATCH_B_TARG_UVD_INDEX_SHIFT)132#define SCRATCH_B_CURR_UVD_INDEX_SHIFT 9133#define SCRATCH_B_CURR_UVD_INDEX_MASK (0x7<<SCRATCH_B_CURR_UVD_INDEX_SHIFT)134#define SCRATCH_B_TARG_VCE_INDEX_SHIFT 12135#define SCRATCH_B_TARG_VCE_INDEX_MASK (0x7<<SCRATCH_B_TARG_VCE_INDEX_SHIFT)136#define SCRATCH_B_CURR_VCE_INDEX_SHIFT 15137#define SCRATCH_B_CURR_VCE_INDEX_MASK (0x7<<SCRATCH_B_CURR_VCE_INDEX_SHIFT)138#define SCRATCH_B_TARG_ACP_INDEX_SHIFT 18139#define SCRATCH_B_TARG_ACP_INDEX_MASK (0x7<<SCRATCH_B_TARG_ACP_INDEX_SHIFT)140#define SCRATCH_B_CURR_ACP_INDEX_SHIFT 21141#define SCRATCH_B_CURR_ACP_INDEX_MASK (0x7<<SCRATCH_B_CURR_ACP_INDEX_SHIFT)142#define SCRATCH_B_TARG_SAMU_INDEX_SHIFT 24143#define SCRATCH_B_TARG_SAMU_INDEX_MASK (0x7<<SCRATCH_B_TARG_SAMU_INDEX_SHIFT)144#define SCRATCH_B_CURR_SAMU_INDEX_SHIFT 27145#define SCRATCH_B_CURR_SAMU_INDEX_MASK (0x7<<SCRATCH_B_CURR_SAMU_INDEX_SHIFT)146147// Virtualization Defines148#define CG_XDMA_MASK 0x1149#define CG_XDMA_SHIFT 0150#define CG_UVD_MASK 0x2151#define CG_UVD_SHIFT 1152#define CG_VCE_MASK 0x4153#define CG_VCE_SHIFT 2154#define CG_SAMU_MASK 0x8155#define CG_SAMU_SHIFT 3156#define CG_GFX_MASK 0x10157#define CG_GFX_SHIFT 4158#define CG_SDMA_MASK 0x20159#define CG_SDMA_SHIFT 5160#define CG_HDP_MASK 0x40161#define CG_HDP_SHIFT 6162#define CG_MC_MASK 0x80163#define CG_MC_SHIFT 7164#define CG_DRM_MASK 0x100165#define CG_DRM_SHIFT 8166#define CG_ROM_MASK 0x200167#define CG_ROM_SHIFT 9168#define CG_BIF_MASK 0x400169#define CG_BIF_SHIFT 10170171#define SMU73_DTE_ITERATIONS 5172#define SMU73_DTE_SOURCES 3173#define SMU73_DTE_SINKS 1174#define SMU73_NUM_CPU_TES 0175#define SMU73_NUM_GPU_TES 1176#define SMU73_NUM_NON_TES 2177#define SMU73_DTE_FAN_SCALAR_MIN 0x100178#define SMU73_DTE_FAN_SCALAR_MAX 0x166179#define SMU73_DTE_FAN_TEMP_MAX 93180#define SMU73_DTE_FAN_TEMP_MIN 83181182#define SMU73_THERMAL_INPUT_LOOP_COUNT 6183#define SMU73_THERMAL_CLAMP_MODE_COUNT 8184185186struct SMU7_HystController_Data {187uint16_t waterfall_up;188uint16_t waterfall_down;189uint16_t waterfall_limit;190uint16_t release_cnt;191uint16_t release_limit;192uint16_t spare;193};194195typedef struct SMU7_HystController_Data SMU7_HystController_Data;196197struct SMU73_PIDController {198uint32_t Ki;199int32_t LFWindupUpperLim;200int32_t LFWindupLowerLim;201uint32_t StatePrecision;202203uint32_t LfPrecision;204uint32_t LfOffset;205uint32_t MaxState;206uint32_t MaxLfFraction;207uint32_t StateShift;208};209210typedef struct SMU73_PIDController SMU73_PIDController;211212struct SMU7_LocalDpmScoreboard {213uint32_t PercentageBusy;214215int32_t PIDError;216int32_t PIDIntegral;217int32_t PIDOutput;218219uint32_t SigmaDeltaAccum;220uint32_t SigmaDeltaOutput;221uint32_t SigmaDeltaLevel;222223uint32_t UtilizationSetpoint;224225uint8_t TdpClampMode;226uint8_t TdcClampMode;227uint8_t ThermClampMode;228uint8_t VoltageBusy;229230int8_t CurrLevel;231int8_t TargLevel;232uint8_t LevelChangeInProgress;233uint8_t UpHyst;234235uint8_t DownHyst;236uint8_t VoltageDownHyst;237uint8_t DpmEnable;238uint8_t DpmRunning;239240uint8_t DpmForce;241uint8_t DpmForceLevel;242uint8_t DisplayWatermark;243uint8_t McArbIndex;244245uint32_t MinimumPerfSclk;246247uint8_t AcpiReq;248uint8_t AcpiAck;249uint8_t GfxClkSlow;250uint8_t GpioClampMode;251252uint8_t spare2;253uint8_t EnabledLevelsChange;254uint8_t DteClampMode;255uint8_t FpsClampMode;256257uint16_t LevelResidencyCounters[SMU73_MAX_LEVELS_GRAPHICS];258uint16_t LevelSwitchCounters[SMU73_MAX_LEVELS_GRAPHICS];259260void (*TargetStateCalculator)(uint8_t);261void (*SavedTargetStateCalculator)(uint8_t);262263uint16_t AutoDpmInterval;264uint16_t AutoDpmRange;265266uint8_t FpsEnabled;267uint8_t MaxPerfLevel;268uint8_t AllowLowClkInterruptToHost;269uint8_t FpsRunning;270271uint32_t MaxAllowedFrequency;272273uint32_t FilteredSclkFrequency;274uint32_t LastSclkFrequency;275uint32_t FilteredSclkFrequencyCnt;276277uint8_t LedEnable;278uint8_t LedPin0;279uint8_t LedPin1;280uint8_t LedPin2;281uint32_t LedAndMask;282283uint16_t FpsAlpha;284uint16_t DeltaTime;285uint32_t CurrentFps;286uint32_t FilteredFps;287uint32_t FrameCount;288uint32_t FrameCountLast;289uint16_t FpsTargetScalar;290uint16_t FpsWaterfallLimitScalar;291uint16_t FpsAlphaScalar;292uint16_t spare8;293SMU7_HystController_Data HystControllerData;294};295296typedef struct SMU7_LocalDpmScoreboard SMU7_LocalDpmScoreboard;297298#define SMU7_MAX_VOLTAGE_CLIENTS 12299300typedef uint8_t (*VoltageChangeHandler_t)(uint16_t, uint8_t);301302#define VDDC_MASK 0x00007FFF303#define VDDC_SHIFT 0304#define VDDCI_MASK 0x3FFF8000305#define VDDCI_SHIFT 15306#define PHASES_MASK 0xC0000000307#define PHASES_SHIFT 30308309typedef uint32_t SMU_VoltageLevel;310311struct SMU7_VoltageScoreboard {312SMU_VoltageLevel TargetVoltage;313uint16_t MaxVid;314uint8_t HighestVidOffset;315uint8_t CurrentVidOffset;316317uint16_t CurrentVddc;318uint16_t CurrentVddci;319320321uint8_t ControllerBusy;322uint8_t CurrentVid;323uint8_t CurrentVddciVid;324uint8_t padding;325326SMU_VoltageLevel RequestedVoltage[SMU7_MAX_VOLTAGE_CLIENTS];327SMU_VoltageLevel TargetVoltageState;328uint8_t EnabledRequest[SMU7_MAX_VOLTAGE_CLIENTS];329330uint8_t padding2;331uint8_t padding3;332uint8_t ControllerEnable;333uint8_t ControllerRunning;334uint16_t CurrentStdVoltageHiSidd;335uint16_t CurrentStdVoltageLoSidd;336uint8_t OverrideVoltage;337uint8_t padding4;338uint8_t padding5;339uint8_t CurrentPhases;340341VoltageChangeHandler_t ChangeVddc;342343VoltageChangeHandler_t ChangeVddci;344VoltageChangeHandler_t ChangePhase;345VoltageChangeHandler_t ChangeMvdd;346347VoltageChangeHandler_t functionLinks[6];348349uint16_t *VddcFollower1;350351int16_t Driver_OD_RequestedVidOffset1;352int16_t Driver_OD_RequestedVidOffset2;353354};355356typedef struct SMU7_VoltageScoreboard SMU7_VoltageScoreboard;357358// -------------------------------------------------------------------------------------------------------------------------359#define SMU7_MAX_PCIE_LINK_SPEEDS 3 /* 0:Gen1 1:Gen2 2:Gen3 */360361struct SMU7_PCIeLinkSpeedScoreboard {362uint8_t DpmEnable;363uint8_t DpmRunning;364uint8_t DpmForce;365uint8_t DpmForceLevel;366367uint8_t CurrentLinkSpeed;368uint8_t EnabledLevelsChange;369uint16_t AutoDpmInterval;370371uint16_t AutoDpmRange;372uint16_t AutoDpmCount;373374uint8_t DpmMode;375uint8_t AcpiReq;376uint8_t AcpiAck;377uint8_t CurrentLinkLevel;378379};380381typedef struct SMU7_PCIeLinkSpeedScoreboard SMU7_PCIeLinkSpeedScoreboard;382383// -------------------------------------------------------- CAC table ------------------------------------------------------384#define SMU7_LKGE_LUT_NUM_OF_TEMP_ENTRIES 16385#define SMU7_LKGE_LUT_NUM_OF_VOLT_ENTRIES 16386387#define SMU7_SCALE_I 7388#define SMU7_SCALE_R 12389390struct SMU7_PowerScoreboard {391uint32_t GpuPower;392393uint32_t VddcPower;394uint32_t VddcVoltage;395uint32_t VddcCurrent;396397uint32_t MvddPower;398uint32_t MvddVoltage;399uint32_t MvddCurrent;400401uint32_t RocPower;402403uint16_t Telemetry_1_slope;404uint16_t Telemetry_2_slope;405int32_t Telemetry_1_offset;406int32_t Telemetry_2_offset;407};408typedef struct SMU7_PowerScoreboard SMU7_PowerScoreboard;409410// For FeatureEnables:411#define SMU7_SCLK_DPM_CONFIG_MASK 0x01412#define SMU7_VOLTAGE_CONTROLLER_CONFIG_MASK 0x02413#define SMU7_THERMAL_CONTROLLER_CONFIG_MASK 0x04414#define SMU7_MCLK_DPM_CONFIG_MASK 0x08415#define SMU7_UVD_DPM_CONFIG_MASK 0x10416#define SMU7_VCE_DPM_CONFIG_MASK 0x20417#define SMU7_ACP_DPM_CONFIG_MASK 0x40418#define SMU7_SAMU_DPM_CONFIG_MASK 0x80419#define SMU7_PCIEGEN_DPM_CONFIG_MASK 0x100420421#define SMU7_ACP_MCLK_HANDSHAKE_DISABLE 0x00000001422#define SMU7_ACP_SCLK_HANDSHAKE_DISABLE 0x00000002423#define SMU7_UVD_MCLK_HANDSHAKE_DISABLE 0x00000100424#define SMU7_UVD_SCLK_HANDSHAKE_DISABLE 0x00000200425#define SMU7_VCE_MCLK_HANDSHAKE_DISABLE 0x00010000426#define SMU7_VCE_SCLK_HANDSHAKE_DISABLE 0x00020000427428// All 'soft registers' should be uint32_t.429struct SMU73_SoftRegisters {430uint32_t RefClockFrequency;431uint32_t PmTimerPeriod;432uint32_t FeatureEnables;433434uint32_t PreVBlankGap;435uint32_t VBlankTimeout;436uint32_t TrainTimeGap;437438uint32_t MvddSwitchTime;439uint32_t LongestAcpiTrainTime;440uint32_t AcpiDelay;441uint32_t G5TrainTime;442uint32_t DelayMpllPwron;443uint32_t VoltageChangeTimeout;444445uint32_t HandshakeDisables;446447uint8_t DisplayPhy1Config;448uint8_t DisplayPhy2Config;449uint8_t DisplayPhy3Config;450uint8_t DisplayPhy4Config;451452uint8_t DisplayPhy5Config;453uint8_t DisplayPhy6Config;454uint8_t DisplayPhy7Config;455uint8_t DisplayPhy8Config;456457uint32_t AverageGraphicsActivity;458uint32_t AverageMemoryActivity;459uint32_t AverageGioActivity;460461uint8_t SClkDpmEnabledLevels;462uint8_t MClkDpmEnabledLevels;463uint8_t LClkDpmEnabledLevels;464uint8_t PCIeDpmEnabledLevels;465466uint8_t UVDDpmEnabledLevels;467uint8_t SAMUDpmEnabledLevels;468uint8_t ACPDpmEnabledLevels;469uint8_t VCEDpmEnabledLevels;470471uint32_t DRAM_LOG_ADDR_H;472uint32_t DRAM_LOG_ADDR_L;473uint32_t DRAM_LOG_PHY_ADDR_H;474uint32_t DRAM_LOG_PHY_ADDR_L;475uint32_t DRAM_LOG_BUFF_SIZE;476uint32_t UlvEnterCount;477uint32_t UlvTime;478uint32_t UcodeLoadStatus;479uint32_t Reserved[2];480481};482483typedef struct SMU73_SoftRegisters SMU73_SoftRegisters;484485struct SMU73_Firmware_Header {486uint32_t Digest[5];487uint32_t Version;488uint32_t HeaderSize;489uint32_t Flags;490uint32_t EntryPoint;491uint32_t CodeSize;492uint32_t ImageSize;493494uint32_t Rtos;495uint32_t SoftRegisters;496uint32_t DpmTable;497uint32_t FanTable;498uint32_t CacConfigTable;499uint32_t CacStatusTable;500501502uint32_t mcRegisterTable;503504505uint32_t mcArbDramTimingTable;506507508509510uint32_t PmFuseTable;511uint32_t Globals;512uint32_t ClockStretcherTable;513uint32_t Reserved[41];514uint32_t Signature;515};516517typedef struct SMU73_Firmware_Header SMU73_Firmware_Header;518519#define SMU7_FIRMWARE_HEADER_LOCATION 0x20000520521enum DisplayConfig {522PowerDown = 1,523DP54x4,524DP54x2,525DP54x1,526DP27x4,527DP27x2,528DP27x1,529HDMI297,530HDMI162,531LVDS,532DP324x4,533DP324x2,534DP324x1535};536537538#define MC_BLOCK_COUNT 1539#define CPL_BLOCK_COUNT 5540#define SE_BLOCK_COUNT 15541#define GC_BLOCK_COUNT 24542543struct SMU7_Local_Cac {544uint8_t BlockId;545uint8_t SignalId;546uint8_t Threshold;547uint8_t Padding;548};549550typedef struct SMU7_Local_Cac SMU7_Local_Cac;551552struct SMU7_Local_Cac_Table {553554SMU7_Local_Cac CplLocalCac[CPL_BLOCK_COUNT];555SMU7_Local_Cac McLocalCac[MC_BLOCK_COUNT];556SMU7_Local_Cac SeLocalCac[SE_BLOCK_COUNT];557SMU7_Local_Cac GcLocalCac[GC_BLOCK_COUNT];558};559560typedef struct SMU7_Local_Cac_Table SMU7_Local_Cac_Table;561562#if !defined(SMC_MICROCODE)563#pragma pack(pop)564#endif565566// Description of Clock Gating bitmask for Tonga:567// System Clock Gating568#define CG_SYS_BITMASK_FIRST_BIT 0 // First bit of Sys CG bitmask569#define CG_SYS_BITMASK_LAST_BIT 9 // Last bit of Sys CG bitmask570#define CG_SYS_BIF_MGLS_SHIFT 0571#define CG_SYS_ROM_SHIFT 1572#define CG_SYS_MC_MGCG_SHIFT 2573#define CG_SYS_MC_MGLS_SHIFT 3574#define CG_SYS_SDMA_MGCG_SHIFT 4575#define CG_SYS_SDMA_MGLS_SHIFT 5576#define CG_SYS_DRM_MGCG_SHIFT 6577#define CG_SYS_HDP_MGCG_SHIFT 7578#define CG_SYS_HDP_MGLS_SHIFT 8579#define CG_SYS_DRM_MGLS_SHIFT 9580581#define CG_SYS_BIF_MGLS_MASK 0x1582#define CG_SYS_ROM_MASK 0x2583#define CG_SYS_MC_MGCG_MASK 0x4584#define CG_SYS_MC_MGLS_MASK 0x8585#define CG_SYS_SDMA_MGCG_MASK 0x10586#define CG_SYS_SDMA_MGLS_MASK 0x20587#define CG_SYS_DRM_MGCG_MASK 0x40588#define CG_SYS_HDP_MGCG_MASK 0x80589#define CG_SYS_HDP_MGLS_MASK 0x100590#define CG_SYS_DRM_MGLS_MASK 0x200591592// Graphics Clock Gating593#define CG_GFX_BITMASK_FIRST_BIT 16 // First bit of Gfx CG bitmask594#define CG_GFX_BITMASK_LAST_BIT 20 // Last bit of Gfx CG bitmask595#define CG_GFX_CGCG_SHIFT 16596#define CG_GFX_CGLS_SHIFT 17597#define CG_CPF_MGCG_SHIFT 18598#define CG_RLC_MGCG_SHIFT 19599#define CG_GFX_OTHERS_MGCG_SHIFT 20600601#define CG_GFX_CGCG_MASK 0x00010000602#define CG_GFX_CGLS_MASK 0x00020000603#define CG_CPF_MGCG_MASK 0x00040000604#define CG_RLC_MGCG_MASK 0x00080000605#define CG_GFX_OTHERS_MGCG_MASK 0x00100000606607608609// Voltage Regulator Configuration610// VR Config info is contained in dpmTable.VRConfig611612#define VRCONF_VDDC_MASK 0x000000FF613#define VRCONF_VDDC_SHIFT 0614#define VRCONF_VDDGFX_MASK 0x0000FF00615#define VRCONF_VDDGFX_SHIFT 8616#define VRCONF_VDDCI_MASK 0x00FF0000617#define VRCONF_VDDCI_SHIFT 16618#define VRCONF_MVDD_MASK 0xFF000000619#define VRCONF_MVDD_SHIFT 24620621#define VR_MERGED_WITH_VDDC 0622#define VR_SVI2_PLANE_1 1623#define VR_SVI2_PLANE_2 2624#define VR_SMIO_PATTERN_1 3625#define VR_SMIO_PATTERN_2 4626#define VR_STATIC_VOLTAGE 5627628// Clock Stretcher Configuration629630#define CLOCK_STRETCHER_MAX_ENTRIES 0x4631#define CKS_LOOKUPTable_MAX_ENTRIES 0x4632633// The 'settings' field is subdivided in the following way:634#define CLOCK_STRETCHER_SETTING_DDT_MASK 0x01635#define CLOCK_STRETCHER_SETTING_DDT_SHIFT 0x0636#define CLOCK_STRETCHER_SETTING_STRETCH_AMOUNT_MASK 0x1E637#define CLOCK_STRETCHER_SETTING_STRETCH_AMOUNT_SHIFT 0x1638#define CLOCK_STRETCHER_SETTING_ENABLE_MASK 0x80639#define CLOCK_STRETCHER_SETTING_ENABLE_SHIFT 0x7640641struct SMU_ClockStretcherDataTableEntry {642uint8_t minVID;643uint8_t maxVID;644645646uint16_t setting;647};648typedef struct SMU_ClockStretcherDataTableEntry SMU_ClockStretcherDataTableEntry;649650struct SMU_ClockStretcherDataTable {651SMU_ClockStretcherDataTableEntry ClockStretcherDataTableEntry[CLOCK_STRETCHER_MAX_ENTRIES];652};653typedef struct SMU_ClockStretcherDataTable SMU_ClockStretcherDataTable;654655struct SMU_CKS_LOOKUPTableEntry {656uint16_t minFreq;657uint16_t maxFreq;658659uint8_t setting;660uint8_t padding[3];661};662typedef struct SMU_CKS_LOOKUPTableEntry SMU_CKS_LOOKUPTableEntry;663664struct SMU_CKS_LOOKUPTable {665SMU_CKS_LOOKUPTableEntry CKS_LOOKUPTableEntry[CKS_LOOKUPTable_MAX_ENTRIES];666};667typedef struct SMU_CKS_LOOKUPTable SMU_CKS_LOOKUPTable;668669struct AgmAvfsData_t {670uint16_t avgPsmCount[28];671uint16_t minPsmCount[28];672};673typedef struct AgmAvfsData_t AgmAvfsData_t;674675// AVFS DEFINES676677enum VFT_COLUMNS {678SCLK0,679SCLK1,680SCLK2,681SCLK3,682SCLK4,683SCLK5,684SCLK6,685SCLK7,686687NUM_VFT_COLUMNS688};689690#define TEMP_RANGE_MAXSTEPS 12691struct VFT_CELL_t {692uint16_t Voltage;693};694695typedef struct VFT_CELL_t VFT_CELL_t;696697struct VFT_TABLE_t {698VFT_CELL_t Cell[TEMP_RANGE_MAXSTEPS][NUM_VFT_COLUMNS];699uint16_t AvfsGbv[NUM_VFT_COLUMNS];700uint16_t BtcGbv[NUM_VFT_COLUMNS];701uint16_t Temperature[TEMP_RANGE_MAXSTEPS];702703uint8_t NumTemperatureSteps;704uint8_t padding[3];705};706typedef struct VFT_TABLE_t VFT_TABLE_t;707708#endif709710711