141a524abSAlex Deucher /* 241a524abSAlex Deucher * Copyright 2013 Advanced Micro Devices, Inc. 341a524abSAlex Deucher * 441a524abSAlex Deucher * Permission is hereby granted, free of charge, to any person obtaining a 541a524abSAlex Deucher * copy of this software and associated documentation files (the "Software"), 641a524abSAlex Deucher * to deal in the Software without restriction, including without limitation 741a524abSAlex Deucher * the rights to use, copy, modify, merge, publish, distribute, sublicense, 841a524abSAlex Deucher * and/or sell copies of the Software, and to permit persons to whom the 941a524abSAlex Deucher * Software is furnished to do so, subject to the following conditions: 1041a524abSAlex Deucher * 1141a524abSAlex Deucher * The above copyright notice and this permission notice shall be included in 1241a524abSAlex Deucher * all copies or substantial portions of the Software. 1341a524abSAlex Deucher * 1441a524abSAlex Deucher * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1541a524abSAlex Deucher * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1641a524abSAlex Deucher * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 1741a524abSAlex Deucher * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 1841a524abSAlex Deucher * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 1941a524abSAlex Deucher * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 2041a524abSAlex Deucher * OTHER DEALINGS IN THE SOFTWARE. 2141a524abSAlex Deucher * 2241a524abSAlex Deucher */ 2341a524abSAlex Deucher 2441a524abSAlex Deucher #ifndef SMU7_H 2541a524abSAlex Deucher #define SMU7_H 2641a524abSAlex Deucher 2741a524abSAlex Deucher #pragma pack(push, 1) 2841a524abSAlex Deucher 2941a524abSAlex Deucher #define SMU7_CONTEXT_ID_SMC 1 3041a524abSAlex Deucher #define SMU7_CONTEXT_ID_VBIOS 2 3141a524abSAlex Deucher 3241a524abSAlex Deucher 3341a524abSAlex Deucher #define SMU7_CONTEXT_ID_SMC 1 3441a524abSAlex Deucher #define SMU7_CONTEXT_ID_VBIOS 2 3541a524abSAlex Deucher 3641a524abSAlex Deucher #define SMU7_MAX_LEVELS_VDDC 8 3741a524abSAlex Deucher #define SMU7_MAX_LEVELS_VDDCI 4 3841a524abSAlex Deucher #define SMU7_MAX_LEVELS_MVDD 4 3941a524abSAlex Deucher #define SMU7_MAX_LEVELS_VDDNB 8 4041a524abSAlex Deucher 4141a524abSAlex Deucher #define SMU7_MAX_LEVELS_GRAPHICS SMU__NUM_SCLK_DPM_STATE // SCLK + SQ DPM + ULV 4241a524abSAlex Deucher #define SMU7_MAX_LEVELS_MEMORY SMU__NUM_MCLK_DPM_LEVELS // MCLK Levels DPM 4341a524abSAlex Deucher #define SMU7_MAX_LEVELS_GIO SMU__NUM_LCLK_DPM_LEVELS // LCLK Levels 4441a524abSAlex Deucher #define SMU7_MAX_LEVELS_LINK SMU__NUM_PCIE_DPM_LEVELS // PCIe speed and number of lanes. 4541a524abSAlex Deucher #define SMU7_MAX_LEVELS_UVD 8 // VCLK/DCLK levels for UVD. 4641a524abSAlex Deucher #define SMU7_MAX_LEVELS_VCE 8 // ECLK levels for VCE. 4741a524abSAlex Deucher #define SMU7_MAX_LEVELS_ACP 8 // ACLK levels for ACP. 4841a524abSAlex Deucher #define SMU7_MAX_LEVELS_SAMU 8 // SAMCLK levels for SAMU. 4941a524abSAlex Deucher #define SMU7_MAX_ENTRIES_SMIO 32 // Number of entries in SMIO table. 5041a524abSAlex Deucher 5141a524abSAlex Deucher #define DPM_NO_LIMIT 0 5241a524abSAlex Deucher #define DPM_NO_UP 1 5341a524abSAlex Deucher #define DPM_GO_DOWN 2 5441a524abSAlex Deucher #define DPM_GO_UP 3 5541a524abSAlex Deucher 5641a524abSAlex Deucher #define SMU7_FIRST_DPM_GRAPHICS_LEVEL 0 5741a524abSAlex Deucher #define SMU7_FIRST_DPM_MEMORY_LEVEL 0 5841a524abSAlex Deucher 5941a524abSAlex Deucher #define GPIO_CLAMP_MODE_VRHOT 1 6041a524abSAlex Deucher #define GPIO_CLAMP_MODE_THERM 2 6141a524abSAlex Deucher #define GPIO_CLAMP_MODE_DC 4 6241a524abSAlex Deucher 6341a524abSAlex Deucher #define SCRATCH_B_TARG_PCIE_INDEX_SHIFT 0 6441a524abSAlex Deucher #define SCRATCH_B_TARG_PCIE_INDEX_MASK (0x7<<SCRATCH_B_TARG_PCIE_INDEX_SHIFT) 6541a524abSAlex Deucher #define SCRATCH_B_CURR_PCIE_INDEX_SHIFT 3 6641a524abSAlex Deucher #define SCRATCH_B_CURR_PCIE_INDEX_MASK (0x7<<SCRATCH_B_CURR_PCIE_INDEX_SHIFT) 6741a524abSAlex Deucher #define SCRATCH_B_TARG_UVD_INDEX_SHIFT 6 6841a524abSAlex Deucher #define SCRATCH_B_TARG_UVD_INDEX_MASK (0x7<<SCRATCH_B_TARG_UVD_INDEX_SHIFT) 6941a524abSAlex Deucher #define SCRATCH_B_CURR_UVD_INDEX_SHIFT 9 7041a524abSAlex Deucher #define SCRATCH_B_CURR_UVD_INDEX_MASK (0x7<<SCRATCH_B_CURR_UVD_INDEX_SHIFT) 7141a524abSAlex Deucher #define SCRATCH_B_TARG_VCE_INDEX_SHIFT 12 7241a524abSAlex Deucher #define SCRATCH_B_TARG_VCE_INDEX_MASK (0x7<<SCRATCH_B_TARG_VCE_INDEX_SHIFT) 7341a524abSAlex Deucher #define SCRATCH_B_CURR_VCE_INDEX_SHIFT 15 7441a524abSAlex Deucher #define SCRATCH_B_CURR_VCE_INDEX_MASK (0x7<<SCRATCH_B_CURR_VCE_INDEX_SHIFT) 7541a524abSAlex Deucher #define SCRATCH_B_TARG_ACP_INDEX_SHIFT 18 7641a524abSAlex Deucher #define SCRATCH_B_TARG_ACP_INDEX_MASK (0x7<<SCRATCH_B_TARG_ACP_INDEX_SHIFT) 7741a524abSAlex Deucher #define SCRATCH_B_CURR_ACP_INDEX_SHIFT 21 7841a524abSAlex Deucher #define SCRATCH_B_CURR_ACP_INDEX_MASK (0x7<<SCRATCH_B_CURR_ACP_INDEX_SHIFT) 7941a524abSAlex Deucher #define SCRATCH_B_TARG_SAMU_INDEX_SHIFT 24 8041a524abSAlex Deucher #define SCRATCH_B_TARG_SAMU_INDEX_MASK (0x7<<SCRATCH_B_TARG_SAMU_INDEX_SHIFT) 8141a524abSAlex Deucher #define SCRATCH_B_CURR_SAMU_INDEX_SHIFT 27 8241a524abSAlex Deucher #define SCRATCH_B_CURR_SAMU_INDEX_MASK (0x7<<SCRATCH_B_CURR_SAMU_INDEX_SHIFT) 8341a524abSAlex Deucher 8441a524abSAlex Deucher 853af3497fSGuoHua Chen struct SMU7_PIDController { 8641a524abSAlex Deucher uint32_t Ki; 8741a524abSAlex Deucher int32_t LFWindupUL; 8841a524abSAlex Deucher int32_t LFWindupLL; 8941a524abSAlex Deucher uint32_t StatePrecision; 9041a524abSAlex Deucher uint32_t LfPrecision; 9141a524abSAlex Deucher uint32_t LfOffset; 9241a524abSAlex Deucher uint32_t MaxState; 9341a524abSAlex Deucher uint32_t MaxLfFraction; 9441a524abSAlex Deucher uint32_t StateShift; 9541a524abSAlex Deucher }; 9641a524abSAlex Deucher 9741a524abSAlex Deucher typedef struct SMU7_PIDController SMU7_PIDController; 9841a524abSAlex Deucher 9941a524abSAlex Deucher // ------------------------------------------------------------------------------------------------------------------------- 10041a524abSAlex Deucher #define SMU7_MAX_PCIE_LINK_SPEEDS 3 /* 0:Gen1 1:Gen2 2:Gen3 */ 10141a524abSAlex Deucher 10241a524abSAlex Deucher #define SMU7_SCLK_DPM_CONFIG_MASK 0x01 10341a524abSAlex Deucher #define SMU7_VOLTAGE_CONTROLLER_CONFIG_MASK 0x02 10441a524abSAlex Deucher #define SMU7_THERMAL_CONTROLLER_CONFIG_MASK 0x04 10541a524abSAlex Deucher #define SMU7_MCLK_DPM_CONFIG_MASK 0x08 10641a524abSAlex Deucher #define SMU7_UVD_DPM_CONFIG_MASK 0x10 10741a524abSAlex Deucher #define SMU7_VCE_DPM_CONFIG_MASK 0x20 10841a524abSAlex Deucher #define SMU7_ACP_DPM_CONFIG_MASK 0x40 10941a524abSAlex Deucher #define SMU7_SAMU_DPM_CONFIG_MASK 0x80 11041a524abSAlex Deucher #define SMU7_PCIEGEN_DPM_CONFIG_MASK 0x100 11141a524abSAlex Deucher 11241a524abSAlex Deucher #define SMU7_ACP_MCLK_HANDSHAKE_DISABLE 0x00000001 11341a524abSAlex Deucher #define SMU7_ACP_SCLK_HANDSHAKE_DISABLE 0x00000002 11441a524abSAlex Deucher #define SMU7_UVD_MCLK_HANDSHAKE_DISABLE 0x00000100 11541a524abSAlex Deucher #define SMU7_UVD_SCLK_HANDSHAKE_DISABLE 0x00000200 11641a524abSAlex Deucher #define SMU7_VCE_MCLK_HANDSHAKE_DISABLE 0x00010000 11741a524abSAlex Deucher #define SMU7_VCE_SCLK_HANDSHAKE_DISABLE 0x00020000 11841a524abSAlex Deucher 1193af3497fSGuoHua Chen struct SMU7_Firmware_Header { 12041a524abSAlex Deucher uint32_t Digest[5]; 12141a524abSAlex Deucher uint32_t Version; 12241a524abSAlex Deucher uint32_t HeaderSize; 12341a524abSAlex Deucher uint32_t Flags; 12441a524abSAlex Deucher uint32_t EntryPoint; 12541a524abSAlex Deucher uint32_t CodeSize; 12641a524abSAlex Deucher uint32_t ImageSize; 12741a524abSAlex Deucher 12841a524abSAlex Deucher uint32_t Rtos; 12941a524abSAlex Deucher uint32_t SoftRegisters; 13041a524abSAlex Deucher uint32_t DpmTable; 13141a524abSAlex Deucher uint32_t FanTable; 13241a524abSAlex Deucher uint32_t CacConfigTable; 13341a524abSAlex Deucher uint32_t CacStatusTable; 13441a524abSAlex Deucher 13541a524abSAlex Deucher uint32_t mcRegisterTable; 13641a524abSAlex Deucher 13741a524abSAlex Deucher uint32_t mcArbDramTimingTable; 13841a524abSAlex Deucher 13941a524abSAlex Deucher uint32_t PmFuseTable; 14041a524abSAlex Deucher uint32_t Globals; 14141a524abSAlex Deucher uint32_t Reserved[42]; 14241a524abSAlex Deucher uint32_t Signature; 14341a524abSAlex Deucher }; 14441a524abSAlex Deucher 14541a524abSAlex Deucher typedef struct SMU7_Firmware_Header SMU7_Firmware_Header; 14641a524abSAlex Deucher 14741a524abSAlex Deucher #define SMU7_FIRMWARE_HEADER_LOCATION 0x20000 14841a524abSAlex Deucher 14941a524abSAlex Deucher enum DisplayConfig { 15041a524abSAlex Deucher PowerDown = 1, 15141a524abSAlex Deucher DP54x4, 15241a524abSAlex Deucher DP54x2, 15341a524abSAlex Deucher DP54x1, 15441a524abSAlex Deucher DP27x4, 15541a524abSAlex Deucher DP27x2, 15641a524abSAlex Deucher DP27x1, 15741a524abSAlex Deucher HDMI297, 15841a524abSAlex Deucher HDMI162, 15941a524abSAlex Deucher LVDS, 16041a524abSAlex Deucher DP324x4, 16141a524abSAlex Deucher DP324x2, 16241a524abSAlex Deucher DP324x1 16341a524abSAlex Deucher }; 16441a524abSAlex Deucher 16541a524abSAlex Deucher #pragma pack(pop) 16641a524abSAlex Deucher 16741a524abSAlex Deucher #endif 16841a524abSAlex Deucher 169