[PATCH 07/26] drm/amd/powerplay: implement pwm1_enable hwmon interface for SMU11
Huang, Ray
Ray.Huang at amd.com
Tue Feb 26 05:40:34 UTC 2019
> -----Original Message-----
> From: Alex Deucher [mailto:alexdeucher at gmail.com]
> Sent: Tuesday, February 26, 2019 11:59 AM
> To: Huang, Ray <Ray.Huang at amd.com>
> Cc: amd-gfx list <amd-gfx at lists.freedesktop.org>; Gao, Likun
> <Likun.Gao at amd.com>; Wang, Kevin(Yang) <Kevin1.Wang at amd.com>; Gui,
> Jack <Jack.Gui at amd.com>
> Subject: Re: [PATCH 07/26] drm/amd/powerplay: implement pwm1_enable
> hwmon interface for SMU11
>
> On Mon, Feb 25, 2019 at 7:13 AM Huang Rui <ray.huang at amd.com> wrote:
> >
> > From: Chengming Gui <Jack.Gui at amd.com>
> >
> > 1, set get_pwm1_enable and set_pwm1_enable functions to call
> > smu_get_fan_control_mode and smu_set_fan_control_mode for SMU11
> 2,
> > implement set_fan_control_mode function
> >
> > v2: add return value in set_fan_control_mode function
> >
> > Signed-off-by: Chengming Gui <Jack.Gui at amd.com>
> > Reviewed-by: Huang Rui <ray.huang at amd.com>
> > ---
> > drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 31
> +++++++++++++++++---------
> > drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h | 3 +++
> > drivers/gpu/drm/amd/powerplay/smu_v11_0.c | 31
> ++++++++++++++++++++++++++
> > 3 files changed, 55 insertions(+), 10 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
> > b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
> > index d40aa39..ac991f9 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
> > @@ -1382,11 +1382,14 @@ static ssize_t
> > amdgpu_hwmon_get_pwm1_enable(struct device *dev, {
> > struct amdgpu_device *adev = dev_get_drvdata(dev);
> > u32 pwm_mode = 0;
> > + if (is_support_sw_smu(adev))
> > + pwm_mode = smu_get_fan_control_mode(&adev->smu);
> > + else {
>
> If either clause has { }, both should. E.g.,
>
> if () {
> ...
> } else {
> ...
> }
Yes, will fix it.
Thanks,
Ray
> With that fixed:
> Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
>
>
> > + if (!adev->powerplay.pp_funcs->get_fan_control_mode)
> > + return -EINVAL;
> >
> > - if (!adev->powerplay.pp_funcs->get_fan_control_mode)
> > - return -EINVAL;
> > -
> > - pwm_mode = amdgpu_dpm_get_fan_control_mode(adev);
> > + pwm_mode = amdgpu_dpm_get_fan_control_mode(adev);
> > + }
> >
> > return sprintf(buf, "%i\n", pwm_mode); } @@ -1405,14 +1408,22
> > @@ static ssize_t amdgpu_hwmon_set_pwm1_enable(struct device *dev,
> > (adev->ddev->switch_power_state != DRM_SWITCH_POWER_ON))
> > return -EINVAL;
> >
> > - if (!adev->powerplay.pp_funcs->set_fan_control_mode)
> > - return -EINVAL;
> > + if (is_support_sw_smu(adev)) {
> > + err = kstrtoint(buf, 10, &value);
> > + if (err)
> > + return err;
> >
> > - err = kstrtoint(buf, 10, &value);
> > - if (err)
> > - return err;
> > + smu_set_fan_control_mode(&adev->smu, value);
> > + } else {
> > + if (!adev->powerplay.pp_funcs->set_fan_control_mode)
> > + return -EINVAL;
> > +
> > + err = kstrtoint(buf, 10, &value);
> > + if (err)
> > + return err;
> >
> > - amdgpu_dpm_set_fan_control_mode(adev, value);
> > + amdgpu_dpm_set_fan_control_mode(adev, value);
> > + }
> >
> > return count;
> > }
> > diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
> > b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
> > index f94d09d..ef2b807 100644
> > --- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
> > +++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h
> > @@ -533,6 +533,7 @@ struct smu_funcs
> > uint32_t (*get_mclk)(struct smu_context *smu, bool low);
> > int (*get_current_rpm)(struct smu_context *smu, uint32_t *speed);
> > uint32_t (*get_fan_control_mode)(struct smu_context *smu);
> > + int (*set_fan_control_mode)(struct smu_context *smu, uint32_t
> > + mode);
> > int (*get_fan_speed_percent)(struct smu_context *smu, uint32_t
> *speed);
> > int (*set_fan_speed_percent)(struct smu_context *smu, uint32_t
> > speed); }; @@ -669,6 +670,8 @@ struct smu_funcs
> > ((smu)->ppt_funcs->set_cpu_power_state ?
> > (smu)->ppt_funcs->set_cpu_power_state((smu)) : 0) #define
> smu_get_fan_control_mode(smu) \
> > ((smu)->funcs->get_fan_control_mode ?
> > (smu)->funcs->get_fan_control_mode((smu)) : 0)
> > +#define smu_set_fan_control_mode(smu, value) \
> > + ((smu)->funcs->set_fan_control_mode ?
> > +(smu)->funcs->set_fan_control_mode((smu), (value)) : 0)
> > #define smu_get_fan_speed_percent(smu, speed) \
> > ((smu)->funcs->get_fan_speed_percent ?
> > (smu)->funcs->get_fan_speed_percent((smu), (speed)) : 0) #define
> > smu_set_fan_speed_percent(smu, speed) \ diff --git
> > a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
> > b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
> > index d8917b2..aaa1bd8 100644
> > --- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
> > +++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c
> > @@ -1833,6 +1833,36 @@ smu_v11_0_set_fan_speed_percent(struct
> smu_context *smu, uint32_t speed)
> > return smu_v11_0_set_fan_static_mode(smu,
> > FDO_PWM_MODE_STATIC); }
> >
> > +static int
> > +smu_v11_0_set_fan_control_mode(struct smu_context *smu,
> > + uint32_t mode) {
> > + int ret = 0;
> > + bool start = 1;
> > + bool stop = 0;
> > +
> > + switch (mode) {
> > + case AMD_FAN_CTRL_NONE:
> > + ret = smu_v11_0_set_fan_speed_percent(smu, 100);
> > + break;
> > + case AMD_FAN_CTRL_MANUAL:
> > + ret = smu_v11_0_smc_fan_control(smu, stop);
> > + break;
> > + case AMD_FAN_CTRL_AUTO:
> > + ret = smu_v11_0_smc_fan_control(smu, start);
> > + break;
> > + default:
> > + break;
> > + }
> > +
> > + if (ret) {
> > + pr_err("[%s]Set fan control mode failed!");
> > + return -EINVAL;
> > + }
> > +
> > + return ret;
> > +}
> > +
> > static const struct smu_funcs smu_v11_0_funcs = {
> > .init_microcode = smu_v11_0_init_microcode,
> > .load_microcode = smu_v11_0_load_microcode, @@ -1885,6 +1915,7
> > @@ static const struct smu_funcs smu_v11_0_funcs = {
> > .dpm_set_vce_enable = smu_v11_0_dpm_set_vce_enable,
> > .get_current_rpm = smu_v11_0_get_current_rpm,
> > .get_fan_control_mode = smu_v11_0_get_fan_control_mode,
> > + .set_fan_control_mode = smu_v11_0_set_fan_control_mode,
> > .get_fan_speed_percent = smu_v11_0_get_fan_speed_percent,
> > .set_fan_speed_percent = smu_v11_0_set_fan_speed_percent, };
> > --
> > 2.7.4
> >
> > _______________________________________________
> > amd-gfx mailing list
> > amd-gfx at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list