Commit 7d032a4b authored by Samuel Li's avatar Samuel Li Committed by Christian König

drm/radeon: add Mullins dpm support.

Generic dpm support similar to Kabini. Mullins specific features
will be worked on later.
Signed-off-by: default avatarSamuel Li <samuel.li@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
parent 3f6f0737
...@@ -639,7 +639,7 @@ static int kv_force_lowest_valid(struct radeon_device *rdev) ...@@ -639,7 +639,7 @@ static int kv_force_lowest_valid(struct radeon_device *rdev)
static int kv_unforce_levels(struct radeon_device *rdev) static int kv_unforce_levels(struct radeon_device *rdev)
{ {
if (rdev->family == CHIP_KABINI) if (rdev->family == CHIP_KABINI || rdev->family == CHIP_MULLINS)
return kv_notify_message_to_smu(rdev, PPSMC_MSG_NoForcedLevel); return kv_notify_message_to_smu(rdev, PPSMC_MSG_NoForcedLevel);
else else
return kv_set_enabled_levels(rdev); return kv_set_enabled_levels(rdev);
...@@ -1617,7 +1617,7 @@ static void kv_dpm_powergate_acp(struct radeon_device *rdev, bool gate) ...@@ -1617,7 +1617,7 @@ static void kv_dpm_powergate_acp(struct radeon_device *rdev, bool gate)
if (pi->acp_power_gated == gate) if (pi->acp_power_gated == gate)
return; return;
if (rdev->family == CHIP_KABINI) if (rdev->family == CHIP_KABINI || rdev->family == CHIP_MULLINS)
return; return;
pi->acp_power_gated = gate; pi->acp_power_gated = gate;
...@@ -1786,7 +1786,7 @@ int kv_dpm_set_power_state(struct radeon_device *rdev) ...@@ -1786,7 +1786,7 @@ int kv_dpm_set_power_state(struct radeon_device *rdev)
} }
} }
if (rdev->family == CHIP_KABINI) { if (rdev->family == CHIP_KABINI || rdev->family == CHIP_MULLINS) {
if (pi->enable_dpm) { if (pi->enable_dpm) {
kv_set_valid_clock_range(rdev, new_ps); kv_set_valid_clock_range(rdev, new_ps);
kv_update_dfs_bypass_settings(rdev, new_ps); kv_update_dfs_bypass_settings(rdev, new_ps);
...@@ -1862,7 +1862,7 @@ void kv_dpm_reset_asic(struct radeon_device *rdev) ...@@ -1862,7 +1862,7 @@ void kv_dpm_reset_asic(struct radeon_device *rdev)
{ {
struct kv_power_info *pi = kv_get_pi(rdev); struct kv_power_info *pi = kv_get_pi(rdev);
if (rdev->family == CHIP_KABINI) { if (rdev->family == CHIP_KABINI || rdev->family == CHIP_MULLINS) {
kv_force_lowest_valid(rdev); kv_force_lowest_valid(rdev);
kv_init_graphics_levels(rdev); kv_init_graphics_levels(rdev);
kv_program_bootup_state(rdev); kv_program_bootup_state(rdev);
...@@ -1941,7 +1941,7 @@ static int kv_force_dpm_highest(struct radeon_device *rdev) ...@@ -1941,7 +1941,7 @@ static int kv_force_dpm_highest(struct radeon_device *rdev)
break; break;
} }
if (rdev->family == CHIP_KABINI) if (rdev->family == CHIP_KABINI || rdev->family == CHIP_MULLINS)
return kv_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_DPM_ForceState, i); return kv_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_DPM_ForceState, i);
else else
return kv_set_enabled_level(rdev, i); return kv_set_enabled_level(rdev, i);
...@@ -1961,7 +1961,7 @@ static int kv_force_dpm_lowest(struct radeon_device *rdev) ...@@ -1961,7 +1961,7 @@ static int kv_force_dpm_lowest(struct radeon_device *rdev)
break; break;
} }
if (rdev->family == CHIP_KABINI) if (rdev->family == CHIP_KABINI || rdev->family == CHIP_MULLINS)
return kv_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_DPM_ForceState, i); return kv_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_DPM_ForceState, i);
else else
return kv_set_enabled_level(rdev, i); return kv_set_enabled_level(rdev, i);
...@@ -2118,7 +2118,7 @@ static void kv_apply_state_adjust_rules(struct radeon_device *rdev, ...@@ -2118,7 +2118,7 @@ static void kv_apply_state_adjust_rules(struct radeon_device *rdev,
else else
pi->battery_state = false; pi->battery_state = false;
if (rdev->family == CHIP_KABINI) { if (rdev->family == CHIP_KABINI || rdev->family == CHIP_MULLINS) {
ps->dpm0_pg_nb_ps_lo = 0x1; ps->dpm0_pg_nb_ps_lo = 0x1;
ps->dpm0_pg_nb_ps_hi = 0x0; ps->dpm0_pg_nb_ps_hi = 0x0;
ps->dpmx_nb_ps_lo = 0x1; ps->dpmx_nb_ps_lo = 0x1;
...@@ -2179,7 +2179,7 @@ static int kv_calculate_nbps_level_settings(struct radeon_device *rdev) ...@@ -2179,7 +2179,7 @@ static int kv_calculate_nbps_level_settings(struct radeon_device *rdev)
if (pi->lowest_valid > pi->highest_valid) if (pi->lowest_valid > pi->highest_valid)
return -EINVAL; return -EINVAL;
if (rdev->family == CHIP_KABINI) { if (rdev->family == CHIP_KABINI || rdev->family == CHIP_MULLINS) {
for (i = pi->lowest_valid; i <= pi->highest_valid; i++) { for (i = pi->lowest_valid; i <= pi->highest_valid; i++) {
pi->graphics_level[i].GnbSlow = 1; pi->graphics_level[i].GnbSlow = 1;
pi->graphics_level[i].ForceNbPs1 = 0; pi->graphics_level[i].ForceNbPs1 = 0;
...@@ -2324,7 +2324,7 @@ static void kv_program_nbps_index_settings(struct radeon_device *rdev, ...@@ -2324,7 +2324,7 @@ static void kv_program_nbps_index_settings(struct radeon_device *rdev,
struct kv_power_info *pi = kv_get_pi(rdev); struct kv_power_info *pi = kv_get_pi(rdev);
u32 nbdpmconfig1; u32 nbdpmconfig1;
if (rdev->family == CHIP_KABINI) if (rdev->family == CHIP_KABINI || rdev->family == CHIP_MULLINS)
return; return;
if (pi->sys_info.nb_dpm_enable) { if (pi->sys_info.nb_dpm_enable) {
...@@ -2631,7 +2631,7 @@ int kv_dpm_init(struct radeon_device *rdev) ...@@ -2631,7 +2631,7 @@ int kv_dpm_init(struct radeon_device *rdev)
pi->sram_end = SMC_RAM_END; pi->sram_end = SMC_RAM_END;
if (rdev->family == CHIP_KABINI) if (rdev->family == CHIP_KABINI || rdev->family == CHIP_MULLINS)
pi->high_voltage_t = 4001; pi->high_voltage_t = 4001;
pi->enable_nb_dpm = true; pi->enable_nb_dpm = true;
......
...@@ -1300,6 +1300,7 @@ int radeon_pm_init(struct radeon_device *rdev) ...@@ -1300,6 +1300,7 @@ int radeon_pm_init(struct radeon_device *rdev)
case CHIP_KABINI: case CHIP_KABINI:
case CHIP_KAVERI: case CHIP_KAVERI:
case CHIP_HAWAII: case CHIP_HAWAII:
case CHIP_MULLINS:
/* DPM requires the RLC, RV770+ dGPU requires SMC */ /* DPM requires the RLC, RV770+ dGPU requires SMC */
if (!rdev->rlc_fw) if (!rdev->rlc_fw)
rdev->pm.pm_method = PM_METHOD_PROFILE; rdev->pm.pm_method = PM_METHOD_PROFILE;
......
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