Add rsmi_dev_target_graphics_version_get

Updates:
   - [API] rsmi_dev_target_graphics_version_get, takes
     reported value from KFD -> parses into human-readable
     values. If device does not support, returns MAX UINT64
     value and RSMI_STATUS_NOT_SUPPORTED.
     Otherwise, puts into base10 format removing
     extra 0's + putting in correct format. If user
     provides nullptr, returning RSMI_STATUS_INVALID_ARGS.
    - [Test/Example] sys_info_read updated to include
     new rsmi_dev_target_graphics_version_get tests

Change-Id: I50f94e06b8733a5dec2eb08f284b44927f36abcd
Signed-off-by: Charis Poag <Charis.Poag@amd.com>
This commit is contained in:
Charis Poag
2024-01-29 14:25:24 -06:00
parent 73c65b6bfe
commit 5d2cd0c271
7 changed files with 94 additions and 10 deletions
+19 -4
View File
@@ -1144,16 +1144,31 @@ bool is_sudo_user() {
return isRunningWithSudo;
}
rsmi_status_t rsmi_get_gfx_target_version(uint32_t dv_ind,
std::string *gfx_version) {
// string output of gfx_<version>
rsmi_status_t rsmi_get_gfx_target_version(uint32_t dv_ind, std::string *gfx_version) {
std::ostringstream ss;
uint64_t kfd_gfx_version = 0;
GET_DEV_AND_KFDNODE_FROM_INDX
int ret = kfd_node->get_gfx_target_version(&kfd_gfx_version);
uint64_t orig_target_version = 0;
uint64_t major = 0;
uint64_t minor = 0;
uint64_t rev = 0;
if (ret == 0) {
ss << "gfx" << kfd_gfx_version;
*gfx_version = ss.str();
orig_target_version = std::stoull(std::to_string(kfd_gfx_version));
// separate out parts -> put back into normal graphics version format
major = static_cast<uint64_t>((orig_target_version / 10000) * 100);
minor = static_cast<uint64_t>((orig_target_version % 10000 / 100) * 10);
if (minor == 0) major *= 10; // 0 as a minor is correct, but bump up by 10
rev = static_cast<uint64_t>(orig_target_version % 100);
*gfx_version = "gfx" + std::to_string(major + minor + rev);
ss << __PRETTY_FUNCTION__
<< " | " << std::dec << "kfd_target_version = " << orig_target_version
<< "; major = " << major << "; minor = " << minor << "; rev = "
<< rev << "\nReporting rsmi_get_gfx_target_version = " << *gfx_version
<< "\n";
LOG_INFO(ss);
return RSMI_STATUS_SUCCESS;
} else {
*gfx_version = "Unknown";