diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_combios.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_combios.c | 27 | 
1 files changed, 19 insertions, 8 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c index 8bf83c4b414..81fc100be7e 100644 --- a/drivers/gpu/drm/radeon/radeon_combios.c +++ b/drivers/gpu/drm/radeon/radeon_combios.c @@ -2563,14 +2563,17 @@ void radeon_combios_get_power_modes(struct radeon_device *rdev)  	/* allocate 2 power states */  	rdev->pm.power_state = kzalloc(sizeof(struct radeon_power_state) * 2, GFP_KERNEL); -	if (!rdev->pm.power_state) { -		rdev->pm.default_power_state_index = state_index; -		rdev->pm.num_power_states = 0; - -		rdev->pm.current_power_state_index = rdev->pm.default_power_state_index; -		rdev->pm.current_clock_mode_index = 0; -		return; -	} +	if (rdev->pm.power_state) { +		/* allocate 1 clock mode per state */ +		rdev->pm.power_state[0].clock_info = +			kzalloc(sizeof(struct radeon_pm_clock_info) * 1, GFP_KERNEL); +		rdev->pm.power_state[1].clock_info = +			kzalloc(sizeof(struct radeon_pm_clock_info) * 1, GFP_KERNEL); +		if (!rdev->pm.power_state[0].clock_info || +		    !rdev->pm.power_state[1].clock_info) +			goto pm_failed; +	} else +		goto pm_failed;  	/* check for a thermal chip */  	offset = combios_get_table_offset(dev, COMBIOS_OVERDRIVE_INFO_TABLE); @@ -2735,6 +2738,14 @@ default_mode:  	rdev->pm.current_power_state_index = rdev->pm.default_power_state_index;  	rdev->pm.current_clock_mode_index = 0; +	return; + +pm_failed: +	rdev->pm.default_power_state_index = state_index; +	rdev->pm.num_power_states = 0; + +	rdev->pm.current_power_state_index = rdev->pm.default_power_state_index; +	rdev->pm.current_clock_mode_index = 0;  }  void radeon_external_tmds_setup(struct drm_encoder *encoder)  |