diff options
Diffstat (limited to 'drivers/gpu/drm/amd/pm/amdgpu_pm.c')
| -rw-r--r-- | drivers/gpu/drm/amd/pm/amdgpu_pm.c | 26 | 
1 files changed, 16 insertions, 10 deletions
| diff --git a/drivers/gpu/drm/amd/pm/amdgpu_pm.c b/drivers/gpu/drm/amd/pm/amdgpu_pm.c index 249cb0aeb5ae..41472ed99253 100644 --- a/drivers/gpu/drm/amd/pm/amdgpu_pm.c +++ b/drivers/gpu/drm/amd/pm/amdgpu_pm.c @@ -310,7 +310,7 @@ static ssize_t amdgpu_set_power_dpm_force_performance_level(struct device *dev,  	struct amdgpu_device *adev = drm_to_adev(ddev);  	const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs;  	enum amd_dpm_forced_level level; -	enum amd_dpm_forced_level current_level = 0xff; +	enum amd_dpm_forced_level current_level;  	int ret = 0;  	if (amdgpu_in_reset(adev)) @@ -350,6 +350,8 @@ static ssize_t amdgpu_set_power_dpm_force_performance_level(struct device *dev,  	if (pp_funcs->get_performance_level)  		current_level = amdgpu_dpm_get_performance_level(adev); +	else +		current_level = adev->pm.dpm.forced_level;  	if (current_level == level) {  		pm_runtime_mark_last_busy(ddev->dev); @@ -2019,15 +2021,15 @@ static struct amdgpu_device_attr amdgpu_device_attrs[] = {  	AMDGPU_DEVICE_ATTR_RW(pp_dpm_pcie,				ATTR_FLAG_BASIC),  	AMDGPU_DEVICE_ATTR_RW(pp_sclk_od,				ATTR_FLAG_BASIC),  	AMDGPU_DEVICE_ATTR_RW(pp_mclk_od,				ATTR_FLAG_BASIC), -	AMDGPU_DEVICE_ATTR_RW(pp_power_profile_mode,			ATTR_FLAG_BASIC), +	AMDGPU_DEVICE_ATTR_RW(pp_power_profile_mode,			ATTR_FLAG_BASIC|ATTR_FLAG_ONEVF),  	AMDGPU_DEVICE_ATTR_RW(pp_od_clk_voltage,			ATTR_FLAG_BASIC), -	AMDGPU_DEVICE_ATTR_RO(gpu_busy_percent,				ATTR_FLAG_BASIC), -	AMDGPU_DEVICE_ATTR_RO(mem_busy_percent,				ATTR_FLAG_BASIC), +	AMDGPU_DEVICE_ATTR_RO(gpu_busy_percent,				ATTR_FLAG_BASIC|ATTR_FLAG_ONEVF), +	AMDGPU_DEVICE_ATTR_RO(mem_busy_percent,				ATTR_FLAG_BASIC|ATTR_FLAG_ONEVF),  	AMDGPU_DEVICE_ATTR_RO(pcie_bw,					ATTR_FLAG_BASIC), -	AMDGPU_DEVICE_ATTR_RW(pp_features,				ATTR_FLAG_BASIC), -	AMDGPU_DEVICE_ATTR_RO(unique_id,				ATTR_FLAG_BASIC), -	AMDGPU_DEVICE_ATTR_RW(thermal_throttling_logging,		ATTR_FLAG_BASIC), -	AMDGPU_DEVICE_ATTR_RO(gpu_metrics,				ATTR_FLAG_BASIC), +	AMDGPU_DEVICE_ATTR_RW(pp_features,				ATTR_FLAG_BASIC|ATTR_FLAG_ONEVF), +	AMDGPU_DEVICE_ATTR_RO(unique_id,				ATTR_FLAG_BASIC|ATTR_FLAG_ONEVF), +	AMDGPU_DEVICE_ATTR_RW(thermal_throttling_logging,		ATTR_FLAG_BASIC|ATTR_FLAG_ONEVF), +	AMDGPU_DEVICE_ATTR_RO(gpu_metrics,				ATTR_FLAG_BASIC|ATTR_FLAG_ONEVF),  	AMDGPU_DEVICE_ATTR_RO(smartshift_apu_power,			ATTR_FLAG_BASIC,  			      .attr_update = ss_power_attr_update),  	AMDGPU_DEVICE_ATTR_RO(smartshift_dgpu_power,			ATTR_FLAG_BASIC, @@ -2087,10 +2089,14 @@ static int default_attr_update(struct amdgpu_device *adev, struct amdgpu_device_  		if (asic_type < CHIP_VEGA12)  			*states = ATTR_STATE_UNSUPPORTED;  	} else if (DEVICE_ATTR_IS(pp_dpm_vclk)) { -		if (!(asic_type == CHIP_VANGOGH)) +		if (!(asic_type == CHIP_VANGOGH || asic_type == CHIP_SIENNA_CICHLID))  			*states = ATTR_STATE_UNSUPPORTED;  	} else if (DEVICE_ATTR_IS(pp_dpm_dclk)) { -		if (!(asic_type == CHIP_VANGOGH)) +		if (!(asic_type == CHIP_VANGOGH || asic_type == CHIP_SIENNA_CICHLID)) +			*states = ATTR_STATE_UNSUPPORTED; +	} else if (DEVICE_ATTR_IS(pp_power_profile_mode)) { +		if (!adev->powerplay.pp_funcs->get_power_profile_mode || +		    amdgpu_dpm_get_power_profile_mode(adev, NULL) == -EOPNOTSUPP)  			*states = ATTR_STATE_UNSUPPORTED;  	} |