<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, "EmojiFont", "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p style="margin-top:0;margin-bottom:0">Reviewed-by: Alex Deucher <alexander.deucher@amd.com><br>
</p>
<div style="color: rgb(0, 0, 0);">
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" face="Calibri, sans-serif" color="#000000"><b>From:</b> amd-gfx <amd-gfx-bounces@lists.freedesktop.org> on behalf of Rex Zhu <Rex.Zhu@amd.com><br>
<b>Sent:</b> Friday, January 5, 2018 6:38 AM<br>
<b>To:</b> amd-gfx@lists.freedesktop.org<br>
<b>Cc:</b> Zhu, Rex<br>
<b>Subject:</b> [PATCH 1/2] drm/amd/pp: Store stable Pstate clocks</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">User can use to calculate profiling ratios when<br>
set UMD Pstate.<br>
<br>
Signed-off-by: Rex Zhu <Rex.Zhu@amd.com><br>
<br>
Change-Id: I3c6b82ebface57eb969d474c57149e8658ab7014<br>
---<br>
 drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c     |  2 ++<br>
 drivers/gpu/drm/amd/powerplay/hwmgr/rv_hwmgr.c     |  3 +++<br>
 drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c   | 14 ++++++++++++--<br>
 drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c |  5 +++++<br>
 drivers/gpu/drm/amd/powerplay/inc/hwmgr.h          |  2 ++<br>
 5 files changed, 24 insertions(+), 2 deletions(-)<br>
<br>
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c<br>
index 0b8aa44..b83fe97 100644<br>
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c<br>
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c<br>
@@ -1189,6 +1189,8 @@ static int cz_phm_unforce_dpm_levels(struct pp_hwmgr *hwmgr)<br>
 <br>
         cz_hwmgr->sclk_dpm.soft_min_clk = table->entries[0].clk;<br>
         cz_hwmgr->sclk_dpm.hard_min_clk = table->entries[0].clk;<br>
+       hwmgr->pstate_sclk = table->entries[0].clk;<br>
+       hwmgr->pstate_mclk = 0;<br>
 <br>
         level = cz_get_max_sclk_level(hwmgr) - 1;<br>
 <br>
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/rv_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/rv_hwmgr.c<br>
index 569073e..409a56b 100644<br>
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/rv_hwmgr.c<br>
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/rv_hwmgr.c<br>
@@ -451,6 +451,9 @@ static int rv_hwmgr_backend_init(struct pp_hwmgr *hwmgr)<br>
 <br>
         hwmgr->platform_descriptor.minimumClocksReductionPercentage = 50;<br>
 <br>
+       hwmgr->pstate_sclk = RAVEN_UMD_PSTATE_GFXCLK;<br>
+       hwmgr->pstate_mclk = RAVEN_UMD_PSTATE_FCLK;<br>
+<br>
         return result;<br>
 }<br>
 <br>
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c<br>
index 2cde7a8..72031bd 100644<br>
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c<br>
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c<br>
@@ -2652,8 +2652,10 @@ static int smu7_get_profiling_clk(struct pp_hwmgr *hwmgr, enum amd_dpm_forced_le<br>
                                 break;<br>
                         }<br>
                 }<br>
-               if (count < 0 || level == AMD_DPM_FORCED_LEVEL_PROFILE_MIN_SCLK)<br>
+               if (count < 0 || level == AMD_DPM_FORCED_LEVEL_PROFILE_MIN_SCLK) {<br>
                         *sclk_mask = 0;<br>
+                       tmp_sclk = hwmgr->dyn_state.vddc_dependency_on_sclk->entries[0].clk;<br>
+               }<br>
 <br>
                 if (level == AMD_DPM_FORCED_LEVEL_PROFILE_PEAK)<br>
                         *sclk_mask = hwmgr->dyn_state.vddc_dependency_on_sclk->count-1;<br>
@@ -2668,8 +2670,10 @@ static int smu7_get_profiling_clk(struct pp_hwmgr *hwmgr, enum amd_dpm_forced_le<br>
                                 break;<br>
                         }<br>
                 }<br>
