[PATCH] drm/radeon/dpm: add debugfs support for rs780

Deucher, Alexander Alexander.Deucher at amd.com
Tue Jul 16 14:24:08 PDT 2013


> -----Original Message-----
> From: Anthoine Bourgeois [mailto:anthoine.bourgeois at gmail.com]
> Sent: Tuesday, July 16, 2013 5:09 PM
> To: Deucher, Alexander; Koenig, Christian; Jerome Glisse; Anthoine
> Bourgeois
> Cc: dri-devel at lists.freedesktop.org
> Subject: [PATCH] drm/radeon/dpm: add debugfs support for rs780
> 
> This allows you to look at the current DPM state via debugfs.
> 
> Signed-off-by: Anthoine Bourgeois <anthoine.bourgeois at 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);
> +

Rs780 uses different dpm hardware compared to other r6xx asics, so r600_power_level_get_current_index() doesn't actually do anything on rs780.  There's no convenient way to look this up on rs780.  I attempted to add support for it:
http://people.freedesktop.org/~agd5f/0001-drm-radeon-dpm-add-debugfs-support-for-RS780-RS880.patch
but the registers don't seem read back reliably when dpm is enabled so the output is bogus.

Alex

> +	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
> 




More information about the dri-devel mailing list