diff options
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_asic.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_asic.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/rs780_dpm.c | 25 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/rs780d.h | 3 |
4 files changed, 31 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c index fea997e247ba..78bec1a58ed1 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.c +++ b/drivers/gpu/drm/radeon/radeon_asic.c | |||
@@ -1270,6 +1270,7 @@ static struct radeon_asic rs780_asic = { | |||
1270 | .get_sclk = &rs780_dpm_get_sclk, | 1270 | .get_sclk = &rs780_dpm_get_sclk, |
1271 | .get_mclk = &rs780_dpm_get_mclk, | 1271 | .get_mclk = &rs780_dpm_get_mclk, |
1272 | .print_power_state = &rs780_dpm_print_power_state, | 1272 | .print_power_state = &rs780_dpm_print_power_state, |
1273 | .debugfs_print_current_performance_level = &rs780_dpm_debugfs_print_current_performance_level, | ||
1273 | }, | 1274 | }, |
1274 | .pflip = { | 1275 | .pflip = { |
1275 | .pre_page_flip = &rs600_pre_page_flip, | 1276 | .pre_page_flip = &rs600_pre_page_flip, |
diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h index b04b5789f4a8..ca1895709908 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.h +++ b/drivers/gpu/drm/radeon/radeon_asic.h | |||
@@ -433,6 +433,8 @@ u32 rs780_dpm_get_sclk(struct radeon_device *rdev, bool low); | |||
433 | u32 rs780_dpm_get_mclk(struct radeon_device *rdev, bool low); | 433 | u32 rs780_dpm_get_mclk(struct radeon_device *rdev, bool low); |
434 | void rs780_dpm_print_power_state(struct radeon_device *rdev, | 434 | void rs780_dpm_print_power_state(struct radeon_device *rdev, |
435 | struct radeon_ps *ps); | 435 | struct radeon_ps *ps); |
436 | void rs780_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev, | ||
437 | struct seq_file *m); | ||
436 | 438 | ||
437 | /* uvd */ | 439 | /* uvd */ |
438 | int r600_uvd_init(struct radeon_device *rdev); | 440 | int r600_uvd_init(struct radeon_device *rdev); |
diff --git a/drivers/gpu/drm/radeon/rs780_dpm.c b/drivers/gpu/drm/radeon/rs780_dpm.c index bef832a62fee..d1a1ce73bd45 100644 --- a/drivers/gpu/drm/radeon/rs780_dpm.c +++ b/drivers/gpu/drm/radeon/rs780_dpm.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include "r600_dpm.h" | 28 | #include "r600_dpm.h" |
29 | #include "rs780_dpm.h" | 29 | #include "rs780_dpm.h" |
30 | #include "atom.h" | 30 | #include "atom.h" |
31 | #include <linux/seq_file.h> | ||
31 | 32 | ||
32 | static struct igp_ps *rs780_get_ps(struct radeon_ps *rps) | 33 | static struct igp_ps *rs780_get_ps(struct radeon_ps *rps) |
33 | { | 34 | { |
@@ -961,3 +962,27 @@ u32 rs780_dpm_get_mclk(struct radeon_device *rdev, bool low) | |||
961 | 962 | ||
962 | return pi->bootup_uma_clk; | 963 | return pi->bootup_uma_clk; |
963 | } | 964 | } |
965 | |||
966 | void rs780_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev, | ||
967 | struct seq_file *m) | ||
968 | { | ||
969 | struct radeon_ps *rps = rdev->pm.dpm.current_ps; | ||
970 | struct igp_ps *ps = rs780_get_ps(rps); | ||
971 | u32 current_fb_div = RREG32(FVTHROT_STATUS_REG0) & CURRENT_FEEDBACK_DIV_MASK; | ||
972 | u32 func_cntl = RREG32(CG_SPLL_FUNC_CNTL); | ||
973 | u32 ref_div = ((func_cntl & SPLL_REF_DIV_MASK) >> SPLL_REF_DIV_SHIFT) + 1; | ||
974 | u32 post_div = ((func_cntl & SPLL_SW_HILEN_MASK) >> SPLL_SW_HILEN_SHIFT) + 1 + | ||
975 | ((func_cntl & SPLL_SW_LOLEN_MASK) >> SPLL_SW_LOLEN_SHIFT) + 1; | ||
976 | u32 sclk = (rdev->clock.spll.reference_freq * current_fb_div) / | ||
977 | (post_div * ref_div); | ||
978 | |||
979 | seq_printf(m, "uvd vclk: %d dclk: %d\n", rps->vclk, rps->dclk); | ||
980 | |||
981 | /* guess based on the current sclk */ | ||
982 | if (sclk < (ps->sclk_low + 500)) | ||
983 | seq_printf(m, "power level 0 sclk: %u vddc_index: %d\n", | ||
984 | ps->sclk_low, ps->min_voltage); | ||
985 | else | ||
986 | seq_printf(m, "power level 1 sclk: %u vddc_index: %d\n", | ||
987 | ps->sclk_high, ps->max_voltage); | ||
988 | } | ||
diff --git a/drivers/gpu/drm/radeon/rs780d.h b/drivers/gpu/drm/radeon/rs780d.h index b1142ed1c628..cfbe9a43d97b 100644 --- a/drivers/gpu/drm/radeon/rs780d.h +++ b/drivers/gpu/drm/radeon/rs780d.h | |||
@@ -28,6 +28,7 @@ | |||
28 | # define SPLL_SLEEP (1 << 1) | 28 | # define SPLL_SLEEP (1 << 1) |
29 | # define SPLL_REF_DIV(x) ((x) << 2) | 29 | # define SPLL_REF_DIV(x) ((x) << 2) |
30 | # define SPLL_REF_DIV_MASK (7 << 2) | 30 | # define SPLL_REF_DIV_MASK (7 << 2) |
31 | # define SPLL_REF_DIV_SHIFT 2 | ||
31 | # define SPLL_FB_DIV(x) ((x) << 5) | 32 | # define SPLL_FB_DIV(x) ((x) << 5) |
32 | # define SPLL_FB_DIV_MASK (0xff << 2) | 33 | # define SPLL_FB_DIV_MASK (0xff << 2) |
33 | # define SPLL_FB_DIV_SHIFT 2 | 34 | # define SPLL_FB_DIV_SHIFT 2 |
@@ -36,8 +37,10 @@ | |||
36 | # define SPLL_PULSENUM_MASK (3 << 14) | 37 | # define SPLL_PULSENUM_MASK (3 << 14) |
37 | # define SPLL_SW_HILEN(x) ((x) << 16) | 38 | # define SPLL_SW_HILEN(x) ((x) << 16) |
38 | # define SPLL_SW_HILEN_MASK (0xf << 16) | 39 | # define SPLL_SW_HILEN_MASK (0xf << 16) |
40 | # define SPLL_SW_HILEN_SHIFT 16 | ||
39 | # define SPLL_SW_LOLEN(x) ((x) << 20) | 41 | # define SPLL_SW_LOLEN(x) ((x) << 20) |
40 | # define SPLL_SW_LOLEN_MASK (0xf << 20) | 42 | # define SPLL_SW_LOLEN_MASK (0xf << 20) |
43 | # define SPLL_SW_LOLEN_SHIFT 20 | ||
41 | # define SPLL_DIVEN (1 << 24) | 44 | # define SPLL_DIVEN (1 << 24) |
42 | # define SPLL_BYPASS_EN (1 << 25) | 45 | # define SPLL_BYPASS_EN (1 << 25) |
43 | # define SPLL_CHG_STATUS (1 << 29) | 46 | # define SPLL_CHG_STATUS (1 << 29) |