[PATCH 1/3] drm/amd/powerplay: update OD feature judgement
Deucher, Alexander
Alexander.Deucher at amd.com
Mon Sep 17 14:58:13 UTC 2018
> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of Evan
> Quan
> Sent: Monday, September 17, 2018 3:14 AM
> To: amd-gfx at lists.freedesktop.org
> Cc: Quan, Evan <Evan.Quan at amd.com>
> Subject: [PATCH 1/3] drm/amd/powerplay: update OD feature judgement
>
> Update the conditions to judge whether an OD feature should be supported
> on vega20.
>
> Change-Id: Iaabdd4db8f685fb94c960263fe38a21b36377aa2
> Signed-off-by: Evan Quan <evan.quan at amd.com>
Series is:
Acked-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> .../drm/amd/powerplay/hwmgr/vega20_hwmgr.c | 81 +++++++++++++---
> ---
> .../drm/amd/powerplay/hwmgr/vega20_pptable.h | 2 +
> 2 files changed, 57 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
> b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
> index ce123096c365..6295244a1737 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
> @@ -47,6 +47,8 @@
> #include "pp_overdriver.h"
> #include "pp_thermal.h"
>
> +#define VOLTAGE_SCALE 4
> +
> static void vega20_set_default_registry_data(struct pp_hwmgr *hwmgr) {
> struct vega20_hwmgr *data =
> @@ -832,58 +834,85 @@ static int vega20_od8_set_feature_capabilities(
> struct phm_ppt_v3_information *pptable_information =
> (struct phm_ppt_v3_information *)hwmgr->pptable;
> struct vega20_hwmgr *data = (struct vega20_hwmgr *)(hwmgr-
> >backend);
> + PPTable_t *pp_table = &(data->smc_state_table.pp_table);
> struct vega20_od8_settings *od_settings = &(data->od8_settings);
>
> od_settings->overdrive8_capabilities = 0;
>
> if (data->smu_features[GNLD_DPM_GFXCLK].enabled) {
> - if (pptable_information-
> >od_settings_max[ATOM_VEGA20_ODSETTING_GFXCLKFMAX] > 0 &&
> - pptable_information-
> >od_settings_min[ATOM_VEGA20_ODSETTING_GFXCLKFMAX] > 0 &&
> - pptable_information-
> >od_settings_max[ATOM_VEGA20_ODSETTING_GFXCLKFMIN] > 0 &&
> - pptable_information-
> >od_settings_min[ATOM_VEGA20_ODSETTING_GFXCLKFMIN] > 0)
> + if (pptable_information-
> >od_feature_capabilities[ATOM_VEGA20_ODFEATURE_GFXCLK_LIMITS] &&
> + pptable_information-
> >od_settings_max[OD8_SETTING_GFXCLK_FMAX] > 0 &&
> + pptable_information-
> >od_settings_min[OD8_SETTING_GFXCLK_FMIN] > 0 &&
> + (pptable_information-
> >od_settings_max[OD8_SETTING_GFXCLK_FMAX] >=
> + pptable_information-
> >od_settings_min[OD8_SETTING_GFXCLK_FMIN]))
> od_settings->overdrive8_capabilities |=
> OD8_GFXCLK_LIMITS;
>
> - if (pptable_information-
> >od_settings_min[ATOM_VEGA20_ODSETTING_VDDGFXCURVEFREQ_P1] >
> 0 &&
> - pptable_information-
> >od_settings_min[ATOM_VEGA20_ODSETTING_VDDGFXCURVEFREQ_P2] >
> 0 &&
> - pptable_information-
> >od_settings_min[ATOM_VEGA20_ODSETTING_VDDGFXCURVEFREQ_P3] >
> 0 &&
> - pptable_information-
> >od_settings_max[ATOM_VEGA20_ODSETTING_VDDGFXCURVEFREQ_P1] >
> 0 &&
> - pptable_information-
> >od_settings_max[ATOM_VEGA20_ODSETTING_VDDGFXCURVEFREQ_P2] >
> 0 &&
> - pptable_information-
> >od_settings_max[ATOM_VEGA20_ODSETTING_VDDGFXCURVEFREQ_P3] >
> 0 &&
> - pptable_information-
> >od_settings_min[ATOM_VEGA20_ODSETTING_VDDGFXCURVEVOLTAGEOF
> FSET_P1] > 0 &&
> - pptable_information-
> >od_settings_min[ATOM_VEGA20_ODSETTING_VDDGFXCURVEVOLTAGEOF
> FSET_P2] > 0 &&
> - pptable_information-
> >od_settings_min[ATOM_VEGA20_ODSETTING_VDDGFXCURVEVOLTAGEOF
> FSET_P3] > 0 &&
> - pptable_information-
> >od_settings_max[ATOM_VEGA20_ODSETTING_VDDGFXCURVEVOLTAGEO
> FFSET_P1] > 0 &&
> - pptable_information-
> >od_settings_max[ATOM_VEGA20_ODSETTING_VDDGFXCURVEVOLTAGEO
> FFSET_P2] > 0 &&
> - pptable_information-
> >od_settings_max[ATOM_VEGA20_ODSETTING_VDDGFXCURVEVOLTAGEO
> FFSET_P3] > 0)
> + if (pptable_information-
> >od_feature_capabilities[ATOM_VEGA20_ODFEATURE_GFXCLK_CURVE] &&
> + (pptable_information-
> >od_settings_min[OD8_SETTING_GFXCLK_VOLTAGE1] >=
> + pp_table->MinVoltageGfx / VOLTAGE_SCALE) &&
> + (pptable_information-
> >od_settings_max[OD8_SETTING_GFXCLK_VOLTAGE3] <=
> + pp_table->MaxVoltageGfx / VOLTAGE_SCALE) &&
> + (pptable_information-
> >od_settings_max[OD8_SETTING_GFXCLK_VOLTAGE3] >=
> +
> +pptable_information-
> >od_settings_min[OD8_SETTING_GFXCLK_VOLTAGE1]))
> od_settings->overdrive8_capabilities |=
> OD8_GFXCLK_CURVE;
> }
>
> if (data->smu_features[GNLD_DPM_UCLK].enabled) {
> - if (pptable_information-
> >od_settings_min[ATOM_VEGA20_ODSETTING_UCLKFMAX] > 0 &&
> - pptable_information-
> >od_settings_max[ATOM_VEGA20_ODSETTING_UCLKFMAX] > 0)
> + if (pptable_information-
> >od_feature_capabilities[ATOM_VEGA20_ODFEATURE_UCLK_MAX] &&
> + pptable_information-
> >od_settings_min[OD8_SETTING_UCLK_FMAX] > 0 &&
> + pptable_information-
> >od_settings_max[OD8_SETTING_UCLK_FMAX] > 0 &&
> + (pptable_information-
> >od_settings_max[OD8_SETTING_UCLK_FMAX] >=
> + pptable_information-
> >od_settings_min[OD8_SETTING_UCLK_FMAX]))
> od_settings->overdrive8_capabilities |=
> OD8_UCLK_MAX;
> }
>
> - if (pptable_information-
> >od_settings_max[ATOM_VEGA20_ODSETTING_POWERPERCENTAGE] > 0
> &&
> - pptable_information-
> >od_settings_max[ATOM_VEGA20_ODSETTING_POWERPERCENTAGE] <=
> 100)
> + if (pptable_information-
> >od_feature_capabilities[ATOM_VEGA20_ODFEATURE_POWER_LIMIT] &&
> + pptable_information-
> >od_settings_max[OD8_SETTING_POWER_PERCENTAGE] > 0 &&
> + pptable_information-
> >od_settings_max[OD8_SETTING_POWER_PERCENTAGE] <= 100 &&
> + pptable_information-
> >od_settings_min[OD8_SETTING_POWER_PERCENTAGE] > 0 &&
> + pptable_information-
> >od_settings_min[OD8_SETTING_POWER_PERCENTAGE]
> +<= 100)
> od_settings->overdrive8_capabilities |= OD8_POWER_LIMIT;
>
> if (data->smu_features[GNLD_FAN_CONTROL].enabled) {
> - if (pptable_information-
> >od_settings_max[ATOM_VEGA20_ODSETTING_FANRPMMIN] > 0)
> - od_settings->overdrive8_capabilities |=
> OD8_FAN_SPEED_MIN;
> -
> - if (pptable_information-
> >od_settings_max[ATOM_VEGA20_ODSETTING_FANRPMACOUSTICLIMIT] >
> 0)
> + if (pptable_information-
> >od_feature_capabilities[ATOM_VEGA20_ODFEATURE_FAN_ACOUSTIC_LI
> MIT] &&
> + pptable_information-
> >od_settings_min[OD8_SETTING_FAN_ACOUSTIC_LIMIT] > 0 &&
> + pptable_information-
> >od_settings_max[OD8_SETTING_FAN_ACOUSTIC_LIMIT] > 0 &&
> + (pptable_information-
> >od_settings_max[OD8_SETTING_FAN_ACOUSTIC_LIMIT] >=
> +
> +pptable_information-
> >od_settings_min[OD8_SETTING_FAN_ACOUSTIC_LIMIT]))
> od_settings->overdrive8_capabilities |=
> OD8_ACOUSTIC_LIMIT_SCLK;
> +
> + if (pptable_information-
> >od_feature_capabilities[ATOM_VEGA20_ODFEATURE_FAN_SPEED_MIN]
> &&
> + (pptable_information-
> >od_settings_min[OD8_SETTING_FAN_MIN_SPEED] >=
> + (pp_table->FanPwmMin * pp_table->FanMaximumRpm /
> 100)) &&
> + pptable_information-
> >od_settings_max[OD8_SETTING_FAN_MIN_SPEED] > 0 &&
> + (pptable_information-
> >od_settings_max[OD8_SETTING_FAN_MIN_SPEED] >=
> + pptable_information-
> >od_settings_min[OD8_SETTING_FAN_MIN_SPEED]))
> + od_settings->overdrive8_capabilities |=
> OD8_FAN_SPEED_MIN;
> }
>
> if (data->smu_features[GNLD_THERMAL].enabled) {
> - if (pptable_information-
> >od_settings_max[ATOM_VEGA20_ODSETTING_FANTARGETTEMPERATURE
> ] > 0)
> + if (pptable_information-
> >od_feature_capabilities[ATOM_VEGA20_ODFEATURE_TEMPERATURE_FAN
> ] &&
> + pptable_information-
> >od_settings_max[OD8_SETTING_FAN_TARGET_TEMP] > 0 &&
> + pptable_information-
> >od_settings_min[OD8_SETTING_FAN_TARGET_TEMP] > 0 &&
> + (pptable_information-
> >od_settings_max[OD8_SETTING_FAN_TARGET_TEMP] >=
> +
> +pptable_information-
> >od_settings_min[OD8_SETTING_FAN_TARGET_TEMP]))
> od_settings->overdrive8_capabilities |=
> OD8_TEMPERATURE_FAN;
>
> - if (pptable_information-
> >od_settings_max[ATOM_VEGA20_ODSETTING_OPERATINGTEMPMAX] >
> 0)
> + if (pptable_information-
> >od_feature_capabilities[ATOM_VEGA20_ODFEATURE_TEMPERATURE_SYS
> TEM] &&
> + pptable_information-
> >od_settings_max[OD8_SETTING_OPERATING_TEMP_MAX] > 0 &&
> + pptable_information-
> >od_settings_min[OD8_SETTING_OPERATING_TEMP_MAX] > 0 &&
> + (pptable_information-
> >od_settings_max[OD8_SETTING_OPERATING_TEMP_MAX] >=
> +
> +pptable_information-
> >od_settings_min[OD8_SETTING_OPERATING_TEMP_MAX]))
> od_settings->overdrive8_capabilities |=
> OD8_TEMPERATURE_SYSTEM;
> }
>
> + if (pptable_information-
> >od_feature_capabilities[ATOM_VEGA20_ODFEATURE_MEMORY_TIMING_
> TUNE])
> + od_settings->overdrive8_capabilities |=
> OD8_MEMORY_TIMING_TUNE;
> +
> + if (pptable_information-
> >od_feature_capabilities[ATOM_VEGA20_ODFEATURE_FAN_ZERO_RPM_C
> ONTROL] &&
> + pp_table->FanZeroRpmEnable)
> + od_settings->overdrive8_capabilities |=
> OD8_FAN_ZERO_RPM_CONTROL;
> +
> return 0;
> }
>
> diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_pptable.h
> b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_pptable.h
> index b104f6af81a4..2222e29405c6 100644
> --- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_pptable.h
> +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_pptable.h
> @@ -49,6 +49,8 @@ enum ATOM_VEGA20_ODFEATURE_ID {
> ATOM_VEGA20_ODFEATURE_FAN_SPEED_MIN, //FanMinimumPwm
> ATOM_VEGA20_ODFEATURE_TEMPERATURE_FAN,
> //FanTargetTemperature
> ATOM_VEGA20_ODFEATURE_TEMPERATURE_SYSTEM, //MaxOpTemp
> + ATOM_VEGA20_ODFEATURE_MEMORY_TIMING_TUNE,
> + ATOM_VEGA20_ODFEATURE_FAN_ZERO_RPM_CONTROL,
> ATOM_VEGA20_ODFEATURE_COUNT,
> };
>
> --
> 2.19.0
>
> _______________________________________________
> 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