-               if (count < 0 || level == AMD_DPM_FORCED_LEVEL_PROFILE_MIN_SCLK)<br>
+               if (count < 0 || level == AMD_DPM_FORCED_LEVEL_PROFILE_MIN_SCLK) {<br>
                         *sclk_mask = 0;<br>
+                       tmp_sclk =  table_info->vdd_dep_on_sclk->entries[0].clk;<br>
+               }<br>
 <br>
                 if (level == AMD_DPM_FORCED_LEVEL_PROFILE_PEAK)<br>
                         *sclk_mask = table_info->vdd_dep_on_sclk->count - 1;<br>
@@ -2681,6 +2685,9 @@ static int smu7_get_profiling_clk(struct pp_hwmgr *hwmgr, enum amd_dpm_forced_le<br>
                 *mclk_mask = golden_dpm_table->mclk_table.count - 1;<br>
 <br>
         *pcie_mask = data->dpm_table.pcie_speed_table.count - 1;<br>
+       hwmgr->pstate_sclk = tmp_sclk;<br>
+       hwmgr->pstate_mclk = tmp_mclk;<br>
+<br>
         return 0;<br>
 }<br>
 <br>
@@ -2692,6 +2699,9 @@ static int smu7_force_dpm_level(struct pp_hwmgr *hwmgr,<br>
         uint32_t mclk_mask = 0;<br>
         uint32_t pcie_mask = 0;<br>
 <br>
+       if (hwmgr->pstate_sclk == 0)<br>
+               smu7_get_profiling_clk(hwmgr, level, &sclk_mask, &mclk_mask, &pcie_mask);<br>
+<br>
         switch (level) {<br>
         case AMD_DPM_FORCED_LEVEL_HIGH:<br>
                 ret = smu7_force_dpm_highest(hwmgr);<br>
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c<br>
index 4219004..cb35f4f 100644<br>
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c<br>
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c<br>
@@ -4172,6 +4172,8 @@ static int vega10_get_profiling_clk_mask(struct pp_hwmgr *hwmgr, enum amd_dpm_fo<br>
                 *sclk_mask = VEGA10_UMD_PSTATE_GFXCLK_LEVEL;<br>
                 *soc_mask = VEGA10_UMD_PSTATE_SOCCLK_LEVEL;<br>
                 *mclk_mask = VEGA10_UMD_PSTATE_MCLK_LEVEL;<br>
+               hwmgr->pstate_sclk = table_info->vdd_dep_on_sclk->entries[VEGA10_UMD_PSTATE_GFXCLK_LEVEL].clk;<br>
+               hwmgr->pstate_mclk = table_info->vdd_dep_on_mclk->entries[VEGA10_UMD_PSTATE_MCLK_LEVEL].clk;<br>
         }<br>
 <br>
         if (level == AMD_DPM_FORCED_LEVEL_PROFILE_MIN_SCLK) {<br>
@@ -4213,6 +4215,9 @@ static int vega10_dpm_force_dpm_level(struct pp_hwmgr *hwmgr,<br>
         uint32_t mclk_mask = 0;<br>
         uint32_t soc_mask = 0;<br>
 <br>
+       if (hwmgr->pstate_sclk == 0)<br>
+               vega10_get_profiling_clk_mask(hwmgr, level, &sclk_mask, &mclk_mask, &soc_mask);<br>
+<br>
         switch (level) {<br>
         case AMD_DPM_FORCED_LEVEL_HIGH:<br>
                 ret = vega10_force_dpm_highest(hwmgr);<br>
diff --git a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h<br>
index 5d92f13..0ac61e0 100644<br>
--- a/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h<br>
+++ b/drivers/gpu/drm/amd/powerplay/inc/hwmgr.h<br>
@@ -752,6 +752,8 @@ struct pp_hwmgr {<br>
         enum amd_pp_profile_type current_power_profile;<br>
         bool en_umd_pstate;<br>
         bool od_enabled;<br>
+       uint32_t pstate_sclk;<br>
+       uint32_t pstate_mclk;<br>
 };<br>
 <br>
 struct cgs_irq_src_funcs {<br>
-- <br>
1.9.1<br>
<br>
_______________________________________________<br>
amd-gfx mailing list<br>
amd-gfx@lists.freedesktop.org<br>
<a href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx" id="LPlnk477021" previewremoved="true">https://lists.freedesktop.org/mailman/listinfo/amd-gfx</a><br>
</div>
</span></font></div>
</div>
</div>
</body>
</html>