diff options
Diffstat (limited to 'drivers/gpu/drm/amd/pm')
| -rw-r--r-- | drivers/gpu/drm/amd/pm/amdgpu_dpm.c | 17 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu10_hwmgr.c | 8 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_5_ppt.c | 2 | 
3 files changed, 22 insertions, 5 deletions
| diff --git a/drivers/gpu/drm/amd/pm/amdgpu_dpm.c b/drivers/gpu/drm/amd/pm/amdgpu_dpm.c index 89fbee568be4..5504d81c77b7 100644 --- a/drivers/gpu/drm/amd/pm/amdgpu_dpm.c +++ b/drivers/gpu/drm/amd/pm/amdgpu_dpm.c @@ -173,6 +173,17 @@ bool amdgpu_dpm_is_baco_supported(struct amdgpu_device *adev)  	if (!pp_funcs || !pp_funcs->get_asic_baco_capability)  		return false; +	/* Don't use baco for reset in S3. +	 * This is a workaround for some platforms +	 * where entering BACO during suspend +	 * seems to cause reboots or hangs. +	 * This might be related to the fact that BACO controls +	 * power to the whole GPU including devices like audio and USB. +	 * Powering down/up everything may adversely affect these other +	 * devices.  Needs more investigation. +	 */ +	if (adev->in_s3) +		return false;  	mutex_lock(&adev->pm.mutex); @@ -500,6 +511,9 @@ int amdgpu_dpm_send_hbm_bad_pages_num(struct amdgpu_device *adev, uint32_t size)  	struct smu_context *smu = adev->powerplay.pp_handle;  	int ret = 0; +	if (!is_support_sw_smu(adev)) +		return -EOPNOTSUPP; +  	mutex_lock(&adev->pm.mutex);  	ret = smu_send_hbm_bad_pages_num(smu, size);  	mutex_unlock(&adev->pm.mutex); @@ -512,6 +526,9 @@ int amdgpu_dpm_send_hbm_bad_channel_flag(struct amdgpu_device *adev, uint32_t si  	struct smu_context *smu = adev->powerplay.pp_handle;  	int ret = 0; +	if (!is_support_sw_smu(adev)) +		return -EOPNOTSUPP; +  	mutex_lock(&adev->pm.mutex);  	ret = smu_send_hbm_bad_channel_flag(smu, size);  	mutex_unlock(&adev->pm.mutex); diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu10_hwmgr.c b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu10_hwmgr.c index 9ddd8491ff00..ede71de2343d 100644 --- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu10_hwmgr.c +++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu10_hwmgr.c @@ -773,13 +773,13 @@ static int smu10_dpm_force_dpm_level(struct pp_hwmgr *hwmgr,  		smum_send_msg_to_smc_with_parameter(hwmgr,  						PPSMC_MSG_SetHardMinFclkByFreq,  						hwmgr->display_config->num_display > 3 ? -						data->clock_vol_info.vdd_dep_on_fclk->entries[0].clk : +						(data->clock_vol_info.vdd_dep_on_fclk->entries[0].clk / 100) :  						min_mclk,  						NULL);  		smum_send_msg_to_smc_with_parameter(hwmgr,  						PPSMC_MSG_SetHardMinSocclkByFreq, -						data->clock_vol_info.vdd_dep_on_socclk->entries[0].clk, +						data->clock_vol_info.vdd_dep_on_socclk->entries[0].clk / 100,  						NULL);  		smum_send_msg_to_smc_with_parameter(hwmgr,  						PPSMC_MSG_SetHardMinVcn, @@ -792,11 +792,11 @@ static int smu10_dpm_force_dpm_level(struct pp_hwmgr *hwmgr,  						NULL);  		smum_send_msg_to_smc_with_parameter(hwmgr,  						PPSMC_MSG_SetSoftMaxFclkByFreq, -						data->clock_vol_info.vdd_dep_on_fclk->entries[index_fclk].clk, +						data->clock_vol_info.vdd_dep_on_fclk->entries[index_fclk].clk / 100,  						NULL);  		smum_send_msg_to_smc_with_parameter(hwmgr,  						PPSMC_MSG_SetSoftMaxSocclkByFreq, -						data->clock_vol_info.vdd_dep_on_socclk->entries[index_socclk].clk, +						data->clock_vol_info.vdd_dep_on_socclk->entries[index_socclk].clk / 100,  						NULL);  		smum_send_msg_to_smc_with_parameter(hwmgr,  						PPSMC_MSG_SetSoftMaxVcn, diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_5_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_5_ppt.c index 7bfac029e513..b81711c4ff33 100644 --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_5_ppt.c +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_5_ppt.c @@ -991,7 +991,7 @@ static int smu_v13_0_5_set_performance_level(struct smu_context *smu,  		return -EINVAL;  	} -	if (sclk_min && sclk_max) { +	if (sclk_min && sclk_max && smu_v13_0_5_clk_dpm_is_enabled(smu, SMU_SCLK)) {  		ret = smu_v13_0_5_set_soft_freq_limited_range(smu,  							    SMU_SCLK,  							    sclk_min, |