|
@@ -711,6 +711,47 @@ static int amdgpu_cgs_rel_firmware(struct cgs_device *cgs_device, enum cgs_ucode
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
+static uint16_t amdgpu_get_firmware_version(struct cgs_device *cgs_device,
|
|
|
+ enum cgs_ucode_id type)
|
|
|
+{
|
|
|
+ CGS_FUNC_ADEV;
|
|
|
+ uint16_t fw_version;
|
|
|
+
|
|
|
+ switch (type) {
|
|
|
+ case CGS_UCODE_ID_SDMA0:
|
|
|
+ fw_version = adev->sdma.instance[0].fw_version;
|
|
|
+ break;
|
|
|
+ case CGS_UCODE_ID_SDMA1:
|
|
|
+ fw_version = adev->sdma.instance[1].fw_version;
|
|
|
+ break;
|
|
|
+ case CGS_UCODE_ID_CP_CE:
|
|
|
+ fw_version = adev->gfx.ce_fw_version;
|
|
|
+ break;
|
|
|
+ case CGS_UCODE_ID_CP_PFP:
|
|
|
+ fw_version = adev->gfx.pfp_fw_version;
|
|
|
+ break;
|
|
|
+ case CGS_UCODE_ID_CP_ME:
|
|
|
+ fw_version = adev->gfx.me_fw_version;
|
|
|
+ break;
|
|
|
+ case CGS_UCODE_ID_CP_MEC:
|
|
|
+ fw_version = adev->gfx.mec_fw_version;
|
|
|
+ break;
|
|
|
+ case CGS_UCODE_ID_CP_MEC_JT1:
|
|
|
+ fw_version = adev->gfx.mec_fw_version;
|
|
|
+ break;
|
|
|
+ case CGS_UCODE_ID_CP_MEC_JT2:
|
|
|
+ fw_version = adev->gfx.mec_fw_version;
|
|
|
+ break;
|
|
|
+ case CGS_UCODE_ID_RLC_G:
|
|
|
+ fw_version = adev->gfx.rlc_fw_version;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ DRM_ERROR("firmware type %d do not have version\n", type);
|
|
|
+ fw_version = 0;
|
|
|
+ }
|
|
|
+ return fw_version;
|
|
|
+}
|
|
|
+
|
|
|
static int amdgpu_cgs_get_firmware_info(struct cgs_device *cgs_device,
|
|
|
enum cgs_ucode_id type,
|
|
|
struct cgs_firmware_info *info)
|
|
@@ -741,6 +782,7 @@ static int amdgpu_cgs_get_firmware_info(struct cgs_device *cgs_device,
|
|
|
info->mc_addr = gpu_addr;
|
|
|
info->image_size = data_size;
|
|
|
info->version = (uint16_t)le32_to_cpu(header->header.ucode_version);
|
|
|
+ info->fw_version = amdgpu_get_firmware_version(cgs_device, type);
|
|
|
info->feature_version = (uint16_t)le32_to_cpu(header->ucode_feature_version);
|
|
|
} else {
|
|
|
char fw_name[30] = {0};
|