From a0c409be01ce437c6e1efbc9d4de30ac47c2670b Mon Sep 17 00:00:00 2001 From: "Kanangot Balakrishnan, Bindhiya" Date: Tue, 21 Jan 2025 15:42:05 -0600 Subject: [PATCH] [SWDEV-481004] Fix for incorrect gfx_version number (#52) The target_graphics_version was not formatted properly and was showing incorrect Target Name. Corrected this by fomatting major, minor and revision numbers. Signed-off-by: Bindhiya Kanangot Balakrishnan [ROCm/amdsmi commit: 6fa991c39c88748d109c6cb87d3f316fa0007ae3] --- projects/amdsmi/CHANGELOG.md | 2 ++ projects/amdsmi/py-interface/amdsmi_interface.py | 5 +---- projects/amdsmi/rocm_smi/python_smi_tools/rocm_smi.py | 5 +---- projects/amdsmi/rocm_smi/src/rocm_smi.cc | 2 +- projects/amdsmi/rocm_smi/src/rocm_smi_utils.cc | 10 ++++++---- 5 files changed, 11 insertions(+), 13 deletions(-) diff --git a/projects/amdsmi/CHANGELOG.md b/projects/amdsmi/CHANGELOG.md index 634da6b07f..18f27c800c 100644 --- a/projects/amdsmi/CHANGELOG.md +++ b/projects/amdsmi/CHANGELOG.md @@ -338,6 +338,8 @@ GPU2 0000:46:00.0 32 Gb/s 512 Gb/s XGMI ### Resolved issues +- **Fixed `amdsmi_get_gpu_asic_info` and `amd-smi static --asic` not displaying graphics version properly for MI2x, MI1x or Navi 3x ASICs.** + ### Upcoming changes ### Known issues diff --git a/projects/amdsmi/py-interface/amdsmi_interface.py b/projects/amdsmi/py-interface/amdsmi_interface.py index a5a847015b..a727329362 100644 --- a/projects/amdsmi/py-interface/amdsmi_interface.py +++ b/projects/amdsmi/py-interface/amdsmi_interface.py @@ -1674,10 +1674,7 @@ def amdsmi_get_gpu_asic_info( ) market_name = _pad_hex_value(asic_info_struct.market_name.decode("utf-8"), 4) - target_graphics_version = str(asic_info_struct.target_graphics_version) - if target_graphics_version == "9010": - hex_part = str(hex(int(str(asic_info_struct.target_graphics_version)[2:]))).replace("0x", "") - target_graphics_version = str(asic_info_struct.target_graphics_version)[:2] + hex_part + target_graphics_version = hex(asic_info_struct.target_graphics_version)[2:] asic_info = { "market_name": market_name, "vendor_id": asic_info_struct.vendor_id, diff --git a/projects/amdsmi/rocm_smi/python_smi_tools/rocm_smi.py b/projects/amdsmi/rocm_smi/python_smi_tools/rocm_smi.py index 6cc6d4126e..85977036d2 100755 --- a/projects/amdsmi/rocm_smi/python_smi_tools/rocm_smi.py +++ b/projects/amdsmi/rocm_smi/python_smi_tools/rocm_smi.py @@ -398,11 +398,8 @@ def getTargetGfxVersion(device, silent=False): market_name = str(getDeviceName(device, True)) gfx_ver_ret = "N/A" ret = rocmsmi.rsmi_dev_target_graphics_version_get(device, byref(target_graphics_version)) - target_graphics_version = str(target_graphics_version.value) + target_graphics_version = hex(target_graphics_version.value)[2:] if rsmi_ret_ok(ret, device, 'get_target_gfx_version', silent=silent): - if len(target_graphics_version) == 4 and ("Instinct MI2" in market_name): - hex_part = str(hex(int(str(target_graphics_version)[2:]))).replace("0x", "") - target_graphics_version = str(target_graphics_version)[:2] + hex_part gfx_ver_ret = "gfx" + str(target_graphics_version) return gfx_ver_ret diff --git a/projects/amdsmi/rocm_smi/src/rocm_smi.cc b/projects/amdsmi/rocm_smi/src/rocm_smi.cc index 6e927ccc1b..3c35735ba4 100644 --- a/projects/amdsmi/rocm_smi/src/rocm_smi.cc +++ b/projects/amdsmi/rocm_smi/src/rocm_smi.cc @@ -6627,7 +6627,7 @@ rsmi_status_t rsmi_dev_target_graphics_version_get(uint32_t dv_ind, } if (ret == RSMI_STATUS_SUCCESS) { version = amd::smi::removeString(version, "gfx"); - *gfx_version = std::stoull(version); + *gfx_version = uint64_t(std::stoull(version, nullptr, 16)); } ss << __PRETTY_FUNCTION__ << " | ======= end ======= " diff --git a/projects/amdsmi/rocm_smi/src/rocm_smi_utils.cc b/projects/amdsmi/rocm_smi/src/rocm_smi_utils.cc index c49a42f4ca..3eb9e9fec9 100644 --- a/projects/amdsmi/rocm_smi/src/rocm_smi_utils.cc +++ b/projects/amdsmi/rocm_smi/src/rocm_smi_utils.cc @@ -1209,11 +1209,13 @@ rsmi_status_t rsmi_get_gfx_target_version(uint32_t dv_ind, std::string *gfx_vers // separate out parts -> put back into normal graphics version format major = static_cast((orig_target_version / 10000) * 100); minor = static_cast((orig_target_version % 10000 / 100) * 10); - if ((minor == 0) && (countDigit(major) < 4)) { - major *= 10; // 0 as a minor is correct, but bump up by 10 - } rev = static_cast(orig_target_version % 100); - *gfx_version = "gfx" + std::to_string(major + minor + rev); + + ss << std::hex << rev; + std::string revision = ss.str(); + *gfx_version = "gfx" + std::to_string((major + minor)/10) + revision; + + ss.str(""); ss << __PRETTY_FUNCTION__ << " | " << std::dec << "kfd_target_version = " << orig_target_version << "; major = " << major << "; minor = " << minor << "; rev = "