<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<p style="font-family:Arial;font-size:10pt;color:#0000FF;margin:5pt;" align="Left">
[AMD Official Use Only - General]<br>
</p>
<br>
<div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
Thanks Alex. </div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
Renoir didn't use the <span style="font-family: "Segoe UI Web (West European)", "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", sans-serif; display: inline !important; background-color: rgb(255, 255, 255);" class="ContentPasted0">
DFPstateTable<span class="ContentPasted0"> but it </span></span>needs to reverse the clocks levels as well.  </div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
Will send out a new patch for Renoir. </div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof">
Best Regards,
<div>Tim</div>
</div>
<div id="appendonsend"></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 11pt; color: rgb(0, 0, 0);">
<br>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size: 11pt; color: rgb(0, 0, 0);"><b>From:</b> Alex Deucher <alexdeucher@gmail.com><br>
<b>Sent:</b> Monday, May 22, 2023 9:19 PM<br>
<b>To:</b> Huang, Tim <Tim.Huang@amd.com><br>
<b>Cc:</b> amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org>; Deucher, Alexander <Alexander.Deucher@amd.com>; Zhang, Yifan <Yifan1.Zhang@amd.com><br>
<b>Subject:</b> Re: [PATCH 4/4] amd/pm/swsmu: reverse mclk and fclk clocks levels for vangogh</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt">
<div class="PlainText">Reviewed-by: Alex Deucher <alexander.deucher@amd.com><br>
<br>
Does Renoir need a similar fix?<br>
<br>
Alex<br>
<br>
On Mon, May 22, 2023 at 6:10 AM Tim Huang <Tim.Huang@amd.com> wrote:<br>
><br>
> This patch reverses the DPM clocks levels output of pp_dpm_mclk<br>
> and pp_dpm_fclk.<br>
><br>
> On dGPUs and older APUs we expose the levels from lowest clocks<br>
> to highest clocks. But for some APUs, the clocks levels that from<br>
> the DFPstateTable are given the reversed orders by PMFW. Like the<br>
> memory DPM clocks that are exposed by pp_dpm_mclk.<br>
><br>
> It's not intuitive that they are reversed on these APUs. All tools<br>
> and software that talks to the driver then has to know different ways<br>
> to interpret the data depending on the asic.<br>
><br>
> So we need to reverse them to expose the clocks levels from the<br>
> driver consistently.<br>
><br>
> Signed-off-by: Tim Huang <Tim.Huang@amd.com><br>
> ---<br>
>  drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c | 10 ++++++----<br>
>  1 file changed, 6 insertions(+), 4 deletions(-)<br>
><br>
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c<br>
> index 7433dcaa16e0..067b4e0b026c 100644<br>
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c<br>
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c<br>
> @@ -582,7 +582,7 @@ static int vangogh_print_legacy_clk_levels(struct smu_context *smu,<br>
>         DpmClocks_t *clk_table = smu->smu_table.clocks_table;<br>
>         SmuMetrics_legacy_t metrics;<br>
>         struct smu_dpm_context *smu_dpm_ctx = &(smu->smu_dpm);<br>
> -       int i, size = 0, ret = 0;<br>
> +       int i, idx, size = 0, ret = 0;<br>
>         uint32_t cur_value = 0, value = 0, count = 0;<br>
>         bool cur_value_match_level = false;<br>
><br>
> @@ -656,7 +656,8 @@ static int vangogh_print_legacy_clk_levels(struct smu_context *smu,<br>
>         case SMU_MCLK:<br>
>         case SMU_FCLK:<br>
>                 for (i = 0; i < count; i++) {<br>
> -                       ret = vangogh_get_dpm_clk_limited(smu, clk_type, i, &value);<br>
> +                       idx = (clk_type == SMU_FCLK || clk_type == SMU_MCLK) ? (count - i - 1) : i;<br>
> +                       ret = vangogh_get_dpm_clk_limited(smu, clk_type, idx, &value);<br>
>                         if (ret)<br>
>                                 return ret;<br>
>                         if (!value)<br>
> @@ -683,7 +684,7 @@ static int vangogh_print_clk_levels(struct smu_context *smu,<br>
>         DpmClocks_t *clk_table = smu->smu_table.clocks_table;<br>
>         SmuMetrics_t metrics;<br>
>         struct smu_dpm_context *smu_dpm_ctx = &(smu->smu_dpm);<br>
> -       int i, size = 0, ret = 0;<br>
> +       int i, idx, size = 0, ret = 0;<br>
>         uint32_t cur_value = 0, value = 0, count = 0;<br>
>         bool cur_value_match_level = false;<br>
>         uint32_t min, max;<br>
> @@ -765,7 +766,8 @@ static int vangogh_print_clk_levels(struct smu_context *smu,<br>
>         case SMU_MCLK:<br>
>         case SMU_FCLK:<br>
>                 for (i = 0; i < count; i++) {<br>
> -                       ret = vangogh_get_dpm_clk_limited(smu, clk_type, i, &value);<br>
> +                       idx = (clk_type == SMU_FCLK || clk_type == SMU_MCLK) ? (count - i - 1) : i;<br>
> +                       ret = vangogh_get_dpm_clk_limited(smu, clk_type, idx, &value);<br>
>                         if (ret)<br>
>                                 return ret;<br>
>                         if (!value)<br>
> --<br>
> 2.34.1<br>
><br>
</div>
</span></font></div>
</div>
</body>
</html>