* [PATCH] drm/radeon/dpm: add debugfs support for rs780
@ 2013-07-16 21:09 Anthoine Bourgeois
2013-07-16 21:24 ` Deucher, Alexander
0 siblings, 1 reply; 3+ messages in thread
From: Anthoine Bourgeois @ 2013-07-16 21:09 UTC (permalink / raw)
To: Alex Deucher, Christian König, Jerome Glisse,
Anthoine Bourgeois
Cc: dri-devel
This allows you to look at the current DPM state via debugfs.
Signed-off-by: Anthoine Bourgeois <anthoine.bourgeois@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
^ permalink raw reply related [flat|nested] 3+ messages in thread
* RE: [PATCH] drm/radeon/dpm: add debugfs support for rs780
2013-07-16 21:09 [PATCH] drm/radeon/dpm: add debugfs support for rs780 Anthoine Bourgeois
@ 2013-07-16 21:24 ` Deucher, Alexander
2013-07-17 7:39 ` Anthoine Bourgeois
0 siblings, 1 reply; 3+ messages in thread
From: Deucher, Alexander @ 2013-07-16 21:24 UTC (permalink / raw)
To: Anthoine Bourgeois, Koenig, Christian, Jerome Glisse
Cc: dri-devel@lists.freedesktop.org
> -----Original Message-----
> From: Anthoine Bourgeois [mailto:anthoine.bourgeois@gmail.com]
> Sent: Tuesday, July 16, 2013 5:09 PM
> To: Deucher, Alexander; Koenig, Christian; Jerome Glisse; Anthoine
> Bourgeois
> Cc: dri-devel@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@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
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] drm/radeon/dpm: add debugfs support for rs780
2013-07-16 21:24 ` Deucher, Alexander
@ 2013-07-17 7:39 ` Anthoine Bourgeois
0 siblings, 0 replies; 3+ messages in thread
From: Anthoine Bourgeois @ 2013-07-17 7:39 UTC (permalink / raw)
To: Deucher, Alexander
Cc: Jerome Glisse, Koenig, Christian, dri-devel@lists.freedesktop.org
[-- Attachment #1.1: Type: text/plain, Size: 3957 bytes --]
2013/7/16 Deucher, Alexander <Alexander.Deucher@amd.com>
> > -----Original Message-----
> > From: Anthoine Bourgeois [mailto:anthoine.bourgeois@gmail.com]
> > Sent: Tuesday, July 16, 2013 5:09 PM
> > To: Deucher, Alexander; Koenig, Christian; Jerome Glisse; Anthoine
> > Bourgeois
> > Cc: dri-devel@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@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.
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.
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.
> 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.
>
> Too bad :-(
Thanks,
Anthoine
[-- Attachment #1.2: Type: text/html, Size: 5335 bytes --]
[-- Attachment #2: Type: text/plain, Size: 159 bytes --]
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2013-07-17 7:39 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-07-16 21:09 [PATCH] drm/radeon/dpm: add debugfs support for rs780 Anthoine Bourgeois
2013-07-16 21:24 ` Deucher, Alexander
2013-07-17 7:39 ` Anthoine Bourgeois
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.