14cd92098Szrj /* 24cd92098Szrj * Copyright 2013 Advanced Micro Devices, Inc. 34cd92098Szrj * 44cd92098Szrj * Permission is hereby granted, free of charge, to any person obtaining a 54cd92098Szrj * copy of this software and associated documentation files (the "Software"), 64cd92098Szrj * to deal in the Software without restriction, including without limitation 74cd92098Szrj * the rights to use, copy, modify, merge, publish, distribute, sublicense, 84cd92098Szrj * and/or sell copies of the Software, and to permit persons to whom the 94cd92098Szrj * Software is furnished to do so, subject to the following conditions: 104cd92098Szrj * 114cd92098Szrj * The above copyright notice and this permission notice shall be included in 124cd92098Szrj * all copies or substantial portions of the Software. 134cd92098Szrj * 144cd92098Szrj * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 154cd92098Szrj * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 164cd92098Szrj * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 174cd92098Szrj * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 184cd92098Szrj * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 194cd92098Szrj * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 204cd92098Szrj * OTHER DEALINGS IN THE SOFTWARE. 214cd92098Szrj * 224cd92098Szrj */ 234cd92098Szrj 244cd92098Szrj #ifndef SMU7_DISCRETE_H 254cd92098Szrj #define SMU7_DISCRETE_H 264cd92098Szrj 274cd92098Szrj #include "smu7.h" 284cd92098Szrj 294cd92098Szrj #pragma pack(push, 1) 304cd92098Szrj 314cd92098Szrj #define SMU7_DTE_ITERATIONS 5 324cd92098Szrj #define SMU7_DTE_SOURCES 3 334cd92098Szrj #define SMU7_DTE_SINKS 1 344cd92098Szrj #define SMU7_NUM_CPU_TES 0 354cd92098Szrj #define SMU7_NUM_GPU_TES 1 364cd92098Szrj #define SMU7_NUM_NON_TES 2 374cd92098Szrj 384cd92098Szrj struct SMU7_SoftRegisters 394cd92098Szrj { 404cd92098Szrj uint32_t RefClockFrequency; 414cd92098Szrj uint32_t PmTimerP; 424cd92098Szrj uint32_t FeatureEnables; 434cd92098Szrj uint32_t PreVBlankGap; 444cd92098Szrj uint32_t VBlankTimeout; 454cd92098Szrj uint32_t TrainTimeGap; 464cd92098Szrj 474cd92098Szrj uint32_t MvddSwitchTime; 484cd92098Szrj uint32_t LongestAcpiTrainTime; 494cd92098Szrj uint32_t AcpiDelay; 504cd92098Szrj uint32_t G5TrainTime; 514cd92098Szrj uint32_t DelayMpllPwron; 524cd92098Szrj uint32_t VoltageChangeTimeout; 534cd92098Szrj uint32_t HandshakeDisables; 544cd92098Szrj 554cd92098Szrj uint8_t DisplayPhy1Config; 564cd92098Szrj uint8_t DisplayPhy2Config; 574cd92098Szrj uint8_t DisplayPhy3Config; 584cd92098Szrj uint8_t DisplayPhy4Config; 594cd92098Szrj 604cd92098Szrj uint8_t DisplayPhy5Config; 614cd92098Szrj uint8_t DisplayPhy6Config; 624cd92098Szrj uint8_t DisplayPhy7Config; 634cd92098Szrj uint8_t DisplayPhy8Config; 644cd92098Szrj 654cd92098Szrj uint32_t AverageGraphicsA; 664cd92098Szrj uint32_t AverageMemoryA; 674cd92098Szrj uint32_t AverageGioA; 684cd92098Szrj 694cd92098Szrj uint8_t SClkDpmEnabledLevels; 704cd92098Szrj uint8_t MClkDpmEnabledLevels; 714cd92098Szrj uint8_t LClkDpmEnabledLevels; 724cd92098Szrj uint8_t PCIeDpmEnabledLevels; 734cd92098Szrj 744cd92098Szrj uint8_t UVDDpmEnabledLevels; 754cd92098Szrj uint8_t SAMUDpmEnabledLevels; 764cd92098Szrj uint8_t ACPDpmEnabledLevels; 774cd92098Szrj uint8_t VCEDpmEnabledLevels; 784cd92098Szrj 794cd92098Szrj uint32_t DRAM_LOG_ADDR_H; 804cd92098Szrj uint32_t DRAM_LOG_ADDR_L; 814cd92098Szrj uint32_t DRAM_LOG_PHY_ADDR_H; 824cd92098Szrj uint32_t DRAM_LOG_PHY_ADDR_L; 834cd92098Szrj uint32_t DRAM_LOG_BUFF_SIZE; 844cd92098Szrj uint32_t UlvEnterC; 854cd92098Szrj uint32_t UlvTime; 864cd92098Szrj uint32_t Reserved[3]; 874cd92098Szrj 884cd92098Szrj }; 894cd92098Szrj 904cd92098Szrj typedef struct SMU7_SoftRegisters SMU7_SoftRegisters; 914cd92098Szrj 924cd92098Szrj struct SMU7_Discrete_VoltageLevel 934cd92098Szrj { 944cd92098Szrj uint16_t Voltage; 954cd92098Szrj uint16_t StdVoltageHiSidd; 964cd92098Szrj uint16_t StdVoltageLoSidd; 974cd92098Szrj uint8_t Smio; 984cd92098Szrj uint8_t padding; 994cd92098Szrj }; 1004cd92098Szrj 1014cd92098Szrj typedef struct SMU7_Discrete_VoltageLevel SMU7_Discrete_VoltageLevel; 1024cd92098Szrj 1034cd92098Szrj struct SMU7_Discrete_GraphicsLevel 1044cd92098Szrj { 1054cd92098Szrj uint32_t Flags; 1064cd92098Szrj uint32_t MinVddc; 1074cd92098Szrj uint32_t MinVddcPhases; 1084cd92098Szrj 1094cd92098Szrj uint32_t SclkFrequency; 1104cd92098Szrj 1114cd92098Szrj uint8_t padding1[2]; 1124cd92098Szrj uint16_t ActivityLevel; 1134cd92098Szrj 1144cd92098Szrj uint32_t CgSpllFuncCntl3; 1154cd92098Szrj uint32_t CgSpllFuncCntl4; 1164cd92098Szrj uint32_t SpllSpreadSpectrum; 1174cd92098Szrj uint32_t SpllSpreadSpectrum2; 1184cd92098Szrj uint32_t CcPwrDynRm; 1194cd92098Szrj uint32_t CcPwrDynRm1; 1204cd92098Szrj uint8_t SclkDid; 1214cd92098Szrj uint8_t DisplayWatermark; 1224cd92098Szrj uint8_t EnabledForActivity; 1234cd92098Szrj uint8_t EnabledForThrottle; 1244cd92098Szrj uint8_t UpH; 1254cd92098Szrj uint8_t DownH; 1264cd92098Szrj uint8_t VoltageDownH; 1274cd92098Szrj uint8_t PowerThrottle; 1284cd92098Szrj uint8_t DeepSleepDivId; 1294cd92098Szrj uint8_t padding[3]; 1304cd92098Szrj }; 1314cd92098Szrj 1324cd92098Szrj typedef struct SMU7_Discrete_GraphicsLevel SMU7_Discrete_GraphicsLevel; 1334cd92098Szrj 1344cd92098Szrj struct SMU7_Discrete_ACPILevel 1354cd92098Szrj { 1364cd92098Szrj uint32_t Flags; 1374cd92098Szrj uint32_t MinVddc; 1384cd92098Szrj uint32_t MinVddcPhases; 1394cd92098Szrj uint32_t SclkFrequency; 1404cd92098Szrj uint8_t SclkDid; 1414cd92098Szrj uint8_t DisplayWatermark; 1424cd92098Szrj uint8_t DeepSleepDivId; 1434cd92098Szrj uint8_t padding; 1444cd92098Szrj uint32_t CgSpllFuncCntl; 1454cd92098Szrj uint32_t CgSpllFuncCntl2; 1464cd92098Szrj uint32_t CgSpllFuncCntl3; 1474cd92098Szrj uint32_t CgSpllFuncCntl4; 1484cd92098Szrj uint32_t SpllSpreadSpectrum; 1494cd92098Szrj uint32_t SpllSpreadSpectrum2; 1504cd92098Szrj uint32_t CcPwrDynRm; 1514cd92098Szrj uint32_t CcPwrDynRm1; 1524cd92098Szrj }; 1534cd92098Szrj 1544cd92098Szrj typedef struct SMU7_Discrete_ACPILevel SMU7_Discrete_ACPILevel; 1554cd92098Szrj 1564cd92098Szrj struct SMU7_Discrete_Ulv 1574cd92098Szrj { 1584cd92098Szrj uint32_t CcPwrDynRm; 1594cd92098Szrj uint32_t CcPwrDynRm1; 1604cd92098Szrj uint16_t VddcOffset; 1614cd92098Szrj uint8_t VddcOffsetVid; 1624cd92098Szrj uint8_t VddcPhase; 1634cd92098Szrj uint32_t Reserved; 1644cd92098Szrj }; 1654cd92098Szrj 1664cd92098Szrj typedef struct SMU7_Discrete_Ulv SMU7_Discrete_Ulv; 1674cd92098Szrj 1684cd92098Szrj struct SMU7_Discrete_MemoryLevel 1694cd92098Szrj { 1704cd92098Szrj uint32_t MinVddc; 1714cd92098Szrj uint32_t MinVddcPhases; 1724cd92098Szrj uint32_t MinVddci; 1734cd92098Szrj uint32_t MinMvdd; 1744cd92098Szrj 1754cd92098Szrj uint32_t MclkFrequency; 1764cd92098Szrj 1774cd92098Szrj uint8_t EdcReadEnable; 1784cd92098Szrj uint8_t EdcWriteEnable; 1794cd92098Szrj uint8_t RttEnable; 1804cd92098Szrj uint8_t StutterEnable; 1814cd92098Szrj 1824cd92098Szrj uint8_t StrobeEnable; 1834cd92098Szrj uint8_t StrobeRatio; 1844cd92098Szrj uint8_t EnabledForThrottle; 1854cd92098Szrj uint8_t EnabledForActivity; 1864cd92098Szrj 1874cd92098Szrj uint8_t UpH; 1884cd92098Szrj uint8_t DownH; 1894cd92098Szrj uint8_t VoltageDownH; 1904cd92098Szrj uint8_t padding; 1914cd92098Szrj 1924cd92098Szrj uint16_t ActivityLevel; 1934cd92098Szrj uint8_t DisplayWatermark; 1944cd92098Szrj uint8_t padding1; 1954cd92098Szrj 1964cd92098Szrj uint32_t MpllFuncCntl; 1974cd92098Szrj uint32_t MpllFuncCntl_1; 1984cd92098Szrj uint32_t MpllFuncCntl_2; 1994cd92098Szrj uint32_t MpllAdFuncCntl; 2004cd92098Szrj uint32_t MpllDqFuncCntl; 2014cd92098Szrj uint32_t MclkPwrmgtCntl; 2024cd92098Szrj uint32_t DllCntl; 2034cd92098Szrj uint32_t MpllSs1; 2044cd92098Szrj uint32_t MpllSs2; 2054cd92098Szrj }; 2064cd92098Szrj 2074cd92098Szrj typedef struct SMU7_Discrete_MemoryLevel SMU7_Discrete_MemoryLevel; 2084cd92098Szrj 2094cd92098Szrj struct SMU7_Discrete_LinkLevel 2104cd92098Szrj { 2114cd92098Szrj uint8_t PcieGenSpeed; 2124cd92098Szrj uint8_t PcieLaneCount; 2134cd92098Szrj uint8_t EnabledForActivity; 2144cd92098Szrj uint8_t Padding; 2154cd92098Szrj uint32_t DownT; 2164cd92098Szrj uint32_t UpT; 2174cd92098Szrj uint32_t Reserved; 2184cd92098Szrj }; 2194cd92098Szrj 2204cd92098Szrj typedef struct SMU7_Discrete_LinkLevel SMU7_Discrete_LinkLevel; 2214cd92098Szrj 2224cd92098Szrj 2234cd92098Szrj struct SMU7_Discrete_MCArbDramTimingTableEntry 2244cd92098Szrj { 2254cd92098Szrj uint32_t McArbDramTiming; 2264cd92098Szrj uint32_t McArbDramTiming2; 2274cd92098Szrj uint8_t McArbBurstTime; 2284cd92098Szrj uint8_t padding[3]; 2294cd92098Szrj }; 2304cd92098Szrj 2314cd92098Szrj typedef struct SMU7_Discrete_MCArbDramTimingTableEntry SMU7_Discrete_MCArbDramTimingTableEntry; 2324cd92098Szrj 2334cd92098Szrj struct SMU7_Discrete_MCArbDramTimingTable 2344cd92098Szrj { 2354cd92098Szrj SMU7_Discrete_MCArbDramTimingTableEntry entries[SMU__NUM_SCLK_DPM_STATE][SMU__NUM_MCLK_DPM_LEVELS]; 2364cd92098Szrj }; 2374cd92098Szrj 2384cd92098Szrj typedef struct SMU7_Discrete_MCArbDramTimingTable SMU7_Discrete_MCArbDramTimingTable; 2394cd92098Szrj 2404cd92098Szrj struct SMU7_Discrete_UvdLevel 2414cd92098Szrj { 2424cd92098Szrj uint32_t VclkFrequency; 2434cd92098Szrj uint32_t DclkFrequency; 2444cd92098Szrj uint16_t MinVddc; 2454cd92098Szrj uint8_t MinVddcPhases; 2464cd92098Szrj uint8_t VclkDivider; 2474cd92098Szrj uint8_t DclkDivider; 2484cd92098Szrj uint8_t padding[3]; 2494cd92098Szrj }; 2504cd92098Szrj 2514cd92098Szrj typedef struct SMU7_Discrete_UvdLevel SMU7_Discrete_UvdLevel; 2524cd92098Szrj 2534cd92098Szrj struct SMU7_Discrete_ExtClkLevel 2544cd92098Szrj { 2554cd92098Szrj uint32_t Frequency; 2564cd92098Szrj uint16_t MinVoltage; 2574cd92098Szrj uint8_t MinPhases; 2584cd92098Szrj uint8_t Divider; 2594cd92098Szrj }; 2604cd92098Szrj 2614cd92098Szrj typedef struct SMU7_Discrete_ExtClkLevel SMU7_Discrete_ExtClkLevel; 2624cd92098Szrj 2634cd92098Szrj struct SMU7_Discrete_StateInfo 2644cd92098Szrj { 2654cd92098Szrj uint32_t SclkFrequency; 2664cd92098Szrj uint32_t MclkFrequency; 2674cd92098Szrj uint32_t VclkFrequency; 2684cd92098Szrj uint32_t DclkFrequency; 2694cd92098Szrj uint32_t SamclkFrequency; 2704cd92098Szrj uint32_t AclkFrequency; 2714cd92098Szrj uint32_t EclkFrequency; 2724cd92098Szrj uint16_t MvddVoltage; 2734cd92098Szrj uint16_t padding16; 2744cd92098Szrj uint8_t DisplayWatermark; 2754cd92098Szrj uint8_t McArbIndex; 2764cd92098Szrj uint8_t McRegIndex; 2774cd92098Szrj uint8_t SeqIndex; 2784cd92098Szrj uint8_t SclkDid; 2794cd92098Szrj int8_t SclkIndex; 2804cd92098Szrj int8_t MclkIndex; 2814cd92098Szrj uint8_t PCIeGen; 2824cd92098Szrj 2834cd92098Szrj }; 2844cd92098Szrj 2854cd92098Szrj typedef struct SMU7_Discrete_StateInfo SMU7_Discrete_StateInfo; 2864cd92098Szrj 2874cd92098Szrj 2884cd92098Szrj struct SMU7_Discrete_DpmTable 2894cd92098Szrj { 2904cd92098Szrj SMU7_PIDController GraphicsPIDController; 2914cd92098Szrj SMU7_PIDController MemoryPIDController; 2924cd92098Szrj SMU7_PIDController LinkPIDController; 2934cd92098Szrj 2944cd92098Szrj uint32_t SystemFlags; 2954cd92098Szrj 2964cd92098Szrj 2974cd92098Szrj uint32_t SmioMaskVddcVid; 2984cd92098Szrj uint32_t SmioMaskVddcPhase; 2994cd92098Szrj uint32_t SmioMaskVddciVid; 3004cd92098Szrj uint32_t SmioMaskMvddVid; 3014cd92098Szrj 3024cd92098Szrj uint32_t VddcLevelCount; 3034cd92098Szrj uint32_t VddciLevelCount; 3044cd92098Szrj uint32_t MvddLevelCount; 3054cd92098Szrj 3064cd92098Szrj SMU7_Discrete_VoltageLevel VddcLevel [SMU7_MAX_LEVELS_VDDC]; 3074cd92098Szrj // SMU7_Discrete_VoltageLevel VddcStandardReference [SMU7_MAX_LEVELS_VDDC]; 3084cd92098Szrj SMU7_Discrete_VoltageLevel VddciLevel [SMU7_MAX_LEVELS_VDDCI]; 3094cd92098Szrj SMU7_Discrete_VoltageLevel MvddLevel [SMU7_MAX_LEVELS_MVDD]; 3104cd92098Szrj 3114cd92098Szrj uint8_t GraphicsDpmLevelCount; 3124cd92098Szrj uint8_t MemoryDpmLevelCount; 3134cd92098Szrj uint8_t LinkLevelCount; 3144cd92098Szrj uint8_t UvdLevelCount; 3154cd92098Szrj uint8_t VceLevelCount; 3164cd92098Szrj uint8_t AcpLevelCount; 3174cd92098Szrj uint8_t SamuLevelCount; 3184cd92098Szrj uint8_t MasterDeepSleepControl; 3194cd92098Szrj uint32_t Reserved[5]; 3204cd92098Szrj // uint32_t SamuDefaultLevel; 3214cd92098Szrj 3224cd92098Szrj SMU7_Discrete_GraphicsLevel GraphicsLevel [SMU7_MAX_LEVELS_GRAPHICS]; 3234cd92098Szrj SMU7_Discrete_MemoryLevel MemoryACPILevel; 3244cd92098Szrj SMU7_Discrete_MemoryLevel MemoryLevel [SMU7_MAX_LEVELS_MEMORY]; 3254cd92098Szrj SMU7_Discrete_LinkLevel LinkLevel [SMU7_MAX_LEVELS_LINK]; 3264cd92098Szrj SMU7_Discrete_ACPILevel ACPILevel; 3274cd92098Szrj SMU7_Discrete_UvdLevel UvdLevel [SMU7_MAX_LEVELS_UVD]; 3284cd92098Szrj SMU7_Discrete_ExtClkLevel VceLevel [SMU7_MAX_LEVELS_VCE]; 3294cd92098Szrj SMU7_Discrete_ExtClkLevel AcpLevel [SMU7_MAX_LEVELS_ACP]; 3304cd92098Szrj SMU7_Discrete_ExtClkLevel SamuLevel [SMU7_MAX_LEVELS_SAMU]; 3314cd92098Szrj SMU7_Discrete_Ulv Ulv; 3324cd92098Szrj 3334cd92098Szrj uint32_t SclkStepSize; 3344cd92098Szrj uint32_t Smio [SMU7_MAX_ENTRIES_SMIO]; 3354cd92098Szrj 3364cd92098Szrj uint8_t UvdBootLevel; 3374cd92098Szrj uint8_t VceBootLevel; 3384cd92098Szrj uint8_t AcpBootLevel; 3394cd92098Szrj uint8_t SamuBootLevel; 3404cd92098Szrj 3414cd92098Szrj uint8_t UVDInterval; 3424cd92098Szrj uint8_t VCEInterval; 3434cd92098Szrj uint8_t ACPInterval; 3444cd92098Szrj uint8_t SAMUInterval; 3454cd92098Szrj 3464cd92098Szrj uint8_t GraphicsBootLevel; 3474cd92098Szrj uint8_t GraphicsVoltageChangeEnable; 3484cd92098Szrj uint8_t GraphicsThermThrottleEnable; 3494cd92098Szrj uint8_t GraphicsInterval; 3504cd92098Szrj 3514cd92098Szrj uint8_t VoltageInterval; 3524cd92098Szrj uint8_t ThermalInterval; 3534cd92098Szrj uint16_t TemperatureLimitHigh; 3544cd92098Szrj 3554cd92098Szrj uint16_t TemperatureLimitLow; 3564cd92098Szrj uint8_t MemoryBootLevel; 3574cd92098Szrj uint8_t MemoryVoltageChangeEnable; 3584cd92098Szrj 3594cd92098Szrj uint8_t MemoryInterval; 3604cd92098Szrj uint8_t MemoryThermThrottleEnable; 3614cd92098Szrj uint16_t VddcVddciDelta; 3624cd92098Szrj 3634cd92098Szrj uint16_t VoltageResponseTime; 3644cd92098Szrj uint16_t PhaseResponseTime; 3654cd92098Szrj 3664cd92098Szrj uint8_t PCIeBootLinkLevel; 3674cd92098Szrj uint8_t PCIeGenInterval; 3684cd92098Szrj uint8_t DTEInterval; 3694cd92098Szrj uint8_t DTEMode; 3704cd92098Szrj 3714cd92098Szrj uint8_t SVI2Enable; 3724cd92098Szrj uint8_t VRHotGpio; 3734cd92098Szrj uint8_t AcDcGpio; 3744cd92098Szrj uint8_t ThermGpio; 3754cd92098Szrj 3764cd92098Szrj uint16_t PPM_PkgPwrLimit; 3774cd92098Szrj uint16_t PPM_TemperatureLimit; 3784cd92098Szrj 3794cd92098Szrj uint16_t DefaultTdp; 3804cd92098Szrj uint16_t TargetTdp; 3814cd92098Szrj 3824cd92098Szrj uint16_t FpsHighT; 3834cd92098Szrj uint16_t FpsLowT; 3844cd92098Szrj 3854cd92098Szrj uint16_t BAPMTI_R [SMU7_DTE_ITERATIONS][SMU7_DTE_SOURCES][SMU7_DTE_SINKS]; 3864cd92098Szrj uint16_t BAPMTI_RC [SMU7_DTE_ITERATIONS][SMU7_DTE_SOURCES][SMU7_DTE_SINKS]; 3874cd92098Szrj 3884cd92098Szrj uint8_t DTEAmbientTempBase; 3894cd92098Szrj uint8_t DTETjOffset; 3904cd92098Szrj uint8_t GpuTjMax; 3914cd92098Szrj uint8_t GpuTjHyst; 3924cd92098Szrj 3934cd92098Szrj uint16_t BootVddc; 3944cd92098Szrj uint16_t BootVddci; 3954cd92098Szrj 3964cd92098Szrj uint16_t BootMVdd; 3974cd92098Szrj uint16_t padding; 3984cd92098Szrj 3994cd92098Szrj uint32_t BAPM_TEMP_GRADIENT; 4004cd92098Szrj 4014cd92098Szrj uint32_t LowSclkInterruptT; 4024cd92098Szrj }; 4034cd92098Szrj 4044cd92098Szrj typedef struct SMU7_Discrete_DpmTable SMU7_Discrete_DpmTable; 4054cd92098Szrj 4064cd92098Szrj #define SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE 16 4074cd92098Szrj #define SMU7_DISCRETE_MC_REGISTER_ARRAY_SET_COUNT SMU7_MAX_LEVELS_MEMORY 4084cd92098Szrj 4094cd92098Szrj struct SMU7_Discrete_MCRegisterAddress 4104cd92098Szrj { 4114cd92098Szrj uint16_t s0; 4124cd92098Szrj uint16_t s1; 4134cd92098Szrj }; 4144cd92098Szrj 4154cd92098Szrj typedef struct SMU7_Discrete_MCRegisterAddress SMU7_Discrete_MCRegisterAddress; 4164cd92098Szrj 4174cd92098Szrj struct SMU7_Discrete_MCRegisterSet 4184cd92098Szrj { 4194cd92098Szrj uint32_t value[SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE]; 4204cd92098Szrj }; 4214cd92098Szrj 4224cd92098Szrj typedef struct SMU7_Discrete_MCRegisterSet SMU7_Discrete_MCRegisterSet; 4234cd92098Szrj 4244cd92098Szrj struct SMU7_Discrete_MCRegisters 4254cd92098Szrj { 4264cd92098Szrj uint8_t last; 4274cd92098Szrj uint8_t reserved[3]; 4284cd92098Szrj SMU7_Discrete_MCRegisterAddress address[SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE]; 4294cd92098Szrj SMU7_Discrete_MCRegisterSet data[SMU7_DISCRETE_MC_REGISTER_ARRAY_SET_COUNT]; 4304cd92098Szrj }; 4314cd92098Szrj 4324cd92098Szrj typedef struct SMU7_Discrete_MCRegisters SMU7_Discrete_MCRegisters; 4334cd92098Szrj 434*7dcf36dcSFrançois Tigeot struct SMU7_Discrete_FanTable 435*7dcf36dcSFrançois Tigeot { 436*7dcf36dcSFrançois Tigeot uint16_t FdoMode; 437*7dcf36dcSFrançois Tigeot int16_t TempMin; 438*7dcf36dcSFrançois Tigeot int16_t TempMed; 439*7dcf36dcSFrançois Tigeot int16_t TempMax; 440*7dcf36dcSFrançois Tigeot int16_t Slope1; 441*7dcf36dcSFrançois Tigeot int16_t Slope2; 442*7dcf36dcSFrançois Tigeot int16_t FdoMin; 443*7dcf36dcSFrançois Tigeot int16_t HystUp; 444*7dcf36dcSFrançois Tigeot int16_t HystDown; 445*7dcf36dcSFrançois Tigeot int16_t HystSlope; 446*7dcf36dcSFrançois Tigeot int16_t TempRespLim; 447*7dcf36dcSFrançois Tigeot int16_t TempCurr; 448*7dcf36dcSFrançois Tigeot int16_t SlopeCurr; 449*7dcf36dcSFrançois Tigeot int16_t PwmCurr; 450*7dcf36dcSFrançois Tigeot uint32_t RefreshPeriod; 451*7dcf36dcSFrançois Tigeot int16_t FdoMax; 452*7dcf36dcSFrançois Tigeot uint8_t TempSrc; 453*7dcf36dcSFrançois Tigeot int8_t Padding; 454*7dcf36dcSFrançois Tigeot }; 455*7dcf36dcSFrançois Tigeot 456*7dcf36dcSFrançois Tigeot typedef struct SMU7_Discrete_FanTable SMU7_Discrete_FanTable; 457*7dcf36dcSFrançois Tigeot 458*7dcf36dcSFrançois Tigeot 4594cd92098Szrj struct SMU7_Discrete_PmFuses { 4604cd92098Szrj // dw0-dw1 4614cd92098Szrj uint8_t BapmVddCVidHiSidd[8]; 4624cd92098Szrj 4634cd92098Szrj // dw2-dw3 4644cd92098Szrj uint8_t BapmVddCVidLoSidd[8]; 4654cd92098Szrj 4664cd92098Szrj // dw4-dw5 4674cd92098Szrj uint8_t VddCVid[8]; 4684cd92098Szrj 4694cd92098Szrj // dw6 4704cd92098Szrj uint8_t SviLoadLineEn; 4714cd92098Szrj uint8_t SviLoadLineVddC; 4724cd92098Szrj uint8_t SviLoadLineTrimVddC; 4734cd92098Szrj uint8_t SviLoadLineOffsetVddC; 4744cd92098Szrj 4754cd92098Szrj // dw7 4764cd92098Szrj uint16_t TDC_VDDC_PkgLimit; 4774cd92098Szrj uint8_t TDC_VDDC_ThrottleReleaseLimitPerc; 4784cd92098Szrj uint8_t TDC_MAWt; 4794cd92098Szrj 4804cd92098Szrj // dw8 4814cd92098Szrj uint8_t TdcWaterfallCtl; 4824cd92098Szrj uint8_t LPMLTemperatureMin; 4834cd92098Szrj uint8_t LPMLTemperatureMax; 4844cd92098Szrj uint8_t Reserved; 4854cd92098Szrj 4864cd92098Szrj // dw9-dw10 4874cd92098Szrj uint8_t BapmVddCVidHiSidd2[8]; 4884cd92098Szrj 4894cd92098Szrj // dw11-dw12 490*7dcf36dcSFrançois Tigeot int16_t FuzzyFan_ErrorSetDelta; 491*7dcf36dcSFrançois Tigeot int16_t FuzzyFan_ErrorRateSetDelta; 492*7dcf36dcSFrançois Tigeot int16_t FuzzyFan_PwmSetDelta; 493*7dcf36dcSFrançois Tigeot uint16_t CalcMeasPowerBlend; 4944cd92098Szrj 4954cd92098Szrj // dw13-dw16 4964cd92098Szrj uint8_t GnbLPML[16]; 4974cd92098Szrj 4984cd92098Szrj // dw17 4994cd92098Szrj uint8_t GnbLPMLMaxVid; 5004cd92098Szrj uint8_t GnbLPMLMinVid; 5014cd92098Szrj uint8_t Reserved1[2]; 5024cd92098Szrj 5034cd92098Szrj // dw18 5044cd92098Szrj uint16_t BapmVddCBaseLeakageHiSidd; 5054cd92098Szrj uint16_t BapmVddCBaseLeakageLoSidd; 5064cd92098Szrj }; 5074cd92098Szrj 5084cd92098Szrj typedef struct SMU7_Discrete_PmFuses SMU7_Discrete_PmFuses; 5094cd92098Szrj 5104cd92098Szrj 5114cd92098Szrj #pragma pack(pop) 5124cd92098Szrj 5134cd92098Szrj #endif 514a39b2473SFrançois Tigeot 515