| /* |
| * 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_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 |