<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 style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
it looks fine for me.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Reviewed-by: Kevin Wang <kevin1.wang@amd.com></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Best Regards,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Kevin</div>
<div id="appendonsend"></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; 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" color="#000000" style="font-size:11pt"><b>From:</b> Hersen Wu <hersenxs.wu@amd.com><br>
<b>Sent:</b> Thursday, October 10, 2019 10:58 PM<br>
<b>To:</b> amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org><br>
<b>Cc:</b> Wentland, Harry <Harry.Wentland@amd.com>; Wang, Kevin(Yang) <Kevin1.Wang@amd.com>; Wu, Hersen <hersenxs.wu@amd.com><br>
<b>Subject:</b> [PATCH] drm/amdgpu/powerplay: add renoir funcs to support dc</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt">
<div class="PlainText">there are two paths for renoir dc access smu.<br>
one dc access smu directly using bios smc<br>
interface: set disply, dprefclk, etc.<br>
another goes through pplib for get dpm clock<br>
table and set watermmark.<br>
<br>
Signed-off-by: Hersen Wu <hersenxs.wu@amd.com><br>
---<br>
 .../amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c  | 16 +---<br>
 drivers/gpu/drm/amd/powerplay/amdgpu_smu.c    | 35 +++++++<br>
 .../gpu/drm/amd/powerplay/inc/amdgpu_smu.h    | 16 ++--<br>
 drivers/gpu/drm/amd/powerplay/renoir_ppt.c    | 96 +++++++++++++++++++<br>
 drivers/gpu/drm/amd/powerplay/smu_v11_0.c     | 39 --------<br>
 5 files changed, 141 insertions(+), 61 deletions(-)<br>
<br>
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c<br>
index f4cfa0caeba8..95564b8de3ce 100644<br>
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c<br>
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c<br>
@@ -589,10 +589,9 @@ void pp_rv_set_wm_ranges(struct pp_smu *pp,<br>
         if (pp_funcs && pp_funcs->set_watermarks_for_clocks_ranges)<br>
                 pp_funcs->set_watermarks_for_clocks_ranges(pp_handle,<br>
                                                            &wm_with_clock_ranges);<br>
-       else if (adev->smu.funcs &&<br>
-                adev->smu.funcs->set_watermarks_for_clock_ranges)<br>
+       else<br>
                 smu_set_watermarks_for_clock_ranges(&adev->smu,<br>
-                                                   &wm_with_clock_ranges);<br>
+                               &wm_with_clock_ranges);<br>
 }<br>
 <br>
 void pp_rv_set_pme_wa_enable(struct pp_smu *pp)<br>
