aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3682-drm-amd-pp-Fix-sclk-in-highest-two-levels-when-compu.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3682-drm-amd-pp-Fix-sclk-in-highest-two-levels-when-compu.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3682-drm-amd-pp-Fix-sclk-in-highest-two-levels-when-compu.patch64
1 files changed, 64 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3682-drm-amd-pp-Fix-sclk-in-highest-two-levels-when-compu.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3682-drm-amd-pp-Fix-sclk-in-highest-two-levels-when-compu.patch
new file mode 100644
index 00000000..6b525620
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3682-drm-amd-pp-Fix-sclk-in-highest-two-levels-when-compu.patch
@@ -0,0 +1,64 @@
+From 07e4ae274a132db678abea6bd2d71308c8e790db Mon Sep 17 00:00:00 2001
+From: Rex Zhu <Rex.Zhu@amd.com>
+Date: Fri, 23 Feb 2018 17:41:07 +0800
+Subject: [PATCH 3682/4131] drm/amd/pp: Fix sclk in highest two levels when
+ compute on smu7
+
+Compute workload tends to be "bursty", Only tune the behavior of
+nature dpm don't work well for most of such workloads. From test
+results, Fix sclk in highest two levels can get better performance.
+so add min sclk setting into the default cumpute workload policy on
+smu7.
+
+user still can change sclk range through sysfs pp_dpm_sclk
+for better perf/watt.
+
+Change-Id: I7faf48feb5206c5388f635a50c66031e0eb19814
+Reviewed-by: Evan Quan <evan.quan@amd.com>
+Signed-off-by: Rex Zhu <Rex.Zhu@amd.com>
+---
+ drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c | 21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
+index 5feb445..631793f 100644
+--- a/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
++++ b/drivers/gpu/drm/amd/powerplay/hwmgr/smu7_hwmgr.c
+@@ -4976,6 +4976,26 @@ static int smu7_get_power_profile_mode(struct pp_hwmgr *hwmgr, char *buf)
+ return size;
+ }
+
++static void smu7_patch_compute_profile_mode(struct pp_hwmgr *hwmgr,
++ enum PP_SMC_POWER_PROFILE requst)
++{
++ struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend);
++ uint32_t tmp, level;
++
++ if (requst == PP_SMC_POWER_PROFILE_COMPUTE) {
++ if (data->dpm_level_enable_mask.sclk_dpm_enable_mask) {
++ level = 0;
++ tmp = data->dpm_level_enable_mask.sclk_dpm_enable_mask;
++ while (tmp >>= 1)
++ level++;
++ if (level > 0)
++ smu7_force_clock_level(hwmgr, PP_SCLK, 3 << (level-1));
++ }
++ } else if (hwmgr->power_profile_mode == PP_SMC_POWER_PROFILE_COMPUTE) {
++ smu7_force_clock_level(hwmgr, PP_SCLK, data->dpm_level_enable_mask.sclk_dpm_enable_mask);
++ }
++}
++
+ static int smu7_set_power_profile_mode(struct pp_hwmgr *hwmgr, long *input, uint32_t size)
+ {
+ struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend);
+@@ -5026,6 +5046,7 @@ static int smu7_set_power_profile_mode(struct pp_hwmgr *hwmgr, long *input, uint
+ data->current_profile_setting.mclk_down_hyst = tmp.mclk_down_hyst;
+ data->current_profile_setting.mclk_activity = tmp.mclk_activity;
+ }
++ smu7_patch_compute_profile_mode(hwmgr, mode);
+ hwmgr->power_profile_mode = mode;
+ }
+ break;
+--
+2.7.4
+