All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alex Deucher <alexdeucher-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Rex Zhu <Rex.Zhu-5C7GfCeVMHo@public.gmane.org>
Cc: amd-gfx list <amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org>
Subject: Re: [PATCH 4/4] drm/amd/powerplay: add profiling mode in dpm level
Date: Sat, 31 Dec 2016 01:25:28 -0500	[thread overview]
Message-ID: <CADnq5_P2GiXmoWnUiHipKQj-2VYT0sD72LoOScmmRua+_kQCXA@mail.gmail.com> (raw)
In-Reply-To: <1482482752-31020-4-git-send-email-Rex.Zhu-5C7GfCeVMHo@public.gmane.org>

On Fri, Dec 23, 2016 at 3:45 AM, Rex Zhu <Rex.Zhu@amd.com> wrote:
> Change-Id: I4a46440882cd94fe5e77e3f351aaccc218a2ece5

Patches 1-3:
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>

patch 4:
Please add a better patch description and explain what profiling mode
is good for, etc.

Alex

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c           | 17 +++++++++++++++++
>  drivers/gpu/drm/amd/amdgpu/ci_dpm.c              |  4 ++--
>  drivers/gpu/drm/amd/include/amd_shared.h         |  1 +
>  drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c   |  3 ++-
>  drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c |  3 ++-
>  5 files changed, 24 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
> index 2bfede8..8438642 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
> @@ -124,6 +124,7 @@ static ssize_t amdgpu_get_dpm_forced_performance_level(struct device *dev,
>                         (level & AMD_DPM_FORCED_LEVEL_LOW) ? "low" :
>                         (level & AMD_DPM_FORCED_LEVEL_HIGH) ? "high" :
>                         (level & AMD_DPM_FORCED_LEVEL_MANUAL) ? "manual" :
> +                       (level & AMD_DPM_FORCED_LEVEL_PROFILING) ? "profiling" :
>                         "unknown"));
>  }
>
> @@ -135,6 +136,7 @@ static ssize_t amdgpu_set_dpm_forced_performance_level(struct device *dev,
>         struct drm_device *ddev = dev_get_drvdata(dev);
>         struct amdgpu_device *adev = ddev->dev_private;
>         enum amd_dpm_forced_level level;
> +       enum amd_dpm_forced_level current_level;
>         int ret = 0;
>
>         /* Can't force performance level when the card is off */
> @@ -142,6 +144,8 @@ static ssize_t amdgpu_set_dpm_forced_performance_level(struct device *dev,
>              (ddev->switch_power_state != DRM_SWITCH_POWER_ON))
>                 return -EINVAL;
>
> +       current_level = amdgpu_dpm_get_performance_level(adev);
> +
>         if (strncmp("low", buf, strlen("low")) == 0) {
>                 level = AMD_DPM_FORCED_LEVEL_LOW;
>         } else if (strncmp("high", buf, strlen("high")) == 0) {
> @@ -150,11 +154,24 @@ static ssize_t amdgpu_set_dpm_forced_performance_level(struct device *dev,
>                 level = AMD_DPM_FORCED_LEVEL_AUTO;
>         } else if (strncmp("manual", buf, strlen("manual")) == 0) {
>                 level = AMD_DPM_FORCED_LEVEL_MANUAL;
> +       } else if (strncmp("profile", buf, strlen("profile")) == 0) {
> +               level = AMD_DPM_FORCED_LEVEL_PROFILING;
>         } else {
>                 count = -EINVAL;
>                 goto fail;
>         }
>
> +       if (current_level == level)
> +               return 0;
> +
> +       if (level == AMD_DPM_FORCED_LEVEL_PROFILING)
> +               amdgpu_set_clockgating_state(adev, AMD_IP_BLOCK_TYPE_GFX,
> +                                               AMD_CG_STATE_UNGATE);
> +       else if (level != AMD_DPM_FORCED_LEVEL_PROFILING &&
> +                       current_level == AMD_DPM_FORCED_LEVEL_PROFILING)
> +               amdgpu_set_clockgating_state(adev, AMD_IP_BLOCK_TYPE_GFX,
> +                                               AMD_CG_STATE_GATE);
> +
>         if (adev->pp_enabled)
>                 amdgpu_dpm_force_performance_level(adev, level);
>         else {
> diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
> index d8de7eb..59be694 100644
> --- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c
> @@ -6571,8 +6571,8 @@ static int ci_dpm_force_clock_level(struct amdgpu_device *adev,
>  {
>         struct ci_power_info *pi = ci_get_pi(adev);
>
> -       if (adev->pm.dpm.forced_level
> -                       != AMD_DPM_FORCED_LEVEL_MANUAL)
> +       if (!(adev->pm.dpm.forced_level &
> +               (AMD_DPM_FORCED_LEVEL_MANUAL | AMD_DPM_FORCED_LEVEL_PROFILING)))
>                 return -EINVAL;
>
>         switch (type) {
> diff --git a/drivers/gpu/drm/amd/include/amd_shared.h b/drivers/gpu/drm/amd/include/amd_shared.h
> index 3f2a6b9..f3424a1 100644
> --- a/drivers/gpu/drm/amd/include/amd_shared.h
> +++ b/drivers/gpu/drm/amd/include/amd_shared.h
> @@ -85,6 +85,7 @@ enum amd_dpm_forced_level {
>         AMD_DPM_FORCED_LEVEL_MANUAL = 0x2,
>         AMD_DPM_FORCED_LEVEL_LOW = 0x4,
>         AMD_DPM_FORCED_LEVEL_HIGH = 0x8,
> +       AMD_DPM_FORCED_LEVEL_PROFILING = 0x10,
>  };
>
>  enum amd_powergating_state {
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c
> index 74dbbd1..beaa7e2 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c
> @@ -1637,7 +1637,8 @@ static int cz_get_dal_power_level(struct pp_hwmgr *hwmgr,
>  static int cz_force_clock_level(struct pp_hwmgr *hwmgr,
>                 enum pp_clock_type type, uint32_t mask)
>  {
> -       if (hwmgr->dpm_level != AMD_DPM_FORCED_LEVEL_MANUAL)
> +       if (!(hwmgr->dpm_level &
> +               (AMD_DPM_FORCED_LEVEL_MANUAL | AMD_DPM_FORCED_LEVEL_PROFILING)))
>                 return -EINVAL;
>
>         switch (type) {
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
> index ae5517a..146d7dd 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
> @@ -4033,7 +4033,8 @@ static int smu7_force_clock_level(struct pp_hwmgr *hwmgr,
>  {
>         struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend);
>
> -       if (hwmgr->dpm_level != AMD_DPM_FORCED_LEVEL_MANUAL)
> +       if (!(hwmgr->dpm_level &
> +               (AMD_DPM_FORCED_LEVEL_MANUAL | AMD_DPM_FORCED_LEVEL_PROFILING)))
>                 return -EINVAL;
>
>         switch (type) {
> --
> 1.9.1
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

  parent reply	other threads:[~2016-12-31  6:25 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-23  8:45 [PATCH 1/4] drm/amd/powerplay: delete dpm code for Cz/St Rex Zhu
     [not found] ` <1482482752-31020-1-git-send-email-Rex.Zhu-5C7GfCeVMHo@public.gmane.org>
2016-12-23  8:45   ` [PATCH 2/4] drm/amd/powerplay: Unify dpm level defines Rex Zhu
2016-12-23  8:45   ` [PATCH 3/4] drm/amd/powerplay: fix bug dpm level set by user was reset to auto Rex Zhu
2016-12-23  8:45   ` [PATCH 4/4] drm/amd/powerplay: add profiling mode in dpm level Rex Zhu
     [not found]     ` <1482482752-31020-4-git-send-email-Rex.Zhu-5C7GfCeVMHo@public.gmane.org>
2016-12-31  6:25       ` Alex Deucher [this message]
     [not found]         ` <CADnq5_P2GiXmoWnUiHipKQj-2VYT0sD72LoOScmmRua+_kQCXA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-01-08 20:18           ` Andy Furniss
     [not found]             ` <58729E90.3090506-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-01-09  7:46               ` Zhu, Rex
     [not found]                 ` <CY4PR12MB1687780C20D2155C8D92F994FB640-rpdhrqHFk06Y0SjTqZDccQdYzm3356FpvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2017-01-09 10:28                   ` Andy Furniss
     [not found]                     ` <587365E8.7000904-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-01-09 10:40                       ` Zhu, Rex
     [not found]                         ` <CY4PR12MB1687BA955CA0340AB65272F8FB640-rpdhrqHFk06Y0SjTqZDccQdYzm3356FpvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2017-01-09 10:57                           ` Andy Furniss
2017-01-09 14:24                   ` Deucher, Alexander
2017-01-03 10:15       ` Huang Rui

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CADnq5_P2GiXmoWnUiHipKQj-2VYT0sD72LoOScmmRua+_kQCXA@mail.gmail.com \
    --to=alexdeucher-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
    --cc=Rex.Zhu-5C7GfCeVMHo@public.gmane.org \
    --cc=amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.