diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0051-drm-amd-powerplay-Move-smu7-.h-from-amdgpu-to-powerp.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0051-drm-amd-powerplay-Move-smu7-.h-from-amdgpu-to-powerp.patch | 2032 |
1 files changed, 2032 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0051-drm-amd-powerplay-Move-smu7-.h-from-amdgpu-to-powerp.patch b/common/recipes-kernel/linux/files/0051-drm-amd-powerplay-Move-smu7-.h-from-amdgpu-to-powerp.patch new file mode 100644 index 00000000..0093b50c --- /dev/null +++ b/common/recipes-kernel/linux/files/0051-drm-amd-powerplay-Move-smu7-.h-from-amdgpu-to-powerp.patch @@ -0,0 +1,2032 @@ +From 50e39063e1b2f2e35a42ef1a7e509aca83003f0a Mon Sep 17 00:00:00 2001 +From: yanyang1 <young.yang@amd.com> +Date: Wed, 19 Aug 2015 12:22:34 +0800 +Subject: [PATCH 0051/1110] drm/amd/powerplay: Move smu7*.h from amdgpu to + powerplay. + +Move smu7.h, smu7_discrete.h and smu7_fusion.h from amdgpu to powerplay. + +Reviewed-by: Alex Deucher <alexander.deucher@amd.com> +Signed-off-by: yanyang1 <young.yang@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/smu7.h | 170 ------- + drivers/gpu/drm/amd/amdgpu/smu7_discrete.h | 514 ---------------------- + drivers/gpu/drm/amd/amdgpu/smu7_fusion.h | 300 ------------- + drivers/gpu/drm/amd/powerplay/inc/smu7.h | 170 +++++++ + drivers/gpu/drm/amd/powerplay/inc/smu7_discrete.h | 514 ++++++++++++++++++++++ + drivers/gpu/drm/amd/powerplay/inc/smu7_fusion.h | 300 +++++++++++++ + 6 files changed, 984 insertions(+), 984 deletions(-) + delete mode 100644 drivers/gpu/drm/amd/amdgpu/smu7.h + delete mode 100644 drivers/gpu/drm/amd/amdgpu/smu7_discrete.h + delete mode 100644 drivers/gpu/drm/amd/amdgpu/smu7_fusion.h + create mode 100644 drivers/gpu/drm/amd/powerplay/inc/smu7.h + create mode 100644 drivers/gpu/drm/amd/powerplay/inc/smu7_discrete.h + create mode 100644 drivers/gpu/drm/amd/powerplay/inc/smu7_fusion.h + +diff --git a/drivers/gpu/drm/amd/amdgpu/smu7.h b/drivers/gpu/drm/amd/amdgpu/smu7.h +deleted file mode 100644 +index 75a380a..0000000 +--- a/drivers/gpu/drm/amd/amdgpu/smu7.h ++++ /dev/null +@@ -1,170 +0,0 @@ +-/* +- * Copyright 2013 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 SMU7_H +-#define SMU7_H +- +-#pragma pack(push, 1) +- +-#define SMU7_CONTEXT_ID_SMC 1 +-#define SMU7_CONTEXT_ID_VBIOS 2 +- +- +-#define SMU7_CONTEXT_ID_SMC 1 +-#define SMU7_CONTEXT_ID_VBIOS 2 +- +-#define SMU7_MAX_LEVELS_VDDC 8 +-#define SMU7_MAX_LEVELS_VDDCI 4 +-#define SMU7_MAX_LEVELS_MVDD 4 +-#define SMU7_MAX_LEVELS_VDDNB 8 +- +-#define SMU7_MAX_LEVELS_GRAPHICS SMU__NUM_SCLK_DPM_STATE // SCLK + SQ DPM + ULV +-#define SMU7_MAX_LEVELS_MEMORY SMU__NUM_MCLK_DPM_LEVELS // MCLK Levels DPM +-#define SMU7_MAX_LEVELS_GIO SMU__NUM_LCLK_DPM_LEVELS // LCLK Levels +-#define SMU7_MAX_LEVELS_LINK SMU__NUM_PCIE_DPM_LEVELS // PCIe speed and number of lanes. +-#define SMU7_MAX_LEVELS_UVD 8 // VCLK/DCLK levels for UVD. +-#define SMU7_MAX_LEVELS_VCE 8 // ECLK levels for VCE. +-#define SMU7_MAX_LEVELS_ACP 8 // ACLK levels for ACP. +-#define SMU7_MAX_LEVELS_SAMU 8 // SAMCLK levels for SAMU. +-#define SMU7_MAX_ENTRIES_SMIO 32 // Number of entries in SMIO table. +- +-#define DPM_NO_LIMIT 0 +-#define DPM_NO_UP 1 +-#define DPM_GO_DOWN 2 +-#define DPM_GO_UP 3 +- +-#define SMU7_FIRST_DPM_GRAPHICS_LEVEL 0 +-#define SMU7_FIRST_DPM_MEMORY_LEVEL 0 +- +-#define GPIO_CLAMP_MODE_VRHOT 1 +-#define GPIO_CLAMP_MODE_THERM 2 +-#define GPIO_CLAMP_MODE_DC 4 +- +-#define SCRATCH_B_TARG_PCIE_INDEX_SHIFT 0 +-#define SCRATCH_B_TARG_PCIE_INDEX_MASK (0x7<<SCRATCH_B_TARG_PCIE_INDEX_SHIFT) +-#define SCRATCH_B_CURR_PCIE_INDEX_SHIFT 3 +-#define SCRATCH_B_CURR_PCIE_INDEX_MASK (0x7<<SCRATCH_B_CURR_PCIE_INDEX_SHIFT) +-#define SCRATCH_B_TARG_UVD_INDEX_SHIFT 6 +-#define SCRATCH_B_TARG_UVD_INDEX_MASK (0x7<<SCRATCH_B_TARG_UVD_INDEX_SHIFT) +-#define SCRATCH_B_CURR_UVD_INDEX_SHIFT 9 +-#define SCRATCH_B_CURR_UVD_INDEX_MASK (0x7<<SCRATCH_B_CURR_UVD_INDEX_SHIFT) +-#define SCRATCH_B_TARG_VCE_INDEX_SHIFT 12 +-#define SCRATCH_B_TARG_VCE_INDEX_MASK (0x7<<SCRATCH_B_TARG_VCE_INDEX_SHIFT) +-#define SCRATCH_B_CURR_VCE_INDEX_SHIFT 15 +-#define SCRATCH_B_CURR_VCE_INDEX_MASK (0x7<<SCRATCH_B_CURR_VCE_INDEX_SHIFT) +-#define SCRATCH_B_TARG_ACP_INDEX_SHIFT 18 +-#define SCRATCH_B_TARG_ACP_INDEX_MASK (0x7<<SCRATCH_B_TARG_ACP_INDEX_SHIFT) +-#define SCRATCH_B_CURR_ACP_INDEX_SHIFT 21 +-#define SCRATCH_B_CURR_ACP_INDEX_MASK (0x7<<SCRATCH_B_CURR_ACP_INDEX_SHIFT) +-#define SCRATCH_B_TARG_SAMU_INDEX_SHIFT 24 +-#define SCRATCH_B_TARG_SAMU_INDEX_MASK (0x7<<SCRATCH_B_TARG_SAMU_INDEX_SHIFT) +-#define SCRATCH_B_CURR_SAMU_INDEX_SHIFT 27 +-#define SCRATCH_B_CURR_SAMU_INDEX_MASK (0x7<<SCRATCH_B_CURR_SAMU_INDEX_SHIFT) +- +- +-struct SMU7_PIDController +-{ +- uint32_t Ki; +- int32_t LFWindupUL; +- int32_t LFWindupLL; +- uint32_t StatePrecision; +- uint32_t LfPrecision; +- uint32_t LfOffset; +- uint32_t MaxState; +- uint32_t MaxLfFraction; +- uint32_t StateShift; +-}; +- +-typedef struct SMU7_PIDController SMU7_PIDController; +- +-// ------------------------------------------------------------------------------------------------------------------------- +-#define SMU7_MAX_PCIE_LINK_SPEEDS 3 /* 0:Gen1 1:Gen2 2:Gen3 */ +- +-#define SMU7_SCLK_DPM_CONFIG_MASK 0x01 +-#define SMU7_VOLTAGE_CONTROLLER_CONFIG_MASK 0x02 +-#define SMU7_THERMAL_CONTROLLER_CONFIG_MASK 0x04 +-#define SMU7_MCLK_DPM_CONFIG_MASK 0x08 +-#define SMU7_UVD_DPM_CONFIG_MASK 0x10 +-#define SMU7_VCE_DPM_CONFIG_MASK 0x20 +-#define SMU7_ACP_DPM_CONFIG_MASK 0x40 +-#define SMU7_SAMU_DPM_CONFIG_MASK 0x80 +-#define SMU7_PCIEGEN_DPM_CONFIG_MASK 0x100 +- +-#define SMU7_ACP_MCLK_HANDSHAKE_DISABLE 0x00000001 +-#define SMU7_ACP_SCLK_HANDSHAKE_DISABLE 0x00000002 +-#define SMU7_UVD_MCLK_HANDSHAKE_DISABLE 0x00000100 +-#define SMU7_UVD_SCLK_HANDSHAKE_DISABLE 0x00000200 +-#define SMU7_VCE_MCLK_HANDSHAKE_DISABLE 0x00010000 +-#define SMU7_VCE_SCLK_HANDSHAKE_DISABLE 0x00020000 +- +-struct SMU7_Firmware_Header +-{ +- uint32_t Digest[5]; +- uint32_t Version; +- uint32_t HeaderSize; +- uint32_t Flags; +- uint32_t EntryPoint; +- uint32_t CodeSize; +- uint32_t ImageSize; +- +- uint32_t Rtos; +- uint32_t SoftRegisters; +- uint32_t DpmTable; +- uint32_t FanTable; +- uint32_t CacConfigTable; +- uint32_t CacStatusTable; +- +- uint32_t mcRegisterTable; +- +- uint32_t mcArbDramTimingTable; +- +- uint32_t PmFuseTable; +- uint32_t Globals; +- uint32_t Reserved[42]; +- uint32_t Signature; +-}; +- +-typedef struct SMU7_Firmware_Header SMU7_Firmware_Header; +- +-#define SMU7_FIRMWARE_HEADER_LOCATION 0x20000 +- +-enum DisplayConfig { +- PowerDown = 1, +- DP54x4, +- DP54x2, +- DP54x1, +- DP27x4, +- DP27x2, +- DP27x1, +- HDMI297, +- HDMI162, +- LVDS, +- DP324x4, +- DP324x2, +- DP324x1 +-}; +- +-#pragma pack(pop) +- +-#endif +- +diff --git a/drivers/gpu/drm/amd/amdgpu/smu7_discrete.h b/drivers/gpu/drm/amd/amdgpu/smu7_discrete.h +deleted file mode 100644 +index 0b0b404..0000000 +--- a/drivers/gpu/drm/amd/amdgpu/smu7_discrete.h ++++ /dev/null +@@ -1,514 +0,0 @@ +-/* +- * Copyright 2013 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 SMU7_DISCRETE_H +-#define SMU7_DISCRETE_H +- +-#include "smu7.h" +- +-#pragma pack(push, 1) +- +-#define SMU7_DTE_ITERATIONS 5 +-#define SMU7_DTE_SOURCES 3 +-#define SMU7_DTE_SINKS 1 +-#define SMU7_NUM_CPU_TES 0 +-#define SMU7_NUM_GPU_TES 1 +-#define SMU7_NUM_NON_TES 2 +- +-struct SMU7_SoftRegisters +-{ +- uint32_t RefClockFrequency; +- uint32_t PmTimerP; +- uint32_t FeatureEnables; +- uint32_t PreVBlankGap; +- uint32_t VBlankTimeout; +- uint32_t TrainTimeGap; +- +- uint32_t MvddSwitchTime; +- uint32_t LongestAcpiTrainTime; +- uint32_t AcpiDelay; +- uint32_t G5TrainTime; +- uint32_t DelayMpllPwron; +- uint32_t VoltageChangeTimeout; +- uint32_t HandshakeDisables; +- +- uint8_t DisplayPhy1Config; +- uint8_t DisplayPhy2Config; +- uint8_t DisplayPhy3Config; +- uint8_t DisplayPhy4Config; +- +- uint8_t DisplayPhy5Config; +- uint8_t DisplayPhy6Config; +- uint8_t DisplayPhy7Config; +- uint8_t DisplayPhy8Config; +- +- uint32_t AverageGraphicsA; +- uint32_t AverageMemoryA; +- uint32_t AverageGioA; +- +- uint8_t SClkDpmEnabledLevels; +- uint8_t MClkDpmEnabledLevels; +- uint8_t LClkDpmEnabledLevels; +- uint8_t PCIeDpmEnabledLevels; +- +- uint8_t UVDDpmEnabledLevels; +- uint8_t SAMUDpmEnabledLevels; +- uint8_t ACPDpmEnabledLevels; +- uint8_t VCEDpmEnabledLevels; +- +- uint32_t DRAM_LOG_ADDR_H; +- uint32_t DRAM_LOG_ADDR_L; +- uint32_t DRAM_LOG_PHY_ADDR_H; +- uint32_t DRAM_LOG_PHY_ADDR_L; +- uint32_t DRAM_LOG_BUFF_SIZE; +- uint32_t UlvEnterC; +- uint32_t UlvTime; +- uint32_t Reserved[3]; +- +-}; +- +-typedef struct SMU7_SoftRegisters SMU7_SoftRegisters; +- +-struct SMU7_Discrete_VoltageLevel +-{ +- uint16_t Voltage; +- uint16_t StdVoltageHiSidd; +- uint16_t StdVoltageLoSidd; +- uint8_t Smio; +- uint8_t padding; +-}; +- +-typedef struct SMU7_Discrete_VoltageLevel SMU7_Discrete_VoltageLevel; +- +-struct SMU7_Discrete_GraphicsLevel +-{ +- uint32_t Flags; +- uint32_t MinVddc; +- uint32_t MinVddcPhases; +- +- uint32_t SclkFrequency; +- +- uint8_t padding1[2]; +- uint16_t ActivityLevel; +- +- uint32_t CgSpllFuncCntl3; +- uint32_t CgSpllFuncCntl4; +- uint32_t SpllSpreadSpectrum; +- uint32_t SpllSpreadSpectrum2; +- uint32_t CcPwrDynRm; +- uint32_t CcPwrDynRm1; +- uint8_t SclkDid; +- uint8_t DisplayWatermark; +- uint8_t EnabledForActivity; +- uint8_t EnabledForThrottle; +- uint8_t UpH; +- uint8_t DownH; +- uint8_t VoltageDownH; +- uint8_t PowerThrottle; +- uint8_t DeepSleepDivId; +- uint8_t padding[3]; +-}; +- +-typedef struct SMU7_Discrete_GraphicsLevel SMU7_Discrete_GraphicsLevel; +- +-struct SMU7_Discrete_ACPILevel +-{ +- uint32_t Flags; +- uint32_t MinVddc; +- uint32_t MinVddcPhases; +- uint32_t SclkFrequency; +- uint8_t SclkDid; +- uint8_t DisplayWatermark; +- uint8_t DeepSleepDivId; +- uint8_t padding; +- uint32_t CgSpllFuncCntl; +- uint32_t CgSpllFuncCntl2; +- uint32_t CgSpllFuncCntl3; +- uint32_t CgSpllFuncCntl4; +- uint32_t SpllSpreadSpectrum; +- uint32_t SpllSpreadSpectrum2; +- uint32_t CcPwrDynRm; +- uint32_t CcPwrDynRm1; +-}; +- +-typedef struct SMU7_Discrete_ACPILevel SMU7_Discrete_ACPILevel; +- +-struct SMU7_Discrete_Ulv +-{ +- uint32_t CcPwrDynRm; +- uint32_t CcPwrDynRm1; +- uint16_t VddcOffset; +- uint8_t VddcOffsetVid; +- uint8_t VddcPhase; +- uint32_t Reserved; +-}; +- +-typedef struct SMU7_Discrete_Ulv SMU7_Discrete_Ulv; +- +-struct SMU7_Discrete_MemoryLevel +-{ +- uint32_t MinVddc; +- uint32_t MinVddcPhases; +- uint32_t MinVddci; +- uint32_t MinMvdd; +- +- uint32_t MclkFrequency; +- +- uint8_t EdcReadEnable; +- uint8_t EdcWriteEnable; +- uint8_t RttEnable; +- uint8_t StutterEnable; +- +- uint8_t StrobeEnable; +- uint8_t StrobeRatio; +- uint8_t EnabledForThrottle; +- uint8_t EnabledForActivity; +- +- uint8_t UpH; +- uint8_t DownH; +- uint8_t VoltageDownH; +- uint8_t padding; +- +- uint16_t ActivityLevel; +- uint8_t DisplayWatermark; +- uint8_t padding1; +- +- uint32_t MpllFuncCntl; +- uint32_t MpllFuncCntl_1; +- uint32_t MpllFuncCntl_2; +- uint32_t MpllAdFuncCntl; +- uint32_t MpllDqFuncCntl; +- uint32_t MclkPwrmgtCntl; +- uint32_t DllCntl; +- uint32_t MpllSs1; +- uint32_t MpllSs2; +-}; +- +-typedef struct SMU7_Discrete_MemoryLevel SMU7_Discrete_MemoryLevel; +- +-struct SMU7_Discrete_LinkLevel +-{ +- uint8_t PcieGenSpeed; +- uint8_t PcieLaneCount; +- uint8_t EnabledForActivity; +- uint8_t Padding; +- uint32_t DownT; +- uint32_t UpT; +- uint32_t Reserved; +-}; +- +-typedef struct SMU7_Discrete_LinkLevel SMU7_Discrete_LinkLevel; +- +- +-struct SMU7_Discrete_MCArbDramTimingTableEntry +-{ +- uint32_t McArbDramTiming; +- uint32_t McArbDramTiming2; +- uint8_t McArbBurstTime; +- uint8_t padding[3]; +-}; +- +-typedef struct SMU7_Discrete_MCArbDramTimingTableEntry SMU7_Discrete_MCArbDramTimingTableEntry; +- +-struct SMU7_Discrete_MCArbDramTimingTable +-{ +- SMU7_Discrete_MCArbDramTimingTableEntry entries[SMU__NUM_SCLK_DPM_STATE][SMU__NUM_MCLK_DPM_LEVELS]; +-}; +- +-typedef struct SMU7_Discrete_MCArbDramTimingTable SMU7_Discrete_MCArbDramTimingTable; +- +-struct SMU7_Discrete_UvdLevel +-{ +- uint32_t VclkFrequency; +- uint32_t DclkFrequency; +- uint16_t MinVddc; +- uint8_t MinVddcPhases; +- uint8_t VclkDivider; +- uint8_t DclkDivider; +- uint8_t padding[3]; +-}; +- +-typedef struct SMU7_Discrete_UvdLevel SMU7_Discrete_UvdLevel; +- +-struct SMU7_Discrete_ExtClkLevel +-{ +- uint32_t Frequency; +- uint16_t MinVoltage; +- uint8_t MinPhases; +- uint8_t Divider; +-}; +- +-typedef struct SMU7_Discrete_ExtClkLevel SMU7_Discrete_ExtClkLevel; +- +-struct SMU7_Discrete_StateInfo +-{ +- uint32_t SclkFrequency; +- uint32_t MclkFrequency; +- uint32_t VclkFrequency; +- uint32_t DclkFrequency; +- uint32_t SamclkFrequency; +- uint32_t AclkFrequency; +- uint32_t EclkFrequency; +- uint16_t MvddVoltage; +- uint16_t padding16; +- uint8_t DisplayWatermark; +- uint8_t McArbIndex; +- uint8_t McRegIndex; +- uint8_t SeqIndex; +- uint8_t SclkDid; +- int8_t SclkIndex; +- int8_t MclkIndex; +- uint8_t PCIeGen; +- +-}; +- +-typedef struct SMU7_Discrete_StateInfo SMU7_Discrete_StateInfo; +- +- +-struct SMU7_Discrete_DpmTable +-{ +- SMU7_PIDController GraphicsPIDController; +- SMU7_PIDController MemoryPIDController; +- SMU7_PIDController LinkPIDController; +- +- uint32_t SystemFlags; +- +- +- uint32_t SmioMaskVddcVid; +- uint32_t SmioMaskVddcPhase; +- uint32_t SmioMaskVddciVid; +- uint32_t SmioMaskMvddVid; +- +- uint32_t VddcLevelCount; +- uint32_t VddciLevelCount; +- uint32_t MvddLevelCount; +- +- SMU7_Discrete_VoltageLevel VddcLevel [SMU7_MAX_LEVELS_VDDC]; +-// SMU7_Discrete_VoltageLevel VddcStandardReference [SMU7_MAX_LEVELS_VDDC]; +- SMU7_Discrete_VoltageLevel VddciLevel [SMU7_MAX_LEVELS_VDDCI]; +- SMU7_Discrete_VoltageLevel MvddLevel [SMU7_MAX_LEVELS_MVDD]; +- +- uint8_t GraphicsDpmLevelCount; +- uint8_t MemoryDpmLevelCount; +- uint8_t LinkLevelCount; +- uint8_t UvdLevelCount; +- uint8_t VceLevelCount; +- uint8_t AcpLevelCount; +- uint8_t SamuLevelCount; +- uint8_t MasterDeepSleepControl; +- uint32_t Reserved[5]; +-// uint32_t SamuDefaultLevel; +- +- SMU7_Discrete_GraphicsLevel GraphicsLevel [SMU7_MAX_LEVELS_GRAPHICS]; +- SMU7_Discrete_MemoryLevel MemoryACPILevel; +- SMU7_Discrete_MemoryLevel MemoryLevel [SMU7_MAX_LEVELS_MEMORY]; +- SMU7_Discrete_LinkLevel LinkLevel [SMU7_MAX_LEVELS_LINK]; +- SMU7_Discrete_ACPILevel ACPILevel; +- SMU7_Discrete_UvdLevel UvdLevel [SMU7_MAX_LEVELS_UVD]; +- SMU7_Discrete_ExtClkLevel VceLevel [SMU7_MAX_LEVELS_VCE]; +- SMU7_Discrete_ExtClkLevel AcpLevel [SMU7_MAX_LEVELS_ACP]; +- SMU7_Discrete_ExtClkLevel SamuLevel [SMU7_MAX_LEVELS_SAMU]; +- SMU7_Discrete_Ulv Ulv; +- +- uint32_t SclkStepSize; +- uint32_t Smio [SMU7_MAX_ENTRIES_SMIO]; +- +- uint8_t UvdBootLevel; +- uint8_t VceBootLevel; +- uint8_t AcpBootLevel; +- uint8_t SamuBootLevel; +- +- uint8_t UVDInterval; +- uint8_t VCEInterval; +- uint8_t ACPInterval; +- uint8_t SAMUInterval; +- +- uint8_t GraphicsBootLevel; +- uint8_t GraphicsVoltageChangeEnable; +- uint8_t GraphicsThermThrottleEnable; +- uint8_t GraphicsInterval; +- +- uint8_t VoltageInterval; +- uint8_t ThermalInterval; +- uint16_t TemperatureLimitHigh; +- +- uint16_t TemperatureLimitLow; +- uint8_t MemoryBootLevel; +- uint8_t MemoryVoltageChangeEnable; +- +- uint8_t MemoryInterval; +- uint8_t MemoryThermThrottleEnable; +- uint16_t VddcVddciDelta; +- +- uint16_t VoltageResponseTime; +- uint16_t PhaseResponseTime; +- +- uint8_t PCIeBootLinkLevel; +- uint8_t PCIeGenInterval; +- uint8_t DTEInterval; +- uint8_t DTEMode; +- +- uint8_t SVI2Enable; +- uint8_t VRHotGpio; +- uint8_t AcDcGpio; +- uint8_t ThermGpio; +- +- uint16_t PPM_PkgPwrLimit; +- uint16_t PPM_TemperatureLimit; +- +- uint16_t DefaultTdp; +- uint16_t TargetTdp; +- +- uint16_t FpsHighT; +- uint16_t FpsLowT; +- +- uint16_t BAPMTI_R [SMU7_DTE_ITERATIONS][SMU7_DTE_SOURCES][SMU7_DTE_SINKS]; +- uint16_t BAPMTI_RC [SMU7_DTE_ITERATIONS][SMU7_DTE_SOURCES][SMU7_DTE_SINKS]; +- +- uint8_t DTEAmbientTempBase; +- uint8_t DTETjOffset; +- uint8_t GpuTjMax; +- uint8_t GpuTjHyst; +- +- uint16_t BootVddc; +- uint16_t BootVddci; +- +- uint16_t BootMVdd; +- uint16_t padding; +- +- uint32_t BAPM_TEMP_GRADIENT; +- +- uint32_t LowSclkInterruptT; +-}; +- +-typedef struct SMU7_Discrete_DpmTable SMU7_Discrete_DpmTable; +- +-#define SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE 16 +-#define SMU7_DISCRETE_MC_REGISTER_ARRAY_SET_COUNT SMU7_MAX_LEVELS_MEMORY +- +-struct SMU7_Discrete_MCRegisterAddress +-{ +- uint16_t s0; +- uint16_t s1; +-}; +- +-typedef struct SMU7_Discrete_MCRegisterAddress SMU7_Discrete_MCRegisterAddress; +- +-struct SMU7_Discrete_MCRegisterSet +-{ +- uint32_t value[SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE]; +-}; +- +-typedef struct SMU7_Discrete_MCRegisterSet SMU7_Discrete_MCRegisterSet; +- +-struct SMU7_Discrete_MCRegisters +-{ +- uint8_t last; +- uint8_t reserved[3]; +- SMU7_Discrete_MCRegisterAddress address[SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE]; +- SMU7_Discrete_MCRegisterSet data[SMU7_DISCRETE_MC_REGISTER_ARRAY_SET_COUNT]; +-}; +- +-typedef struct SMU7_Discrete_MCRegisters SMU7_Discrete_MCRegisters; +- +-struct SMU7_Discrete_FanTable +-{ +- uint16_t FdoMode; +- int16_t TempMin; +- int16_t TempMed; +- int16_t TempMax; +- int16_t Slope1; +- int16_t Slope2; +- int16_t FdoMin; +- int16_t HystUp; +- int16_t HystDown; +- int16_t HystSlope; +- int16_t TempRespLim; +- int16_t TempCurr; +- int16_t SlopeCurr; +- int16_t PwmCurr; +- uint32_t RefreshPeriod; +- int16_t FdoMax; +- uint8_t TempSrc; +- int8_t Padding; +-}; +- +-typedef struct SMU7_Discrete_FanTable SMU7_Discrete_FanTable; +- +- +-struct SMU7_Discrete_PmFuses { +- // dw0-dw1 +- uint8_t BapmVddCVidHiSidd[8]; +- +- // dw2-dw3 +- uint8_t BapmVddCVidLoSidd[8]; +- +- // dw4-dw5 +- uint8_t VddCVid[8]; +- +- // dw6 +- uint8_t SviLoadLineEn; +- uint8_t SviLoadLineVddC; +- uint8_t SviLoadLineTrimVddC; +- uint8_t SviLoadLineOffsetVddC; +- +- // dw7 +- uint16_t TDC_VDDC_PkgLimit; +- uint8_t TDC_VDDC_ThrottleReleaseLimitPerc; +- uint8_t TDC_MAWt; +- +- // dw8 +- uint8_t TdcWaterfallCtl; +- uint8_t LPMLTemperatureMin; +- uint8_t LPMLTemperatureMax; +- uint8_t Reserved; +- +- // dw9-dw10 +- uint8_t BapmVddCVidHiSidd2[8]; +- +- // dw11-dw12 +- int16_t FuzzyFan_ErrorSetDelta; +- int16_t FuzzyFan_ErrorRateSetDelta; +- int16_t FuzzyFan_PwmSetDelta; +- uint16_t CalcMeasPowerBlend; +- +- // dw13-dw16 +- uint8_t GnbLPML[16]; +- +- // dw17 +- uint8_t GnbLPMLMaxVid; +- uint8_t GnbLPMLMinVid; +- uint8_t Reserved1[2]; +- +- // dw18 +- uint16_t BapmVddCBaseLeakageHiSidd; +- uint16_t BapmVddCBaseLeakageLoSidd; +-}; +- +-typedef struct SMU7_Discrete_PmFuses SMU7_Discrete_PmFuses; +- +- +-#pragma pack(pop) +- +-#endif +- +diff --git a/drivers/gpu/drm/amd/amdgpu/smu7_fusion.h b/drivers/gpu/drm/amd/amdgpu/smu7_fusion.h +deleted file mode 100644 +index 78ada9f..0000000 +--- a/drivers/gpu/drm/amd/amdgpu/smu7_fusion.h ++++ /dev/null +@@ -1,300 +0,0 @@ +-/* +- * Copyright 2013 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 SMU7_FUSION_H +-#define SMU7_FUSION_H +- +-#include "smu7.h" +- +-#pragma pack(push, 1) +- +-#define SMU7_DTE_ITERATIONS 5 +-#define SMU7_DTE_SOURCES 5 +-#define SMU7_DTE_SINKS 3 +-#define SMU7_NUM_CPU_TES 2 +-#define SMU7_NUM_GPU_TES 1 +-#define SMU7_NUM_NON_TES 2 +- +-// All 'soft registers' should be uint32_t. +-struct SMU7_SoftRegisters +-{ +- uint32_t RefClockFrequency; +- uint32_t PmTimerP; +- uint32_t FeatureEnables; +- uint32_t HandshakeDisables; +- +- uint8_t DisplayPhy1Config; +- uint8_t DisplayPhy2Config; +- uint8_t DisplayPhy3Config; +- uint8_t DisplayPhy4Config; +- +- uint8_t DisplayPhy5Config; +- uint8_t DisplayPhy6Config; +- uint8_t DisplayPhy7Config; +- uint8_t DisplayPhy8Config; +- +- uint32_t AverageGraphicsA; +- uint32_t AverageMemoryA; +- uint32_t AverageGioA; +- +- uint8_t SClkDpmEnabledLevels; +- uint8_t MClkDpmEnabledLevels; +- uint8_t LClkDpmEnabledLevels; +- uint8_t PCIeDpmEnabledLevels; +- +- uint8_t UVDDpmEnabledLevels; +- uint8_t SAMUDpmEnabledLevels; +- uint8_t ACPDpmEnabledLevels; +- uint8_t VCEDpmEnabledLevels; +- +- uint32_t DRAM_LOG_ADDR_H; +- uint32_t DRAM_LOG_ADDR_L; +- uint32_t DRAM_LOG_PHY_ADDR_H; +- uint32_t DRAM_LOG_PHY_ADDR_L; +- uint32_t DRAM_LOG_BUFF_SIZE; +- uint32_t UlvEnterC; +- uint32_t UlvTime; +- uint32_t Reserved[3]; +- +-}; +- +-typedef struct SMU7_SoftRegisters SMU7_SoftRegisters; +- +-struct SMU7_Fusion_GraphicsLevel +-{ +- uint32_t MinVddNb; +- +- uint32_t SclkFrequency; +- +- uint8_t Vid; +- uint8_t VidOffset; +- uint16_t AT; +- +- uint8_t PowerThrottle; +- uint8_t GnbSlow; +- uint8_t ForceNbPs1; +- uint8_t SclkDid; +- +- uint8_t DisplayWatermark; +- uint8_t EnabledForActivity; +- uint8_t EnabledForThrottle; +- uint8_t UpH; +- +- uint8_t DownH; +- uint8_t VoltageDownH; +- uint8_t DeepSleepDivId; +- +- uint8_t ClkBypassCntl; +- +- uint32_t reserved; +-}; +- +-typedef struct SMU7_Fusion_GraphicsLevel SMU7_Fusion_GraphicsLevel; +- +-struct SMU7_Fusion_GIOLevel +-{ +- uint8_t EnabledForActivity; +- uint8_t LclkDid; +- uint8_t Vid; +- uint8_t VoltageDownH; +- +- uint32_t MinVddNb; +- +- uint16_t ResidencyCounter; +- uint8_t UpH; +- uint8_t DownH; +- +- uint32_t LclkFrequency; +- +- uint8_t ActivityLevel; +- uint8_t EnabledForThrottle; +- +- uint8_t ClkBypassCntl; +- +- uint8_t padding; +-}; +- +-typedef struct SMU7_Fusion_GIOLevel SMU7_Fusion_GIOLevel; +- +-// UVD VCLK/DCLK state (level) definition. +-struct SMU7_Fusion_UvdLevel +-{ +- uint32_t VclkFrequency; +- uint32_t DclkFrequency; +- uint16_t MinVddNb; +- uint8_t VclkDivider; +- uint8_t DclkDivider; +- +- uint8_t VClkBypassCntl; +- uint8_t DClkBypassCntl; +- +- uint8_t padding[2]; +- +-}; +- +-typedef struct SMU7_Fusion_UvdLevel SMU7_Fusion_UvdLevel; +- +-// Clocks for other external blocks (VCE, ACP, SAMU). +-struct SMU7_Fusion_ExtClkLevel +-{ +- uint32_t Frequency; +- uint16_t MinVoltage; +- uint8_t Divider; +- uint8_t ClkBypassCntl; +- +- uint32_t Reserved; +-}; +-typedef struct SMU7_Fusion_ExtClkLevel SMU7_Fusion_ExtClkLevel; +- +-struct SMU7_Fusion_ACPILevel +-{ +- uint32_t Flags; +- uint32_t MinVddNb; +- uint32_t SclkFrequency; +- uint8_t SclkDid; +- uint8_t GnbSlow; +- uint8_t ForceNbPs1; +- uint8_t DisplayWatermark; +- uint8_t DeepSleepDivId; +- uint8_t padding[3]; +-}; +- +-typedef struct SMU7_Fusion_ACPILevel SMU7_Fusion_ACPILevel; +- +-struct SMU7_Fusion_NbDpm +-{ +- uint8_t DpmXNbPsHi; +- uint8_t DpmXNbPsLo; +- uint8_t Dpm0PgNbPsHi; +- uint8_t Dpm0PgNbPsLo; +- uint8_t EnablePsi1; +- uint8_t SkipDPM0; +- uint8_t SkipPG; +- uint8_t Hysteresis; +- uint8_t EnableDpmPstatePoll; +- uint8_t padding[3]; +-}; +- +-typedef struct SMU7_Fusion_NbDpm SMU7_Fusion_NbDpm; +- +-struct SMU7_Fusion_StateInfo +-{ +- uint32_t SclkFrequency; +- uint32_t LclkFrequency; +- uint32_t VclkFrequency; +- uint32_t DclkFrequency; +- uint32_t SamclkFrequency; +- uint32_t AclkFrequency; +- uint32_t EclkFrequency; +- uint8_t DisplayWatermark; +- uint8_t McArbIndex; +- int8_t SclkIndex; +- int8_t MclkIndex; +-}; +- +-typedef struct SMU7_Fusion_StateInfo SMU7_Fusion_StateInfo; +- +-struct SMU7_Fusion_DpmTable +-{ +- uint32_t SystemFlags; +- +- SMU7_PIDController GraphicsPIDController; +- SMU7_PIDController GioPIDController; +- +- uint8_t GraphicsDpmLevelCount; +- uint8_t GIOLevelCount; +- uint8_t UvdLevelCount; +- uint8_t VceLevelCount; +- +- uint8_t AcpLevelCount; +- uint8_t SamuLevelCount; +- uint16_t FpsHighT; +- +- SMU7_Fusion_GraphicsLevel GraphicsLevel [SMU__NUM_SCLK_DPM_STATE]; +- SMU7_Fusion_ACPILevel ACPILevel; +- SMU7_Fusion_UvdLevel UvdLevel [SMU7_MAX_LEVELS_UVD]; +- SMU7_Fusion_ExtClkLevel VceLevel [SMU7_MAX_LEVELS_VCE]; +- SMU7_Fusion_ExtClkLevel AcpLevel [SMU7_MAX_LEVELS_ACP]; +- SMU7_Fusion_ExtClkLevel SamuLevel [SMU7_MAX_LEVELS_SAMU]; +- +- uint8_t UvdBootLevel; +- uint8_t VceBootLevel; +- uint8_t AcpBootLevel; +- uint8_t SamuBootLevel; +- uint8_t UVDInterval; +- uint8_t VCEInterval; +- uint8_t ACPInterval; +- uint8_t SAMUInterval; +- +- uint8_t GraphicsBootLevel; +- uint8_t GraphicsInterval; +- uint8_t GraphicsThermThrottleEnable; +- uint8_t GraphicsVoltageChangeEnable; +- +- uint8_t GraphicsClkSlowEnable; +- uint8_t GraphicsClkSlowDivider; +- uint16_t FpsLowT; +- +- uint32_t DisplayCac; +- uint32_t LowSclkInterruptT; +- +- uint32_t DRAM_LOG_ADDR_H; +- uint32_t DRAM_LOG_ADDR_L; +- uint32_t DRAM_LOG_PHY_ADDR_H; +- uint32_t DRAM_LOG_PHY_ADDR_L; +- uint32_t DRAM_LOG_BUFF_SIZE; +- +-}; +- +-struct SMU7_Fusion_GIODpmTable +-{ +- +- SMU7_Fusion_GIOLevel GIOLevel [SMU7_MAX_LEVELS_GIO]; +- +- SMU7_PIDController GioPIDController; +- +- uint32_t GIOLevelCount; +- +- uint8_t Enable; +- uint8_t GIOVoltageChangeEnable; +- uint8_t GIOBootLevel; +- uint8_t padding; +- uint8_t padding1[2]; +- uint8_t TargetState; +- uint8_t CurrenttState; +- uint8_t ThrottleOnHtc; +- uint8_t ThermThrottleStatus; +- uint8_t ThermThrottleTempSelect; +- uint8_t ThermThrottleEnable; +- uint16_t TemperatureLimitHigh; +- uint16_t TemperatureLimitLow; +- +-}; +- +-typedef struct SMU7_Fusion_DpmTable SMU7_Fusion_DpmTable; +-typedef struct SMU7_Fusion_GIODpmTable SMU7_Fusion_GIODpmTable; +- +-#pragma pack(pop) +- +-#endif +- +diff --git a/drivers/gpu/drm/amd/powerplay/inc/smu7.h b/drivers/gpu/drm/amd/powerplay/inc/smu7.h +new file mode 100644 +index 0000000..75a380a +--- /dev/null ++++ b/drivers/gpu/drm/amd/powerplay/inc/smu7.h +@@ -0,0 +1,170 @@ ++/* ++ * Copyright 2013 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 SMU7_H ++#define SMU7_H ++ ++#pragma pack(push, 1) ++ ++#define SMU7_CONTEXT_ID_SMC 1 ++#define SMU7_CONTEXT_ID_VBIOS 2 ++ ++ ++#define SMU7_CONTEXT_ID_SMC 1 ++#define SMU7_CONTEXT_ID_VBIOS 2 ++ ++#define SMU7_MAX_LEVELS_VDDC 8 ++#define SMU7_MAX_LEVELS_VDDCI 4 ++#define SMU7_MAX_LEVELS_MVDD 4 ++#define SMU7_MAX_LEVELS_VDDNB 8 ++ ++#define SMU7_MAX_LEVELS_GRAPHICS SMU__NUM_SCLK_DPM_STATE // SCLK + SQ DPM + ULV ++#define SMU7_MAX_LEVELS_MEMORY SMU__NUM_MCLK_DPM_LEVELS // MCLK Levels DPM ++#define SMU7_MAX_LEVELS_GIO SMU__NUM_LCLK_DPM_LEVELS // LCLK Levels ++#define SMU7_MAX_LEVELS_LINK SMU__NUM_PCIE_DPM_LEVELS // PCIe speed and number of lanes. ++#define SMU7_MAX_LEVELS_UVD 8 // VCLK/DCLK levels for UVD. ++#define SMU7_MAX_LEVELS_VCE 8 // ECLK levels for VCE. ++#define SMU7_MAX_LEVELS_ACP 8 // ACLK levels for ACP. ++#define SMU7_MAX_LEVELS_SAMU 8 // SAMCLK levels for SAMU. ++#define SMU7_MAX_ENTRIES_SMIO 32 // Number of entries in SMIO table. ++ ++#define DPM_NO_LIMIT 0 ++#define DPM_NO_UP 1 ++#define DPM_GO_DOWN 2 ++#define DPM_GO_UP 3 ++ ++#define SMU7_FIRST_DPM_GRAPHICS_LEVEL 0 ++#define SMU7_FIRST_DPM_MEMORY_LEVEL 0 ++ ++#define GPIO_CLAMP_MODE_VRHOT 1 ++#define GPIO_CLAMP_MODE_THERM 2 ++#define GPIO_CLAMP_MODE_DC 4 ++ ++#define SCRATCH_B_TARG_PCIE_INDEX_SHIFT 0 ++#define SCRATCH_B_TARG_PCIE_INDEX_MASK (0x7<<SCRATCH_B_TARG_PCIE_INDEX_SHIFT) ++#define SCRATCH_B_CURR_PCIE_INDEX_SHIFT 3 ++#define SCRATCH_B_CURR_PCIE_INDEX_MASK (0x7<<SCRATCH_B_CURR_PCIE_INDEX_SHIFT) ++#define SCRATCH_B_TARG_UVD_INDEX_SHIFT 6 ++#define SCRATCH_B_TARG_UVD_INDEX_MASK (0x7<<SCRATCH_B_TARG_UVD_INDEX_SHIFT) ++#define SCRATCH_B_CURR_UVD_INDEX_SHIFT 9 ++#define SCRATCH_B_CURR_UVD_INDEX_MASK (0x7<<SCRATCH_B_CURR_UVD_INDEX_SHIFT) ++#define SCRATCH_B_TARG_VCE_INDEX_SHIFT 12 ++#define SCRATCH_B_TARG_VCE_INDEX_MASK (0x7<<SCRATCH_B_TARG_VCE_INDEX_SHIFT) ++#define SCRATCH_B_CURR_VCE_INDEX_SHIFT 15 ++#define SCRATCH_B_CURR_VCE_INDEX_MASK (0x7<<SCRATCH_B_CURR_VCE_INDEX_SHIFT) ++#define SCRATCH_B_TARG_ACP_INDEX_SHIFT 18 ++#define SCRATCH_B_TARG_ACP_INDEX_MASK (0x7<<SCRATCH_B_TARG_ACP_INDEX_SHIFT) ++#define SCRATCH_B_CURR_ACP_INDEX_SHIFT 21 ++#define SCRATCH_B_CURR_ACP_INDEX_MASK (0x7<<SCRATCH_B_CURR_ACP_INDEX_SHIFT) ++#define SCRATCH_B_TARG_SAMU_INDEX_SHIFT 24 ++#define SCRATCH_B_TARG_SAMU_INDEX_MASK (0x7<<SCRATCH_B_TARG_SAMU_INDEX_SHIFT) ++#define SCRATCH_B_CURR_SAMU_INDEX_SHIFT 27 ++#define SCRATCH_B_CURR_SAMU_INDEX_MASK (0x7<<SCRATCH_B_CURR_SAMU_INDEX_SHIFT) ++ ++ ++struct SMU7_PIDController ++{ ++ uint32_t Ki; ++ int32_t LFWindupUL; ++ int32_t LFWindupLL; ++ uint32_t StatePrecision; ++ uint32_t LfPrecision; ++ uint32_t LfOffset; ++ uint32_t MaxState; ++ uint32_t MaxLfFraction; ++ uint32_t StateShift; ++}; ++ ++typedef struct SMU7_PIDController SMU7_PIDController; ++ ++// ------------------------------------------------------------------------------------------------------------------------- ++#define SMU7_MAX_PCIE_LINK_SPEEDS 3 /* 0:Gen1 1:Gen2 2:Gen3 */ ++ ++#define SMU7_SCLK_DPM_CONFIG_MASK 0x01 ++#define SMU7_VOLTAGE_CONTROLLER_CONFIG_MASK 0x02 ++#define SMU7_THERMAL_CONTROLLER_CONFIG_MASK 0x04 ++#define SMU7_MCLK_DPM_CONFIG_MASK 0x08 ++#define SMU7_UVD_DPM_CONFIG_MASK 0x10 ++#define SMU7_VCE_DPM_CONFIG_MASK 0x20 ++#define SMU7_ACP_DPM_CONFIG_MASK 0x40 ++#define SMU7_SAMU_DPM_CONFIG_MASK 0x80 ++#define SMU7_PCIEGEN_DPM_CONFIG_MASK 0x100 ++ ++#define SMU7_ACP_MCLK_HANDSHAKE_DISABLE 0x00000001 ++#define SMU7_ACP_SCLK_HANDSHAKE_DISABLE 0x00000002 ++#define SMU7_UVD_MCLK_HANDSHAKE_DISABLE 0x00000100 ++#define SMU7_UVD_SCLK_HANDSHAKE_DISABLE 0x00000200 ++#define SMU7_VCE_MCLK_HANDSHAKE_DISABLE 0x00010000 ++#define SMU7_VCE_SCLK_HANDSHAKE_DISABLE 0x00020000 ++ ++struct SMU7_Firmware_Header ++{ ++ uint32_t Digest[5]; ++ uint32_t Version; ++ uint32_t HeaderSize; ++ uint32_t Flags; ++ uint32_t EntryPoint; ++ uint32_t CodeSize; ++ uint32_t ImageSize; ++ ++ uint32_t Rtos; ++ uint32_t SoftRegisters; ++ uint32_t DpmTable; ++ uint32_t FanTable; ++ uint32_t CacConfigTable; ++ uint32_t CacStatusTable; ++ ++ uint32_t mcRegisterTable; ++ ++ uint32_t mcArbDramTimingTable; ++ ++ uint32_t PmFuseTable; ++ uint32_t Globals; ++ uint32_t Reserved[42]; ++ uint32_t Signature; ++}; ++ ++typedef struct SMU7_Firmware_Header SMU7_Firmware_Header; ++ ++#define SMU7_FIRMWARE_HEADER_LOCATION 0x20000 ++ ++enum DisplayConfig { ++ PowerDown = 1, ++ DP54x4, ++ DP54x2, ++ DP54x1, ++ DP27x4, ++ DP27x2, ++ DP27x1, ++ HDMI297, ++ HDMI162, ++ LVDS, ++ DP324x4, ++ DP324x2, ++ DP324x1 ++}; ++ ++#pragma pack(pop) ++ ++#endif ++ +diff --git a/drivers/gpu/drm/amd/powerplay/inc/smu7_discrete.h b/drivers/gpu/drm/amd/powerplay/inc/smu7_discrete.h +new file mode 100644 +index 0000000..0b0b404 +--- /dev/null ++++ b/drivers/gpu/drm/amd/powerplay/inc/smu7_discrete.h +@@ -0,0 +1,514 @@ ++/* ++ * Copyright 2013 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 SMU7_DISCRETE_H ++#define SMU7_DISCRETE_H ++ ++#include "smu7.h" ++ ++#pragma pack(push, 1) ++ ++#define SMU7_DTE_ITERATIONS 5 ++#define SMU7_DTE_SOURCES 3 ++#define SMU7_DTE_SINKS 1 ++#define SMU7_NUM_CPU_TES 0 ++#define SMU7_NUM_GPU_TES 1 ++#define SMU7_NUM_NON_TES 2 ++ ++struct SMU7_SoftRegisters ++{ ++ uint32_t RefClockFrequency; ++ uint32_t PmTimerP; ++ uint32_t FeatureEnables; ++ uint32_t PreVBlankGap; ++ uint32_t VBlankTimeout; ++ uint32_t TrainTimeGap; ++ ++ uint32_t MvddSwitchTime; ++ uint32_t LongestAcpiTrainTime; ++ uint32_t AcpiDelay; ++ uint32_t G5TrainTime; ++ uint32_t DelayMpllPwron; ++ uint32_t VoltageChangeTimeout; ++ uint32_t HandshakeDisables; ++ ++ uint8_t DisplayPhy1Config; ++ uint8_t DisplayPhy2Config; ++ uint8_t DisplayPhy3Config; ++ uint8_t DisplayPhy4Config; ++ ++ uint8_t DisplayPhy5Config; ++ uint8_t DisplayPhy6Config; ++ uint8_t DisplayPhy7Config; ++ uint8_t DisplayPhy8Config; ++ ++ uint32_t AverageGraphicsA; ++ uint32_t AverageMemoryA; ++ uint32_t AverageGioA; ++ ++ uint8_t SClkDpmEnabledLevels; ++ uint8_t MClkDpmEnabledLevels; ++ uint8_t LClkDpmEnabledLevels; ++ uint8_t PCIeDpmEnabledLevels; ++ ++ uint8_t UVDDpmEnabledLevels; ++ uint8_t SAMUDpmEnabledLevels; ++ uint8_t ACPDpmEnabledLevels; ++ uint8_t VCEDpmEnabledLevels; ++ ++ uint32_t DRAM_LOG_ADDR_H; ++ uint32_t DRAM_LOG_ADDR_L; ++ uint32_t DRAM_LOG_PHY_ADDR_H; ++ uint32_t DRAM_LOG_PHY_ADDR_L; ++ uint32_t DRAM_LOG_BUFF_SIZE; ++ uint32_t UlvEnterC; ++ uint32_t UlvTime; ++ uint32_t Reserved[3]; ++ ++}; ++ ++typedef struct SMU7_SoftRegisters SMU7_SoftRegisters; ++ ++struct SMU7_Discrete_VoltageLevel ++{ ++ uint16_t Voltage; ++ uint16_t StdVoltageHiSidd; ++ uint16_t StdVoltageLoSidd; ++ uint8_t Smio; ++ uint8_t padding; ++}; ++ ++typedef struct SMU7_Discrete_VoltageLevel SMU7_Discrete_VoltageLevel; ++ ++struct SMU7_Discrete_GraphicsLevel ++{ ++ uint32_t Flags; ++ uint32_t MinVddc; ++ uint32_t MinVddcPhases; ++ ++ uint32_t SclkFrequency; ++ ++ uint8_t padding1[2]; ++ uint16_t ActivityLevel; ++ ++ uint32_t CgSpllFuncCntl3; ++ uint32_t CgSpllFuncCntl4; ++ uint32_t SpllSpreadSpectrum; ++ uint32_t SpllSpreadSpectrum2; ++ uint32_t CcPwrDynRm; ++ uint32_t CcPwrDynRm1; ++ uint8_t SclkDid; ++ uint8_t DisplayWatermark; ++ uint8_t EnabledForActivity; ++ uint8_t EnabledForThrottle; ++ uint8_t UpH; ++ uint8_t DownH; ++ uint8_t VoltageDownH; ++ uint8_t PowerThrottle; ++ uint8_t DeepSleepDivId; ++ uint8_t padding[3]; ++}; ++ ++typedef struct SMU7_Discrete_GraphicsLevel SMU7_Discrete_GraphicsLevel; ++ ++struct SMU7_Discrete_ACPILevel ++{ ++ uint32_t Flags; ++ uint32_t MinVddc; ++ uint32_t MinVddcPhases; ++ uint32_t SclkFrequency; ++ uint8_t SclkDid; ++ uint8_t DisplayWatermark; ++ uint8_t DeepSleepDivId; ++ uint8_t padding; ++ uint32_t CgSpllFuncCntl; ++ uint32_t CgSpllFuncCntl2; ++ uint32_t CgSpllFuncCntl3; ++ uint32_t CgSpllFuncCntl4; ++ uint32_t SpllSpreadSpectrum; ++ uint32_t SpllSpreadSpectrum2; ++ uint32_t CcPwrDynRm; ++ uint32_t CcPwrDynRm1; ++}; ++ ++typedef struct SMU7_Discrete_ACPILevel SMU7_Discrete_ACPILevel; ++ ++struct SMU7_Discrete_Ulv ++{ ++ uint32_t CcPwrDynRm; ++ uint32_t CcPwrDynRm1; ++ uint16_t VddcOffset; ++ uint8_t VddcOffsetVid; ++ uint8_t VddcPhase; ++ uint32_t Reserved; ++}; ++ ++typedef struct SMU7_Discrete_Ulv SMU7_Discrete_Ulv; ++ ++struct SMU7_Discrete_MemoryLevel ++{ ++ uint32_t MinVddc; ++ uint32_t MinVddcPhases; ++ uint32_t MinVddci; ++ uint32_t MinMvdd; ++ ++ uint32_t MclkFrequency; ++ ++ uint8_t EdcReadEnable; ++ uint8_t EdcWriteEnable; ++ uint8_t RttEnable; ++ uint8_t StutterEnable; ++ ++ uint8_t StrobeEnable; ++ uint8_t StrobeRatio; ++ uint8_t EnabledForThrottle; ++ uint8_t EnabledForActivity; ++ ++ uint8_t UpH; ++ uint8_t DownH; ++ uint8_t VoltageDownH; ++ uint8_t padding; ++ ++ uint16_t ActivityLevel; ++ uint8_t DisplayWatermark; ++ uint8_t padding1; ++ ++ uint32_t MpllFuncCntl; ++ uint32_t MpllFuncCntl_1; ++ uint32_t MpllFuncCntl_2; ++ uint32_t MpllAdFuncCntl; ++ uint32_t MpllDqFuncCntl; ++ uint32_t MclkPwrmgtCntl; ++ uint32_t DllCntl; ++ uint32_t MpllSs1; ++ uint32_t MpllSs2; ++}; ++ ++typedef struct SMU7_Discrete_MemoryLevel SMU7_Discrete_MemoryLevel; ++ ++struct SMU7_Discrete_LinkLevel ++{ ++ uint8_t PcieGenSpeed; ++ uint8_t PcieLaneCount; ++ uint8_t EnabledForActivity; ++ uint8_t Padding; ++ uint32_t DownT; ++ uint32_t UpT; ++ uint32_t Reserved; ++}; ++ ++typedef struct SMU7_Discrete_LinkLevel SMU7_Discrete_LinkLevel; ++ ++ ++struct SMU7_Discrete_MCArbDramTimingTableEntry ++{ ++ uint32_t McArbDramTiming; ++ uint32_t McArbDramTiming2; ++ uint8_t McArbBurstTime; ++ uint8_t padding[3]; ++}; ++ ++typedef struct SMU7_Discrete_MCArbDramTimingTableEntry SMU7_Discrete_MCArbDramTimingTableEntry; ++ ++struct SMU7_Discrete_MCArbDramTimingTable ++{ ++ SMU7_Discrete_MCArbDramTimingTableEntry entries[SMU__NUM_SCLK_DPM_STATE][SMU__NUM_MCLK_DPM_LEVELS]; ++}; ++ ++typedef struct SMU7_Discrete_MCArbDramTimingTable SMU7_Discrete_MCArbDramTimingTable; ++ ++struct SMU7_Discrete_UvdLevel ++{ ++ uint32_t VclkFrequency; ++ uint32_t DclkFrequency; ++ uint16_t MinVddc; ++ uint8_t MinVddcPhases; ++ uint8_t VclkDivider; ++ uint8_t DclkDivider; ++ uint8_t padding[3]; ++}; ++ ++typedef struct SMU7_Discrete_UvdLevel SMU7_Discrete_UvdLevel; ++ ++struct SMU7_Discrete_ExtClkLevel ++{ ++ uint32_t Frequency; ++ uint16_t MinVoltage; ++ uint8_t MinPhases; ++ uint8_t Divider; ++}; ++ ++typedef struct SMU7_Discrete_ExtClkLevel SMU7_Discrete_ExtClkLevel; ++ ++struct SMU7_Discrete_StateInfo ++{ ++ uint32_t SclkFrequency; ++ uint32_t MclkFrequency; ++ uint32_t VclkFrequency; ++ uint32_t DclkFrequency; ++ uint32_t SamclkFrequency; ++ uint32_t AclkFrequency; ++ uint32_t EclkFrequency; ++ uint16_t MvddVoltage; ++ uint16_t padding16; ++ uint8_t DisplayWatermark; ++ uint8_t McArbIndex; ++ uint8_t McRegIndex; ++ uint8_t SeqIndex; ++ uint8_t SclkDid; ++ int8_t SclkIndex; ++ int8_t MclkIndex; ++ uint8_t PCIeGen; ++ ++}; ++ ++typedef struct SMU7_Discrete_StateInfo SMU7_Discrete_StateInfo; ++ ++ ++struct SMU7_Discrete_DpmTable ++{ ++ SMU7_PIDController GraphicsPIDController; ++ SMU7_PIDController MemoryPIDController; ++ SMU7_PIDController LinkPIDController; ++ ++ uint32_t SystemFlags; ++ ++ ++ uint32_t SmioMaskVddcVid; ++ uint32_t SmioMaskVddcPhase; ++ uint32_t SmioMaskVddciVid; ++ uint32_t SmioMaskMvddVid; ++ ++ uint32_t VddcLevelCount; ++ uint32_t VddciLevelCount; ++ uint32_t MvddLevelCount; ++ ++ SMU7_Discrete_VoltageLevel VddcLevel [SMU7_MAX_LEVELS_VDDC]; ++// SMU7_Discrete_VoltageLevel VddcStandardReference [SMU7_MAX_LEVELS_VDDC]; ++ SMU7_Discrete_VoltageLevel VddciLevel [SMU7_MAX_LEVELS_VDDCI]; ++ SMU7_Discrete_VoltageLevel MvddLevel [SMU7_MAX_LEVELS_MVDD]; ++ ++ uint8_t GraphicsDpmLevelCount; ++ uint8_t MemoryDpmLevelCount; ++ uint8_t LinkLevelCount; ++ uint8_t UvdLevelCount; ++ uint8_t VceLevelCount; ++ uint8_t AcpLevelCount; ++ uint8_t SamuLevelCount; ++ uint8_t MasterDeepSleepControl; ++ uint32_t Reserved[5]; ++// uint32_t SamuDefaultLevel; ++ ++ SMU7_Discrete_GraphicsLevel GraphicsLevel [SMU7_MAX_LEVELS_GRAPHICS]; ++ SMU7_Discrete_MemoryLevel MemoryACPILevel; ++ SMU7_Discrete_MemoryLevel MemoryLevel [SMU7_MAX_LEVELS_MEMORY]; ++ SMU7_Discrete_LinkLevel LinkLevel [SMU7_MAX_LEVELS_LINK]; ++ SMU7_Discrete_ACPILevel ACPILevel; ++ SMU7_Discrete_UvdLevel UvdLevel [SMU7_MAX_LEVELS_UVD]; ++ SMU7_Discrete_ExtClkLevel VceLevel [SMU7_MAX_LEVELS_VCE]; ++ SMU7_Discrete_ExtClkLevel AcpLevel [SMU7_MAX_LEVELS_ACP]; ++ SMU7_Discrete_ExtClkLevel SamuLevel [SMU7_MAX_LEVELS_SAMU]; ++ SMU7_Discrete_Ulv Ulv; ++ ++ uint32_t SclkStepSize; ++ uint32_t Smio [SMU7_MAX_ENTRIES_SMIO]; ++ ++ uint8_t UvdBootLevel; ++ uint8_t VceBootLevel; ++ uint8_t AcpBootLevel; ++ uint8_t SamuBootLevel; ++ ++ uint8_t UVDInterval; ++ uint8_t VCEInterval; ++ uint8_t ACPInterval; ++ uint8_t SAMUInterval; ++ ++ uint8_t GraphicsBootLevel; ++ uint8_t GraphicsVoltageChangeEnable; ++ uint8_t GraphicsThermThrottleEnable; ++ uint8_t GraphicsInterval; ++ ++ uint8_t VoltageInterval; ++ uint8_t ThermalInterval; ++ uint16_t TemperatureLimitHigh; ++ ++ uint16_t TemperatureLimitLow; ++ uint8_t MemoryBootLevel; ++ uint8_t MemoryVoltageChangeEnable; ++ ++ uint8_t MemoryInterval; ++ uint8_t MemoryThermThrottleEnable; ++ uint16_t VddcVddciDelta; ++ ++ uint16_t VoltageResponseTime; ++ uint16_t PhaseResponseTime; ++ ++ uint8_t PCIeBootLinkLevel; ++ uint8_t PCIeGenInterval; ++ uint8_t DTEInterval; ++ uint8_t DTEMode; ++ ++ uint8_t SVI2Enable; ++ uint8_t VRHotGpio; ++ uint8_t AcDcGpio; ++ uint8_t ThermGpio; ++ ++ uint16_t PPM_PkgPwrLimit; ++ uint16_t PPM_TemperatureLimit; ++ ++ uint16_t DefaultTdp; ++ uint16_t TargetTdp; ++ ++ uint16_t FpsHighT; ++ uint16_t FpsLowT; ++ ++ uint16_t BAPMTI_R [SMU7_DTE_ITERATIONS][SMU7_DTE_SOURCES][SMU7_DTE_SINKS]; ++ uint16_t BAPMTI_RC [SMU7_DTE_ITERATIONS][SMU7_DTE_SOURCES][SMU7_DTE_SINKS]; ++ ++ uint8_t DTEAmbientTempBase; ++ uint8_t DTETjOffset; ++ uint8_t GpuTjMax; ++ uint8_t GpuTjHyst; ++ ++ uint16_t BootVddc; ++ uint16_t BootVddci; ++ ++ uint16_t BootMVdd; ++ uint16_t padding; ++ ++ uint32_t BAPM_TEMP_GRADIENT; ++ ++ uint32_t LowSclkInterruptT; ++}; ++ ++typedef struct SMU7_Discrete_DpmTable SMU7_Discrete_DpmTable; ++ ++#define SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE 16 ++#define SMU7_DISCRETE_MC_REGISTER_ARRAY_SET_COUNT SMU7_MAX_LEVELS_MEMORY ++ ++struct SMU7_Discrete_MCRegisterAddress ++{ ++ uint16_t s0; ++ uint16_t s1; ++}; ++ ++typedef struct SMU7_Discrete_MCRegisterAddress SMU7_Discrete_MCRegisterAddress; ++ ++struct SMU7_Discrete_MCRegisterSet ++{ ++ uint32_t value[SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE]; ++}; ++ ++typedef struct SMU7_Discrete_MCRegisterSet SMU7_Discrete_MCRegisterSet; ++ ++struct SMU7_Discrete_MCRegisters ++{ ++ uint8_t last; ++ uint8_t reserved[3]; ++ SMU7_Discrete_MCRegisterAddress address[SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE]; ++ SMU7_Discrete_MCRegisterSet data[SMU7_DISCRETE_MC_REGISTER_ARRAY_SET_COUNT]; ++}; ++ ++typedef struct SMU7_Discrete_MCRegisters SMU7_Discrete_MCRegisters; ++ ++struct SMU7_Discrete_FanTable ++{ ++ uint16_t FdoMode; ++ int16_t TempMin; ++ int16_t TempMed; ++ int16_t TempMax; ++ int16_t Slope1; ++ int16_t Slope2; ++ int16_t FdoMin; ++ int16_t HystUp; ++ int16_t HystDown; ++ int16_t HystSlope; ++ int16_t TempRespLim; ++ int16_t TempCurr; ++ int16_t SlopeCurr; ++ int16_t PwmCurr; ++ uint32_t RefreshPeriod; ++ int16_t FdoMax; ++ uint8_t TempSrc; ++ int8_t Padding; ++}; ++ ++typedef struct SMU7_Discrete_FanTable SMU7_Discrete_FanTable; ++ ++ ++struct SMU7_Discrete_PmFuses { ++ // dw0-dw1 ++ uint8_t BapmVddCVidHiSidd[8]; ++ ++ // dw2-dw3 ++ uint8_t BapmVddCVidLoSidd[8]; ++ ++ // dw4-dw5 ++ uint8_t VddCVid[8]; ++ ++ // dw6 ++ uint8_t SviLoadLineEn; ++ uint8_t SviLoadLineVddC; ++ uint8_t SviLoadLineTrimVddC; ++ uint8_t SviLoadLineOffsetVddC; ++ ++ // dw7 ++ uint16_t TDC_VDDC_PkgLimit; ++ uint8_t TDC_VDDC_ThrottleReleaseLimitPerc; ++ uint8_t TDC_MAWt; ++ ++ // dw8 ++ uint8_t TdcWaterfallCtl; ++ uint8_t LPMLTemperatureMin; ++ uint8_t LPMLTemperatureMax; ++ uint8_t Reserved; ++ ++ // dw9-dw10 ++ uint8_t BapmVddCVidHiSidd2[8]; ++ ++ // dw11-dw12 ++ int16_t FuzzyFan_ErrorSetDelta; ++ int16_t FuzzyFan_ErrorRateSetDelta; ++ int16_t FuzzyFan_PwmSetDelta; ++ uint16_t CalcMeasPowerBlend; ++ ++ // dw13-dw16 ++ uint8_t GnbLPML[16]; ++ ++ // dw17 ++ uint8_t GnbLPMLMaxVid; ++ uint8_t GnbLPMLMinVid; ++ uint8_t Reserved1[2]; ++ ++ // dw18 ++ uint16_t BapmVddCBaseLeakageHiSidd; ++ uint16_t BapmVddCBaseLeakageLoSidd; ++}; ++ ++typedef struct SMU7_Discrete_PmFuses SMU7_Discrete_PmFuses; ++ ++ ++#pragma pack(pop) ++ ++#endif ++ +diff --git a/drivers/gpu/drm/amd/powerplay/inc/smu7_fusion.h b/drivers/gpu/drm/amd/powerplay/inc/smu7_fusion.h +new file mode 100644 +index 0000000..78ada9f +--- /dev/null ++++ b/drivers/gpu/drm/amd/powerplay/inc/smu7_fusion.h +@@ -0,0 +1,300 @@ ++/* ++ * Copyright 2013 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 SMU7_FUSION_H ++#define SMU7_FUSION_H ++ ++#include "smu7.h" ++ ++#pragma pack(push, 1) ++ ++#define SMU7_DTE_ITERATIONS 5 ++#define SMU7_DTE_SOURCES 5 ++#define SMU7_DTE_SINKS 3 ++#define SMU7_NUM_CPU_TES 2 ++#define SMU7_NUM_GPU_TES 1 ++#define SMU7_NUM_NON_TES 2 ++ ++// All 'soft registers' should be uint32_t. ++struct SMU7_SoftRegisters ++{ ++ uint32_t RefClockFrequency; ++ uint32_t PmTimerP; ++ uint32_t FeatureEnables; ++ uint32_t HandshakeDisables; ++ ++ uint8_t DisplayPhy1Config; ++ uint8_t DisplayPhy2Config; ++ uint8_t DisplayPhy3Config; ++ uint8_t DisplayPhy4Config; ++ ++ uint8_t DisplayPhy5Config; ++ uint8_t DisplayPhy6Config; ++ uint8_t DisplayPhy7Config; ++ uint8_t DisplayPhy8Config; ++ ++ uint32_t AverageGraphicsA; ++ uint32_t AverageMemoryA; ++ uint32_t AverageGioA; ++ ++ uint8_t SClkDpmEnabledLevels; ++ uint8_t MClkDpmEnabledLevels; ++ uint8_t LClkDpmEnabledLevels; ++ uint8_t PCIeDpmEnabledLevels; ++ ++ uint8_t UVDDpmEnabledLevels; ++ uint8_t SAMUDpmEnabledLevels; ++ uint8_t ACPDpmEnabledLevels; ++ uint8_t VCEDpmEnabledLevels; ++ ++ uint32_t DRAM_LOG_ADDR_H; ++ uint32_t DRAM_LOG_ADDR_L; ++ uint32_t DRAM_LOG_PHY_ADDR_H; ++ uint32_t DRAM_LOG_PHY_ADDR_L; ++ uint32_t DRAM_LOG_BUFF_SIZE; ++ uint32_t UlvEnterC; ++ uint32_t UlvTime; ++ uint32_t Reserved[3]; ++ ++}; ++ ++typedef struct SMU7_SoftRegisters SMU7_SoftRegisters; ++ ++struct SMU7_Fusion_GraphicsLevel ++{ ++ uint32_t MinVddNb; ++ ++ uint32_t SclkFrequency; ++ ++ uint8_t Vid; ++ uint8_t VidOffset; ++ uint16_t AT; ++ ++ uint8_t PowerThrottle; ++ uint8_t GnbSlow; ++ uint8_t ForceNbPs1; ++ uint8_t SclkDid; ++ ++ uint8_t DisplayWatermark; ++ uint8_t EnabledForActivity; ++ uint8_t EnabledForThrottle; ++ uint8_t UpH; ++ ++ uint8_t DownH; ++ uint8_t VoltageDownH; ++ uint8_t DeepSleepDivId; ++ ++ uint8_t ClkBypassCntl; ++ ++ uint32_t reserved; ++}; ++ ++typedef struct SMU7_Fusion_GraphicsLevel SMU7_Fusion_GraphicsLevel; ++ ++struct SMU7_Fusion_GIOLevel ++{ ++ uint8_t EnabledForActivity; ++ uint8_t LclkDid; ++ uint8_t Vid; ++ uint8_t VoltageDownH; ++ ++ uint32_t MinVddNb; ++ ++ uint16_t ResidencyCounter; ++ uint8_t UpH; ++ uint8_t DownH; ++ ++ uint32_t LclkFrequency; ++ ++ uint8_t ActivityLevel; ++ uint8_t EnabledForThrottle; ++ ++ uint8_t ClkBypassCntl; ++ ++ uint8_t padding; ++}; ++ ++typedef struct SMU7_Fusion_GIOLevel SMU7_Fusion_GIOLevel; ++ ++// UVD VCLK/DCLK state (level) definition. ++struct SMU7_Fusion_UvdLevel ++{ ++ uint32_t VclkFrequency; ++ uint32_t DclkFrequency; ++ uint16_t MinVddNb; ++ uint8_t VclkDivider; ++ uint8_t DclkDivider; ++ ++ uint8_t VClkBypassCntl; ++ uint8_t DClkBypassCntl; ++ ++ uint8_t padding[2]; ++ ++}; ++ ++typedef struct SMU7_Fusion_UvdLevel SMU7_Fusion_UvdLevel; ++ ++// Clocks for other external blocks (VCE, ACP, SAMU). ++struct SMU7_Fusion_ExtClkLevel ++{ ++ uint32_t Frequency; ++ uint16_t MinVoltage; ++ uint8_t Divider; ++ uint8_t ClkBypassCntl; ++ ++ uint32_t Reserved; ++}; ++typedef struct SMU7_Fusion_ExtClkLevel SMU7_Fusion_ExtClkLevel; ++ ++struct SMU7_Fusion_ACPILevel ++{ ++ uint32_t Flags; ++ uint32_t MinVddNb; ++ uint32_t SclkFrequency; ++ uint8_t SclkDid; ++ uint8_t GnbSlow; ++ uint8_t ForceNbPs1; ++ uint8_t DisplayWatermark; ++ uint8_t DeepSleepDivId; ++ uint8_t padding[3]; ++}; ++ ++typedef struct SMU7_Fusion_ACPILevel SMU7_Fusion_ACPILevel; ++ ++struct SMU7_Fusion_NbDpm ++{ ++ uint8_t DpmXNbPsHi; ++ uint8_t DpmXNbPsLo; ++ uint8_t Dpm0PgNbPsHi; ++ uint8_t Dpm0PgNbPsLo; ++ uint8_t EnablePsi1; ++ uint8_t SkipDPM0; ++ uint8_t SkipPG; ++ uint8_t Hysteresis; ++ uint8_t EnableDpmPstatePoll; ++ uint8_t padding[3]; ++}; ++ ++typedef struct SMU7_Fusion_NbDpm SMU7_Fusion_NbDpm; ++ ++struct SMU7_Fusion_StateInfo ++{ ++ uint32_t SclkFrequency; ++ uint32_t LclkFrequency; ++ uint32_t VclkFrequency; ++ uint32_t DclkFrequency; ++ uint32_t SamclkFrequency; ++ uint32_t AclkFrequency; ++ uint32_t EclkFrequency; ++ uint8_t DisplayWatermark; ++ uint8_t McArbIndex; ++ int8_t SclkIndex; ++ int8_t MclkIndex; ++}; ++ ++typedef struct SMU7_Fusion_StateInfo SMU7_Fusion_StateInfo; ++ ++struct SMU7_Fusion_DpmTable ++{ ++ uint32_t SystemFlags; ++ ++ SMU7_PIDController GraphicsPIDController; ++ SMU7_PIDController GioPIDController; ++ ++ uint8_t GraphicsDpmLevelCount; ++ uint8_t GIOLevelCount; ++ uint8_t UvdLevelCount; ++ uint8_t VceLevelCount; ++ ++ uint8_t AcpLevelCount; ++ uint8_t SamuLevelCount; ++ uint16_t FpsHighT; ++ ++ SMU7_Fusion_GraphicsLevel GraphicsLevel [SMU__NUM_SCLK_DPM_STATE]; ++ SMU7_Fusion_ACPILevel ACPILevel; ++ SMU7_Fusion_UvdLevel UvdLevel [SMU7_MAX_LEVELS_UVD]; ++ SMU7_Fusion_ExtClkLevel VceLevel [SMU7_MAX_LEVELS_VCE]; ++ SMU7_Fusion_ExtClkLevel AcpLevel [SMU7_MAX_LEVELS_ACP]; ++ SMU7_Fusion_ExtClkLevel SamuLevel [SMU7_MAX_LEVELS_SAMU]; ++ ++ uint8_t UvdBootLevel; ++ uint8_t VceBootLevel; ++ uint8_t AcpBootLevel; ++ uint8_t SamuBootLevel; ++ uint8_t UVDInterval; ++ uint8_t VCEInterval; ++ uint8_t ACPInterval; ++ uint8_t SAMUInterval; ++ ++ uint8_t GraphicsBootLevel; ++ uint8_t GraphicsInterval; ++ uint8_t GraphicsThermThrottleEnable; ++ uint8_t GraphicsVoltageChangeEnable; ++ ++ uint8_t GraphicsClkSlowEnable; ++ uint8_t GraphicsClkSlowDivider; ++ uint16_t FpsLowT; ++ ++ uint32_t DisplayCac; ++ uint32_t LowSclkInterruptT; ++ ++ uint32_t DRAM_LOG_ADDR_H; ++ uint32_t DRAM_LOG_ADDR_L; ++ uint32_t DRAM_LOG_PHY_ADDR_H; ++ uint32_t DRAM_LOG_PHY_ADDR_L; ++ uint32_t DRAM_LOG_BUFF_SIZE; ++ ++}; ++ ++struct SMU7_Fusion_GIODpmTable ++{ ++ ++ SMU7_Fusion_GIOLevel GIOLevel [SMU7_MAX_LEVELS_GIO]; ++ ++ SMU7_PIDController GioPIDController; ++ ++ uint32_t GIOLevelCount; ++ ++ uint8_t Enable; ++ uint8_t GIOVoltageChangeEnable; ++ uint8_t GIOBootLevel; ++ uint8_t padding; ++ uint8_t padding1[2]; ++ uint8_t TargetState; ++ uint8_t CurrenttState; ++ uint8_t ThrottleOnHtc; ++ uint8_t ThermThrottleStatus; ++ uint8_t ThermThrottleTempSelect; ++ uint8_t ThermThrottleEnable; ++ uint16_t TemperatureLimitHigh; ++ uint16_t TemperatureLimitLow; ++ ++}; ++ ++typedef struct SMU7_Fusion_DpmTable SMU7_Fusion_DpmTable; ++typedef struct SMU7_Fusion_GIODpmTable SMU7_Fusion_GIODpmTable; ++ ++#pragma pack(pop) ++ ++#endif ++ +-- +2.7.4 + |