Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/radeon/rs780: 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>

+26
+2
drivers/gpu/drm/radeon/radeon_asic.c
··· 1170 1170 .print_power_state = &rs780_dpm_print_power_state, 1171 1171 .debugfs_print_current_performance_level = &rs780_dpm_debugfs_print_current_performance_level, 1172 1172 .force_performance_level = &rs780_dpm_force_performance_level, 1173 + .get_current_sclk = &rs780_dpm_get_current_sclk, 1174 + .get_current_mclk = &rs780_dpm_get_current_mclk, 1173 1175 }, 1174 1176 .pflip = { 1175 1177 .page_flip = &rs600_page_flip,
+2
drivers/gpu/drm/radeon/radeon_asic.h
··· 449 449 struct seq_file *m); 450 450 int rs780_dpm_force_performance_level(struct radeon_device *rdev, 451 451 enum radeon_dpm_forced_level level); 452 + u32 rs780_dpm_get_current_sclk(struct radeon_device *rdev); 453 + u32 rs780_dpm_get_current_mclk(struct radeon_device *rdev); 452 454 453 455 /* 454 456 * rv770,rv730,rv710,rv740
+22
drivers/gpu/drm/radeon/rs780_dpm.c
··· 1001 1001 ps->sclk_high, ps->max_voltage); 1002 1002 } 1003 1003 1004 + /* get the current sclk in 10 khz units */ 1005 + u32 rs780_dpm_get_current_sclk(struct radeon_device *rdev) 1006 + { 1007 + u32 current_fb_div = RREG32(FVTHROT_STATUS_REG0) & CURRENT_FEEDBACK_DIV_MASK; 1008 + u32 func_cntl = RREG32(CG_SPLL_FUNC_CNTL); 1009 + u32 ref_div = ((func_cntl & SPLL_REF_DIV_MASK) >> SPLL_REF_DIV_SHIFT) + 1; 1010 + u32 post_div = ((func_cntl & SPLL_SW_HILEN_MASK) >> SPLL_SW_HILEN_SHIFT) + 1 + 1011 + ((func_cntl & SPLL_SW_LOLEN_MASK) >> SPLL_SW_LOLEN_SHIFT) + 1; 1012 + u32 sclk = (rdev->clock.spll.reference_freq * current_fb_div) / 1013 + (post_div * ref_div); 1014 + 1015 + return sclk; 1016 + } 1017 + 1018 + /* get the current mclk in 10 khz units */ 1019 + u32 rs780_dpm_get_current_mclk(struct radeon_device *rdev) 1020 + { 1021 + struct igp_power_info *pi = rs780_get_pi(rdev); 1022 + 1023 + return pi->bootup_uma_clk; 1024 + } 1025 + 1004 1026 int rs780_dpm_force_performance_level(struct radeon_device *rdev, 1005 1027 enum radeon_dpm_forced_level level) 1006 1028 {