This allows you to look at the current DPM state via debugfs.

Signed-off-by: Anthoine Bourgeois <anthoine.bourge...@gmail.com>
---
drivers/gpu/drm/radeon/radeon_asic.c |  1 +
drivers/gpu/drm/radeon/radeon_asic.h |  2 ++
drivers/gpu/drm/radeon/rs780_dpm.c   | 28 ++++++++++++++++++++++++++++
3 files changed, 31 insertions(+)

diff --git a/drivers/gpu/drm/radeon/radeon_asic.c 
b/drivers/gpu/drm/radeon/radeon_asic.c
index fea997e..78bec1a 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 = {
                .get_sclk = &rs780_dpm_get_sclk,
                .get_mclk = &rs780_dpm_get_mclk,
                .print_power_state = &rs780_dpm_print_power_state,
+               .debugfs_print_current_performance_level = 
&rs780_dpm_debugfs_print_current_performance_level,
        },
        .pflip = {
                .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 b04b578..ca18957 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);
u32 rs780_dpm_get_mclk(struct radeon_device *rdev, bool low);
void rs780_dpm_print_power_state(struct radeon_device *rdev,
                                 struct radeon_ps *ps);
+void rs780_dpm_debugfs_print_current_performance_level(struct radeon_device 
*rdev,
+                                                      struct seq_file *m);

/* uvd */
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 bef832a..ef5a28e 100644
--- a/drivers/gpu/drm/radeon/rs780_dpm.c
+++ b/drivers/gpu/drm/radeon/rs780_dpm.c
@@ -961,3 +961,31 @@ 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 sclk;
+       enum rs780_vddc_level vddc;
+       u32 current_index = r600_power_level_get_current_index(rdev);
+
+       if (current_index > 1) {
+               seq_printf(m, "invalid dpm profile %d\n", current_index);
+       } else {
+               if (current_index == 0) {
+                       sclk = ps->sclk_low;
+                       vddc = rs780_get_voltage_for_vddc_level(rdev,
+                                                               
ps->min_voltage);
+               } else { /* current_index == 1 */
+                       sclk = ps->sclk_high;
+                       vddc = rs780_get_voltage_for_vddc_level(rdev,
+                                                               
ps->max_voltage);
+               }
+               seq_printf(m, "uvd    vclk: %d dclk: %d\n", rps->vclk, 
rps->dclk);
+               seq_printf(m, "power level %d    sclk: %u mclk: %u vddc: %u\n",
+                          current_index, sclk,
+                          rs780_dpm_get_mclk(rdev, false), vddc);
+       }
+}
--
1.8.1.5

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to