From: Alex Deucher <alexdeucher@gmail.com>
To: airlied@gmail.com, dri-devel@lists.freedesktop.org
Subject: [PATCH 16/25] drm/radeon/kms: adjust default clock/vddc tracking for pm on DCE5
Date: Thu, 6 Jan 2011 21:19:26 -0500 [thread overview]
Message-ID: <1294366775-1605-17-git-send-email-alexdeucher@gmail.com> (raw)
In-Reply-To: <1294366775-1605-1-git-send-email-alexdeucher@gmail.com>
NI chips no longer load the MC ucode in the asic_init sequence so
the asic comes up in a basic mode with low engine/memory clocks and
a voltage. Once the MC ucode is loaded by the driver the card
can be programmed to it's proper default clocks and voltage. As such
the default clocks in the firmware info table as the post clocks, not
the default running clocks. Track the default post clocks and default
running clocks separately to handle this.
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
---
drivers/gpu/drm/radeon/radeon.h | 3 +++
drivers/gpu/drm/radeon/radeon_atombios.c | 25 ++++++++++++++++---------
drivers/gpu/drm/radeon/radeon_pm.c | 18 ++++++++++--------
3 files changed, 29 insertions(+), 17 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 5598f95..8c62b2f 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -823,6 +823,9 @@ struct radeon_pm {
u32 current_sclk;
u32 current_mclk;
u32 current_vddc;
+ u32 default_sclk;
+ u32 default_mclk;
+ u32 default_vddc;
struct radeon_i2c_chan *i2c_bus;
/* selected pm method */
enum radeon_pm_method pm_method;
diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c
index 03f1c9a..1573202 100644
--- a/drivers/gpu/drm/radeon/radeon_atombios.c
+++ b/drivers/gpu/drm/radeon/radeon_atombios.c
@@ -2249,15 +2249,22 @@ static void radeon_atombios_parse_pplib_non_clock_info(struct radeon_device *rde
rdev->pm.default_power_state_index = state_index;
rdev->pm.power_state[state_index].default_clock_mode =
&rdev->pm.power_state[state_index].clock_info[mode_index - 1];
- /* patch the table values with the default slck/mclk from firmware info */
- for (j = 0; j < mode_index; j++) {
- rdev->pm.power_state[state_index].clock_info[j].mclk =
- rdev->clock.default_mclk;
- rdev->pm.power_state[state_index].clock_info[j].sclk =
- rdev->clock.default_sclk;
- if (vddc)
- rdev->pm.power_state[state_index].clock_info[j].voltage.voltage =
- vddc;
+ if (ASIC_IS_DCE5(rdev)) {
+ /* NI chips post without MC ucode, so default clocks are strobe mode only */
+ rdev->pm.default_sclk = rdev->pm.power_state[state_index].clock_info[0].sclk;
+ rdev->pm.default_mclk = rdev->pm.power_state[state_index].clock_info[0].mclk;
+ rdev->pm.default_vddc = rdev->pm.power_state[state_index].clock_info[0].voltage.voltage;
+ } else {
+ /* patch the table values with the default slck/mclk from firmware info */
+ for (j = 0; j < mode_index; j++) {
+ rdev->pm.power_state[state_index].clock_info[j].mclk =
+ rdev->clock.default_mclk;
+ rdev->pm.power_state[state_index].clock_info[j].sclk =
+ rdev->clock.default_sclk;
+ if (vddc)
+ rdev->pm.power_state[state_index].clock_info[j].voltage.voltage =
+ vddc;
+ }
}
}
}
diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c
index 7ad2e1a..9052d1e 100644
--- a/drivers/gpu/drm/radeon/radeon_pm.c
+++ b/drivers/gpu/drm/radeon/radeon_pm.c
@@ -167,13 +167,13 @@ static void radeon_set_power_state(struct radeon_device *rdev)
if (radeon_gui_idle(rdev)) {
sclk = rdev->pm.power_state[rdev->pm.requested_power_state_index].
clock_info[rdev->pm.requested_clock_mode_index].sclk;
- if (sclk > rdev->clock.default_sclk)
- sclk = rdev->clock.default_sclk;
+ if (sclk > rdev->pm.default_sclk)
+ sclk = rdev->pm.default_sclk;
mclk = rdev->pm.power_state[rdev->pm.requested_power_state_index].
clock_info[rdev->pm.requested_clock_mode_index].mclk;
- if (mclk > rdev->clock.default_mclk)
- mclk = rdev->clock.default_mclk;
+ if (mclk > rdev->pm.default_mclk)
+ mclk = rdev->pm.default_mclk;
/* upvolt before raising clocks, downvolt after lowering clocks */
if (sclk < rdev->pm.current_sclk)
@@ -534,8 +534,8 @@ void radeon_pm_resume(struct radeon_device *rdev)
mutex_lock(&rdev->pm.mutex);
rdev->pm.current_power_state_index = rdev->pm.default_power_state_index;
rdev->pm.current_clock_mode_index = 0;
- rdev->pm.current_sclk = rdev->clock.default_sclk;
- rdev->pm.current_mclk = rdev->clock.default_mclk;
+ rdev->pm.current_sclk = rdev->pm.default_sclk;
+ rdev->pm.current_mclk = rdev->pm.default_mclk;
rdev->pm.current_vddc = rdev->pm.power_state[rdev->pm.default_power_state_index].clock_info[0].voltage.voltage;
if (rdev->pm.pm_method == PM_METHOD_DYNPM
&& rdev->pm.dynpm_state == DYNPM_STATE_SUSPENDED) {
@@ -558,6 +558,8 @@ int radeon_pm_init(struct radeon_device *rdev)
rdev->pm.dynpm_planned_action = DYNPM_ACTION_NONE;
rdev->pm.dynpm_can_upclock = true;
rdev->pm.dynpm_can_downclock = true;
+ rdev->pm.default_sclk = rdev->clock.default_sclk;
+ rdev->pm.default_mclk = rdev->clock.default_mclk;
rdev->pm.current_sclk = rdev->clock.default_sclk;
rdev->pm.current_mclk = rdev->clock.default_mclk;
rdev->pm.int_thermal_type = THERMAL_TYPE_NONE;
@@ -804,9 +806,9 @@ static int radeon_debugfs_pm_info(struct seq_file *m, void *data)
struct drm_device *dev = node->minor->dev;
struct radeon_device *rdev = dev->dev_private;
- seq_printf(m, "default engine clock: %u0 kHz\n", rdev->clock.default_sclk);
+ seq_printf(m, "default engine clock: %u0 kHz\n", rdev->pm.default_sclk);
seq_printf(m, "current engine clock: %u0 kHz\n", radeon_get_engine_clock(rdev));
- seq_printf(m, "default memory clock: %u0 kHz\n", rdev->clock.default_mclk);
+ seq_printf(m, "default memory clock: %u0 kHz\n", rdev->pm.default_mclk);
if (rdev->asic->get_memory_clock)
seq_printf(m, "current memory clock: %u0 kHz\n", radeon_get_memory_clock(rdev));
if (rdev->pm.current_vddc)
--
1.7.1.1
next prev parent reply other threads:[~2011-01-07 2:20 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-07 2:19 [PATCH 0/25] drm/radeon/kms: Add support for NI (Northern Islands) Alex Deucher
2011-01-07 2:19 ` [PATCH 01/25] drm/radeon/kms: clean up ASIC_IS_DCE41() macro Alex Deucher
2011-01-07 2:19 ` [PATCH 02/25] drm/radeon/kms: add NI chip families Alex Deucher
2011-01-07 2:19 ` [PATCH 03/25] drm/radeon/kms: update display watermark calculations for DCE5 Alex Deucher
2011-01-07 2:19 ` [PATCH 04/25] drm/radeon/kms: DCE5 supports 16k display surfaces Alex Deucher
2011-01-07 2:19 ` [PATCH 05/25] drm/radeon/kms: DCE5 atom SetPixelClock updates Alex Deucher
2011-01-07 2:19 ` [PATCH 06/25] drm/radeon/kms: DCE5 atom spread spectrum updates Alex Deucher
2011-01-07 2:19 ` [PATCH 07/25] drm/radeon/kms: DCE5 atom transmitter control updates Alex Deucher
2011-01-07 2:19 ` [PATCH 08/25] drm/radeon/kms: DCE5 atom dig encoder updates Alex Deucher
2011-01-07 2:19 ` [PATCH 09/25] drm/radeon/kms: dac dpms updates for DCE5 Alex Deucher
2011-01-07 2:19 ` [PATCH 10/25] drm/radeon/kms: dvo " Alex Deucher
2011-01-07 2:19 ` [PATCH 11/25] drm/radeon/kms: parse DCE5 encoder caps when setting up encoders Alex Deucher
2011-01-07 2:19 ` [PATCH 12/25] drm/radeon/kms: handle NI thermal controller Alex Deucher
2011-01-07 2:19 ` [PATCH 13/25] drm/radeon/kms: add disabled vbios accessor for NI asics Alex Deucher
2011-01-07 2:19 ` [PATCH 14/25] drm/radeon/kms: fill gpu init " Alex Deucher
2011-01-07 2:19 ` [PATCH 15/25] drm/radeon/kms: add backend map workaround for barts Alex Deucher
2011-01-07 2:19 ` Alex Deucher [this message]
2011-01-07 2:19 ` [PATCH 17/25] drm/radeon/kms: always use writeback/events for fences on NI Alex Deucher
2011-01-07 2:19 ` [PATCH 18/25] drm/radeon/kms: add bo blit support for NI Alex Deucher
2011-01-07 2:19 ` [PATCH 19/25] drm/radeon/kms: add ni_reg.h Alex Deucher
2011-01-07 2:19 ` [PATCH 20/25] drm/radeon/kms: add support for DCE5 display LUTs Alex Deucher
2011-01-07 2:19 ` [PATCH 21/25] drm/radeon/kms: add ucode loader for NI Alex Deucher
2011-01-07 2:19 ` [PATCH 22/25] drm/radeon/kms/ni: load default sclk/mclk/vddc at pm init Alex Deucher
2011-01-07 2:19 ` [PATCH 23/25] drm/radeon/kms: add radeon_asic struct for NI asics Alex Deucher
2011-01-07 2:19 ` [PATCH 24/25] drm/radeon/kms: don't enable pcie gen2 on NI yet Alex Deucher
2011-01-07 2:19 ` [PATCH 25/25] drm/radeon/kms: add NI pci ids Alex Deucher
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1294366775-1605-17-git-send-email-alexdeucher@gmail.com \
--to=alexdeucher@gmail.com \
--cc=airlied@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).