Browse Source

drm/amdgpu: add feature version for SDMA ucode

Signed-off-by: Jammy Zhou <Jammy.Zhou@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Jammy Zhou 10 years ago
parent
commit
cfa2104fbc

+ 1 - 0
drivers/gpu/drm/amd/amdgpu/amdgpu.h

@@ -1642,6 +1642,7 @@ struct amdgpu_sdma {
 	/* SDMA firmware */
 	/* SDMA firmware */
 	const struct firmware	*fw;
 	const struct firmware	*fw;
 	uint32_t		fw_version;
 	uint32_t		fw_version;
+	uint32_t		feature_version;
 
 
 	struct amdgpu_ring	ring;
 	struct amdgpu_ring	ring;
 };
 };

+ 1 - 1
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c

@@ -337,7 +337,7 @@ static int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file
 			if (info->query_fw.index >= 2)
 			if (info->query_fw.index >= 2)
 				return -EINVAL;
 				return -EINVAL;
 			fw_info.ver = adev->sdma[info->query_fw.index].fw_version;
 			fw_info.ver = adev->sdma[info->query_fw.index].fw_version;
-			fw_info.feature = 0;
+			fw_info.feature = adev->sdma[info->query_fw.index].feature_version;
 			break;
 			break;
 		default:
 		default:
 			return -EINVAL;
 			return -EINVAL;

+ 1 - 0
drivers/gpu/drm/amd/amdgpu/cik_sdma.c

@@ -500,6 +500,7 @@ static int cik_sdma_load_microcode(struct amdgpu_device *adev)
 		amdgpu_ucode_print_sdma_hdr(&hdr->header);
 		amdgpu_ucode_print_sdma_hdr(&hdr->header);
 		fw_size = le32_to_cpu(hdr->header.ucode_size_bytes) / 4;
 		fw_size = le32_to_cpu(hdr->header.ucode_size_bytes) / 4;
 		adev->sdma[i].fw_version = le32_to_cpu(hdr->header.ucode_version);
 		adev->sdma[i].fw_version = le32_to_cpu(hdr->header.ucode_version);
+		adev->sdma[i].feature_version = le32_to_cpu(hdr->ucode_feature_version);
 		fw_data = (const __le32 *)
 		fw_data = (const __le32 *)
 			(adev->sdma[i].fw->data + le32_to_cpu(hdr->header.ucode_array_offset_bytes));
 			(adev->sdma[i].fw->data + le32_to_cpu(hdr->header.ucode_array_offset_bytes));
 		WREG32(mmSDMA0_UCODE_ADDR + sdma_offsets[i], 0);
 		WREG32(mmSDMA0_UCODE_ADDR + sdma_offsets[i], 0);

+ 1 - 0
drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c

@@ -542,6 +542,7 @@ static int sdma_v2_4_load_microcode(struct amdgpu_device *adev)
 			amdgpu_ucode_print_sdma_hdr(&hdr->header);
 			amdgpu_ucode_print_sdma_hdr(&hdr->header);
 			fw_size = le32_to_cpu(hdr->header.ucode_size_bytes) / 4;
 			fw_size = le32_to_cpu(hdr->header.ucode_size_bytes) / 4;
 			adev->sdma[i].fw_version = le32_to_cpu(hdr->header.ucode_version);
 			adev->sdma[i].fw_version = le32_to_cpu(hdr->header.ucode_version);
+			adev->sdma[i].feature_version = le32_to_cpu(hdr->ucode_feature_version);
 
 
 			fw_data = (const __le32 *)
 			fw_data = (const __le32 *)
 				(adev->sdma[i].fw->data +
 				(adev->sdma[i].fw->data +

+ 1 - 0
drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c

@@ -631,6 +631,7 @@ static int sdma_v3_0_load_microcode(struct amdgpu_device *adev)
 		amdgpu_ucode_print_sdma_hdr(&hdr->header);
 		amdgpu_ucode_print_sdma_hdr(&hdr->header);
 		fw_size = le32_to_cpu(hdr->header.ucode_size_bytes) / 4;
 		fw_size = le32_to_cpu(hdr->header.ucode_size_bytes) / 4;
 		adev->sdma[i].fw_version = le32_to_cpu(hdr->header.ucode_version);
 		adev->sdma[i].fw_version = le32_to_cpu(hdr->header.ucode_version);
+		adev->sdma[i].feature_version = le32_to_cpu(hdr->ucode_feature_version);
 
 
 		fw_data = (const __le32 *)
 		fw_data = (const __le32 *)
 			(adev->sdma[i].fw->data +
 			(adev->sdma[i].fw->data +