Commit c6cf7777 authored by Alex Deucher's avatar Alex Deucher

drm/radeon: set default clocks for SI when DPM is disabled

Fix patching of vddc values for SI and enable manually forcing
clocks to default levels as per NI.

This improves the out of the box performance with SI asics.
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 338a95a9
...@@ -1504,8 +1504,8 @@ void evergreen_pm_misc(struct radeon_device *rdev) ...@@ -1504,8 +1504,8 @@ void evergreen_pm_misc(struct radeon_device *rdev)
struct radeon_voltage *voltage = &ps->clock_info[req_cm_idx].voltage; struct radeon_voltage *voltage = &ps->clock_info[req_cm_idx].voltage;
if (voltage->type == VOLTAGE_SW) { if (voltage->type == VOLTAGE_SW) {
/* 0xff01 is a flag rather then an actual voltage */ /* 0xff0x are flags rather then an actual voltage */
if (voltage->voltage == 0xff01) if ((voltage->voltage & 0xff00) == 0xff00)
return; return;
if (voltage->voltage && (voltage->voltage != rdev->pm.current_vddc)) { if (voltage->voltage && (voltage->voltage != rdev->pm.current_vddc)) {
radeon_atom_set_voltage(rdev, voltage->voltage, SET_VOLTAGE_TYPE_ASIC_VDDC); radeon_atom_set_voltage(rdev, voltage->voltage, SET_VOLTAGE_TYPE_ASIC_VDDC);
...@@ -1525,8 +1525,8 @@ void evergreen_pm_misc(struct radeon_device *rdev) ...@@ -1525,8 +1525,8 @@ void evergreen_pm_misc(struct radeon_device *rdev)
voltage = &rdev->pm.power_state[req_ps_idx]. voltage = &rdev->pm.power_state[req_ps_idx].
clock_info[rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_cm_idx].voltage; clock_info[rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_cm_idx].voltage;
/* 0xff01 is a flag rather then an actual voltage */ /* 0xff0x are flags rather then an actual voltage */
if (voltage->vddci == 0xff01) if ((voltage->vddci & 0xff00) == 0xff00)
return; return;
if (voltage->vddci && (voltage->vddci != rdev->pm.current_vddci)) { if (voltage->vddci && (voltage->vddci != rdev->pm.current_vddci)) {
radeon_atom_set_voltage(rdev, voltage->vddci, SET_VOLTAGE_TYPE_ASIC_VDDCI); radeon_atom_set_voltage(rdev, voltage->vddci, SET_VOLTAGE_TYPE_ASIC_VDDCI);
......
...@@ -2441,6 +2441,10 @@ static bool radeon_atombios_parse_pplib_clock_info(struct radeon_device *rdev, ...@@ -2441,6 +2441,10 @@ static bool radeon_atombios_parse_pplib_clock_info(struct radeon_device *rdev,
case ATOM_VIRTUAL_VOLTAGE_ID1: case ATOM_VIRTUAL_VOLTAGE_ID1:
case ATOM_VIRTUAL_VOLTAGE_ID2: case ATOM_VIRTUAL_VOLTAGE_ID2:
case ATOM_VIRTUAL_VOLTAGE_ID3: case ATOM_VIRTUAL_VOLTAGE_ID3:
case ATOM_VIRTUAL_VOLTAGE_ID4:
case ATOM_VIRTUAL_VOLTAGE_ID5:
case ATOM_VIRTUAL_VOLTAGE_ID6:
case ATOM_VIRTUAL_VOLTAGE_ID7:
if (radeon_atom_get_max_vddc(rdev, VOLTAGE_TYPE_VDDC, if (radeon_atom_get_max_vddc(rdev, VOLTAGE_TYPE_VDDC,
rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage, rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage,
&vddc) == 0) &vddc) == 0)
......
...@@ -852,7 +852,7 @@ static void radeon_pm_resume_old(struct radeon_device *rdev) ...@@ -852,7 +852,7 @@ static void radeon_pm_resume_old(struct radeon_device *rdev)
{ {
/* set up the default clocks if the MC ucode is loaded */ /* set up the default clocks if the MC ucode is loaded */
if ((rdev->family >= CHIP_BARTS) && if ((rdev->family >= CHIP_BARTS) &&
(rdev->family <= CHIP_CAYMAN) && (rdev->family <= CHIP_HAINAN) &&
rdev->mc_fw) { rdev->mc_fw) {
if (rdev->pm.default_vddc) if (rdev->pm.default_vddc)
radeon_atom_set_voltage(rdev, rdev->pm.default_vddc, radeon_atom_set_voltage(rdev, rdev->pm.default_vddc,
...@@ -896,7 +896,7 @@ static void radeon_pm_resume_dpm(struct radeon_device *rdev) ...@@ -896,7 +896,7 @@ static void radeon_pm_resume_dpm(struct radeon_device *rdev)
if (ret) { if (ret) {
DRM_ERROR("radeon: dpm resume failed\n"); DRM_ERROR("radeon: dpm resume failed\n");
if ((rdev->family >= CHIP_BARTS) && if ((rdev->family >= CHIP_BARTS) &&
(rdev->family <= CHIP_CAYMAN) && (rdev->family <= CHIP_HAINAN) &&
rdev->mc_fw) { rdev->mc_fw) {
if (rdev->pm.default_vddc) if (rdev->pm.default_vddc)
radeon_atom_set_voltage(rdev, rdev->pm.default_vddc, radeon_atom_set_voltage(rdev, rdev->pm.default_vddc,
...@@ -947,7 +947,7 @@ static int radeon_pm_init_old(struct radeon_device *rdev) ...@@ -947,7 +947,7 @@ static int radeon_pm_init_old(struct radeon_device *rdev)
radeon_pm_init_profile(rdev); radeon_pm_init_profile(rdev);
/* set up the default clocks if the MC ucode is loaded */ /* set up the default clocks if the MC ucode is loaded */
if ((rdev->family >= CHIP_BARTS) && if ((rdev->family >= CHIP_BARTS) &&
(rdev->family <= CHIP_CAYMAN) && (rdev->family <= CHIP_HAINAN) &&
rdev->mc_fw) { rdev->mc_fw) {
if (rdev->pm.default_vddc) if (rdev->pm.default_vddc)
radeon_atom_set_voltage(rdev, rdev->pm.default_vddc, radeon_atom_set_voltage(rdev, rdev->pm.default_vddc,
...@@ -1032,7 +1032,7 @@ static int radeon_pm_init_dpm(struct radeon_device *rdev) ...@@ -1032,7 +1032,7 @@ static int radeon_pm_init_dpm(struct radeon_device *rdev)
if (ret) { if (ret) {
rdev->pm.dpm_enabled = false; rdev->pm.dpm_enabled = false;
if ((rdev->family >= CHIP_BARTS) && if ((rdev->family >= CHIP_BARTS) &&
(rdev->family <= CHIP_CAYMAN) && (rdev->family <= CHIP_HAINAN) &&
rdev->mc_fw) { rdev->mc_fw) {
if (rdev->pm.default_vddc) if (rdev->pm.default_vddc)
radeon_atom_set_voltage(rdev, rdev->pm.default_vddc, radeon_atom_set_voltage(rdev, rdev->pm.default_vddc,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment