From d0ac63b74e8248f12f93e8b73310663e1ce7ba46 Mon Sep 17 00:00:00 2001 From: Bellekallu Rajkiran Date: Tue, 19 Dec 2023 10:49:01 +0000 Subject: [PATCH] feature: Boilerplate for retrieving current voltage Related-To: NEO-9471 Signed-off-by: Bellekallu Rajkiran --- .../linux/sysman_os_frequency_imp.cpp | 9 +++++++- .../frequency/linux/sysman_os_frequency_imp.h | 3 +++ .../product_helper/sysman_product_helper.h | 3 +++ .../product_helper/sysman_product_helper_hw.h | 3 +++ .../sysman_product_helper_hw.inl | 5 +++++ .../linux/product_helper/CMakeLists.txt | 1 + .../sysman_product_helper_frequency_tests.cpp | 12 ++++++++++- .../sysman_product_helper_ras_tests.cpp | 21 ++++++++++--------- 8 files changed, 45 insertions(+), 12 deletions(-) diff --git a/level_zero/sysman/source/api/frequency/linux/sysman_os_frequency_imp.cpp b/level_zero/sysman/source/api/frequency/linux/sysman_os_frequency_imp.cpp index 9da042f038..91cab35b57 100644 --- a/level_zero/sysman/source/api/frequency/linux/sysman_os_frequency_imp.cpp +++ b/level_zero/sysman/source/api/frequency/linux/sysman_os_frequency_imp.cpp @@ -11,6 +11,7 @@ #include "shared/source/device/device.h" #include "shared/source/helpers/hw_info.h" +#include "level_zero/sysman/source/shared/linux/pmt/sysman_pmt.h" #include "level_zero/sysman/source/shared/linux/product_helper/sysman_product_helper.h" #include "level_zero/sysman/source/shared/linux/sysman_fs_access_interface.h" #include "level_zero/sysman/source/shared/linux/sysman_kmd_interface.h" @@ -160,7 +161,8 @@ ze_result_t LinuxFrequencyImp::osFrequencyGetState(zes_freq_state_t *pState) { } pState->pNext = nullptr; - pState->currentVoltage = -1.0; + getCurrentVoltage(pState->currentVoltage); + pState->throttleReasons = 0u; if (getThrottleReasonStatus()) { uint32_t val = 0; @@ -395,6 +397,10 @@ ze_result_t LinuxFrequencyImp::getMinVal(double &minVal) { return ZE_RESULT_SUCCESS; } +void LinuxFrequencyImp::getCurrentVoltage(double &voltage) { + pSysmanProductHelper->getCurrentVoltage(pPmt, voltage); +} + void LinuxFrequencyImp::init() { const std::string baseDir = pSysmanKmdInterface->getBasePath(subdeviceId); @@ -436,6 +442,7 @@ LinuxFrequencyImp::LinuxFrequencyImp(OsSysman *pOsSysman, ze_bool_t onSubdevice, pSysfsAccess = &pLinuxSysmanImp->getSysfsAccess(); pSysmanProductHelper = pLinuxSysmanImp->getSysmanProductHelper(); pSysmanKmdInterface = pLinuxSysmanImp->getSysmanKmdInterface(); + pPmt = pLinuxSysmanImp->getPlatformMonitoringTechAccess(subdeviceId); init(); } diff --git a/level_zero/sysman/source/api/frequency/linux/sysman_os_frequency_imp.h b/level_zero/sysman/source/api/frequency/linux/sysman_os_frequency_imp.h index 2acfbbbca5..86d8e387d5 100644 --- a/level_zero/sysman/source/api/frequency/linux/sysman_os_frequency_imp.h +++ b/level_zero/sysman/source/api/frequency/linux/sysman_os_frequency_imp.h @@ -18,6 +18,7 @@ namespace Sysman { class SysmanKmdInterface; class SysmanProductHelper; class SysFsAccessInterface; +class PlatformMonitoringTech; class LinuxFrequencyImp : public OsFrequency, NEO::NonCopyableOrMovableClass { public: @@ -56,6 +57,7 @@ class LinuxFrequencyImp : public OsFrequency, NEO::NonCopyableOrMovableClass { ze_result_t getMaxVal(double &maxVal); ze_result_t getMinVal(double &minVal); bool getThrottleReasonStatus(void); + void getCurrentVoltage(double &voltage); private: std::string minFreqFile; @@ -79,6 +81,7 @@ class LinuxFrequencyImp : public OsFrequency, NEO::NonCopyableOrMovableClass { uint32_t subdeviceId = 0; zes_freq_domain_t frequencyDomainNumber = ZES_FREQ_DOMAIN_GPU; SysmanProductHelper *pSysmanProductHelper = nullptr; + PlatformMonitoringTech *pPmt = nullptr; void init(); }; diff --git a/level_zero/sysman/source/shared/linux/product_helper/sysman_product_helper.h b/level_zero/sysman/source/shared/linux/product_helper/sysman_product_helper.h index e887b41ea9..e0473bb54d 100644 --- a/level_zero/sysman/source/shared/linux/product_helper/sysman_product_helper.h +++ b/level_zero/sysman/source/shared/linux/product_helper/sysman_product_helper.h @@ -59,6 +59,9 @@ class SysmanProductHelper { // Global Operations virtual bool isRepairStatusSupported() = 0; + // Voltage + virtual void getCurrentVoltage(PlatformMonitoringTech *pPmt, double &voltage) = 0; + virtual ~SysmanProductHelper() = default; protected: diff --git a/level_zero/sysman/source/shared/linux/product_helper/sysman_product_helper_hw.h b/level_zero/sysman/source/shared/linux/product_helper/sysman_product_helper_hw.h index df7c24e2a1..6bebefcd48 100644 --- a/level_zero/sysman/source/shared/linux/product_helper/sysman_product_helper_hw.h +++ b/level_zero/sysman/source/shared/linux/product_helper/sysman_product_helper_hw.h @@ -45,6 +45,9 @@ class SysmanProductHelperHw : public SysmanProductHelper { // global ops bool isRepairStatusSupported() override; + // Voltage + void getCurrentVoltage(PlatformMonitoringTech *pPmt, double &voltage) override; + ~SysmanProductHelperHw() override = default; protected: diff --git a/level_zero/sysman/source/shared/linux/product_helper/sysman_product_helper_hw.inl b/level_zero/sysman/source/shared/linux/product_helper/sysman_product_helper_hw.inl index 3ceef6019c..4bd19c4997 100644 --- a/level_zero/sysman/source/shared/linux/product_helper/sysman_product_helper_hw.inl +++ b/level_zero/sysman/source/shared/linux/product_helper/sysman_product_helper_hw.inl @@ -126,5 +126,10 @@ bool SysmanProductHelperHw::isRepairStatusSupported() { return false; } +template +void SysmanProductHelperHw::getCurrentVoltage(PlatformMonitoringTech *pPmt, double &voltage) { + voltage = -1.0; +} + } // namespace Sysman } // namespace L0 diff --git a/level_zero/sysman/test/unit_tests/sources/shared/linux/product_helper/CMakeLists.txt b/level_zero/sysman/test/unit_tests/sources/shared/linux/product_helper/CMakeLists.txt index fa6fe5c86c..a8d60e4609 100644 --- a/level_zero/sysman/test/unit_tests/sources/shared/linux/product_helper/CMakeLists.txt +++ b/level_zero/sysman/test/unit_tests/sources/shared/linux/product_helper/CMakeLists.txt @@ -12,6 +12,7 @@ if(UNIX) ${CMAKE_CURRENT_SOURCE_DIR}/sysman_product_helper_temperature_tests.cpp ${CMAKE_CURRENT_SOURCE_DIR}/sysman_product_helper_globalops_tests.cpp ${CMAKE_CURRENT_SOURCE_DIR}/sysman_product_helper_frequency_tests.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/sysman_product_helper_ras_tests.cpp ) endif() diff --git a/level_zero/sysman/test/unit_tests/sources/shared/linux/product_helper/sysman_product_helper_frequency_tests.cpp b/level_zero/sysman/test/unit_tests/sources/shared/linux/product_helper/sysman_product_helper_frequency_tests.cpp index 7d49db4ef4..43cb439509 100644 --- a/level_zero/sysman/test/unit_tests/sources/shared/linux/product_helper/sysman_product_helper_frequency_tests.cpp +++ b/level_zero/sysman/test/unit_tests/sources/shared/linux/product_helper/sysman_product_helper_frequency_tests.cpp @@ -5,6 +5,7 @@ * */ +#include "level_zero/sysman/source/shared/linux/pmt/sysman_pmt.h" #include "level_zero/sysman/source/shared/linux/product_helper/sysman_product_helper.h" #include "level_zero/sysman/test/unit_tests/sources/linux/mock_sysman_fixture.h" @@ -29,6 +30,15 @@ HWTEST2_F(SysmanProductHelperFrequencyTest, GivenFrequencyModuleWhenGettingStepS EXPECT_EQ((50.0 / 3), stepSize); } +TEST_F(SysmanProductHelperFrequencyTest, GivenSysmanProductHelperInstanceWhenGettingCurrentVoltageThenVerifyCurrentVoltageIsNegative) { + auto pSysmanProductHelper = L0::Sysman::SysmanProductHelper::create(defaultHwInfo->platform.eProductFamily); + std::unique_ptr pFsAccess = std::make_unique(); + auto pPmt = std::make_unique(pFsAccess.get(), 1, 0); + double voltage = 0; + pSysmanProductHelper->getCurrentVoltage(pPmt.get(), voltage); + EXPECT_EQ(voltage, -1.0); +} + } // namespace ult } // namespace Sysman -} // namespace L0 \ No newline at end of file +} // namespace L0 diff --git a/level_zero/sysman/test/unit_tests/sources/shared/linux/product_helper/sysman_product_helper_ras_tests.cpp b/level_zero/sysman/test/unit_tests/sources/shared/linux/product_helper/sysman_product_helper_ras_tests.cpp index bd0087fc3c..6324effccc 100644 --- a/level_zero/sysman/test/unit_tests/sources/shared/linux/product_helper/sysman_product_helper_ras_tests.cpp +++ b/level_zero/sysman/test/unit_tests/sources/shared/linux/product_helper/sysman_product_helper_ras_tests.cpp @@ -5,6 +5,7 @@ * */ +#include "shared/test/common/helpers/default_hw_info.h" #include "shared/test/common/test_macros/hw_test.h" #include "level_zero/sysman/source/api/ras/linux/ras_util/sysman_ras_util.h" @@ -19,21 +20,21 @@ namespace ult { using SysmanProductHelperRasTest = ::testing::Test; HWTEST2_F(SysmanProductHelperRasTest, GivenSysmanProductHelperInstanceWhenQueryingRasInterfaceThenVerifyProperInterfacesAreReturned, IsPVC) { - auto pSysmanProductHelper = L0::Sysman::SysmanProductHelper::create(defaultHwInfo->platform.eProductFamily); - EXPECT_EQ(RasInterfacePmu, pSysmanProductHelper->getGtRasUtilInterface()); - EXPECT_EQ(RasInterfaceGsc, pSysmanProductHelper->getHbmRasUtilInterface()); + auto pSysmanProductHelper = L0::Sysman::SysmanProductHelper::create(NEO::defaultHwInfo->platform.eProductFamily); + EXPECT_EQ(RasInterfaceType::pmu, pSysmanProductHelper->getGtRasUtilInterface()); + EXPECT_EQ(RasInterfaceType::gsc, pSysmanProductHelper->getHbmRasUtilInterface()); } -HWTEST2_F(SysmanProductHelperRasTest, GivenSysmanProductHelperInstanceWhenQueryingRasInterfaceThenVerifyProperInterfacesAreReturned, IsDg2) { - auto pSysmanProductHelper = L0::Sysman::SysmanProductHelper::create(defaultHwInfo->platform.eProductFamily); - EXPECT_EQ(RasInterfacePmu, pSysmanProductHelper->getGtRasUtilInterface()); - EXPECT_EQ(RasInterfaceNone, pSysmanProductHelper->getHbmRasUtilInterface()); +HWTEST2_F(SysmanProductHelperRasTest, GivenSysmanProductHelperInstanceWhenQueryingRasInterfaceThenVerifyProperInterfacesAreReturned, IsDG2) { + auto pSysmanProductHelper = L0::Sysman::SysmanProductHelper::create(NEO::defaultHwInfo->platform.eProductFamily); + EXPECT_EQ(RasInterfaceType::pmu, pSysmanProductHelper->getGtRasUtilInterface()); + EXPECT_EQ(RasInterfaceType::none, pSysmanProductHelper->getHbmRasUtilInterface()); } HWTEST2_F(SysmanProductHelperRasTest, GivenSysmanProductHelperInstanceWhenQueryingRasInterfaceThenVerifyProperInterfacesAreReturned, IsAtMostGen11) { - auto pSysmanProductHelper = L0::Sysman::SysmanProductHelper::create(defaultHwInfo->platform.eProductFamily); - EXPECT_EQ(RasInterfaceNone, pSysmanProductHelper->getGtRasUtilInterface()); - EXPECT_EQ(RasInterfaceNone, pSysmanProductHelper->getHbmRasUtilInterface()); + auto pSysmanProductHelper = L0::Sysman::SysmanProductHelper::create(NEO::defaultHwInfo->platform.eProductFamily); + EXPECT_EQ(RasInterfaceType::none, pSysmanProductHelper->getGtRasUtilInterface()); + EXPECT_EQ(RasInterfaceType::none, pSysmanProductHelper->getHbmRasUtilInterface()); } } // namespace ult