|
@@ -288,24 +288,6 @@ void r600_pm_get_dynpm_state(struct radeon_device *rdev)
|
|
|
pcie_lanes);
|
|
|
}
|
|
|
|
|
|
-static int r600_pm_get_type_index(struct radeon_device *rdev,
|
|
|
- enum radeon_pm_state_type ps_type,
|
|
|
- int instance)
|
|
|
-{
|
|
|
- int i;
|
|
|
- int found_instance = -1;
|
|
|
-
|
|
|
- for (i = 0; i < rdev->pm.num_power_states; i++) {
|
|
|
- if (rdev->pm.power_state[i].type == ps_type) {
|
|
|
- found_instance++;
|
|
|
- if (found_instance == instance)
|
|
|
- return i;
|
|
|
- }
|
|
|
- }
|
|
|
- /* return default if no match */
|
|
|
- return rdev->pm.default_power_state_index;
|
|
|
-}
|
|
|
-
|
|
|
void rs780_pm_init_profile(struct radeon_device *rdev)
|
|
|
{
|
|
|
if (rdev->pm.num_power_states == 2) {
|
|
@@ -421,6 +403,8 @@ void rs780_pm_init_profile(struct radeon_device *rdev)
|
|
|
|
|
|
void r600_pm_init_profile(struct radeon_device *rdev)
|
|
|
{
|
|
|
+ int idx;
|
|
|
+
|
|
|
if (rdev->family == CHIP_R600) {
|
|
|
/* XXX */
|
|
|
/* default */
|
|
@@ -502,81 +486,43 @@ void r600_pm_init_profile(struct radeon_device *rdev)
|
|
|
rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_off_cm_idx = 0;
|
|
|
rdev->pm.profiles[PM_PROFILE_DEFAULT_IDX].dpms_on_cm_idx = 2;
|
|
|
/* low sh */
|
|
|
- if (rdev->flags & RADEON_IS_MOBILITY) {
|
|
|
- rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_off_ps_idx =
|
|
|
- r600_pm_get_type_index(rdev, POWER_STATE_TYPE_BATTERY, 0);
|
|
|
- rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_on_ps_idx =
|
|
|
- r600_pm_get_type_index(rdev, POWER_STATE_TYPE_BATTERY, 0);
|
|
|
- rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_off_cm_idx = 0;
|
|
|
- rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_on_cm_idx = 0;
|
|
|
- } else {
|
|
|
- rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_off_ps_idx =
|
|
|
- r600_pm_get_type_index(rdev, POWER_STATE_TYPE_PERFORMANCE, 0);
|
|
|
- rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_on_ps_idx =
|
|
|
- r600_pm_get_type_index(rdev, POWER_STATE_TYPE_PERFORMANCE, 0);
|
|
|
- rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_off_cm_idx = 0;
|
|
|
- rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_on_cm_idx = 0;
|
|
|
- }
|
|
|
+ if (rdev->flags & RADEON_IS_MOBILITY)
|
|
|
+ idx = radeon_pm_get_type_index(rdev, POWER_STATE_TYPE_BATTERY, 0);
|
|
|
+ else
|
|
|
+ idx = radeon_pm_get_type_index(rdev, POWER_STATE_TYPE_PERFORMANCE, 0);
|
|
|
+ rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_off_ps_idx = idx;
|
|
|
+ rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_on_ps_idx = idx;
|
|
|
+ rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_off_cm_idx = 0;
|
|
|
+ rdev->pm.profiles[PM_PROFILE_LOW_SH_IDX].dpms_on_cm_idx = 0;
|
|
|
/* mid sh */
|
|
|
- if (rdev->flags & RADEON_IS_MOBILITY) {
|
|
|
- rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_off_ps_idx =
|
|
|
- r600_pm_get_type_index(rdev, POWER_STATE_TYPE_BATTERY, 0);
|
|
|
- rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_on_ps_idx =
|
|
|
- r600_pm_get_type_index(rdev, POWER_STATE_TYPE_BATTERY, 0);
|
|
|
- rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_off_cm_idx = 0;
|
|
|
- rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_on_cm_idx = 1;
|
|
|
- } else {
|
|
|
- rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_off_ps_idx =
|
|
|
- r600_pm_get_type_index(rdev, POWER_STATE_TYPE_PERFORMANCE, 0);
|
|
|
- rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_on_ps_idx =
|
|
|
- r600_pm_get_type_index(rdev, POWER_STATE_TYPE_PERFORMANCE, 0);
|
|
|
- rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_off_cm_idx = 0;
|
|
|
- rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_on_cm_idx = 1;
|
|
|
- }
|
|
|
+ rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_off_ps_idx = idx;
|
|
|
+ rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_on_ps_idx = idx;
|
|
|
+ rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_off_cm_idx = 0;
|
|
|
+ rdev->pm.profiles[PM_PROFILE_MID_SH_IDX].dpms_on_cm_idx = 1;
|
|
|
/* high sh */
|
|
|
- rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_off_ps_idx =
|
|
|
- r600_pm_get_type_index(rdev, POWER_STATE_TYPE_PERFORMANCE, 0);
|
|
|
- rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_on_ps_idx =
|
|
|
- r600_pm_get_type_index(rdev, POWER_STATE_TYPE_PERFORMANCE, 0);
|
|
|
+ idx = radeon_pm_get_type_index(rdev, POWER_STATE_TYPE_PERFORMANCE, 0);
|
|
|
+ rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_off_ps_idx = idx;
|
|
|
+ rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_on_ps_idx = idx;
|
|
|
rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_off_cm_idx = 0;
|
|
|
rdev->pm.profiles[PM_PROFILE_HIGH_SH_IDX].dpms_on_cm_idx = 2;
|
|
|
/* low mh */
|
|
|
- if (rdev->flags & RADEON_IS_MOBILITY) {
|
|
|
- rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_off_ps_idx =
|
|
|
- r600_pm_get_type_index(rdev, POWER_STATE_TYPE_BATTERY, 1);
|
|
|
- rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_on_ps_idx =
|
|
|
- r600_pm_get_type_index(rdev, POWER_STATE_TYPE_BATTERY, 1);
|
|
|
- rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_off_cm_idx = 0;
|
|
|
- rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_on_cm_idx = 0;
|
|
|
- } else {
|
|
|
- rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_off_ps_idx =
|
|
|
- r600_pm_get_type_index(rdev, POWER_STATE_TYPE_PERFORMANCE, 1);
|
|
|
- rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_on_ps_idx =
|
|
|
- r600_pm_get_type_index(rdev, POWER_STATE_TYPE_PERFORMANCE, 1);
|
|
|
- rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_off_cm_idx = 0;
|
|
|
- rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_on_cm_idx = 0;
|
|
|
- }
|
|
|
+ if (rdev->flags & RADEON_IS_MOBILITY)
|
|
|
+ idx = radeon_pm_get_type_index(rdev, POWER_STATE_TYPE_BATTERY, 1);
|
|
|
+ else
|
|
|
+ idx = radeon_pm_get_type_index(rdev, POWER_STATE_TYPE_PERFORMANCE, 1);
|
|
|
+ rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_off_ps_idx = idx;
|
|
|
+ rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_on_ps_idx = idx;
|
|
|
+ rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_off_cm_idx = 0;
|
|
|
+ rdev->pm.profiles[PM_PROFILE_LOW_MH_IDX].dpms_on_cm_idx = 0;
|
|
|
/* mid mh */
|
|
|
- if (rdev->flags & RADEON_IS_MOBILITY) {
|
|
|
- rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_off_ps_idx =
|
|
|
- r600_pm_get_type_index(rdev, POWER_STATE_TYPE_BATTERY, 1);
|
|
|
- rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_on_ps_idx =
|
|
|
- r600_pm_get_type_index(rdev, POWER_STATE_TYPE_BATTERY, 1);
|
|
|
- rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_off_cm_idx = 0;
|
|
|
- rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_on_cm_idx = 1;
|
|
|
- } else {
|
|
|
- rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_off_ps_idx =
|
|
|
- r600_pm_get_type_index(rdev, POWER_STATE_TYPE_PERFORMANCE, 1);
|
|
|
- rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_on_ps_idx =
|
|
|
- r600_pm_get_type_index(rdev, POWER_STATE_TYPE_PERFORMANCE, 1);
|
|
|
- rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_off_cm_idx = 0;
|
|
|
- rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_on_cm_idx = 1;
|
|
|
- }
|
|
|
+ rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_off_ps_idx = idx;
|
|
|
+ rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_on_ps_idx = idx;
|
|
|
+ rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_off_cm_idx = 0;
|
|
|
+ rdev->pm.profiles[PM_PROFILE_MID_MH_IDX].dpms_on_cm_idx = 1;
|
|
|
/* high mh */
|
|
|
- rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_off_ps_idx =
|
|
|
- r600_pm_get_type_index(rdev, POWER_STATE_TYPE_PERFORMANCE, 1);
|
|
|
- rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_ps_idx =
|
|
|
- r600_pm_get_type_index(rdev, POWER_STATE_TYPE_PERFORMANCE, 1);
|
|
|
+ idx = radeon_pm_get_type_index(rdev, POWER_STATE_TYPE_PERFORMANCE, 1);
|
|
|
+ rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_off_ps_idx = idx;
|
|
|
+ rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_ps_idx = idx;
|
|
|
rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_off_cm_idx = 0;
|
|
|
rdev->pm.profiles[PM_PROFILE_HIGH_MH_IDX].dpms_on_cm_idx = 2;
|
|
|
}
|