[PATCH 2/2] drm/amdgpu: Auto switch to video profiling mode on VCN demand

Alex Deucher alexdeucher at gmail.com
Fri May 18 19:05:57 UTC 2018


On Fri, May 18, 2018 at 5:33 AM, Rex Zhu <Rex.Zhu at amd.com> wrote:

Add a commit message.  Something like:
Switch to the VIDEO power profiles when VCN is active which is the
power profile optimized for video playback.
With that fixed:
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

Want to take a stab at doing similar patches for UVD and VCE?

Also, does the smu/driver properly handle profile arbitration.  E.g.,
if VR profile is active and the user runs VCN which switches to the
VIDEO profile, we should stay in VR profile.  I think vg10 and RV do
the right thing because the SMU handles it, but on older parts we
probably need to double check.

Alex

> Signed-off-by: Rex Zhu <Rex.Zhu at amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 12 ++++++++----
>  1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
> index 3549481..94b221f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
> @@ -207,11 +207,13 @@ static void amdgpu_vcn_idle_work_handler(struct work_struct *work)
>         unsigned fences = amdgpu_fence_count_emitted(&adev->vcn.ring_dec);
>
>         if (fences == 0) {
> -               if (adev->pm.dpm_enabled)
> +               if (adev->pm.dpm_enabled) {
> +                       amdgpu_dpm_switch_power_profile(adev, PP_SMC_POWER_PROFILE_VIDEO, false);
>                         amdgpu_dpm_enable_uvd(adev, false);
> -               else
> +               } else {
>                         amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_VCN,
>                                                                AMD_PG_STATE_GATE);
> +               }
>         } else {
>                 schedule_delayed_work(&adev->vcn.idle_work, VCN_IDLE_TIMEOUT);
>         }
> @@ -223,11 +225,13 @@ void amdgpu_vcn_ring_begin_use(struct amdgpu_ring *ring)
>         bool set_clocks = !cancel_delayed_work_sync(&adev->vcn.idle_work);
>
>         if (set_clocks && adev->pm.dpm_enabled) {
> -               if (adev->pm.dpm_enabled)
> +               if (adev->pm.dpm_enabled) {
>                         amdgpu_dpm_enable_uvd(adev, true);
> -               else
> +                       amdgpu_dpm_switch_power_profile(adev, PP_SMC_POWER_PROFILE_VIDEO, true);
> +               } else {
>                         amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_VCN,
>                                                                AMD_PG_STATE_UNGATE);
> +               }
>         }
>  }
>
> --
> 1.9.1
>
> _______________________________________________
> 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