Mesa (main): ac/gpu_info: use hw_ip::ip_discovery_version to set IP versions

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jul 27 05:35:30 UTC 2022


Module: Mesa
Branch: main
Commit: 6504d7172c012dfd1298fe4d71e0f05dce953a55
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6504d7172c012dfd1298fe4d71e0f05dce953a55

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Thu Jul  7 18:54:04 2022 -0400

ac/gpu_info: use hw_ip::ip_discovery_version to set IP versions

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17411>

---

 include/drm-uapi/amdgpu_drm.h |  3 ++-
 src/amd/common/ac_gpu_info.c  | 30 ++++++++++++++++++++++--------
 2 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/include/drm-uapi/amdgpu_drm.h b/include/drm-uapi/amdgpu_drm.h
index 9d71d633068..bb50644a212 100644
--- a/include/drm-uapi/amdgpu_drm.h
+++ b/include/drm-uapi/amdgpu_drm.h
@@ -1091,7 +1091,8 @@ struct drm_amdgpu_info_hw_ip {
 	__u32  ib_size_alignment;
 	/** Bitmask of available rings. Bit 0 means ring 0, etc. */
 	__u32  available_rings;
-	__u32  _pad;
+	/** version info: bits 23:16 major, 15:8 minor, 7:0 revision */
+	__u32  ip_discovery_version;
 };
 
 struct drm_amdgpu_info_num_handles {
diff --git a/src/amd/common/ac_gpu_info.c b/src/amd/common/ac_gpu_info.c
index 972638e171d..d0705932c3e 100644
--- a/src/amd/common/ac_gpu_info.c
+++ b/src/amd/common/ac_gpu_info.c
@@ -106,6 +106,7 @@ struct drm_amdgpu_info_hw_ip {
    uint32_t ib_start_alignment;
    uint32_t ib_size_alignment;
    uint32_t available_rings;
+   uint32_t ip_discovery_version;
 };
 typedef struct _drmPciBusInfo {
    uint16_t domain;
@@ -563,8 +564,27 @@ bool ac_query_gpu_info(int fd, void *dev_p, struct radeon_info *info,
       if (r || !ip_info.available_rings)
          continue;
 
-      info->ip[ip_type].ver_major = ip_info.hw_ip_version_major;
-      info->ip[ip_type].ver_minor = ip_info.hw_ip_version_minor;
+      /* Gfx6-8 don't set ip_discovery_version. */
+      if (info->drm_minor >= 48 && ip_info.ip_discovery_version) {
+         info->ip[ip_type].ver_major = (ip_info.ip_discovery_version >> 16) & 0xff;
+         info->ip[ip_type].ver_minor = (ip_info.ip_discovery_version >> 8) & 0xff;
+      } else {
+         info->ip[ip_type].ver_major = ip_info.hw_ip_version_major;
+         info->ip[ip_type].ver_minor = ip_info.hw_ip_version_minor;
+
+         /* Fix incorrect IP versions reported by the kernel. */
+         if (device_info.family == FAMILY_NV &&
+             (ASICREV_IS(device_info.external_rev, NAVI10) ||
+              ASICREV_IS(device_info.external_rev, NAVI12) ||
+              ASICREV_IS(device_info.external_rev, NAVI14)))
+            info->ip[AMD_IP_GFX].ver_minor = info->ip[AMD_IP_COMPUTE].ver_minor = 1;
+         else if (device_info.family == FAMILY_NV ||
+                  device_info.family == FAMILY_VGH ||
+                  device_info.family == FAMILY_RMB ||
+                  device_info.family == FAMILY_GC_10_3_6 ||
+                  device_info.family == FAMILY_GC_10_3_7)
+            info->ip[AMD_IP_GFX].ver_minor = info->ip[AMD_IP_COMPUTE].ver_minor = 3;
+      }
       info->ip[ip_type].num_queues = util_bitcount(ip_info.available_rings);
       info->ib_alignment = MAX3(info->ib_alignment, ip_info.ib_start_alignment,
                                 ip_info.ib_size_alignment);
@@ -797,12 +817,6 @@ bool ac_query_gpu_info(int fd, void *dev_p, struct radeon_info *info,
       return false;
    }
 
-   /* Fix incorrect IP versions reported by the kernel. */
-   if (info->gfx_level == GFX10_3)
-      info->ip[AMD_IP_GFX].ver_minor = info->ip[AMD_IP_COMPUTE].ver_minor = 3;
-   else if (info->gfx_level == GFX10)
-      info->ip[AMD_IP_GFX].ver_minor = info->ip[AMD_IP_COMPUTE].ver_minor = 1;
-
    info->smart_access_memory = info->all_vram_visible &&
                                info->gfx_level >= GFX10_3 &&
                                util_get_cpu_caps()->family >= CPU_AMD_ZEN3 &&



More information about the mesa-commit mailing list