aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/5311-drm-amd-powerplay-update-OD-feature-judgement.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/5311-drm-amd-powerplay-update-OD-feature-judgement.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/5311-drm-amd-powerplay-update-OD-feature-judgement.patch148
1 files changed, 148 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/5311-drm-amd-powerplay-update-OD-feature-judgement.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/5311-drm-amd-powerplay-update-OD-feature-judgement.patch
new file mode 100644
index 00000000..f41d91c9
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/5311-drm-amd-powerplay-update-OD-feature-judgement.patch
@@ -0,0 +1,148 @@
+From 8cecb19d79f04b625112604dd14d9fac3b28e3c7 Mon Sep 17 00:00:00 2001
+From: Evan Quan <evan.quan@amd.com>
+Date: Wed, 12 Sep 2018 11:45:01 +0800
+Subject: [PATCH 5311/5725] 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@amd.com>
+Acked-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c | 79 +++++++++++++++-------
+ .../gpu/drm/amd/powerplay/hwmgr/vega20_pptable.h | 2 +
+ 2 files changed, 55 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 3efd59e..afc61b5 100644
+--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
++++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega20_hwmgr.c
+@@ -832,58 +832,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_VDDGFXCURVEVOLTAGEOFFSET_P1] > 0 &&
+- pptable_information->od_settings_min[ATOM_VEGA20_ODSETTING_VDDGFXCURVEVOLTAGEOFFSET_P2] > 0 &&
+- pptable_information->od_settings_min[ATOM_VEGA20_ODSETTING_VDDGFXCURVEVOLTAGEOFFSET_P3] > 0 &&
+- pptable_information->od_settings_max[ATOM_VEGA20_ODSETTING_VDDGFXCURVEVOLTAGEOFFSET_P1] > 0 &&
+- pptable_information->od_settings_max[ATOM_VEGA20_ODSETTING_VDDGFXCURVEVOLTAGEOFFSET_P2] > 0 &&
+- pptable_information->od_settings_max[ATOM_VEGA20_ODSETTING_VDDGFXCURVEVOLTAGEOFFSET_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_LIMIT] &&
++ 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_SYSTEM] &&
++ 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_CONTROL] &&
++ 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 b104f6a..2222e29 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.7.4
+