drm/amdgpu: bump smc firmware header version to v2 (v2)
authorHuang Rui <ray.huang@amd.com>
Wed, 20 Feb 2019 11:43:36 +0000 (19:43 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 21 Jun 2019 23:59:24 +0000 (18:59 -0500)
This patch bumps smc firmware header version to v2 for storing soft pptable.

v2: fix the typo, and add prints for v2 header

Signed-off-by: Huang Rui <ray.huang@amd.com>
Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c
drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h

index 09f384ce8cd79c09a70c6e7623dee0850f358774..7081ad9f93e3ab7e2d7e8cfbc6567c3c7d6543c0 100644 (file)
@@ -77,6 +77,14 @@ void amdgpu_ucode_print_smc_hdr(const struct common_firmware_header *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));
+       } 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);
+
+               DRM_INFO("ppt_offset_bytes: %u\n", le32_to_cpu(v2_hdr->ppt_offset_bytes));
+               DRM_INFO("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);
        }
index 3806a7957c6f9c9ae839077da6c1fcbb6633b384..9b096228a02f93327e7a29260eee7c91f83b38e8 100644 (file)
@@ -49,6 +49,13 @@ struct smc_firmware_header_v1_0 {
        uint32_t ucode_start_addr;
 };
 
+/* version_major=2, version_minor=0 */
+struct smc_firmware_header_v2_0 {
+       struct smc_firmware_header_v1_0 v1_0;
+       uint32_t ppt_offset_bytes; /* soft pptable offset */
+       uint32_t ppt_size_bytes; /* soft pptable size */
+};
+
 /* version_major=1, version_minor=0 */
 struct psp_firmware_header_v1_0 {
        struct common_firmware_header header;
@@ -194,6 +201,7 @@ union amdgpu_firmware_header {
        struct common_firmware_header common;
        struct mc_firmware_header_v1_0 mc;
        struct smc_firmware_header_v1_0 smc;
+       struct smc_firmware_header_v2_0 smc_v2_0;
        struct psp_firmware_header_v1_0 psp;
        struct psp_firmware_header_v1_1 psp_v1_1;
        struct ta_firmware_header_v1_0 ta;