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>
이 커밋은 다음에 포함됨:
Charis Poag
2024-01-29 14:25:24 -06:00
부모 73c65b6bfe
커밋 5d2cd0c271
7개의 변경된 파일과 94개의 추가작업 그리고 10개의 파일을 삭제
+30
파일 보기
@@ -5087,6 +5087,36 @@ rsmi_status_t rsmi_dev_memory_partition_reset(uint32_t dv_ind) {
CATCH
}
rsmi_status_t rsmi_dev_target_graphics_version_get(uint32_t dv_ind,
uint64_t *gfx_version) {
TRY
std::ostringstream ss;
ss << __PRETTY_FUNCTION__ << "| ======= start =======";
rsmi_status_t ret = RSMI_STATUS_NOT_SUPPORTED;
std::string version = "";
const uint64_t undefined_gfx_version = std::numeric_limits<uint64_t>::max();
LOG_TRACE(ss);
if (gfx_version == nullptr) {
ret = RSMI_STATUS_INVALID_ARGS;
} else {
*gfx_version = undefined_gfx_version;
ret = amd::smi::rsmi_get_gfx_target_version(dv_ind , &version);
}
if (ret == RSMI_STATUS_SUCCESS) {
version = amd::smi::removeString(version, "gfx");
*gfx_version = std::stoull(version);
}
ss << __PRETTY_FUNCTION__
<< " | ======= end ======= "
<< " | Returning: " << getRSMIStatusString(ret)
<< " | Device #: " << dv_ind
<< " | Type: N/A"
<< " | Data: " << ((gfx_version == nullptr) ? "nullptr": std::to_string(*gfx_version));
LOG_TRACE(ss);
return ret;
CATCH
}
enum iterator_handle_type {
FUNC_ITER = 0,
VARIANT_ITER,
+19 -4
파일 보기
@@ -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";