aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/radeon/radeon.h1
-rw-r--r--drivers/gpu/drm/radeon/radeon_pm.c17
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
1105enum radeon_pm_profile_type { 1106enum 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
589restart_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
598restart_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;