drm/radeon/kms/pm: Misc fixes
- 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:
Родитель
8de016e2bd
Коммит
f8ed8b4c5d
|
@ -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)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче