From b9837ef0688cebd2332b701b66c87f12d4d147c8 Mon Sep 17 00:00:00 2001 From: "Bari, Pratik" Date: Sun, 9 Jul 2023 13:27:58 +0000 Subject: [PATCH] feature(sysman): Added changes for Porting Frequency API The new classes SysmanKmdInterface, SysmanKmdInterfaceI915 and SysmanKmdInterfaceXe have been introduced. A map is maintained in the SysmanKmdInterfaceI915 and SysmanKmdInterfaceXe class for the sysfs file names. The access specifier of the function getDrmVersion has been changed from protected to public so as to use it in the sysman code. This is required for the SysmanKmdInterface pointer to point to the SysmanKmdInterfaceI915 and SysmanKmdInterfaceXe accordingly. The ULTs have been added for the new sysfs file path corresponding to the i915 and the Xe driver. Related-To: LOCI-4399 Signed-off-by: Bari, Pratik --- .../linux/sysman_os_frequency_imp_prelim.cpp | 56 ++++++------- .../linux/sysman_os_frequency_imp_prelim.h | 3 + level_zero/sysman/source/linux/CMakeLists.txt | 2 + .../source/linux/sysman_kmd_interface.cpp | 83 +++++++++++++++++++ .../source/linux/sysman_kmd_interface.h | 77 +++++++++++++++++ .../sysman/source/linux/zes_os_sysman_imp.cpp | 4 + .../sysman/source/linux/zes_os_sysman_imp.h | 3 + .../linux/test_zes_frequency_prelim.cpp | 43 ++++++++++ .../linux/os_frequency_imp_prelim.cpp | 58 ++++++------- .../frequency/linux/os_frequency_imp_prelim.h | 6 ++ .../source/sysman/linux/os_sysman_imp.cpp | 3 + .../tools/source/sysman/linux/os_sysman_imp.h | 8 ++ .../linux/mock_sysfs_frequency_prelim.h | 2 + .../linux/test_zes_frequency_prelim.cpp | 48 ++++++++++- shared/source/os_interface/linux/drm_neo.h | 2 +- 15 files changed, 331 insertions(+), 67 deletions(-) create mode 100644 level_zero/sysman/source/linux/sysman_kmd_interface.cpp create mode 100644 level_zero/sysman/source/linux/sysman_kmd_interface.h diff --git a/level_zero/sysman/source/frequency/linux/sysman_os_frequency_imp_prelim.cpp b/level_zero/sysman/source/frequency/linux/sysman_os_frequency_imp_prelim.cpp index fd1da0d28f..8cc8e5f1b2 100644 --- a/level_zero/sysman/source/frequency/linux/sysman_os_frequency_imp_prelim.cpp +++ b/level_zero/sysman/source/frequency/linux/sysman_os_frequency_imp_prelim.cpp @@ -11,6 +11,7 @@ #include "shared/source/device/device.h" #include "shared/source/helpers/hw_info.h" +#include "level_zero/sysman/source/linux/sysman_kmd_interface.h" #include "level_zero/sysman/source/linux/zes_os_sysman_imp.h" #include @@ -381,46 +382,37 @@ ze_result_t LinuxFrequencyImp::getMinVal(double &minVal) { } void LinuxFrequencyImp::init() { - const std::string baseDir = "gt/gt" + std::to_string(subdeviceId) + "/"; + + const std::string baseDir = pSysmanKmdInterface->getBasePath(subdeviceId); + bool baseDirectoryExists = false; + if (pSysfsAccess->directoryExists(baseDir)) { - minFreqFile = baseDir + "rps_min_freq_mhz"; - minDefaultFreqFile = baseDir + ".defaults/rps_min_freq_mhz"; - maxFreqFile = baseDir + "rps_max_freq_mhz"; - boostFreqFile = baseDir + "rps_boost_freq_mhz"; - maxDefaultFreqFile = baseDir + ".defaults/rps_max_freq_mhz"; - requestFreqFile = baseDir + "punit_req_freq_mhz"; - tdpFreqFile = baseDir + "rapl_PL1_freq_mhz"; - actualFreqFile = baseDir + "rps_act_freq_mhz"; - efficientFreqFile = baseDir + "rps_RP1_freq_mhz"; - maxValFreqFile = baseDir + "rps_RP0_freq_mhz"; - minValFreqFile = baseDir + "rps_RPn_freq_mhz"; - throttleReasonStatusFile = baseDir + "throttle_reason_status"; - throttleReasonPL1File = baseDir + "throttle_reason_pl1"; - throttleReasonPL2File = baseDir + "throttle_reason_pl2"; - throttleReasonPL4File = baseDir + "throttle_reason_pl4"; - throttleReasonThermalFile = baseDir + "throttle_reason_thermal"; - } else { - minFreqFile = "gt_min_freq_mhz"; - maxFreqFile = "gt_max_freq_mhz"; - boostFreqFile = "gt_boost_freq_mhz"; - requestFreqFile = "gt_cur_freq_mhz"; - tdpFreqFile = "rapl_PL1_freq_mhz"; - actualFreqFile = "gt_act_freq_mhz"; - efficientFreqFile = "gt_RP1_freq_mhz"; - maxValFreqFile = "gt_RP0_freq_mhz"; - minValFreqFile = "gt_RPn_freq_mhz"; - throttleReasonStatusFile = "gt_throttle_reason_status"; - throttleReasonPL1File = "gt_throttle_reason_status_pl1"; - throttleReasonPL2File = "gt_throttle_reason_status_pl2"; - throttleReasonPL4File = "gt_throttle_reason_status_pl4"; - throttleReasonThermalFile = "gt_throttle_reason_status_thermal"; + baseDirectoryExists = true; } + + minFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinFrequency, subdeviceId, baseDirectoryExists); + minDefaultFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinDefaultFrequency, subdeviceId, baseDirectoryExists); + maxFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxFrequency, subdeviceId, baseDirectoryExists); + maxDefaultFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxDefaultFrequency, subdeviceId, baseDirectoryExists); + boostFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameBoostFrequency, subdeviceId, baseDirectoryExists); + requestFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameCurrentFrequency, subdeviceId, baseDirectoryExists); + tdpFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameTdpFrequency, subdeviceId, baseDirectoryExists); + actualFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameActualFrequency, subdeviceId, baseDirectoryExists); + efficientFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameEfficientFrequency, subdeviceId, baseDirectoryExists); + maxValFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxValueFrequency, subdeviceId, baseDirectoryExists); + minValFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinValueFrequency, subdeviceId, baseDirectoryExists); + throttleReasonStatusFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonStatus, subdeviceId, baseDirectoryExists); + throttleReasonPL1File = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL1, subdeviceId, baseDirectoryExists); + throttleReasonPL2File = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL2, subdeviceId, baseDirectoryExists); + throttleReasonPL4File = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL4, subdeviceId, baseDirectoryExists); + throttleReasonThermalFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonThermal, subdeviceId, baseDirectoryExists); } LinuxFrequencyImp::LinuxFrequencyImp(OsSysman *pOsSysman, ze_bool_t onSubdevice, uint32_t subdeviceId, zes_freq_domain_t frequencyDomainNumber) : isSubdevice(onSubdevice), subdeviceId(subdeviceId), frequencyDomainNumber(frequencyDomainNumber) { LinuxSysmanImp *pLinuxSysmanImp = static_cast(pOsSysman); pSysfsAccess = &pLinuxSysmanImp->getSysfsAccess(); productFamily = pLinuxSysmanImp->getProductFamily(); + pSysmanKmdInterface = pLinuxSysmanImp->getSysmanKmdInterface(); init(); } diff --git a/level_zero/sysman/source/frequency/linux/sysman_os_frequency_imp_prelim.h b/level_zero/sysman/source/frequency/linux/sysman_os_frequency_imp_prelim.h index 9dad31cc91..bdff96a2d7 100644 --- a/level_zero/sysman/source/frequency/linux/sysman_os_frequency_imp_prelim.h +++ b/level_zero/sysman/source/frequency/linux/sysman_os_frequency_imp_prelim.h @@ -16,6 +16,8 @@ namespace L0 { namespace Sysman { +class SysmanKmdInterface; + class LinuxFrequencyImp : public OsFrequency, NEO::NonCopyableOrMovableClass { public: ze_result_t osFrequencyGetProperties(zes_freq_properties_t &properties) override; @@ -40,6 +42,7 @@ class LinuxFrequencyImp : public OsFrequency, NEO::NonCopyableOrMovableClass { ~LinuxFrequencyImp() override = default; protected: + SysmanKmdInterface *pSysmanKmdInterface = nullptr; SysfsAccess *pSysfsAccess = nullptr; ze_result_t getMin(double &min); ze_result_t setMin(double min); diff --git a/level_zero/sysman/source/linux/CMakeLists.txt b/level_zero/sysman/source/linux/CMakeLists.txt index 47ded3e6bd..bfcde754da 100644 --- a/level_zero/sysman/source/linux/CMakeLists.txt +++ b/level_zero/sysman/source/linux/CMakeLists.txt @@ -16,6 +16,8 @@ if(UNIX) ${CMAKE_CURRENT_SOURCE_DIR}/sysman_hw_device_id_linux.h ${CMAKE_CURRENT_SOURCE_DIR}/zes_os_sysman_driver_imp.cpp ${CMAKE_CURRENT_SOURCE_DIR}/zes_os_sysman_driver_imp.h + ${CMAKE_CURRENT_SOURCE_DIR}/sysman_kmd_interface.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/sysman_kmd_interface.h ) endif() diff --git a/level_zero/sysman/source/linux/sysman_kmd_interface.cpp b/level_zero/sysman/source/linux/sysman_kmd_interface.cpp new file mode 100644 index 0000000000..6d82092929 --- /dev/null +++ b/level_zero/sysman/source/linux/sysman_kmd_interface.cpp @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2023 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "level_zero/sysman/source/linux/sysman_kmd_interface.h" + +#include "shared/source/os_interface/linux/drm_neo.h" + +namespace L0 { +namespace Sysman { + +std::unique_ptr SysmanKmdInterface::create(const NEO::Drm &drm) { + std::unique_ptr pSysmanKmdInterface; + auto drmVersion = drm.getDrmVersion(drm.getFileDescriptor()); + if ("xe" == drmVersion) { + pSysmanKmdInterface = std::make_unique(); + } else { + pSysmanKmdInterface = std::make_unique(); + } + return pSysmanKmdInterface; +} + +std::string SysmanKmdInterfaceI915::getBasePath(int subDeviceId) const { + return "gt/gt" + std::to_string(subDeviceId) + "/"; +} + +std::string SysmanKmdInterfaceXe::getBasePath(int subDeviceId) const { + return "device/gt" + std::to_string(subDeviceId) + "/"; +} + +void SysmanKmdInterfaceI915::initSysfsNameToFileMap() { + sysfsNameToFileMap[SysfsName::sysfsNameMinFrequency] = std::make_pair("rps_min_freq_mhz", "gt_min_freq_mhz"); + sysfsNameToFileMap[SysfsName::sysfsNameMaxFrequency] = std::make_pair("rps_max_freq_mhz", "gt_max_freq_mhz"); + sysfsNameToFileMap[SysfsName::sysfsNameMinDefaultFrequency] = std::make_pair(".defaults/rps_min_freq_mhz", ""); + sysfsNameToFileMap[SysfsName::sysfsNameMaxDefaultFrequency] = std::make_pair(".defaults/rps_max_freq_mhz", ""); + sysfsNameToFileMap[SysfsName::sysfsNameBoostFrequency] = std::make_pair("rps_boost_freq_mhz", "gt_boost_freq_mhz"); + sysfsNameToFileMap[SysfsName::sysfsNameCurrentFrequency] = std::make_pair("punit_req_freq_mhz", "gt_cur_freq_mhz"); + sysfsNameToFileMap[SysfsName::sysfsNameTdpFrequency] = std::make_pair("rapl_PL1_freq_mhz", "rapl_PL1_freq_mhz"); + sysfsNameToFileMap[SysfsName::sysfsNameActualFrequency] = std::make_pair("rps_act_freq_mhz", "gt_act_freq_mhz"); + sysfsNameToFileMap[SysfsName::sysfsNameEfficientFrequency] = std::make_pair("rps_RP1_freq_mhz", "gt_RP1_freq_mhz"); + sysfsNameToFileMap[SysfsName::sysfsNameMaxValueFrequency] = std::make_pair("rps_RP0_freq_mhz", "gt_RP0_freq_mhz"); + sysfsNameToFileMap[SysfsName::sysfsNameMinValueFrequency] = std::make_pair("rps_RPn_freq_mhz", "gt_RPn_freq_mhz"); + sysfsNameToFileMap[SysfsName::sysfsNameThrottleReasonStatus] = std::make_pair("throttle_reason_status", "gt_throttle_reason_status"); + sysfsNameToFileMap[SysfsName::sysfsNameThrottleReasonPL1] = std::make_pair("throttle_reason_pl1", "gt_throttle_reason_status_pl1"); + sysfsNameToFileMap[SysfsName::sysfsNameThrottleReasonPL2] = std::make_pair("throttle_reason_pl2", "gt_throttle_reason_status_pl2"); + sysfsNameToFileMap[SysfsName::sysfsNameThrottleReasonPL4] = std::make_pair("throttle_reason_pl4", "gt_throttle_reason_status_pl4"); + sysfsNameToFileMap[SysfsName::sysfsNameThrottleReasonThermal] = std::make_pair("throttle_reason_thermal", "gt_throttle_reason_status_thermal"); +} + +void SysmanKmdInterfaceXe::initSysfsNameToFileMap() { + sysfsNameToFileMap[SysfsName::sysfsNameMinFrequency] = std::make_pair("rps_min_freq_mhz", ""); + sysfsNameToFileMap[SysfsName::sysfsNameMaxFrequency] = std::make_pair("rps_max_freq_mhz", ""); + sysfsNameToFileMap[SysfsName::sysfsNameMinDefaultFrequency] = std::make_pair(".defaults/rps_min_freq_mhz", ""); + sysfsNameToFileMap[SysfsName::sysfsNameMaxDefaultFrequency] = std::make_pair(".defaults/rps_max_freq_mhz", ""); + sysfsNameToFileMap[SysfsName::sysfsNameBoostFrequency] = std::make_pair("rps_boost_freq_mhz", ""); + sysfsNameToFileMap[SysfsName::sysfsNameCurrentFrequency] = std::make_pair("punit_req_freq_mhz", ""); + sysfsNameToFileMap[SysfsName::sysfsNameTdpFrequency] = std::make_pair("rapl_PL1_freq_mhz", ""); + sysfsNameToFileMap[SysfsName::sysfsNameActualFrequency] = std::make_pair("rps_act_freq_mhz", ""); + sysfsNameToFileMap[SysfsName::sysfsNameEfficientFrequency] = std::make_pair("rps_RP1_freq_mhz", ""); + sysfsNameToFileMap[SysfsName::sysfsNameMaxValueFrequency] = std::make_pair("rps_RP0_freq_mhz", ""); + sysfsNameToFileMap[SysfsName::sysfsNameMinValueFrequency] = std::make_pair("rps_RPn_freq_mhz", ""); + sysfsNameToFileMap[SysfsName::sysfsNameThrottleReasonStatus] = std::make_pair("throttle_reason_status", ""); + sysfsNameToFileMap[SysfsName::sysfsNameThrottleReasonPL1] = std::make_pair("throttle_reason_pl1", ""); + sysfsNameToFileMap[SysfsName::sysfsNameThrottleReasonPL2] = std::make_pair("throttle_reason_pl2", ""); + sysfsNameToFileMap[SysfsName::sysfsNameThrottleReasonPL4] = std::make_pair("throttle_reason_pl4", ""); + sysfsNameToFileMap[SysfsName::sysfsNameThrottleReasonThermal] = std::make_pair("throttle_reason_thermal", ""); +} + +std::string SysmanKmdInterfaceI915::getSysfsFilePath(SysfsName sysfsName, int subDeviceId, bool baseDirectoryExists) { + std::string filePath = baseDirectoryExists ? getBasePath(subDeviceId) + sysfsNameToFileMap[sysfsName].first : sysfsNameToFileMap[sysfsName].second; + return filePath; +} + +std::string SysmanKmdInterfaceXe::getSysfsFilePath(SysfsName sysfsName, int subDeviceId, bool baseDirectoryExists) { + std::string filePath = baseDirectoryExists ? getBasePath(subDeviceId) + sysfsNameToFileMap[sysfsName].first : sysfsNameToFileMap[sysfsName].second; + return filePath; +} + +} // namespace Sysman +} // namespace L0 \ No newline at end of file diff --git a/level_zero/sysman/source/linux/sysman_kmd_interface.h b/level_zero/sysman/source/linux/sysman_kmd_interface.h new file mode 100644 index 0000000000..6e920fe856 --- /dev/null +++ b/level_zero/sysman/source/linux/sysman_kmd_interface.h @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2023 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#pragma once + +#include +#include + +namespace NEO { +class Drm; +} // namespace NEO + +namespace L0 { +namespace Sysman { + +typedef std::pair valuePair; + +enum class SysfsName { + sysfsNameMinFrequency, + sysfsNameMaxFrequency, + sysfsNameMinDefaultFrequency, + sysfsNameMaxDefaultFrequency, + sysfsNameBoostFrequency, + sysfsNameCurrentFrequency, + sysfsNameTdpFrequency, + sysfsNameActualFrequency, + sysfsNameEfficientFrequency, + sysfsNameMaxValueFrequency, + sysfsNameMinValueFrequency, + sysfsNameThrottleReasonStatus, + sysfsNameThrottleReasonPL1, + sysfsNameThrottleReasonPL2, + sysfsNameThrottleReasonPL4, + sysfsNameThrottleReasonThermal, +}; + +class SysmanKmdInterface { + public: + virtual ~SysmanKmdInterface() = default; + static std::unique_ptr create(const NEO::Drm &drm); + + virtual std::string getBasePath(int subDeviceId) const = 0; + virtual std::string getSysfsFilePath(SysfsName sysfsName, int subDeviceId, bool baseDirectoryExists) = 0; +}; + +class SysmanKmdInterfaceI915 : public SysmanKmdInterface { + public: + SysmanKmdInterfaceI915() { initSysfsNameToFileMap(); } + ~SysmanKmdInterfaceI915() override = default; + + std::string getBasePath(int subDeviceId) const override; + std::string getSysfsFilePath(SysfsName sysfsName, int subDeviceId, bool baseDirectoryExists) override; + + protected: + std::map sysfsNameToFileMap; + void initSysfsNameToFileMap(); +}; + +class SysmanKmdInterfaceXe : public SysmanKmdInterface { + public: + SysmanKmdInterfaceXe() { initSysfsNameToFileMap(); } + ~SysmanKmdInterfaceXe() override = default; + + std::string getBasePath(int subDeviceId) const override; + std::string getSysfsFilePath(SysfsName sysfsName, int subDeviceId, bool baseDirectoryExists) override; + + protected: + std::map sysfsNameToFileMap; + void initSysfsNameToFileMap(); +}; + +} // namespace Sysman +} // namespace L0 \ No newline at end of file diff --git a/level_zero/sysman/source/linux/zes_os_sysman_imp.cpp b/level_zero/sysman/source/linux/zes_os_sysman_imp.cpp index a25a55bbf3..547eb9b59f 100644 --- a/level_zero/sysman/source/linux/zes_os_sysman_imp.cpp +++ b/level_zero/sysman/source/linux/zes_os_sysman_imp.cpp @@ -20,6 +20,7 @@ #include "level_zero/sysman/source/linux/pmt/sysman_pmt.h" #include "level_zero/sysman/source/linux/pmu/sysman_pmu.h" #include "level_zero/sysman/source/linux/sysman_fs_access.h" +#include "level_zero/sysman/source/linux/sysman_kmd_interface.h" #include "level_zero/sysman/source/pci/linux/sysman_os_pci_imp.h" #include "level_zero/sysman/source/pci/sysman_pci_utils.h" @@ -63,6 +64,9 @@ ze_result_t LinuxSysmanImp::init() { rootPath = NEO::getPciRootPath(myDeviceFd).value_or(""); pSysfsAccess->getRealPath(deviceDir, gtDevicePath); + + pSysmanKmdInterface = SysmanKmdInterface::create(*getDrm()); + osInterface.getDriverModel()->as()->cleanup(); // Close Drm handles sysmanHwDeviceId->closeFileDescriptor(); diff --git a/level_zero/sysman/source/linux/zes_os_sysman_imp.h b/level_zero/sysman/source/linux/zes_os_sysman_imp.h index a80a68c5dc..9eae8229c8 100644 --- a/level_zero/sysman/source/linux/zes_os_sysman_imp.h +++ b/level_zero/sysman/source/linux/zes_os_sysman_imp.h @@ -30,6 +30,7 @@ class FsAccess; class ProcfsAccess; class SysfsAccess; class FirmwareUtil; +class SysmanKmdInterface; class LinuxSysmanImp : public OsSysman, NEO::NonCopyableOrMovableClass { public: @@ -73,8 +74,10 @@ class LinuxSysmanImp : public OsSysman, NEO::NonCopyableOrMovableClass { bool diagnosticsReset = false; bool isMemoryDiagnostics = false; std::string gtDevicePath; + SysmanKmdInterface *getSysmanKmdInterface() { return pSysmanKmdInterface.get(); } protected: + std::unique_ptr pSysmanKmdInterface; FsAccess *pFsAccess = nullptr; ProcfsAccess *pProcfsAccess = nullptr; SysfsAccess *pSysfsAccess = nullptr; diff --git a/level_zero/sysman/test/unit_tests/sources/frequency/linux/test_zes_frequency_prelim.cpp b/level_zero/sysman/test/unit_tests/sources/frequency/linux/test_zes_frequency_prelim.cpp index 8a2086c746..73ffc4c4d0 100644 --- a/level_zero/sysman/test/unit_tests/sources/frequency/linux/test_zes_frequency_prelim.cpp +++ b/level_zero/sysman/test/unit_tests/sources/frequency/linux/test_zes_frequency_prelim.cpp @@ -5,6 +5,7 @@ * */ +#include "level_zero/sysman/source/linux/sysman_kmd_interface.h" #include "level_zero/sysman/test/unit_tests/sources/frequency/linux/mock_sysfs_frequency_prelim.h" #include "level_zero/sysman/test/unit_tests/sources/linux/mock_sysman_fixture.h" @@ -85,6 +86,48 @@ class SysmanDeviceFrequencyFixture : public SysmanDeviceFixture { } }; +TEST_F(SysmanDeviceFrequencyFixture, GivenKmdInterfaceWhenGettingFilenamesForFrequencyFilesForI915VersionAndBaseDirectoryExistsThenProperPathsAreReturned) { + auto pSysmanKmdInterface = std::make_unique(); + bool baseDirectoryExists = true; + EXPECT_STREQ("gt/gt1/rps_min_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/rps_max_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/.defaults/rps_min_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinDefaultFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/.defaults/rps_max_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxDefaultFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/rps_boost_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameBoostFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/punit_req_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameCurrentFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/rapl_PL1_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameTdpFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/rps_act_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameActualFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/rps_RP1_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameEfficientFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/rps_RP0_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxValueFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/rps_RPn_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinValueFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/throttle_reason_status", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonStatus, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/throttle_reason_pl1", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL1, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/throttle_reason_pl2", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL2, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/throttle_reason_pl4", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL4, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/throttle_reason_thermal", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonThermal, 1, baseDirectoryExists).c_str()); +} + +TEST_F(SysmanDeviceFrequencyFixture, GivenKmdInterfaceWhenGettingFilenamesForFrequencyFilesForXeVersionAndBaseDirectoryExistsThenProperPathsAreReturned) { + auto pSysmanKmdInterface = std::make_unique(); + bool baseDirectoryExists = true; + EXPECT_STREQ("device/gt1/rps_min_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/rps_max_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/.defaults/rps_min_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinDefaultFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/.defaults/rps_max_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxDefaultFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/rps_boost_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameBoostFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/punit_req_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameCurrentFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/rapl_PL1_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameTdpFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/rps_act_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameActualFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/rps_RP1_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameEfficientFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/rps_RP0_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxValueFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/rps_RPn_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinValueFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/throttle_reason_status", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonStatus, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/throttle_reason_pl1", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL1, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/throttle_reason_pl2", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL2, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/throttle_reason_pl4", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL4, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/throttle_reason_thermal", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonThermal, 1, baseDirectoryExists).c_str()); +} + TEST_F(SysmanDeviceFrequencyFixture, GivenComponentCountZeroWhenEnumeratingFrequencyHandlesThenNonZeroCountIsReturnedAndCallSucceds) { uint32_t count = 0U; diff --git a/level_zero/tools/source/sysman/frequency/linux/os_frequency_imp_prelim.cpp b/level_zero/tools/source/sysman/frequency/linux/os_frequency_imp_prelim.cpp index 47e3347861..89a56d0c1a 100644 --- a/level_zero/tools/source/sysman/frequency/linux/os_frequency_imp_prelim.cpp +++ b/level_zero/tools/source/sysman/frequency/linux/os_frequency_imp_prelim.cpp @@ -11,12 +11,15 @@ #include "shared/source/device/device.h" #include "shared/source/helpers/hw_info.h" +#include "level_zero/sysman/source/linux/sysman_kmd_interface.h" #include "level_zero/tools/source/sysman/linux/os_sysman_imp.h" #include "igfxfmid.h" #include +using namespace L0::Sysman; + namespace L0 { const bool LinuxFrequencyImp::canControl = true; // canControl is true on i915 (GEN9 Hardcode) @@ -384,46 +387,37 @@ ze_result_t LinuxFrequencyImp::getMinVal(double &minVal) { } void LinuxFrequencyImp::init() { - const std::string baseDir = "gt/gt" + std::to_string(subdeviceId) + "/"; + + const std::string baseDir = pSysmanKmdInterface->getBasePath(subdeviceId); + bool baseDirectoryExists = false; + if (pSysfsAccess->directoryExists(baseDir)) { - minFreqFile = baseDir + "rps_min_freq_mhz"; - minDefaultFreqFile = baseDir + ".defaults/rps_min_freq_mhz"; - maxFreqFile = baseDir + "rps_max_freq_mhz"; - boostFreqFile = baseDir + "rps_boost_freq_mhz"; - maxDefaultFreqFile = baseDir + ".defaults/rps_max_freq_mhz"; - requestFreqFile = baseDir + "punit_req_freq_mhz"; - tdpFreqFile = baseDir + "rapl_PL1_freq_mhz"; - actualFreqFile = baseDir + "rps_act_freq_mhz"; - efficientFreqFile = baseDir + "rps_RP1_freq_mhz"; - maxValFreqFile = baseDir + "rps_RP0_freq_mhz"; - minValFreqFile = baseDir + "rps_RPn_freq_mhz"; - throttleReasonStatusFile = baseDir + "throttle_reason_status"; - throttleReasonPL1File = baseDir + "throttle_reason_pl1"; - throttleReasonPL2File = baseDir + "throttle_reason_pl2"; - throttleReasonPL4File = baseDir + "throttle_reason_pl4"; - throttleReasonThermalFile = baseDir + "throttle_reason_thermal"; - } else { - minFreqFile = "gt_min_freq_mhz"; - maxFreqFile = "gt_max_freq_mhz"; - boostFreqFile = "gt_boost_freq_mhz"; - requestFreqFile = "gt_cur_freq_mhz"; - tdpFreqFile = "rapl_PL1_freq_mhz"; - actualFreqFile = "gt_act_freq_mhz"; - efficientFreqFile = "gt_RP1_freq_mhz"; - maxValFreqFile = "gt_RP0_freq_mhz"; - minValFreqFile = "gt_RPn_freq_mhz"; - throttleReasonStatusFile = "gt_throttle_reason_status"; - throttleReasonPL1File = "gt_throttle_reason_status_pl1"; - throttleReasonPL2File = "gt_throttle_reason_status_pl2"; - throttleReasonPL4File = "gt_throttle_reason_status_pl4"; - throttleReasonThermalFile = "gt_throttle_reason_status_thermal"; + baseDirectoryExists = true; } + + minFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinFrequency, subdeviceId, baseDirectoryExists); + minDefaultFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinDefaultFrequency, subdeviceId, baseDirectoryExists); + maxFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxFrequency, subdeviceId, baseDirectoryExists); + maxDefaultFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxDefaultFrequency, subdeviceId, baseDirectoryExists); + boostFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameBoostFrequency, subdeviceId, baseDirectoryExists); + requestFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameCurrentFrequency, subdeviceId, baseDirectoryExists); + tdpFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameTdpFrequency, subdeviceId, baseDirectoryExists); + actualFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameActualFrequency, subdeviceId, baseDirectoryExists); + efficientFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameEfficientFrequency, subdeviceId, baseDirectoryExists); + maxValFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxValueFrequency, subdeviceId, baseDirectoryExists); + minValFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinValueFrequency, subdeviceId, baseDirectoryExists); + throttleReasonStatusFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonStatus, subdeviceId, baseDirectoryExists); + throttleReasonPL1File = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL1, subdeviceId, baseDirectoryExists); + throttleReasonPL2File = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL2, subdeviceId, baseDirectoryExists); + throttleReasonPL4File = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL4, subdeviceId, baseDirectoryExists); + throttleReasonThermalFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonThermal, subdeviceId, baseDirectoryExists); } LinuxFrequencyImp::LinuxFrequencyImp(OsSysman *pOsSysman, ze_bool_t onSubdevice, uint32_t subdeviceId, zes_freq_domain_t frequencyDomainNumber) : isSubdevice(onSubdevice), subdeviceId(subdeviceId), frequencyDomainNumber(frequencyDomainNumber) { LinuxSysmanImp *pLinuxSysmanImp = static_cast(pOsSysman); pSysfsAccess = &pLinuxSysmanImp->getSysfsAccess(); pDevice = Device::fromHandle(pLinuxSysmanImp->getSysmanDeviceImp()->hCoreDevice); + pSysmanKmdInterface = pLinuxSysmanImp->getSysmanKmdInterface(); init(); } diff --git a/level_zero/tools/source/sysman/frequency/linux/os_frequency_imp_prelim.h b/level_zero/tools/source/sysman/frequency/linux/os_frequency_imp_prelim.h index 8e18792627..f7b1d84745 100644 --- a/level_zero/tools/source/sysman/frequency/linux/os_frequency_imp_prelim.h +++ b/level_zero/tools/source/sysman/frequency/linux/os_frequency_imp_prelim.h @@ -12,6 +12,11 @@ #include "level_zero/tools/source/sysman/frequency/os_frequency.h" #include "level_zero/tools/source/sysman/linux/fs_access.h" +namespace L0 { +namespace Sysman { +class SysmanKmdInterface; +} // namespace Sysman +} // namespace L0 namespace L0 { class LinuxFrequencyImp : public OsFrequency, NEO::NonCopyableOrMovableClass { @@ -38,6 +43,7 @@ class LinuxFrequencyImp : public OsFrequency, NEO::NonCopyableOrMovableClass { ~LinuxFrequencyImp() override = default; protected: + L0::Sysman::SysmanKmdInterface *pSysmanKmdInterface = nullptr; SysfsAccess *pSysfsAccess = nullptr; ze_result_t getMin(double &min); ze_result_t setMin(double min); diff --git a/level_zero/tools/source/sysman/linux/os_sysman_imp.cpp b/level_zero/tools/source/sysman/linux/os_sysman_imp.cpp index 08dd35befe..460bcf1657 100644 --- a/level_zero/tools/source/sysman/linux/os_sysman_imp.cpp +++ b/level_zero/tools/source/sysman/linux/os_sysman_imp.cpp @@ -16,6 +16,7 @@ #include "level_zero/core/source/device/device_imp.h" #include "level_zero/core/source/driver/driver_handle_imp.h" +#include "level_zero/sysman/source/linux/sysman_kmd_interface.h" #include "level_zero/tools/source/sysman/firmware_util/firmware_util.h" #include "level_zero/tools/source/sysman/linux/fs_access.h" #include "level_zero/tools/source/sysman/pci/linux/os_pci_imp.h" @@ -54,6 +55,8 @@ ze_result_t LinuxSysmanImp::init() { DEBUG_BREAK_IF(nullptr == pPmuInterface); + pSysmanKmdInterface = L0::Sysman::SysmanKmdInterface::create(getDrm()); + getMemoryType(); return createPmtHandles(); } diff --git a/level_zero/tools/source/sysman/linux/os_sysman_imp.h b/level_zero/tools/source/sysman/linux/os_sysman_imp.h index d8f156f5c5..ba5e7d05f9 100644 --- a/level_zero/tools/source/sysman/linux/os_sysman_imp.h +++ b/level_zero/tools/source/sysman/linux/os_sysman_imp.h @@ -22,6 +22,12 @@ #include #include +namespace L0 { +namespace Sysman { +class SysmanKmdInterface; +} // namespace Sysman +} // namespace L0 + namespace L0 { class PmuInterface; @@ -86,8 +92,10 @@ class LinuxSysmanImp : public OsSysman, NEO::NonCopyableOrMovableClass { bool isMemoryDiagnostics = false; Device *pDevice = nullptr; std::string gtDevicePath; + L0::Sysman::SysmanKmdInterface *getSysmanKmdInterface() { return pSysmanKmdInterface.get(); } protected: + std::unique_ptr pSysmanKmdInterface; FsAccess *pFsAccess = nullptr; ProcfsAccess *pProcfsAccess = nullptr; SysfsAccess *pSysfsAccess = nullptr; diff --git a/level_zero/tools/test/unit_tests/sources/sysman/frequency/linux/mock_sysfs_frequency_prelim.h b/level_zero/tools/test/unit_tests/sources/sysman/frequency/linux/mock_sysfs_frequency_prelim.h index b58d25f1f6..1574c7e5be 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/frequency/linux/mock_sysfs_frequency_prelim.h +++ b/level_zero/tools/test/unit_tests/sources/sysman/frequency/linux/mock_sysfs_frequency_prelim.h @@ -6,6 +6,8 @@ */ #pragma once +#include "shared/test/common/test_macros/mock_method_macros.h" + #include "level_zero/tools/source/sysman/frequency/linux/os_frequency_imp_prelim.h" namespace L0 { diff --git a/level_zero/tools/test/unit_tests/sources/sysman/frequency/linux/test_zes_frequency_prelim.cpp b/level_zero/tools/test/unit_tests/sources/sysman/frequency/linux/test_zes_frequency_prelim.cpp index 5be99fa01b..4b624193b4 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/frequency/linux/test_zes_frequency_prelim.cpp +++ b/level_zero/tools/test/unit_tests/sources/sysman/frequency/linux/test_zes_frequency_prelim.cpp @@ -5,12 +5,14 @@ * */ +#include "level_zero/sysman/source/linux/sysman_kmd_interface.h" +#include "level_zero/tools/test/unit_tests/sources/sysman/frequency/linux/mock_sysfs_frequency_prelim.h" #include "level_zero/tools/test/unit_tests/sources/sysman/linux/mock_sysman_fixture.h" -#include "gmock/gmock.h" #include "gtest/gtest.h" #include "igfxfmid.h" -#include "mock_sysfs_frequency_prelim.h" + +using namespace L0::Sysman; #include @@ -103,6 +105,48 @@ class SysmanDeviceFrequencyFixture : public SysmanDeviceFixture { } }; +TEST_F(SysmanDeviceFrequencyFixture, GivenKmdInterfaceWhenGettingFilenamesForFrequencyFilesForI915VersionAndBaseDirectoryExistsThenProperPathsAreReturned) { + auto pSysmanKmdInterface = std::make_unique(); + bool baseDirectoryExists = true; + EXPECT_STREQ("gt/gt1/rps_min_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/rps_max_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/.defaults/rps_min_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinDefaultFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/.defaults/rps_max_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxDefaultFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/rps_boost_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameBoostFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/punit_req_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameCurrentFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/rapl_PL1_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameTdpFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/rps_act_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameActualFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/rps_RP1_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameEfficientFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/rps_RP0_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxValueFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/rps_RPn_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinValueFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/throttle_reason_status", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonStatus, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/throttle_reason_pl1", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL1, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/throttle_reason_pl2", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL2, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/throttle_reason_pl4", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL4, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt/gt1/throttle_reason_thermal", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonThermal, 1, baseDirectoryExists).c_str()); +} + +TEST_F(SysmanDeviceFrequencyFixture, GivenKmdInterfaceWhenGettingFilenamesForFrequencyFilesForXeVersionAndBaseDirectoryExistsThenProperPathsAreReturned) { + auto pSysmanKmdInterface = std::make_unique(); + bool baseDirectoryExists = true; + EXPECT_STREQ("device/gt1/rps_min_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/rps_max_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/.defaults/rps_min_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinDefaultFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/.defaults/rps_max_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxDefaultFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/rps_boost_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameBoostFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/punit_req_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameCurrentFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/rapl_PL1_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameTdpFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/rps_act_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameActualFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/rps_RP1_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameEfficientFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/rps_RP0_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxValueFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/rps_RPn_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinValueFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/throttle_reason_status", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonStatus, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/throttle_reason_pl1", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL1, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/throttle_reason_pl2", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL2, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/throttle_reason_pl4", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL4, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/gt1/throttle_reason_thermal", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonThermal, 1, baseDirectoryExists).c_str()); +} + TEST_F(SysmanDeviceFrequencyFixture, GivenComponentCountZeroWhenEnumeratingFrequencyHandlesThenNonZeroCountIsReturnedAndCallSucceds) { uint32_t count = 0U; diff --git a/shared/source/os_interface/linux/drm_neo.h b/shared/source/os_interface/linux/drm_neo.h index 0086aa7dcd..3db012650d 100644 --- a/shared/source/os_interface/linux/drm_neo.h +++ b/shared/source/os_interface/linux/drm_neo.h @@ -254,6 +254,7 @@ class Drm : public DriverModel { MOCKABLE_VIRTUAL std::string getSysFsPciPath(); std::unique_ptr &getHwDeviceId() { return hwDeviceId; } std::vector query(uint32_t queryId, uint32_t queryItemFlags); + static std::string getDrmVersion(int fileDescriptor); protected: Drm(std::unique_ptr &&hwDeviceIdIn, RootDeviceEnvironment &rootDeviceEnvironment); @@ -264,7 +265,6 @@ class Drm : public DriverModel { void printIoctlStatistics(); void setupIoctlHelper(const PRODUCT_FAMILY productFamily); void queryAndSetVmBindPatIndexProgrammingSupport(); - static std::string getDrmVersion(int fileDescriptor); bool queryDeviceIdAndRevision(); bool queryI915DeviceIdAndRevision();