diff options
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon.h | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_pm.c | 17 |
2 files changed, 15 insertions, 3 deletions
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index f51807f04f65..08cececb376d 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h | |||
| @@ -1100,6 +1100,7 @@ enum radeon_pm_state_type { | |||
| 1100 | POWER_STATE_TYPE_INTERNAL_THERMAL, | 1100 | POWER_STATE_TYPE_INTERNAL_THERMAL, |
| 1101 | POWER_STATE_TYPE_INTERNAL_ACPI, | 1101 | POWER_STATE_TYPE_INTERNAL_ACPI, |
| 1102 | POWER_STATE_TYPE_INTERNAL_ULV, | 1102 | POWER_STATE_TYPE_INTERNAL_ULV, |
| 1103 | POWER_STATE_TYPE_INTERNAL_3DPERF, | ||
| 1103 | }; | 1104 | }; |
| 1104 | 1105 | ||
| 1105 | enum radeon_pm_profile_type { | 1106 | enum radeon_pm_profile_type { |
diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c index c3e5e119702d..aaafb931922f 100644 --- a/drivers/gpu/drm/radeon/radeon_pm.c +++ b/drivers/gpu/drm/radeon/radeon_pm.c | |||
| @@ -586,11 +586,16 @@ static struct radeon_ps *radeon_dpm_pick_power_state(struct radeon_device *rdev, | |||
| 586 | struct radeon_ps *ps; | 586 | struct radeon_ps *ps; |
| 587 | u32 ui_class; | 587 | u32 ui_class; |
| 588 | 588 | ||
| 589 | restart_search: | 589 | /* certain older asics have a separare 3D performance state, |
| 590 | * so try that first if the user selected performance | ||
| 591 | */ | ||
| 592 | if (dpm_state == POWER_STATE_TYPE_PERFORMANCE) | ||
| 593 | dpm_state = POWER_STATE_TYPE_INTERNAL_3DPERF; | ||
| 590 | /* balanced states don't exist at the moment */ | 594 | /* balanced states don't exist at the moment */ |
| 591 | if (dpm_state == POWER_STATE_TYPE_BALANCED) | 595 | if (dpm_state == POWER_STATE_TYPE_BALANCED) |
| 592 | dpm_state = POWER_STATE_TYPE_PERFORMANCE; | 596 | dpm_state = POWER_STATE_TYPE_PERFORMANCE; |
| 593 | 597 | ||
| 598 | restart_search: | ||
| 594 | /* Pick the best power state based on current conditions */ | 599 | /* Pick the best power state based on current conditions */ |
| 595 | for (i = 0; i < rdev->pm.dpm.num_ps; i++) { | 600 | for (i = 0; i < rdev->pm.dpm.num_ps; i++) { |
| 596 | ps = &rdev->pm.dpm.ps[i]; | 601 | ps = &rdev->pm.dpm.ps[i]; |
| @@ -657,6 +662,10 @@ restart_search: | |||
| 657 | if (ps->class2 & ATOM_PPLIB_CLASSIFICATION2_ULV) | 662 | if (ps->class2 & ATOM_PPLIB_CLASSIFICATION2_ULV) |
| 658 | return ps; | 663 | return ps; |
| 659 | break; | 664 | break; |
| 665 | case POWER_STATE_TYPE_INTERNAL_3DPERF: | ||
| 666 | if (ps->class & ATOM_PPLIB_CLASSIFICATION_3DPERFORMANCE) | ||
| 667 | return ps; | ||
| 668 | break; | ||
| 660 | default: | 669 | default: |
| 661 | break; | 670 | break; |
| 662 | } | 671 | } |
| @@ -675,6 +684,8 @@ restart_search: | |||
| 675 | dpm_state = POWER_STATE_TYPE_BATTERY; | 684 | dpm_state = POWER_STATE_TYPE_BATTERY; |
| 676 | goto restart_search; | 685 | goto restart_search; |
| 677 | case POWER_STATE_TYPE_BATTERY: | 686 | case POWER_STATE_TYPE_BATTERY: |
| 687 | case POWER_STATE_TYPE_BALANCED: | ||
| 688 | case POWER_STATE_TYPE_INTERNAL_3DPERF: | ||
| 678 | dpm_state = POWER_STATE_TYPE_PERFORMANCE; | 689 | dpm_state = POWER_STATE_TYPE_PERFORMANCE; |
| 679 | goto restart_search; | 690 | goto restart_search; |
| 680 | default: | 691 | default: |
| @@ -1003,8 +1014,8 @@ static int radeon_pm_init_dpm(struct radeon_device *rdev) | |||
| 1003 | int ret; | 1014 | int ret; |
| 1004 | 1015 | ||
| 1005 | /* default to performance state */ | 1016 | /* default to performance state */ |
| 1006 | rdev->pm.dpm.state = POWER_STATE_TYPE_PERFORMANCE; | 1017 | rdev->pm.dpm.state = POWER_STATE_TYPE_BALANCED; |
| 1007 | rdev->pm.dpm.user_state = POWER_STATE_TYPE_PERFORMANCE; | 1018 | rdev->pm.dpm.user_state = POWER_STATE_TYPE_BALANCED; |
| 1008 | rdev->pm.default_sclk = rdev->clock.default_sclk; | 1019 | rdev->pm.default_sclk = rdev->clock.default_sclk; |
| 1009 | rdev->pm.default_mclk = rdev->clock.default_mclk; | 1020 | rdev->pm.default_mclk = rdev->clock.default_mclk; |
| 1010 | rdev->pm.current_sclk = rdev->clock.default_sclk; | 1021 | rdev->pm.current_sclk = rdev->clock.default_sclk; |
