<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">2013/7/16 Deucher, Alexander <span dir="ltr"><<a href="mailto:Alexander.Deucher@amd.com" target="_blank">Alexander.Deucher@amd.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class=""><div class="h5">> -----Original Message-----<br>
> From: Anthoine Bourgeois [mailto:<a href="mailto:anthoine.bourgeois@gmail.com">anthoine.bourgeois@gmail.com</a>]<br>
> Sent: Tuesday, July 16, 2013 5:09 PM<br>
> To: Deucher, Alexander; Koenig, Christian; Jerome Glisse; Anthoine<br>
> Bourgeois<br>
> Cc: <a href="mailto:dri-devel@lists.freedesktop.org">dri-devel@lists.freedesktop.org</a><br>
> Subject: [PATCH] drm/radeon/dpm: add debugfs support for rs780<br>
><br>
> This allows you to look at the current DPM state via debugfs.<br>
><br>
> Signed-off-by: Anthoine Bourgeois <<a href="mailto:anthoine.bourgeois@gmail.com">anthoine.bourgeois@gmail.com</a>><br>
> ---<br>
>  drivers/gpu/drm/radeon/radeon_asic.c |  1 +<br>
>  drivers/gpu/drm/radeon/radeon_asic.h |  2 ++<br>
>  drivers/gpu/drm/radeon/rs780_dpm.c   | 28<br>
> ++++++++++++++++++++++++++++<br>
>  3 files changed, 31 insertions(+)<br>
><br>
> diff --git a/drivers/gpu/drm/radeon/radeon_asic.c<br>
> b/drivers/gpu/drm/radeon/radeon_asic.c<br>
> index fea997e..78bec1a 100644<br>
> --- a/drivers/gpu/drm/radeon/radeon_asic.c<br>
> +++ b/drivers/gpu/drm/radeon/radeon_asic.c<br>
> @@ -1270,6 +1270,7 @@ static struct radeon_asic rs780_asic = {<br>
>               .get_sclk = &rs780_dpm_get_sclk,<br>
>               .get_mclk = &rs780_dpm_get_mclk,<br>
>               .print_power_state = &rs780_dpm_print_power_state,<br>
> +             .debugfs_print_current_performance_level =<br>
> &rs780_dpm_debugfs_print_current_performance_level,<br>
>       },<br>
>       .pflip = {<br>
>               .pre_page_flip = &rs600_pre_page_flip,<br>
> diff --git a/drivers/gpu/drm/radeon/radeon_asic.h<br>
> b/drivers/gpu/drm/radeon/radeon_asic.h<br>
> index b04b578..ca18957 100644<br>
> --- a/drivers/gpu/drm/radeon/radeon_asic.h<br>
> +++ b/drivers/gpu/drm/radeon/radeon_asic.h<br>
> @@ -433,6 +433,8 @@ u32 rs780_dpm_get_sclk(struct radeon_device *rdev,<br>
> bool low);<br>
>  u32 rs780_dpm_get_mclk(struct radeon_device *rdev, bool low);<br>
>  void rs780_dpm_print_power_state(struct radeon_device *rdev,<br>
>                                struct radeon_ps *ps);<br>
> +void rs780_dpm_debugfs_print_current_performance_level(struct<br>
> radeon_device *rdev,<br>
> +                                                    struct seq_file *m);<br>
><br>
>  /* uvd */<br>
>  int r600_uvd_init(struct radeon_device *rdev);<br>
> diff --git a/drivers/gpu/drm/radeon/rs780_dpm.c<br>
> b/drivers/gpu/drm/radeon/rs780_dpm.c<br>
> index bef832a..ef5a28e 100644<br>
> --- a/drivers/gpu/drm/radeon/rs780_dpm.c<br>
> +++ b/drivers/gpu/drm/radeon/rs780_dpm.c<br>
> @@ -961,3 +961,31 @@ u32 rs780_dpm_get_mclk(struct radeon_device<br>
> *rdev, bool low)<br>
><br>
>       return pi->bootup_uma_clk;<br>
>  }<br>
> +<br>
> +void rs780_dpm_debugfs_print_current_performance_level(struct<br>
> radeon_device *rdev,<br>
> +                                                    struct seq_file *m)<br>
> +{<br>
> +     struct radeon_ps *rps = rdev->pm.dpm.current_ps;<br>
> +     struct igp_ps *ps = rs780_get_ps(rps);<br>
> +     u32 sclk;<br>
> +     enum rs780_vddc_level vddc;<br>
> +     u32 current_index = r600_power_level_get_current_index(rdev);<br>
> +<br>
<br>
</div></div>Rs780 uses different dpm hardware compared to other r6xx asics, so r600_power_level_get_current_index() doesn't actually do anything on rs780. </blockquote><div><br></div><div>In that case is there any reason to do a r600_power_level_set_enter_index in the rs780_initialize_dpm_parameters ? This function set the same register TARGET_AND_CURRENT_PROFILE_INDEX.<br>
<br></div><div>I try to change the index value of this call to R600_POWER_LEVEL_MEDIUM to test my patch. The r600_power_level_get_current_index returns the modified index afterward but doesn't seem very "dynamic". I try to implement force_performance_level and in that case a r600_power_level_set_enter_index doesn't seem to modify the register.<br>
</div><div><br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">There's no convenient way to look this up on rs780.  I attempted to add support for it:<br>

<a href="http://people.freedesktop.org/~agd5f/0001-drm-radeon-dpm-add-debugfs-support-for-RS780-RS880.patch" target="_blank">http://people.freedesktop.org/~agd5f/0001-drm-radeon-dpm-add-debugfs-support-for-RS780-RS880.patch</a><br>

but the registers don't seem read back reliably when dpm is enabled so the output is bogus.<br>
<br></blockquote><div>Too bad :-(<br><br></div><div>Thanks,<br></div><div>Anthoine<br></div></div><br></div></div>