aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0965-drm-amd-powerplay-parameter-updates-according-to-SMC.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0965-drm-amd-powerplay-parameter-updates-according-to-SMC.patch')
-rw-r--r--common/recipes-kernel/linux/files/0965-drm-amd-powerplay-parameter-updates-according-to-SMC.patch109
1 files changed, 109 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0965-drm-amd-powerplay-parameter-updates-according-to-SMC.patch b/common/recipes-kernel/linux/files/0965-drm-amd-powerplay-parameter-updates-according-to-SMC.patch
new file mode 100644
index 00000000..d677a764
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0965-drm-amd-powerplay-parameter-updates-according-to-SMC.patch
@@ -0,0 +1,109 @@
+From 37ad363096ab99bee1b6013e012036c283867049 Mon Sep 17 00:00:00 2001
+From: Rex Zhu <Rex.Zhu@amd.com>
+Date: Wed, 23 Mar 2016 15:04:23 +0800
+Subject: [PATCH 0965/1110] drm/amd/powerplay: parameter updates according to
+ SMC.
+
+Update to latest changes for SMC team.
+
+Signed-off-by: Rex Zhu <Rex.Zhu@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ .../drm/amd/powerplay/hwmgr/polaris10_powertune.c | 32 ++++++++++++----------
+ drivers/gpu/drm/amd/powerplay/inc/smu74_discrete.h | 10 +++----
+ 2 files changed, 22 insertions(+), 20 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_powertune.c b/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_powertune.c
+index 4d97326..02bcedc 100644
+--- a/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_powertune.c
++++ b/drivers/gpu/drm/amd/powerplay/hwmgr/polaris10_powertune.c
+@@ -57,6 +57,13 @@ void polaris10_initialize_power_tune_defaults(struct pp_hwmgr *hwmgr)
+
+ }
+
++static uint16_t scale_fan_gain_settings(uint16_t raw_setting)
++{
++ uint32_t tmp;
++ tmp = raw_setting * 4096 / 100;
++ return (uint16_t)tmp;
++}
++
+ int polaris10_populate_bapm_parameters_in_dpm_table(struct pp_hwmgr *hwmgr)
+ {
+ struct polaris10_hwmgr *data = (struct polaris10_hwmgr *)(hwmgr->backend);
+@@ -65,6 +72,8 @@ int polaris10_populate_bapm_parameters_in_dpm_table(struct pp_hwmgr *hwmgr)
+ struct phm_ppt_v1_information *table_info =
+ (struct phm_ppt_v1_information *)(hwmgr->pptable);
+ struct phm_cac_tdp_table *cac_dtp_table = table_info->cac_dtp_table;
++ struct pp_advance_fan_control_parameters *fan_table=
++ &hwmgr->thermal_controller.advanceFanControlParameters;
+ int i, j, k;
+ uint16_t *pdef1;
+ uint16_t *pdef2;
+@@ -75,15 +84,16 @@ int polaris10_populate_bapm_parameters_in_dpm_table(struct pp_hwmgr *hwmgr)
+ PP_ASSERT_WITH_CODE(cac_dtp_table->usTargetOperatingTemp <= 255,
+ "Target Operating Temp is out of Range!",
+ );
+-/* This is the same value as TemperatureLimitHigh except it is integer with no fraction bit. */
+- dpm_table->GpuTjMax = (uint8_t)(cac_dtp_table->usTargetOperatingTemp);
+
+-/* HW request to hard code this value to 8 which is 0.5C */
+- dpm_table->GpuTjHyst = 8;
++ dpm_table->TemperatureLimitEdge = PP_HOST_TO_SMC_US(
++ cac_dtp_table->usTargetOperatingTemp * 256);
++ dpm_table->TemperatureLimitHotspot = PP_HOST_TO_SMC_US(
++ cac_dtp_table->usTemperatureLimitHotspot * 256);
++ dpm_table->FanGainEdge = PP_HOST_TO_SMC_US(
++ scale_fan_gain_settings(fan_table->usFanGainEdge));
++ dpm_table->FanGainHotspot = PP_HOST_TO_SMC_US(
++ scale_fan_gain_settings(fan_table->usFanGainHotspot));
+
+- dpm_table->DTEAmbientTempBase = defaults->DTEAmbientTempBase;
+- dpm_table->DTETjOffset = (uint8_t)(data->dte_tj_offset);
+- dpm_table->BAPM_TEMP_GRADIENT = PP_HOST_TO_SMC_UL(defaults->BAPM_TEMP_GRADIENT);
+ pdef1 = defaults->BAPMTI_R;
+ pdef2 = defaults->BAPMTI_RC;
+
+@@ -330,14 +340,6 @@ int polaris10_enable_power_containment(struct pp_hwmgr *hwmgr)
+ data->power_containment_features = 0;
+ if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps,
+ PHM_PlatformCaps_PowerContainment)) {
+- if (data->enable_dte_feature) {
+- smc_result = smum_send_msg_to_smc(hwmgr->smumgr,
+- (uint16_t)(PPSMC_MSG_EnableDTE));
+- PP_ASSERT_WITH_CODE((0 == smc_result),
+- "Failed to enable DTE in SMC.", result = -1;);
+- if (0 == smc_result)
+- data->power_containment_features |= POWERCONTAINMENT_FEATURE_DTE;
+- }
+
+ if (data->enable_tdc_limit_feature) {
+ smc_result = smum_send_msg_to_smc(hwmgr->smumgr,
+diff --git a/drivers/gpu/drm/amd/powerplay/inc/smu74_discrete.h b/drivers/gpu/drm/amd/powerplay/inc/smu74_discrete.h
+index f6a7591..0dfe823 100644
+--- a/drivers/gpu/drm/amd/powerplay/inc/smu74_discrete.h
++++ b/drivers/gpu/drm/amd/powerplay/inc/smu74_discrete.h
+@@ -323,14 +323,14 @@ struct SMU74_Discrete_DpmTable {
+ uint16_t BAPMTI_R[SMU74_DTE_ITERATIONS][SMU74_DTE_SOURCES][SMU74_DTE_SINKS];
+ uint16_t BAPMTI_RC[SMU74_DTE_ITERATIONS][SMU74_DTE_SOURCES][SMU74_DTE_SINKS];
+
+- uint8_t DTEAmbientTempBase;
+- uint8_t DTETjOffset;
+- uint8_t GpuTjMax;
+- uint8_t GpuTjHyst;
++ uint16_t TemperatureLimitEdge;
++ uint16_t TemperatureLimitHotspot;
++
+ uint16_t BootVddc;
+ uint16_t BootVddci;
+
+- uint32_t BAPM_TEMP_GRADIENT;
++ uint16_t FanGainEdge;
++ uint16_t FanGainHotspot;
+
+ uint32_t LowSclkInterruptThreshold;
+ uint32_t VddGfxReChkWait;
+--
+2.7.4
+