amdgpu/pm: Powerplay API for smu , changed 6 pm hwmon fan functions to use API
v2: changed error return value of smu_get_fan_control_mode to AMD_FAN_CTRL_NONE fixed type in amdgpu_hwmon_get_pwm1_enable() print statement fixed indent flagged by checkpatch.pl Modified Functions smu_set_fan_speed_rpm() - modifed arg0 to match Powerplay API set_fan_speed_rpm smu_get_fan_control_mode() - modifed signature to match Powerplay API get_fan_control_mode smu_set_fan_control_mode() - modifed signature to match Powerplay API set_fan_control_mode smu_get_fan_speed_percent() - modifed signature to match Powerplay API get_fan_speed_percent smu_set_fan_speed_percent() - modifed signature to match Powerplay API set_fan_speed_percent smu_get_fan_speed_rpm() - modifed arg0 to match Powerplay API get_fan_speed_rpm Other Changes added 6 above smu fan Powerplay functions to swsmu_dpm_funcs removed special smu handling of above functions and called through Powerplay API Signed-off-by: Darren Powell <darren.powell@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Evan Quan <evan.quan@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
bab0f60291
commit
f46587bced
@ -2509,22 +2509,18 @@ static ssize_t amdgpu_hwmon_get_pwm1_enable(struct device *dev,
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (is_support_sw_smu(adev)) {
|
||||
pwm_mode = smu_get_fan_control_mode(&adev->smu);
|
||||
} else {
|
||||
if (!adev->powerplay.pp_funcs->get_fan_control_mode) {
|
||||
pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
|
||||
pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
pwm_mode = amdgpu_dpm_get_fan_control_mode(adev);
|
||||
if (!adev->powerplay.pp_funcs->get_fan_control_mode) {
|
||||
pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
|
||||
pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
pwm_mode = amdgpu_dpm_get_fan_control_mode(adev);
|
||||
|
||||
pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
|
||||
pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
|
||||
|
||||
return sprintf(buf, "%i\n", pwm_mode);
|
||||
return sprintf(buf, "%u\n", pwm_mode);
|
||||
}
|
||||
|
||||
static ssize_t amdgpu_hwmon_set_pwm1_enable(struct device *dev,
|
||||
@ -2549,18 +2545,14 @@ static ssize_t amdgpu_hwmon_set_pwm1_enable(struct device *dev,
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (is_support_sw_smu(adev)) {
|
||||
smu_set_fan_control_mode(&adev->smu, value);
|
||||
} else {
|
||||
if (!adev->powerplay.pp_funcs->set_fan_control_mode) {
|
||||
pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
|
||||
pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
amdgpu_dpm_set_fan_control_mode(adev, value);
|
||||
if (!adev->powerplay.pp_funcs->set_fan_control_mode) {
|
||||
pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
|
||||
pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
amdgpu_dpm_set_fan_control_mode(adev, value);
|
||||
|
||||
pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
|
||||
pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
|
||||
|
||||
@ -2599,11 +2591,7 @@ static ssize_t amdgpu_hwmon_set_pwm1(struct device *dev,
|
||||
return err;
|
||||
}
|
||||
|
||||
if (is_support_sw_smu(adev))
|
||||
pwm_mode = smu_get_fan_control_mode(&adev->smu);
|
||||
else
|
||||
pwm_mode = amdgpu_dpm_get_fan_control_mode(adev);
|
||||
|
||||
pwm_mode = amdgpu_dpm_get_fan_control_mode(adev);
|
||||
if (pwm_mode != AMD_FAN_CTRL_MANUAL) {
|
||||
pr_info("manual fan speed control should be enabled first\n");
|
||||
pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
|
||||
@ -2620,9 +2608,7 @@ static ssize_t amdgpu_hwmon_set_pwm1(struct device *dev,
|
||||
|
||||
value = (value * 100) / 255;
|
||||
|
||||
if (is_support_sw_smu(adev))
|
||||
err = smu_set_fan_speed_percent(&adev->smu, value);
|
||||
else if (adev->powerplay.pp_funcs->set_fan_speed_percent)
|
||||
if (adev->powerplay.pp_funcs->set_fan_speed_percent)
|
||||
err = amdgpu_dpm_set_fan_speed_percent(adev, value);
|
||||
else
|
||||
err = -EINVAL;
|
||||
@ -2653,9 +2639,7 @@ static ssize_t amdgpu_hwmon_get_pwm1(struct device *dev,
|
||||
return err;
|
||||
}
|
||||
|
||||
if (is_support_sw_smu(adev))
|
||||
err = smu_get_fan_speed_percent(&adev->smu, &speed);
|
||||
else if (adev->powerplay.pp_funcs->get_fan_speed_percent)
|
||||
if (adev->powerplay.pp_funcs->get_fan_speed_percent)
|
||||
err = amdgpu_dpm_get_fan_speed_percent(adev, &speed);
|
||||
else
|
||||
err = -EINVAL;
|
||||
@ -2688,9 +2672,7 @@ static ssize_t amdgpu_hwmon_get_fan1_input(struct device *dev,
|
||||
return err;
|
||||
}
|
||||
|
||||
if (is_support_sw_smu(adev))
|
||||
err = smu_get_fan_speed_rpm(&adev->smu, &speed);
|
||||
else if (adev->powerplay.pp_funcs->get_fan_speed_rpm)
|
||||
if (adev->powerplay.pp_funcs->get_fan_speed_rpm)
|
||||
err = amdgpu_dpm_get_fan_speed_rpm(adev, &speed);
|
||||
else
|
||||
err = -EINVAL;
|
||||
@ -2781,9 +2763,7 @@ static ssize_t amdgpu_hwmon_get_fan1_target(struct device *dev,
|
||||
return err;
|
||||
}
|
||||
|
||||
if (is_support_sw_smu(adev))
|
||||
err = smu_get_fan_speed_rpm(&adev->smu, &rpm);
|
||||
else if (adev->powerplay.pp_funcs->get_fan_speed_rpm)
|
||||
if (adev->powerplay.pp_funcs->get_fan_speed_rpm)
|
||||
err = amdgpu_dpm_get_fan_speed_rpm(adev, &rpm);
|
||||
else
|
||||
err = -EINVAL;
|
||||
@ -2815,10 +2795,7 @@ static ssize_t amdgpu_hwmon_set_fan1_target(struct device *dev,
|
||||
return err;
|
||||
}
|
||||
|
||||
if (is_support_sw_smu(adev))
|
||||
pwm_mode = smu_get_fan_control_mode(&adev->smu);
|
||||
else
|
||||
pwm_mode = amdgpu_dpm_get_fan_control_mode(adev);
|
||||
pwm_mode = amdgpu_dpm_get_fan_control_mode(adev);
|
||||
|
||||
if (pwm_mode != AMD_FAN_CTRL_MANUAL) {
|
||||
pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
|
||||
@ -2833,9 +2810,7 @@ static ssize_t amdgpu_hwmon_set_fan1_target(struct device *dev,
|
||||
return err;
|
||||
}
|
||||
|
||||
if (is_support_sw_smu(adev))
|
||||
err = smu_set_fan_speed_rpm(&adev->smu, value);
|
||||
else if (adev->powerplay.pp_funcs->set_fan_speed_rpm)
|
||||
if (adev->powerplay.pp_funcs->set_fan_speed_rpm)
|
||||
err = amdgpu_dpm_set_fan_speed_rpm(adev, value);
|
||||
else
|
||||
err = -EINVAL;
|
||||
@ -2866,18 +2841,14 @@ static ssize_t amdgpu_hwmon_get_fan1_enable(struct device *dev,
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (is_support_sw_smu(adev)) {
|
||||
pwm_mode = smu_get_fan_control_mode(&adev->smu);
|
||||
} else {
|
||||
if (!adev->powerplay.pp_funcs->get_fan_control_mode) {
|
||||
pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
|
||||
pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
pwm_mode = amdgpu_dpm_get_fan_control_mode(adev);
|
||||
if (!adev->powerplay.pp_funcs->get_fan_control_mode) {
|
||||
pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
|
||||
pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
pwm_mode = amdgpu_dpm_get_fan_control_mode(adev);
|
||||
|
||||
pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
|
||||
pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
|
||||
|
||||
@ -2914,16 +2885,12 @@ static ssize_t amdgpu_hwmon_set_fan1_enable(struct device *dev,
|
||||
return err;
|
||||
}
|
||||
|
||||
if (is_support_sw_smu(adev)) {
|
||||
smu_set_fan_control_mode(&adev->smu, pwm_mode);
|
||||
} else {
|
||||
if (!adev->powerplay.pp_funcs->set_fan_control_mode) {
|
||||
pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
|
||||
pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
|
||||
return -EINVAL;
|
||||
}
|
||||
amdgpu_dpm_set_fan_control_mode(adev, pwm_mode);
|
||||
if (!adev->powerplay.pp_funcs->set_fan_control_mode) {
|
||||
pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
|
||||
pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
|
||||
return -EINVAL;
|
||||
}
|
||||
amdgpu_dpm_set_fan_control_mode(adev, pwm_mode);
|
||||
|
||||
pm_runtime_mark_last_busy(adev_to_drm(adev)->dev);
|
||||
pm_runtime_put_autosuspend(adev_to_drm(adev)->dev);
|
||||
|
@ -1230,7 +1230,7 @@ int smu_check_fw_status(struct smu_context *smu);
|
||||
|
||||
int smu_set_gfx_cgpg(struct smu_context *smu, bool enabled);
|
||||
|
||||
int smu_set_fan_speed_rpm(struct smu_context *smu, uint32_t speed);
|
||||
int smu_set_fan_speed_rpm(void *handle, uint32_t speed);
|
||||
|
||||
int smu_get_power_limit(struct smu_context *smu,
|
||||
uint32_t *limit,
|
||||
@ -1252,11 +1252,12 @@ int smu_set_power_profile_mode(struct smu_context *smu,
|
||||
long *param,
|
||||
uint32_t param_size,
|
||||
bool lock_needed);
|
||||
int smu_get_fan_control_mode(struct smu_context *smu);
|
||||
u32 smu_get_fan_control_mode(void *handle);
|
||||
int smu_set_fan_control_mode(struct smu_context *smu, int value);
|
||||
int smu_get_fan_speed_percent(struct smu_context *smu, uint32_t *speed);
|
||||
int smu_set_fan_speed_percent(struct smu_context *smu, uint32_t speed);
|
||||
int smu_get_fan_speed_rpm(struct smu_context *smu, uint32_t *speed);
|
||||
void smu_pp_set_fan_control_mode(void *handle, u32 value);
|
||||
int smu_get_fan_speed_percent(void *handle, u32 *speed);
|
||||
int smu_set_fan_speed_percent(void *handle, u32 speed);
|
||||
int smu_get_fan_speed_rpm(void *handle, uint32_t *speed);
|
||||
|
||||
int smu_set_deep_sleep_dcefclk(struct smu_context *smu, int clk);
|
||||
|
||||
|
@ -2029,8 +2029,9 @@ int smu_set_gfx_cgpg(struct smu_context *smu, bool enabled)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int smu_set_fan_speed_rpm(struct smu_context *smu, uint32_t speed)
|
||||
int smu_set_fan_speed_rpm(void *handle, uint32_t speed)
|
||||
{
|
||||
struct smu_context *smu = handle;
|
||||
u32 percent;
|
||||
int ret = 0;
|
||||
|
||||
@ -2265,12 +2266,13 @@ int smu_set_power_profile_mode(struct smu_context *smu,
|
||||
}
|
||||
|
||||
|
||||
int smu_get_fan_control_mode(struct smu_context *smu)
|
||||
u32 smu_get_fan_control_mode(void *handle)
|
||||
{
|
||||
int ret = 0;
|
||||
struct smu_context *smu = handle;
|
||||
u32 ret = 0;
|
||||
|
||||
if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
|
||||
return -EOPNOTSUPP;
|
||||
return AMD_FAN_CTRL_NONE;
|
||||
|
||||
mutex_lock(&smu->mutex);
|
||||
|
||||
@ -2287,7 +2289,7 @@ int smu_set_fan_control_mode(struct smu_context *smu, int value)
|
||||
int ret = 0;
|
||||
|
||||
if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
|
||||
return -EOPNOTSUPP;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
mutex_lock(&smu->mutex);
|
||||
|
||||
@ -2307,8 +2309,16 @@ int smu_set_fan_control_mode(struct smu_context *smu, int value)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int smu_get_fan_speed_percent(struct smu_context *smu, uint32_t *speed)
|
||||
void smu_pp_set_fan_control_mode(void *handle, u32 value) {
|
||||
struct smu_context *smu = handle;
|
||||
|
||||
smu_set_fan_control_mode(smu, value);
|
||||
}
|
||||
|
||||
|
||||
int smu_get_fan_speed_percent(void *handle, u32 *speed)
|
||||
{
|
||||
struct smu_context *smu = handle;
|
||||
int ret = 0;
|
||||
uint32_t percent;
|
||||
|
||||
@ -2330,8 +2340,9 @@ int smu_get_fan_speed_percent(struct smu_context *smu, uint32_t *speed)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int smu_set_fan_speed_percent(struct smu_context *smu, uint32_t speed)
|
||||
int smu_set_fan_speed_percent(void *handle, u32 speed)
|
||||
{
|
||||
struct smu_context *smu = handle;
|
||||
int ret = 0;
|
||||
|
||||
if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
|
||||
@ -2352,8 +2363,9 @@ int smu_set_fan_speed_percent(struct smu_context *smu, uint32_t speed)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int smu_get_fan_speed_rpm(struct smu_context *smu, uint32_t *speed)
|
||||
int smu_get_fan_speed_rpm(void *handle, uint32_t *speed)
|
||||
{
|
||||
struct smu_context *smu = handle;
|
||||
int ret = 0;
|
||||
u32 percent;
|
||||
|
||||
@ -2738,7 +2750,13 @@ int smu_gfx_state_change_set(struct smu_context *smu, uint32_t state)
|
||||
|
||||
static const struct amd_pm_funcs swsmu_pm_funcs = {
|
||||
/* export for sysfs */
|
||||
.set_fan_control_mode = smu_pp_set_fan_control_mode,
|
||||
.get_fan_control_mode = smu_get_fan_control_mode,
|
||||
.set_fan_speed_percent = smu_set_fan_speed_percent,
|
||||
.get_fan_speed_percent = smu_get_fan_speed_percent,
|
||||
.get_performance_level = smu_get_performance_level,
|
||||
.get_fan_speed_rpm = smu_get_fan_speed_rpm,
|
||||
.set_fan_speed_rpm = smu_set_fan_speed_rpm,
|
||||
.switch_power_profile = smu_switch_power_profile,
|
||||
/* export to amdgpu */
|
||||
.set_mp1_state = smu_set_mp1_state,
|
||||
|
Loading…
x
Reference in New Issue
Block a user