diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/sumo_dpm.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/sumo_dpm.c | 32 | 
1 files changed, 19 insertions, 13 deletions
diff --git a/drivers/gpu/drm/radeon/sumo_dpm.c b/drivers/gpu/drm/radeon/sumo_dpm.c index 864761c0120..3f0e8d7b8db 100644 --- a/drivers/gpu/drm/radeon/sumo_dpm.c +++ b/drivers/gpu/drm/radeon/sumo_dpm.c @@ -71,7 +71,7 @@ static const u32 sumo_dtc[SUMO_PM_NUMBER_OF_TC] =  	SUMO_DTC_DFLT_14,  }; -struct sumo_ps *sumo_get_ps(struct radeon_ps *rps) +static struct sumo_ps *sumo_get_ps(struct radeon_ps *rps)  {  	struct sumo_ps *ps = rps->ps_priv; @@ -1202,14 +1202,10 @@ static void sumo_update_requested_ps(struct radeon_device *rdev,  int sumo_dpm_enable(struct radeon_device *rdev)  {  	struct sumo_power_info *pi = sumo_get_pi(rdev); -	int ret;  	if (sumo_dpm_enabled(rdev))  		return -EINVAL; -	ret = sumo_enable_clock_power_gating(rdev); -	if (ret) -		return ret;  	sumo_program_bootup_state(rdev);  	sumo_init_bsp(rdev);  	sumo_reset_am(rdev); @@ -1233,6 +1229,19 @@ int sumo_dpm_enable(struct radeon_device *rdev)  	if (pi->enable_boost)  		sumo_enable_boost_timer(rdev); +	sumo_update_current_ps(rdev, rdev->pm.dpm.boot_ps); + +	return 0; +} + +int sumo_dpm_late_enable(struct radeon_device *rdev) +{ +	int ret; + +	ret = sumo_enable_clock_power_gating(rdev); +	if (ret) +		return ret; +  	if (rdev->irq.installed &&  	    r600_is_internal_thermal_sensor(rdev->pm.int_thermal_type)) {  		ret = sumo_set_thermal_temperature_range(rdev, R600_TEMP_RANGE_MIN, R600_TEMP_RANGE_MAX); @@ -1242,8 +1251,6 @@ int sumo_dpm_enable(struct radeon_device *rdev)  		radeon_irq_set(rdev);  	} -	sumo_update_current_ps(rdev, rdev->pm.dpm.boot_ps); -  	return 0;  } @@ -1319,8 +1326,6 @@ int sumo_dpm_set_power_state(struct radeon_device *rdev)  	if (pi->enable_dpm)  		sumo_set_uvd_clock_after_set_eng_clock(rdev, new_ps, old_ps); -	rdev->pm.dpm.forced_level = RADEON_DPM_FORCED_LEVEL_AUTO; -  	return 0;  } @@ -1479,9 +1484,6 @@ static int sumo_parse_power_table(struct radeon_device *rdev)  	if (!rdev->pm.dpm.ps)  		return -ENOMEM;  	power_state_offset = (u8 *)state_array->states; -	rdev->pm.dpm.platform_caps = le32_to_cpu(power_info->pplib.ulPlatformCaps); -	rdev->pm.dpm.backbias_response_time = le16_to_cpu(power_info->pplib.usBackbiasTime); -	rdev->pm.dpm.voltage_response_time = le16_to_cpu(power_info->pplib.usVoltageTime);  	for (i = 0; i < state_array->ucNumEntries; i++) {  		u8 *idx;  		power_state = (union pplib_power_state *)power_state_offset; @@ -1767,6 +1769,10 @@ int sumo_dpm_init(struct radeon_device *rdev)  	sumo_construct_boot_and_acpi_state(rdev); +	ret = r600_get_platform_caps(rdev); +	if (ret) +		return ret; +  	ret = sumo_parse_power_table(rdev);  	if (ret)  		return ret; @@ -1802,7 +1808,7 @@ void sumo_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev  						      struct seq_file *m)  {  	struct sumo_power_info *pi = sumo_get_pi(rdev); -	struct radeon_ps *rps = rdev->pm.dpm.current_ps; +	struct radeon_ps *rps = &pi->current_rps;  	struct sumo_ps *ps = sumo_get_ps(rps);  	struct sumo_pl *pl;  	u32 current_index =  | 
