[PATCH 06/29] drm/amdgpu: add inst to amdgpu_dpm_enable_vcn

Alex Deucher alexdeucher at gmail.com
Mon Oct 28 19:12:51 UTC 2024


On Thu, Oct 24, 2024 at 11:13 PM <boyuan.zhang at amd.com> wrote:
>
> From: Boyuan Zhang <boyuan.zhang at amd.com>
>
> Add an instance parameter to amdgpu_dpm_enable_vcn() function, and change
> all calls from vcn ip functions to add instance argument. vcn generations
> with only one instance (v1.0, v2.0) always use 0 as instance number. vcn
> generations with multiple instances (v2.5, v3.0, v4.0, v4.0.3, v4.0.5,
> v5.0.0) use the actual instance number.
>
> v2: remove for-loop in amdgpu_dpm_enable_vcn(), and temporarily move it
> to vcn ip with multiple instances, in order to keep the exact same logic
> as before, until further separation in next patch.
>
> v3: fix missing prefix
>
> Signed-off-by: Boyuan Zhang <boyuan.zhang at amd.com>
> Reviewed-by: Christian König <christian.koenig at amd.com>

Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c   |  6 +++---
>  drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c   |  4 ++--
>  drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c   | 12 ++++++++----
>  drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c   | 12 ++++++++----
>  drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c   | 12 ++++++++----
>  drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c | 12 ++++++++----
>  drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c | 12 ++++++++----
>  drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c | 12 ++++++++----
>  drivers/gpu/drm/amd/pm/amdgpu_dpm.c     | 12 +++++-------
>  drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h |  2 +-
>  10 files changed, 59 insertions(+), 37 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
> index 511d76e188f2..7ad2ab3affe4 100644
> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c
> @@ -303,7 +303,7 @@ static int vcn_v1_0_suspend(struct amdgpu_ip_block *ip_block)
>         idle_work_unexecuted = cancel_delayed_work_sync(&adev->vcn.idle_work);
>         if (idle_work_unexecuted) {
>                 if (adev->pm.dpm_enabled)
> -                       amdgpu_dpm_enable_vcn(adev, false);
> +                       amdgpu_dpm_enable_vcn(adev, false, 0);
>         }
>
>         r = vcn_v1_0_hw_fini(ip_block);
> @@ -1856,7 +1856,7 @@ static void vcn_v1_0_idle_work_handler(struct work_struct *work)
>         if (fences == 0) {
>                 amdgpu_gfx_off_ctrl(adev, true);
>                 if (adev->pm.dpm_enabled)
> -                       amdgpu_dpm_enable_vcn(adev, false);
> +                       amdgpu_dpm_enable_vcn(adev, false, 0);
>                 else
>                         amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_VCN,
>                                AMD_PG_STATE_GATE);
> @@ -1886,7 +1886,7 @@ void vcn_v1_0_set_pg_for_begin_use(struct amdgpu_ring *ring, bool set_clocks)
>         if (set_clocks) {
>                 amdgpu_gfx_off_ctrl(adev, false);
>                 if (adev->pm.dpm_enabled)
> -                       amdgpu_dpm_enable_vcn(adev, true);
> +                       amdgpu_dpm_enable_vcn(adev, true, 0);
>                 else
>                         amdgpu_device_ip_set_powergating_state(adev, AMD_IP_BLOCK_TYPE_VCN,
>                                AMD_PG_STATE_UNGATE);
> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c
> index 697822abf3fc..f34cab96d0b4 100644
> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v2_0.c
> @@ -978,7 +978,7 @@ static int vcn_v2_0_start(struct amdgpu_device *adev)
>         int i, j, r;
>
>         if (adev->pm.dpm_enabled)
> -               amdgpu_dpm_enable_vcn(adev, true);
> +               amdgpu_dpm_enable_vcn(adev, true, 0);
>
>         if (adev->pg_flags & AMD_PG_SUPPORT_VCN_DPG)
>                 return vcn_v2_0_start_dpg_mode(adev, adev->vcn.indirect_sram);
> @@ -1235,7 +1235,7 @@ static int vcn_v2_0_stop(struct amdgpu_device *adev)
>
>  power_off:
>         if (adev->pm.dpm_enabled)
> -               amdgpu_dpm_enable_vcn(adev, false);
> +               amdgpu_dpm_enable_vcn(adev, false, 0);
>
>         return 0;
>  }
> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c b/drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c
> index 0afbcf72cd51..beab2c24042d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c
> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v2_5.c
> @@ -1012,8 +1012,10 @@ static int vcn_v2_5_start(struct amdgpu_device *adev)
>         uint32_t rb_bufsz, tmp;
>         int i, j, k, r;
>
> -       if (adev->pm.dpm_enabled)
> -               amdgpu_dpm_enable_vcn(adev, true);
> +       for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
> +               if (adev->pm.dpm_enabled)
> +                       amdgpu_dpm_enable_vcn(adev, true, i);
> +       }
>
>         for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
>                 if (adev->vcn.harvest_config & (1 << i))
> @@ -1485,8 +1487,10 @@ static int vcn_v2_5_stop(struct amdgpu_device *adev)
>                         ~UVD_POWER_STATUS__UVD_POWER_STATUS_MASK);
>         }
>
> -       if (adev->pm.dpm_enabled)
> -               amdgpu_dpm_enable_vcn(adev, false);
> +       for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
> +               if (adev->pm.dpm_enabled)
> +                       amdgpu_dpm_enable_vcn(adev, false, i);
> +       }
>
>         return 0;
>  }
> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c
> index b28aad37d9ed..6d047257490c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c
> @@ -1141,8 +1141,10 @@ static int vcn_v3_0_start(struct amdgpu_device *adev)
>         uint32_t rb_bufsz, tmp;
>         int i, j, k, r;
>
> -       if (adev->pm.dpm_enabled)
> -               amdgpu_dpm_enable_vcn(adev, true);
> +       for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
> +               if (adev->pm.dpm_enabled)
> +                       amdgpu_dpm_enable_vcn(adev, true, i);
> +       }
>
>         for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
>                 if (adev->vcn.harvest_config & (1 << i))
> @@ -1632,8 +1634,10 @@ static int vcn_v3_0_stop(struct amdgpu_device *adev)
>                 vcn_v3_0_enable_static_power_gating(adev, i);
>         }
>
> -       if (adev->pm.dpm_enabled)
> -               amdgpu_dpm_enable_vcn(adev, false);
> +       for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
> +               if (adev->pm.dpm_enabled)
> +                       amdgpu_dpm_enable_vcn(adev, false, i);
> +       }
>
>         return 0;
>  }
> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c
> index d87850dec27c..4b836b4935e2 100644
> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c
> @@ -1088,8 +1088,10 @@ static int vcn_v4_0_start(struct amdgpu_device *adev)
>         uint32_t tmp;
>         int i, j, k, r;
>
> -       if (adev->pm.dpm_enabled)
> -               amdgpu_dpm_enable_vcn(adev, true);
> +       for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
> +               if (adev->pm.dpm_enabled)
> +                       amdgpu_dpm_enable_vcn(adev, true, i);
> +       }
>
>         for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
>                 if (adev->vcn.harvest_config & (1 << i))
> @@ -1614,8 +1616,10 @@ static int vcn_v4_0_stop(struct amdgpu_device *adev)
>                 vcn_v4_0_enable_static_power_gating(adev, i);
>         }
>
> -       if (adev->pm.dpm_enabled)
> -               amdgpu_dpm_enable_vcn(adev, false);
> +       for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
> +               if (adev->pm.dpm_enabled)
> +                       amdgpu_dpm_enable_vcn(adev, false, i);
> +       }
>
>         return 0;
>  }
> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c
> index 6fc52a1bda31..868302d63a4b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c
> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.c
> @@ -1091,8 +1091,10 @@ static int vcn_v4_0_3_start(struct amdgpu_device *adev)
>         int i, j, k, r, vcn_inst;
>         uint32_t tmp;
>
> -       if (adev->pm.dpm_enabled)
> -               amdgpu_dpm_enable_vcn(adev, true);
> +       for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
> +               if (adev->pm.dpm_enabled)
> +                       amdgpu_dpm_enable_vcn(adev, true, i);
> +       }
>
>         for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
>                 if (adev->pg_flags & AMD_PG_SUPPORT_VCN_DPG) {
> @@ -1365,8 +1367,10 @@ static int vcn_v4_0_3_stop(struct amdgpu_device *adev)
>                 vcn_v4_0_3_enable_clock_gating(adev, i);
>         }
>  Done:
> -       if (adev->pm.dpm_enabled)
> -               amdgpu_dpm_enable_vcn(adev, false);
> +       for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
> +               if (adev->pm.dpm_enabled)
> +                       amdgpu_dpm_enable_vcn(adev, false, i);
> +       }
>
>         return 0;
>  }
> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c
> index 398191a48446..f0ec8bc031c6 100644
> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c
> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.c
> @@ -1000,8 +1000,10 @@ static int vcn_v4_0_5_start(struct amdgpu_device *adev)
>         uint32_t tmp;
>         int i, j, k, r;
>
> -       if (adev->pm.dpm_enabled)
> -               amdgpu_dpm_enable_vcn(adev, true);
> +       for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
> +               if (adev->pm.dpm_enabled)
> +                       amdgpu_dpm_enable_vcn(adev, true, i);
> +       }
>
>         for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
>                 if (adev->vcn.harvest_config & (1 << i))
> @@ -1277,8 +1279,10 @@ static int vcn_v4_0_5_stop(struct amdgpu_device *adev)
>                 vcn_v4_0_5_enable_static_power_gating(adev, i);
>         }
>
> -       if (adev->pm.dpm_enabled)
> -               amdgpu_dpm_enable_vcn(adev, false);
> +       for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
> +               if (adev->pm.dpm_enabled)
> +                       amdgpu_dpm_enable_vcn(adev, false, i);
> +       }
>
>         return 0;
>  }
> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c
> index 58f0611b8fb4..9f89e152e875 100644
> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c
> @@ -761,8 +761,10 @@ static int vcn_v5_0_0_start(struct amdgpu_device *adev)
>         uint32_t tmp;
>         int i, j, k, r;
>
> -       if (adev->pm.dpm_enabled)
> -               amdgpu_dpm_enable_vcn(adev, true);
> +       for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
> +               if (adev->pm.dpm_enabled)
> +                       amdgpu_dpm_enable_vcn(adev, true, i);
> +       }
>
>         for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
>                 if (adev->vcn.harvest_config & (1 << i))
> @@ -1008,8 +1010,10 @@ static int vcn_v5_0_0_stop(struct amdgpu_device *adev)
>                 vcn_v5_0_0_enable_static_power_gating(adev, i);
>         }
>
> -       if (adev->pm.dpm_enabled)
> -               amdgpu_dpm_enable_vcn(adev, false);
> +       for (i = 0; i < adev->vcn.num_vcn_inst; ++i) {
> +               if (adev->pm.dpm_enabled)
> +                       amdgpu_dpm_enable_vcn(adev, false, i);
> +       }
>
>         return 0;
>  }
> diff --git a/drivers/gpu/drm/amd/pm/amdgpu_dpm.c b/drivers/gpu/drm/amd/pm/amdgpu_dpm.c
> index 8531e0993b17..5a9006bfc3cd 100644
> --- a/drivers/gpu/drm/amd/pm/amdgpu_dpm.c
> +++ b/drivers/gpu/drm/amd/pm/amdgpu_dpm.c
> @@ -581,7 +581,7 @@ void amdgpu_dpm_enable_uvd(struct amdgpu_device *adev, bool enable)
>                           enable ? "enable" : "disable", ret);
>  }
>
> -void amdgpu_dpm_enable_vcn(struct amdgpu_device *adev, bool enable)
> +void amdgpu_dpm_enable_vcn(struct amdgpu_device *adev, bool enable, int inst)
>  {
>         int ret = 0;
>
> @@ -599,12 +599,10 @@ void amdgpu_dpm_enable_vcn(struct amdgpu_device *adev, bool enable)
>                 return;
>         }
>
> -       for (int i = 0; i < adev->vcn.num_vcn_inst; i++) {
> -               ret = amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_VCN, !enable, i);
> -               if (ret)
> -                       DRM_ERROR("Dpm %s uvd failed, ret = %d. \n",
> -                                 enable ? "enable" : "disable", ret);
> -       }
> +       ret = amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_VCN, !enable, inst);
> +       if (ret)
> +               DRM_ERROR("Dpm %s uvd failed, ret = %d. \n",
> +                         enable ? "enable" : "disable", ret);
>  }
>
>  void amdgpu_dpm_enable_vce(struct amdgpu_device *adev, bool enable)
> diff --git a/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h b/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h
> index e7c84d4a431a..251b389dcf6e 100644
> --- a/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h
> +++ b/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm.h
> @@ -442,7 +442,7 @@ void amdgpu_pm_acpi_event_handler(struct amdgpu_device *adev);
>
>  void amdgpu_dpm_compute_clocks(struct amdgpu_device *adev);
>  void amdgpu_dpm_enable_uvd(struct amdgpu_device *adev, bool enable);
> -void amdgpu_dpm_enable_vcn(struct amdgpu_device *adev, bool enable);
> +void amdgpu_dpm_enable_vcn(struct amdgpu_device *adev, bool enable, int inst);
>  void amdgpu_dpm_enable_vce(struct amdgpu_device *adev, bool enable);
>  void amdgpu_dpm_enable_jpeg(struct amdgpu_device *adev, bool enable);
>  void amdgpu_dpm_enable_vpe(struct amdgpu_device *adev, bool enable);
> --
> 2.34.1
>


More information about the amd-gfx mailing list