- don't rest the power state in pm_init()
We already boot up to the default power state.  Note this
patch relies on:
drm/radeon/kms/pm: patch default power state with default clocks/voltages on r6xx+
To make sure the default power state matches the boot up state.

- In the pm resume path asic init will have set the power state
back to the default so reset the tracking state values.

Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Alex Deucher 2010-06-07 17:49:51 -04:00 коммит произвёл Dave Airlie
Родитель 8de016e2bd
Коммит f8ed8b4c5d
1 изменённых файлов: 10 добавлений и 16 удалений

Просмотреть файл

@ -368,15 +368,18 @@ void radeon_pm_suspend(struct radeon_device *rdev)
{ {
mutex_lock(&rdev->pm.mutex); mutex_lock(&rdev->pm.mutex);
cancel_delayed_work(&rdev->pm.dynpm_idle_work); cancel_delayed_work(&rdev->pm.dynpm_idle_work);
rdev->pm.current_power_state_index = -1;
rdev->pm.current_clock_mode_index = -1;
rdev->pm.current_sclk = 0;
rdev->pm.current_mclk = 0;
mutex_unlock(&rdev->pm.mutex); mutex_unlock(&rdev->pm.mutex);
} }
void radeon_pm_resume(struct radeon_device *rdev) void radeon_pm_resume(struct radeon_device *rdev)
{ {
/* asic init will reset the default power state */
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;
mutex_unlock(&rdev->pm.mutex);
radeon_pm_compute_clocks(rdev); radeon_pm_compute_clocks(rdev);
} }
@ -385,12 +388,13 @@ int radeon_pm_init(struct radeon_device *rdev)
int ret; int ret;
/* default to profile method */ /* default to profile method */
rdev->pm.pm_method = PM_METHOD_PROFILE; rdev->pm.pm_method = PM_METHOD_PROFILE;
rdev->pm.profile = PM_PROFILE_DEFAULT;
rdev->pm.dynpm_state = DYNPM_STATE_DISABLED; rdev->pm.dynpm_state = DYNPM_STATE_DISABLED;
rdev->pm.dynpm_planned_action = DYNPM_ACTION_NONE; rdev->pm.dynpm_planned_action = DYNPM_ACTION_NONE;
rdev->pm.dynpm_can_upclock = true; rdev->pm.dynpm_can_upclock = true;
rdev->pm.dynpm_can_downclock = true; rdev->pm.dynpm_can_downclock = true;
rdev->pm.current_sclk = 0; rdev->pm.current_sclk = rdev->clock.default_sclk;
rdev->pm.current_mclk = 0; rdev->pm.current_mclk = rdev->clock.default_mclk;
if (rdev->bios) { if (rdev->bios) {
if (rdev->is_atom_bios) if (rdev->is_atom_bios)
@ -398,19 +402,9 @@ int radeon_pm_init(struct radeon_device *rdev)
else else
radeon_combios_get_power_modes(rdev); radeon_combios_get_power_modes(rdev);
radeon_pm_init_profile(rdev); radeon_pm_init_profile(rdev);
rdev->pm.current_power_state_index = -1;
rdev->pm.current_clock_mode_index = -1;
} }
if (rdev->pm.num_power_states > 1) { if (rdev->pm.num_power_states > 1) {
if (rdev->pm.pm_method == PM_METHOD_PROFILE) {
mutex_lock(&rdev->pm.mutex);
rdev->pm.profile = PM_PROFILE_DEFAULT;
radeon_pm_update_profile(rdev);
radeon_pm_set_clocks(rdev);
mutex_unlock(&rdev->pm.mutex);
}
/* where's the best place to put these? */ /* where's the best place to put these? */
ret = device_create_file(rdev->dev, &dev_attr_power_profile); ret = device_create_file(rdev->dev, &dev_attr_power_profile);
if (ret) if (ret)