1ad8b1aafSjsg /* 2ad8b1aafSjsg * Copyright 2014 Advanced Micro Devices, Inc. 3ad8b1aafSjsg * 4ad8b1aafSjsg * Permission is hereby granted, free of charge, to any person obtaining a 5ad8b1aafSjsg * copy of this software and associated documentation files (the "Software"), 6ad8b1aafSjsg * to deal in the Software without restriction, including without limitation 7ad8b1aafSjsg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8ad8b1aafSjsg * and/or sell copies of the Software, and to permit persons to whom the 9ad8b1aafSjsg * Software is furnished to do so, subject to the following conditions: 10ad8b1aafSjsg * 11ad8b1aafSjsg * The above copyright notice and this permission notice shall be included in 12ad8b1aafSjsg * all copies or substantial portions of the Software. 13ad8b1aafSjsg * 14ad8b1aafSjsg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15ad8b1aafSjsg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16ad8b1aafSjsg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17ad8b1aafSjsg * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18ad8b1aafSjsg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19ad8b1aafSjsg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20ad8b1aafSjsg * OTHER DEALINGS IN THE SOFTWARE. 21ad8b1aafSjsg * 22ad8b1aafSjsg */ 23ad8b1aafSjsg #ifndef __AMDGPU_DPM_H__ 24ad8b1aafSjsg #define __AMDGPU_DPM_H__ 25ad8b1aafSjsg 261bb76ff1Sjsg /* Argument for PPSMC_MSG_GpuChangeState */ 271bb76ff1Sjsg enum gfx_change_state { 281bb76ff1Sjsg sGpuChangeState_D0Entry = 1, 291bb76ff1Sjsg sGpuChangeState_D3Entry, 301bb76ff1Sjsg }; 311bb76ff1Sjsg 32ad8b1aafSjsg enum amdgpu_int_thermal_type { 33ad8b1aafSjsg THERMAL_TYPE_NONE, 34ad8b1aafSjsg THERMAL_TYPE_EXTERNAL, 35ad8b1aafSjsg THERMAL_TYPE_EXTERNAL_GPIO, 36ad8b1aafSjsg THERMAL_TYPE_RV6XX, 37ad8b1aafSjsg THERMAL_TYPE_RV770, 38ad8b1aafSjsg THERMAL_TYPE_ADT7473_WITH_INTERNAL, 39ad8b1aafSjsg THERMAL_TYPE_EVERGREEN, 40ad8b1aafSjsg THERMAL_TYPE_SUMO, 41ad8b1aafSjsg THERMAL_TYPE_NI, 42ad8b1aafSjsg THERMAL_TYPE_SI, 43ad8b1aafSjsg THERMAL_TYPE_EMC2103_WITH_INTERNAL, 44ad8b1aafSjsg THERMAL_TYPE_CI, 45ad8b1aafSjsg THERMAL_TYPE_KV, 46ad8b1aafSjsg }; 47ad8b1aafSjsg 481bb76ff1Sjsg enum amdgpu_runpm_mode { 491bb76ff1Sjsg AMDGPU_RUNPM_NONE, 501bb76ff1Sjsg AMDGPU_RUNPM_PX, 511bb76ff1Sjsg AMDGPU_RUNPM_BOCO, 521bb76ff1Sjsg AMDGPU_RUNPM_BACO, 53ad8b1aafSjsg }; 54ad8b1aafSjsg 55ad8b1aafSjsg struct amdgpu_ps { 56ad8b1aafSjsg u32 caps; /* vbios flags */ 57ad8b1aafSjsg u32 class; /* vbios flags */ 58ad8b1aafSjsg u32 class2; /* vbios flags */ 59ad8b1aafSjsg /* UVD clocks */ 60ad8b1aafSjsg u32 vclk; 61ad8b1aafSjsg u32 dclk; 62ad8b1aafSjsg /* VCE clocks */ 63ad8b1aafSjsg u32 evclk; 64ad8b1aafSjsg u32 ecclk; 65ad8b1aafSjsg bool vce_active; 66ad8b1aafSjsg enum amd_vce_level vce_level; 67ad8b1aafSjsg /* asic priv */ 68ad8b1aafSjsg void *ps_priv; 69ad8b1aafSjsg }; 70ad8b1aafSjsg 71ad8b1aafSjsg struct amdgpu_dpm_thermal { 72ad8b1aafSjsg /* thermal interrupt work */ 73ad8b1aafSjsg struct work_struct work; 74ad8b1aafSjsg /* low temperature threshold */ 75ad8b1aafSjsg int min_temp; 76ad8b1aafSjsg /* high temperature threshold */ 77ad8b1aafSjsg int max_temp; 78ad8b1aafSjsg /* edge max emergency(shutdown) temp */ 79ad8b1aafSjsg int max_edge_emergency_temp; 80ad8b1aafSjsg /* hotspot low temperature threshold */ 81ad8b1aafSjsg int min_hotspot_temp; 82ad8b1aafSjsg /* hotspot high temperature critical threshold */ 83ad8b1aafSjsg int max_hotspot_crit_temp; 84ad8b1aafSjsg /* hotspot max emergency(shutdown) temp */ 85ad8b1aafSjsg int max_hotspot_emergency_temp; 86ad8b1aafSjsg /* memory low temperature threshold */ 87ad8b1aafSjsg int min_mem_temp; 88ad8b1aafSjsg /* memory high temperature critical threshold */ 89ad8b1aafSjsg int max_mem_crit_temp; 90ad8b1aafSjsg /* memory max emergency(shutdown) temp */ 91ad8b1aafSjsg int max_mem_emergency_temp; 927a71db80Sjsg /* SWCTF threshold */ 937a71db80Sjsg int sw_ctf_threshold; 94ad8b1aafSjsg /* was last interrupt low to high or high to low */ 95ad8b1aafSjsg bool high_to_low; 96ad8b1aafSjsg /* interrupt source */ 97ad8b1aafSjsg struct amdgpu_irq_src irq; 98ad8b1aafSjsg }; 99ad8b1aafSjsg 100ad8b1aafSjsg struct amdgpu_clock_and_voltage_limits { 101ad8b1aafSjsg u32 sclk; 102ad8b1aafSjsg u32 mclk; 103ad8b1aafSjsg u16 vddc; 104ad8b1aafSjsg u16 vddci; 105ad8b1aafSjsg }; 106ad8b1aafSjsg 107ad8b1aafSjsg struct amdgpu_clock_array { 108ad8b1aafSjsg u32 count; 109ad8b1aafSjsg u32 *values; 110ad8b1aafSjsg }; 111ad8b1aafSjsg 112ad8b1aafSjsg struct amdgpu_clock_voltage_dependency_entry { 113ad8b1aafSjsg u32 clk; 114ad8b1aafSjsg u16 v; 115ad8b1aafSjsg }; 116ad8b1aafSjsg 117ad8b1aafSjsg struct amdgpu_clock_voltage_dependency_table { 118ad8b1aafSjsg u32 count; 119ad8b1aafSjsg struct amdgpu_clock_voltage_dependency_entry *entries; 120ad8b1aafSjsg }; 121ad8b1aafSjsg 122ad8b1aafSjsg union amdgpu_cac_leakage_entry { 123ad8b1aafSjsg struct { 124ad8b1aafSjsg u16 vddc; 125ad8b1aafSjsg u32 leakage; 126ad8b1aafSjsg }; 127ad8b1aafSjsg struct { 128ad8b1aafSjsg u16 vddc1; 129ad8b1aafSjsg u16 vddc2; 130ad8b1aafSjsg u16 vddc3; 131ad8b1aafSjsg }; 132ad8b1aafSjsg }; 133ad8b1aafSjsg 134ad8b1aafSjsg struct amdgpu_cac_leakage_table { 135ad8b1aafSjsg u32 count; 136ad8b1aafSjsg union amdgpu_cac_leakage_entry *entries; 137ad8b1aafSjsg }; 138ad8b1aafSjsg 139ad8b1aafSjsg struct amdgpu_phase_shedding_limits_entry { 140ad8b1aafSjsg u16 voltage; 141ad8b1aafSjsg u32 sclk; 142ad8b1aafSjsg u32 mclk; 143ad8b1aafSjsg }; 144ad8b1aafSjsg 145ad8b1aafSjsg struct amdgpu_phase_shedding_limits_table { 146ad8b1aafSjsg u32 count; 147ad8b1aafSjsg struct amdgpu_phase_shedding_limits_entry *entries; 148ad8b1aafSjsg }; 149ad8b1aafSjsg 150ad8b1aafSjsg struct amdgpu_uvd_clock_voltage_dependency_entry { 151ad8b1aafSjsg u32 vclk; 152ad8b1aafSjsg u32 dclk; 153ad8b1aafSjsg u16 v; 154ad8b1aafSjsg }; 155ad8b1aafSjsg 156ad8b1aafSjsg struct amdgpu_uvd_clock_voltage_dependency_table { 157ad8b1aafSjsg u8 count; 158ad8b1aafSjsg struct amdgpu_uvd_clock_voltage_dependency_entry *entries; 159ad8b1aafSjsg }; 160ad8b1aafSjsg 161ad8b1aafSjsg struct amdgpu_vce_clock_voltage_dependency_entry { 162ad8b1aafSjsg u32 ecclk; 163ad8b1aafSjsg u32 evclk; 164ad8b1aafSjsg u16 v; 165ad8b1aafSjsg }; 166ad8b1aafSjsg 167ad8b1aafSjsg struct amdgpu_vce_clock_voltage_dependency_table { 168ad8b1aafSjsg u8 count; 169ad8b1aafSjsg struct amdgpu_vce_clock_voltage_dependency_entry *entries; 170ad8b1aafSjsg }; 171ad8b1aafSjsg 172ad8b1aafSjsg struct amdgpu_ppm_table { 173ad8b1aafSjsg u8 ppm_design; 174ad8b1aafSjsg u16 cpu_core_number; 175ad8b1aafSjsg u32 platform_tdp; 176ad8b1aafSjsg u32 small_ac_platform_tdp; 177ad8b1aafSjsg u32 platform_tdc; 178ad8b1aafSjsg u32 small_ac_platform_tdc; 179ad8b1aafSjsg u32 apu_tdp; 180ad8b1aafSjsg u32 dgpu_tdp; 181ad8b1aafSjsg u32 dgpu_ulv_power; 182ad8b1aafSjsg u32 tj_max; 183ad8b1aafSjsg }; 184ad8b1aafSjsg 185ad8b1aafSjsg struct amdgpu_cac_tdp_table { 186ad8b1aafSjsg u16 tdp; 187ad8b1aafSjsg u16 configurable_tdp; 188ad8b1aafSjsg u16 tdc; 189ad8b1aafSjsg u16 battery_power_limit; 190ad8b1aafSjsg u16 small_power_limit; 191ad8b1aafSjsg u16 low_cac_leakage; 192ad8b1aafSjsg u16 high_cac_leakage; 193ad8b1aafSjsg u16 maximum_power_delivery_limit; 194ad8b1aafSjsg }; 195ad8b1aafSjsg 196ad8b1aafSjsg struct amdgpu_dpm_dynamic_state { 197ad8b1aafSjsg struct amdgpu_clock_voltage_dependency_table vddc_dependency_on_sclk; 198ad8b1aafSjsg struct amdgpu_clock_voltage_dependency_table vddci_dependency_on_mclk; 199ad8b1aafSjsg struct amdgpu_clock_voltage_dependency_table vddc_dependency_on_mclk; 200ad8b1aafSjsg struct amdgpu_clock_voltage_dependency_table mvdd_dependency_on_mclk; 201ad8b1aafSjsg struct amdgpu_clock_voltage_dependency_table vddc_dependency_on_dispclk; 202ad8b1aafSjsg struct amdgpu_uvd_clock_voltage_dependency_table uvd_clock_voltage_dependency_table; 203ad8b1aafSjsg struct amdgpu_vce_clock_voltage_dependency_table vce_clock_voltage_dependency_table; 204ad8b1aafSjsg struct amdgpu_clock_voltage_dependency_table samu_clock_voltage_dependency_table; 205ad8b1aafSjsg struct amdgpu_clock_voltage_dependency_table acp_clock_voltage_dependency_table; 206ad8b1aafSjsg struct amdgpu_clock_voltage_dependency_table vddgfx_dependency_on_sclk; 207ad8b1aafSjsg struct amdgpu_clock_array valid_sclk_values; 208ad8b1aafSjsg struct amdgpu_clock_array valid_mclk_values; 209ad8b1aafSjsg struct amdgpu_clock_and_voltage_limits max_clock_voltage_on_dc; 210ad8b1aafSjsg struct amdgpu_clock_and_voltage_limits max_clock_voltage_on_ac; 211ad8b1aafSjsg u32 mclk_sclk_ratio; 212ad8b1aafSjsg u32 sclk_mclk_delta; 213ad8b1aafSjsg u16 vddc_vddci_delta; 214ad8b1aafSjsg u16 min_vddc_for_pcie_gen2; 215ad8b1aafSjsg struct amdgpu_cac_leakage_table cac_leakage_table; 216ad8b1aafSjsg struct amdgpu_phase_shedding_limits_table phase_shedding_limits_table; 217ad8b1aafSjsg struct amdgpu_ppm_table *ppm_table; 218ad8b1aafSjsg struct amdgpu_cac_tdp_table *cac_tdp_table; 219ad8b1aafSjsg }; 220ad8b1aafSjsg 221ad8b1aafSjsg struct amdgpu_dpm_fan { 222ad8b1aafSjsg u16 t_min; 223ad8b1aafSjsg u16 t_med; 224ad8b1aafSjsg u16 t_high; 225ad8b1aafSjsg u16 pwm_min; 226ad8b1aafSjsg u16 pwm_med; 227ad8b1aafSjsg u16 pwm_high; 228ad8b1aafSjsg u8 t_hyst; 229ad8b1aafSjsg u32 cycle_delay; 230ad8b1aafSjsg u16 t_max; 231ad8b1aafSjsg u8 control_mode; 232ad8b1aafSjsg u16 default_max_fan_pwm; 233ad8b1aafSjsg u16 default_fan_output_sensitivity; 234ad8b1aafSjsg u16 fan_output_sensitivity; 235ad8b1aafSjsg bool ucode_fan_control; 236ad8b1aafSjsg }; 237ad8b1aafSjsg 238ad8b1aafSjsg struct amdgpu_dpm { 239ad8b1aafSjsg struct amdgpu_ps *ps; 240ad8b1aafSjsg /* number of valid power states */ 241ad8b1aafSjsg int num_ps; 242ad8b1aafSjsg /* current power state that is active */ 243ad8b1aafSjsg struct amdgpu_ps *current_ps; 244ad8b1aafSjsg /* requested power state */ 245ad8b1aafSjsg struct amdgpu_ps *requested_ps; 246ad8b1aafSjsg /* boot up power state */ 247ad8b1aafSjsg struct amdgpu_ps *boot_ps; 248ad8b1aafSjsg /* default uvd power state */ 249ad8b1aafSjsg struct amdgpu_ps *uvd_ps; 250ad8b1aafSjsg /* vce requirements */ 251ad8b1aafSjsg u32 num_of_vce_states; 252ad8b1aafSjsg struct amd_vce_state vce_states[AMD_MAX_VCE_LEVELS]; 253ad8b1aafSjsg enum amd_vce_level vce_level; 254ad8b1aafSjsg enum amd_pm_state_type state; 255ad8b1aafSjsg enum amd_pm_state_type user_state; 256ad8b1aafSjsg enum amd_pm_state_type last_state; 257ad8b1aafSjsg enum amd_pm_state_type last_user_state; 258ad8b1aafSjsg u32 platform_caps; 259ad8b1aafSjsg u32 voltage_response_time; 260ad8b1aafSjsg u32 backbias_response_time; 261ad8b1aafSjsg void *priv; 262ad8b1aafSjsg u32 new_active_crtcs; 263ad8b1aafSjsg int new_active_crtc_count; 264ad8b1aafSjsg u32 current_active_crtcs; 265ad8b1aafSjsg int current_active_crtc_count; 266ad8b1aafSjsg struct amdgpu_dpm_dynamic_state dyn_state; 267ad8b1aafSjsg struct amdgpu_dpm_fan fan; 268ad8b1aafSjsg u32 tdp_limit; 269ad8b1aafSjsg u32 near_tdp_limit; 270ad8b1aafSjsg u32 near_tdp_limit_adjusted; 271ad8b1aafSjsg u32 sq_ramping_threshold; 272ad8b1aafSjsg u32 cac_leakage; 273ad8b1aafSjsg u16 tdp_od_limit; 274ad8b1aafSjsg u32 tdp_adjustment; 275ad8b1aafSjsg u16 load_line_slope; 276ad8b1aafSjsg bool power_control; 277ad8b1aafSjsg /* special states active */ 278ad8b1aafSjsg bool thermal_active; 279ad8b1aafSjsg bool uvd_active; 280ad8b1aafSjsg bool vce_active; 281ad8b1aafSjsg /* thermal handling */ 282ad8b1aafSjsg struct amdgpu_dpm_thermal thermal; 283ad8b1aafSjsg /* forced levels */ 284ad8b1aafSjsg enum amd_dpm_forced_level forced_level; 285ad8b1aafSjsg }; 286ad8b1aafSjsg 2875ca02815Sjsg enum ip_power_state { 2885ca02815Sjsg POWER_STATE_UNKNOWN, 2895ca02815Sjsg POWER_STATE_ON, 2905ca02815Sjsg POWER_STATE_OFF, 2915ca02815Sjsg }; 2925ca02815Sjsg 2931bb76ff1Sjsg /* Used to mask smu debug modes */ 2941bb76ff1Sjsg #define SMU_DEBUG_HALT_ON_ERROR 0x1 2951bb76ff1Sjsg 2961bb76ff1Sjsg #define MAX_SMU_I2C_BUSES 2 2971bb76ff1Sjsg 2981bb76ff1Sjsg struct amdgpu_smu_i2c_bus { 2991bb76ff1Sjsg struct i2c_adapter adapter; 3001bb76ff1Sjsg struct amdgpu_device *adev; 3011bb76ff1Sjsg int port; 3021bb76ff1Sjsg struct rwlock mutex; 3031bb76ff1Sjsg }; 3041bb76ff1Sjsg 3051bb76ff1Sjsg struct config_table_setting 3061bb76ff1Sjsg { 3071bb76ff1Sjsg uint16_t gfxclk_average_tau; 3081bb76ff1Sjsg uint16_t socclk_average_tau; 3091bb76ff1Sjsg uint16_t uclk_average_tau; 3101bb76ff1Sjsg uint16_t gfx_activity_average_tau; 3111bb76ff1Sjsg uint16_t mem_activity_average_tau; 3121bb76ff1Sjsg uint16_t socket_power_average_tau; 3131bb76ff1Sjsg uint16_t apu_socket_power_average_tau; 3141bb76ff1Sjsg uint16_t fclk_average_tau; 3151bb76ff1Sjsg }; 3161bb76ff1Sjsg 317ad8b1aafSjsg struct amdgpu_pm { 318ad8b1aafSjsg struct rwlock mutex; 319ad8b1aafSjsg u32 current_sclk; 320ad8b1aafSjsg u32 current_mclk; 321ad8b1aafSjsg u32 default_sclk; 322ad8b1aafSjsg u32 default_mclk; 323ad8b1aafSjsg struct amdgpu_i2c_chan *i2c_bus; 324ad8b1aafSjsg bool bus_locked; 325ad8b1aafSjsg /* internal thermal controller on rv6xx+ */ 326ad8b1aafSjsg enum amdgpu_int_thermal_type int_thermal_type; 327ad8b1aafSjsg struct device *int_hwmon_dev; 328ad8b1aafSjsg /* fan control parameters */ 329ad8b1aafSjsg bool no_fan; 330ad8b1aafSjsg u8 fan_pulses_per_revolution; 331ad8b1aafSjsg u8 fan_min_rpm; 332ad8b1aafSjsg u8 fan_max_rpm; 333ad8b1aafSjsg /* dpm */ 334ad8b1aafSjsg bool dpm_enabled; 335ad8b1aafSjsg bool sysfs_initialized; 336ad8b1aafSjsg struct amdgpu_dpm dpm; 337ad8b1aafSjsg const struct firmware *fw; /* SMC firmware */ 338ad8b1aafSjsg uint32_t fw_version; 339ad8b1aafSjsg uint32_t pcie_gen_mask; 340ad8b1aafSjsg uint32_t pcie_mlw_mask; 341ad8b1aafSjsg struct amd_pp_display_configuration pm_display_cfg;/* set by dc */ 342ad8b1aafSjsg uint32_t smu_prv_buffer_size; 343ad8b1aafSjsg struct amdgpu_bo *smu_prv_buffer; 344ad8b1aafSjsg bool ac_power; 345ad8b1aafSjsg /* powerplay feature */ 346ad8b1aafSjsg uint32_t pp_feature; 347ad8b1aafSjsg 348ad8b1aafSjsg /* Used for I2C access to various EEPROMs on relevant ASICs */ 3491bb76ff1Sjsg struct amdgpu_smu_i2c_bus smu_i2c[MAX_SMU_I2C_BUSES]; 3501bb76ff1Sjsg struct i2c_adapter *ras_eeprom_i2c_bus; 3511bb76ff1Sjsg struct i2c_adapter *fru_eeprom_i2c_bus; 352ad8b1aafSjsg struct list_head pm_attr_list; 3535ca02815Sjsg 3545ca02815Sjsg atomic_t pwr_state[AMD_IP_BLOCK_TYPE_NUM]; 3551bb76ff1Sjsg 3561bb76ff1Sjsg /* 3571bb76ff1Sjsg * 0 = disabled (default), otherwise enable corresponding debug mode 3581bb76ff1Sjsg */ 3591bb76ff1Sjsg uint32_t smu_debug_mask; 3601bb76ff1Sjsg 3611bb76ff1Sjsg bool pp_force_state_enabled; 3621bb76ff1Sjsg 3631bb76ff1Sjsg struct rwlock stable_pstate_ctx_lock; 3641bb76ff1Sjsg struct amdgpu_ctx *stable_pstate_ctx; 3651bb76ff1Sjsg 3661bb76ff1Sjsg struct config_table_setting config_table; 3671bb76ff1Sjsg /* runtime mode */ 3681bb76ff1Sjsg enum amdgpu_runpm_mode rpm_mode; 369ad8b1aafSjsg }; 370ad8b1aafSjsg 371ad8b1aafSjsg int amdgpu_dpm_read_sensor(struct amdgpu_device *adev, enum amd_pp_sensors sensor, 372ad8b1aafSjsg void *data, uint32_t *size); 373ad8b1aafSjsg 374*f005ef32Sjsg int amdgpu_dpm_get_apu_thermal_limit(struct amdgpu_device *adev, uint32_t *limit); 375*f005ef32Sjsg int amdgpu_dpm_set_apu_thermal_limit(struct amdgpu_device *adev, uint32_t limit); 376*f005ef32Sjsg 377ad8b1aafSjsg int amdgpu_dpm_set_powergating_by_smu(struct amdgpu_device *adev, 378ad8b1aafSjsg uint32_t block_type, bool gate); 379ad8b1aafSjsg 380ad8b1aafSjsg extern int amdgpu_dpm_get_sclk(struct amdgpu_device *adev, bool low); 381ad8b1aafSjsg 382ad8b1aafSjsg extern int amdgpu_dpm_get_mclk(struct amdgpu_device *adev, bool low); 383ad8b1aafSjsg 384ad8b1aafSjsg int amdgpu_dpm_set_xgmi_pstate(struct amdgpu_device *adev, 385ad8b1aafSjsg uint32_t pstate); 386ad8b1aafSjsg 387ad8b1aafSjsg int amdgpu_dpm_switch_power_profile(struct amdgpu_device *adev, 388ad8b1aafSjsg enum PP_SMC_POWER_PROFILE type, 389ad8b1aafSjsg bool en); 390ad8b1aafSjsg 391ad8b1aafSjsg int amdgpu_dpm_baco_reset(struct amdgpu_device *adev); 392ad8b1aafSjsg 393ad8b1aafSjsg int amdgpu_dpm_mode2_reset(struct amdgpu_device *adev); 394*f005ef32Sjsg int amdgpu_dpm_enable_gfx_features(struct amdgpu_device *adev); 395ad8b1aafSjsg 396ad8b1aafSjsg bool amdgpu_dpm_is_baco_supported(struct amdgpu_device *adev); 397ad8b1aafSjsg 398ad8b1aafSjsg bool amdgpu_dpm_is_mode1_reset_supported(struct amdgpu_device *adev); 399ad8b1aafSjsg int amdgpu_dpm_mode1_reset(struct amdgpu_device *adev); 400ad8b1aafSjsg 401ad8b1aafSjsg int amdgpu_dpm_set_mp1_state(struct amdgpu_device *adev, 402ad8b1aafSjsg enum pp_mp1_state mp1_state); 403ad8b1aafSjsg 4041bb76ff1Sjsg int amdgpu_dpm_set_gfx_power_up_by_imu(struct amdgpu_device *adev); 4051bb76ff1Sjsg 406ad8b1aafSjsg int amdgpu_dpm_baco_exit(struct amdgpu_device *adev); 407ad8b1aafSjsg 408ad8b1aafSjsg int amdgpu_dpm_baco_enter(struct amdgpu_device *adev); 409ad8b1aafSjsg 410ad8b1aafSjsg int amdgpu_dpm_set_df_cstate(struct amdgpu_device *adev, 411ad8b1aafSjsg uint32_t cstate); 412ad8b1aafSjsg 413ad8b1aafSjsg int amdgpu_dpm_allow_xgmi_power_down(struct amdgpu_device *adev, bool en); 414ad8b1aafSjsg 415ad8b1aafSjsg int amdgpu_dpm_enable_mgpu_fan_boost(struct amdgpu_device *adev); 416ad8b1aafSjsg 417ad8b1aafSjsg int amdgpu_dpm_set_clockgating_by_smu(struct amdgpu_device *adev, 418ad8b1aafSjsg uint32_t msg_id); 419ad8b1aafSjsg 420ad8b1aafSjsg int amdgpu_dpm_smu_i2c_bus_access(struct amdgpu_device *adev, 421ad8b1aafSjsg bool acquire); 422ad8b1aafSjsg 423ad8b1aafSjsg void amdgpu_pm_acpi_event_handler(struct amdgpu_device *adev); 424ad8b1aafSjsg 4251bb76ff1Sjsg void amdgpu_dpm_compute_clocks(struct amdgpu_device *adev); 426ad8b1aafSjsg void amdgpu_dpm_enable_uvd(struct amdgpu_device *adev, bool enable); 427ad8b1aafSjsg void amdgpu_dpm_enable_vce(struct amdgpu_device *adev, bool enable); 428ad8b1aafSjsg void amdgpu_dpm_enable_jpeg(struct amdgpu_device *adev, bool enable); 429ad8b1aafSjsg int amdgpu_pm_load_smu_firmware(struct amdgpu_device *adev, uint32_t *smu_version); 4301bb76ff1Sjsg int amdgpu_dpm_handle_passthrough_sbr(struct amdgpu_device *adev, bool enable); 4311bb76ff1Sjsg int amdgpu_dpm_send_hbm_bad_pages_num(struct amdgpu_device *adev, uint32_t size); 4321bb76ff1Sjsg int amdgpu_dpm_send_hbm_bad_channel_flag(struct amdgpu_device *adev, uint32_t size); 4331bb76ff1Sjsg int amdgpu_dpm_get_dpm_freq_range(struct amdgpu_device *adev, 4341bb76ff1Sjsg enum pp_clock_type type, 4351bb76ff1Sjsg uint32_t *min, 4361bb76ff1Sjsg uint32_t *max); 4371bb76ff1Sjsg int amdgpu_dpm_set_soft_freq_range(struct amdgpu_device *adev, 4381bb76ff1Sjsg enum pp_clock_type type, 4391bb76ff1Sjsg uint32_t min, 4401bb76ff1Sjsg uint32_t max); 4411bb76ff1Sjsg int amdgpu_dpm_write_watermarks_table(struct amdgpu_device *adev); 4421bb76ff1Sjsg int amdgpu_dpm_wait_for_event(struct amdgpu_device *adev, enum smu_event_type event, 4431bb76ff1Sjsg uint64_t event_arg); 4441bb76ff1Sjsg int amdgpu_dpm_get_residency_gfxoff(struct amdgpu_device *adev, u32 *value); 4451bb76ff1Sjsg int amdgpu_dpm_set_residency_gfxoff(struct amdgpu_device *adev, bool value); 4461bb76ff1Sjsg int amdgpu_dpm_get_entrycount_gfxoff(struct amdgpu_device *adev, u64 *value); 4471bb76ff1Sjsg int amdgpu_dpm_get_status_gfxoff(struct amdgpu_device *adev, uint32_t *value); 4481bb76ff1Sjsg uint64_t amdgpu_dpm_get_thermal_throttling_counter(struct amdgpu_device *adev); 4491bb76ff1Sjsg void amdgpu_dpm_gfx_state_change(struct amdgpu_device *adev, 4501bb76ff1Sjsg enum gfx_change_state state); 4511bb76ff1Sjsg int amdgpu_dpm_get_ecc_info(struct amdgpu_device *adev, 4521bb76ff1Sjsg void *umc_ecc); 4531bb76ff1Sjsg struct amd_vce_state *amdgpu_dpm_get_vce_clock_state(struct amdgpu_device *adev, 4541bb76ff1Sjsg uint32_t idx); 4551bb76ff1Sjsg void amdgpu_dpm_get_current_power_state(struct amdgpu_device *adev, enum amd_pm_state_type *state); 4561bb76ff1Sjsg void amdgpu_dpm_set_power_state(struct amdgpu_device *adev, 4571bb76ff1Sjsg enum amd_pm_state_type state); 4581bb76ff1Sjsg enum amd_dpm_forced_level amdgpu_dpm_get_performance_level(struct amdgpu_device *adev); 4591bb76ff1Sjsg int amdgpu_dpm_force_performance_level(struct amdgpu_device *adev, 4601bb76ff1Sjsg enum amd_dpm_forced_level level); 4611bb76ff1Sjsg int amdgpu_dpm_get_pp_num_states(struct amdgpu_device *adev, 4621bb76ff1Sjsg struct pp_states_info *states); 4631bb76ff1Sjsg int amdgpu_dpm_dispatch_task(struct amdgpu_device *adev, 4641bb76ff1Sjsg enum amd_pp_task task_id, 4651bb76ff1Sjsg enum amd_pm_state_type *user_state); 4661bb76ff1Sjsg int amdgpu_dpm_get_pp_table(struct amdgpu_device *adev, char **table); 4671bb76ff1Sjsg int amdgpu_dpm_set_fine_grain_clk_vol(struct amdgpu_device *adev, 4681bb76ff1Sjsg uint32_t type, 4691bb76ff1Sjsg long *input, 4701bb76ff1Sjsg uint32_t size); 4711bb76ff1Sjsg int amdgpu_dpm_odn_edit_dpm_table(struct amdgpu_device *adev, 4721bb76ff1Sjsg uint32_t type, 4731bb76ff1Sjsg long *input, 4741bb76ff1Sjsg uint32_t size); 4751bb76ff1Sjsg int amdgpu_dpm_print_clock_levels(struct amdgpu_device *adev, 4761bb76ff1Sjsg enum pp_clock_type type, 4771bb76ff1Sjsg char *buf); 4781bb76ff1Sjsg int amdgpu_dpm_emit_clock_levels(struct amdgpu_device *adev, 4791bb76ff1Sjsg enum pp_clock_type type, 4801bb76ff1Sjsg char *buf, 4811bb76ff1Sjsg int *offset); 4821bb76ff1Sjsg int amdgpu_dpm_set_ppfeature_status(struct amdgpu_device *adev, 4831bb76ff1Sjsg uint64_t ppfeature_masks); 4841bb76ff1Sjsg int amdgpu_dpm_get_ppfeature_status(struct amdgpu_device *adev, char *buf); 4851bb76ff1Sjsg int amdgpu_dpm_force_clock_level(struct amdgpu_device *adev, 4861bb76ff1Sjsg enum pp_clock_type type, 4871bb76ff1Sjsg uint32_t mask); 4881bb76ff1Sjsg int amdgpu_dpm_get_sclk_od(struct amdgpu_device *adev); 4891bb76ff1Sjsg int amdgpu_dpm_set_sclk_od(struct amdgpu_device *adev, uint32_t value); 4901bb76ff1Sjsg int amdgpu_dpm_get_mclk_od(struct amdgpu_device *adev); 4911bb76ff1Sjsg int amdgpu_dpm_set_mclk_od(struct amdgpu_device *adev, uint32_t value); 4921bb76ff1Sjsg int amdgpu_dpm_get_power_profile_mode(struct amdgpu_device *adev, 4931bb76ff1Sjsg char *buf); 4941bb76ff1Sjsg int amdgpu_dpm_set_power_profile_mode(struct amdgpu_device *adev, 4951bb76ff1Sjsg long *input, uint32_t size); 4961bb76ff1Sjsg int amdgpu_dpm_get_gpu_metrics(struct amdgpu_device *adev, void **table); 4971bb76ff1Sjsg int amdgpu_dpm_get_fan_control_mode(struct amdgpu_device *adev, 4981bb76ff1Sjsg uint32_t *fan_mode); 4991bb76ff1Sjsg int amdgpu_dpm_set_fan_speed_pwm(struct amdgpu_device *adev, 5001bb76ff1Sjsg uint32_t speed); 5011bb76ff1Sjsg int amdgpu_dpm_get_fan_speed_pwm(struct amdgpu_device *adev, 5021bb76ff1Sjsg uint32_t *speed); 5031bb76ff1Sjsg int amdgpu_dpm_get_fan_speed_rpm(struct amdgpu_device *adev, 5041bb76ff1Sjsg uint32_t *speed); 5051bb76ff1Sjsg int amdgpu_dpm_set_fan_speed_rpm(struct amdgpu_device *adev, 5061bb76ff1Sjsg uint32_t speed); 5071bb76ff1Sjsg int amdgpu_dpm_set_fan_control_mode(struct amdgpu_device *adev, 5081bb76ff1Sjsg uint32_t mode); 5091bb76ff1Sjsg int amdgpu_dpm_get_power_limit(struct amdgpu_device *adev, 5101bb76ff1Sjsg uint32_t *limit, 5111bb76ff1Sjsg enum pp_power_limit_level pp_limit_level, 5121bb76ff1Sjsg enum pp_power_type power_type); 5131bb76ff1Sjsg int amdgpu_dpm_set_power_limit(struct amdgpu_device *adev, 5141bb76ff1Sjsg uint32_t limit); 5151bb76ff1Sjsg int amdgpu_dpm_is_cclk_dpm_supported(struct amdgpu_device *adev); 5161bb76ff1Sjsg int amdgpu_dpm_debugfs_print_current_performance_level(struct amdgpu_device *adev, 5171bb76ff1Sjsg struct seq_file *m); 5181bb76ff1Sjsg int amdgpu_dpm_get_smu_prv_buf_details(struct amdgpu_device *adev, 5191bb76ff1Sjsg void **addr, 5201bb76ff1Sjsg size_t *size); 5211bb76ff1Sjsg int amdgpu_dpm_is_overdrive_supported(struct amdgpu_device *adev); 5221bb76ff1Sjsg int amdgpu_dpm_set_pp_table(struct amdgpu_device *adev, 5231bb76ff1Sjsg const char *buf, 5241bb76ff1Sjsg size_t size); 5251bb76ff1Sjsg int amdgpu_dpm_get_num_cpu_cores(struct amdgpu_device *adev); 5261bb76ff1Sjsg void amdgpu_dpm_stb_debug_fs_init(struct amdgpu_device *adev); 5271bb76ff1Sjsg int amdgpu_dpm_display_configuration_change(struct amdgpu_device *adev, 5281bb76ff1Sjsg const struct amd_pp_display_configuration *input); 5291bb76ff1Sjsg int amdgpu_dpm_get_clock_by_type(struct amdgpu_device *adev, 5301bb76ff1Sjsg enum amd_pp_clock_type type, 5311bb76ff1Sjsg struct amd_pp_clocks *clocks); 5321bb76ff1Sjsg int amdgpu_dpm_get_display_mode_validation_clks(struct amdgpu_device *adev, 5331bb76ff1Sjsg struct amd_pp_simple_clock_info *clocks); 5341bb76ff1Sjsg int amdgpu_dpm_get_clock_by_type_with_latency(struct amdgpu_device *adev, 5351bb76ff1Sjsg enum amd_pp_clock_type type, 5361bb76ff1Sjsg struct pp_clock_levels_with_latency *clocks); 5371bb76ff1Sjsg int amdgpu_dpm_get_clock_by_type_with_voltage(struct amdgpu_device *adev, 5381bb76ff1Sjsg enum amd_pp_clock_type type, 5391bb76ff1Sjsg struct pp_clock_levels_with_voltage *clocks); 5401bb76ff1Sjsg int amdgpu_dpm_set_watermarks_for_clocks_ranges(struct amdgpu_device *adev, 5411bb76ff1Sjsg void *clock_ranges); 5421bb76ff1Sjsg int amdgpu_dpm_display_clock_voltage_request(struct amdgpu_device *adev, 5431bb76ff1Sjsg struct pp_display_clock_request *clock); 5441bb76ff1Sjsg int amdgpu_dpm_get_current_clocks(struct amdgpu_device *adev, 5451bb76ff1Sjsg struct amd_pp_clock_info *clocks); 5461bb76ff1Sjsg void amdgpu_dpm_notify_smu_enable_pwe(struct amdgpu_device *adev); 5471bb76ff1Sjsg int amdgpu_dpm_set_active_display_count(struct amdgpu_device *adev, 5481bb76ff1Sjsg uint32_t count); 5491bb76ff1Sjsg int amdgpu_dpm_set_min_deep_sleep_dcefclk(struct amdgpu_device *adev, 5501bb76ff1Sjsg uint32_t clock); 5511bb76ff1Sjsg void amdgpu_dpm_set_hard_min_dcefclk_by_freq(struct amdgpu_device *adev, 5521bb76ff1Sjsg uint32_t clock); 5531bb76ff1Sjsg void amdgpu_dpm_set_hard_min_fclk_by_freq(struct amdgpu_device *adev, 5541bb76ff1Sjsg uint32_t clock); 5551bb76ff1Sjsg int amdgpu_dpm_display_disable_memory_clock_switch(struct amdgpu_device *adev, 5561bb76ff1Sjsg bool disable_memory_clock_switch); 5571bb76ff1Sjsg int amdgpu_dpm_get_max_sustainable_clocks_by_dc(struct amdgpu_device *adev, 5581bb76ff1Sjsg struct pp_smu_nv_clock_table *max_clocks); 5591bb76ff1Sjsg enum pp_smu_status amdgpu_dpm_get_uclk_dpm_states(struct amdgpu_device *adev, 5601bb76ff1Sjsg unsigned int *clock_values_in_khz, 5611bb76ff1Sjsg unsigned int *num_states); 5621bb76ff1Sjsg int amdgpu_dpm_get_dpm_clock_table(struct amdgpu_device *adev, 5631bb76ff1Sjsg struct dpm_clocks *clock_table); 564ad8b1aafSjsg #endif 565