<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Acked-by: Alex Deucher <alexander.deucher@amd.com><br>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Quan, Evan <Evan.Quan@amd.com><br>
<b>Sent:</b> Thursday, August 22, 2019 6:21 AM<br>
<b>To:</b> Quan, Evan <Evan.Quan@amd.com>; amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org><br>
<b>Cc:</b> Deucher, Alexander <Alexander.Deucher@amd.com><br>
<b>Subject:</b> RE: [PATCH 1/2] drm/amd/powerplay: correct Vega20 dpm level related settings</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Ping..<br>
<br>
> -----Original Message-----<br>
> From: Evan Quan <evan.quan@amd.com><br>
> Sent: Wednesday, August 21, 2019 4:42 PM<br>
> To: amd-gfx@lists.freedesktop.org<br>
> Cc: Quan, Evan <Evan.Quan@amd.com><br>
> Subject: [PATCH 1/2] drm/amd/powerplay: correct Vega20 dpm level related<br>
> settings<br>
> <br>
> Correct the settings for auto mode and skip the unnecessary settings for<br>
> dcefclk and fclk.<br>
> <br>
> Change-Id: I7e6ca75ce86b4d5cd44920a9fbc71b6f36ea3c49<br>
> Signed-off-by: Evan Quan <evan.quan@amd.com><br>
> ---<br>
>  .../drm/amd/powerplay/hwmgr/vega20_hwmgr.c    | 60<br>
> +++++++++++++++++--<br>
>  1 file changed, 54 insertions(+), 6 deletions(-)<br>
> <br>
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c<br>
> b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c<br>
> index 0516c294b377..cc52d5c8ccf9 100644<br>
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c<br>
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c<br>
> @@ -2349,12 +2349,16 @@ static int vega20_force_dpm_highest(struct<br>
> pp_hwmgr *hwmgr)<br>
>                data->dpm_table.soc_table.dpm_state.soft_max_level =<br>
>                data->dpm_table.soc_table.dpm_levels[soft_level].value;<br>
> <br>
> -     ret = vega20_upload_dpm_min_level(hwmgr, 0xFFFFFFFF);<br>
> +     ret = vega20_upload_dpm_min_level(hwmgr,<br>
> FEATURE_DPM_GFXCLK_MASK |<br>
> +                                              FEATURE_DPM_UCLK_MASK<br>
> |<br>
> +<br>
> FEATURE_DPM_SOCCLK_MASK);<br>
>        PP_ASSERT_WITH_CODE(!ret,<br>
>                        "Failed to upload boot level to highest!",<br>
>                        return ret);<br>
> <br>
> -     ret = vega20_upload_dpm_max_level(hwmgr, 0xFFFFFFFF);<br>
> +     ret = vega20_upload_dpm_max_level(hwmgr,<br>
> FEATURE_DPM_GFXCLK_MASK |<br>
> +                                              FEATURE_DPM_UCLK_MASK<br>
> |<br>
> +<br>
> FEATURE_DPM_SOCCLK_MASK);<br>
>        PP_ASSERT_WITH_CODE(!ret,<br>
>                        "Failed to upload dpm max level to highest!",<br>
>                        return ret);<br>
> @@ -2387,12 +2391,16 @@ static int vega20_force_dpm_lowest(struct<br>
> pp_hwmgr *hwmgr)<br>
>                data->dpm_table.soc_table.dpm_state.soft_max_level =<br>
>                data->dpm_table.soc_table.dpm_levels[soft_level].value;<br>
> <br>
> -     ret = vega20_upload_dpm_min_level(hwmgr, 0xFFFFFFFF);<br>
> +     ret = vega20_upload_dpm_min_level(hwmgr,<br>
> FEATURE_DPM_GFXCLK_MASK |<br>
> +                                              FEATURE_DPM_UCLK_MASK<br>
> |<br>
> +<br>
> FEATURE_DPM_SOCCLK_MASK);<br>
>        PP_ASSERT_WITH_CODE(!ret,<br>
>                        "Failed to upload boot level to highest!",<br>
>                        return ret);<br>
> <br>
> -     ret = vega20_upload_dpm_max_level(hwmgr, 0xFFFFFFFF);<br>
> +     ret = vega20_upload_dpm_max_level(hwmgr,<br>
> FEATURE_DPM_GFXCLK_MASK |<br>
> +                                              FEATURE_DPM_UCLK_MASK<br>
> |<br>
> +<br>
> FEATURE_DPM_SOCCLK_MASK);<br>
>        PP_ASSERT_WITH_CODE(!ret,<br>
>                        "Failed to upload dpm max level to highest!",<br>
>                        return ret);<br>
> @@ -2403,14 +2411,54 @@ static int vega20_force_dpm_lowest(struct<br>
> pp_hwmgr *hwmgr)<br>
> <br>
>  static int vega20_unforce_dpm_levels(struct pp_hwmgr *hwmgr)  {<br>
> +     struct vega20_hwmgr *data =<br>
> +                     (struct vega20_hwmgr *)(hwmgr->backend);<br>
> +     uint32_t soft_min_level, soft_max_level;<br>
>        int ret = 0;<br>
> <br>
> -     ret = vega20_upload_dpm_min_level(hwmgr, 0xFFFFFFFF);<br>
> +     /* gfxclk soft min/max settings */<br>
> +     soft_min_level =<br>
> +             vega20_find_lowest_dpm_level(&(data-<br>
> >dpm_table.gfx_table));<br>
> +     soft_max_level =<br>
> +             vega20_find_highest_dpm_level(&(data-<br>
> >dpm_table.gfx_table));<br>
> +<br>
> +     data->dpm_table.gfx_table.dpm_state.soft_min_level =<br>
> +             data-<br>
> >dpm_table.gfx_table.dpm_levels[soft_min_level].value;<br>
> +     data->dpm_table.gfx_table.dpm_state.soft_max_level =<br>
> +             data-<br>
> >dpm_table.gfx_table.dpm_levels[soft_max_level].value;<br>
> +<br>
> +     /* uclk soft min/max settings */<br>
> +     soft_min_level =<br>
> +             vega20_find_lowest_dpm_level(&(data-<br>
> >dpm_table.mem_table));<br>
> +     soft_max_level =<br>
> +             vega20_find_highest_dpm_level(&(data-<br>
> >dpm_table.mem_table));<br>
> +<br>
> +     data->dpm_table.mem_table.dpm_state.soft_min_level =<br>
> +             data-<br>
> >dpm_table.mem_table.dpm_levels[soft_min_level].value;<br>
> +     data->dpm_table.mem_table.dpm_state.soft_max_level =<br>
> +             data-<br>
> >dpm_table.mem_table.dpm_levels[soft_max_level].value;<br>
> +<br>
> +     /* socclk soft min/max settings */<br>
> +     soft_min_level =<br>
> +             vega20_find_lowest_dpm_level(&(data-<br>
> >dpm_table.soc_table));<br>
> +     soft_max_level =<br>
> +             vega20_find_highest_dpm_level(&(data-<br>
> >dpm_table.soc_table));<br>
> +<br>
> +     data->dpm_table.soc_table.dpm_state.soft_min_level =<br>
> +             data-<br>
> >dpm_table.soc_table.dpm_levels[soft_min_level].value;<br>
> +     data->dpm_table.soc_table.dpm_state.soft_max_level =<br>
> +             data-<br>
> >dpm_table.soc_table.dpm_levels[soft_max_level].value;<br>
> +<br>
> +     ret = vega20_upload_dpm_min_level(hwmgr,<br>
> FEATURE_DPM_GFXCLK_MASK |<br>
> +                                              FEATURE_DPM_UCLK_MASK<br>
> |<br>
> +<br>
> FEATURE_DPM_SOCCLK_MASK);<br>
>        PP_ASSERT_WITH_CODE(!ret,<br>
>                        "Failed to upload DPM Bootup Levels!",<br>
>                        return ret);<br>
> <br>
> -     ret = vega20_upload_dpm_max_level(hwmgr, 0xFFFFFFFF);<br>
> +     ret = vega20_upload_dpm_max_level(hwmgr,<br>
> FEATURE_DPM_GFXCLK_MASK |<br>
> +                                              FEATURE_DPM_UCLK_MASK<br>
> |<br>
> +<br>
> FEATURE_DPM_SOCCLK_MASK);<br>
>        PP_ASSERT_WITH_CODE(!ret,<br>
>                        "Failed to upload DPM Max Levels!",<br>
>                        return ret);<br>
> --<br>
> 2.23.0<br>
<br>
</div>
</span></font></div>
</body>
</html>