diff --git a/level_zero/sysman/source/shared/linux/sysman_kmd_interface.cpp b/level_zero/sysman/source/shared/linux/sysman_kmd_interface.cpp index 3f9c900066..2f80fc2dbb 100644 --- a/level_zero/sysman/source/shared/linux/sysman_kmd_interface.cpp +++ b/level_zero/sysman/source/shared/linux/sysman_kmd_interface.cpp @@ -32,12 +32,12 @@ std::unique_ptr SysmanKmdInterface::create(const NEO::Drm &d return pSysmanKmdInterface; } -std::string SysmanKmdInterfaceI915::getBasePath(int subDeviceId) const { +std::string SysmanKmdInterfaceI915::getBasePath(uint32_t subDeviceId) const { return "gt/gt" + std::to_string(subDeviceId) + "/"; } -std::string SysmanKmdInterfaceXe::getBasePath(int subDeviceId) const { - return "device/gt" + std::to_string(subDeviceId) + "/"; +std::string SysmanKmdInterfaceXe::getBasePath(uint32_t subDeviceId) const { + return "device/tile" + std::to_string(subDeviceId) + "/gt" + std::to_string(subDeviceId) + "/"; } void SysmanKmdInterfaceI915::initSysfsNameToFileMap(const PRODUCT_FAMILY productFamily) { @@ -62,6 +62,7 @@ void SysmanKmdInterfaceI915::initSysfsNameToFileMap(const PRODUCT_FAMILY product sysfsNameToFileMap[SysfsName::sysfsNameEnergyCounterNode] = std::make_pair("", "energy1_input"); sysfsNameToFileMap[SysfsName::sysfsNameDefaultPowerLimit] = std::make_pair("", "power1_rated_max"); sysfsNameToFileMap[SysfsName::sysfsNameCriticalPowerLimit] = std::make_pair("", (productFamily == IGFX_PVC) ? "curr1_crit" : "power1_crit"); + sysfsNameToFileMap[SysfsName::sysfsNameStandbyModeControl] = std::make_pair("rc6_enable", "power/rc6_enable"); } void SysmanKmdInterfaceXe::initSysfsNameToFileMap(const PRODUCT_FAMILY productFamily) { @@ -88,12 +89,12 @@ void SysmanKmdInterfaceXe::initSysfsNameToFileMap(const PRODUCT_FAMILY productFa sysfsNameToFileMap[SysfsName::sysfsNameCriticalPowerLimit] = std::make_pair("", (productFamily == IGFX_PVC) ? "curr1_crit" : "power1_crit"); } -std::string SysmanKmdInterfaceI915::getSysfsFilePath(SysfsName sysfsName, int subDeviceId, bool baseDirectoryExists) { +std::string SysmanKmdInterfaceI915::getSysfsFilePath(SysfsName sysfsName, uint32_t 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 SysmanKmdInterfaceXe::getSysfsFilePath(SysfsName sysfsName, uint32_t subDeviceId, bool baseDirectoryExists) { std::string filePath = baseDirectoryExists ? getBasePath(subDeviceId) + sysfsNameToFileMap[sysfsName].first : sysfsNameToFileMap[sysfsName].second; return filePath; } @@ -126,12 +127,12 @@ int64_t SysmanKmdInterfaceXe::getEngineActivityFd(zes_engine_group_t engineGroup return -1; } -std::string SysmanKmdInterfaceI915::getHwmonName(int subDeviceId, bool isSubdevice) const { +std::string SysmanKmdInterfaceI915::getHwmonName(uint32_t subDeviceId, bool isSubdevice) const { std::string filePath = isSubdevice ? "i915_gt" + std::to_string(subDeviceId) : "i915"; return filePath; } -std::string SysmanKmdInterfaceXe::getHwmonName(int subDeviceId, bool isSubdevice) const { +std::string SysmanKmdInterfaceXe::getHwmonName(uint32_t subDeviceId, bool isSubdevice) const { std::string filePath = isSubdevice ? "xe_tile" + std::to_string(subDeviceId) : "xe"; return filePath; } diff --git a/level_zero/sysman/source/shared/linux/sysman_kmd_interface.h b/level_zero/sysman/source/shared/linux/sysman_kmd_interface.h index d1342508d1..cedf52fb46 100644 --- a/level_zero/sysman/source/shared/linux/sysman_kmd_interface.h +++ b/level_zero/sysman/source/shared/linux/sysman_kmd_interface.h @@ -71,6 +71,7 @@ enum class SysfsName { sysfsNameEnergyCounterNode, sysfsNameDefaultPowerLimit, sysfsNameCriticalPowerLimit, + sysfsNameStandbyModeControl, }; class SysmanKmdInterface { @@ -78,10 +79,11 @@ class SysmanKmdInterface { 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; + virtual std::string getBasePath(uint32_t subDeviceId) const = 0; + virtual std::string getSysfsFilePath(SysfsName sysfsName, uint32_t subDeviceId, bool baseDirectoryExists) = 0; virtual int64_t getEngineActivityFd(zes_engine_group_t engineGroup, uint32_t engineInstance, uint32_t subDeviceId, PmuInterface *const &pmuInterface) = 0; - virtual std::string getHwmonName(int subDeviceId, bool isSubdevice) const = 0; + virtual std::string getHwmonName(uint32_t subDeviceId, bool isSubdevice) const = 0; + virtual bool isStandbyModeControlAvailable() const = 0; }; class SysmanKmdInterfaceI915 : public SysmanKmdInterface { @@ -89,10 +91,11 @@ class SysmanKmdInterfaceI915 : public SysmanKmdInterface { SysmanKmdInterfaceI915(const PRODUCT_FAMILY productFamily) { initSysfsNameToFileMap(productFamily); } ~SysmanKmdInterfaceI915() override = default; - std::string getBasePath(int subDeviceId) const override; - std::string getSysfsFilePath(SysfsName sysfsName, int subDeviceId, bool baseDirectoryExists) override; + std::string getBasePath(uint32_t subDeviceId) const override; + std::string getSysfsFilePath(SysfsName sysfsName, uint32_t subDeviceId, bool baseDirectoryExists) override; int64_t getEngineActivityFd(zes_engine_group_t engineGroup, uint32_t engineInstance, uint32_t subDeviceId, PmuInterface *const &pmuInterface) override; - std::string getHwmonName(int subDeviceId, bool isSubdevice) const override; + std::string getHwmonName(uint32_t subDeviceId, bool isSubdevice) const override; + bool isStandbyModeControlAvailable() const override { return true; } protected: std::map sysfsNameToFileMap; @@ -104,10 +107,11 @@ class SysmanKmdInterfaceXe : public SysmanKmdInterface { SysmanKmdInterfaceXe(const PRODUCT_FAMILY productFamily) { initSysfsNameToFileMap(productFamily); } ~SysmanKmdInterfaceXe() override = default; - std::string getBasePath(int subDeviceId) const override; - std::string getSysfsFilePath(SysfsName sysfsName, int subDeviceId, bool baseDirectoryExists) override; + std::string getBasePath(uint32_t subDeviceId) const override; + std::string getSysfsFilePath(SysfsName sysfsName, uint32_t subDeviceId, bool baseDirectoryExists) override; int64_t getEngineActivityFd(zes_engine_group_t engineGroup, uint32_t engineInstance, uint32_t subDeviceId, PmuInterface *const &pmuInterface) override; - std::string getHwmonName(int subDeviceId, bool isSubdevice) const override; + std::string getHwmonName(uint32_t subDeviceId, bool isSubdevice) const override; + bool isStandbyModeControlAvailable() const override { return false; } protected: std::map sysfsNameToFileMap; diff --git a/level_zero/sysman/source/standby/linux/sysman_os_standby_imp.cpp b/level_zero/sysman/source/standby/linux/sysman_os_standby_imp.cpp index 61c395f43b..785610175d 100644 --- a/level_zero/sysman/source/standby/linux/sysman_os_standby_imp.cpp +++ b/level_zero/sysman/source/standby/linux/sysman_os_standby_imp.cpp @@ -9,6 +9,8 @@ #include "shared/source/debug_settings/debug_settings_manager.h" +#include "level_zero/sysman/source/shared/linux/sysman_kmd_interface.h" + namespace L0 { namespace Sysman { @@ -33,6 +35,11 @@ bool LinuxStandbyImp::isStandbySupported(void) { } ze_result_t LinuxStandbyImp::getMode(zes_standby_promo_mode_t &mode) { + + if (pSysmanKmdInterface->isStandbyModeControlAvailable() == false) { + return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } + int currentMode = -1; ze_result_t result = pSysfsAccess->read(standbyModeFile, currentMode); if (ZE_RESULT_SUCCESS != result) { @@ -56,6 +63,11 @@ ze_result_t LinuxStandbyImp::getMode(zes_standby_promo_mode_t &mode) { } ze_result_t LinuxStandbyImp::setMode(zes_standby_promo_mode_t mode) { + + if (pSysmanKmdInterface->isStandbyModeControlAvailable() == false) { + return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } + ze_result_t result = ZE_RESULT_ERROR_UNKNOWN; if (ZES_STANDBY_PROMO_MODE_DEFAULT == mode) { result = pSysfsAccess->write(standbyModeFile, standbyModeDefault); @@ -72,18 +84,25 @@ ze_result_t LinuxStandbyImp::setMode(zes_standby_promo_mode_t mode) { } void LinuxStandbyImp::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)) { - standbyModeFile = baseDir + "rc6_enable"; + baseDirectoryExists = true; + } + + auto standbyModeControlStatus = pSysmanKmdInterface->isStandbyModeControlAvailable(); + if (standbyModeControlStatus == true) { + standbyModeFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameStandbyModeControl, subdeviceId, baseDirectoryExists); } else { - standbyModeFile = "power/rc6_enable"; + standbyModeFile = ""; } } LinuxStandbyImp::LinuxStandbyImp(OsSysman *pOsSysman, ze_bool_t onSubdevice, uint32_t subdeviceId) : isSubdevice(onSubdevice), subdeviceId(subdeviceId) { LinuxSysmanImp *pLinuxSysmanImp = static_cast(pOsSysman); - pSysfsAccess = &pLinuxSysmanImp->getSysfsAccess(); + pSysmanKmdInterface = pLinuxSysmanImp->getSysmanKmdInterface(); init(); } diff --git a/level_zero/sysman/source/standby/linux/sysman_os_standby_imp.h b/level_zero/sysman/source/standby/linux/sysman_os_standby_imp.h index 27ecf8462a..0f120d0675 100644 --- a/level_zero/sysman/source/standby/linux/sysman_os_standby_imp.h +++ b/level_zero/sysman/source/standby/linux/sysman_os_standby_imp.h @@ -16,6 +16,8 @@ namespace L0 { namespace Sysman { +class SysmanKmdInterface; + class LinuxStandbyImp : public OsStandby, NEO::NonCopyableOrMovableClass { public: ze_result_t getMode(zes_standby_promo_mode_t &mode) override; @@ -29,6 +31,7 @@ class LinuxStandbyImp : public OsStandby, NEO::NonCopyableOrMovableClass { ~LinuxStandbyImp() override = default; protected: + SysmanKmdInterface *pSysmanKmdInterface = nullptr; SysfsAccess *pSysfsAccess = nullptr; private: 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 ee37d2a08c..99c0d95bcb 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 @@ -113,25 +113,44 @@ TEST_F(SysmanDeviceFrequencyFixture, GivenKmdInterfaceWhenGettingFilenamesForFre EXPECT_STREQ("gt/gt1/throttle_reason_thermal", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonThermal, 1, baseDirectoryExists).c_str()); } +TEST_F(SysmanDeviceFrequencyFixture, GivenKmdInterfaceWhenGettingFilenamesForFrequencyFilesForI915VersionAndBaseDirectoryDoesntExistThenProperPathsAreReturned) { + auto pSysmanKmdInterface = std::make_unique(productFamily); + bool baseDirectoryExists = false; + EXPECT_STREQ("gt_min_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt_max_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt_boost_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameBoostFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt_cur_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameCurrentFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("rapl_PL1_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameTdpFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt_act_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameActualFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt_RP1_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameEfficientFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt_RP0_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxValueFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt_RPn_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinValueFrequency, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt_throttle_reason_status", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonStatus, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt_throttle_reason_status_pl1", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL1, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt_throttle_reason_status_pl2", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL2, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt_throttle_reason_status_pl4", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL4, 1, baseDirectoryExists).c_str()); + EXPECT_STREQ("gt_throttle_reason_status_thermal", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonThermal, 1, baseDirectoryExists).c_str()); +} + TEST_F(SysmanDeviceFrequencyFixture, GivenKmdInterfaceWhenGettingFilenamesForFrequencyFilesForXeVersionAndBaseDirectoryExistsThenProperPathsAreReturned) { auto pSysmanKmdInterface = std::make_unique(productFamily); 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()); + EXPECT_STREQ("device/tile0/gt0/rps_min_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/rps_max_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/.defaults/rps_min_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinDefaultFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/.defaults/rps_max_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxDefaultFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/rps_boost_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameBoostFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/punit_req_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameCurrentFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/rapl_PL1_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameTdpFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/rps_act_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameActualFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/rps_RP1_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameEfficientFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/rps_RP0_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxValueFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/rps_RPn_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinValueFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/throttle_reason_status", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonStatus, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/throttle_reason_pl1", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL1, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/throttle_reason_pl2", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL2, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/throttle_reason_pl4", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL4, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/throttle_reason_thermal", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonThermal, 0, baseDirectoryExists).c_str()); } TEST_F(SysmanDeviceFrequencyFixture, GivenComponentCountZeroWhenEnumeratingFrequencyHandlesThenNonZeroCountIsReturnedAndCallSucceds) { diff --git a/level_zero/sysman/test/unit_tests/sources/standby/linux/mock_sysfs_standby.h b/level_zero/sysman/test/unit_tests/sources/standby/linux/mock_sysfs_standby.h index 10517de2f3..434c0ff1fc 100644 --- a/level_zero/sysman/test/unit_tests/sources/standby/linux/mock_sysfs_standby.h +++ b/level_zero/sysman/test/unit_tests/sources/standby/linux/mock_sysfs_standby.h @@ -104,6 +104,7 @@ class PublicLinuxStandbyImp : public L0::Sysman::LinuxStandbyImp { public: PublicLinuxStandbyImp(L0::Sysman::OsSysman *pOsSysman, ze_bool_t onSubdevice, uint32_t subdeviceId) : L0::Sysman::LinuxStandbyImp(pOsSysman, onSubdevice, subdeviceId) {} using L0::Sysman::LinuxStandbyImp::pSysfsAccess; + using L0::Sysman::LinuxStandbyImp::pSysmanKmdInterface; }; } // namespace ult diff --git a/level_zero/sysman/test/unit_tests/sources/standby/linux/test_zes_sysman_standby.cpp b/level_zero/sysman/test/unit_tests/sources/standby/linux/test_zes_sysman_standby.cpp index 3beb12ce17..3126f4a3f8 100644 --- a/level_zero/sysman/test/unit_tests/sources/standby/linux/test_zes_sysman_standby.cpp +++ b/level_zero/sysman/test/unit_tests/sources/standby/linux/test_zes_sysman_standby.cpp @@ -5,6 +5,7 @@ * */ +#include "level_zero/sysman/source/shared/linux/sysman_kmd_interface.h" #include "level_zero/sysman/test/unit_tests/sources/linux/mock_sysman_fixture.h" #include "level_zero/sysman/test/unit_tests/sources/standby/linux/mock_sysfs_standby.h" @@ -45,6 +46,32 @@ class ZesStandbyFixture : public SysmanDeviceFixture { } }; +TEST_F(ZesStandbyFixture, GivenKmdInterfaceWhenGettingFilenamesForStandbyForI915VersionAndBaseDirectoryExistsThenProperPathsAreReturned) { + auto pSysmanKmdInterface = std::make_unique(pLinuxSysmanImp->getProductFamily()); + bool baseDirectoryExists = true; + EXPECT_STREQ("gt/gt0/rc6_enable", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameStandbyModeControl, 0, baseDirectoryExists).c_str()); +} + +TEST_F(ZesStandbyFixture, GivenKmdInterfaceWhenGettingFilenamesForStandbyForI915VersionAndBaseDirectoryDoesntExistThenProperPathsAreReturned) { + auto pSysmanKmdInterface = std::make_unique(pLinuxSysmanImp->getProductFamily()); + bool baseDirectoryExists = false; + EXPECT_STREQ("power/rc6_enable", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameStandbyModeControl, 0, baseDirectoryExists).c_str()); +} + +TEST_F(ZesStandbyFixture, GivenKmdInterfaceWhenGettingFilenamesForStandbyForXeVersionThenUnsupportedFeatureIsReturned) { + auto subDeviceCount = pLinuxSysmanImp->getSubDeviceCount(); + ze_bool_t onSubdevice = (subDeviceCount == 0) ? false : true; + uint32_t subdeviceId = 0; + std::unique_ptr pLinuxStandbyImp = std::make_unique(pOsSysman, onSubdevice, subdeviceId); + auto pSysmanKmdInterface = std::make_unique(pLinuxSysmanImp->getProductFamily()); + pLinuxStandbyImp->pSysmanKmdInterface = pSysmanKmdInterface.get(); + EXPECT_FALSE(pLinuxStandbyImp->pSysmanKmdInterface->isStandbyModeControlAvailable()); + + zes_standby_promo_mode_t mode = {}; + EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, pLinuxStandbyImp->getMode(mode)); + EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, pLinuxStandbyImp->setMode(mode)); +} + TEST_F(ZesStandbyFixture, GivenStandbyModeFilesNotAvailableWhenCallingEnumerateThenSuccessResultAndZeroCountIsReturned) { uint32_t count = 0; ptestSysfsAccess->isStandbyModeFileAvailable = false; 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 e702a5e0c2..8e6f941de1 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 @@ -134,22 +134,22 @@ TEST_F(SysmanDeviceFrequencyFixture, GivenKmdInterfaceWhenGettingFilenamesForFre TEST_F(SysmanDeviceFrequencyFixture, GivenKmdInterfaceWhenGettingFilenamesForFrequencyFilesForXeVersionAndBaseDirectoryExistsThenProperPathsAreReturned) { auto pSysmanKmdInterface = std::make_unique(device->getNEODevice()->getHardwareInfo().platform.eProductFamily); 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()); + EXPECT_STREQ("device/tile0/gt0/rps_min_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/rps_max_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/.defaults/rps_min_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinDefaultFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/.defaults/rps_max_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxDefaultFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/rps_boost_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameBoostFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/punit_req_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameCurrentFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/rapl_PL1_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameTdpFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/rps_act_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameActualFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/rps_RP1_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameEfficientFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/rps_RP0_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxValueFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/rps_RPn_freq_mhz", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinValueFrequency, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/throttle_reason_status", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonStatus, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/throttle_reason_pl1", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL1, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/throttle_reason_pl2", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL2, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/throttle_reason_pl4", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL4, 0, baseDirectoryExists).c_str()); + EXPECT_STREQ("device/tile0/gt0/throttle_reason_thermal", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonThermal, 0, baseDirectoryExists).c_str()); } TEST_F(SysmanDeviceFrequencyFixture, GivenComponentCountZeroWhenEnumeratingFrequencyHandlesThenNonZeroCountIsReturnedAndCallSucceds) {