diff options
| author | Greg Kroah-Hartman <[email protected]> | 2018-07-30 10:08:09 +0200 | 
|---|---|---|
| committer | Greg Kroah-Hartman <[email protected]> | 2018-07-30 10:08:09 +0200 | 
| commit | d2fc88a61b4ea99f574bde16e92718e22f312136 (patch) | |
| tree | f256841ebcbc3b90fc29d7fa751610ba9aac5a2b /drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | |
| parent | e16f4f3e0b7daecd48d4f944ab4147c1a6cb16a8 (diff) | |
| parent | acb1872577b346bd15ab3a3f8dff780d6cca4b70 (diff) | |
Merge 4.18-rc7 into driver-core-next
We need the driver core changes in here as well for testing.
Signed-off-by: Greg Kroah-Hartman <[email protected]>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 33 | 
1 files changed, 27 insertions, 6 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c index 127e87b470ff..1b4ad9b2a755 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c @@ -52,7 +52,7 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev)  	unsigned long bo_size;  	const char *fw_name;  	const struct common_firmware_header *hdr; -	unsigned version_major, version_minor, family_id; +	unsigned char fw_check;  	int r;  	INIT_DELAYED_WORK(&adev->vcn.idle_work, amdgpu_vcn_idle_work_handler); @@ -83,12 +83,33 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev)  	hdr = (const struct common_firmware_header *)adev->vcn.fw->data;  	adev->vcn.fw_version = le32_to_cpu(hdr->ucode_version); -	family_id = le32_to_cpu(hdr->ucode_version) & 0xff; -	version_major = (le32_to_cpu(hdr->ucode_version) >> 24) & 0xff; -	version_minor = (le32_to_cpu(hdr->ucode_version) >> 8) & 0xff; -	DRM_INFO("Found VCN firmware Version: %hu.%hu Family ID: %hu\n", -		version_major, version_minor, family_id); +	/* Bit 20-23, it is encode major and non-zero for new naming convention. +	 * This field is part of version minor and DRM_DISABLED_FLAG in old naming +	 * convention. Since the l:wq!atest version minor is 0x5B and DRM_DISABLED_FLAG +	 * is zero in old naming convention, this field is always zero so far. +	 * These four bits are used to tell which naming convention is present. +	 */ +	fw_check = (le32_to_cpu(hdr->ucode_version) >> 20) & 0xf; +	if (fw_check) { +		unsigned int dec_ver, enc_major, enc_minor, vep, fw_rev; + +		fw_rev = le32_to_cpu(hdr->ucode_version) & 0xfff; +		enc_minor = (le32_to_cpu(hdr->ucode_version) >> 12) & 0xff; +		enc_major = fw_check; +		dec_ver = (le32_to_cpu(hdr->ucode_version) >> 24) & 0xf; +		vep = (le32_to_cpu(hdr->ucode_version) >> 28) & 0xf; +		DRM_INFO("Found VCN firmware Version ENC: %hu.%hu DEC: %hu VEP: %hu Revision: %hu\n", +			enc_major, enc_minor, dec_ver, vep, fw_rev); +	} else { +		unsigned int version_major, version_minor, family_id; + +		family_id = le32_to_cpu(hdr->ucode_version) & 0xff; +		version_major = (le32_to_cpu(hdr->ucode_version) >> 24) & 0xff; +		version_minor = (le32_to_cpu(hdr->ucode_version) >> 8) & 0xff; +		DRM_INFO("Found VCN firmware Version: %hu.%hu Family ID: %hu\n", +			version_major, version_minor, family_id); +	}  	bo_size = AMDGPU_GPU_PAGE_ALIGN(le32_to_cpu(hdr->ucode_size_bytes) + 8)  		  +  AMDGPU_VCN_STACK_SIZE + AMDGPU_VCN_HEAP_SIZE  |