drm/radeon/dpm: add debugfs support for RS780/RS880 (v3)
This allows you to look at the current DPM state via debugfs. Due to the way the hardware works on these asics, there's no way to look up exactly what power state we are in, so we make the best guess we can based on the current sclk. v2: Anthoine's version v3: fix ref div Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -28,6 +28,7 @@
|
||||
#include "r600_dpm.h"
|
||||
#include "rs780_dpm.h"
|
||||
#include "atom.h"
|
||||
#include <linux/seq_file.h>
|
||||
|
||||
static struct igp_ps *rs780_get_ps(struct radeon_ps *rps)
|
||||
{
|
||||
@@ -961,3 +962,27 @@ u32 rs780_dpm_get_mclk(struct radeon_device *rdev, bool low)
|
||||
|
||||
return pi->bootup_uma_clk;
|
||||
}
|
||||
|
||||
void rs780_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
|
||||
struct seq_file *m)
|
||||
{
|
||||
struct radeon_ps *rps = rdev->pm.dpm.current_ps;
|
||||
struct igp_ps *ps = rs780_get_ps(rps);
|
||||
u32 current_fb_div = RREG32(FVTHROT_STATUS_REG0) & CURRENT_FEEDBACK_DIV_MASK;
|
||||
u32 func_cntl = RREG32(CG_SPLL_FUNC_CNTL);
|
||||
u32 ref_div = ((func_cntl & SPLL_REF_DIV_MASK) >> SPLL_REF_DIV_SHIFT) + 1;
|
||||
u32 post_div = ((func_cntl & SPLL_SW_HILEN_MASK) >> SPLL_SW_HILEN_SHIFT) + 1 +
|
||||
((func_cntl & SPLL_SW_LOLEN_MASK) >> SPLL_SW_LOLEN_SHIFT) + 1;
|
||||
u32 sclk = (rdev->clock.spll.reference_freq * current_fb_div) /
|
||||
(post_div * ref_div);
|
||||
|
||||
seq_printf(m, "uvd vclk: %d dclk: %d\n", rps->vclk, rps->dclk);
|
||||
|
||||
/* guess based on the current sclk */
|
||||
if (sclk < (ps->sclk_low + 500))
|
||||
seq_printf(m, "power level 0 sclk: %u vddc_index: %d\n",
|
||||
ps->sclk_low, ps->min_voltage);
|
||||
else
|
||||
seq_printf(m, "power level 1 sclk: %u vddc_index: %d\n",
|
||||
ps->sclk_high, ps->max_voltage);
|
||||
}
|
||||
|
Reference in New Issue
Block a user