diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2014-09-30 11:21:23 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2015-03-19 12:26:36 -0400 |
commit | 9b23bad03263c5496bac2cbb2c2630cb3b8b38be (patch) | |
tree | 72fb80e60891350eba25817a06c3c9bd66d067c7 /drivers/gpu/drm | |
parent | 7ce9cdaec35db4c13f2f34dcb63d8bf6f290ffd0 (diff) |
drm/radeon/kv: implement get_current_sclk/mclk
Will be used for exposing current clocks via INFO ioctl.
Tested-by: Marek Olšák <marek.olsak@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r-- | drivers/gpu/drm/radeon/kv_dpm.c | 23 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_asic.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_asic.h | 2 |
3 files changed, 27 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/kv_dpm.c b/drivers/gpu/drm/radeon/kv_dpm.c index 0e236d067d66..2d71da448487 100644 --- a/drivers/gpu/drm/radeon/kv_dpm.c +++ b/drivers/gpu/drm/radeon/kv_dpm.c | |||
@@ -2820,6 +2820,29 @@ void kv_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev, | |||
2820 | } | 2820 | } |
2821 | } | 2821 | } |
2822 | 2822 | ||
2823 | u32 kv_dpm_get_current_sclk(struct radeon_device *rdev) | ||
2824 | { | ||
2825 | struct kv_power_info *pi = kv_get_pi(rdev); | ||
2826 | u32 current_index = | ||
2827 | (RREG32_SMC(TARGET_AND_CURRENT_PROFILE_INDEX) & CURR_SCLK_INDEX_MASK) >> | ||
2828 | CURR_SCLK_INDEX_SHIFT; | ||
2829 | u32 sclk; | ||
2830 | |||
2831 | if (current_index >= SMU__NUM_SCLK_DPM_STATE) { | ||
2832 | return 0; | ||
2833 | } else { | ||
2834 | sclk = be32_to_cpu(pi->graphics_level[current_index].SclkFrequency); | ||
2835 | return sclk; | ||
2836 | } | ||
2837 | } | ||
2838 | |||
2839 | u32 kv_dpm_get_current_mclk(struct radeon_device *rdev) | ||
2840 | { | ||
2841 | struct kv_power_info *pi = kv_get_pi(rdev); | ||
2842 | |||
2843 | return pi->sys_info.bootup_uma_clk; | ||
2844 | } | ||
2845 | |||
2823 | void kv_dpm_print_power_state(struct radeon_device *rdev, | 2846 | void kv_dpm_print_power_state(struct radeon_device *rdev, |
2824 | struct radeon_ps *rps) | 2847 | struct radeon_ps *rps) |
2825 | { | 2848 | { |
diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c index ce0cbd5823e9..466a7715e286 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.c +++ b/drivers/gpu/drm/radeon/radeon_asic.c | |||
@@ -2249,6 +2249,8 @@ static struct radeon_asic kv_asic = { | |||
2249 | .force_performance_level = &kv_dpm_force_performance_level, | 2249 | .force_performance_level = &kv_dpm_force_performance_level, |
2250 | .powergate_uvd = &kv_dpm_powergate_uvd, | 2250 | .powergate_uvd = &kv_dpm_powergate_uvd, |
2251 | .enable_bapm = &kv_dpm_enable_bapm, | 2251 | .enable_bapm = &kv_dpm_enable_bapm, |
2252 | .get_current_sclk = &kv_dpm_get_current_sclk, | ||
2253 | .get_current_mclk = &kv_dpm_get_current_mclk, | ||
2252 | }, | 2254 | }, |
2253 | .pflip = { | 2255 | .pflip = { |
2254 | .page_flip = &evergreen_page_flip, | 2256 | .page_flip = &evergreen_page_flip, |
diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h index bab229377264..4259daf94d91 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.h +++ b/drivers/gpu/drm/radeon/radeon_asic.h | |||
@@ -908,6 +908,8 @@ int kv_dpm_force_performance_level(struct radeon_device *rdev, | |||
908 | enum radeon_dpm_forced_level level); | 908 | enum radeon_dpm_forced_level level); |
909 | void kv_dpm_powergate_uvd(struct radeon_device *rdev, bool gate); | 909 | void kv_dpm_powergate_uvd(struct radeon_device *rdev, bool gate); |
910 | void kv_dpm_enable_bapm(struct radeon_device *rdev, bool enable); | 910 | void kv_dpm_enable_bapm(struct radeon_device *rdev, bool enable); |
911 | u32 kv_dpm_get_current_sclk(struct radeon_device *rdev); | ||
912 | u32 kv_dpm_get_current_mclk(struct radeon_device *rdev); | ||
911 | 913 | ||
912 | /* uvd v1.0 */ | 914 | /* uvd v1.0 */ |
913 | uint32_t uvd_v1_0_get_rptr(struct radeon_device *rdev, | 915 | uint32_t uvd_v1_0_get_rptr(struct radeon_device *rdev, |