diff options
Diffstat (limited to 'drivers/gpu/drm/amd/powerplay/amdgpu_smu.c')
-rw-r--r-- | drivers/gpu/drm/amd/powerplay/amdgpu_smu.c | 115 |
1 files changed, 61 insertions, 54 deletions
diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c index 62ef8c43e14e..26923aa5aea1 100644 --- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c +++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c @@ -31,6 +31,10 @@ #include "smu_v12_0.h" #include "atom.h" #include "amd_pcie.h" +#include "vega20_ppt.h" +#include "arcturus_ppt.h" +#include "navi10_ppt.h" +#include "renoir_ppt.h" #undef __SMU_DUMMY_MAP #define __SMU_DUMMY_MAP(type) #type @@ -703,23 +707,26 @@ static int smu_set_funcs(struct amdgpu_device *adev) switch (adev->asic_type) { case CHIP_VEGA20: + vega20_set_ppt_funcs(smu); + break; case CHIP_NAVI10: case CHIP_NAVI14: case CHIP_NAVI12: + navi10_set_ppt_funcs(smu); + break; case CHIP_ARCTURUS: - if (adev->pm.pp_feature & PP_OVERDRIVE_MASK) - smu->od_enabled = true; - smu_v11_0_set_smu_funcs(smu); + arcturus_set_ppt_funcs(smu); break; case CHIP_RENOIR: - if (adev->pm.pp_feature & PP_OVERDRIVE_MASK) - smu->od_enabled = true; - smu_v12_0_set_smu_funcs(smu); + renoir_set_ppt_funcs(smu); break; default: return -EINVAL; } + if (adev->pm.pp_feature & PP_OVERDRIVE_MASK) + smu->od_enabled = true; + return 0; } @@ -1177,16 +1184,16 @@ static int smu_start_smc_engine(struct smu_context *smu) if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP) { if (adev->asic_type < CHIP_NAVI10) { - if (smu->funcs->load_microcode) { - ret = smu->funcs->load_microcode(smu); + if (smu->ppt_funcs->load_microcode) { + ret = smu->ppt_funcs->load_microcode(smu); if (ret) return ret; } } } - if (smu->funcs->check_fw_status) { - ret = smu->funcs->check_fw_status(smu); + if (smu->ppt_funcs->check_fw_status) { + ret = smu->ppt_funcs->check_fw_status(smu); if (ret) pr_err("SMC is not ready\n"); } @@ -1397,8 +1404,8 @@ int smu_display_configuration_change(struct smu_context *smu, mutex_lock(&smu->mutex); - if (smu->funcs->set_deep_sleep_dcefclk) - smu->funcs->set_deep_sleep_dcefclk(smu, + if (smu->ppt_funcs->set_deep_sleep_dcefclk) + smu->ppt_funcs->set_deep_sleep_dcefclk(smu, display_config->min_dcef_deep_sleep_set_clk / 100); for (index = 0; index < display_config->num_path_including_non_display; index++) { @@ -1952,8 +1959,8 @@ int smu_load_microcode(struct smu_context *smu) mutex_lock(&smu->mutex); - if (smu->funcs->load_microcode) - ret = smu->funcs->load_microcode(smu); + if (smu->ppt_funcs->load_microcode) + ret = smu->ppt_funcs->load_microcode(smu); mutex_unlock(&smu->mutex); @@ -1966,8 +1973,8 @@ int smu_check_fw_status(struct smu_context *smu) mutex_lock(&smu->mutex); - if (smu->funcs->check_fw_status) - ret = smu->funcs->check_fw_status(smu); + if (smu->ppt_funcs->check_fw_status) + ret = smu->ppt_funcs->check_fw_status(smu); mutex_unlock(&smu->mutex); @@ -1980,8 +1987,8 @@ int smu_set_gfx_cgpg(struct smu_context *smu, bool enabled) mutex_lock(&smu->mutex); - if (smu->funcs->set_gfx_cgpg) - ret = smu->funcs->set_gfx_cgpg(smu, enabled); + if (smu->ppt_funcs->set_gfx_cgpg) + ret = smu->ppt_funcs->set_gfx_cgpg(smu, enabled); mutex_unlock(&smu->mutex); @@ -1994,8 +2001,8 @@ int smu_set_fan_speed_rpm(struct smu_context *smu, uint32_t speed) mutex_lock(&smu->mutex); - if (smu->funcs->set_fan_speed_rpm) - ret = smu->funcs->set_fan_speed_rpm(smu, speed); + if (smu->ppt_funcs->set_fan_speed_rpm) + ret = smu->ppt_funcs->set_fan_speed_rpm(smu, speed); mutex_unlock(&smu->mutex); @@ -2027,8 +2034,8 @@ int smu_set_power_limit(struct smu_context *smu, uint32_t limit) mutex_lock(&smu->mutex); - if (smu->funcs->set_power_limit) - ret = smu->funcs->set_power_limit(smu, limit); + if (smu->ppt_funcs->set_power_limit) + ret = smu->ppt_funcs->set_power_limit(smu, limit); mutex_unlock(&smu->mutex); @@ -2149,8 +2156,8 @@ int smu_get_fan_control_mode(struct smu_context *smu) mutex_lock(&smu->mutex); - if (smu->funcs->get_fan_control_mode) - ret = smu->funcs->get_fan_control_mode(smu); + if (smu->ppt_funcs->get_fan_control_mode) + ret = smu->ppt_funcs->get_fan_control_mode(smu); mutex_unlock(&smu->mutex); @@ -2163,8 +2170,8 @@ int smu_set_fan_control_mode(struct smu_context *smu, int value) mutex_lock(&smu->mutex); - if (smu->funcs->set_fan_control_mode) - ret = smu->funcs->set_fan_control_mode(smu, value); + if (smu->ppt_funcs->set_fan_control_mode) + ret = smu->ppt_funcs->set_fan_control_mode(smu, value); mutex_unlock(&smu->mutex); @@ -2191,8 +2198,8 @@ int smu_set_fan_speed_percent(struct smu_context *smu, uint32_t speed) mutex_lock(&smu->mutex); - if (smu->funcs->set_fan_speed_percent) - ret = smu->funcs->set_fan_speed_percent(smu, speed); + if (smu->ppt_funcs->set_fan_speed_percent) + ret = smu->ppt_funcs->set_fan_speed_percent(smu, speed); mutex_unlock(&smu->mutex); @@ -2219,8 +2226,8 @@ int smu_set_deep_sleep_dcefclk(struct smu_context *smu, int clk) mutex_lock(&smu->mutex); - if (smu->funcs->set_deep_sleep_dcefclk) - ret = smu->funcs->set_deep_sleep_dcefclk(smu, clk); + if (smu->ppt_funcs->set_deep_sleep_dcefclk) + ret = smu->ppt_funcs->set_deep_sleep_dcefclk(smu, clk); mutex_unlock(&smu->mutex); @@ -2233,8 +2240,8 @@ int smu_set_active_display_count(struct smu_context *smu, uint32_t count) mutex_lock(&smu->mutex); - if (smu->funcs->set_active_display_count) - ret = smu->funcs->set_active_display_count(smu, count); + if (smu->ppt_funcs->set_active_display_count) + ret = smu->ppt_funcs->set_active_display_count(smu, count); mutex_unlock(&smu->mutex); @@ -2249,8 +2256,8 @@ int smu_get_clock_by_type(struct smu_context *smu, mutex_lock(&smu->mutex); - if (smu->funcs->get_clock_by_type) - ret = smu->funcs->get_clock_by_type(smu, type, clocks); + if (smu->ppt_funcs->get_clock_by_type) + ret = smu->ppt_funcs->get_clock_by_type(smu, type, clocks); mutex_unlock(&smu->mutex); @@ -2264,8 +2271,8 @@ int smu_get_max_high_clocks(struct smu_context *smu, mutex_lock(&smu->mutex); - if (smu->funcs->get_max_high_clocks) - ret = smu->funcs->get_max_high_clocks(smu, clocks); + if (smu->ppt_funcs->get_max_high_clocks) + ret = smu->ppt_funcs->get_max_high_clocks(smu, clocks); mutex_unlock(&smu->mutex); @@ -2312,8 +2319,8 @@ int smu_display_clock_voltage_request(struct smu_context *smu, mutex_lock(&smu->mutex); - if (smu->funcs->display_clock_voltage_request) - ret = smu->funcs->display_clock_voltage_request(smu, clock_req); + if (smu->ppt_funcs->display_clock_voltage_request) + ret = smu->ppt_funcs->display_clock_voltage_request(smu, clock_req); mutex_unlock(&smu->mutex); @@ -2341,8 +2348,8 @@ int smu_notify_smu_enable_pwe(struct smu_context *smu) mutex_lock(&smu->mutex); - if (smu->funcs->notify_smu_enable_pwe) - ret = smu->funcs->notify_smu_enable_pwe(smu); + if (smu->ppt_funcs->notify_smu_enable_pwe) + ret = smu->ppt_funcs->notify_smu_enable_pwe(smu); mutex_unlock(&smu->mutex); @@ -2356,8 +2363,8 @@ int smu_set_xgmi_pstate(struct smu_context *smu, mutex_lock(&smu->mutex); - if (smu->funcs->set_xgmi_pstate) - ret = smu->funcs->set_xgmi_pstate(smu, pstate); + if (smu->ppt_funcs->set_xgmi_pstate) + ret = smu->ppt_funcs->set_xgmi_pstate(smu, pstate); mutex_unlock(&smu->mutex); @@ -2370,8 +2377,8 @@ int smu_set_azalia_d3_pme(struct smu_context *smu) mutex_lock(&smu->mutex); - if (smu->funcs->set_azalia_d3_pme) - ret = smu->funcs->set_azalia_d3_pme(smu); + if (smu->ppt_funcs->set_azalia_d3_pme) + ret = smu->ppt_funcs->set_azalia_d3_pme(smu); mutex_unlock(&smu->mutex); @@ -2384,8 +2391,8 @@ bool smu_baco_is_support(struct smu_context *smu) mutex_lock(&smu->mutex); - if (smu->funcs->baco_is_support) - ret = smu->funcs->baco_is_support(smu); + if (smu->ppt_funcs->baco_is_support) + ret = smu->ppt_funcs->baco_is_support(smu); mutex_unlock(&smu->mutex); @@ -2394,11 +2401,11 @@ bool smu_baco_is_support(struct smu_context *smu) int smu_baco_get_state(struct smu_context *smu, enum smu_baco_state *state) { - if (smu->funcs->baco_get_state) + if (smu->ppt_funcs->baco_get_state) return -EINVAL; mutex_lock(&smu->mutex); - *state = smu->funcs->baco_get_state(smu); + *state = smu->ppt_funcs->baco_get_state(smu); mutex_unlock(&smu->mutex); return 0; @@ -2410,8 +2417,8 @@ int smu_baco_reset(struct smu_context *smu) mutex_lock(&smu->mutex); - if (smu->funcs->baco_reset) - ret = smu->funcs->baco_reset(smu); + if (smu->ppt_funcs->baco_reset) + ret = smu->ppt_funcs->baco_reset(smu); mutex_unlock(&smu->mutex); @@ -2424,8 +2431,8 @@ int smu_mode2_reset(struct smu_context *smu) mutex_lock(&smu->mutex); - if (smu->funcs->mode2_reset) - ret = smu->funcs->mode2_reset(smu); + if (smu->ppt_funcs->mode2_reset) + ret = smu->ppt_funcs->mode2_reset(smu); mutex_unlock(&smu->mutex); @@ -2439,8 +2446,8 @@ int smu_get_max_sustainable_clocks_by_dc(struct smu_context *smu, mutex_lock(&smu->mutex); - if (smu->funcs->get_max_sustainable_clocks_by_dc) - ret = smu->funcs->get_max_sustainable_clocks_by_dc(smu, max_clocks); + if (smu->ppt_funcs->get_max_sustainable_clocks_by_dc) + ret = smu->ppt_funcs->get_max_sustainable_clocks_by_dc(smu, max_clocks); mutex_unlock(&smu->mutex); |