drm/amdgpu: update ip discovery header to v4
authorLe Ma <le.ma@amd.com>
Wed, 31 Aug 2022 09:11:59 +0000 (17:11 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 9 Jun 2023 13:47:39 +0000 (09:47 -0400)
version 4 supports 64bit ip base address

Signed-off-by: Le Ma <le.ma@amd.com>
Signed-off-by: Hawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/include/discovery.h

index f150404..9181e57 100644 (file)
@@ -79,7 +79,14 @@ typedef struct ip_discovery_header
        uint32_t id;           /* Table ID */
        uint16_t num_dies;     /* Number of Dies */
        die_info die_info[16]; /* list die information for up to 16 dies */
-       uint16_t padding[1];   /* padding */
+       union {
+               uint16_t padding[1];    /* version <= 3 */
+               struct {                /* version == 4 */
+                       uint8_t base_addr_64_bit : 1; /* ip structures are using 64 bit base address */
+                       uint8_t reserved : 7;
+                       uint8_t reserved2;
+               };
+       };
 } ip_discovery_header;
 
 typedef struct ip
@@ -118,6 +125,26 @@ typedef struct ip_v3
        uint32_t base_address[1];               /* Base Address list. Corresponds to the num_base_address field*/
 } ip_v3;
 
+typedef struct ip_v4 {
+       uint16_t hw_id;                         /* Hardware ID */
+       uint8_t instance_number;                /* Instance number for the IP */
+       uint8_t num_base_address;               /* Number of base addresses*/
+       uint8_t major;                          /* Hardware ID.major version */
+       uint8_t minor;                          /* Hardware ID.minor version */
+       uint8_t revision;                       /* Hardware ID.revision version */
+#if defined(LITTLEENDIAN_CPU)
+       uint8_t sub_revision : 4;               /* HCID Sub-Revision */
+       uint8_t variant : 4;                    /* HW variant */
+#elif defined(BIGENDIAN_CPU)
+       uint8_t variant : 4;                    /* HW variant */
+       uint8_t sub_revision : 4;               /* HCID Sub-Revision */
+#endif
+       union {
+               uint32_t base_address[0];               /* 32-bit Base Address list. Corresponds to the num_base_address field*/
+               uint64_t base_address_64[0];            /* 64-bit Base Address list. Corresponds to the num_base_address field*/
+       } __packed;
+} ip_v4;
+
 typedef struct die_header
 {
        uint16_t die_id;
@@ -134,6 +161,7 @@ typedef struct ip_structure
                {
                        ip *ip_list;
                        ip_v3 *ip_v3_list;
+                       ip_v4 *ip_v4_list;
                };                                  /* IP list. Variable size*/
        } die;
 } ip_structure;