diff options
| -rw-r--r-- | drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c | 24 | 
1 files changed, 16 insertions, 8 deletions
| diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c index 4b14f259a147..0fb4e8c8f5e1 100644 --- a/drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c +++ b/drivers/gpu/drm/amd/powerplay/hwmgr/cz_hwmgr.c @@ -1402,14 +1402,22 @@ int  cz_dpm_update_vce_dpm(struct pp_hwmgr *hwmgr)  					     cz_hwmgr->vce_dpm.hard_min_clk,  						PPSMC_MSG_SetEclkHardMin));  	} else { -		/*EPR# 419220 -HW limitation to to */ -		cz_hwmgr->vce_dpm.hard_min_clk = hwmgr->vce_arbiter.ecclk; -		smum_send_msg_to_smc_with_parameter(hwmgr->smumgr, -					    PPSMC_MSG_SetEclkHardMin, -					    cz_get_eclk_level(hwmgr, -				     cz_hwmgr->vce_dpm.hard_min_clk, -					  PPSMC_MSG_SetEclkHardMin)); - +		/*Program HardMin based on the vce_arbiter.ecclk */ +		if (hwmgr->vce_arbiter.ecclk == 0) { +			smum_send_msg_to_smc_with_parameter(hwmgr->smumgr, +					    PPSMC_MSG_SetEclkHardMin, 0); +		/* disable ECLK DPM 0. Otherwise VCE could hang if +		 * switching SCLK from DPM 0 to 6/7 */ +			smum_send_msg_to_smc_with_parameter(hwmgr->smumgr, +					PPSMC_MSG_SetEclkSoftMin, 1); +		} else { +			cz_hwmgr->vce_dpm.hard_min_clk = hwmgr->vce_arbiter.ecclk; +			smum_send_msg_to_smc_with_parameter(hwmgr->smumgr, +						PPSMC_MSG_SetEclkHardMin, +						cz_get_eclk_level(hwmgr, +						cz_hwmgr->vce_dpm.hard_min_clk, +						PPSMC_MSG_SetEclkHardMin)); +		}  	}  	return 0;  } | 
