/* * Copyright 2016 Advanced Micro Devices, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * */ #ifndef _VEGA10_PPTABLE_H_ #define _VEGA10_PPTABLE_H_ #pragma pack(push, 1) #define ATOM_VEGA10_PP_FANPARAMETERS_TACHOMETER_PULSES_PER_REVOLUTION_MASK 0x0f #define ATOM_VEGA10_PP_FANPARAMETERS_NOFAN 0x80 #define ATOM_VEGA10_PP_THERMALCONTROLLER_NONE 0 #define ATOM_VEGA10_PP_THERMALCONTROLLER_LM96163 17 #define ATOM_VEGA10_PP_THERMALCONTROLLER_VEGA10 24 #define ATOM_VEGA10_PP_THERMALCONTROLLER_ADT7473_WITH_INTERNAL 0x89 #define ATOM_VEGA10_PP_THERMALCONTROLLER_EMC2103_WITH_INTERNAL 0x8D #define ATOM_VEGA10_PP_PLATFORM_CAP_POWERPLAY 0x1 #define ATOM_VEGA10_PP_PLATFORM_CAP_SBIOSPOWERSOURCE 0x2 #define ATOM_VEGA10_PP_PLATFORM_CAP_HARDWAREDC 0x4 #define ATOM_VEGA10_PP_PLATFORM_CAP_BACO 0x8 #define ATOM_VEGA10_PP_PLATFORM_COMBINE_PCC_WITH_THERMAL_SIGNAL 0x10 /* ATOM_PPLIB_NONCLOCK_INFO::usClassification */ #define ATOM_PPLIB_CLASSIFICATION_UI_MASK 0x0007 #define ATOM_PPLIB_CLASSIFICATION_UI_SHIFT 0 #define ATOM_PPLIB_CLASSIFICATION_UI_NONE 0 #define ATOM_PPLIB_CLASSIFICATION_UI_BATTERY 1 #define ATOM_PPLIB_CLASSIFICATION_UI_BALANCED 3 #define ATOM_PPLIB_CLASSIFICATION_UI_PERFORMANCE 5 /* 2, 4, 6, 7 are reserved */ #define ATOM_PPLIB_CLASSIFICATION_BOOT 0x0008 #define ATOM_PPLIB_CLASSIFICATION_THERMAL 0x0010 #define ATOM_PPLIB_CLASSIFICATION_LIMITEDPOWERSOURCE 0x0020 #define ATOM_PPLIB_CLASSIFICATION_REST 0x0040 #define ATOM_PPLIB_CLASSIFICATION_FORCED 0x0080 #define ATOM_PPLIB_CLASSIFICATION_ACPI 0x1000 /* ATOM_PPLIB_NONCLOCK_INFO::usClassification2 */ #define ATOM_PPLIB_CLASSIFICATION2_LIMITEDPOWERSOURCE_2 0x0001 #define ATOM_Vega10_DISALLOW_ON_DC 0x00004000 #define ATOM_Vega10_ENABLE_VARIBRIGHT 0x00008000 #define ATOM_Vega10_TABLE_REVISION_VEGA10 8 #define ATOM_Vega10_VoltageMode_AVFS_Interpolate 0 #define ATOM_Vega10_VoltageMode_AVFS_WorstCase 1 #define ATOM_Vega10_VoltageMode_Static 2 typedef struct _ATOM_Vega10_POWERPLAYTABLE { struct atom_common_table_header sHeader; UCHAR ucTableRevision; USHORT usTableSize; /* the size of header structure */ ULONG ulGoldenPPID; /* PPGen use only */ ULONG ulGoldenRevision; /* PPGen use only */ USHORT usFormatID; /* PPGen use only */ ULONG ulPlatformCaps; /* See ATOM_Vega10_CAPS_* */ ULONG ulMaxODEngineClock; /* For Overdrive. */ ULONG ulMaxODMemoryClock; /* For Overdrive. */ USHORT usPowerControlLimit; USHORT usUlvVoltageOffset; /* in mv units */ USHORT usUlvSmnclkDid; USHORT usUlvMp1clkDid; USHORT usUlvGfxclkBypass; USHORT usGfxclkSlewRate; UCHAR ucGfxVoltageMode; UCHAR ucSocVoltageMode; UCHAR ucUclkVoltageMode; UCHAR ucUvdVoltageMode; UCHAR ucVceVoltageMode; UCHAR ucMp0VoltageMode; UCHAR ucDcefVoltageMode; USHORT usStateArrayOffset; /* points to ATOM_Vega10_State_Array */ USHORT usFanTableOffset; /* points to ATOM_Vega10_Fan_Table */ USHORT usThermalControllerOffset; /* points to ATOM_Vega10_Thermal_Controller */ USHORT usSocclkDependencyTableOffset; /* points to ATOM_Vega10_SOCCLK_Dependency_Table */ USHORT usMclkDependencyTableOffset; /* points to ATOM_Vega10_MCLK_Dependency_Table */ USHORT usGfxclkDependencyTableOffset; /* points to ATOM_Vega10_GFXCLK_Dependency_Table */ USHORT usDcefclkDependencyTableOffset; /* points to ATOM_Vega10_DCEFCLK_Dependency_Table */ USHORT usVddcLookupTableOffset; /* points to ATOM_Vega10_Voltage_Lookup_Table */ USHORT usVddmemLookupTableOffset; /* points to ATOM_Vega10_Voltage_Lookup_Table */ USHORT usMMDependencyTableOffset; /* points to ATOM_Vega10_MM_Dependency_Table */ USHORT usVCEStateTableOffset; /* points to ATOM_Vega10_VCE_State_Table */ USHORT usReserve; /* No PPM Support for Vega10 */ USHORT usPowerTuneTableOffset; /* points to ATOM_Vega10_PowerTune_Table */ USHORT usHardLimitTableOffset; /* points to ATOM_Vega10_Hard_Limit_Table */ USHORT usVddciLookupTableOffset; /* points to ATOM_Vega10_Voltage_Lookup_Table */ USHORT usPCIETableOffset; /* points to ATOM_Vega10_PCIE_Table */ USHORT usPixclkDependencyTableOffset; /* points to ATOM_Vega10_PIXCLK_Dependency_Table */ USHORT usDispClkDependencyTableOffset; /* points to ATOM_Vega10_DISPCLK_Dependency_Table */ USHORT usPhyClkDependencyTableOffset; /* points to ATOM_Vega10_PHYCLK_Dependency_Table */ } ATOM_Vega10_POWERPLAYTABLE; typedef struct _ATOM_Vega10_State { UCHAR ucSocClockIndexHigh; UCHAR ucSocClockIndexLow; UCHAR ucGfxClockIndexHigh; UCHAR ucGfxClockIndexLow; UCHAR ucMemClockIndexHigh; UCHAR ucMemClockIndexLow; USHORT usClassification; ULONG ulCapsAndSettings; USHORT usClassification2; } ATOM_Vega10_State; typedef struct _ATOM_Vega10_State_Array { UCHAR ucRevId; UCHAR ucNumEntries; /* Number of entries. */ ATOM_Vega10_State states[1]; /* Dynamically allocate entries. */ } ATOM_Vega10_State_Array; typedef struct _ATOM_Vega10_CLK_Dependency_Record { ULONG ulClk; /* Frequency of Clock */ UCHAR ucVddInd; /* Base voltage */ } ATOM_Vega10_CLK_Dependency_Record; typedef struct _ATOM_Vega10_GFXCLK_Dependency_Record { ULONG ulClk; /* Clock Frequency */ UCHAR ucVddInd; /* SOC_VDD index */ USHORT usCKSVOffsetandDisable; /* Bits 0~30: Voltage offset for CKS, Bit 31: Disable/enable for the GFXCLK level. */ USHORT usAVFSOffset; /* AVFS Voltage offset */ } ATOM_Vega10_GFXCLK_Dependency_Record; typedef struct _ATOM_Vega10_GFXCLK_Dependency_Record_V2 { ULONG ulClk; UCHAR ucVddInd; USHORT usCKSVOffsetandDisable; USHORT usAVFSOffset; UCHAR ucACGEnable; UCHAR ucReserved[3]; } ATOM_Vega10_GFXCLK_Dependency_Record_V2; typedef struct _ATOM_Vega10_MCLK_Dependency_Record { ULONG ulMemClk; /* Clock Frequency */ UCHAR ucVddInd; /* SOC_VDD index */ UCHAR ucVddMemInd; /* MEM_VDD - only non zero for MCLK record */ UCHAR ucVddciInd; /* VDDCI = only non zero for MCLK record */ } ATOM_Vega10_MCLK_Dependency_Record; typedef struct _ATOM_Vega10_GFXCLK_Dependency_Table { UCHAR ucRevId; UCHAR ucNumEntries; /* Number of entries. */ ATOM_Vega10_GFXCLK_Dependency_Record entries[1]; /* Dynamically allocate entries. */ } ATOM_Vega10_GFXCLK_Dependency_Table; typedef struct _ATOM_Vega10_MCLK_Dependency_Table { UCHAR ucRevId; UCHAR ucNumEntries; /* Number of entries. */ ATOM_Vega10_MCLK_Dependency_Record entries[1]; /* Dynamically allocate entries. */ } ATOM_Vega10_MCLK_Dependency_Table; typedef struct _ATOM_Vega10_SOCCLK_Dependency_Table { UCHAR ucRevId; UCHAR ucNumEntries; /* Number of entries. */ ATOM_Vega10_CLK_Dependency_Record entries[1]; /* Dynamically allocate entries. */ } ATOM_Vega10_SOCCLK_Dependency_Table; typedef struct _ATOM_Vega10_DCEFCLK_Dependency_Table { UCHAR ucRevId; UCHAR ucNumEntries; /* Number of entries. */ ATOM_Vega10_CLK_Dependency_Record entries[1]; /* Dynamically allocate entries. */ } ATOM_Vega10_DCEFCLK_Dependency_Table; typedef struct _ATOM_Vega10_PIXCLK_Dependency_Table { UCHAR ucRevId; UCHAR ucNumEntries; /* Number of entries. */ ATOM_Vega10_CLK_Dependency_Record entries[1]; /* Dynamically allocate entries. */ } ATOM_Vega10_PIXCLK_Dependency_Table; typedef struct _ATOM_Vega10_DISPCLK_Dependency_Table { UCHAR ucRevId; UCHAR ucNumEntries; /* Number of entries.*/ ATOM_Vega10_CLK_Dependency_Record entries[1]; /* Dynamically allocate entries. */ } ATOM_Vega10_DISPCLK_Dependency_Table; typedef struct _ATOM_Vega10_PHYCLK_Dependency_Table { UCHAR ucRevId; UCHAR ucNumEntries; /* Number of entries. */ ATOM_Vega10_CLK_Dependency_Record entries[1]; /* Dynamically allocate entries. */ } ATOM_Vega10_PHYCLK_Dependency_Table; typedef struct _ATOM_Vega10_MM_Dependency_Record { UCHAR ucVddcInd; /* SOC_VDD voltage */ ULONG ulDClk; /* UVD D-clock */ ULONG ulVClk; /* UVD V-clock */ ULONG ulEClk; /* VCE clock */ ULONG ulPSPClk; /* PSP clock */ } ATOM_Vega10_MM_Dependency_Record; typedef struct _ATOM_Vega10_MM_Dependency_Table { UCHAR ucRevId; UCHAR ucNumEntries; /* Number of entries */ ATOM_Vega10_MM_Dependency_Record entries[1]; /* Dynamically allocate entries */ } ATOM_Vega10_MM_Dependency_Table; typedef struct _ATOM_Vega10_PCIE_Record { ULONG ulLCLK; /* LClock */ UCHAR ucPCIEGenSpeed; /* PCIE Speed */ UCHAR ucPCIELaneWidth; /* PCIE Lane Width */ } ATOM_Vega10_PCIE_Record; typedef struct _ATOM_Vega10_PCIE_Table { UCHAR ucRevId; UCHAR ucNumEntries; /* Number of entries */ ATOM_Vega10_PCIE_Record entries[1]; /* Dynamically allocate entries. */ } ATOM_Vega10_PCIE_Table; typedef struct _ATOM_Vega10_Voltage_Lookup_Record { USHORT usVdd; /* Base voltage */ } ATOM_Vega10_Voltage_Lookup_Record; typedef struct _ATOM_Vega10_Voltage_Lookup_Table { UCHAR ucRevId; UCHAR ucNumEntries; /* Number of entries */ ATOM_Vega10_Voltage_Lookup_Record entries[1]; /* Dynamically allocate entries */ } ATOM_Vega10_Voltage_Lookup_Table; typedef struct _ATOM_Vega10_Fan_Table { UCHAR ucRevId; /* Change this if the table format changes or version changes so that the other fields are not the same. */ USHORT usFanOutputSensitivity; /* Sensitivity of fan reaction to temepature changes. */ USHORT usFanRPMMax; /* The default value in RPM. */ USHORT usThrottlingRPM; USHORT usFanAcousticLimit; /* Minimum Fan Controller Frequency Acoustic Limit. */ USHORT usTargetTemperature; /* The default ideal temperature in Celcius. */ USHORT usMinimumPWMLimit; /* The minimum PWM that the advanced fan controller can set. */ USHORT usTargetGfxClk; /* The ideal Fan Controller GFXCLK Frequency Acoustic Limit. */ USHORT usFanGainEdge; USHORT usFanGainHotspot; USHORT usFanGainLiquid; USHORT usFanGainVrVddc; USHORT usFanGainVrMvdd; USHORT usFanGainPlx; USHORT usFanGainHbm; UCHAR ucEnableZeroRPM; USHORT usFanStopTemperature; USHORT usFanStartTemperature; } ATOM_Vega10_Fan_Table; typedef struct _ATOM_Vega10_Fan_Table_V2 { UCHAR ucRevId; USHORT usFanOutputSensitivity; USHORT usFanAcousticLimitRpm; USHORT usThrottlingRPM; USHORT usTargetTemperature; USHORT usMinimumPWMLimit; USHORT usTargetGfxClk; USHORT usFanGainEdge; USHORT usFanGainHotspot; USHORT usFanGainLiquid; USHORT usFanGainVrVddc; USHORT usFanGainVrMvdd; USHORT usFanGainPlx; USHORT usFanGainHbm; UCHAR ucEnableZeroRPM; USHORT usFanStopTemperature; USHORT usFanStartTemperature; UCHAR ucFanParameters; UCHAR ucFanMinRPM; UCHAR ucFanMaxRPM; } ATOM_Vega10_Fan_Table_V2; typedef struct _ATOM_Vega10_Fan_Table_V3 { UCHAR ucRevId; USHORT usFanOutputSensitivity; USHORT usFanAcousticLimitRpm; USHORT usThrottlingRPM; USHORT usTargetTemperature; USHORT usMinimumPWMLimit; USHORT usTargetGfxClk; USHORT usFanGainEdge; USHORT usFanGainHotspot; USHORT usFanGainLiquid; USHORT usFanGainVrVddc; USHORT usFanGainVrMvdd; USHORT usFanGainPlx; USHORT usFanGainHbm; UCHAR ucEnableZeroRPM; USHORT usFanStopTemperature; USHORT usFanStartTemperature; UCHAR ucFanParameters; UCHAR ucFanMinRPM; UCHAR ucFanMaxRPM; USHORT usMGpuThrottlingRPM; } ATOM_Vega10_Fan_Table_V3; typedef struct _ATOM_Vega10_Thermal_Controller { UCHAR ucRevId; UCHAR ucType; /* one of ATOM_VEGA10_PP_THERMALCONTROLLER_*/ UCHAR ucI2cLine; /* as interpreted by DAL I2C */ UCHAR ucI2cAddress; UCHAR ucFanParameters; /* Fan Control Parameters. */ UCHAR ucFanMinRPM; /* Fan Minimum RPM (hundreds) -- for display purposes only.*/ UCHAR ucFanMaxRPM; /* Fan Maximum RPM (hundreds) -- for display purposes only.*/ UCHAR ucFlags; /* to be defined */ } ATOM_Vega10_Thermal_Controller; typedef struct _ATOM_Vega10_VCE_State_Record { UCHAR ucVCEClockIndex; /*index into usVCEDependencyTableOffset of 'ATOM_Vega10_MM_Dependency_Table' type */ UCHAR ucFlag; /* 2 bits indicates memory p-states */ UCHAR ucSCLKIndex; /* index into ATOM_Vega10_SCLK_Dependency_Table */ UCHAR ucMCLKIndex; /* index into ATOM_Vega10_MCLK_Dependency_Table */ } ATOM_Vega10_VCE_State_Record; typedef struct _ATOM_Vega10_VCE_State_Table { UCHAR ucRevId; UCHAR ucNumEntries; ATOM_Vega10_VCE_State_Record entries[1]; } ATOM_Vega10_VCE_State_Table; typedef struct _ATOM_Vega10_PowerTune_Table { UCHAR ucRevId; USHORT usSocketPowerLimit; USHORT usBatteryPowerLimit; USHORT usSmallPowerLimit; USHORT usTdcLimit; USHORT usEdcLimit; USHORT usSoftwareShutdownTemp; USHORT usTemperatureLimitHotSpot; USHORT usTemperatureLimitLiquid1; USHORT usTemperatureLimitLiquid2; USHORT usTemperatureLimitHBM; USHORT usTemperatureLimitVrSoc; USHORT usTemperatureLimitVrMem; USHORT usTemperatureLimitPlx; USHORT usLoadLineResistance; UCHAR ucLiquid1_I2C_address; UCHAR ucLiquid2_I2C_address; UCHAR ucVr_I2C_address; UCHAR ucPlx_I2C_address; UCHAR ucLiquid_I2C_LineSCL; UCHAR ucLiquid_I2C_LineSDA; UCHAR ucVr_I2C_LineSCL; UCHAR ucVr_I2C_LineSDA; UCHAR ucPlx_I2C_LineSCL; UCHAR ucPlx_I2C_LineSDA; USHORT usTemperatureLimitTedge; } ATOM_Vega10_PowerTune_Table; typedef struct _ATOM_Vega10_PowerTune_Table_V2 { UCHAR ucRevId; USHORT usSocketPowerLimit; USHORT usBatteryPowerLimit; USHORT usSmallPowerLimit; USHORT usTdcLimit; USHORT usEdcLimit; USHORT usSoftwareShutdownTemp; USHORT usTemperatureLimitHotSpot; USHORT usTemperatureLimitLiquid1; USHORT usTemperatureLimitLiquid2; USHORT usTemperatureLimitHBM; USHORT usTemperatureLimitVrSoc; USHORT usTemperatureLimitVrMem; USHORT usTemperatureLimitPlx; USHORT usLoadLineResistance; UCHAR ucLiquid1_I2C_address; UCHAR ucLiquid2_I2C_address; UCHAR ucLiquid_I2C_Line; UCHAR ucVr_I2C_address; UCHAR ucVr_I2C_Line; UCHAR ucPlx_I2C_address; UCHAR ucPlx_I2C_Line; USHORT usTemperatureLimitTedge; } ATOM_Vega10_PowerTune_Table_V2; typedef struct _ATOM_Vega10_PowerTune_Table_V3 { UCHAR ucRevId; USHORT usSocketPowerLimit; USHORT usBatteryPowerLimit; USHORT usSmallPowerLimit; USHORT usTdcLimit; USHORT usEdcLimit; USHORT usSoftwareShutdownTemp; USHORT usTemperatureLimitHotSpot; USHORT usTemperatureLimitLiquid1; USHORT usTemperatureLimitLiquid2; USHORT usTemperatureLimitHBM; USHORT usTemperatureLimitVrSoc; USHORT usTemperatureLimitVrMem; USHORT usTemperatureLimitPlx; USHORT usLoadLineResistance; UCHAR ucLiquid1_I2C_address; UCHAR ucLiquid2_I2C_address; UCHAR ucLiquid_I2C_Line; UCHAR ucVr_I2C_address; UCHAR ucVr_I2C_Line; UCHAR ucPlx_I2C_address; UCHAR ucPlx_I2C_Line; USHORT usTemperatureLimitTedge; USHORT usBoostStartTemperature; USHORT usBoostStopTemperature; ULONG ulBoostClock; ULONG Reserved[2]; } ATOM_Vega10_PowerTune_Table_V3; typedef struct _ATOM_Vega10_Hard_Limit_Record { ULONG ulSOCCLKLimit; ULONG ulGFXCLKLimit; ULONG ulMCLKLimit; USHORT usVddcLimit; USHORT usVddciLimit; USHORT usVddMemLimit; } ATOM_Vega10_Hard_Limit_Record; typedef struct _ATOM_Vega10_Hard_Limit_Table { UCHAR ucRevId; UCHAR ucNumEntries; ATOM_Vega10_Hard_Limit_Record entries[1]; } ATOM_Vega10_Hard_Limit_Table; typedef struct _Vega10_PPTable_Generic_SubTable_Header { UCHAR ucRevId; } Vega10_PPTable_Generic_SubTable_Header; #pragma pack(pop) #endif