drm/amd/pm: reconfigure smc on display vbitimeout setting change
authorEvan Quan <evan.quan@amd.com>
Tue, 29 Sep 2020 08:47:41 +0000 (16:47 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 27 Oct 2020 16:00:47 +0000 (12:00 -0400)
Reconfigure smc display settings on vbitimeout change.

Signed-off-by: Evan Quan <evan.quan@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.h

index 509136e..d6c903e 100644 (file)
@@ -4318,6 +4318,7 @@ static int smu7_notify_has_display(struct pp_hwmgr *hwmgr)
                        smum_send_msg_to_smc_with_parameter(hwmgr,
                                        (PPSMC_Msg)PPSMC_MSG_SetVBITimeout, data->frame_time_x2,
                                        NULL);
+               data->last_sent_vbi_timeout = data->frame_time_x2;
        }
 
        return (smum_send_msg_to_smc(hwmgr, (PPSMC_Msg)PPSMC_HasDisplay, NULL) == 0) ?  0 : -EINVAL;
@@ -4560,6 +4561,11 @@ smu7_check_smc_update_required_for_display_configuration(struct pp_hwmgr *hwmgr)
        if (data->display_timing.vrefresh != hwmgr->display_config->vrefresh)
                is_update_required = true;
 
+       if (hwmgr->chip_id >= CHIP_POLARIS10 &&
+           hwmgr->chip_id <= CHIP_VEGAM &&
+           data->last_sent_vbi_timeout != data->frame_time_x2)
+               is_update_required = true;
+
        if (phm_cap_enabled(hwmgr->platform_descriptor.platformCaps, PHM_PlatformCaps_SclkDeepSleep)) {
                if (data->display_timing.min_clock_in_sr != hwmgr->display_config->min_core_set_clock_in_sr &&
                        (data->display_timing.min_clock_in_sr >= SMU7_MINIMUM_ENGINE_CLOCK ||
index dbcba73..d9e8b38 100644 (file)
@@ -336,6 +336,7 @@ struct smu7_hwmgr {
        uint32_t                              avfs_vdroop_override_setting;
        bool                                  apply_avfs_cks_off_voltage;
        uint32_t                              frame_time_x2;
+       uint32_t                              last_sent_vbi_timeout;
        uint16_t                              mem_latency_high;
        uint16_t                              mem_latency_low;
        uint32_t                              vr_config;