aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/0649-drm-amd-pp-enable-power-limit-increase-in-OD-mode.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/0649-drm-amd-pp-enable-power-limit-increase-in-OD-mode.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/0649-drm-amd-pp-enable-power-limit-increase-in-OD-mode.patch70
1 files changed, 70 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/0649-drm-amd-pp-enable-power-limit-increase-in-OD-mode.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/0649-drm-amd-pp-enable-power-limit-increase-in-OD-mode.patch
new file mode 100644
index 00000000..c93aac7b
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/0649-drm-amd-pp-enable-power-limit-increase-in-OD-mode.patch
@@ -0,0 +1,70 @@
+From 89dec39c8e1904e81815a378bf25e0c0705a437c Mon Sep 17 00:00:00 2001
+From: Joseph Greathouse <Joseph.Greathouse@amd.com>
+Date: Thu, 18 Oct 2018 14:57:45 -0500
+Subject: [PATCH 0649/2940] drm/amd/pp: enable power limit increase in OD mode
+
+OverDrive mode allows users to increase the maximum SCLK and MCLK
+frequencies beyond the default on the GPU. However, this may not
+results in large performance gains if the GPU then runs into its TDP
+power limit. This patch adds the capability to increase the power
+limit of a GPU above its default maximum.
+
+This is only allowed when overdrive is enabled in the ppfeaturemask,
+since this is an overdrive feature. The TDPODLimit value from the
+VBIOS describes how how much higher the TDP should be allowed to go
+over its default, in percentage.
+
+v2: Moved dereference of hwmgr to after its validity check
+
+Signed-off-by: Joseph Greathouse <Joseph.Greathouse@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/powerplay/amd_powerplay.c | 16 ++++++++++++++--
+ 1 file changed, 14 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
+index da9ff2cc2777..bf09735ea3ac 100644
+--- a/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
++++ b/drivers/gpu/drm/amd/powerplay/amd_powerplay.c
+@@ -966,6 +966,7 @@ static int pp_dpm_switch_power_profile(void *handle,
+ static int pp_set_power_limit(void *handle, uint32_t limit)
+ {
+ struct pp_hwmgr *hwmgr = handle;
++ uint32_t max_power_limit;
+
+ if (!hwmgr || !hwmgr->pm_en)
+ return -EINVAL;
+@@ -978,7 +979,13 @@ static int pp_set_power_limit(void *handle, uint32_t limit)
+ if (limit == 0)
+ limit = hwmgr->default_power_limit;
+
+- if (limit > hwmgr->default_power_limit)
++ max_power_limit = hwmgr->default_power_limit;
++ if (hwmgr->od_enabled) {
++ max_power_limit *= (100 + hwmgr->platform_descriptor.TDPODLimit);
++ max_power_limit /= 100;
++ }
++
++ if (limit > max_power_limit)
+ return -EINVAL;
+
+ mutex_lock(&hwmgr->smu_lock);
+@@ -997,8 +1004,13 @@ static int pp_get_power_limit(void *handle, uint32_t *limit, bool default_limit)
+
+ mutex_lock(&hwmgr->smu_lock);
+
+- if (default_limit)
++ if (default_limit) {
+ *limit = hwmgr->default_power_limit;
++ if (hwmgr->od_enabled) {
++ *limit *= (100 + hwmgr->platform_descriptor.TDPODLimit);
++ *limit /= 100;
++ }
++ }
+ else
+ *limit = hwmgr->power_limit;
+
+--
+2.17.1
+