1fb4d8502Sjsg /* 2fb4d8502Sjsg * Copyright 2017 Advanced Micro Devices, Inc. 3fb4d8502Sjsg * 4fb4d8502Sjsg * Permission is hereby granted, free of charge, to any person obtaining a 5fb4d8502Sjsg * copy of this software and associated documentation files (the "Software"), 6fb4d8502Sjsg * to deal in the Software without restriction, including without limitation 7fb4d8502Sjsg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8fb4d8502Sjsg * and/or sell copies of the Software, and to permit persons to whom the 9fb4d8502Sjsg * Software is furnished to do so, subject to the following conditions: 10fb4d8502Sjsg * 11fb4d8502Sjsg * The above copyright notice and this permission notice shall be included in 12fb4d8502Sjsg * all copies or substantial portions of the Software. 13fb4d8502Sjsg * 14fb4d8502Sjsg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15fb4d8502Sjsg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16fb4d8502Sjsg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17fb4d8502Sjsg * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18fb4d8502Sjsg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19fb4d8502Sjsg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20fb4d8502Sjsg * OTHER DEALINGS IN THE SOFTWARE. 21fb4d8502Sjsg * 22fb4d8502Sjsg */ 23fb4d8502Sjsg 24fb4d8502Sjsg #ifndef __KGD_PP_INTERFACE_H__ 25fb4d8502Sjsg #define __KGD_PP_INTERFACE_H__ 26fb4d8502Sjsg 27fb4d8502Sjsg extern const struct amdgpu_ip_block_version pp_smu_ip_block; 281bb76ff1Sjsg extern const struct amdgpu_ip_block_version smu_v11_0_ip_block; 291bb76ff1Sjsg extern const struct amdgpu_ip_block_version smu_v12_0_ip_block; 301bb76ff1Sjsg extern const struct amdgpu_ip_block_version smu_v13_0_ip_block; 311bb76ff1Sjsg 321bb76ff1Sjsg enum smu_event_type { 331bb76ff1Sjsg SMU_EVENT_RESET_COMPLETE = 0, 341bb76ff1Sjsg }; 35fb4d8502Sjsg 36fb4d8502Sjsg struct amd_vce_state { 37fb4d8502Sjsg /* vce clocks */ 38fb4d8502Sjsg u32 evclk; 39fb4d8502Sjsg u32 ecclk; 40fb4d8502Sjsg /* gpu clocks */ 41fb4d8502Sjsg u32 sclk; 42fb4d8502Sjsg u32 mclk; 43fb4d8502Sjsg u8 clk_idx; 44fb4d8502Sjsg u8 pstate; 45fb4d8502Sjsg }; 46fb4d8502Sjsg 47fb4d8502Sjsg 48fb4d8502Sjsg enum amd_dpm_forced_level { 49fb4d8502Sjsg AMD_DPM_FORCED_LEVEL_AUTO = 0x1, 50fb4d8502Sjsg AMD_DPM_FORCED_LEVEL_MANUAL = 0x2, 51fb4d8502Sjsg AMD_DPM_FORCED_LEVEL_LOW = 0x4, 52fb4d8502Sjsg AMD_DPM_FORCED_LEVEL_HIGH = 0x8, 53fb4d8502Sjsg AMD_DPM_FORCED_LEVEL_PROFILE_STANDARD = 0x10, 54fb4d8502Sjsg AMD_DPM_FORCED_LEVEL_PROFILE_MIN_SCLK = 0x20, 55fb4d8502Sjsg AMD_DPM_FORCED_LEVEL_PROFILE_MIN_MCLK = 0x40, 56fb4d8502Sjsg AMD_DPM_FORCED_LEVEL_PROFILE_PEAK = 0x80, 57fb4d8502Sjsg AMD_DPM_FORCED_LEVEL_PROFILE_EXIT = 0x100, 585ca02815Sjsg AMD_DPM_FORCED_LEVEL_PERF_DETERMINISM = 0x200, 59fb4d8502Sjsg }; 60fb4d8502Sjsg 61fb4d8502Sjsg enum amd_pm_state_type { 62fb4d8502Sjsg /* not used for dpm */ 63fb4d8502Sjsg POWER_STATE_TYPE_DEFAULT, 64fb4d8502Sjsg POWER_STATE_TYPE_POWERSAVE, 65fb4d8502Sjsg /* user selectable states */ 66fb4d8502Sjsg POWER_STATE_TYPE_BATTERY, 67fb4d8502Sjsg POWER_STATE_TYPE_BALANCED, 68fb4d8502Sjsg POWER_STATE_TYPE_PERFORMANCE, 69fb4d8502Sjsg /* internal states */ 70fb4d8502Sjsg POWER_STATE_TYPE_INTERNAL_UVD, 71fb4d8502Sjsg POWER_STATE_TYPE_INTERNAL_UVD_SD, 72fb4d8502Sjsg POWER_STATE_TYPE_INTERNAL_UVD_HD, 73fb4d8502Sjsg POWER_STATE_TYPE_INTERNAL_UVD_HD2, 74fb4d8502Sjsg POWER_STATE_TYPE_INTERNAL_UVD_MVC, 75fb4d8502Sjsg POWER_STATE_TYPE_INTERNAL_BOOT, 76fb4d8502Sjsg POWER_STATE_TYPE_INTERNAL_THERMAL, 77fb4d8502Sjsg POWER_STATE_TYPE_INTERNAL_ACPI, 78fb4d8502Sjsg POWER_STATE_TYPE_INTERNAL_ULV, 79fb4d8502Sjsg POWER_STATE_TYPE_INTERNAL_3DPERF, 80fb4d8502Sjsg }; 81fb4d8502Sjsg 82fb4d8502Sjsg #define AMD_MAX_VCE_LEVELS 6 83fb4d8502Sjsg 84fb4d8502Sjsg enum amd_vce_level { 85fb4d8502Sjsg AMD_VCE_LEVEL_AC_ALL = 0, /* AC, All cases */ 86fb4d8502Sjsg AMD_VCE_LEVEL_DC_EE = 1, /* DC, entropy encoding */ 87fb4d8502Sjsg AMD_VCE_LEVEL_DC_LL_LOW = 2, /* DC, low latency queue, res <= 720 */ 88fb4d8502Sjsg AMD_VCE_LEVEL_DC_LL_HIGH = 3, /* DC, low latency queue, 1080 >= res > 720 */ 89fb4d8502Sjsg AMD_VCE_LEVEL_DC_GP_LOW = 4, /* DC, general purpose queue, res <= 720 */ 90fb4d8502Sjsg AMD_VCE_LEVEL_DC_GP_HIGH = 5, /* DC, general purpose queue, 1080 >= res > 720 */ 91fb4d8502Sjsg }; 92fb4d8502Sjsg 93fb4d8502Sjsg enum amd_fan_ctrl_mode { 94fb4d8502Sjsg AMD_FAN_CTRL_NONE = 0, 95fb4d8502Sjsg AMD_FAN_CTRL_MANUAL = 1, 96fb4d8502Sjsg AMD_FAN_CTRL_AUTO = 2, 97fb4d8502Sjsg }; 98fb4d8502Sjsg 99fb4d8502Sjsg enum pp_clock_type { 100fb4d8502Sjsg PP_SCLK, 101fb4d8502Sjsg PP_MCLK, 102fb4d8502Sjsg PP_PCIE, 103c349dbc7Sjsg PP_SOCCLK, 104c349dbc7Sjsg PP_FCLK, 105c349dbc7Sjsg PP_DCEFCLK, 1065ca02815Sjsg PP_VCLK, 107*f005ef32Sjsg PP_VCLK1, 1085ca02815Sjsg PP_DCLK, 109*f005ef32Sjsg PP_DCLK1, 110fb4d8502Sjsg OD_SCLK, 111fb4d8502Sjsg OD_MCLK, 112c349dbc7Sjsg OD_VDDC_CURVE, 113fb4d8502Sjsg OD_RANGE, 1145ca02815Sjsg OD_VDDGFX_OFFSET, 1155ca02815Sjsg OD_CCLK, 116fb4d8502Sjsg }; 117fb4d8502Sjsg 118fb4d8502Sjsg enum amd_pp_sensors { 119fb4d8502Sjsg AMDGPU_PP_SENSOR_GFX_SCLK = 0, 1205ca02815Sjsg AMDGPU_PP_SENSOR_CPU_CLK, 121fb4d8502Sjsg AMDGPU_PP_SENSOR_VDDNB, 122fb4d8502Sjsg AMDGPU_PP_SENSOR_VDDGFX, 123fb4d8502Sjsg AMDGPU_PP_SENSOR_UVD_VCLK, 124fb4d8502Sjsg AMDGPU_PP_SENSOR_UVD_DCLK, 125fb4d8502Sjsg AMDGPU_PP_SENSOR_VCE_ECCLK, 126fb4d8502Sjsg AMDGPU_PP_SENSOR_GPU_LOAD, 127c349dbc7Sjsg AMDGPU_PP_SENSOR_MEM_LOAD, 128fb4d8502Sjsg AMDGPU_PP_SENSOR_GFX_MCLK, 129fb4d8502Sjsg AMDGPU_PP_SENSOR_GPU_TEMP, 130c349dbc7Sjsg AMDGPU_PP_SENSOR_EDGE_TEMP = AMDGPU_PP_SENSOR_GPU_TEMP, 131c349dbc7Sjsg AMDGPU_PP_SENSOR_HOTSPOT_TEMP, 132c349dbc7Sjsg AMDGPU_PP_SENSOR_MEM_TEMP, 133fb4d8502Sjsg AMDGPU_PP_SENSOR_VCE_POWER, 134fb4d8502Sjsg AMDGPU_PP_SENSOR_UVD_POWER, 135*f005ef32Sjsg AMDGPU_PP_SENSOR_GPU_AVG_POWER, 136*f005ef32Sjsg AMDGPU_PP_SENSOR_GPU_INPUT_POWER, 1375ca02815Sjsg AMDGPU_PP_SENSOR_SS_APU_SHARE, 1385ca02815Sjsg AMDGPU_PP_SENSOR_SS_DGPU_SHARE, 139fb4d8502Sjsg AMDGPU_PP_SENSOR_STABLE_PSTATE_SCLK, 140fb4d8502Sjsg AMDGPU_PP_SENSOR_STABLE_PSTATE_MCLK, 141c349dbc7Sjsg AMDGPU_PP_SENSOR_ENABLED_SMC_FEATURES_MASK, 142c349dbc7Sjsg AMDGPU_PP_SENSOR_MIN_FAN_RPM, 143c349dbc7Sjsg AMDGPU_PP_SENSOR_MAX_FAN_RPM, 144c349dbc7Sjsg AMDGPU_PP_SENSOR_VCN_POWER_STATE, 1458feffbfbSjsg AMDGPU_PP_SENSOR_PEAK_PSTATE_SCLK, 1468feffbfbSjsg AMDGPU_PP_SENSOR_PEAK_PSTATE_MCLK, 147fb4d8502Sjsg }; 148fb4d8502Sjsg 149fb4d8502Sjsg enum amd_pp_task { 150fb4d8502Sjsg AMD_PP_TASK_DISPLAY_CONFIG_CHANGE, 151fb4d8502Sjsg AMD_PP_TASK_ENABLE_USER_STATE, 152fb4d8502Sjsg AMD_PP_TASK_READJUST_POWER_STATE, 153fb4d8502Sjsg AMD_PP_TASK_COMPLETE_INIT, 154fb4d8502Sjsg AMD_PP_TASK_MAX 155fb4d8502Sjsg }; 156fb4d8502Sjsg 157fb4d8502Sjsg enum PP_SMC_POWER_PROFILE { 158c349dbc7Sjsg PP_SMC_POWER_PROFILE_BOOTUP_DEFAULT = 0x0, 159c349dbc7Sjsg PP_SMC_POWER_PROFILE_FULLSCREEN3D = 0x1, 160c349dbc7Sjsg PP_SMC_POWER_PROFILE_POWERSAVING = 0x2, 161c349dbc7Sjsg PP_SMC_POWER_PROFILE_VIDEO = 0x3, 162c349dbc7Sjsg PP_SMC_POWER_PROFILE_VR = 0x4, 163c349dbc7Sjsg PP_SMC_POWER_PROFILE_COMPUTE = 0x5, 164c349dbc7Sjsg PP_SMC_POWER_PROFILE_CUSTOM = 0x6, 1651bb76ff1Sjsg PP_SMC_POWER_PROFILE_WINDOW3D = 0x7, 166*f005ef32Sjsg PP_SMC_POWER_PROFILE_CAPPED = 0x8, 167*f005ef32Sjsg PP_SMC_POWER_PROFILE_UNCAPPED = 0x9, 168c349dbc7Sjsg PP_SMC_POWER_PROFILE_COUNT, 169fb4d8502Sjsg }; 170fb4d8502Sjsg 1711bb76ff1Sjsg extern const char * const amdgpu_pp_profile_name[PP_SMC_POWER_PROFILE_COUNT]; 1721bb76ff1Sjsg 1731bb76ff1Sjsg 1741bb76ff1Sjsg 175fb4d8502Sjsg enum { 176fb4d8502Sjsg PP_GROUP_UNKNOWN = 0, 177fb4d8502Sjsg PP_GROUP_GFX = 1, 178fb4d8502Sjsg PP_GROUP_SYS, 179fb4d8502Sjsg PP_GROUP_MAX 180fb4d8502Sjsg }; 181fb4d8502Sjsg 182fb4d8502Sjsg enum PP_OD_DPM_TABLE_COMMAND { 183fb4d8502Sjsg PP_OD_EDIT_SCLK_VDDC_TABLE, 184fb4d8502Sjsg PP_OD_EDIT_MCLK_VDDC_TABLE, 1855ca02815Sjsg PP_OD_EDIT_CCLK_VDDC_TABLE, 186c349dbc7Sjsg PP_OD_EDIT_VDDC_CURVE, 187fb4d8502Sjsg PP_OD_RESTORE_DEFAULT_TABLE, 1885ca02815Sjsg PP_OD_COMMIT_DPM_TABLE, 1895ca02815Sjsg PP_OD_EDIT_VDDGFX_OFFSET 190fb4d8502Sjsg }; 191fb4d8502Sjsg 192fb4d8502Sjsg struct pp_states_info { 193fb4d8502Sjsg uint32_t nums; 194fb4d8502Sjsg uint32_t states[16]; 195fb4d8502Sjsg }; 196fb4d8502Sjsg 197c349dbc7Sjsg enum PP_HWMON_TEMP { 198c349dbc7Sjsg PP_TEMP_EDGE = 0, 199c349dbc7Sjsg PP_TEMP_JUNCTION, 200c349dbc7Sjsg PP_TEMP_MEM, 201c349dbc7Sjsg PP_TEMP_MAX 202c349dbc7Sjsg }; 203c349dbc7Sjsg 204c349dbc7Sjsg enum pp_mp1_state { 205c349dbc7Sjsg PP_MP1_STATE_NONE, 206c349dbc7Sjsg PP_MP1_STATE_SHUTDOWN, 207c349dbc7Sjsg PP_MP1_STATE_UNLOAD, 208c349dbc7Sjsg PP_MP1_STATE_RESET, 209c349dbc7Sjsg }; 210c349dbc7Sjsg 211c349dbc7Sjsg enum pp_df_cstate { 212c349dbc7Sjsg DF_CSTATE_DISALLOW = 0, 213c349dbc7Sjsg DF_CSTATE_ALLOW, 214c349dbc7Sjsg }; 215c349dbc7Sjsg 2165ca02815Sjsg /** 2175ca02815Sjsg * DOC: amdgpu_pp_power 2185ca02815Sjsg * 2195ca02815Sjsg * APU power is managed to system-level requirements through the PPT 2205ca02815Sjsg * (package power tracking) feature. PPT is intended to limit power to the 2215ca02815Sjsg * requirements of the power source and could be dynamically updated to 2225ca02815Sjsg * maximize APU performance within the system power budget. 2235ca02815Sjsg * 2245ca02815Sjsg * Two types of power measurement can be requested, where supported, with 2255ca02815Sjsg * :c:type:`enum pp_power_type <pp_power_type>`. 2265ca02815Sjsg */ 2275ca02815Sjsg 2285ca02815Sjsg /** 2295ca02815Sjsg * enum pp_power_limit_level - Used to query the power limits 2305ca02815Sjsg * 2315ca02815Sjsg * @PP_PWR_LIMIT_MIN: Minimum Power Limit 2325ca02815Sjsg * @PP_PWR_LIMIT_CURRENT: Current Power Limit 2335ca02815Sjsg * @PP_PWR_LIMIT_DEFAULT: Default Power Limit 2345ca02815Sjsg * @PP_PWR_LIMIT_MAX: Maximum Power Limit 2355ca02815Sjsg */ 2365ca02815Sjsg enum pp_power_limit_level 2375ca02815Sjsg { 2385ca02815Sjsg PP_PWR_LIMIT_MIN = -1, 2395ca02815Sjsg PP_PWR_LIMIT_CURRENT, 2405ca02815Sjsg PP_PWR_LIMIT_DEFAULT, 2415ca02815Sjsg PP_PWR_LIMIT_MAX, 2425ca02815Sjsg }; 2435ca02815Sjsg 2445ca02815Sjsg /** 2455ca02815Sjsg * enum pp_power_type - Used to specify the type of the requested power 2465ca02815Sjsg * 2475ca02815Sjsg * @PP_PWR_TYPE_SUSTAINED: manages the configurable, thermally significant 2485ca02815Sjsg * moving average of APU power (default ~5000 ms). 2495ca02815Sjsg * @PP_PWR_TYPE_FAST: manages the ~10 ms moving average of APU power, 2505ca02815Sjsg * where supported. 2515ca02815Sjsg */ 2525ca02815Sjsg enum pp_power_type 2535ca02815Sjsg { 2545ca02815Sjsg PP_PWR_TYPE_SUSTAINED, 2555ca02815Sjsg PP_PWR_TYPE_FAST, 2565ca02815Sjsg }; 2575ca02815Sjsg 258fb4d8502Sjsg #define PP_GROUP_MASK 0xF0000000 259fb4d8502Sjsg #define PP_GROUP_SHIFT 28 260fb4d8502Sjsg 261fb4d8502Sjsg #define PP_BLOCK_MASK 0x0FFFFF00 262fb4d8502Sjsg #define PP_BLOCK_SHIFT 8 263fb4d8502Sjsg 264fb4d8502Sjsg #define PP_BLOCK_GFX_CG 0x01 265fb4d8502Sjsg #define PP_BLOCK_GFX_MG 0x02 266fb4d8502Sjsg #define PP_BLOCK_GFX_3D 0x04 267fb4d8502Sjsg #define PP_BLOCK_GFX_RLC 0x08 268fb4d8502Sjsg #define PP_BLOCK_GFX_CP 0x10 269fb4d8502Sjsg #define PP_BLOCK_SYS_BIF 0x01 270fb4d8502Sjsg #define PP_BLOCK_SYS_MC 0x02 271fb4d8502Sjsg #define PP_BLOCK_SYS_ROM 0x04 272fb4d8502Sjsg #define PP_BLOCK_SYS_DRM 0x08 273fb4d8502Sjsg #define PP_BLOCK_SYS_HDP 0x10 274fb4d8502Sjsg #define PP_BLOCK_SYS_SDMA 0x20 275fb4d8502Sjsg 276fb4d8502Sjsg #define PP_STATE_MASK 0x0000000F 277fb4d8502Sjsg #define PP_STATE_SHIFT 0 278fb4d8502Sjsg #define PP_STATE_SUPPORT_MASK 0x000000F0 279fb4d8502Sjsg #define PP_STATE_SUPPORT_SHIFT 0 280fb4d8502Sjsg 281fb4d8502Sjsg #define PP_STATE_CG 0x01 282fb4d8502Sjsg #define PP_STATE_LS 0x02 283fb4d8502Sjsg #define PP_STATE_DS 0x04 284fb4d8502Sjsg #define PP_STATE_SD 0x08 285fb4d8502Sjsg #define PP_STATE_SUPPORT_CG 0x10 286fb4d8502Sjsg #define PP_STATE_SUPPORT_LS 0x20 287fb4d8502Sjsg #define PP_STATE_SUPPORT_DS 0x40 288fb4d8502Sjsg #define PP_STATE_SUPPORT_SD 0x80 289fb4d8502Sjsg 290fb4d8502Sjsg #define PP_CG_MSG_ID(group, block, support, state) \ 291fb4d8502Sjsg ((group) << PP_GROUP_SHIFT | (block) << PP_BLOCK_SHIFT | \ 292fb4d8502Sjsg (support) << PP_STATE_SUPPORT_SHIFT | (state) << PP_STATE_SHIFT) 293fb4d8502Sjsg 294c349dbc7Sjsg #define XGMI_MODE_PSTATE_D3 0 295c349dbc7Sjsg #define XGMI_MODE_PSTATE_D0 1 296c349dbc7Sjsg 2975ca02815Sjsg #define NUM_HBM_INSTANCES 4 2985ca02815Sjsg 299fb4d8502Sjsg struct seq_file; 300fb4d8502Sjsg enum amd_pp_clock_type; 301fb4d8502Sjsg struct amd_pp_simple_clock_info; 302fb4d8502Sjsg struct amd_pp_display_configuration; 303fb4d8502Sjsg struct amd_pp_clock_info; 304fb4d8502Sjsg struct pp_display_clock_request; 305fb4d8502Sjsg struct pp_clock_levels_with_voltage; 306fb4d8502Sjsg struct pp_clock_levels_with_latency; 307fb4d8502Sjsg struct amd_pp_clocks; 3085ca02815Sjsg struct pp_smu_wm_range_sets; 3095ca02815Sjsg struct pp_smu_nv_clock_table; 3105ca02815Sjsg struct dpm_clocks; 311fb4d8502Sjsg 312fb4d8502Sjsg struct amd_pm_funcs { 313fb4d8502Sjsg /* export for dpm on ci and si */ 314fb4d8502Sjsg int (*pre_set_power_state)(void *handle); 315fb4d8502Sjsg int (*set_power_state)(void *handle); 316fb4d8502Sjsg void (*post_set_power_state)(void *handle); 317fb4d8502Sjsg void (*display_configuration_changed)(void *handle); 318fb4d8502Sjsg void (*print_power_state)(void *handle, void *ps); 319fb4d8502Sjsg bool (*vblank_too_short)(void *handle); 320fb4d8502Sjsg void (*enable_bapm)(void *handle, bool enable); 321fb4d8502Sjsg int (*check_state_equal)(void *handle, 322fb4d8502Sjsg void *cps, 323fb4d8502Sjsg void *rps, 324fb4d8502Sjsg bool *equal); 325fb4d8502Sjsg /* export for sysfs */ 3261bb76ff1Sjsg int (*set_fan_control_mode)(void *handle, u32 mode); 3271bb76ff1Sjsg int (*get_fan_control_mode)(void *handle, u32 *fan_mode); 3285ca02815Sjsg int (*set_fan_speed_pwm)(void *handle, u32 speed); 3295ca02815Sjsg int (*get_fan_speed_pwm)(void *handle, u32 *speed); 330fb4d8502Sjsg int (*force_clock_level)(void *handle, enum pp_clock_type type, uint32_t mask); 331fb4d8502Sjsg int (*print_clock_levels)(void *handle, enum pp_clock_type type, char *buf); 3321bb76ff1Sjsg int (*emit_clock_levels)(void *handle, enum pp_clock_type type, char *buf, int *offset); 333fb4d8502Sjsg int (*force_performance_level)(void *handle, enum amd_dpm_forced_level level); 334fb4d8502Sjsg int (*get_sclk_od)(void *handle); 335fb4d8502Sjsg int (*set_sclk_od)(void *handle, uint32_t value); 336fb4d8502Sjsg int (*get_mclk_od)(void *handle); 337fb4d8502Sjsg int (*set_mclk_od)(void *handle, uint32_t value); 338fb4d8502Sjsg int (*read_sensor)(void *handle, int idx, void *value, int *size); 339*f005ef32Sjsg int (*get_apu_thermal_limit)(void *handle, uint32_t *limit); 340*f005ef32Sjsg int (*set_apu_thermal_limit)(void *handle, uint32_t limit); 341fb4d8502Sjsg enum amd_dpm_forced_level (*get_performance_level)(void *handle); 342fb4d8502Sjsg enum amd_pm_state_type (*get_current_power_state)(void *handle); 343fb4d8502Sjsg int (*get_fan_speed_rpm)(void *handle, uint32_t *rpm); 344c349dbc7Sjsg int (*set_fan_speed_rpm)(void *handle, uint32_t rpm); 345fb4d8502Sjsg int (*get_pp_num_states)(void *handle, struct pp_states_info *data); 346fb4d8502Sjsg int (*get_pp_table)(void *handle, char **table); 347fb4d8502Sjsg int (*set_pp_table)(void *handle, const char *buf, size_t size); 348fb4d8502Sjsg void (*debugfs_print_current_performance_level)(void *handle, struct seq_file *m); 349fb4d8502Sjsg int (*switch_power_profile)(void *handle, enum PP_SMC_POWER_PROFILE type, bool en); 350fb4d8502Sjsg /* export to amdgpu */ 351fb4d8502Sjsg struct amd_vce_state *(*get_vce_clock_state)(void *handle, u32 idx); 352fb4d8502Sjsg int (*dispatch_tasks)(void *handle, enum amd_pp_task task_id, 353fb4d8502Sjsg enum amd_pm_state_type *user_state); 354fb4d8502Sjsg int (*load_firmware)(void *handle); 355fb4d8502Sjsg int (*wait_for_fw_loading_complete)(void *handle); 356fb4d8502Sjsg int (*set_powergating_by_smu)(void *handle, 357fb4d8502Sjsg uint32_t block_type, bool gate); 358fb4d8502Sjsg int (*set_clockgating_by_smu)(void *handle, uint32_t msg_id); 359fb4d8502Sjsg int (*set_power_limit)(void *handle, uint32_t n); 3605ca02815Sjsg int (*get_power_limit)(void *handle, uint32_t *limit, 3615ca02815Sjsg enum pp_power_limit_level pp_limit_level, 3625ca02815Sjsg enum pp_power_type power_type); 363fb4d8502Sjsg int (*get_power_profile_mode)(void *handle, char *buf); 364fb4d8502Sjsg int (*set_power_profile_mode)(void *handle, long *input, uint32_t size); 365ad8b1aafSjsg int (*set_fine_grain_clk_vol)(void *handle, uint32_t type, long *input, uint32_t size); 3661bb76ff1Sjsg int (*odn_edit_dpm_table)(void *handle, enum PP_OD_DPM_TABLE_COMMAND type, 3671bb76ff1Sjsg long *input, uint32_t size); 368c349dbc7Sjsg int (*set_mp1_state)(void *handle, enum pp_mp1_state mp1_state); 369c349dbc7Sjsg int (*smu_i2c_bus_access)(void *handle, bool acquire); 3705ca02815Sjsg int (*gfx_state_change_set)(void *handle, uint32_t state); 371fb4d8502Sjsg /* export to DC */ 372fb4d8502Sjsg u32 (*get_sclk)(void *handle, bool low); 373fb4d8502Sjsg u32 (*get_mclk)(void *handle, bool low); 374fb4d8502Sjsg int (*display_configuration_change)(void *handle, 375fb4d8502Sjsg const struct amd_pp_display_configuration *input); 376fb4d8502Sjsg int (*get_display_power_level)(void *handle, 377fb4d8502Sjsg struct amd_pp_simple_clock_info *output); 378fb4d8502Sjsg int (*get_current_clocks)(void *handle, 379fb4d8502Sjsg struct amd_pp_clock_info *clocks); 380fb4d8502Sjsg int (*get_clock_by_type)(void *handle, 381fb4d8502Sjsg enum amd_pp_clock_type type, 382fb4d8502Sjsg struct amd_pp_clocks *clocks); 383fb4d8502Sjsg int (*get_clock_by_type_with_latency)(void *handle, 384fb4d8502Sjsg enum amd_pp_clock_type type, 385fb4d8502Sjsg struct pp_clock_levels_with_latency *clocks); 386fb4d8502Sjsg int (*get_clock_by_type_with_voltage)(void *handle, 387fb4d8502Sjsg enum amd_pp_clock_type type, 388fb4d8502Sjsg struct pp_clock_levels_with_voltage *clocks); 389fb4d8502Sjsg int (*set_watermarks_for_clocks_ranges)(void *handle, 390fb4d8502Sjsg void *clock_ranges); 391fb4d8502Sjsg int (*display_clock_voltage_request)(void *handle, 392fb4d8502Sjsg struct pp_display_clock_request *clock); 393fb4d8502Sjsg int (*get_display_mode_validation_clocks)(void *handle, 394fb4d8502Sjsg struct amd_pp_simple_clock_info *clocks); 395fb4d8502Sjsg int (*notify_smu_enable_pwe)(void *handle); 396c349dbc7Sjsg int (*enable_mgpu_fan_boost)(void *handle); 397c349dbc7Sjsg int (*set_active_display_count)(void *handle, uint32_t count); 398c349dbc7Sjsg int (*set_hard_min_dcefclk_by_freq)(void *handle, uint32_t clock); 399c349dbc7Sjsg int (*set_hard_min_fclk_by_freq)(void *handle, uint32_t clock); 400c349dbc7Sjsg int (*set_min_deep_sleep_dcefclk)(void *handle, uint32_t clock); 401c349dbc7Sjsg int (*get_asic_baco_capability)(void *handle, bool *cap); 402c349dbc7Sjsg int (*get_asic_baco_state)(void *handle, int *state); 403c349dbc7Sjsg int (*set_asic_baco_state)(void *handle, int state); 404c349dbc7Sjsg int (*get_ppfeature_status)(void *handle, char *buf); 405c349dbc7Sjsg int (*set_ppfeature_status)(void *handle, uint64_t ppfeature_masks); 406c349dbc7Sjsg int (*asic_reset_mode_2)(void *handle); 407*f005ef32Sjsg int (*asic_reset_enable_gfx_features)(void *handle); 408c349dbc7Sjsg int (*set_df_cstate)(void *handle, enum pp_df_cstate state); 409c349dbc7Sjsg int (*set_xgmi_pstate)(void *handle, uint32_t pstate); 410ad8b1aafSjsg ssize_t (*get_gpu_metrics)(void *handle, void **table); 4115ca02815Sjsg int (*set_watermarks_for_clock_ranges)(void *handle, 4125ca02815Sjsg struct pp_smu_wm_range_sets *ranges); 4135ca02815Sjsg int (*display_disable_memory_clock_switch)(void *handle, 4145ca02815Sjsg bool disable_memory_clock_switch); 4155ca02815Sjsg int (*get_max_sustainable_clocks_by_dc)(void *handle, 4165ca02815Sjsg struct pp_smu_nv_clock_table *max_clocks); 4175ca02815Sjsg int (*get_uclk_dpm_states)(void *handle, 4185ca02815Sjsg unsigned int *clock_values_in_khz, 4195ca02815Sjsg unsigned int *num_states); 4205ca02815Sjsg int (*get_dpm_clock_table)(void *handle, 4215ca02815Sjsg struct dpm_clocks *clock_table); 4225ca02815Sjsg int (*get_smu_prv_buf_details)(void *handle, void **addr, size_t *size); 4231bb76ff1Sjsg void (*pm_compute_clocks)(void *handle); 424ad8b1aafSjsg }; 425ad8b1aafSjsg 426ad8b1aafSjsg struct metrics_table_header { 427ad8b1aafSjsg uint16_t structure_size; 428ad8b1aafSjsg uint8_t format_revision; 429ad8b1aafSjsg uint8_t content_revision; 430ad8b1aafSjsg }; 431ad8b1aafSjsg 4325ca02815Sjsg /* 4335ca02815Sjsg * gpu_metrics_v1_0 is not recommended as it's not naturally aligned. 4345ca02815Sjsg * Use gpu_metrics_v1_1 or later instead. 4355ca02815Sjsg */ 436ad8b1aafSjsg struct gpu_metrics_v1_0 { 437ad8b1aafSjsg struct metrics_table_header common_header; 438ad8b1aafSjsg 439ad8b1aafSjsg /* Driver attached timestamp (in ns) */ 440ad8b1aafSjsg uint64_t system_clock_counter; 441ad8b1aafSjsg 442ad8b1aafSjsg /* Temperature */ 443ad8b1aafSjsg uint16_t temperature_edge; 444ad8b1aafSjsg uint16_t temperature_hotspot; 445ad8b1aafSjsg uint16_t temperature_mem; 446ad8b1aafSjsg uint16_t temperature_vrgfx; 447ad8b1aafSjsg uint16_t temperature_vrsoc; 448ad8b1aafSjsg uint16_t temperature_vrmem; 449ad8b1aafSjsg 450ad8b1aafSjsg /* Utilization */ 451ad8b1aafSjsg uint16_t average_gfx_activity; 452ad8b1aafSjsg uint16_t average_umc_activity; // memory controller 453ad8b1aafSjsg uint16_t average_mm_activity; // UVD or VCN 454ad8b1aafSjsg 455ad8b1aafSjsg /* Power/Energy */ 456ad8b1aafSjsg uint16_t average_socket_power; 457ad8b1aafSjsg uint32_t energy_accumulator; 458ad8b1aafSjsg 459ad8b1aafSjsg /* Average clocks */ 460ad8b1aafSjsg uint16_t average_gfxclk_frequency; 461ad8b1aafSjsg uint16_t average_socclk_frequency; 462ad8b1aafSjsg uint16_t average_uclk_frequency; 463ad8b1aafSjsg uint16_t average_vclk0_frequency; 464ad8b1aafSjsg uint16_t average_dclk0_frequency; 465ad8b1aafSjsg uint16_t average_vclk1_frequency; 466ad8b1aafSjsg uint16_t average_dclk1_frequency; 467ad8b1aafSjsg 468ad8b1aafSjsg /* Current clocks */ 469ad8b1aafSjsg uint16_t current_gfxclk; 470ad8b1aafSjsg uint16_t current_socclk; 471ad8b1aafSjsg uint16_t current_uclk; 472ad8b1aafSjsg uint16_t current_vclk0; 473ad8b1aafSjsg uint16_t current_dclk0; 474ad8b1aafSjsg uint16_t current_vclk1; 475ad8b1aafSjsg uint16_t current_dclk1; 476ad8b1aafSjsg 477ad8b1aafSjsg /* Throttle status */ 478ad8b1aafSjsg uint32_t throttle_status; 479ad8b1aafSjsg 480ad8b1aafSjsg /* Fans */ 481ad8b1aafSjsg uint16_t current_fan_speed; 482ad8b1aafSjsg 483ad8b1aafSjsg /* Link width/speed */ 484ad8b1aafSjsg uint8_t pcie_link_width; 485ad8b1aafSjsg uint8_t pcie_link_speed; // in 0.1 GT/s 486ad8b1aafSjsg }; 487ad8b1aafSjsg 4885ca02815Sjsg struct gpu_metrics_v1_1 { 4895ca02815Sjsg struct metrics_table_header common_header; 4905ca02815Sjsg 4915ca02815Sjsg /* Temperature */ 4925ca02815Sjsg uint16_t temperature_edge; 4935ca02815Sjsg uint16_t temperature_hotspot; 4945ca02815Sjsg uint16_t temperature_mem; 4955ca02815Sjsg uint16_t temperature_vrgfx; 4965ca02815Sjsg uint16_t temperature_vrsoc; 4975ca02815Sjsg uint16_t temperature_vrmem; 4985ca02815Sjsg 4995ca02815Sjsg /* Utilization */ 5005ca02815Sjsg uint16_t average_gfx_activity; 5015ca02815Sjsg uint16_t average_umc_activity; // memory controller 5025ca02815Sjsg uint16_t average_mm_activity; // UVD or VCN 5035ca02815Sjsg 5045ca02815Sjsg /* Power/Energy */ 5055ca02815Sjsg uint16_t average_socket_power; 5065ca02815Sjsg uint64_t energy_accumulator; 5075ca02815Sjsg 5085ca02815Sjsg /* Driver attached timestamp (in ns) */ 5095ca02815Sjsg uint64_t system_clock_counter; 5105ca02815Sjsg 5115ca02815Sjsg /* Average clocks */ 5125ca02815Sjsg uint16_t average_gfxclk_frequency; 5135ca02815Sjsg uint16_t average_socclk_frequency; 5145ca02815Sjsg uint16_t average_uclk_frequency; 5155ca02815Sjsg uint16_t average_vclk0_frequency; 5165ca02815Sjsg uint16_t average_dclk0_frequency; 5175ca02815Sjsg uint16_t average_vclk1_frequency; 5185ca02815Sjsg uint16_t average_dclk1_frequency; 5195ca02815Sjsg 5205ca02815Sjsg /* Current clocks */ 5215ca02815Sjsg uint16_t current_gfxclk; 5225ca02815Sjsg uint16_t current_socclk; 5235ca02815Sjsg uint16_t current_uclk; 5245ca02815Sjsg uint16_t current_vclk0; 5255ca02815Sjsg uint16_t current_dclk0; 5265ca02815Sjsg uint16_t current_vclk1; 5275ca02815Sjsg uint16_t current_dclk1; 5285ca02815Sjsg 5295ca02815Sjsg /* Throttle status */ 5305ca02815Sjsg uint32_t throttle_status; 5315ca02815Sjsg 5325ca02815Sjsg /* Fans */ 5335ca02815Sjsg uint16_t current_fan_speed; 5345ca02815Sjsg 5355ca02815Sjsg /* Link width/speed */ 5365ca02815Sjsg uint16_t pcie_link_width; 5375ca02815Sjsg uint16_t pcie_link_speed; // in 0.1 GT/s 5385ca02815Sjsg 5395ca02815Sjsg uint16_t padding; 5405ca02815Sjsg 5415ca02815Sjsg uint32_t gfx_activity_acc; 5425ca02815Sjsg uint32_t mem_activity_acc; 5435ca02815Sjsg 5445ca02815Sjsg uint16_t temperature_hbm[NUM_HBM_INSTANCES]; 5455ca02815Sjsg }; 5465ca02815Sjsg 5475ca02815Sjsg struct gpu_metrics_v1_2 { 5485ca02815Sjsg struct metrics_table_header common_header; 5495ca02815Sjsg 5505ca02815Sjsg /* Temperature */ 5515ca02815Sjsg uint16_t temperature_edge; 5525ca02815Sjsg uint16_t temperature_hotspot; 5535ca02815Sjsg uint16_t temperature_mem; 5545ca02815Sjsg uint16_t temperature_vrgfx; 5555ca02815Sjsg uint16_t temperature_vrsoc; 5565ca02815Sjsg uint16_t temperature_vrmem; 5575ca02815Sjsg 5585ca02815Sjsg /* Utilization */ 5595ca02815Sjsg uint16_t average_gfx_activity; 5605ca02815Sjsg uint16_t average_umc_activity; // memory controller 5615ca02815Sjsg uint16_t average_mm_activity; // UVD or VCN 5625ca02815Sjsg 5635ca02815Sjsg /* Power/Energy */ 5645ca02815Sjsg uint16_t average_socket_power; 5655ca02815Sjsg uint64_t energy_accumulator; 5665ca02815Sjsg 5675ca02815Sjsg /* Driver attached timestamp (in ns) */ 5685ca02815Sjsg uint64_t system_clock_counter; 5695ca02815Sjsg 5705ca02815Sjsg /* Average clocks */ 5715ca02815Sjsg uint16_t average_gfxclk_frequency; 5725ca02815Sjsg uint16_t average_socclk_frequency; 5735ca02815Sjsg uint16_t average_uclk_frequency; 5745ca02815Sjsg uint16_t average_vclk0_frequency; 5755ca02815Sjsg uint16_t average_dclk0_frequency; 5765ca02815Sjsg uint16_t average_vclk1_frequency; 5775ca02815Sjsg uint16_t average_dclk1_frequency; 5785ca02815Sjsg 5795ca02815Sjsg /* Current clocks */ 5805ca02815Sjsg uint16_t current_gfxclk; 5815ca02815Sjsg uint16_t current_socclk; 5825ca02815Sjsg uint16_t current_uclk; 5835ca02815Sjsg uint16_t current_vclk0; 5845ca02815Sjsg uint16_t current_dclk0; 5855ca02815Sjsg uint16_t current_vclk1; 5865ca02815Sjsg uint16_t current_dclk1; 5875ca02815Sjsg 5885ca02815Sjsg /* Throttle status (ASIC dependent) */ 5895ca02815Sjsg uint32_t throttle_status; 5905ca02815Sjsg 5915ca02815Sjsg /* Fans */ 5925ca02815Sjsg uint16_t current_fan_speed; 5935ca02815Sjsg 5945ca02815Sjsg /* Link width/speed */ 5955ca02815Sjsg uint16_t pcie_link_width; 5965ca02815Sjsg uint16_t pcie_link_speed; // in 0.1 GT/s 5975ca02815Sjsg 5985ca02815Sjsg uint16_t padding; 5995ca02815Sjsg 6005ca02815Sjsg uint32_t gfx_activity_acc; 6015ca02815Sjsg uint32_t mem_activity_acc; 6025ca02815Sjsg 6035ca02815Sjsg uint16_t temperature_hbm[NUM_HBM_INSTANCES]; 6045ca02815Sjsg 6055ca02815Sjsg /* PMFW attached timestamp (10ns resolution) */ 6065ca02815Sjsg uint64_t firmware_timestamp; 6075ca02815Sjsg }; 6085ca02815Sjsg 6095ca02815Sjsg struct gpu_metrics_v1_3 { 6105ca02815Sjsg struct metrics_table_header common_header; 6115ca02815Sjsg 6125ca02815Sjsg /* Temperature */ 6135ca02815Sjsg uint16_t temperature_edge; 6145ca02815Sjsg uint16_t temperature_hotspot; 6155ca02815Sjsg uint16_t temperature_mem; 6165ca02815Sjsg uint16_t temperature_vrgfx; 6175ca02815Sjsg uint16_t temperature_vrsoc; 6185ca02815Sjsg uint16_t temperature_vrmem; 6195ca02815Sjsg 6205ca02815Sjsg /* Utilization */ 6215ca02815Sjsg uint16_t average_gfx_activity; 6225ca02815Sjsg uint16_t average_umc_activity; // memory controller 6235ca02815Sjsg uint16_t average_mm_activity; // UVD or VCN 6245ca02815Sjsg 6255ca02815Sjsg /* Power/Energy */ 6265ca02815Sjsg uint16_t average_socket_power; 6275ca02815Sjsg uint64_t energy_accumulator; 6285ca02815Sjsg 6295ca02815Sjsg /* Driver attached timestamp (in ns) */ 6305ca02815Sjsg uint64_t system_clock_counter; 6315ca02815Sjsg 6325ca02815Sjsg /* Average clocks */ 6335ca02815Sjsg uint16_t average_gfxclk_frequency; 6345ca02815Sjsg uint16_t average_socclk_frequency; 6355ca02815Sjsg uint16_t average_uclk_frequency; 6365ca02815Sjsg uint16_t average_vclk0_frequency; 6375ca02815Sjsg uint16_t average_dclk0_frequency; 6385ca02815Sjsg uint16_t average_vclk1_frequency; 6395ca02815Sjsg uint16_t average_dclk1_frequency; 6405ca02815Sjsg 6415ca02815Sjsg /* Current clocks */ 6425ca02815Sjsg uint16_t current_gfxclk; 6435ca02815Sjsg uint16_t current_socclk; 6445ca02815Sjsg uint16_t current_uclk; 6455ca02815Sjsg uint16_t current_vclk0; 6465ca02815Sjsg uint16_t current_dclk0; 6475ca02815Sjsg uint16_t current_vclk1; 6485ca02815Sjsg uint16_t current_dclk1; 6495ca02815Sjsg 6505ca02815Sjsg /* Throttle status */ 6515ca02815Sjsg uint32_t throttle_status; 6525ca02815Sjsg 6535ca02815Sjsg /* Fans */ 6545ca02815Sjsg uint16_t current_fan_speed; 6555ca02815Sjsg 6565ca02815Sjsg /* Link width/speed */ 6575ca02815Sjsg uint16_t pcie_link_width; 6585ca02815Sjsg uint16_t pcie_link_speed; // in 0.1 GT/s 6595ca02815Sjsg 6605ca02815Sjsg uint16_t padding; 6615ca02815Sjsg 6625ca02815Sjsg uint32_t gfx_activity_acc; 6635ca02815Sjsg uint32_t mem_activity_acc; 6645ca02815Sjsg 6655ca02815Sjsg uint16_t temperature_hbm[NUM_HBM_INSTANCES]; 6665ca02815Sjsg 6675ca02815Sjsg /* PMFW attached timestamp (10ns resolution) */ 6685ca02815Sjsg uint64_t firmware_timestamp; 6695ca02815Sjsg 6705ca02815Sjsg /* Voltage (mV) */ 6715ca02815Sjsg uint16_t voltage_soc; 6725ca02815Sjsg uint16_t voltage_gfx; 6735ca02815Sjsg uint16_t voltage_mem; 6745ca02815Sjsg 6755ca02815Sjsg uint16_t padding1; 6765ca02815Sjsg 6775ca02815Sjsg /* Throttle status (ASIC independent) */ 6785ca02815Sjsg uint64_t indep_throttle_status; 6795ca02815Sjsg }; 6805ca02815Sjsg 6815ca02815Sjsg /* 6825ca02815Sjsg * gpu_metrics_v2_0 is not recommended as it's not naturally aligned. 6835ca02815Sjsg * Use gpu_metrics_v2_1 or later instead. 6845ca02815Sjsg */ 685ad8b1aafSjsg struct gpu_metrics_v2_0 { 686ad8b1aafSjsg struct metrics_table_header common_header; 687ad8b1aafSjsg 688ad8b1aafSjsg /* Driver attached timestamp (in ns) */ 689ad8b1aafSjsg uint64_t system_clock_counter; 690ad8b1aafSjsg 691ad8b1aafSjsg /* Temperature */ 692ad8b1aafSjsg uint16_t temperature_gfx; // gfx temperature on APUs 693ad8b1aafSjsg uint16_t temperature_soc; // soc temperature on APUs 694ad8b1aafSjsg uint16_t temperature_core[8]; // CPU core temperature on APUs 695ad8b1aafSjsg uint16_t temperature_l3[2]; 696ad8b1aafSjsg 697ad8b1aafSjsg /* Utilization */ 698ad8b1aafSjsg uint16_t average_gfx_activity; 699ad8b1aafSjsg uint16_t average_mm_activity; // UVD or VCN 700ad8b1aafSjsg 701ad8b1aafSjsg /* Power/Energy */ 702ad8b1aafSjsg uint16_t average_socket_power; // dGPU + APU power on A + A platform 703ad8b1aafSjsg uint16_t average_cpu_power; 704ad8b1aafSjsg uint16_t average_soc_power; 705ad8b1aafSjsg uint16_t average_gfx_power; 706ad8b1aafSjsg uint16_t average_core_power[8]; // CPU core power on APUs 707ad8b1aafSjsg 708ad8b1aafSjsg /* Average clocks */ 709ad8b1aafSjsg uint16_t average_gfxclk_frequency; 710ad8b1aafSjsg uint16_t average_socclk_frequency; 711ad8b1aafSjsg uint16_t average_uclk_frequency; 712ad8b1aafSjsg uint16_t average_fclk_frequency; 713ad8b1aafSjsg uint16_t average_vclk_frequency; 714ad8b1aafSjsg uint16_t average_dclk_frequency; 715ad8b1aafSjsg 716ad8b1aafSjsg /* Current clocks */ 717ad8b1aafSjsg uint16_t current_gfxclk; 718ad8b1aafSjsg uint16_t current_socclk; 719ad8b1aafSjsg uint16_t current_uclk; 720ad8b1aafSjsg uint16_t current_fclk; 721ad8b1aafSjsg uint16_t current_vclk; 722ad8b1aafSjsg uint16_t current_dclk; 723ad8b1aafSjsg uint16_t current_coreclk[8]; // CPU core clocks 724ad8b1aafSjsg uint16_t current_l3clk[2]; 725ad8b1aafSjsg 726ad8b1aafSjsg /* Throttle status */ 727ad8b1aafSjsg uint32_t throttle_status; 728ad8b1aafSjsg 729ad8b1aafSjsg /* Fans */ 730ad8b1aafSjsg uint16_t fan_pwm; 731ad8b1aafSjsg 732ad8b1aafSjsg uint16_t padding; 733fb4d8502Sjsg }; 734fb4d8502Sjsg 7355ca02815Sjsg struct gpu_metrics_v2_1 { 7365ca02815Sjsg struct metrics_table_header common_header; 7375ca02815Sjsg 7385ca02815Sjsg /* Temperature */ 7395ca02815Sjsg uint16_t temperature_gfx; // gfx temperature on APUs 7405ca02815Sjsg uint16_t temperature_soc; // soc temperature on APUs 7415ca02815Sjsg uint16_t temperature_core[8]; // CPU core temperature on APUs 7425ca02815Sjsg uint16_t temperature_l3[2]; 7435ca02815Sjsg 7445ca02815Sjsg /* Utilization */ 7455ca02815Sjsg uint16_t average_gfx_activity; 7465ca02815Sjsg uint16_t average_mm_activity; // UVD or VCN 7475ca02815Sjsg 7485ca02815Sjsg /* Driver attached timestamp (in ns) */ 7495ca02815Sjsg uint64_t system_clock_counter; 7505ca02815Sjsg 7515ca02815Sjsg /* Power/Energy */ 7525ca02815Sjsg uint16_t average_socket_power; // dGPU + APU power on A + A platform 7535ca02815Sjsg uint16_t average_cpu_power; 7545ca02815Sjsg uint16_t average_soc_power; 7555ca02815Sjsg uint16_t average_gfx_power; 7565ca02815Sjsg uint16_t average_core_power[8]; // CPU core power on APUs 7575ca02815Sjsg 7585ca02815Sjsg /* Average clocks */ 7595ca02815Sjsg uint16_t average_gfxclk_frequency; 7605ca02815Sjsg uint16_t average_socclk_frequency; 7615ca02815Sjsg uint16_t average_uclk_frequency; 7625ca02815Sjsg uint16_t average_fclk_frequency; 7635ca02815Sjsg uint16_t average_vclk_frequency; 7645ca02815Sjsg uint16_t average_dclk_frequency; 7655ca02815Sjsg 7665ca02815Sjsg /* Current clocks */ 7675ca02815Sjsg uint16_t current_gfxclk; 7685ca02815Sjsg uint16_t current_socclk; 7695ca02815Sjsg uint16_t current_uclk; 7705ca02815Sjsg uint16_t current_fclk; 7715ca02815Sjsg uint16_t current_vclk; 7725ca02815Sjsg uint16_t current_dclk; 7735ca02815Sjsg uint16_t current_coreclk[8]; // CPU core clocks 7745ca02815Sjsg uint16_t current_l3clk[2]; 7755ca02815Sjsg 7765ca02815Sjsg /* Throttle status */ 7775ca02815Sjsg uint32_t throttle_status; 7785ca02815Sjsg 7795ca02815Sjsg /* Fans */ 7805ca02815Sjsg uint16_t fan_pwm; 7815ca02815Sjsg 7825ca02815Sjsg uint16_t padding[3]; 7835ca02815Sjsg }; 7845ca02815Sjsg 7855ca02815Sjsg struct gpu_metrics_v2_2 { 7865ca02815Sjsg struct metrics_table_header common_header; 7875ca02815Sjsg 7885ca02815Sjsg /* Temperature */ 7895ca02815Sjsg uint16_t temperature_gfx; // gfx temperature on APUs 7905ca02815Sjsg uint16_t temperature_soc; // soc temperature on APUs 7915ca02815Sjsg uint16_t temperature_core[8]; // CPU core temperature on APUs 7925ca02815Sjsg uint16_t temperature_l3[2]; 7935ca02815Sjsg 7945ca02815Sjsg /* Utilization */ 7955ca02815Sjsg uint16_t average_gfx_activity; 7965ca02815Sjsg uint16_t average_mm_activity; // UVD or VCN 7975ca02815Sjsg 7985ca02815Sjsg /* Driver attached timestamp (in ns) */ 7995ca02815Sjsg uint64_t system_clock_counter; 8005ca02815Sjsg 8015ca02815Sjsg /* Power/Energy */ 8025ca02815Sjsg uint16_t average_socket_power; // dGPU + APU power on A + A platform 8035ca02815Sjsg uint16_t average_cpu_power; 8045ca02815Sjsg uint16_t average_soc_power; 8055ca02815Sjsg uint16_t average_gfx_power; 8065ca02815Sjsg uint16_t average_core_power[8]; // CPU core power on APUs 8075ca02815Sjsg 8085ca02815Sjsg /* Average clocks */ 8095ca02815Sjsg uint16_t average_gfxclk_frequency; 8105ca02815Sjsg uint16_t average_socclk_frequency; 8115ca02815Sjsg uint16_t average_uclk_frequency; 8125ca02815Sjsg uint16_t average_fclk_frequency; 8135ca02815Sjsg uint16_t average_vclk_frequency; 8145ca02815Sjsg uint16_t average_dclk_frequency; 8155ca02815Sjsg 8165ca02815Sjsg /* Current clocks */ 8175ca02815Sjsg uint16_t current_gfxclk; 8185ca02815Sjsg uint16_t current_socclk; 8195ca02815Sjsg uint16_t current_uclk; 8205ca02815Sjsg uint16_t current_fclk; 8215ca02815Sjsg uint16_t current_vclk; 8225ca02815Sjsg uint16_t current_dclk; 8235ca02815Sjsg uint16_t current_coreclk[8]; // CPU core clocks 8245ca02815Sjsg uint16_t current_l3clk[2]; 8255ca02815Sjsg 8265ca02815Sjsg /* Throttle status (ASIC dependent) */ 8275ca02815Sjsg uint32_t throttle_status; 8285ca02815Sjsg 8295ca02815Sjsg /* Fans */ 8305ca02815Sjsg uint16_t fan_pwm; 8315ca02815Sjsg 8325ca02815Sjsg uint16_t padding[3]; 8335ca02815Sjsg 8345ca02815Sjsg /* Throttle status (ASIC independent) */ 8355ca02815Sjsg uint64_t indep_throttle_status; 8365ca02815Sjsg }; 8375ca02815Sjsg 8381bb76ff1Sjsg struct gpu_metrics_v2_3 { 8391bb76ff1Sjsg struct metrics_table_header common_header; 8401bb76ff1Sjsg 8411bb76ff1Sjsg /* Temperature */ 8421bb76ff1Sjsg uint16_t temperature_gfx; // gfx temperature on APUs 8431bb76ff1Sjsg uint16_t temperature_soc; // soc temperature on APUs 8441bb76ff1Sjsg uint16_t temperature_core[8]; // CPU core temperature on APUs 8451bb76ff1Sjsg uint16_t temperature_l3[2]; 8461bb76ff1Sjsg 8471bb76ff1Sjsg /* Utilization */ 8481bb76ff1Sjsg uint16_t average_gfx_activity; 8491bb76ff1Sjsg uint16_t average_mm_activity; // UVD or VCN 8501bb76ff1Sjsg 8511bb76ff1Sjsg /* Driver attached timestamp (in ns) */ 8521bb76ff1Sjsg uint64_t system_clock_counter; 8531bb76ff1Sjsg 8541bb76ff1Sjsg /* Power/Energy */ 8551bb76ff1Sjsg uint16_t average_socket_power; // dGPU + APU power on A + A platform 8561bb76ff1Sjsg uint16_t average_cpu_power; 8571bb76ff1Sjsg uint16_t average_soc_power; 8581bb76ff1Sjsg uint16_t average_gfx_power; 8591bb76ff1Sjsg uint16_t average_core_power[8]; // CPU core power on APUs 8601bb76ff1Sjsg 8611bb76ff1Sjsg /* Average clocks */ 8621bb76ff1Sjsg uint16_t average_gfxclk_frequency; 8631bb76ff1Sjsg uint16_t average_socclk_frequency; 8641bb76ff1Sjsg uint16_t average_uclk_frequency; 8651bb76ff1Sjsg uint16_t average_fclk_frequency; 8661bb76ff1Sjsg uint16_t average_vclk_frequency; 8671bb76ff1Sjsg uint16_t average_dclk_frequency; 8681bb76ff1Sjsg 8691bb76ff1Sjsg /* Current clocks */ 8701bb76ff1Sjsg uint16_t current_gfxclk; 8711bb76ff1Sjsg uint16_t current_socclk; 8721bb76ff1Sjsg uint16_t current_uclk; 8731bb76ff1Sjsg uint16_t current_fclk; 8741bb76ff1Sjsg uint16_t current_vclk; 8751bb76ff1Sjsg uint16_t current_dclk; 8761bb76ff1Sjsg uint16_t current_coreclk[8]; // CPU core clocks 8771bb76ff1Sjsg uint16_t current_l3clk[2]; 8781bb76ff1Sjsg 8791bb76ff1Sjsg /* Throttle status (ASIC dependent) */ 8801bb76ff1Sjsg uint32_t throttle_status; 8811bb76ff1Sjsg 8821bb76ff1Sjsg /* Fans */ 8831bb76ff1Sjsg uint16_t fan_pwm; 8841bb76ff1Sjsg 8851bb76ff1Sjsg uint16_t padding[3]; 8861bb76ff1Sjsg 8871bb76ff1Sjsg /* Throttle status (ASIC independent) */ 8881bb76ff1Sjsg uint64_t indep_throttle_status; 8891bb76ff1Sjsg 8901bb76ff1Sjsg /* Average Temperature */ 8911bb76ff1Sjsg uint16_t average_temperature_gfx; // average gfx temperature on APUs 8921bb76ff1Sjsg uint16_t average_temperature_soc; // average soc temperature on APUs 8931bb76ff1Sjsg uint16_t average_temperature_core[8]; // average CPU core temperature on APUs 8941bb76ff1Sjsg uint16_t average_temperature_l3[2]; 8951bb76ff1Sjsg }; 896*f005ef32Sjsg 897*f005ef32Sjsg struct gpu_metrics_v2_4 { 898*f005ef32Sjsg struct metrics_table_header common_header; 899*f005ef32Sjsg 900*f005ef32Sjsg /* Temperature (unit: centi-Celsius) */ 901*f005ef32Sjsg uint16_t temperature_gfx; 902*f005ef32Sjsg uint16_t temperature_soc; 903*f005ef32Sjsg uint16_t temperature_core[8]; 904*f005ef32Sjsg uint16_t temperature_l3[2]; 905*f005ef32Sjsg 906*f005ef32Sjsg /* Utilization (unit: centi) */ 907*f005ef32Sjsg uint16_t average_gfx_activity; 908*f005ef32Sjsg uint16_t average_mm_activity; 909*f005ef32Sjsg 910*f005ef32Sjsg /* Driver attached timestamp (in ns) */ 911*f005ef32Sjsg uint64_t system_clock_counter; 912*f005ef32Sjsg 913*f005ef32Sjsg /* Power/Energy (unit: mW) */ 914*f005ef32Sjsg uint16_t average_socket_power; 915*f005ef32Sjsg uint16_t average_cpu_power; 916*f005ef32Sjsg uint16_t average_soc_power; 917*f005ef32Sjsg uint16_t average_gfx_power; 918*f005ef32Sjsg uint16_t average_core_power[8]; 919*f005ef32Sjsg 920*f005ef32Sjsg /* Average clocks (unit: MHz) */ 921*f005ef32Sjsg uint16_t average_gfxclk_frequency; 922*f005ef32Sjsg uint16_t average_socclk_frequency; 923*f005ef32Sjsg uint16_t average_uclk_frequency; 924*f005ef32Sjsg uint16_t average_fclk_frequency; 925*f005ef32Sjsg uint16_t average_vclk_frequency; 926*f005ef32Sjsg uint16_t average_dclk_frequency; 927*f005ef32Sjsg 928*f005ef32Sjsg /* Current clocks (unit: MHz) */ 929*f005ef32Sjsg uint16_t current_gfxclk; 930*f005ef32Sjsg uint16_t current_socclk; 931*f005ef32Sjsg uint16_t current_uclk; 932*f005ef32Sjsg uint16_t current_fclk; 933*f005ef32Sjsg uint16_t current_vclk; 934*f005ef32Sjsg uint16_t current_dclk; 935*f005ef32Sjsg uint16_t current_coreclk[8]; 936*f005ef32Sjsg uint16_t current_l3clk[2]; 937*f005ef32Sjsg 938*f005ef32Sjsg /* Throttle status (ASIC dependent) */ 939*f005ef32Sjsg uint32_t throttle_status; 940*f005ef32Sjsg 941*f005ef32Sjsg /* Fans */ 942*f005ef32Sjsg uint16_t fan_pwm; 943*f005ef32Sjsg 944*f005ef32Sjsg uint16_t padding[3]; 945*f005ef32Sjsg 946*f005ef32Sjsg /* Throttle status (ASIC independent) */ 947*f005ef32Sjsg uint64_t indep_throttle_status; 948*f005ef32Sjsg 949*f005ef32Sjsg /* Average Temperature (unit: centi-Celsius) */ 950*f005ef32Sjsg uint16_t average_temperature_gfx; 951*f005ef32Sjsg uint16_t average_temperature_soc; 952*f005ef32Sjsg uint16_t average_temperature_core[8]; 953*f005ef32Sjsg uint16_t average_temperature_l3[2]; 954*f005ef32Sjsg 955*f005ef32Sjsg /* Power/Voltage (unit: mV) */ 956*f005ef32Sjsg uint16_t average_cpu_voltage; 957*f005ef32Sjsg uint16_t average_soc_voltage; 958*f005ef32Sjsg uint16_t average_gfx_voltage; 959*f005ef32Sjsg 960*f005ef32Sjsg /* Power/Current (unit: mA) */ 961*f005ef32Sjsg uint16_t average_cpu_current; 962*f005ef32Sjsg uint16_t average_soc_current; 963*f005ef32Sjsg uint16_t average_gfx_current; 964*f005ef32Sjsg }; 965fb4d8502Sjsg #endif 966