diff options
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c | 86 | 
1 files changed, 8 insertions, 78 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c index 6bf5a9ecf851..af94ac580d3e 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c @@ -3978,9 +3978,6 @@ static int gfx_v10_0_init_microcode(struct amdgpu_device *adev)  	char fw_name[40];  	char *wks = "";  	int err; -	struct amdgpu_firmware_info *info = NULL; -	const struct common_firmware_header *header = NULL; -	const struct gfx_firmware_header_v1_0 *cp_hdr;  	const struct rlc_firmware_header_v2_0 *rlc_hdr;  	uint16_t version_major;  	uint16_t version_minor; @@ -4039,9 +4036,7 @@ static int gfx_v10_0_init_microcode(struct amdgpu_device *adev)  	err = amdgpu_ucode_validate(adev->gfx.pfp_fw);  	if (err)  		goto out; -	cp_hdr = (const struct gfx_firmware_header_v1_0 *)adev->gfx.pfp_fw->data; -	adev->gfx.pfp_fw_version = le32_to_cpu(cp_hdr->header.ucode_version); -	adev->gfx.pfp_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version); +	amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_PFP);  	snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_me%s.bin", chip_name, wks);  	err = request_firmware(&adev->gfx.me_fw, fw_name, adev->dev); @@ -4050,9 +4045,7 @@ static int gfx_v10_0_init_microcode(struct amdgpu_device *adev)  	err = amdgpu_ucode_validate(adev->gfx.me_fw);  	if (err)  		goto out; -	cp_hdr = (const struct gfx_firmware_header_v1_0 *)adev->gfx.me_fw->data; -	adev->gfx.me_fw_version = le32_to_cpu(cp_hdr->header.ucode_version); -	adev->gfx.me_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version); +	amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_ME);  	snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_ce%s.bin", chip_name, wks);  	err = request_firmware(&adev->gfx.ce_fw, fw_name, adev->dev); @@ -4061,9 +4054,7 @@ static int gfx_v10_0_init_microcode(struct amdgpu_device *adev)  	err = amdgpu_ucode_validate(adev->gfx.ce_fw);  	if (err)  		goto out; -	cp_hdr = (const struct gfx_firmware_header_v1_0 *)adev->gfx.ce_fw->data; -	adev->gfx.ce_fw_version = le32_to_cpu(cp_hdr->header.ucode_version); -	adev->gfx.ce_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version); +	amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_CE);  	if (!amdgpu_sriov_vf(adev)) {  		snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_rlc.bin", chip_name); @@ -4093,9 +4084,8 @@ static int gfx_v10_0_init_microcode(struct amdgpu_device *adev)  	err = amdgpu_ucode_validate(adev->gfx.mec_fw);  	if (err)  		goto out; -	cp_hdr = (const struct gfx_firmware_header_v1_0 *)adev->gfx.mec_fw->data; -	adev->gfx.mec_fw_version = le32_to_cpu(cp_hdr->header.ucode_version); -	adev->gfx.mec_feature_version = le32_to_cpu(cp_hdr->ucode_feature_version); +	amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_MEC1); +	amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_MEC1_JT);  	snprintf(fw_name, sizeof(fw_name), "amdgpu/%s_mec2%s.bin", chip_name, wks);  	err = request_firmware(&adev->gfx.mec2_fw, fw_name, adev->dev); @@ -4103,78 +4093,18 @@ static int gfx_v10_0_init_microcode(struct amdgpu_device *adev)  		err = amdgpu_ucode_validate(adev->gfx.mec2_fw);  		if (err)  			goto out; -		cp_hdr = (const struct gfx_firmware_header_v1_0 *) -		adev->gfx.mec2_fw->data; -		adev->gfx.mec2_fw_version = -		le32_to_cpu(cp_hdr->header.ucode_version); -		adev->gfx.mec2_feature_version = -		le32_to_cpu(cp_hdr->ucode_feature_version); +		amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_MEC2); +		amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_MEC2_JT);  	} else {  		err = 0;  		adev->gfx.mec2_fw = NULL;  	} -	if (adev->firmware.load_type == AMDGPU_FW_LOAD_PSP) { -		info = &adev->firmware.ucode[AMDGPU_UCODE_ID_CP_PFP]; -		info->ucode_id = AMDGPU_UCODE_ID_CP_PFP; -		info->fw = adev->gfx.pfp_fw; -		header = (const struct common_firmware_header *)info->fw->data; -		adev->firmware.fw_size += -			ALIGN(le32_to_cpu(header->ucode_size_bytes), PAGE_SIZE); - -		info = &adev->firmware.ucode[AMDGPU_UCODE_ID_CP_ME]; -		info->ucode_id = AMDGPU_UCODE_ID_CP_ME; -		info->fw = adev->gfx.me_fw; -		header = (const struct common_firmware_header *)info->fw->data; -		adev->firmware.fw_size += -			ALIGN(le32_to_cpu(header->ucode_size_bytes), PAGE_SIZE); - -		info = &adev->firmware.ucode[AMDGPU_UCODE_ID_CP_CE]; -		info->ucode_id = AMDGPU_UCODE_ID_CP_CE; -		info->fw = adev->gfx.ce_fw; -		header = (const struct common_firmware_header *)info->fw->data; -		adev->firmware.fw_size += -			ALIGN(le32_to_cpu(header->ucode_size_bytes), PAGE_SIZE); - -		info = &adev->firmware.ucode[AMDGPU_UCODE_ID_CP_MEC1]; -		info->ucode_id = AMDGPU_UCODE_ID_CP_MEC1; -		info->fw = adev->gfx.mec_fw; -		header = (const struct common_firmware_header *)info->fw->data; -		cp_hdr = (const struct gfx_firmware_header_v1_0 *)info->fw->data; -		adev->firmware.fw_size += -			ALIGN(le32_to_cpu(header->ucode_size_bytes) - -			      le32_to_cpu(cp_hdr->jt_size) * 4, PAGE_SIZE); - -		info = &adev->firmware.ucode[AMDGPU_UCODE_ID_CP_MEC1_JT]; -		info->ucode_id = AMDGPU_UCODE_ID_CP_MEC1_JT; -		info->fw = adev->gfx.mec_fw; -		adev->firmware.fw_size += -			ALIGN(le32_to_cpu(cp_hdr->jt_size) * 4, PAGE_SIZE); - -		if (adev->gfx.mec2_fw) { -			info = &adev->firmware.ucode[AMDGPU_UCODE_ID_CP_MEC2]; -			info->ucode_id = AMDGPU_UCODE_ID_CP_MEC2; -			info->fw = adev->gfx.mec2_fw; -			header = (const struct common_firmware_header *)info->fw->data; -			cp_hdr = (const struct gfx_firmware_header_v1_0 *)info->fw->data; -			adev->firmware.fw_size += -				ALIGN(le32_to_cpu(header->ucode_size_bytes) - -				      le32_to_cpu(cp_hdr->jt_size) * 4, -				      PAGE_SIZE); -			info = &adev->firmware.ucode[AMDGPU_UCODE_ID_CP_MEC2_JT]; -			info->ucode_id = AMDGPU_UCODE_ID_CP_MEC2_JT; -			info->fw = adev->gfx.mec2_fw; -			adev->firmware.fw_size += -				ALIGN(le32_to_cpu(cp_hdr->jt_size) * 4, -				      PAGE_SIZE); -		} -	} -  	gfx_v10_0_check_fw_write_wait(adev);  out:  	if (err) {  		dev_err(adev->dev, -			"gfx10: Failed to load firmware \"%s\"\n", +			"gfx10: Failed to init firmware \"%s\"\n",  			fw_name);  		release_firmware(adev->gfx.pfp_fw);  		adev->gfx.pfp_fw = NULL; | 
