1 /* 2 * Copyright 2021 Advanced Micro Devices, Inc. 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice shall be included in 12 * all copies or substantial portions of the Software. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20 * OTHER DEALINGS IN THE SOFTWARE. 21 * 22 */ 23 #ifndef __SMU_13_0_6_PPT_H__ 24 #define __SMU_13_0_6_PPT_H__ 25 26 #define SMU_13_0_6_UMD_PSTATE_GFXCLK_LEVEL 0x2 27 #define SMU_13_0_6_UMD_PSTATE_SOCCLK_LEVEL 0x4 28 #define SMU_13_0_6_UMD_PSTATE_MCLK_LEVEL 0x2 29 #define SMU_CAP(x) SMU_13_0_6_CAPS_##x 30 31 typedef enum { 32 /*0*/ METRICS_VERSION_V0 = 0, 33 /*1*/ METRICS_VERSION_V1 = 1, 34 /*2*/ METRICS_VERSION_V2 = 2, 35 36 /*3*/ NUM_METRICS = 3 37 } METRICS_LIST_e; 38 39 struct PPTable_t { 40 uint32_t MaxSocketPowerLimit; 41 uint32_t MaxGfxclkFrequency; 42 uint32_t MinGfxclkFrequency; 43 uint32_t FclkFrequencyTable[4]; 44 uint32_t UclkFrequencyTable[4]; 45 uint32_t SocclkFrequencyTable[4]; 46 uint32_t VclkFrequencyTable[4]; 47 uint32_t DclkFrequencyTable[4]; 48 uint32_t LclkFrequencyTable[4]; 49 uint32_t MaxLclkDpmRange; 50 uint32_t MinLclkDpmRange; 51 uint64_t PublicSerialNumber_AID; 52 uint32_t MaxNodePowerLimit; 53 uint32_t PPT1Max; 54 uint32_t PPT1Min; 55 uint32_t PPT1Default; 56 bool Init; 57 }; 58 59 enum smu_v13_0_6_caps { 60 SMU_CAP(DPM), 61 SMU_CAP(DPM_POLICY), 62 SMU_CAP(OTHER_END_METRICS), 63 SMU_CAP(SET_UCLK_MAX), 64 SMU_CAP(PCIE_METRICS), 65 SMU_CAP(MCA_DEBUG_MODE), 66 SMU_CAP(PER_INST_METRICS), 67 SMU_CAP(CTF_LIMIT), 68 SMU_CAP(RMA_MSG), 69 SMU_CAP(ACA_SYND), 70 SMU_CAP(SDMA_RESET), 71 SMU_CAP(VCN_RESET), 72 SMU_CAP(STATIC_METRICS), 73 SMU_CAP(HST_LIMIT_METRICS), 74 SMU_CAP(BOARD_VOLTAGE), 75 SMU_CAP(PLDM_VERSION), 76 SMU_CAP(TEMP_METRICS), 77 SMU_CAP(NPM_METRICS), 78 SMU_CAP(RAS_EEPROM), 79 SMU_CAP(FAST_PPT), 80 SMU_CAP(SYSTEM_POWER_METRICS), 81 SMU_CAP(ALL), 82 }; 83 84 #define SMU_13_0_6_NUM_XGMI_LINKS 8 85 #define SMU_13_0_6_MAX_GFX_CLKS 8 86 #define SMU_13_0_6_MAX_CLKS 4 87 #define SMU_13_0_6_MAX_XCC 8 88 #define SMU_13_0_6_MAX_VCN 4 89 #define SMU_13_0_6_MAX_JPEG 40 90 91 extern void smu_v13_0_6_set_ppt_funcs(struct smu_context *smu); 92 bool smu_v13_0_6_cap_supported(struct smu_context *smu, enum smu_v13_0_6_caps cap); 93 int smu_v13_0_6_get_static_metrics_table(struct smu_context *smu); 94 int smu_v13_0_6_get_metrics_table(struct smu_context *smu, void *metrics_table, 95 bool bypass_cache); 96 97 bool smu_v13_0_12_is_dpm_running(struct smu_context *smu); 98 int smu_v13_0_12_get_max_metrics_size(void); 99 size_t smu_v13_0_12_get_system_metrics_size(void); 100 int smu_v13_0_12_setup_driver_pptable(struct smu_context *smu); 101 int smu_v13_0_12_get_smu_metrics_data(struct smu_context *smu, 102 MetricsMember_t member, uint32_t *value); 103 ssize_t smu_v13_0_12_get_xcp_metrics(struct smu_context *smu, 104 struct amdgpu_xcp *xcp, void *table, 105 void *smu_metrics); 106 int smu_v13_0_12_tables_init(struct smu_context *smu); 107 void smu_v13_0_12_tables_fini(struct smu_context *smu); 108 int smu_v13_0_12_get_npm_data(struct smu_context *smu, 109 enum amd_pp_sensors sensor, 110 uint32_t *value); 111 int smu_v13_0_12_get_system_power(struct smu_context *smu, 112 enum amd_pp_sensors sensor, 113 uint32_t *value); 114 extern const struct cmn2asic_mapping smu_v13_0_12_feature_mask_map[]; 115 extern const struct cmn2asic_msg_mapping smu_v13_0_12_message_map[]; 116 extern const struct smu_temp_funcs smu_v13_0_12_temp_funcs; 117 extern const struct ras_smu_drv smu_v13_0_12_ras_smu_drv; 118 119 #if defined(SWSMU_CODE_LAYER_L2) 120 #include "smu_cmn.h" 121 122 /* SMUv 13.0.6 GPU metrics*/ 123 #define SMU_13_0_6_METRICS_FIELDS(SMU_SCALAR, SMU_ARRAY) \ 124 SMU_SCALAR(SMU_MATTR(TEMPERATURE_HOTSPOT), SMU_MUNIT(TEMP_1), \ 125 SMU_MTYPE(U16), temperature_hotspot); \ 126 SMU_SCALAR(SMU_MATTR(TEMPERATURE_MEM), SMU_MUNIT(TEMP_1), \ 127 SMU_MTYPE(U16), temperature_mem); \ 128 SMU_SCALAR(SMU_MATTR(TEMPERATURE_VRSOC), SMU_MUNIT(TEMP_1), \ 129 SMU_MTYPE(U16), temperature_vrsoc); \ 130 SMU_SCALAR(SMU_MATTR(CURR_SOCKET_POWER), SMU_MUNIT(POWER_1), \ 131 SMU_MTYPE(U16), curr_socket_power); \ 132 SMU_SCALAR(SMU_MATTR(AVERAGE_GFX_ACTIVITY), SMU_MUNIT(PERCENT), \ 133 SMU_MTYPE(U16), average_gfx_activity); \ 134 SMU_SCALAR(SMU_MATTR(AVERAGE_UMC_ACTIVITY), SMU_MUNIT(PERCENT), \ 135 SMU_MTYPE(U16), average_umc_activity); \ 136 SMU_SCALAR(SMU_MATTR(MEM_MAX_BANDWIDTH), SMU_MUNIT(BW_1), \ 137 SMU_MTYPE(U64), mem_max_bandwidth); \ 138 SMU_SCALAR(SMU_MATTR(ENERGY_ACCUMULATOR), SMU_MUNIT(NONE), \ 139 SMU_MTYPE(U64), energy_accumulator); \ 140 SMU_SCALAR(SMU_MATTR(SYSTEM_CLOCK_COUNTER), SMU_MUNIT(TIME_1), \ 141 SMU_MTYPE(U64), system_clock_counter); \ 142 SMU_SCALAR(SMU_MATTR(ACCUMULATION_COUNTER), SMU_MUNIT(NONE), \ 143 SMU_MTYPE(U64), accumulation_counter); \ 144 SMU_SCALAR(SMU_MATTR(PROCHOT_RESIDENCY_ACC), SMU_MUNIT(NONE), \ 145 SMU_MTYPE(U32), prochot_residency_acc); \ 146 SMU_SCALAR(SMU_MATTR(PPT_RESIDENCY_ACC), SMU_MUNIT(NONE), \ 147 SMU_MTYPE(U32), ppt_residency_acc); \ 148 SMU_SCALAR(SMU_MATTR(SOCKET_THM_RESIDENCY_ACC), SMU_MUNIT(NONE), \ 149 SMU_MTYPE(U32), socket_thm_residency_acc); \ 150 SMU_SCALAR(SMU_MATTR(VR_THM_RESIDENCY_ACC), SMU_MUNIT(NONE), \ 151 SMU_MTYPE(U32), vr_thm_residency_acc); \ 152 SMU_SCALAR(SMU_MATTR(HBM_THM_RESIDENCY_ACC), SMU_MUNIT(NONE), \ 153 SMU_MTYPE(U32), hbm_thm_residency_acc); \ 154 SMU_SCALAR(SMU_MATTR(GFXCLK_LOCK_STATUS), SMU_MUNIT(NONE), \ 155 SMU_MTYPE(U32), gfxclk_lock_status); \ 156 SMU_SCALAR(SMU_MATTR(PCIE_LINK_WIDTH), SMU_MUNIT(NONE), \ 157 SMU_MTYPE(U16), pcie_link_width); \ 158 SMU_SCALAR(SMU_MATTR(PCIE_LINK_SPEED), SMU_MUNIT(SPEED_2), \ 159 SMU_MTYPE(U16), pcie_link_speed); \ 160 SMU_SCALAR(SMU_MATTR(XGMI_LINK_WIDTH), SMU_MUNIT(NONE), \ 161 SMU_MTYPE(U16), xgmi_link_width); \ 162 SMU_SCALAR(SMU_MATTR(XGMI_LINK_SPEED), SMU_MUNIT(SPEED_1), \ 163 SMU_MTYPE(U16), xgmi_link_speed); \ 164 SMU_SCALAR(SMU_MATTR(GFX_ACTIVITY_ACC), SMU_MUNIT(PERCENT), \ 165 SMU_MTYPE(U32), gfx_activity_acc); \ 166 SMU_SCALAR(SMU_MATTR(MEM_ACTIVITY_ACC), SMU_MUNIT(PERCENT), \ 167 SMU_MTYPE(U32), mem_activity_acc); \ 168 SMU_SCALAR(SMU_MATTR(PCIE_BANDWIDTH_ACC), SMU_MUNIT(PERCENT), \ 169 SMU_MTYPE(U64), pcie_bandwidth_acc); \ 170 SMU_SCALAR(SMU_MATTR(PCIE_BANDWIDTH_INST), SMU_MUNIT(BW_1), \ 171 SMU_MTYPE(U64), pcie_bandwidth_inst); \ 172 SMU_SCALAR(SMU_MATTR(PCIE_L0_TO_RECOV_COUNT_ACC), SMU_MUNIT(NONE), \ 173 SMU_MTYPE(U64), pcie_l0_to_recov_count_acc); \ 174 SMU_SCALAR(SMU_MATTR(PCIE_REPLAY_COUNT_ACC), SMU_MUNIT(NONE), \ 175 SMU_MTYPE(U64), pcie_replay_count_acc); \ 176 SMU_SCALAR(SMU_MATTR(PCIE_REPLAY_ROVER_COUNT_ACC), SMU_MUNIT(NONE), \ 177 SMU_MTYPE(U64), pcie_replay_rover_count_acc); \ 178 SMU_SCALAR(SMU_MATTR(PCIE_NAK_SENT_COUNT_ACC), SMU_MUNIT(NONE), \ 179 SMU_MTYPE(U32), pcie_nak_sent_count_acc); \ 180 SMU_SCALAR(SMU_MATTR(PCIE_NAK_RCVD_COUNT_ACC), SMU_MUNIT(NONE), \ 181 SMU_MTYPE(U32), pcie_nak_rcvd_count_acc); \ 182 SMU_ARRAY(SMU_MATTR(XGMI_READ_DATA_ACC), SMU_MUNIT(DATA_1), \ 183 SMU_MTYPE(U64), xgmi_read_data_acc, \ 184 SMU_13_0_6_NUM_XGMI_LINKS); \ 185 SMU_ARRAY(SMU_MATTR(XGMI_WRITE_DATA_ACC), SMU_MUNIT(DATA_1), \ 186 SMU_MTYPE(U64), xgmi_write_data_acc, \ 187 SMU_13_0_6_NUM_XGMI_LINKS); \ 188 SMU_ARRAY(SMU_MATTR(XGMI_LINK_STATUS), SMU_MUNIT(NONE), \ 189 SMU_MTYPE(U16), xgmi_link_status, \ 190 SMU_13_0_6_NUM_XGMI_LINKS); \ 191 SMU_SCALAR(SMU_MATTR(FIRMWARE_TIMESTAMP), SMU_MUNIT(TIME_2), \ 192 SMU_MTYPE(U64), firmware_timestamp); \ 193 SMU_ARRAY(SMU_MATTR(CURRENT_GFXCLK), SMU_MUNIT(CLOCK_1), \ 194 SMU_MTYPE(U16), current_gfxclk, SMU_13_0_6_MAX_GFX_CLKS); \ 195 SMU_ARRAY(SMU_MATTR(CURRENT_SOCCLK), SMU_MUNIT(CLOCK_1), \ 196 SMU_MTYPE(U16), current_socclk, SMU_13_0_6_MAX_CLKS); \ 197 SMU_ARRAY(SMU_MATTR(CURRENT_VCLK0), SMU_MUNIT(CLOCK_1), \ 198 SMU_MTYPE(U16), current_vclk0, SMU_13_0_6_MAX_CLKS); \ 199 SMU_ARRAY(SMU_MATTR(CURRENT_DCLK0), SMU_MUNIT(CLOCK_1), \ 200 SMU_MTYPE(U16), current_dclk0, SMU_13_0_6_MAX_CLKS); \ 201 SMU_SCALAR(SMU_MATTR(CURRENT_UCLK), SMU_MUNIT(CLOCK_1), \ 202 SMU_MTYPE(U16), current_uclk); \ 203 SMU_SCALAR(SMU_MATTR(PCIE_LC_PERF_OTHER_END_RECOVERY), \ 204 SMU_MUNIT(NONE), SMU_MTYPE(U32), \ 205 pcie_lc_perf_other_end_recovery); \ 206 SMU_ARRAY(SMU_MATTR(GFX_BUSY_INST), SMU_MUNIT(PERCENT), \ 207 SMU_MTYPE(U32), gfx_busy_inst, SMU_13_0_6_MAX_XCC); \ 208 SMU_ARRAY(SMU_MATTR(JPEG_BUSY), SMU_MUNIT(PERCENT), SMU_MTYPE(U16), \ 209 jpeg_busy, SMU_13_0_6_MAX_JPEG); \ 210 SMU_ARRAY(SMU_MATTR(VCN_BUSY), SMU_MUNIT(PERCENT), SMU_MTYPE(U16), \ 211 vcn_busy, SMU_13_0_6_MAX_VCN); \ 212 SMU_ARRAY(SMU_MATTR(GFX_BUSY_ACC), SMU_MUNIT(PERCENT), SMU_MTYPE(U64), \ 213 gfx_busy_acc, SMU_13_0_6_MAX_XCC); \ 214 SMU_ARRAY(SMU_MATTR(GFX_BELOW_HOST_LIMIT_PPT_ACC), SMU_MUNIT(NONE), \ 215 SMU_MTYPE(U64), gfx_below_host_limit_ppt_acc, \ 216 SMU_13_0_6_MAX_XCC); \ 217 SMU_ARRAY(SMU_MATTR(GFX_BELOW_HOST_LIMIT_THM_ACC), SMU_MUNIT(NONE), \ 218 SMU_MTYPE(U64), gfx_below_host_limit_thm_acc, \ 219 SMU_13_0_6_MAX_XCC); \ 220 SMU_ARRAY(SMU_MATTR(GFX_LOW_UTILIZATION_ACC), SMU_MUNIT(NONE), \ 221 SMU_MTYPE(U64), gfx_low_utilization_acc, \ 222 SMU_13_0_6_MAX_XCC); \ 223 SMU_ARRAY(SMU_MATTR(GFX_BELOW_HOST_LIMIT_TOTAL_ACC), SMU_MUNIT(NONE), \ 224 SMU_MTYPE(U64), gfx_below_host_limit_total_acc, \ 225 SMU_13_0_6_MAX_XCC); 226 227 DECLARE_SMU_METRICS_CLASS(smu_v13_0_6_gpu_metrics, SMU_13_0_6_METRICS_FIELDS); 228 void smu_v13_0_12_get_gpu_metrics(struct smu_context *smu, void **table, 229 void *smu_metrics, 230 struct smu_v13_0_6_gpu_metrics *gpu_metrics); 231 232 #define SMU_13_0_6_PARTITION_METRICS_FIELDS(SMU_SCALAR, SMU_ARRAY) \ 233 SMU_ARRAY(SMU_MATTR(CURRENT_GFXCLK), SMU_MUNIT(CLOCK_1), \ 234 SMU_MTYPE(U16), current_gfxclk, SMU_13_0_6_MAX_XCC); \ 235 SMU_ARRAY(SMU_MATTR(CURRENT_SOCCLK), SMU_MUNIT(CLOCK_1), \ 236 SMU_MTYPE(U16), current_socclk, SMU_13_0_6_MAX_CLKS); \ 237 SMU_ARRAY(SMU_MATTR(CURRENT_VCLK0), SMU_MUNIT(CLOCK_1), \ 238 SMU_MTYPE(U16), current_vclk0, SMU_13_0_6_MAX_CLKS); \ 239 SMU_ARRAY(SMU_MATTR(CURRENT_DCLK0), SMU_MUNIT(CLOCK_1), \ 240 SMU_MTYPE(U16), current_dclk0, SMU_13_0_6_MAX_CLKS); \ 241 SMU_SCALAR(SMU_MATTR(CURRENT_UCLK), SMU_MUNIT(CLOCK_1), \ 242 SMU_MTYPE(U16), current_uclk); \ 243 SMU_ARRAY(SMU_MATTR(GFX_BUSY_INST), SMU_MUNIT(PERCENT), \ 244 SMU_MTYPE(U32), gfx_busy_inst, SMU_13_0_6_MAX_XCC); \ 245 SMU_ARRAY(SMU_MATTR(JPEG_BUSY), SMU_MUNIT(PERCENT), SMU_MTYPE(U16), \ 246 jpeg_busy, SMU_13_0_6_MAX_JPEG); \ 247 SMU_ARRAY(SMU_MATTR(VCN_BUSY), SMU_MUNIT(PERCENT), SMU_MTYPE(U16), \ 248 vcn_busy, SMU_13_0_6_MAX_VCN); \ 249 SMU_ARRAY(SMU_MATTR(GFX_BUSY_ACC), SMU_MUNIT(PERCENT), SMU_MTYPE(U64), \ 250 gfx_busy_acc, SMU_13_0_6_MAX_XCC); \ 251 SMU_ARRAY(SMU_MATTR(GFX_BELOW_HOST_LIMIT_PPT_ACC), SMU_MUNIT(NONE), \ 252 SMU_MTYPE(U64), gfx_below_host_limit_ppt_acc, \ 253 SMU_13_0_6_MAX_XCC); \ 254 SMU_ARRAY(SMU_MATTR(GFX_BELOW_HOST_LIMIT_THM_ACC), SMU_MUNIT(NONE), \ 255 SMU_MTYPE(U64), gfx_below_host_limit_thm_acc, \ 256 SMU_13_0_6_MAX_XCC); \ 257 SMU_ARRAY(SMU_MATTR(GFX_LOW_UTILIZATION_ACC), SMU_MUNIT(NONE), \ 258 SMU_MTYPE(U64), gfx_low_utilization_acc, \ 259 SMU_13_0_6_MAX_XCC); \ 260 SMU_ARRAY(SMU_MATTR(GFX_BELOW_HOST_LIMIT_TOTAL_ACC), SMU_MUNIT(NONE), \ 261 SMU_MTYPE(U64), gfx_below_host_limit_total_acc, \ 262 SMU_13_0_6_MAX_XCC); \ 263 SMU_SCALAR(SMU_MATTR(ACCUMULATION_COUNTER), SMU_MUNIT(NONE), \ 264 SMU_MTYPE(U64), accumulation_counter); \ 265 SMU_SCALAR(SMU_MATTR(FIRMWARE_TIMESTAMP), SMU_MUNIT(TIME_2), \ 266 SMU_MTYPE(U64), firmware_timestamp); 267 268 DECLARE_SMU_METRICS_CLASS(smu_v13_0_6_partition_metrics, 269 SMU_13_0_6_PARTITION_METRICS_FIELDS); 270 271 #endif /* SWSMU_CODE_LAYER_L2 */ 272 273 #endif 274