[PATCH 1/2] drm/amd/powerplay: correct Vega20 dpm level related settings
Quan, Evan
Evan.Quan at amd.com
Thu Aug 22 10:21:11 UTC 2019
Ping..
> -----Original Message-----
> From: Evan Quan <evan.quan at amd.com>
> Sent: Wednesday, August 21, 2019 4:42 PM
> To: amd-gfx at lists.freedesktop.org
> Cc: Quan, Evan <Evan.Quan at amd.com>
> Subject: [PATCH 1/2] drm/amd/powerplay: correct Vega20 dpm level related
> settings
>
> Correct the settings for auto mode and skip the unnecessary settings for
> dcefclk and fclk.
>
> Change-Id: I7e6ca75ce86b4d5cd44920a9fbc71b6f36ea3c49
> Signed-off-by: Evan Quan <evan.quan at amd.com>
> ---
> .../drm/amd/powerplay/hwmgr/vega20_hwmgr.c | 60
> +++++++++++++++++--
> 1 file changed, 54 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
> b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
> index 0516c294b377..cc52d5c8ccf9 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
> @@ -2349,12 +2349,16 @@ static int vega20_force_dpm_highest(struct
> pp_hwmgr *hwmgr)
> data->dpm_table.soc_table.dpm_state.soft_max_level =
> data->dpm_table.soc_table.dpm_levels[soft_level].value;
>
> - ret = vega20_upload_dpm_min_level(hwmgr, 0xFFFFFFFF);
> + ret = vega20_upload_dpm_min_level(hwmgr,
> FEATURE_DPM_GFXCLK_MASK |
> + FEATURE_DPM_UCLK_MASK
> |
> +
> FEATURE_DPM_SOCCLK_MASK);
> PP_ASSERT_WITH_CODE(!ret,
> "Failed to upload boot level to highest!",
> return ret);
>
> - ret = vega20_upload_dpm_max_level(hwmgr, 0xFFFFFFFF);
> + ret = vega20_upload_dpm_max_level(hwmgr,
> FEATURE_DPM_GFXCLK_MASK |
> + FEATURE_DPM_UCLK_MASK
> |
> +
> FEATURE_DPM_SOCCLK_MASK);
> PP_ASSERT_WITH_CODE(!ret,
> "Failed to upload dpm max level to highest!",
> return ret);
> @@ -2387,12 +2391,16 @@ static int vega20_force_dpm_lowest(struct
> pp_hwmgr *hwmgr)
> data->dpm_table.soc_table.dpm_state.soft_max_level =
> data->dpm_table.soc_table.dpm_levels[soft_level].value;
>
> - ret = vega20_upload_dpm_min_level(hwmgr, 0xFFFFFFFF);
> + ret = vega20_upload_dpm_min_level(hwmgr,
> FEATURE_DPM_GFXCLK_MASK |
> + FEATURE_DPM_UCLK_MASK
> |
> +
> FEATURE_DPM_SOCCLK_MASK);
> PP_ASSERT_WITH_CODE(!ret,
> "Failed to upload boot level to highest!",
> return ret);
>
> - ret = vega20_upload_dpm_max_level(hwmgr, 0xFFFFFFFF);
> + ret = vega20_upload_dpm_max_level(hwmgr,
> FEATURE_DPM_GFXCLK_MASK |
> + FEATURE_DPM_UCLK_MASK
> |
> +
> FEATURE_DPM_SOCCLK_MASK);
> PP_ASSERT_WITH_CODE(!ret,
> "Failed to upload dpm max level to highest!",
> return ret);
> @@ -2403,14 +2411,54 @@ static int vega20_force_dpm_lowest(struct
> pp_hwmgr *hwmgr)
>
> static int vega20_unforce_dpm_levels(struct pp_hwmgr *hwmgr) {
> + struct vega20_hwmgr *data =
> + (struct vega20_hwmgr *)(hwmgr->backend);
> + uint32_t soft_min_level, soft_max_level;
> int ret = 0;
>
> - ret = vega20_upload_dpm_min_level(hwmgr, 0xFFFFFFFF);
> + /* gfxclk soft min/max settings */
> + soft_min_level =
> + vega20_find_lowest_dpm_level(&(data-
> >dpm_table.gfx_table));
> + soft_max_level =
> + vega20_find_highest_dpm_level(&(data-
> >dpm_table.gfx_table));
> +
> + data->dpm_table.gfx_table.dpm_state.soft_min_level =
> + data-
> >dpm_table.gfx_table.dpm_levels[soft_min_level].value;
> + data->dpm_table.gfx_table.dpm_state.soft_max_level =
> + data-
> >dpm_table.gfx_table.dpm_levels[soft_max_level].value;
> +
> + /* uclk soft min/max settings */
> + soft_min_level =
> + vega20_find_lowest_dpm_level(&(data-
> >dpm_table.mem_table));
> + soft_max_level =
> + vega20_find_highest_dpm_level(&(data-
> >dpm_table.mem_table));
> +
> + data->dpm_table.mem_table.dpm_state.soft_min_level =
> + data-
> >dpm_table.mem_table.dpm_levels[soft_min_level].value;
> + data->dpm_table.mem_table.dpm_state.soft_max_level =
> + data-
> >dpm_table.mem_table.dpm_levels[soft_max_level].value;
> +
> + /* socclk soft min/max settings */
> + soft_min_level =
> + vega20_find_lowest_dpm_level(&(data-
> >dpm_table.soc_table));
> + soft_max_level =
> + vega20_find_highest_dpm_level(&(data-
> >dpm_table.soc_table));
> +
> + data->dpm_table.soc_table.dpm_state.soft_min_level =
> + data-
> >dpm_table.soc_table.dpm_levels[soft_min_level].value;
> + data->dpm_table.soc_table.dpm_state.soft_max_level =
> + data-
> >dpm_table.soc_table.dpm_levels[soft_max_level].value;
> +
> + ret = vega20_upload_dpm_min_level(hwmgr,
> FEATURE_DPM_GFXCLK_MASK |
> + FEATURE_DPM_UCLK_MASK
> |
> +
> FEATURE_DPM_SOCCLK_MASK);
> PP_ASSERT_WITH_CODE(!ret,
> "Failed to upload DPM Bootup Levels!",
> return ret);
>
> - ret = vega20_upload_dpm_max_level(hwmgr, 0xFFFFFFFF);
> + ret = vega20_upload_dpm_max_level(hwmgr,
> FEATURE_DPM_GFXCLK_MASK |
> + FEATURE_DPM_UCLK_MASK
> |
> +
> FEATURE_DPM_SOCCLK_MASK);
> PP_ASSERT_WITH_CODE(!ret,
> "Failed to upload DPM Max Levels!",
> return ret);
> --
> 2.23.0
More information about the amd-gfx
mailing list