public inbox for amd-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
* [PATCH] drm/amd/pp: Move common code to smu_help.c
@ 2018-04-13  6:08 Rex Zhu
       [not found] ` <1523599695-23670-1-git-send-email-Rex.Zhu-5C7GfCeVMHo@public.gmane.org>
  0 siblings, 1 reply; 2+ messages in thread
From: Rex Zhu @ 2018-04-13  6:08 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Rex Zhu

Signed-off-by: Rex Zhu <Rex.Zhu@amd.com>
---
 drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c   | 56 ++++++++++++++++++++++
 drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.h   | 21 ++++++++
 drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c | 43 +----------------
 3 files changed, 78 insertions(+), 42 deletions(-)

diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c
index e6178b0..7c23741 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c
@@ -650,3 +650,59 @@ int smu_get_voltage_dependency_table_ppt_v1(
 
 	return 0;
 }
+
+int smu_set_watermarks_for_clocks_ranges(void *wt_table,
+		struct pp_wm_sets_with_clock_ranges_soc15 *wm_with_clock_ranges)
+{
+	uint32_t i;
+	struct watermarks *table = wt_table;
+
+	if (!table || wm_with_clock_ranges)
+		return -EINVAL;
+
+	if (wm_with_clock_ranges->num_wm_sets_dmif > 4 || wm_with_clock_ranges->num_wm_sets_mcif > 4)
+		return -EINVAL;
+
+	for (i = 0; i < wm_with_clock_ranges->num_wm_sets_dmif; i++) {
+		table->WatermarkRow[1][i].MinClock =
+			cpu_to_le16((uint16_t)
+			(wm_with_clock_ranges->wm_sets_dmif[i].wm_min_dcefclk_in_khz) /
+			100);
+		table->WatermarkRow[1][i].MaxClock =
+			cpu_to_le16((uint16_t)
+			(wm_with_clock_ranges->wm_sets_dmif[i].wm_max_dcefclk_in_khz) /
+			100);
+		table->WatermarkRow[1][i].MinUclk =
+			cpu_to_le16((uint16_t)
+			(wm_with_clock_ranges->wm_sets_dmif[i].wm_min_memclk_in_khz) /
+			100);
+		table->WatermarkRow[1][i].MaxUclk =
+			cpu_to_le16((uint16_t)
+			(wm_with_clock_ranges->wm_sets_dmif[i].wm_max_memclk_in_khz) /
+			100);
+		table->WatermarkRow[1][i].WmSetting = (uint8_t)
+				wm_with_clock_ranges->wm_sets_dmif[i].wm_set_id;
+	}
+
+	for (i = 0; i < wm_with_clock_ranges->num_wm_sets_mcif; i++) {
+		table->WatermarkRow[0][i].MinClock =
+			cpu_to_le16((uint16_t)
+			(wm_with_clock_ranges->wm_sets_mcif[i].wm_min_socclk_in_khz) /
+			100);
+		table->WatermarkRow[0][i].MaxClock =
+			cpu_to_le16((uint16_t)
+			(wm_with_clock_ranges->wm_sets_mcif[i].wm_max_socclk_in_khz) /
+			100);
+		table->WatermarkRow[0][i].MinUclk =
+			cpu_to_le16((uint16_t)
+			(wm_with_clock_ranges->wm_sets_mcif[i].wm_min_memclk_in_khz) /
+			100);
+		table->WatermarkRow[0][i].MaxUclk =
+			cpu_to_le16((uint16_t)
+			(wm_with_clock_ranges->wm_sets_mcif[i].wm_max_memclk_in_khz) /
+			100);
+		table->WatermarkRow[0][i].WmSetting = (uint8_t)
+				wm_with_clock_ranges->wm_sets_mcif[i].wm_set_id;
+	}
+	return 0;
+}
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.h b/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.h
index 2243e29..916cc01 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.h
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.h
@@ -26,10 +26,27 @@
 struct pp_atomctrl_voltage_table;
 struct pp_hwmgr;
 struct phm_ppt_v1_voltage_lookup_table;
+struct Watermarks_t;
+struct pp_wm_sets_with_clock_ranges_soc15;
 
 uint8_t convert_to_vid(uint16_t vddc);
 uint16_t convert_to_vddc(uint8_t vid);
 
+struct watermark_row_generic_t {
+	uint16_t MinClock;
+	uint16_t MaxClock;
+	uint16_t MinUclk;
+	uint16_t MaxUclk;
+
+	uint8_t  WmSetting;
+	uint8_t  Padding[3];
+};
+
+struct watermarks {
+	struct watermark_row_generic_t WatermarkRow[2][4];
+	uint32_t     padding[7];
+};
+
 extern int phm_wait_for_register_unequal(struct pp_hwmgr *hwmgr,
 					uint32_t index,
 					uint32_t value, uint32_t mask);
@@ -88,6 +105,10 @@ void *smu_atom_get_data_table(void *dev, uint32_t table, uint16_t *size,
 int smu_get_voltage_dependency_table_ppt_v1(
 	const struct phm_ppt_v1_clock_voltage_dependency_table *allowed_dep_table,
 		struct phm_ppt_v1_clock_voltage_dependency_table *dep_table);
+
+int smu_set_watermarks_for_clocks_ranges(void *wt_table,
+		struct pp_wm_sets_with_clock_ranges_soc15 *wm_with_clock_ranges);
+
 #define PHM_FIELD_SHIFT(reg, field) reg##__##field##__SHIFT
 #define PHM_FIELD_MASK(reg, field) reg##__##field##_MASK
 
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
index 431a0cc..7903a47 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
@@ -4181,50 +4181,9 @@ static int vega10_set_watermarks_for_clocks_ranges(struct pp_hwmgr *hwmgr,
 	struct vega10_hwmgr *data = hwmgr->backend;
 	Watermarks_t *table = &(data->smc_state_table.water_marks_table);
 	int result = 0;
-	uint32_t i;
 
 	if (!data->registry_data.disable_water_mark) {
-		for (i = 0; i < wm_with_clock_ranges->num_wm_sets_dmif; i++) {
-			table->WatermarkRow[WM_DCEFCLK][i].MinClock =
-				cpu_to_le16((uint16_t)
-				(wm_with_clock_ranges->wm_sets_dmif[i].wm_min_dcefclk_in_khz) /
-				100);
-			table->WatermarkRow[WM_DCEFCLK][i].MaxClock =
-				cpu_to_le16((uint16_t)
-				(wm_with_clock_ranges->wm_sets_dmif[i].wm_max_dcefclk_in_khz) /
-				100);
-			table->WatermarkRow[WM_DCEFCLK][i].MinUclk =
-				cpu_to_le16((uint16_t)
-				(wm_with_clock_ranges->wm_sets_dmif[i].wm_min_memclk_in_khz) /
-				100);
-			table->WatermarkRow[WM_DCEFCLK][i].MaxUclk =
-				cpu_to_le16((uint16_t)
-				(wm_with_clock_ranges->wm_sets_dmif[i].wm_max_memclk_in_khz) /
-				100);
-			table->WatermarkRow[WM_DCEFCLK][i].WmSetting = (uint8_t)
-					wm_with_clock_ranges->wm_sets_dmif[i].wm_set_id;
-		}
-
-		for (i = 0; i < wm_with_clock_ranges->num_wm_sets_mcif; i++) {
-			table->WatermarkRow[WM_SOCCLK][i].MinClock =
-				cpu_to_le16((uint16_t)
-				(wm_with_clock_ranges->wm_sets_mcif[i].wm_min_socclk_in_khz) /
-				100);
-			table->WatermarkRow[WM_SOCCLK][i].MaxClock =
-				cpu_to_le16((uint16_t)
-				(wm_with_clock_ranges->wm_sets_mcif[i].wm_max_socclk_in_khz) /
-				100);
-			table->WatermarkRow[WM_SOCCLK][i].MinUclk =
-				cpu_to_le16((uint16_t)
-				(wm_with_clock_ranges->wm_sets_mcif[i].wm_min_memclk_in_khz) /
-				100);
-			table->WatermarkRow[WM_SOCCLK][i].MaxUclk =
-				cpu_to_le16((uint16_t)
-				(wm_with_clock_ranges->wm_sets_mcif[i].wm_max_memclk_in_khz) /
-				100);
-			table->WatermarkRow[WM_SOCCLK][i].WmSetting = (uint8_t)
-					wm_with_clock_ranges->wm_sets_mcif[i].wm_set_id;
-		}
+		smu_set_watermarks_for_clocks_ranges(table, wm_with_clock_ranges);
 		data->water_marks_bitmap = WaterMarksExist;
 	}
 
-- 
1.9.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] drm/amd/pp: Move common code to smu_help.c
       [not found] ` <1523599695-23670-1-git-send-email-Rex.Zhu-5C7GfCeVMHo@public.gmane.org>