@@ -665,7 +664,6 @@ enum pp_smu_status pp_nv_set_wm_ranges(struct pp_smu *pp,<br>
 {<br>
         const struct dc_context *ctx = pp->dm;<br>
         struct amdgpu_device *adev = ctx->driver_context;<br>
-       struct smu_context *smu = &adev->smu;<br>
         struct dm_pp_wm_sets_with_clock_ranges_soc15 wm_with_clock_ranges;<br>
         struct dm_pp_clock_range_for_dmif_wm_set_soc15 *wm_dce_clocks =<br>
                         wm_with_clock_ranges.wm_dmif_clocks_ranges;<br>
@@ -708,15 +706,7 @@ enum pp_smu_status pp_nv_set_wm_ranges(struct pp_smu *pp,<br>
                         ranges->writer_wm_sets[i].min_drain_clk_mhz * 1000;<br>
         }<br>
 <br>
-       if (!smu->funcs)<br>
-               return PP_SMU_RESULT_UNSUPPORTED;<br>
-<br>
-       /* 0: successful or smu.funcs->set_watermarks_for_clock_ranges = NULL;<br>
-        * 1: fail<br>
-        */<br>
-       if (smu_set_watermarks_for_clock_ranges(&adev->smu,<br>
-                       &wm_with_clock_ranges))<br>
-               return PP_SMU_RESULT_UNSUPPORTED;<br>
+       smu_set_watermarks_for_clock_ranges(&adev->smu, &wm_with_clock_ranges);<br>
 <br>
         return PP_SMU_RESULT_OK;<br>
 }<br>
diff --git a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c<br>
index c9266ea70331..1b71c38cdf96 100644<br>
--- a/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c<br>
+++ b/drivers/gpu/drm/amd/powerplay/amdgpu_smu.c<br>
@@ -1834,6 +1834,41 @@ int smu_set_mp1_state(struct smu_context *smu,<br>
         return ret;<br>
 }<br>
 <br>
+int smu_write_watermarks_table(struct smu_context *smu)<br>
+{<br>
+       int ret = 0;<br>
+       struct smu_table_context *smu_table = &smu->smu_table;<br>
+       struct smu_table *table = NULL;<br>
+<br>
+       table = &smu_table->tables[SMU_TABLE_WATERMARKS];<br>
+<br>
+       if (!table->cpu_addr)<br>
+               return -EINVAL;<br>
+<br>
+       ret = smu_update_table(smu, SMU_TABLE_WATERMARKS, 0, table->cpu_addr,<br>
+                               true);<br>
+<br>
+       return ret;<br>
+}<br>
+<br>
+int smu_set_watermarks_for_clock_ranges(struct smu_context *smu,<br>
+               struct dm_pp_wm_sets_with_clock_ranges_soc15 *clock_ranges)<br>
+{<br>
+       int ret = 0;<br>
+       struct smu_table *watermarks = &smu->smu_table.tables[SMU_TABLE_WATERMARKS];<br>
+       void *table = watermarks->cpu_addr;<br>
+<br>
+       if (!smu->disable_watermark &&<br>
+                       smu_feature_is_enabled(smu, SMU_FEATURE_DPM_DCEFCLK_BIT) &&<br>
+                       smu_feature_is_enabled(smu, SMU_FEATURE_DPM_SOCCLK_BIT)) {<br>
+               smu_set_watermarks_table(smu, table, clock_ranges);<br>
+               smu->watermarks_bitmap |= WATERMARKS_EXIST;<br>
+               smu->watermarks_bitmap &= ~WATERMARKS_LOADED;<br>
+       }<br>
+<br>
+       return ret;<br>
+}<br>
+<br>
 const struct amd_ip_funcs smu_ip_funcs = {<br>
         .name = "smu",<br>
         .early_init = smu_early_init,<br>
diff --git a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h<br>
index ccf711c327c8..1469146da1aa 100644<br>
--- a/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h<br>
+++ b/drivers/gpu/drm/amd/powerplay/inc/amdgpu_smu.h<br>
@@ -468,6 +468,7 @@ struct pptable_funcs {<br>
         int (*get_power_limit)(struct smu_context *smu, uint32_t *limit, bool asic_default);<br>
         int (*get_dpm_clk_limited)(struct smu_context *smu, enum smu_clk_type clk_type,<br>
                                    uint32_t dpm_level, uint32_t *freq);<br>
+       int (*get_dpm_clock_table)(struct smu_context *smu, struct dpm_clocks *clock_table);<br>
 };<br>
 <br>
 struct smu_funcs<br>
@@ -493,7 +494,6 @@ struct smu_funcs<br>
         int (*set_min_dcef_deep_sleep)(struct smu_context *smu);<br>
         int (*set_tool_table_location)(struct smu_context *smu);<br>
         int (*notify_memory_pool_location)(struct smu_context *smu);<br>
-       int (*write_watermarks_table)(struct smu_context *smu);<br>
         int (*set_last_dcef_min_deep_sleep_clk)(struct smu_context *smu);<br>
         int (*system_features_control)(struct smu_context *smu, bool en);<br>
         int (*send_smc_msg)(struct smu_context *smu, uint16_t msg);<br>
@@ -531,8 +531,6 @@ struct smu_funcs<br>
         int (*get_current_shallow_sleep_clocks)(struct smu_context *smu,<br>
                                                 struct smu_clock_info *clocks);<br>
         int (*notify_smu_enable_pwe)(struct smu_context *smu);<br>
-       int (*set_watermarks_for_clock_ranges)(struct smu_context *smu,<br>
-                                              struct dm_pp_wm_sets_with_clock_ranges_soc15 *clock_ranges);<br>
         int (*conv_power_profile_to_pplib_workload)(int power_profile);<br>
         uint32_t (*get_fan_control_mode)(struct smu_context *smu);<br>
         int (*set_fan_control_mode)(struct smu_context *smu, uint32_t mode);<br>
@@ -596,9 +594,6 @@ struct smu_funcs<br>
         ((smu)->funcs->notify_memory_pool_location ? (smu)->funcs->notify_memory_pool_location((smu)) : 0)<br>
 #define smu_gfx_off_control(smu, enable) \<br>
         ((smu)->funcs->gfx_off_control ? (smu)->funcs->gfx_off_control((smu), (enable)) : 0)<br>
-<br>
-#define smu_write_watermarks_table(smu) \<br>
-       ((smu)->funcs->write_watermarks_table ? (smu)->funcs->write_watermarks_table((smu)) : 0)<br>
 #define smu_set_last_dcef_min_deep_sleep_clk(smu) \<br>
         ((smu)->funcs->set_last_dcef_min_deep_sleep_clk ? (smu)->funcs->set_last_dcef_min_deep_sleep_clk((smu)) : 0)<br>
 #define smu_system_features_control(smu, en) \<br>
@@ -738,8 +733,6 @@ struct smu_funcs<br>
         ((smu)->funcs->get_current_shallow_sleep_clocks ? (smu)->funcs->get_current_shallow_sleep_clocks((smu), (clocks)) : 0)<br>
 #define smu_notify_smu_enable_pwe(smu) \<br>
         ((smu)->funcs->notify_smu_enable_pwe ? (smu)->funcs->notify_smu_enable_pwe((smu)) : 0)<br>
-#define smu_set_watermarks_for_clock_ranges(smu, clock_ranges) \<br>
-       ((smu)->funcs->set_watermarks_for_clock_ranges ? (smu)->funcs->set_watermarks_for_clock_ranges((smu), (clock_ranges)) : 0)<br>
 #define smu_dpm_set_uvd_enable(smu, enable) \<br>
         ((smu)->ppt_funcs->dpm_set_uvd_enable ? (smu)->ppt_funcs->dpm_set_uvd_enable((smu), (enable)) : 0)<br>
 #define smu_dpm_set_vce_enable(smu, enable) \<br>
@@ -778,9 +771,10 @@ struct smu_funcs<br>
         ((smu)->ppt_funcs->dump_pptable ? (smu)->ppt_funcs->dump_pptable((smu)) : 0)<br>
 #define smu_get_dpm_clk_limited(smu, clk_type, dpm_level, freq) \<br>
                 ((smu)->ppt_funcs->get_dpm_clk_limited ? (smu)->ppt_funcs->get_dpm_clk_limited((smu), (clk_type), (dpm_level), (freq)) : -EINVAL)<br>
-<br>
 #define smu_set_soft_freq_limited_range(smu, clk_type, min, max) \<br>
                 ((smu)->funcs->set_soft_freq_limited_range ? (smu)->funcs->set_soft_freq_limited_range((smu), (clk_type), (min), (max)) : -EINVAL)<br>
+#define smu_get_dpm_clock_table(smu, clock_table) \<br>
+               ((smu)->ppt_funcs->get_dpm_clock_table ? (smu)->ppt_funcs->get_dpm_clock_table((smu), (clock_table)) : -EINVAL)<br>
 <br>
 extern int smu_get_atom_data_table(struct smu_context *smu, uint32_t table,<br>
                                    uint16_t *size, uint8_t *frev, uint8_t *crev,<br>
@@ -814,6 +808,10 @@ int smu_sys_get_pp_table(struct smu_context *smu, void **table);<br>
 int smu_sys_set_pp_table(struct smu_context *smu,  void *buf, size_t size);<br>
 int smu_get_power_num_states(struct smu_context *smu, struct pp_states_info *state_info);<br>
 enum amd_pm_state_type smu_get_current_power_state(struct smu_context *smu);<br>
+int smu_write_watermarks_table(struct smu_context *smu);<br>
+int smu_set_watermarks_for_clock_ranges(<br>
+               struct smu_context *smu,<br>
+               struct dm_pp_wm_sets_with_clock_ranges_soc15 *clock_ranges);<br>
 <br>
 /* smu to display interface */<br>
 extern int smu_display_configuration_change(struct smu_context *smu, const<br>
diff --git a/drivers/gpu/drm/amd/powerplay/renoir_ppt.c b/drivers/gpu/drm/amd/powerplay/renoir_ppt.c<br>
index 6aedffd739db..fa314c275a82 100644<br>
--- a/drivers/gpu/drm/amd/powerplay/renoir_ppt.c<br>
+++ b/drivers/gpu/drm/amd/powerplay/renoir_ppt.c<br>
@@ -416,6 +416,40 @@ static int renoir_get_profiling_clk_mask(struct smu_context *smu,<br>
         return 0;<br>
 }<br>
 <br>
+/**<br>
+ * This interface get dpm clock table for dc<br>
+ */<br>
+static int renoir_get_dpm_clock_table(struct smu_context *smu, struct dpm_clocks *clock_table)<br>
+{<br>
+       DpmClocks_t *table = smu->smu_table.clocks_table;<br>
+       int i;<br>
+<br>
+       if (!clock_table || !table)<br>
+               return -EINVAL;<br>
+<br>
+       for (i = 0; i < PP_SMU_NUM_DCFCLK_DPM_LEVELS; i++) {<br>
+               clock_table->DcfClocks[i].Freq = table->DcfClocks[i].Freq;<br>
+               clock_table->DcfClocks[i].Vol = table->DcfClocks[i].Vol;<br>
+       }<br>
+<br>
+       for (i = 0; i < PP_SMU_NUM_SOCCLK_DPM_LEVELS; i++) {<br>
+               clock_table->SocClocks[i].Freq = table->SocClocks[i].Freq;<br>
+               clock_table->SocClocks[i].Vol = table->SocClocks[i].Vol;<br>
+       }<br>
+<br>
+       for (i = 0; i < PP_SMU_NUM_FCLK_DPM_LEVELS; i++) {<br>
+               clock_table->FClocks[i].Freq = table->FClocks[i].Freq;<br>
+               clock_table->FClocks[i].Vol = table->FClocks[i].Vol;<br>
+       }<br>
+<br>
+       for (i = 0; i<  PP_SMU_NUM_MEMCLK_DPM_LEVELS; i++) {<br>
+               clock_table->MemClocks[i].Freq = table->MemClocks[i].Freq;<br>
+               clock_table->MemClocks[i].Vol = table->MemClocks[i].Vol;<br>
+       }<br>
+<br>
+       return 0;<br>
+}<br>
+<br>
 static int renoir_force_clk_levels(struct smu_context *smu,<br>
                                    enum smu_clk_type clk_type, uint32_t mask)<br>
 {<br>
@@ -546,6 +580,66 @@ static int renoir_set_performance_level(struct smu_context *smu, enum amd_dpm_fo<br>
         return ret;<br>
 }<br>
 <br>
+/* save watermark settings into pplib smu structure,<br>
+ * also pass data to smu controller<br>
+ */<br>
+static int renoir_set_watermarks_table(<br>
+               struct smu_context *smu,<br>
+               void *watermarks,<br>
+               struct dm_pp_wm_sets_with_clock_ranges_soc15 *clock_ranges)<br>
+{<br>
+       int i;<br>
+       int ret = 0;<br>
+       Watermarks_t *table = watermarks;<br>
+<br>
+       if (!table || !clock_ranges)<br>
+               return -EINVAL;<br>
+<br>
+       if (clock_ranges->num_wm_dmif_sets > 4 ||<br>
+                       clock_ranges->num_wm_mcif_sets > 4)<br>
+               return -EINVAL;<br>
+<br>
+       /* save into smu->smu_table.tables[SMU_TABLE_WATERMARKS]->cpu_addr*/<br>
+       for (i = 0; i < clock_ranges->num_wm_dmif_sets; i++) {<br>
+               table->WatermarkRow[WM_DCFCLK][i].MinClock =<br>
+                       cpu_to_le16((uint16_t)<br>
+                       (clock_ranges->wm_dmif_clocks_ranges[i].wm_min_dcfclk_clk_in_khz));<br>
+               table->WatermarkRow[WM_DCFCLK][i].MaxClock =<br>
+                       cpu_to_le16((uint16_t)<br>
+                       (clock_ranges->wm_dmif_clocks_ranges[i].wm_max_dcfclk_clk_in_khz));<br>
+               table->WatermarkRow[WM_DCFCLK][i].MinMclk =<br>
+                       cpu_to_le16((uint16_t)<br>
+                       (clock_ranges->wm_dmif_clocks_ranges[i].wm_min_mem_clk_in_khz));<br>
+               table->WatermarkRow[WM_DCFCLK][i].MaxMclk =<br>
+                       cpu_to_le16((uint16_t)<br>
+                       (clock_ranges->wm_dmif_clocks_ranges[i].wm_max_mem_clk_in_khz));<br>
+               table->WatermarkRow[WM_DCFCLK][i].WmSetting = (uint8_t)<br>
+                               clock_ranges->wm_dmif_clocks_ranges[i].wm_set_id;<br>
+       }<br>
+<br>
+       for (i = 0; i < clock_ranges->num_wm_mcif_sets; i++) {<br>
+               table->WatermarkRow[WM_SOCCLK][i].MinClock =<br>
+                       cpu_to_le16((uint16_t)<br>
+                       (clock_ranges->wm_mcif_clocks_ranges[i].wm_min_socclk_clk_in_khz));<br>
+               table->WatermarkRow[WM_SOCCLK][i].MaxClock =<br>
+                       cpu_to_le16((uint16_t)<br>
+                       (clock_ranges->wm_mcif_clocks_ranges[i].wm_max_socclk_clk_in_khz));<br>
+               table->WatermarkRow[WM_SOCCLK][i].MinMclk =<br>
+                       cpu_to_le16((uint16_t)<br>
+                       (clock_ranges->wm_mcif_clocks_ranges[i].wm_min_mem_clk_in_khz));<br>
+               table->WatermarkRow[WM_SOCCLK][i].MaxMclk =<br>
+                       cpu_to_le16((uint16_t)<br>
+                       (clock_ranges->wm_mcif_clocks_ranges[i].wm_max_mem_clk_in_khz));<br>
+               table->WatermarkRow[WM_SOCCLK][i].WmSetting = (uint8_t)<br>
+                               clock_ranges->wm_mcif_clocks_ranges[i].wm_set_id;<br>
+       }<br>
+<br>
+       /* pass data to smu controller */<br>
+       ret = smu_write_watermarks_table(smu);<br>
+<br>
+       return ret;<br>
+}<br>
+<br>
 static const struct pptable_funcs renoir_ppt_funcs = {<br>
         .get_smu_msg_index = renoir_get_smu_msg_index,<br>
         .get_smu_table_index = renoir_get_smu_table_index,<br>
@@ -562,6 +656,8 @@ static const struct pptable_funcs renoir_ppt_funcs = {<br>
         .force_clk_levels = renoir_force_clk_levels,<br>
         .set_power_profile_mode = renoir_set_power_profile_mode,<br>
         .set_performance_level = renoir_set_performance_level,<br>
+       .get_dpm_clock_table = renoir_get_dpm_clock_table,<br>
+       .set_watermarks_table = renoir_set_watermarks_table,<br>
 };<br>
 <br>
 void renoir_set_ppt_funcs(struct smu_context *smu)<br>
diff --git a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c<br>
index c9e90d59a6b8..eff7faa7944e 100644<br>
--- a/drivers/gpu/drm/amd/powerplay/smu_v11_0.c<br>
+++ b/drivers/gpu/drm/amd/powerplay/smu_v11_0.c<br>
@@ -770,23 +770,6 @@ static int smu_v11_0_write_pptable(struct smu_context *smu)<br>
         return ret;<br>
 }<br>
 <br>
-static int smu_v11_0_write_watermarks_table(struct smu_context *smu)<br>
-{<br>
-       int ret = 0;<br>
-       struct smu_table_context *smu_table = &smu->smu_table;<br>
-       struct smu_table *table = NULL;<br>
-<br>
-       table = &smu_table->tables[SMU_TABLE_WATERMARKS];<br>
-<br>
-       if (!table->cpu_addr)<br>
-               return -EINVAL;<br>
-<br>
-       ret = smu_update_table(smu, SMU_TABLE_WATERMARKS, 0, table->cpu_addr,<br>
-                               true);<br>
-<br>
-       return ret;<br>
-}<br>
-<br>
 static int smu_v11_0_set_deep_sleep_dcefclk(struct smu_context *smu, uint32_t clk)<br>
 {<br>
         int ret;<br>
@@ -1336,26 +1319,6 @@ smu_v11_0_display_clock_voltage_request(struct smu_context *smu,<br>
         return ret;<br>
 }<br>
 <br>
-static int<br>
-smu_v11_0_set_watermarks_for_clock_ranges(struct smu_context *smu, struct<br>
-                                         dm_pp_wm_sets_with_clock_ranges_soc15<br>
-                                         *clock_ranges)<br>
-{<br>
-       int ret = 0;<br>
-       struct smu_table *watermarks = &smu->smu_table.tables[SMU_TABLE_WATERMARKS];<br>
-       void *table = watermarks->cpu_addr;<br>
-<br>
-       if (!smu->disable_watermark &&<br>
-           smu_feature_is_enabled(smu, SMU_FEATURE_DPM_DCEFCLK_BIT) &&<br>
-           smu_feature_is_enabled(smu, SMU_FEATURE_DPM_SOCCLK_BIT)) {<br>
-               smu_set_watermarks_table(smu, table, clock_ranges);<br>
-               smu->watermarks_bitmap |= WATERMARKS_EXIST;<br>
-               smu->watermarks_bitmap &= ~WATERMARKS_LOADED;<br>
-       }<br>
-<br>
-       return ret;<br>
-}<br>
-<br>
 static int smu_v11_0_gfx_off_control(struct smu_context *smu, bool enable)<br>
 {<br>
         int ret = 0;<br>
@@ -1812,7 +1775,6 @@ static const struct smu_funcs smu_v11_0_funcs = {<br>
         .parse_pptable = smu_v11_0_parse_pptable,<br>
         .populate_smc_tables = smu_v11_0_populate_smc_pptable,<br>
         .write_pptable = smu_v11_0_write_pptable,<br>
-       .write_watermarks_table = smu_v11_0_write_watermarks_table,<br>
         .set_min_dcef_deep_sleep = smu_v11_0_set_min_dcef_deep_sleep,<br>
         .set_tool_table_location = smu_v11_0_set_tool_table_location,<br>
         .init_display_count = smu_v11_0_init_display_count,<br>
@@ -1828,7 +1790,6 @@ static const struct smu_funcs smu_v11_0_funcs = {<br>
         .read_sensor = smu_v11_0_read_sensor,<br>
         .set_deep_sleep_dcefclk = smu_v11_0_set_deep_sleep_dcefclk,<br>
         .display_clock_voltage_request = smu_v11_0_display_clock_voltage_request,<br>
-       .set_watermarks_for_clock_ranges = smu_v11_0_set_watermarks_for_clock_ranges,<br>
         .get_fan_control_mode = smu_v11_0_get_fan_control_mode,<br>
         .set_fan_control_mode = smu_v11_0_set_fan_control_mode,<br>
         .set_fan_speed_percent = smu_v11_0_set_fan_speed_percent,<br>
-- <br>
2.17.1<br>
<br>
</div>
</span></font></div>
</body>
</html>