aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0081-drm-amd-powerplay-refine-the-logic-of-whether-need-t.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0081-drm-amd-powerplay-refine-the-logic-of-whether-need-t.patch')
-rw-r--r--common/recipes-kernel/linux/files/0081-drm-amd-powerplay-refine-the-logic-of-whether-need-t.patch63
1 files changed, 63 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0081-drm-amd-powerplay-refine-the-logic-of-whether-need-t.patch b/common/recipes-kernel/linux/files/0081-drm-amd-powerplay-refine-the-logic-of-whether-need-t.patch
new file mode 100644
index 00000000..08dbb486
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0081-drm-amd-powerplay-refine-the-logic-of-whether-need-t.patch
@@ -0,0 +1,63 @@
+From 5b1f18ef440591637603496b299e942278ca17b3 Mon Sep 17 00:00:00 2001
+From: Rex Zhu <Rex.Zhu@amd.com>
+Date: Wed, 4 Nov 2015 14:56:56 +0800
+Subject: [PATCH 0081/1110] drm/amd/powerplay: refine the logic of whether need
+ to update power state.
+
+Better handle power state changes.
+
+Signed-off-by: Rex Zhu <Rex.Zhu@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Reviewed-by: Jammy Zhou <Jammy.Zhou@amd.com>
+---
+ drivers/gpu/drm/amd/powerplay/eventmgr/psm.c | 13 ++++++++++---
+ drivers/gpu/drm/amd/powerplay/eventmgr/psm.h | 1 +
+ 2 files changed, 11 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/powerplay/eventmgr/psm.c b/drivers/gpu/drm/amd/powerplay/eventmgr/psm.c
+index 08b75bd..82774ac 100644
+--- a/drivers/gpu/drm/amd/powerplay/eventmgr/psm.c
++++ b/drivers/gpu/drm/amd/powerplay/eventmgr/psm.c
+@@ -86,9 +86,10 @@ int psm_set_performance_states(struct pp_eventmgr *eventmgr, unsigned long *stat
+ int psm_adjust_power_state_dynamic(struct pp_eventmgr *eventmgr, bool skip)
+ {
+
+- const struct pp_power_state *pcurrent;
+- struct pp_power_state *requested;
++ struct pp_power_state *pcurrent;
++ struct pp_power_state *requested;
+ struct pp_hwmgr *hwmgr;
++ bool equal;
+
+ if (skip)
+ return 0;
+@@ -97,7 +98,13 @@ int psm_adjust_power_state_dynamic(struct pp_eventmgr *eventmgr, bool skip)
+ pcurrent = hwmgr->current_ps;
+ requested = hwmgr->request_ps;
+
+- if ((pcurrent != NULL || requested != NULL) && (pcurrent != requested)) {
++ if (requested == NULL)
++ return 0;
++
++ if (pcurrent == NULL || (0 != phm_check_states_equal(hwmgr, &pcurrent->hardware, &requested->hardware, &equal)))
++ equal = false;
++
++ if (!equal || phm_check_smc_update_required_for_display_configuration(hwmgr)) {
+ phm_apply_state_adjust_rules(hwmgr, requested, pcurrent);
+ phm_set_power_state(hwmgr, &pcurrent->hardware, &requested->hardware);
+ hwmgr->current_ps = requested;
+diff --git a/drivers/gpu/drm/amd/powerplay/eventmgr/psm.h b/drivers/gpu/drm/amd/powerplay/eventmgr/psm.h
+index 15abfac..1380470 100644
+--- a/drivers/gpu/drm/amd/powerplay/eventmgr/psm.h
++++ b/drivers/gpu/drm/amd/powerplay/eventmgr/psm.h
+@@ -25,6 +25,7 @@
+ #include "eventmanagement.h"
+ #include "eventmanager.h"
+ #include "power_state.h"
++#include "hardwaremanager.h"
+
+ int psm_get_ui_state(struct pp_eventmgr *eventmgr, enum PP_StateUILabel ui_label, unsigned long *state_id);
+
+--
+2.7.4
+