diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | 35 | 
1 files changed, 23 insertions, 12 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c index b313ce4c3e97..1beb08af347f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c @@ -68,23 +68,32 @@ void amdgpu_ucode_print_smc_hdr(const struct common_firmware_header *hdr)  {  	uint16_t version_major = le16_to_cpu(hdr->header_version_major);  	uint16_t version_minor = le16_to_cpu(hdr->header_version_minor); +	const struct smc_firmware_header_v1_0 *v1_0_hdr; +	const struct smc_firmware_header_v2_0 *v2_0_hdr; +	const struct smc_firmware_header_v2_1 *v2_1_hdr;  	DRM_DEBUG("SMC\n");  	amdgpu_ucode_print_common_hdr(hdr);  	if (version_major == 1) { -		const struct smc_firmware_header_v1_0 *smc_hdr = -			container_of(hdr, struct smc_firmware_header_v1_0, header); - -		DRM_DEBUG("ucode_start_addr: %u\n", le32_to_cpu(smc_hdr->ucode_start_addr)); +		v1_0_hdr = container_of(hdr, struct smc_firmware_header_v1_0, header); +		DRM_DEBUG("ucode_start_addr: %u\n", le32_to_cpu(v1_0_hdr->ucode_start_addr));  	} else if (version_major == 2) { -		const struct smc_firmware_header_v1_0 *v1_hdr = -			container_of(hdr, struct smc_firmware_header_v1_0, header); -		const struct smc_firmware_header_v2_0 *v2_hdr = -			container_of(v1_hdr, struct smc_firmware_header_v2_0, v1_0); +		switch (version_minor) { +		case 0: +			v2_0_hdr = container_of(hdr, struct smc_firmware_header_v2_0, v1_0.header); +			DRM_DEBUG("ppt_offset_bytes: %u\n", le32_to_cpu(v2_0_hdr->ppt_offset_bytes)); +			DRM_DEBUG("ppt_size_bytes: %u\n", le32_to_cpu(v2_0_hdr->ppt_size_bytes)); +			break; +		case 1: +			v2_1_hdr = container_of(hdr, struct smc_firmware_header_v2_1, v1_0.header); +			DRM_DEBUG("pptable_count: %u\n", le32_to_cpu(v2_1_hdr->pptable_count)); +			DRM_DEBUG("pptable_entry_offset: %u\n", le32_to_cpu(v2_1_hdr->pptable_entry_offset)); +			break; +		default: +			break; +		} -		DRM_DEBUG("ppt_offset_bytes: %u\n", le32_to_cpu(v2_hdr->ppt_offset_bytes)); -		DRM_DEBUG("ppt_size_bytes: %u\n", le32_to_cpu(v2_hdr->ppt_size_bytes));  	} else {  		DRM_ERROR("Unknown SMC ucode version: %u.%u\n", version_major, version_minor);  	} @@ -391,6 +400,8 @@ amdgpu_ucode_get_load_type(struct amdgpu_device *adev, int load_type)  	case CHIP_NAVI12:  	case CHIP_SIENNA_CICHLID:  	case CHIP_NAVY_FLOUNDER: +	case CHIP_VANGOGH: +	case CHIP_DIMGREY_CAVEFISH:  		if (!load_type)  			return AMDGPU_FW_LOAD_DIRECT;  		else @@ -586,8 +597,8 @@ static int amdgpu_ucode_patch_jt(struct amdgpu_firmware_info *ucode,  {  	const struct gfx_firmware_header_v1_0 *header = NULL;  	const struct common_firmware_header *comm_hdr = NULL; -	uint8_t* src_addr = NULL; -	uint8_t* dst_addr = NULL; +	uint8_t *src_addr = NULL; +	uint8_t *dst_addr = NULL;  	if (NULL == ucode->fw)  		return 0; | 
