drm/amd/powerplay: fix bug stop dpm can't work on Vi.
Signed-off-by: Rex Zhu <Rex.Zhu@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@ -49,6 +49,7 @@ static const pem_event_action * const uninitialize_event[] = {
|
|||||||
uninitialize_display_phy_access_tasks,
|
uninitialize_display_phy_access_tasks,
|
||||||
disable_gfx_voltage_island_power_gating_tasks,
|
disable_gfx_voltage_island_power_gating_tasks,
|
||||||
disable_gfx_clock_gating_tasks,
|
disable_gfx_clock_gating_tasks,
|
||||||
|
uninitialize_thermal_controller_tasks,
|
||||||
set_boot_state_tasks,
|
set_boot_state_tasks,
|
||||||
adjust_power_state_tasks,
|
adjust_power_state_tasks,
|
||||||
disable_dynamic_state_management_tasks,
|
disable_dynamic_state_management_tasks,
|
||||||
|
@ -1030,20 +1030,19 @@ static int smu7_disable_sclk_mclk_dpm(struct pp_hwmgr *hwmgr)
|
|||||||
struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend);
|
struct smu7_hwmgr *data = (struct smu7_hwmgr *)(hwmgr->backend);
|
||||||
|
|
||||||
/* disable SCLK dpm */
|
/* disable SCLK dpm */
|
||||||
if (!data->sclk_dpm_key_disabled)
|
if (!data->sclk_dpm_key_disabled) {
|
||||||
PP_ASSERT_WITH_CODE(
|
PP_ASSERT_WITH_CODE(true == smum_is_dpm_running(hwmgr),
|
||||||
(smum_send_msg_to_smc(hwmgr->smumgr,
|
"Trying to disable SCLK DPM when DPM is disabled",
|
||||||
PPSMC_MSG_DPM_Disable) == 0),
|
return 0);
|
||||||
"Failed to disable SCLK DPM!",
|
smum_send_msg_to_smc(hwmgr->smumgr, PPSMC_MSG_DPM_Disable);
|
||||||
return -EINVAL);
|
}
|
||||||
|
|
||||||
/* disable MCLK dpm */
|
/* disable MCLK dpm */
|
||||||
if (!data->mclk_dpm_key_disabled) {
|
if (!data->mclk_dpm_key_disabled) {
|
||||||
PP_ASSERT_WITH_CODE(
|
PP_ASSERT_WITH_CODE(true == smum_is_dpm_running(hwmgr),
|
||||||
(smum_send_msg_to_smc(hwmgr->smumgr,
|
"Trying to disable MCLK DPM when DPM is disabled",
|
||||||
PPSMC_MSG_MCLKDPM_Disable) == 0),
|
return 0);
|
||||||
"Failed to disable MCLK DPM!",
|
smum_send_msg_to_smc(hwmgr->smumgr, PPSMC_MSG_MCLKDPM_Disable);
|
||||||
return -EINVAL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -1069,10 +1068,13 @@ static int smu7_stop_dpm(struct pp_hwmgr *hwmgr)
|
|||||||
return -EINVAL);
|
return -EINVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (smu7_disable_sclk_mclk_dpm(hwmgr)) {
|
smu7_disable_sclk_mclk_dpm(hwmgr);
|
||||||
printk(KERN_ERR "Failed to disable Sclk DPM and Mclk DPM!");
|
|
||||||
return -EINVAL;
|
PP_ASSERT_WITH_CODE(true == smum_is_dpm_running(hwmgr),
|
||||||
}
|
"Trying to disable voltage DPM when DPM is disabled",
|
||||||
|
return 0);
|
||||||
|
|
||||||
|
smum_send_msg_to_smc(hwmgr->smumgr, PPSMC_MSG_Voltage_Cntl_Disable);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1306,6 +1308,12 @@ int smu7_disable_dpm_tasks(struct pp_hwmgr *hwmgr)
|
|||||||
PP_ASSERT_WITH_CODE((tmp_result == 0),
|
PP_ASSERT_WITH_CODE((tmp_result == 0),
|
||||||
"Failed to disable thermal auto throttle!", result = tmp_result);
|
"Failed to disable thermal auto throttle!", result = tmp_result);
|
||||||
|
|
||||||
|
if (1 == PHM_READ_VFPF_INDIRECT_FIELD(hwmgr->device, CGS_IND_REG__SMC, FEATURE_STATUS, AVS_ON)) {
|
||||||
|
PP_ASSERT_WITH_CODE((0 == smum_send_msg_to_smc(hwmgr->smumgr, PPSMC_MSG_DisableAvfs)),
|
||||||
|
"Failed to disable AVFS!",
|
||||||
|
return -EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
tmp_result = smu7_stop_dpm(hwmgr);
|
tmp_result = smu7_stop_dpm(hwmgr);
|
||||||
PP_ASSERT_WITH_CODE((tmp_result == 0),
|
PP_ASSERT_WITH_CODE((tmp_result == 0),
|
||||||
"Failed to stop DPM!", result = tmp_result);
|
"Failed to stop DPM!", result = tmp_result);
|
||||||
@ -4328,6 +4336,7 @@ static const struct pp_hwmgr_func smu7_hwmgr_funcs = {
|
|||||||
.set_mclk_od = smu7_set_mclk_od,
|
.set_mclk_od = smu7_set_mclk_od,
|
||||||
.get_clock_by_type = smu7_get_clock_by_type,
|
.get_clock_by_type = smu7_get_clock_by_type,
|
||||||
.read_sensor = smu7_read_sensor,
|
.read_sensor = smu7_read_sensor,
|
||||||
|
.dynamic_state_management_disable = smu7_disable_dpm_tasks,
|
||||||
};
|
};
|
||||||
|
|
||||||
uint8_t smu7_get_sleep_divider_id_from_clock(uint32_t clock,
|
uint8_t smu7_get_sleep_divider_id_from_clock(uint32_t clock,
|
||||||
|
Reference in New Issue
Block a user