amdgpu_dpm.h (18411B)
1/* 2 * Copyright 2014 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 __AMDGPU_DPM_H__ 24#define __AMDGPU_DPM_H__ 25 26/* Argument for PPSMC_MSG_GpuChangeState */ 27enum gfx_change_state { 28 sGpuChangeState_D0Entry = 1, 29 sGpuChangeState_D3Entry, 30}; 31 32enum amdgpu_int_thermal_type { 33 THERMAL_TYPE_NONE, 34 THERMAL_TYPE_EXTERNAL, 35 THERMAL_TYPE_EXTERNAL_GPIO, 36 THERMAL_TYPE_RV6XX, 37 THERMAL_TYPE_RV770, 38 THERMAL_TYPE_ADT7473_WITH_INTERNAL, 39 THERMAL_TYPE_EVERGREEN, 40 THERMAL_TYPE_SUMO, 41 THERMAL_TYPE_NI, 42 THERMAL_TYPE_SI, 43 THERMAL_TYPE_EMC2103_WITH_INTERNAL, 44 THERMAL_TYPE_CI, 45 THERMAL_TYPE_KV, 46}; 47 48struct amdgpu_ps { 49 u32 caps; /* vbios flags */ 50 u32 class; /* vbios flags */ 51 u32 class2; /* vbios flags */ 52 /* UVD clocks */ 53 u32 vclk; 54 u32 dclk; 55 /* VCE clocks */ 56 u32 evclk; 57 u32 ecclk; 58 bool vce_active; 59 enum amd_vce_level vce_level; 60 /* asic priv */ 61 void *ps_priv; 62}; 63 64struct amdgpu_dpm_thermal { 65 /* thermal interrupt work */ 66 struct work_struct work; 67 /* low temperature threshold */ 68 int min_temp; 69 /* high temperature threshold */ 70 int max_temp; 71 /* edge max emergency(shutdown) temp */ 72 int max_edge_emergency_temp; 73 /* hotspot low temperature threshold */ 74 int min_hotspot_temp; 75 /* hotspot high temperature critical threshold */ 76 int max_hotspot_crit_temp; 77 /* hotspot max emergency(shutdown) temp */ 78 int max_hotspot_emergency_temp; 79 /* memory low temperature threshold */ 80 int min_mem_temp; 81 /* memory high temperature critical threshold */ 82 int max_mem_crit_temp; 83 /* memory max emergency(shutdown) temp */ 84 int max_mem_emergency_temp; 85 /* was last interrupt low to high or high to low */ 86 bool high_to_low; 87 /* interrupt source */ 88 struct amdgpu_irq_src irq; 89}; 90 91struct amdgpu_clock_and_voltage_limits { 92 u32 sclk; 93 u32 mclk; 94 u16 vddc; 95 u16 vddci; 96}; 97 98struct amdgpu_clock_array { 99 u32 count; 100 u32 *values; 101}; 102 103struct amdgpu_clock_voltage_dependency_entry { 104 u32 clk; 105 u16 v; 106}; 107 108struct amdgpu_clock_voltage_dependency_table { 109 u32 count; 110 struct amdgpu_clock_voltage_dependency_entry *entries; 111}; 112 113union amdgpu_cac_leakage_entry { 114 struct { 115 u16 vddc; 116 u32 leakage; 117 }; 118 struct { 119 u16 vddc1; 120 u16 vddc2; 121 u16 vddc3; 122 }; 123}; 124 125struct amdgpu_cac_leakage_table { 126 u32 count; 127 union amdgpu_cac_leakage_entry *entries; 128}; 129 130struct amdgpu_phase_shedding_limits_entry { 131 u16 voltage; 132 u32 sclk; 133 u32 mclk; 134}; 135 136struct amdgpu_phase_shedding_limits_table { 137 u32 count; 138 struct amdgpu_phase_shedding_limits_entry *entries; 139}; 140 141struct amdgpu_uvd_clock_voltage_dependency_entry { 142 u32 vclk; 143 u32 dclk; 144 u16 v; 145}; 146 147struct amdgpu_uvd_clock_voltage_dependency_table { 148 u8 count; 149 struct amdgpu_uvd_clock_voltage_dependency_entry *entries; 150}; 151 152struct amdgpu_vce_clock_voltage_dependency_entry { 153 u32 ecclk; 154 u32 evclk; 155 u16 v; 156}; 157 158struct amdgpu_vce_clock_voltage_dependency_table { 159 u8 count; 160 struct amdgpu_vce_clock_voltage_dependency_entry *entries; 161}; 162 163struct amdgpu_ppm_table { 164 u8 ppm_design; 165 u16 cpu_core_number; 166 u32 platform_tdp; 167 u32 small_ac_platform_tdp; 168 u32 platform_tdc; 169 u32 small_ac_platform_tdc; 170 u32 apu_tdp; 171 u32 dgpu_tdp; 172 u32 dgpu_ulv_power; 173 u32 tj_max; 174}; 175 176struct amdgpu_cac_tdp_table { 177 u16 tdp; 178 u16 configurable_tdp; 179 u16 tdc; 180 u16 battery_power_limit; 181 u16 small_power_limit; 182 u16 low_cac_leakage; 183 u16 high_cac_leakage; 184 u16 maximum_power_delivery_limit; 185}; 186 187struct amdgpu_dpm_dynamic_state { 188 struct amdgpu_clock_voltage_dependency_table vddc_dependency_on_sclk; 189 struct amdgpu_clock_voltage_dependency_table vddci_dependency_on_mclk; 190 struct amdgpu_clock_voltage_dependency_table vddc_dependency_on_mclk; 191 struct amdgpu_clock_voltage_dependency_table mvdd_dependency_on_mclk; 192 struct amdgpu_clock_voltage_dependency_table vddc_dependency_on_dispclk; 193 struct amdgpu_uvd_clock_voltage_dependency_table uvd_clock_voltage_dependency_table; 194 struct amdgpu_vce_clock_voltage_dependency_table vce_clock_voltage_dependency_table; 195 struct amdgpu_clock_voltage_dependency_table samu_clock_voltage_dependency_table; 196 struct amdgpu_clock_voltage_dependency_table acp_clock_voltage_dependency_table; 197 struct amdgpu_clock_voltage_dependency_table vddgfx_dependency_on_sclk; 198 struct amdgpu_clock_array valid_sclk_values; 199 struct amdgpu_clock_array valid_mclk_values; 200 struct amdgpu_clock_and_voltage_limits max_clock_voltage_on_dc; 201 struct amdgpu_clock_and_voltage_limits max_clock_voltage_on_ac; 202 u32 mclk_sclk_ratio; 203 u32 sclk_mclk_delta; 204 u16 vddc_vddci_delta; 205 u16 min_vddc_for_pcie_gen2; 206 struct amdgpu_cac_leakage_table cac_leakage_table; 207 struct amdgpu_phase_shedding_limits_table phase_shedding_limits_table; 208 struct amdgpu_ppm_table *ppm_table; 209 struct amdgpu_cac_tdp_table *cac_tdp_table; 210}; 211 212struct amdgpu_dpm_fan { 213 u16 t_min; 214 u16 t_med; 215 u16 t_high; 216 u16 pwm_min; 217 u16 pwm_med; 218 u16 pwm_high; 219 u8 t_hyst; 220 u32 cycle_delay; 221 u16 t_max; 222 u8 control_mode; 223 u16 default_max_fan_pwm; 224 u16 default_fan_output_sensitivity; 225 u16 fan_output_sensitivity; 226 bool ucode_fan_control; 227}; 228 229struct amdgpu_dpm { 230 struct amdgpu_ps *ps; 231 /* number of valid power states */ 232 int num_ps; 233 /* current power state that is active */ 234 struct amdgpu_ps *current_ps; 235 /* requested power state */ 236 struct amdgpu_ps *requested_ps; 237 /* boot up power state */ 238 struct amdgpu_ps *boot_ps; 239 /* default uvd power state */ 240 struct amdgpu_ps *uvd_ps; 241 /* vce requirements */ 242 u32 num_of_vce_states; 243 struct amd_vce_state vce_states[AMD_MAX_VCE_LEVELS]; 244 enum amd_vce_level vce_level; 245 enum amd_pm_state_type state; 246 enum amd_pm_state_type user_state; 247 enum amd_pm_state_type last_state; 248 enum amd_pm_state_type last_user_state; 249 u32 platform_caps; 250 u32 voltage_response_time; 251 u32 backbias_response_time; 252 void *priv; 253 u32 new_active_crtcs; 254 int new_active_crtc_count; 255 u32 current_active_crtcs; 256 int current_active_crtc_count; 257 struct amdgpu_dpm_dynamic_state dyn_state; 258 struct amdgpu_dpm_fan fan; 259 u32 tdp_limit; 260 u32 near_tdp_limit; 261 u32 near_tdp_limit_adjusted; 262 u32 sq_ramping_threshold; 263 u32 cac_leakage; 264 u16 tdp_od_limit; 265 u32 tdp_adjustment; 266 u16 load_line_slope; 267 bool power_control; 268 /* special states active */ 269 bool thermal_active; 270 bool uvd_active; 271 bool vce_active; 272 /* thermal handling */ 273 struct amdgpu_dpm_thermal thermal; 274 /* forced levels */ 275 enum amd_dpm_forced_level forced_level; 276}; 277 278enum ip_power_state { 279 POWER_STATE_UNKNOWN, 280 POWER_STATE_ON, 281 POWER_STATE_OFF, 282}; 283 284/* Used to mask smu debug modes */ 285#define SMU_DEBUG_HALT_ON_ERROR 0x1 286 287#define MAX_SMU_I2C_BUSES 2 288 289struct amdgpu_smu_i2c_bus { 290 struct i2c_adapter adapter; 291 struct amdgpu_device *adev; 292 int port; 293 struct mutex mutex; 294}; 295 296struct config_table_setting 297{ 298 uint16_t gfxclk_average_tau; 299 uint16_t socclk_average_tau; 300 uint16_t uclk_average_tau; 301 uint16_t gfx_activity_average_tau; 302 uint16_t mem_activity_average_tau; 303 uint16_t socket_power_average_tau; 304 uint16_t apu_socket_power_average_tau; 305 uint16_t fclk_average_tau; 306}; 307 308struct amdgpu_pm { 309 struct mutex mutex; 310 u32 current_sclk; 311 u32 current_mclk; 312 u32 default_sclk; 313 u32 default_mclk; 314 struct amdgpu_i2c_chan *i2c_bus; 315 bool bus_locked; 316 /* internal thermal controller on rv6xx+ */ 317 enum amdgpu_int_thermal_type int_thermal_type; 318 struct device *int_hwmon_dev; 319 /* fan control parameters */ 320 bool no_fan; 321 u8 fan_pulses_per_revolution; 322 u8 fan_min_rpm; 323 u8 fan_max_rpm; 324 /* dpm */ 325 bool dpm_enabled; 326 bool sysfs_initialized; 327 struct amdgpu_dpm dpm; 328 const struct firmware *fw; /* SMC firmware */ 329 uint32_t fw_version; 330 uint32_t pcie_gen_mask; 331 uint32_t pcie_mlw_mask; 332 struct amd_pp_display_configuration pm_display_cfg;/* set by dc */ 333 uint32_t smu_prv_buffer_size; 334 struct amdgpu_bo *smu_prv_buffer; 335 bool ac_power; 336 /* powerplay feature */ 337 uint32_t pp_feature; 338 339 /* Used for I2C access to various EEPROMs on relevant ASICs */ 340 struct amdgpu_smu_i2c_bus smu_i2c[MAX_SMU_I2C_BUSES]; 341 struct i2c_adapter *ras_eeprom_i2c_bus; 342 struct i2c_adapter *fru_eeprom_i2c_bus; 343 struct list_head pm_attr_list; 344 345 atomic_t pwr_state[AMD_IP_BLOCK_TYPE_NUM]; 346 347 /* 348 * 0 = disabled (default), otherwise enable corresponding debug mode 349 */ 350 uint32_t smu_debug_mask; 351 352 bool pp_force_state_enabled; 353 354 struct mutex stable_pstate_ctx_lock; 355 struct amdgpu_ctx *stable_pstate_ctx; 356 357 struct config_table_setting config_table; 358}; 359 360int amdgpu_dpm_read_sensor(struct amdgpu_device *adev, enum amd_pp_sensors sensor, 361 void *data, uint32_t *size); 362 363int amdgpu_dpm_set_powergating_by_smu(struct amdgpu_device *adev, 364 uint32_t block_type, bool gate); 365 366extern int amdgpu_dpm_get_sclk(struct amdgpu_device *adev, bool low); 367 368extern int amdgpu_dpm_get_mclk(struct amdgpu_device *adev, bool low); 369 370int amdgpu_dpm_set_xgmi_pstate(struct amdgpu_device *adev, 371 uint32_t pstate); 372 373int amdgpu_dpm_switch_power_profile(struct amdgpu_device *adev, 374 enum PP_SMC_POWER_PROFILE type, 375 bool en); 376 377int amdgpu_dpm_baco_reset(struct amdgpu_device *adev); 378 379int amdgpu_dpm_mode2_reset(struct amdgpu_device *adev); 380 381bool amdgpu_dpm_is_baco_supported(struct amdgpu_device *adev); 382 383bool amdgpu_dpm_is_mode1_reset_supported(struct amdgpu_device *adev); 384int amdgpu_dpm_mode1_reset(struct amdgpu_device *adev); 385 386int amdgpu_dpm_set_mp1_state(struct amdgpu_device *adev, 387 enum pp_mp1_state mp1_state); 388 389int amdgpu_dpm_baco_exit(struct amdgpu_device *adev); 390 391int amdgpu_dpm_baco_enter(struct amdgpu_device *adev); 392 393int amdgpu_dpm_set_df_cstate(struct amdgpu_device *adev, 394 uint32_t cstate); 395 396int amdgpu_dpm_allow_xgmi_power_down(struct amdgpu_device *adev, bool en); 397 398int amdgpu_dpm_enable_mgpu_fan_boost(struct amdgpu_device *adev); 399 400int amdgpu_dpm_set_clockgating_by_smu(struct amdgpu_device *adev, 401 uint32_t msg_id); 402 403int amdgpu_dpm_smu_i2c_bus_access(struct amdgpu_device *adev, 404 bool acquire); 405 406void amdgpu_pm_acpi_event_handler(struct amdgpu_device *adev); 407 408void amdgpu_dpm_compute_clocks(struct amdgpu_device *adev); 409void amdgpu_dpm_enable_uvd(struct amdgpu_device *adev, bool enable); 410void amdgpu_dpm_enable_vce(struct amdgpu_device *adev, bool enable); 411void amdgpu_dpm_enable_jpeg(struct amdgpu_device *adev, bool enable); 412int amdgpu_pm_load_smu_firmware(struct amdgpu_device *adev, uint32_t *smu_version); 413int amdgpu_dpm_handle_passthrough_sbr(struct amdgpu_device *adev, bool enable); 414int amdgpu_dpm_send_hbm_bad_pages_num(struct amdgpu_device *adev, uint32_t size); 415int amdgpu_dpm_send_hbm_bad_channel_flag(struct amdgpu_device *adev, uint32_t size); 416int amdgpu_dpm_get_dpm_freq_range(struct amdgpu_device *adev, 417 enum pp_clock_type type, 418 uint32_t *min, 419 uint32_t *max); 420int amdgpu_dpm_set_soft_freq_range(struct amdgpu_device *adev, 421 enum pp_clock_type type, 422 uint32_t min, 423 uint32_t max); 424int amdgpu_dpm_write_watermarks_table(struct amdgpu_device *adev); 425int amdgpu_dpm_wait_for_event(struct amdgpu_device *adev, enum smu_event_type event, 426 uint64_t event_arg); 427int amdgpu_dpm_get_status_gfxoff(struct amdgpu_device *adev, uint32_t *value); 428uint64_t amdgpu_dpm_get_thermal_throttling_counter(struct amdgpu_device *adev); 429void amdgpu_dpm_gfx_state_change(struct amdgpu_device *adev, 430 enum gfx_change_state state); 431int amdgpu_dpm_get_ecc_info(struct amdgpu_device *adev, 432 void *umc_ecc); 433struct amd_vce_state *amdgpu_dpm_get_vce_clock_state(struct amdgpu_device *adev, 434 uint32_t idx); 435void amdgpu_dpm_get_current_power_state(struct amdgpu_device *adev, enum amd_pm_state_type *state); 436void amdgpu_dpm_set_power_state(struct amdgpu_device *adev, 437 enum amd_pm_state_type state); 438enum amd_dpm_forced_level amdgpu_dpm_get_performance_level(struct amdgpu_device *adev); 439int amdgpu_dpm_force_performance_level(struct amdgpu_device *adev, 440 enum amd_dpm_forced_level level); 441int amdgpu_dpm_get_pp_num_states(struct amdgpu_device *adev, 442 struct pp_states_info *states); 443int amdgpu_dpm_dispatch_task(struct amdgpu_device *adev, 444 enum amd_pp_task task_id, 445 enum amd_pm_state_type *user_state); 446int amdgpu_dpm_get_pp_table(struct amdgpu_device *adev, char **table); 447int amdgpu_dpm_set_fine_grain_clk_vol(struct amdgpu_device *adev, 448 uint32_t type, 449 long *input, 450 uint32_t size); 451int amdgpu_dpm_odn_edit_dpm_table(struct amdgpu_device *adev, 452 uint32_t type, 453 long *input, 454 uint32_t size); 455int amdgpu_dpm_print_clock_levels(struct amdgpu_device *adev, 456 enum pp_clock_type type, 457 char *buf); 458int amdgpu_dpm_emit_clock_levels(struct amdgpu_device *adev, 459 enum pp_clock_type type, 460 char *buf, 461 int *offset); 462int amdgpu_dpm_set_ppfeature_status(struct amdgpu_device *adev, 463 uint64_t ppfeature_masks); 464int amdgpu_dpm_get_ppfeature_status(struct amdgpu_device *adev, char *buf); 465int amdgpu_dpm_force_clock_level(struct amdgpu_device *adev, 466 enum pp_clock_type type, 467 uint32_t mask); 468int amdgpu_dpm_get_sclk_od(struct amdgpu_device *adev); 469int amdgpu_dpm_set_sclk_od(struct amdgpu_device *adev, uint32_t value); 470int amdgpu_dpm_get_mclk_od(struct amdgpu_device *adev); 471int amdgpu_dpm_set_mclk_od(struct amdgpu_device *adev, uint32_t value); 472int amdgpu_dpm_get_power_profile_mode(struct amdgpu_device *adev, 473 char *buf); 474int amdgpu_dpm_set_power_profile_mode(struct amdgpu_device *adev, 475 long *input, uint32_t size); 476int amdgpu_dpm_get_gpu_metrics(struct amdgpu_device *adev, void **table); 477int amdgpu_dpm_get_fan_control_mode(struct amdgpu_device *adev, 478 uint32_t *fan_mode); 479int amdgpu_dpm_set_fan_speed_pwm(struct amdgpu_device *adev, 480 uint32_t speed); 481int amdgpu_dpm_get_fan_speed_pwm(struct amdgpu_device *adev, 482 uint32_t *speed); 483int amdgpu_dpm_get_fan_speed_rpm(struct amdgpu_device *adev, 484 uint32_t *speed); 485int amdgpu_dpm_set_fan_speed_rpm(struct amdgpu_device *adev, 486 uint32_t speed); 487int amdgpu_dpm_set_fan_control_mode(struct amdgpu_device *adev, 488 uint32_t mode); 489int amdgpu_dpm_get_power_limit(struct amdgpu_device *adev, 490 uint32_t *limit, 491 enum pp_power_limit_level pp_limit_level, 492 enum pp_power_type power_type); 493int amdgpu_dpm_set_power_limit(struct amdgpu_device *adev, 494 uint32_t limit); 495int amdgpu_dpm_is_cclk_dpm_supported(struct amdgpu_device *adev); 496int amdgpu_dpm_debugfs_print_current_performance_level(struct amdgpu_device *adev, 497 struct seq_file *m); 498int amdgpu_dpm_get_smu_prv_buf_details(struct amdgpu_device *adev, 499 void **addr, 500 size_t *size); 501int amdgpu_dpm_is_overdrive_supported(struct amdgpu_device *adev); 502int amdgpu_dpm_set_pp_table(struct amdgpu_device *adev, 503 const char *buf, 504 size_t size); 505int amdgpu_dpm_get_num_cpu_cores(struct amdgpu_device *adev); 506void amdgpu_dpm_stb_debug_fs_init(struct amdgpu_device *adev); 507int amdgpu_dpm_display_configuration_change(struct amdgpu_device *adev, 508 const struct amd_pp_display_configuration *input); 509int amdgpu_dpm_get_clock_by_type(struct amdgpu_device *adev, 510 enum amd_pp_clock_type type, 511 struct amd_pp_clocks *clocks); 512int amdgpu_dpm_get_display_mode_validation_clks(struct amdgpu_device *adev, 513 struct amd_pp_simple_clock_info *clocks); 514int amdgpu_dpm_get_clock_by_type_with_latency(struct amdgpu_device *adev, 515 enum amd_pp_clock_type type, 516 struct pp_clock_levels_with_latency *clocks); 517int amdgpu_dpm_get_clock_by_type_with_voltage(struct amdgpu_device *adev, 518 enum amd_pp_clock_type type, 519 struct pp_clock_levels_with_voltage *clocks); 520int amdgpu_dpm_set_watermarks_for_clocks_ranges(struct amdgpu_device *adev, 521 void *clock_ranges); 522int amdgpu_dpm_display_clock_voltage_request(struct amdgpu_device *adev, 523 struct pp_display_clock_request *clock); 524int amdgpu_dpm_get_current_clocks(struct amdgpu_device *adev, 525 struct amd_pp_clock_info *clocks); 526void amdgpu_dpm_notify_smu_enable_pwe(struct amdgpu_device *adev); 527int amdgpu_dpm_set_active_display_count(struct amdgpu_device *adev, 528 uint32_t count); 529int amdgpu_dpm_set_min_deep_sleep_dcefclk(struct amdgpu_device *adev, 530 uint32_t clock); 531void amdgpu_dpm_set_hard_min_dcefclk_by_freq(struct amdgpu_device *adev, 532 uint32_t clock); 533void amdgpu_dpm_set_hard_min_fclk_by_freq(struct amdgpu_device *adev, 534 uint32_t clock); 535int amdgpu_dpm_display_disable_memory_clock_switch(struct amdgpu_device *adev, 536 bool disable_memory_clock_switch); 537int amdgpu_dpm_get_max_sustainable_clocks_by_dc(struct amdgpu_device *adev, 538 struct pp_smu_nv_clock_table *max_clocks); 539enum pp_smu_status amdgpu_dpm_get_uclk_dpm_states(struct amdgpu_device *adev, 540 unsigned int *clock_values_in_khz, 541 unsigned int *num_states); 542int amdgpu_dpm_get_dpm_clock_table(struct amdgpu_device *adev, 543 struct dpm_clocks *clock_table); 544#endif