drm/amdgpu/gfx10: use common function to init CP fw
authorLikun Gao <Likun.Gao@amd.com>
Tue, 20 Sep 2022 05:49:07 +0000 (13:49 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 29 Sep 2022 13:41:43 +0000 (09:41 -0400)
Use common function to init gfx v10 CP firmware ucode.

Signed-off-by: Likun Gao <Likun.Gao@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c

index 6bf5a9ecf851fce2378c291b0769c35d803ae464..af94ac580d3e1f6c5eb98c0d155a9c06246b81fa 100644 (file)
@@ -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;