@ 2018-04-13  7:58   ` Huang Rui
  0 siblings, 0 replies; 2+ messages in thread
From: Huang Rui @ 2018-04-13  7:58 UTC (permalink / raw)
  To: Rex Zhu; +Cc: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

On Fri, Apr 13, 2018 at 02:08:15PM +0800, Rex Zhu wrote:
> Signed-off-by: Rex Zhu <Rex.Zhu@amd.com>

Reviewed-by: Huang Rui <ray.huang@amd.com>

> ---
>  drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c   | 56 ++++++++++++++++++++++
>  drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.h   | 21 ++++++++
>  drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c | 43 +----------------
>  3 files changed, 78 insertions(+), 42 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c
> index e6178b0..7c23741 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c
> @@ -650,3 +650,59 @@ int smu_get_voltage_dependency_table_ppt_v1(
>  
>  	return 0;
>  }
> +
> +int smu_set_watermarks_for_clocks_ranges(void *wt_table,
> +		struct pp_wm_sets_with_clock_ranges_soc15 *wm_with_clock_ranges)
> +{
> +	uint32_t i;
> +	struct watermarks *table = wt_table;
> +
> +	if (!table || wm_with_clock_ranges)
> +		return -EINVAL;
> +
> +	if (wm_with_clock_ranges->num_wm_sets_dmif > 4 || wm_with_clock_ranges->num_wm_sets_mcif > 4)
> +		return -EINVAL;
> +
> +	for (i = 0; i < wm_with_clock_ranges->num_wm_sets_dmif; i++) {
> +		table->WatermarkRow[1][i].MinClock =
> +			cpu_to_le16((uint16_t)
> +			(wm_with_clock_ranges->wm_sets_dmif[i].wm_min_dcefclk_in_khz) /
> +			100);
> +		table->WatermarkRow[1][i].MaxClock =
> +			cpu_to_le16((uint16_t)
> +			(wm_with_clock_ranges->wm_sets_dmif[i].wm_max_dcefclk_in_khz) /
> +			100);
> +		table->WatermarkRow[1][i].MinUclk =
> +			cpu_to_le16((uint16_t)
> +			(wm_with_clock_ranges->wm_sets_dmif[i].wm_min_memclk_in_khz) /
> +			100);
> +		table->WatermarkRow[1][i].MaxUclk =
> +			cpu_to_le16((uint16_t)
> +			(wm_with_clock_ranges->wm_sets_dmif[i].wm_max_memclk_in_khz) /
> +			100);
> +		table->WatermarkRow[1][i].WmSetting = (uint8_t)
> +				wm_with_clock_ranges->wm_sets_dmif[i].wm_set_id;
> +	}
> +
> +	for (i = 0; i < wm_with_clock_ranges->num_wm_sets_mcif; i++) {
> +		table->WatermarkRow[0][i].MinClock =
> +			cpu_to_le16((uint16_t)
> +			(wm_with_clock_ranges->wm_sets_mcif[i].wm_min_socclk_in_khz) /
> +			100);
> +		table->WatermarkRow[0][i].MaxClock =
> +			cpu_to_le16((uint16_t)
> +			(wm_with_clock_ranges->wm_sets_mcif[i].wm_max_socclk_in_khz) /
> +			100);
> +		table->WatermarkRow[0][i].MinUclk =
> +			cpu_to_le16((uint16_t)
> +			(wm_with_clock_ranges->wm_sets_mcif[i].wm_min_memclk_in_khz) /
> +			100);
> +		table->WatermarkRow[0][i].MaxUclk =
> +			cpu_to_le16((uint16_t)
> +			(wm_with_clock_ranges->wm_sets_mcif[i].wm_max_memclk_in_khz) /
> +			100);
> +		table->WatermarkRow[0][i].WmSetting = (uint8_t)
> +				wm_with_clock_ranges->wm_sets_mcif[i].wm_set_id;
> +	}
> +	return 0;
> +}
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.h b/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.h
> index 2243e29..916cc01 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.h
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.h
> @@ -26,10 +26,27 @@
>  struct pp_atomctrl_voltage_table;
>  struct pp_hwmgr;
>  struct phm_ppt_v1_voltage_lookup_table;
> +struct Watermarks_t;
> +struct pp_wm_sets_with_clock_ranges_soc15;
>  
>  uint8_t convert_to_vid(uint16_t vddc);
>  uint16_t convert_to_vddc(uint8_t vid);
>  
> +struct watermark_row_generic_t {
> +	uint16_t MinClock;
> +	uint16_t MaxClock;
> +	uint16_t MinUclk;
> +	uint16_t MaxUclk;
> +
> +	uint8_t  WmSetting;
> +	uint8_t  Padding[3];
> +};
> +
> +struct watermarks {
> +	struct watermark_row_generic_t WatermarkRow[2][4];
> +	uint32_t     padding[7];
> +};
> +
>  extern int phm_wait_for_register_unequal(struct pp_hwmgr *hwmgr,
>  					uint32_t index,
>  					uint32_t value, uint32_t mask);
> @@ -88,6 +105,10 @@ void *smu_atom_get_data_table(void *dev, uint32_t table, uint16_t *size,
>  int smu_get_voltage_dependency_table_ppt_v1(
>  	const struct phm_ppt_v1_clock_voltage_dependency_table *allowed_dep_table,
>  		struct phm_ppt_v1_clock_voltage_dependency_table *dep_table);
> +
> +int smu_set_watermarks_for_clocks_ranges(void *wt_table,
> +		struct pp_wm_sets_with_clock_ranges_soc15 *wm_with_clock_ranges);
> +
>  #define PHM_FIELD_SHIFT(reg, field) reg##__##field##__SHIFT
>  #define PHM_FIELD_MASK(reg, field) reg##__##field##_MASK
>  
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
> index 431a0cc..7903a47 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
> @@ -4181,50 +4181,9 @@ static int vega10_set_watermarks_for_clocks_ranges(struct pp_hwmgr *hwmgr,
>  	struct vega10_hwmgr *data = hwmgr->backend;
>  	Watermarks_t *table = &(data->smc_state_table.water_marks_table);
>  	int result = 0;
> -	uint32_t i;
>  
>  	if (!data->registry_data.disable_water_mark) {
> -		for (i = 0; i < wm_with_clock_ranges->num_wm_sets_dmif; i++) {
> -			table->WatermarkRow[WM_DCEFCLK][i].MinClock =
> -				cpu_to_le16((uint16_t)
> -				(wm_with_clock_ranges->wm_sets_dmif[i].wm_min_dcefclk_in_khz) /
> -				100);
> -			table->WatermarkRow[WM_DCEFCLK][i].MaxClock =
> -				cpu_to_le16((uint16_t)
> -				(wm_with_clock_ranges->wm_sets_dmif[i].wm_max_dcefclk_in_khz) /
> -				100);
> -			table->WatermarkRow[WM_DCEFCLK][i].MinUclk =
> -				cpu_to_le16((uint16_t)
> -				(wm_with_clock_ranges->wm_sets_dmif[i].wm_min_memclk_in_khz) /
> -				100);
> -			table->WatermarkRow[WM_DCEFCLK][i].MaxUclk =
> -				cpu_to_le16((uint16_t)
> -				(wm_with_clock_ranges->wm_sets_dmif[i].wm_max_memclk_in_khz) /
> -				100);
> -			table->WatermarkRow[WM_DCEFCLK][i].WmSetting = (uint8_t)
> -					wm_with_clock_ranges->wm_sets_dmif[i].wm_set_id;
> -		}
> -
> -		for (i = 0; i < wm_with_clock_ranges->num_wm_sets_mcif; i++) {
> -			table->WatermarkRow[WM_SOCCLK][i].MinClock =
> -				cpu_to_le16((uint16_t)
> -				(wm_with_clock_ranges->wm_sets_mcif[i].wm_min_socclk_in_khz) /
> -				100);
> -			table->WatermarkRow[WM_SOCCLK][i].MaxClock =
> -				cpu_to_le16((uint16_t)
> -				(wm_with_clock_ranges->wm_sets_mcif[i].wm_max_socclk_in_khz) /
> -				100);
> -			table->WatermarkRow[WM_SOCCLK][i].MinUclk =
> -				cpu_to_le16((uint16_t)
> -				(wm_with_clock_ranges->wm_sets_mcif[i].wm_min_memclk_in_khz) /
> -				100);
> -			table->WatermarkRow[WM_SOCCLK][i].MaxUclk =
> -				cpu_to_le16((uint16_t)
> -				(wm_with_clock_ranges->wm_sets_mcif[i].wm_max_memclk_in_khz) /
> -				100);
> -			table->WatermarkRow[WM_SOCCLK][i].WmSetting = (uint8_t)
> -					wm_with_clock_ranges->wm_sets_mcif[i].wm_set_id;
> -		}
> +		smu_set_watermarks_for_clocks_ranges(table, wm_with_clock_ranges);
>  		data->water_marks_bitmap = WaterMarksExist;
>  	}
>  
> -- 
> 1.9.1
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2018-04-13  7:58 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-04-13  6:08 [PATCH] drm/amd/pp: Move common code to smu_help.c Rex Zhu
     [not found] ` <1523599695-23670-1-git-send-email-Rex.Zhu-5C7GfCeVMHo@public.gmane.org>
2018-04-13  7:58   ` Huang Rui

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox