0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 #ifndef SMU8_FUSION_H
0025 #define SMU8_FUSION_H
0026
0027 #include "smu8.h"
0028
0029 #pragma pack(push, 1)
0030
0031 #define SMU8_MAX_CUS 2
0032 #define SMU8_PSMS_PER_CU 4
0033 #define SMU8_CACS_PER_CU 4
0034
0035 struct SMU8_GfxCuPgScoreboard {
0036 uint8_t Enabled;
0037 uint8_t spare[3];
0038 };
0039
0040 struct SMU8_Port80MonitorTable {
0041 uint32_t MmioAddress;
0042 uint32_t MemoryBaseHi;
0043 uint32_t MemoryBaseLo;
0044 uint16_t MemoryBufferSize;
0045 uint16_t MemoryPosition;
0046 uint16_t PollingInterval;
0047 uint8_t EnableCsrShadow;
0048 uint8_t EnableDramShadow;
0049 };
0050
0051
0052 #define PWRMGT_SEPARATION_TIME_SHIFT 0
0053 #define PWRMGT_SEPARATION_TIME_MASK 0xFFFF
0054 #define PWRMGT_DISABLE_CPU_CSTATES_SHIFT 16
0055 #define PWRMGT_DISABLE_CPU_CSTATES_MASK 0x1
0056 #define PWRMGT_DISABLE_CPU_PSTATES_SHIFT 24
0057 #define PWRMGT_DISABLE_CPU_PSTATES_MASK 0x1
0058
0059
0060 #define NUM_SCLK_LEVELS 8
0061 #define NUM_LCLK_LEVELS 8
0062 #define NUM_UVD_LEVELS 8
0063 #define NUM_ECLK_LEVELS 8
0064 #define NUM_ACLK_LEVELS 8
0065
0066 struct SMU8_Fusion_ClkLevel {
0067 uint8_t GnbVid;
0068 uint8_t GfxVid;
0069 uint8_t DfsDid;
0070 uint8_t DeepSleepDid;
0071 uint32_t DfsBypass;
0072 uint32_t Frequency;
0073 };
0074
0075 struct SMU8_Fusion_SclkBreakdownTable {
0076 struct SMU8_Fusion_ClkLevel ClkLevel[NUM_SCLK_LEVELS];
0077 struct SMU8_Fusion_ClkLevel DpmOffLevel;
0078
0079 uint32_t SclkValidMask;
0080 uint32_t MaxSclkIndex;
0081 };
0082
0083 struct SMU8_Fusion_LclkBreakdownTable {
0084 struct SMU8_Fusion_ClkLevel ClkLevel[NUM_LCLK_LEVELS];
0085 struct SMU8_Fusion_ClkLevel DpmOffLevel;
0086
0087 uint32_t LclkValidMask;
0088 uint32_t MaxLclkIndex;
0089 };
0090
0091 struct SMU8_Fusion_EclkBreakdownTable {
0092 struct SMU8_Fusion_ClkLevel ClkLevel[NUM_ECLK_LEVELS];
0093 struct SMU8_Fusion_ClkLevel DpmOffLevel;
0094 struct SMU8_Fusion_ClkLevel PwrOffLevel;
0095 uint32_t EclkValidMask;
0096 uint32_t MaxEclkIndex;
0097 };
0098
0099 struct SMU8_Fusion_VclkBreakdownTable {
0100 struct SMU8_Fusion_ClkLevel ClkLevel[NUM_UVD_LEVELS];
0101 struct SMU8_Fusion_ClkLevel DpmOffLevel;
0102 struct SMU8_Fusion_ClkLevel PwrOffLevel;
0103 uint32_t VclkValidMask;
0104 uint32_t MaxVclkIndex;
0105 };
0106
0107 struct SMU8_Fusion_DclkBreakdownTable {
0108 struct SMU8_Fusion_ClkLevel ClkLevel[NUM_UVD_LEVELS];
0109 struct SMU8_Fusion_ClkLevel DpmOffLevel;
0110 struct SMU8_Fusion_ClkLevel PwrOffLevel;
0111 uint32_t DclkValidMask;
0112 uint32_t MaxDclkIndex;
0113 };
0114
0115 struct SMU8_Fusion_AclkBreakdownTable {
0116 struct SMU8_Fusion_ClkLevel ClkLevel[NUM_ACLK_LEVELS];
0117 struct SMU8_Fusion_ClkLevel DpmOffLevel;
0118 struct SMU8_Fusion_ClkLevel PwrOffLevel;
0119 uint32_t AclkValidMask;
0120 uint32_t MaxAclkIndex;
0121 };
0122
0123
0124 struct SMU8_Fusion_ClkTable {
0125 struct SMU8_Fusion_SclkBreakdownTable SclkBreakdownTable;
0126 struct SMU8_Fusion_LclkBreakdownTable LclkBreakdownTable;
0127 struct SMU8_Fusion_EclkBreakdownTable EclkBreakdownTable;
0128 struct SMU8_Fusion_VclkBreakdownTable VclkBreakdownTable;
0129 struct SMU8_Fusion_DclkBreakdownTable DclkBreakdownTable;
0130 struct SMU8_Fusion_AclkBreakdownTable AclkBreakdownTable;
0131 };
0132
0133 #pragma pack(pop)
0134
0135 #endif