[PATCH 4/4] drm/amdgpu/powerplay: factor out some pptable helpers

Quan, Evan Evan.Quan at amd.com
Wed Oct 10 01:20:44 UTC 2018


Series is reviewed-by: Evan Quan <evan.quan at amd.com>

> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of Alex
> Deucher
> Sent: 2018年10月10日 5:41
> To: amd-gfx at lists.freedesktop.org
> Cc: Deucher, Alexander <Alexander.Deucher at amd.com>
> Subject: [PATCH 4/4] drm/amdgpu/powerplay: factor out some pptable
> helpers
> 
> Move copy_array helpers to smu_helper.c and share between
> vega12 and vega20.
> 
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
> ---
>  drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c   | 44
> ++++++++++++++++
>  drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.h   | 12 +++++
>  .../amd/powerplay/hwmgr/vega12_processpptables.c   | 58 ++++-------------
> -----
>  .../amd/powerplay/hwmgr/vega20_processpptables.c   | 52 ++----------------
> -
>  4 files changed, 70 insertions(+), 96 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c
> b/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c
> index 8ad4e6960efd..4714b5b59825 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.c
> @@ -39,6 +39,50 @@ uint16_t convert_to_vddc(uint8_t vid)
>  	return (uint16_t) ((6200 - (vid * 25)) / VOLTAGE_SCALE);  }
> 
> +int phm_copy_clock_limits_array(
> +	struct pp_hwmgr *hwmgr,
> +	uint32_t **pptable_info_array,
> +	const uint32_t *pptable_array,
> +	uint32_t power_saving_clock_count)
> +{
> +	uint32_t array_size, i;
> +	uint32_t *table;
> +
> +	array_size = sizeof(uint32_t) * power_saving_clock_count;
> +	table = kzalloc(array_size, GFP_KERNEL);
> +	if (NULL == table)
> +		return -ENOMEM;
> +
> +	for (i = 0; i < power_saving_clock_count; i++)
> +		table[i] = le32_to_cpu(pptable_array[i]);
> +
> +	*pptable_info_array = table;
> +
> +	return 0;
> +}
> +
> +int phm_copy_overdrive_settings_limits_array(
> +	struct pp_hwmgr *hwmgr,
> +	uint32_t **pptable_info_array,
> +	const uint32_t *pptable_array,
> +	uint32_t od_setting_count)
> +{
> +	uint32_t array_size, i;
> +	uint32_t *table;
> +
> +	array_size = sizeof(uint32_t) * od_setting_count;
> +	table = kzalloc(array_size, GFP_KERNEL);
> +	if (NULL == table)
> +		return -ENOMEM;
> +
> +	for (i = 0; i < od_setting_count; i++)
> +		table[i] = le32_to_cpu(pptable_array[i]);
> +
> +	*pptable_info_array = table;
> +
> +	return 0;
> +}
> +
>  uint32_t phm_set_field_to_u32(u32 offset, u32 original_data, u32 field, u32
> size)  {
>  	u32 mask = 0;
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.h
> b/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.h
> index 5454289d5226..ad33983a8064 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.h
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu_helper.h
> @@ -47,6 +47,18 @@ struct watermarks {
>  	uint32_t     padding[7];
>  };
> 
> +int phm_copy_clock_limits_array(
> +	struct pp_hwmgr *hwmgr,
> +	uint32_t **pptable_info_array,
> +	const uint32_t *pptable_array,
> +	uint32_t power_saving_clock_count);
> +
> +int phm_copy_overdrive_settings_limits_array(
> +	struct pp_hwmgr *hwmgr,
> +	uint32_t **pptable_info_array,
> +	const uint32_t *pptable_array,
> +	uint32_t od_setting_count);
> +
>  extern int phm_wait_for_register_unequal(struct pp_hwmgr *hwmgr,
>  					uint32_t index,
>  					uint32_t value, uint32_t mask);
> diff --git
> a/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_processpptables.c
> b/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_processpptables.c
> index 3203cd2d2029..9817f7a5ed29 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_processpptables.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega12_processpptables.c
> @@ -99,50 +99,6 @@ static int set_platform_caps(struct pp_hwmgr *hwmgr,
> uint32_t powerplay_caps)
>  	return 0;
>  }
> 
> -static int copy_clock_limits_array(
> -	struct pp_hwmgr *hwmgr,
> -	uint32_t **pptable_info_array,
> -	const uint32_t *pptable_array)
> -{
> -	uint32_t array_size, i;
> -	uint32_t *table;
> -
> -	array_size = sizeof(uint32_t) * ATOM_VEGA12_PPCLOCK_COUNT;
> -
> -	table = kzalloc(array_size, GFP_KERNEL);
> -	if (NULL == table)
> -		return -ENOMEM;
> -
> -	for (i = 0; i < ATOM_VEGA12_PPCLOCK_COUNT; i++)
> -		table[i] = le32_to_cpu(pptable_array[i]);
> -
> -	*pptable_info_array = table;
> -
> -	return 0;
> -}
> -
> -static int copy_overdrive_settings_limits_array(
> -		struct pp_hwmgr *hwmgr,
> -		uint32_t **pptable_info_array,
> -		const uint32_t *pptable_array)
> -{
> -	uint32_t array_size, i;
> -	uint32_t *table;
> -
> -	array_size = sizeof(uint32_t) * ATOM_VEGA12_ODSETTING_COUNT;
> -
> -	table = kzalloc(array_size, GFP_KERNEL);
> -	if (NULL == table)
> -		return -ENOMEM;
> -
> -	for (i = 0; i < ATOM_VEGA12_ODSETTING_COUNT; i++)
> -		table[i] = le32_to_cpu(pptable_array[i]);
> -
> -	*pptable_info_array = table;
> -
> -	return 0;
> -}
> -
>  static int append_vbios_pptable(struct pp_hwmgr *hwmgr, PPTable_t
> *ppsmc_pptable)  {
>  	struct pp_atomfwctrl_smc_dpm_parameters smc_dpm_table; @@ -
> 258,8 +214,14 @@ static int init_powerplay_table_information(
>  	hwmgr->platform_descriptor.overdriveLimit.memoryClock =
>  		le32_to_cpu(powerplay_table-
> >ODSettingsMax[ATOM_VEGA12_ODSETTING_UCLKFMAX]);
> 
> -	copy_overdrive_settings_limits_array(hwmgr,
> &pptable_information->od_settings_max, powerplay_table-
> >ODSettingsMax);
> -	copy_overdrive_settings_limits_array(hwmgr,
> &pptable_information->od_settings_min, powerplay_table-
> >ODSettingsMin);
> +	phm_copy_overdrive_settings_limits_array(hwmgr,
> +						 &pptable_information-
> >od_settings_max,
> +						 powerplay_table-
> >ODSettingsMax,
> +
> ATOM_VEGA12_ODSETTING_COUNT);
> +	phm_copy_overdrive_settings_limits_array(hwmgr,
> +						 &pptable_information-
> >od_settings_min,
> +						 powerplay_table-
> >ODSettingsMin,
> +
> ATOM_VEGA12_ODSETTING_COUNT);
> 
>  	/* hwmgr->platformDescriptor.minOverdriveVDDC = 0;
>  	hwmgr->platformDescriptor.maxOverdriveVDDC = 0; @@ -287,8
> +249,8 @@ static int init_powerplay_table_information(
>  				PHM_PlatformCaps_PowerControl);
>  	}
> 
> -	copy_clock_limits_array(hwmgr, &pptable_information-
> >power_saving_clock_max, powerplay_table->PowerSavingClockMax);
> -	copy_clock_limits_array(hwmgr, &pptable_information-
> >power_saving_clock_min, powerplay_table->PowerSavingClockMin);
> +	phm_copy_clock_limits_array(hwmgr, &pptable_information-
> >power_saving_clock_max, powerplay_table->PowerSavingClockMax,
> ATOM_VEGA12_PPCLOCK_COUNT);
> +	phm_copy_clock_limits_array(hwmgr,
> +&pptable_information->power_saving_clock_min,
> +powerplay_table->PowerSavingClockMin,
> ATOM_VEGA12_PPCLOCK_COUNT);
> 
>  	pptable_information->smc_pptable = (PPTable_t
> *)kmalloc(sizeof(PPTable_t), GFP_KERNEL);
>  	if (pptable_information->smc_pptable == NULL) diff --git
> a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_processpptables.c
> b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_processpptables.c
> index 956aa6aff28d..32fe38452094 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_processpptables.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_processpptables.c
> @@ -661,50 +661,6 @@ static int set_platform_caps(struct pp_hwmgr
> *hwmgr, uint32_t powerplay_caps)
>  	return 0;
>  }
> 
> -static int copy_clock_limits_array(
> -	struct pp_hwmgr *hwmgr,
> -	uint32_t **pptable_info_array,
> -	const uint32_t *pptable_array,
> -	uint32_t power_saving_clock_count)
> -{
> -	uint32_t array_size, i;
> -	uint32_t *table;
> -
> -	array_size = sizeof(uint32_t) * power_saving_clock_count;
> -	table = kzalloc(array_size, GFP_KERNEL);
> -	if (NULL == table)
> -		return -ENOMEM;
> -
> -	for (i = 0; i < power_saving_clock_count; i++)
> -		table[i] = le32_to_cpu(pptable_array[i]);
> -
> -	*pptable_info_array = table;
> -
> -	return 0;
> -}
> -
> -static int copy_overdrive_settings_limits_array(
> -		struct pp_hwmgr *hwmgr,
> -		uint32_t **pptable_info_array,
> -		const uint32_t *pptable_array,
> -		uint32_t od_setting_count)
> -{
> -	uint32_t array_size, i;
> -	uint32_t *table;
> -
> -	array_size = sizeof(uint32_t) * od_setting_count;
> -	table = kzalloc(array_size, GFP_KERNEL);
> -	if (NULL == table)
> -		return -ENOMEM;
> -
> -	for (i = 0; i < od_setting_count; i++)
> -		table[i] = le32_to_cpu(pptable_array[i]);
> -
> -	*pptable_info_array = table;
> -
> -	return 0;
> -}
> -
>  static int copy_overdrive_feature_capabilities_array(
>  		struct pp_hwmgr *hwmgr,
>  		uint8_t **pptable_info_array,
> @@ -859,11 +815,11 @@ static int init_powerplay_table_information(
>  				&pptable_information-
> >od_feature_capabilities,
>  				powerplay_table-
> >OverDrive8Table.ODFeatureCapabilities,
>  				od_feature_count);
> -		copy_overdrive_settings_limits_array(hwmgr,
> +		phm_copy_overdrive_settings_limits_array(hwmgr,
>  				&pptable_information->od_settings_max,
>  				powerplay_table-
> >OverDrive8Table.ODSettingsMax,
>  				od_setting_count);
> -		copy_overdrive_settings_limits_array(hwmgr,
> +		phm_copy_overdrive_settings_limits_array(hwmgr,
>  				&pptable_information->od_settings_min,
>  				powerplay_table-
> >OverDrive8Table.ODSettingsMin,
>  				od_setting_count);
> @@ -890,11 +846,11 @@ static int init_powerplay_table_information(
>  			 ATOM_VEGA20_PPCLOCK_COUNT) ?
>  			ATOM_VEGA20_PPCLOCK_COUNT :
>  			le32_to_cpu(powerplay_table-
> >PowerSavingClockTable.PowerSavingClockCount);
> -		copy_clock_limits_array(hwmgr,
> +		phm_copy_clock_limits_array(hwmgr,
>  				&pptable_information-
> >power_saving_clock_max,
>  				powerplay_table-
> >PowerSavingClockTable.PowerSavingClockMax,
>  				power_saving_clock_count);
> -		copy_clock_limits_array(hwmgr,
> +		phm_copy_clock_limits_array(hwmgr,
>  				&pptable_information-
> >power_saving_clock_min,
>  				powerplay_table-
> >PowerSavingClockTable.PowerSavingClockMin,
>  				power_saving_clock_count);
> --
> 2.13.6
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list