diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2014-09-30 10:27:42 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2015-03-19 12:26:29 -0400 |
commit | d0a04d3b2ee87e9b74d0283f6af577e6d7763703 (patch) | |
tree | c26ebabd78a9e43bacb35a35089b9fb3da76a1ec | |
parent | 3c94566ce17d03c3601e78071f893ce028d5a696 (diff) |
drm/radeon/rv6xx: 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.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_asic.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/rv6xx_dpm.c | 46 |
3 files changed, 50 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c index a73da113e0c1..0e3f7d493c13 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.c +++ b/drivers/gpu/drm/radeon/radeon_asic.c | |||
@@ -1080,6 +1080,8 @@ static struct radeon_asic rv6xx_asic = { | |||
1080 | .print_power_state = &rv6xx_dpm_print_power_state, | 1080 | .print_power_state = &rv6xx_dpm_print_power_state, |
1081 | .debugfs_print_current_performance_level = &rv6xx_dpm_debugfs_print_current_performance_level, | 1081 | .debugfs_print_current_performance_level = &rv6xx_dpm_debugfs_print_current_performance_level, |
1082 | .force_performance_level = &rv6xx_dpm_force_performance_level, | 1082 | .force_performance_level = &rv6xx_dpm_force_performance_level, |
1083 | .get_current_sclk = &rv6xx_dpm_get_current_sclk, | ||
1084 | .get_current_mclk = &rv6xx_dpm_get_current_mclk, | ||
1083 | }, | 1085 | }, |
1084 | .pflip = { | 1086 | .pflip = { |
1085 | .page_flip = &rs600_page_flip, | 1087 | .page_flip = &rs600_page_flip, |
diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h index 47d9901a7e45..7ae66c0b3bea 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.h +++ b/drivers/gpu/drm/radeon/radeon_asic.h | |||
@@ -433,6 +433,8 @@ void rv6xx_dpm_debugfs_print_current_performance_level(struct radeon_device *rde | |||
433 | struct seq_file *m); | 433 | struct seq_file *m); |
434 | int rv6xx_dpm_force_performance_level(struct radeon_device *rdev, | 434 | int rv6xx_dpm_force_performance_level(struct radeon_device *rdev, |
435 | enum radeon_dpm_forced_level level); | 435 | enum radeon_dpm_forced_level level); |
436 | u32 rv6xx_dpm_get_current_sclk(struct radeon_device *rdev); | ||
437 | u32 rv6xx_dpm_get_current_mclk(struct radeon_device *rdev); | ||
436 | /* rs780 dpm */ | 438 | /* rs780 dpm */ |
437 | int rs780_dpm_init(struct radeon_device *rdev); | 439 | int rs780_dpm_init(struct radeon_device *rdev); |
438 | int rs780_dpm_enable(struct radeon_device *rdev); | 440 | int rs780_dpm_enable(struct radeon_device *rdev); |
diff --git a/drivers/gpu/drm/radeon/rv6xx_dpm.c b/drivers/gpu/drm/radeon/rv6xx_dpm.c index 6a5c233361e9..97e5a6f1ce58 100644 --- a/drivers/gpu/drm/radeon/rv6xx_dpm.c +++ b/drivers/gpu/drm/radeon/rv6xx_dpm.c | |||
@@ -2050,6 +2050,52 @@ void rv6xx_dpm_debugfs_print_current_performance_level(struct radeon_device *rde | |||
2050 | } | 2050 | } |
2051 | } | 2051 | } |
2052 | 2052 | ||
2053 | /* get the current sclk in 10 khz units */ | ||
2054 | u32 rv6xx_dpm_get_current_sclk(struct radeon_device *rdev) | ||
2055 | { | ||
2056 | struct radeon_ps *rps = rdev->pm.dpm.current_ps; | ||
2057 | struct rv6xx_ps *ps = rv6xx_get_ps(rps); | ||
2058 | struct rv6xx_pl *pl; | ||
2059 | u32 current_index = | ||
2060 | (RREG32(TARGET_AND_CURRENT_PROFILE_INDEX) & CURRENT_PROFILE_INDEX_MASK) >> | ||
2061 | CURRENT_PROFILE_INDEX_SHIFT; | ||
2062 | |||
2063 | if (current_index > 2) { | ||
2064 | return 0; | ||
2065 | } else { | ||
2066 | if (current_index == 0) | ||
2067 | pl = &ps->low; | ||
2068 | else if (current_index == 1) | ||
2069 | pl = &ps->medium; | ||
2070 | else /* current_index == 2 */ | ||
2071 | pl = &ps->high; | ||
2072 | return pl->sclk; | ||
2073 | } | ||
2074 | } | ||
2075 | |||
2076 | /* get the current mclk in 10 khz units */ | ||
2077 | u32 rv6xx_dpm_get_current_mclk(struct radeon_device *rdev) | ||
2078 | { | ||
2079 | struct radeon_ps *rps = rdev->pm.dpm.current_ps; | ||
2080 | struct rv6xx_ps *ps = rv6xx_get_ps(rps); | ||
2081 | struct rv6xx_pl *pl; | ||
2082 | u32 current_index = | ||
2083 | (RREG32(TARGET_AND_CURRENT_PROFILE_INDEX) & CURRENT_PROFILE_INDEX_MASK) >> | ||
2084 | CURRENT_PROFILE_INDEX_SHIFT; | ||
2085 | |||
2086 | if (current_index > 2) { | ||
2087 | return 0; | ||
2088 | } else { | ||
2089 | if (current_index == 0) | ||
2090 | pl = &ps->low; | ||
2091 | else if (current_index == 1) | ||
2092 | pl = &ps->medium; | ||
2093 | else /* current_index == 2 */ | ||
2094 | pl = &ps->high; | ||
2095 | return pl->mclk; | ||
2096 | } | ||
2097 | } | ||
2098 | |||
2053 | void rv6xx_dpm_fini(struct radeon_device *rdev) | 2099 | void rv6xx_dpm_fini(struct radeon_device *rdev) |
2054 | { | 2100 | { |
2055 | int i; | 2101 | int i; |