diff --git a/drivers/gpu/drm/amd/powerplay/eventmgr/psm.c b/drivers/gpu/drm/amd/powerplay/eventmgr/psm.c index 08b75bd70c0f6a9464c54c34a15a7fe7439cf43f..82774ace8bdbccba45ddbcad7b06dd8869734974 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 15abfac720ee23cf946264d6c705eff78de3f785..1380470fdb1cd4f73b56cfc25f5c15db38619944 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);