[PATCH v2] drm/amdgpu/pm: Don't show pp_power_profile_mode for unsupported devices

Alex Deucher alexdeucher at gmail.com
Mon Nov 1 19:57:40 UTC 2021


On Mon, Nov 1, 2021 at 3:10 PM Mario Limonciello
<mario.limonciello at amd.com> wrote:
>
> This command corresponding to this attribute was deprecated in the PMFW
> for YC so don't show a non-functional attribute.
>
> Verify that the function has been implemented by the subsystem.
>
> Suggested-by: Alex Deucher <alexander.deucher at amd.com>
> Signed-off-by: Mario Limonciello <mario.limonciello at amd.com>
> ---
> Changes from v1->v2:
>  * Change smu_get_power_profile_mode to return -EOPNOTSUPP if not
>    supported by underlying implementation
>  * Check amdgpu_dpm_get_power_profile_mode to determine unsupported
>  drivers/gpu/drm/amd/pm/amdgpu_pm.c        |  4 ++++
>  drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 11 +++++++----
>  2 files changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/pm/amdgpu_pm.c b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
> index 49fe4155c374..41472ed99253 100644
> --- a/drivers/gpu/drm/amd/pm/amdgpu_pm.c
> +++ b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
> @@ -2094,6 +2094,10 @@ static int default_attr_update(struct amdgpu_device *adev, struct amdgpu_device_
>         } else if (DEVICE_ATTR_IS(pp_dpm_dclk)) {
>                 if (!(asic_type == CHIP_VANGOGH || asic_type == CHIP_SIENNA_CICHLID))
>                         *states = ATTR_STATE_UNSUPPORTED;
> +       } else if (DEVICE_ATTR_IS(pp_power_profile_mode)) {
> +               if (!adev->powerplay.pp_funcs->get_power_profile_mode ||
> +                   amdgpu_dpm_get_power_profile_mode(adev, NULL) == -EOPNOTSUPP)
> +                       *states = ATTR_STATE_UNSUPPORTED;
>         }
>
>         switch (asic_type) {
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> index b06c59dcc1b4..821ae6e78703 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> @@ -2534,13 +2534,15 @@ static int smu_get_power_profile_mode(void *handle, char *buf)
>         struct smu_context *smu = handle;
>         int ret = 0;
>
> -       if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
> +       if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled ||
> +           !smu->ppt_funcs->get_power_profile_mode)
>                 return -EOPNOTSUPP;
> +       if (!buf)
> +               return -EINVAL;
>
>         mutex_lock(&smu->mutex);
>
> -       if (smu->ppt_funcs->get_power_profile_mode)
> -               ret = smu->ppt_funcs->get_power_profile_mode(smu, buf);
> +       ret = smu->ppt_funcs->get_power_profile_mode(smu, buf);
>
>         mutex_unlock(&smu->mutex);
>
> @@ -2554,7 +2556,8 @@ static int smu_set_power_profile_mode(void *handle,
>         struct smu_context *smu = handle;
>         int ret = 0;
>
> -       if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
> +       if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled ||
> +           !smu->ppt_funcs->set_power_profile_mode)
>                 return -EOPNOTSUPP;
>
>         mutex_lock(&smu->mutex);

You'll need to add similar functionality in
pp_get_power_profile_mode() in amd_powerplay.c to cover the older
asics.

Alex

> --
> 2.25.1
>


More information about the amd-gfx mailing list