diff options
author | Eric Huang <JinHuiEric.Huang@amd.com> | 2016-05-19 15:54:35 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-07-07 14:50:49 -0400 |
commit | 3cc259112d3cd2da9c1f7418582ebd60f2407d13 (patch) | |
tree | 16d3221bc34b2a13f741476e8dd9d0d63f554dcb | |
parent | 19fbc43a863f743d30c49cd18e91b40b96f43964 (diff) |
drm/amdgpu: add the CI code to enable sclk OD(OverDrive)
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Eric Huang <JinHuiEric.Huang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/ci_dpm.c | 40 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/ci_dpm.h | 1 |
2 files changed, 41 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c index 1e9b8ce62925..9b9be6bae616 100644 --- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.c +++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.c | |||
@@ -3638,6 +3638,10 @@ static int ci_setup_default_dpm_tables(struct amdgpu_device *adev) | |||
3638 | 3638 | ||
3639 | ci_setup_default_pcie_tables(adev); | 3639 | ci_setup_default_pcie_tables(adev); |
3640 | 3640 | ||
3641 | /* save a copy of the default DPM table */ | ||
3642 | memcpy(&(pi->golden_dpm_table), &(pi->dpm_table), | ||
3643 | sizeof(struct ci_dpm_table)); | ||
3644 | |||
3641 | return 0; | 3645 | return 0; |
3642 | } | 3646 | } |
3643 | 3647 | ||
@@ -6526,6 +6530,40 @@ static int ci_dpm_force_clock_level(struct amdgpu_device *adev, | |||
6526 | return 0; | 6530 | return 0; |
6527 | } | 6531 | } |
6528 | 6532 | ||
6533 | static int ci_dpm_get_sclk_od(struct amdgpu_device *adev) | ||
6534 | { | ||
6535 | struct ci_power_info *pi = ci_get_pi(adev); | ||
6536 | struct ci_single_dpm_table *sclk_table = &(pi->dpm_table.sclk_table); | ||
6537 | struct ci_single_dpm_table *golden_sclk_table = | ||
6538 | &(pi->golden_dpm_table.sclk_table); | ||
6539 | int value; | ||
6540 | |||
6541 | value = (sclk_table->dpm_levels[sclk_table->count - 1].value - | ||
6542 | golden_sclk_table->dpm_levels[golden_sclk_table->count - 1].value) * | ||
6543 | 100 / | ||
6544 | golden_sclk_table->dpm_levels[golden_sclk_table->count - 1].value; | ||
6545 | |||
6546 | return value; | ||
6547 | } | ||
6548 | |||
6549 | static int ci_dpm_set_sclk_od(struct amdgpu_device *adev, uint32_t value) | ||
6550 | { | ||
6551 | struct ci_power_info *pi = ci_get_pi(adev); | ||
6552 | struct ci_ps *ps = ci_get_ps(adev->pm.dpm.requested_ps); | ||
6553 | struct ci_single_dpm_table *golden_sclk_table = | ||
6554 | &(pi->golden_dpm_table.sclk_table); | ||
6555 | |||
6556 | if (value > 20) | ||
6557 | value = 20; | ||
6558 | |||
6559 | ps->performance_levels[ps->performance_level_count - 1].sclk = | ||
6560 | golden_sclk_table->dpm_levels[golden_sclk_table->count - 1].value * | ||
6561 | value / 100 + | ||
6562 | golden_sclk_table->dpm_levels[golden_sclk_table->count - 1].value; | ||
6563 | |||
6564 | return 0; | ||
6565 | } | ||
6566 | |||
6529 | const struct amd_ip_funcs ci_dpm_ip_funcs = { | 6567 | const struct amd_ip_funcs ci_dpm_ip_funcs = { |
6530 | .name = "ci_dpm", | 6568 | .name = "ci_dpm", |
6531 | .early_init = ci_dpm_early_init, | 6569 | .early_init = ci_dpm_early_init, |
@@ -6562,6 +6600,8 @@ static const struct amdgpu_dpm_funcs ci_dpm_funcs = { | |||
6562 | .get_fan_speed_percent = &ci_dpm_get_fan_speed_percent, | 6600 | .get_fan_speed_percent = &ci_dpm_get_fan_speed_percent, |
6563 | .print_clock_levels = ci_dpm_print_clock_levels, | 6601 | .print_clock_levels = ci_dpm_print_clock_levels, |
6564 | .force_clock_level = ci_dpm_force_clock_level, | 6602 | .force_clock_level = ci_dpm_force_clock_level, |
6603 | .get_sclk_od = ci_dpm_get_sclk_od, | ||
6604 | .set_sclk_od = ci_dpm_set_sclk_od, | ||
6565 | }; | 6605 | }; |
6566 | 6606 | ||
6567 | static void ci_dpm_set_dpm_funcs(struct amdgpu_device *adev) | 6607 | static void ci_dpm_set_dpm_funcs(struct amdgpu_device *adev) |
diff --git a/drivers/gpu/drm/amd/amdgpu/ci_dpm.h b/drivers/gpu/drm/amd/amdgpu/ci_dpm.h index faccc30c93bf..91be2996ae7c 100644 --- a/drivers/gpu/drm/amd/amdgpu/ci_dpm.h +++ b/drivers/gpu/drm/amd/amdgpu/ci_dpm.h | |||
@@ -193,6 +193,7 @@ struct ci_pt_defaults { | |||
193 | 193 | ||
194 | struct ci_power_info { | 194 | struct ci_power_info { |
195 | struct ci_dpm_table dpm_table; | 195 | struct ci_dpm_table dpm_table; |
196 | struct ci_dpm_table golden_dpm_table; | ||
196 | u32 voltage_control; | 197 | u32 voltage_control; |
197 | u32 mvdd_control; | 198 | u32 mvdd_control; |
198 | u32 vddci_control; | 199 | u32 vddci_control; |