aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2014-09-30 11:01:59 -0400
committerAlex Deucher <alexander.deucher@amd.com>2015-03-19 12:26:35 -0400
commit7ce9cdaec35db4c13f2f34dcb63d8bf6f290ffd0 (patch)
tree74bcb2666075924a1a9d4168d0697685590cde9a
parent2f8e1eb7d665ca060fc93e9dfd268dee59bd8697 (diff)
drm/radeon/tn: 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>
-rw-r--r--drivers/gpu/drm/radeon/radeon_asic.c2
-rw-r--r--drivers/gpu/drm/radeon/radeon_asic.h2
-rw-r--r--drivers/gpu/drm/radeon/trinity_dpm.c25
3 files changed, 29 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c
index 2b72c4a77be6..ce0cbd5823e9 100644
--- a/drivers/gpu/drm/radeon/radeon_asic.c
+++ b/drivers/gpu/drm/radeon/radeon_asic.c
@@ -1833,6 +1833,8 @@ static struct radeon_asic trinity_asic = {
1833 .debugfs_print_current_performance_level = &trinity_dpm_debugfs_print_current_performance_level, 1833 .debugfs_print_current_performance_level = &trinity_dpm_debugfs_print_current_performance_level,
1834 .force_performance_level = &trinity_dpm_force_performance_level, 1834 .force_performance_level = &trinity_dpm_force_performance_level,
1835 .enable_bapm = &trinity_dpm_enable_bapm, 1835 .enable_bapm = &trinity_dpm_enable_bapm,
1836 .get_current_sclk = &trinity_dpm_get_current_sclk,
1837 .get_current_mclk = &trinity_dpm_get_current_mclk,
1836 }, 1838 },
1837 .pflip = { 1839 .pflip = {
1838 .page_flip = &evergreen_page_flip, 1840 .page_flip = &evergreen_page_flip,
diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h
index e2887eb4a4d5..bab229377264 100644
--- a/drivers/gpu/drm/radeon/radeon_asic.h
+++ b/drivers/gpu/drm/radeon/radeon_asic.h
@@ -686,6 +686,8 @@ void trinity_dpm_debugfs_print_current_performance_level(struct radeon_device *r
686int trinity_dpm_force_performance_level(struct radeon_device *rdev, 686int trinity_dpm_force_performance_level(struct radeon_device *rdev,
687 enum radeon_dpm_forced_level level); 687 enum radeon_dpm_forced_level level);
688void trinity_dpm_enable_bapm(struct radeon_device *rdev, bool enable); 688void trinity_dpm_enable_bapm(struct radeon_device *rdev, bool enable);
689u32 trinity_dpm_get_current_sclk(struct radeon_device *rdev);
690u32 trinity_dpm_get_current_mclk(struct radeon_device *rdev);
689 691
690/* DCE6 - SI */ 692/* DCE6 - SI */
691void dce6_bandwidth_update(struct radeon_device *rdev); 693void dce6_bandwidth_update(struct radeon_device *rdev);
diff --git a/drivers/gpu/drm/radeon/trinity_dpm.c b/drivers/gpu/drm/radeon/trinity_dpm.c
index 38dacb7a3689..a5b02c575d77 100644
--- a/drivers/gpu/drm/radeon/trinity_dpm.c
+++ b/drivers/gpu/drm/radeon/trinity_dpm.c
@@ -1964,6 +1964,31 @@ void trinity_dpm_debugfs_print_current_performance_level(struct radeon_device *r
1964 } 1964 }
1965} 1965}
1966 1966
1967u32 trinity_dpm_get_current_sclk(struct radeon_device *rdev)
1968{
1969 struct trinity_power_info *pi = trinity_get_pi(rdev);
1970 struct radeon_ps *rps = &pi->current_rps;
1971 struct trinity_ps *ps = trinity_get_ps(rps);
1972 struct trinity_pl *pl;
1973 u32 current_index =
1974 (RREG32(TARGET_AND_CURRENT_PROFILE_INDEX) & CURRENT_STATE_MASK) >>
1975 CURRENT_STATE_SHIFT;
1976
1977 if (current_index >= ps->num_levels) {
1978 return 0;
1979 } else {
1980 pl = &ps->levels[current_index];
1981 return pl->sclk;
1982 }
1983}
1984
1985u32 trinity_dpm_get_current_mclk(struct radeon_device *rdev)
1986{
1987 struct trinity_power_info *pi = trinity_get_pi(rdev);
1988
1989 return pi->sys_info.bootup_uma_clk;
1990}
1991
1967void trinity_dpm_fini(struct radeon_device *rdev) 1992void trinity_dpm_fini(struct radeon_device *rdev)
1968{ 1993{
1969 int i; 1994 int i;