diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c | 26 | 
1 files changed, 22 insertions, 4 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c index 0e55823ef6ca..f0f00466b59f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c @@ -1434,13 +1434,31 @@ int amdgpu_mes_init_microcode(struct amdgpu_device *adev, int pipe)  	struct amdgpu_firmware_info *info;  	char ucode_prefix[30];  	char fw_name[40]; +	bool need_retry = false;  	int r; -	amdgpu_ucode_ip_version_decode(adev, GC_HWIP, ucode_prefix, sizeof(ucode_prefix)); -	snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mes%s.bin", -		ucode_prefix, -		pipe == AMDGPU_MES_SCHED_PIPE ? "" : "1"); +	amdgpu_ucode_ip_version_decode(adev, GC_HWIP, ucode_prefix, +				       sizeof(ucode_prefix)); +	if (adev->ip_versions[GC_HWIP][0] >= IP_VERSION(11, 0, 0)) { +		snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mes%s.bin", +			 ucode_prefix, +			 pipe == AMDGPU_MES_SCHED_PIPE ? "_2" : "1"); +		need_retry = true; +	} else { +		snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mes%s.bin", +			 ucode_prefix, +			 pipe == AMDGPU_MES_SCHED_PIPE ? "" : "1"); +	} +  	r = amdgpu_ucode_request(adev, &adev->mes.fw[pipe], fw_name); +	if (r && need_retry && pipe == AMDGPU_MES_SCHED_PIPE) { +		snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mes.bin", +			 ucode_prefix); +		DRM_INFO("try to fall back to %s\n", fw_name); +		r = amdgpu_ucode_request(adev, &adev->mes.fw[pipe], +					 fw_name); +	} +  	if (r)  		goto out; | 
