fix: [SWDEV-458862] [rocm/rocm_smi_lib]

Fixes reading pp_od_clk_voltage new variable format and size.

Code changes related to the following:
  * get_od_clk_volt_info()
  * get_od_clk_volt_curve_regions()
  * Unit tests
  * CLI options restored: --showclkvolt, --showvc, --showvoltagerange, --setvc
    * Rework: 162d1d24
  * Bump CLI version
  * CHANGELOG.md

Change-Id: I817ca224de923fdaa992df84592d63b4d5a12b22
Signed-off-by: Oliveira, Daniel <daniel.oliveira@amd.com>


[ROCm/rocm_smi_lib commit: 8e6d66e15b]
This commit is contained in:
Oliveira, Daniel
2024-05-03 02:58:31 -05:00
committed by Maisam Arif
parent 02a862bde1
commit af02873dfb
8 changed files with 294 additions and 90 deletions
@@ -93,9 +93,9 @@ void TestPerfDeterminism::Close() {
void TestPerfDeterminism::Run(void) {
rsmi_status_t err;
rsmi_dev_perf_level_t pfl;
rsmi_od_volt_freq_data_t odv;
rsmi_od_volt_freq_data_t odv{};
rsmi_status_t ret;
uint64_t clkvalue;
uint64_t clkvalue(0);
TestBase::Run();
if (setup_failed_) {
std::cout << "** SetUp Failed for this test. Skipping.**" << std::endl;
@@ -113,22 +113,7 @@ void TestVoltCurvRead::Run(void) {
<< amd::smi::getRSMIStatusString(ret, false) << "\n";
}
CHK_ERR_ASRT(ret)
err = rsmi_dev_od_volt_info_get(i, &odv);
IF_VERB(STANDARD) {
std::cout << "\t**rsmi_dev_od_volt_info_get(i, &odv): "
<< amd::smi::getRSMIStatusString(err, false)
<< "\n"
<< amd::smi::print_rsmi_od_volt_freq_data_t(&odv)
<< "\n";
}
if (err != RSMI_STATUS_SUCCESS) {
IF_VERB(STANDARD) {
std::cout <<
"\t**rsmi_dev_od_volt_info_get: Not supported on this machine"
<< std::endl;
}
continue;
}
// Verify api support checking functionality is working
err = rsmi_dev_od_volt_info_get(i, nullptr);
IF_VERB(STANDARD) {
@@ -144,5 +129,44 @@ void TestVoltCurvRead::Run(void) {
<< "\t**odv.num_regions = " << std::dec
<< odv.num_regions << "\n";
}
if (err == RSMI_STATUS_SUCCESS) {
std::cout << "\t**Frequency-voltage curve data:" << "\n";
std::cout << amd::smi::print_rsmi_od_volt_freq_data_t(&odv);
rsmi_freq_volt_region_t *regions{};
uint32_t num_regions;
regions = new rsmi_freq_volt_region_t[odv.num_regions];
ASSERT_TRUE(regions != nullptr);
num_regions = odv.num_regions;
err = rsmi_dev_od_volt_curve_regions_get(i, &num_regions, regions);
IF_VERB(STANDARD) {
std::cout << "\t**rsmi_dev_od_volt_curve_regions_get("
<< "i, &num_regions, regions): "
<< amd::smi::getRSMIStatusString(err, false) << "\n"
<< "\t**Number of regions: " << std::dec << num_regions
<< "\n";
}
ASSERT_TRUE(err == RSMI_STATUS_SUCCESS
|| err == RSMI_STATUS_NOT_SUPPORTED
|| err == RSMI_STATUS_UNEXPECTED_DATA
|| err == RSMI_STATUS_UNEXPECTED_SIZE
|| err == RSMI_STATUS_INVALID_ARGS);
if (err != RSMI_STATUS_SUCCESS) {
IF_VERB(STANDARD) {
std::cout << "\t**rsmi_dev_od_volt_curve_regions_get: "
"Not supported on this machine" << std::endl;
}
continue;
}
CHK_ERR_ASRT(err)
ASSERT_TRUE(num_regions == odv.num_regions);
std::cout << "\t**Frequency-voltage curve regions:" << std::endl;
std::cout << amd::smi::print_rsmi_od_volt_freq_regions(num_regions,
regions);
delete []regions;
}
}
}