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 6f71fa819a..d2be7d5fc6 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 @@ -375,20 +375,20 @@ void LinuxFrequencyImp::getCurrentVoltage(double &voltage) { void LinuxFrequencyImp::init() { - const std::string baseDir = pSysmanKmdInterface->getBasePath(subdeviceId); + const std::string baseDir = pSysmanKmdInterface->getBasePathForFreqDomain(subdeviceId, frequencyDomainNumber); bool baseDirectoryExists = false; if (pSysfsAccess->directoryExists(baseDir)) { baseDirectoryExists = true; } - minFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinFrequency, subdeviceId, baseDirectoryExists); - maxFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxFrequency, subdeviceId, baseDirectoryExists); - requestFreqFile = pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameCurrentFrequency, 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); + minFreqFile = pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameMinFrequency, subdeviceId, baseDirectoryExists, frequencyDomainNumber); + maxFreqFile = pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameMaxFrequency, subdeviceId, baseDirectoryExists, frequencyDomainNumber); + requestFreqFile = pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameCurrentFrequency, subdeviceId, baseDirectoryExists, frequencyDomainNumber); + actualFreqFile = pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameActualFrequency, subdeviceId, baseDirectoryExists, frequencyDomainNumber); + efficientFreqFile = pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameEfficientFrequency, subdeviceId, baseDirectoryExists, frequencyDomainNumber); + maxValFreqFile = pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameMaxValueFrequency, subdeviceId, baseDirectoryExists, frequencyDomainNumber); + minValFreqFile = pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameMinValueFrequency, subdeviceId, baseDirectoryExists, frequencyDomainNumber); canControl = pSysmanProductHelper->isFrequencySetRangeSupported(); if (pSysmanKmdInterface->isDefaultFrequencyAvailable()) { @@ -424,7 +424,8 @@ std::vector OsFrequency::getNumberOfFreqDomainsSupported(OsSy std::vector freqDomains = {}; if (areImagesSupported) { auto pSysfsAccess = &pLinuxSysmanImp->getSysfsAccess(); - const std::string baseDir = "gt/gt1/"; + auto pSysmanKmdInterface = pLinuxSysmanImp->getSysmanKmdInterface(); + auto baseDir = pSysmanKmdInterface->getFreqMediaDomainBasePath(); if (pSysfsAccess->directoryExists(baseDir)) { freqDomains.push_back(ZES_FREQ_DOMAIN_MEDIA); } diff --git a/level_zero/sysman/source/shared/linux/kmd_interface/sysman_kmd_interface.h b/level_zero/sysman/source/shared/linux/kmd_interface/sysman_kmd_interface.h index 45e29ec862..20fc58ae73 100644 --- a/level_zero/sysman/source/shared/linux/kmd_interface/sysman_kmd_interface.h +++ b/level_zero/sysman/source/shared/linux/kmd_interface/sysman_kmd_interface.h @@ -33,6 +33,7 @@ class SysmanProductHelper; constexpr std::string_view deviceDir("device"); constexpr std::string_view sysDevicesDir("/sys/devices/"); +constexpr std::string_view mediaDirSuffix("1"); typedef std::pair valuePair; @@ -121,7 +122,10 @@ class SysmanKmdInterface { static std::unique_ptr create(NEO::Drm &drm, SysmanProductHelper *pSysmanProductHelper); virtual std::string getBasePath(uint32_t subDeviceId) const = 0; + virtual std::string getBasePathForFreqDomain(uint32_t subDeviceId, zes_freq_domain_t frequencyDomainNumber) const = 0; virtual std::string getSysfsFilePath(SysfsName sysfsName, uint32_t subDeviceId, bool baseDirectoryExists) = 0; + virtual std::string getSysfsPathForFreqDomain(SysfsName sysfsName, uint32_t subDeviceId, bool prefixBaseDirectory, + zes_freq_domain_t frequencyDomainNumber) = 0; virtual std::string getSysfsFilePathForPhysicalMemorySize(uint32_t subDeviceId) = 0; virtual std::string getEnergyCounterNodeFile(zes_power_domain_t powerDomain) = 0; virtual ze_result_t getEngineActivityFdListAndConfigPair(zes_engine_group_t engineGroup, @@ -178,6 +182,7 @@ class SysmanKmdInterface { virtual std::vector getPowerDomains() const = 0; virtual void setSysmanDeviceDirName(const bool isIntegratedDevice) = 0; virtual std::string getBurstPowerLimitFile(SysfsName sysfsName, uint32_t subDeviceId, bool baseDirectoryExists) = 0; + virtual std::string getFreqMediaDomainBasePath() = 0; const std::string getSysmanDeviceDirName() const; ze_result_t checkErrorNumberAndReturnStatus(); @@ -209,7 +214,10 @@ class SysmanKmdInterfaceI915Upstream : public SysmanKmdInterface, SysmanKmdInter ~SysmanKmdInterfaceI915Upstream() override; std::string getBasePath(uint32_t subDeviceId) const override; + std::string getBasePathForFreqDomain(uint32_t subDeviceId, zes_freq_domain_t frequencyDomainNumber) const override; std::string getSysfsFilePath(SysfsName sysfsName, uint32_t subDeviceId, bool baseDirectoryExists) override; + std::string getSysfsPathForFreqDomain(SysfsName sysfsName, uint32_t subDeviceId, bool prefixBaseDirectory, + zes_freq_domain_t frequencyDomainNumber) override; std::string getSysfsFilePathForPhysicalMemorySize(uint32_t subDeviceId) override; std::string getEnergyCounterNodeFile(zes_power_domain_t powerDomain) override; ze_result_t getEngineActivityFdListAndConfigPair(zes_engine_group_t engineGroup, @@ -253,6 +261,7 @@ class SysmanKmdInterfaceI915Upstream : public SysmanKmdInterface, SysmanKmdInter std::vector getPowerDomains() const override { return {ZES_POWER_DOMAIN_PACKAGE}; } void setSysmanDeviceDirName(const bool isIntegratedDevice) override; std::string getBurstPowerLimitFile(SysfsName sysfsName, uint32_t subDeviceId, bool baseDirectoryExists) override; + std::string getFreqMediaDomainBasePath() override; protected: std::map sysfsNameToFileMap; @@ -270,7 +279,10 @@ class SysmanKmdInterfaceI915Prelim : public SysmanKmdInterface, SysmanKmdInterfa ~SysmanKmdInterfaceI915Prelim() override; std::string getBasePath(uint32_t subDeviceId) const override; + std::string getBasePathForFreqDomain(uint32_t subDeviceId, zes_freq_domain_t frequencyDomainNumber) const override; std::string getSysfsFilePath(SysfsName sysfsName, uint32_t subDeviceId, bool baseDirectoryExists) override; + std::string getSysfsPathForFreqDomain(SysfsName sysfsName, uint32_t subDeviceId, bool prefixBaseDirectory, + zes_freq_domain_t frequencyDomainNumber) override; std::string getSysfsFilePathForPhysicalMemorySize(uint32_t subDeviceId) override; std::string getEnergyCounterNodeFile(zes_power_domain_t powerDomain) override; ze_result_t getEngineActivityFdListAndConfigPair(zes_engine_group_t engineGroup, @@ -314,6 +326,7 @@ class SysmanKmdInterfaceI915Prelim : public SysmanKmdInterface, SysmanKmdInterfa std::vector getPowerDomains() const override { return {ZES_POWER_DOMAIN_PACKAGE}; } void setSysmanDeviceDirName(const bool isIntegratedDevice) override; std::string getBurstPowerLimitFile(SysfsName sysfsName, uint32_t subDeviceId, bool baseDirectoryExists) override; + std::string getFreqMediaDomainBasePath() override; protected: std::map sysfsNameToFileMap; @@ -331,7 +344,10 @@ class SysmanKmdInterfaceXe : public SysmanKmdInterface { ~SysmanKmdInterfaceXe() override; std::string getBasePath(uint32_t subDeviceId) const override; + std::string getBasePathForFreqDomain(uint32_t subDeviceId, zes_freq_domain_t frequencyDomainNumber) const override; std::string getSysfsFilePath(SysfsName sysfsName, uint32_t subDeviceId, bool baseDirectoryExists) override; + std::string getSysfsPathForFreqDomain(SysfsName sysfsName, uint32_t subDeviceId, bool prefixBaseDirectory, + zes_freq_domain_t frequencyDomainNumber) override; std::string getSysfsFilePathForPhysicalMemorySize(uint32_t subDeviceId) override; std::string getEngineBasePath(uint32_t subDeviceId) const override; std::string getEnergyCounterNodeFile(zes_power_domain_t powerDomain) override; @@ -377,6 +393,7 @@ class SysmanKmdInterfaceXe : public SysmanKmdInterface { std::string getGpuUnBindEntry() const override; void setSysmanDeviceDirName(const bool isIntegratedDevice) override; std::string getBurstPowerLimitFile(SysfsName sysfsName, uint32_t subDeviceId, bool baseDirectoryExists) override; + std::string getFreqMediaDomainBasePath() override; protected: std::map sysfsNameToFileMap; diff --git a/level_zero/sysman/source/shared/linux/kmd_interface/sysman_kmd_interface_i915_prelim.cpp b/level_zero/sysman/source/shared/linux/kmd_interface/sysman_kmd_interface_i915_prelim.cpp index 9135e90508..8107e3947f 100644 --- a/level_zero/sysman/source/shared/linux/kmd_interface/sysman_kmd_interface_i915_prelim.cpp +++ b/level_zero/sysman/source/shared/linux/kmd_interface/sysman_kmd_interface_i915_prelim.cpp @@ -90,6 +90,15 @@ std::string SysmanKmdInterfaceI915Prelim::getSysfsFilePath(SysfsName sysfsName, return {}; } +std::string SysmanKmdInterfaceI915Prelim::getSysfsPathForFreqDomain(SysfsName sysfsName, uint32_t subDeviceId, bool prefixBaseDirectory, + zes_freq_domain_t frequencyDomainNumber) { + return getSysfsFilePath(sysfsName, subDeviceId, prefixBaseDirectory); +} + +std::string SysmanKmdInterfaceI915Prelim::getBasePathForFreqDomain(uint32_t subDeviceId, zes_freq_domain_t frequencyDomainNumber) const { + return getBasePath(subDeviceId); +} + std::string SysmanKmdInterfaceI915Prelim::getSysfsFilePathForPhysicalMemorySize(uint32_t subDeviceId) { std::string filePathPhysicalMemorySize = getBasePath(subDeviceId) + sysfsNameToFileMap[SysfsName::sysfsNameMemoryAddressRange].first; @@ -250,5 +259,9 @@ void SysmanKmdInterfaceI915Prelim::setSysmanDeviceDirName(const bool isIntegrate } } +std::string SysmanKmdInterfaceI915Prelim::getFreqMediaDomainBasePath() { + return "gt/gt1/"; +} + } // namespace Sysman } // namespace L0 diff --git a/level_zero/sysman/source/shared/linux/kmd_interface/sysman_kmd_interface_i915_upstream.cpp b/level_zero/sysman/source/shared/linux/kmd_interface/sysman_kmd_interface_i915_upstream.cpp index 0d7c9aa0c0..7f2115cfe6 100644 --- a/level_zero/sysman/source/shared/linux/kmd_interface/sysman_kmd_interface_i915_upstream.cpp +++ b/level_zero/sysman/source/shared/linux/kmd_interface/sysman_kmd_interface_i915_upstream.cpp @@ -28,6 +28,10 @@ std::string SysmanKmdInterfaceI915Upstream::getBasePath(uint32_t subDeviceId) co return getBasePathI915(subDeviceId); } +std::string SysmanKmdInterfaceI915Upstream::getBasePathForFreqDomain(uint32_t subDeviceId, zes_freq_domain_t frequencyDomainNumber) const { + return getBasePath(subDeviceId); +} + void SysmanKmdInterfaceI915Upstream::initSysfsNameToFileMap(SysmanProductHelper *pSysmanProductHelper) { 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"); @@ -83,6 +87,11 @@ std::string SysmanKmdInterfaceI915Upstream::getSysfsFilePath(SysfsName sysfsName return {}; } +std::string SysmanKmdInterfaceI915Upstream::getSysfsPathForFreqDomain(SysfsName sysfsName, uint32_t subDeviceId, bool prefixBaseDirectory, + zes_freq_domain_t frequencyDomainNumber) { + return getSysfsFilePath(sysfsName, subDeviceId, prefixBaseDirectory); +} + std::string SysmanKmdInterfaceI915Upstream::getSysfsFilePathForPhysicalMemorySize(uint32_t subDeviceId) { std::string filePathPhysicalMemorySize = getBasePath(subDeviceId) + sysfsNameToFileMap[SysfsName::sysfsNameMemoryAddressRange].first; @@ -197,5 +206,9 @@ void SysmanKmdInterfaceI915Upstream::setSysmanDeviceDirName(const bool isIntegra } } +std::string SysmanKmdInterfaceI915Upstream::getFreqMediaDomainBasePath() { + return "gt/gt1/"; +} + } // namespace Sysman } // namespace L0 diff --git a/level_zero/sysman/source/shared/linux/kmd_interface/sysman_kmd_interface_xe.cpp b/level_zero/sysman/source/shared/linux/kmd_interface/sysman_kmd_interface_xe.cpp index 9329fa248e..481cd3c938 100644 --- a/level_zero/sysman/source/shared/linux/kmd_interface/sysman_kmd_interface_xe.cpp +++ b/level_zero/sysman/source/shared/linux/kmd_interface/sysman_kmd_interface_xe.cpp @@ -35,6 +35,16 @@ std::string SysmanKmdInterfaceXe::getBasePath(uint32_t subDeviceId) const { return "device/tile" + std::to_string(subDeviceId) + "/gt" + std::to_string(subDeviceId) + "/"; } +std::string SysmanKmdInterfaceXe::getBasePathForFreqDomain(uint32_t subDeviceId, zes_freq_domain_t frequencyDomainNumber) const { + std::string basePath = ""; + if (frequencyDomainNumber == ZES_FREQ_DOMAIN_MEDIA) { + basePath = "device/tile" + std::to_string(subDeviceId) + "/gt" + std::string(mediaDirSuffix) + "/"; + } else { + basePath = getBasePath(subDeviceId); + } + return basePath; +} + /* * Power related Syfs Nodes summary For XE supported platforms * 1. CARD @@ -117,6 +127,22 @@ std::string SysmanKmdInterfaceXe::getSysfsFilePath(SysfsName sysfsName, uint32_t return {}; } +std::string SysmanKmdInterfaceXe::getSysfsPathForFreqDomain(SysfsName sysfsName, uint32_t subDeviceId, bool prefixBaseDirectory, + zes_freq_domain_t frequencyDomainNumber) { + if (sysfsNameToFileMap.find(sysfsName) != sysfsNameToFileMap.end()) { + if (frequencyDomainNumber == ZES_FREQ_DOMAIN_MEDIA) { + std::string filePath = prefixBaseDirectory ? getBasePathForFreqDomain(subDeviceId, frequencyDomainNumber) + sysfsNameToFileMap[sysfsName].first : sysfsNameToFileMap[sysfsName].second; + return filePath; + } else { + std::string filePath = getSysfsFilePath(sysfsName, subDeviceId, prefixBaseDirectory); + return filePath; + } + } + // All sysfs accesses are expected to be covered + DEBUG_BREAK_IF(1); + return {}; +} + std::vector SysmanKmdInterfaceXe::getPowerDomains() const { return {ZES_POWER_DOMAIN_CARD, ZES_POWER_DOMAIN_PACKAGE, ZES_POWER_DOMAIN_GPU, ZES_POWER_DOMAIN_MEMORY}; } @@ -278,6 +304,10 @@ ze_result_t SysmanKmdInterfaceXe::getBusyAndTotalTicksConfigsForVf(PmuInterface return result; } +std::string SysmanKmdInterfaceXe::getFreqMediaDomainBasePath() { + return "device/tile0/gt1/"; +} + std::string SysmanKmdInterfaceXe::getGpuBindEntry() const { return "/sys/bus/pci/drivers/xe/bind"; } diff --git a/level_zero/sysman/test/unit_tests/sources/frequency/linux/mock_sysfs_frequency_xe.h b/level_zero/sysman/test/unit_tests/sources/frequency/linux/mock_sysfs_frequency_xe.h index 302149d34f..394ce7adaa 100644 --- a/level_zero/sysman/test/unit_tests/sources/frequency/linux/mock_sysfs_frequency_xe.h +++ b/level_zero/sysman/test/unit_tests/sources/frequency/linux/mock_sysfs_frequency_xe.h @@ -20,18 +20,31 @@ namespace Sysman { namespace ult { const std::string minFreqFile("device/tile0/gt0/freq0/min_freq"); +const std::string minFreqFileMedia("device/tile0/gt1/freq0/min_freq"); const std::string maxFreqFile("device/tile0/gt0/freq0/max_freq"); +const std::string maxFreqFileMedia("device/tile0/gt1/freq0/max_freq"); const std::string requestFreqFile("device/tile0/gt0/freq0/cur_freq"); +const std::string requestFreqFileMedia("device/tile0/gt1/freq0/cur_freq"); const std::string actualFreqFile("device/tile0/gt0/freq0/act_freq"); +const std::string actualFreqFileMedia("device/tile0/gt1/freq0/act_freq"); const std::string efficientFreqFile("device/tile0/gt0/freq0/rpe_freq"); +const std::string efficientFreqFileMedia("device/tile0/gt1/freq0/rpe_freq"); const std::string maxValFreqFile("device/tile0/gt0/freq0/rp0_freq"); +const std::string maxValFreqFileMedia("device/tile0/gt1/freq0/rp0_freq"); const std::string minValFreqFile("device/tile0/gt0/freq0/rpn_freq"); +const std::string minValFreqFileMedia("device/tile0/gt1/freq0/rpn_freq"); const std::string throttleReasonStatusFile("device/tile0/gt0/freq0/throttle/status"); +const std::string throttleReasonStatusFileMedia("device/tile0/gt1/freq0/throttle/status"); const std::string throttleReasonPL1File("device/tile0/gt0/freq0/throttle/reason_pl1"); +const std::string throttleReasonPL1FileMedia("device/tile0/gt1/freq0/throttle/reason_pl1"); const std::string throttleReasonPL2File("device/tile0/gt0/freq0/throttle/reason_pl2"); +const std::string throttleReasonPL2FileMedia("device/tile0/gt1/freq0/throttle/reason_pl2"); const std::string throttleReasonPL4File("device/tile0/gt0/freq0/throttle/reason_pl4"); +const std::string throttleReasonPL4FileMedia("device/tile0/gt1/freq0/throttle/reason_pl4"); const std::string throttleReasonThermalFile("device/tile0/gt0/freq0/throttle/reason_thermal"); +const std::string throttleReasonThermalFileMedia("device/tile0/gt1/freq0/throttle/reason_thermal"); const std::string throttleReasonFile("device/tile0/gt0/freq0/throttle_reason"); +const std::string throttleReasonFileMedia("device/tile0/gt1/freq0/throttle_reason"); struct MockXeFrequencySysfsAccess : public L0::Sysman::SysFsAccessInterface { std::string throttleReason = {}; @@ -66,19 +79,19 @@ struct MockXeFrequencySysfsAccess : public L0::Sysman::SysFsAccessInterface { ADDMETHOD_NOBASE(directoryExists, bool, true, (const std::string path)); ze_result_t setValU32(const std::string file, uint32_t val) { - if (file.compare(throttleReasonStatusFile) == 0) { + if ((file.compare(throttleReasonStatusFile) == 0) || (file.compare(throttleReasonStatusFileMedia) == 0)) { throttleVal = val; } - if (file.compare(throttleReasonPL1File) == 0) { + if ((file.compare(throttleReasonPL1File) == 0) || (file.compare(throttleReasonPL1FileMedia) == 0)) { throttleReasonPL1Val = val; } - if (file.compare(throttleReasonPL2File) == 0) { + if ((file.compare(throttleReasonPL2File) == 0) || (file.compare(throttleReasonPL2FileMedia) == 0)) { throttleReasonPL2Val = val; } - if (file.compare(throttleReasonPL4File) == 0) { + if ((file.compare(throttleReasonPL4File) == 0) || (file.compare(throttleReasonPL4FileMedia) == 0)) { throttleReasonPL4Val = val; } - if (file.compare(throttleReasonThermalFile) == 0) { + if ((file.compare(throttleReasonThermalFile) == 0) || (file.compare(throttleReasonThermalFileMedia) == 0)) { throttleReasonThermalVal = val; } @@ -90,34 +103,34 @@ struct MockXeFrequencySysfsAccess : public L0::Sysman::SysFsAccessInterface { if (mockReadDoubleValResult != ZE_RESULT_SUCCESS) { return mockReadDoubleValResult; } - if (file.compare(minFreqFile) == 0) { + if ((file.compare(minFreqFile) == 0) || (file.compare(minFreqFileMedia) == 0)) { val = mockMin; - } else if (file.compare(maxFreqFile) == 0) { + } else if ((file.compare(maxFreqFile) == 0) || (file.compare(maxFreqFileMedia) == 0)) { if (mockReadMaxResult != ZE_RESULT_SUCCESS) { return mockReadMaxResult; } val = mockMax; - } else if (file.compare(requestFreqFile) == 0) { + } else if ((file.compare(requestFreqFile) == 0) || (file.compare(requestFreqFileMedia) == 0)) { if (mockReadRequestResult != ZE_RESULT_SUCCESS) { return mockReadRequestResult; } val = mockRequest; - } else if (file.compare(actualFreqFile) == 0) { + } else if ((file.compare(actualFreqFile) == 0) || (file.compare(actualFreqFileMedia) == 0)) { if (mockReadActualResult != ZE_RESULT_SUCCESS) { return mockReadActualResult; } val = mockActual; - } else if (file.compare(efficientFreqFile) == 0) { + } else if ((file.compare(efficientFreqFile) == 0) || (file.compare(efficientFreqFileMedia) == 0)) { if (mockReadEfficientResult != ZE_RESULT_SUCCESS) { return mockReadEfficientResult; } val = mockEfficient; - } else if (file.compare(maxValFreqFile) == 0) { + } else if ((file.compare(maxValFreqFile) == 0) || (file.compare(maxValFreqFileMedia) == 0)) { if (mockReadMaxValResult != ZE_RESULT_SUCCESS) { return mockReadMaxValResult; } val = mockMaxVal; - } else if (file.compare(minValFreqFile) == 0) { + } else if ((file.compare(minValFreqFile) == 0) || (file.compare(minValFreqFileMedia) == 0)) { if (mockReadMinValResult != ZE_RESULT_SUCCESS) { return mockReadMinValResult; } @@ -129,59 +142,59 @@ struct MockXeFrequencySysfsAccess : public L0::Sysman::SysFsAccessInterface { } ze_result_t setVal(const std::string file, const double val) { - if (file.compare(minFreqFile) == 0) { + if ((file.compare(minFreqFile) == 0) || (file.compare(minFreqFileMedia) == 0)) { if (mockWriteMinResult != ZE_RESULT_SUCCESS) { return mockWriteMinResult; } mockMin = val; } - if (file.compare(maxFreqFile) == 0) { + if ((file.compare(maxFreqFile) == 0) || (file.compare(maxFreqFileMedia) == 0)) { if (mockWriteMaxResult != ZE_RESULT_SUCCESS) { return mockWriteMaxResult; } mockMax = val; } - if (file.compare(requestFreqFile) == 0) { + if ((file.compare(requestFreqFile) == 0) || (file.compare(requestFreqFileMedia) == 0)) { mockRequest = val; } - if (file.compare(actualFreqFile) == 0) { + if ((file.compare(actualFreqFile) == 0) || (file.compare(actualFreqFileMedia) == 0)) { mockActual = val; } - if (file.compare(efficientFreqFile) == 0) { + if ((file.compare(efficientFreqFile) == 0) || (file.compare(efficientFreqFileMedia) == 0)) { mockEfficient = val; } - if (file.compare(maxValFreqFile) == 0) { + if ((file.compare(maxValFreqFile) == 0) || (file.compare(maxValFreqFileMedia) == 0)) { mockMaxVal = val; } - if (file.compare(minValFreqFile) == 0) { + if ((file.compare(minValFreqFile) == 0) || (file.compare(minValFreqFileMedia) == 0)) { mockMinVal = val; } return ZE_RESULT_SUCCESS; } ze_result_t getValU32(const std::string file, uint32_t &val) { - if (file.compare(throttleReasonStatusFile) == 0) { + if ((file.compare(throttleReasonStatusFile) == 0) || (file.compare(throttleReasonStatusFileMedia) == 0)) { val = throttleVal; } - if (file.compare(throttleReasonPL1File) == 0) { + if ((file.compare(throttleReasonPL1File) == 0) || (file.compare(throttleReasonPL1FileMedia) == 0)) { if (mockReadPL1Error) { return ZE_RESULT_ERROR_NOT_AVAILABLE; } val = throttleReasonPL1Val; } - if (file.compare(throttleReasonPL2File) == 0) { + if ((file.compare(throttleReasonPL2File) == 0) || (file.compare(throttleReasonPL2FileMedia) == 0)) { if (mockReadPL2Error) { return ZE_RESULT_ERROR_NOT_AVAILABLE; } val = throttleReasonPL2Val; } - if (file.compare(throttleReasonPL4File) == 0) { + if ((file.compare(throttleReasonPL4File) == 0) || (file.compare(throttleReasonPL4FileMedia) == 0)) { if (mockReadPL4Error) { return ZE_RESULT_ERROR_NOT_AVAILABLE; } val = throttleReasonPL4Val; } - if (file.compare(throttleReasonThermalFile) == 0) { + if ((file.compare(throttleReasonThermalFile) == 0) || (file.compare(throttleReasonThermalFileMedia) == 0)) { if (mockReadThermalError) { return ZE_RESULT_ERROR_NOT_AVAILABLE; } diff --git a/level_zero/sysman/test/unit_tests/sources/frequency/linux/test_zes_frequency_xe.cpp b/level_zero/sysman/test/unit_tests/sources/frequency/linux/test_zes_frequency_xe.cpp index d45fa3f7ad..20685e15d4 100644 --- a/level_zero/sysman/test/unit_tests/sources/frequency/linux/test_zes_frequency_xe.cpp +++ b/level_zero/sysman/test/unit_tests/sources/frequency/linux/test_zes_frequency_xe.cpp @@ -49,12 +49,19 @@ class SysmanDeviceFrequencyFixtureXe : public SysmanDeviceFixture { sysfsAccess = static_cast(pSysmanKmdInterface->pSysfsAccess.get()); sysfsAccess->setVal(minFreqFile, minFreq); + sysfsAccess->setVal(minFreqFileMedia, minFreq); sysfsAccess->setVal(maxFreqFile, maxFreq); + sysfsAccess->setVal(maxFreqFileMedia, maxFreq); sysfsAccess->setVal(requestFreqFile, request); + sysfsAccess->setVal(requestFreqFileMedia, request); sysfsAccess->setVal(actualFreqFile, actual); + sysfsAccess->setVal(actualFreqFileMedia, actual); sysfsAccess->setVal(efficientFreqFile, efficient); + sysfsAccess->setVal(efficientFreqFileMedia, efficient); sysfsAccess->setVal(maxValFreqFile, maxVal); + sysfsAccess->setVal(maxValFreqFileMedia, maxVal); sysfsAccess->setVal(minValFreqFile, minVal); + sysfsAccess->setVal(minValFreqFileMedia, minVal); step = 50; numClocks = static_cast((maxFreq - minFreq) / step) + 1; for (auto handle : pSysmanDeviceImp->pFrequencyHandleContext->handleList) { diff --git a/level_zero/sysman/test/unit_tests/sources/shared/linux/kmd_interface/test_sysman_kmd_interface_xe.cpp b/level_zero/sysman/test/unit_tests/sources/shared/linux/kmd_interface/test_sysman_kmd_interface_xe.cpp index 96af36850d..3d146499a3 100644 --- a/level_zero/sysman/test/unit_tests/sources/shared/linux/kmd_interface/test_sysman_kmd_interface_xe.cpp +++ b/level_zero/sysman/test/unit_tests/sources/shared/linux/kmd_interface/test_sysman_kmd_interface_xe.cpp @@ -85,21 +85,33 @@ TEST_F(SysmanFixtureDeviceXe, GivenSysmanKmdInterfaceAndReadSymLinkFailsWhenCall TEST_F(SysmanFixtureDeviceXe, GivenSysmanKmdInterfaceWhenGettingSysfsFileNamesThenProperPathsAreReturned) { auto pSysmanKmdInterface = pLinuxSysmanImp->pSysmanKmdInterface.get(); bool baseDirectoryExists = true; - EXPECT_STREQ("device/tile0/gt0/freq0/min_freq", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinFrequency, 0, baseDirectoryExists).c_str()); - EXPECT_STREQ("device/tile0/gt0/freq0/max_freq", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxFrequency, 0, baseDirectoryExists).c_str()); - EXPECT_STREQ("device/tile0/gt0/freq0/cur_freq", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameCurrentFrequency, 0, baseDirectoryExists).c_str()); - EXPECT_STREQ("device/tile0/gt0/freq0/act_freq", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameActualFrequency, 0, baseDirectoryExists).c_str()); - EXPECT_STREQ("device/tile0/gt0/freq0/rpe_freq", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameEfficientFrequency, 0, baseDirectoryExists).c_str()); - EXPECT_STREQ("device/tile0/gt0/freq0/rp0_freq", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxValueFrequency, 0, baseDirectoryExists).c_str()); - EXPECT_STREQ("device/tile0/gt0/freq0/rpn_freq", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinValueFrequency, 0, baseDirectoryExists).c_str()); - EXPECT_STREQ("device/tile0/gt0/freq0/throttle/status", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonStatus, 0, baseDirectoryExists).c_str()); - EXPECT_STREQ("device/tile0/gt0/freq0/throttle/reason_pl1", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL1, 0, baseDirectoryExists).c_str()); - EXPECT_STREQ("device/tile0/gt0/freq0/throttle/reason_pl2", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL2, 0, baseDirectoryExists).c_str()); - EXPECT_STREQ("device/tile0/gt0/freq0/throttle/reason_pl4", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonPL4, 0, baseDirectoryExists).c_str()); - EXPECT_STREQ("device/tile0/gt0/freq0/throttle/reason_thermal", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameThrottleReasonThermal, 0, baseDirectoryExists).c_str()); + zes_freq_domain_t frequencyDomainNumber = ZES_FREQ_DOMAIN_GPU; + for (int index = 0; index < 2; index++) { + EXPECT_STREQ(("device/tile0/gt" + std::to_string(index) + "/freq0/min_freq").c_str(), pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameMinFrequency, 0, baseDirectoryExists, frequencyDomainNumber).c_str()); + EXPECT_STREQ(("device/tile0/gt" + std::to_string(index) + "/freq0/max_freq").c_str(), pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameMaxFrequency, 0, baseDirectoryExists, frequencyDomainNumber).c_str()); + EXPECT_STREQ(("device/tile0/gt" + std::to_string(index) + "/freq0/cur_freq").c_str(), pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameCurrentFrequency, 0, baseDirectoryExists, frequencyDomainNumber).c_str()); + EXPECT_STREQ(("device/tile0/gt" + std::to_string(index) + "/freq0/act_freq").c_str(), pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameActualFrequency, 0, baseDirectoryExists, frequencyDomainNumber).c_str()); + EXPECT_STREQ(("device/tile0/gt" + std::to_string(index) + "/freq0/rpe_freq").c_str(), pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameEfficientFrequency, 0, baseDirectoryExists, frequencyDomainNumber).c_str()); + EXPECT_STREQ(("device/tile0/gt" + std::to_string(index) + "/freq0/rp0_freq").c_str(), pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameMaxValueFrequency, 0, baseDirectoryExists, frequencyDomainNumber).c_str()); + EXPECT_STREQ(("device/tile0/gt" + std::to_string(index) + "/freq0/rpn_freq").c_str(), pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameMinValueFrequency, 0, baseDirectoryExists, frequencyDomainNumber).c_str()); + EXPECT_STREQ(("device/tile0/gt" + std::to_string(index) + "/freq0/throttle/status").c_str(), pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameThrottleReasonStatus, 0, baseDirectoryExists, frequencyDomainNumber).c_str()); + EXPECT_STREQ(("device/tile0/gt" + std::to_string(index) + "/freq0/throttle/reason_pl1").c_str(), pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameThrottleReasonPL1, 0, baseDirectoryExists, frequencyDomainNumber).c_str()); + EXPECT_STREQ(("device/tile0/gt" + std::to_string(index) + "/freq0/throttle/reason_pl2").c_str(), pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameThrottleReasonPL2, 0, baseDirectoryExists, frequencyDomainNumber).c_str()); + EXPECT_STREQ(("device/tile0/gt" + std::to_string(index) + "/freq0/throttle/reason_pl4").c_str(), pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameThrottleReasonPL4, 0, baseDirectoryExists, frequencyDomainNumber).c_str()); + EXPECT_STREQ(("device/tile0/gt" + std::to_string(index) + "/freq0/throttle/reason_thermal").c_str(), pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameThrottleReasonThermal, 0, baseDirectoryExists, frequencyDomainNumber).c_str()); + EXPECT_STREQ(("device/tile0/gt" + std::to_string(index) + "/freq_vram_rp0").c_str(), pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameMaxMemoryFrequency, 0, baseDirectoryExists, frequencyDomainNumber).c_str()); + EXPECT_STREQ(("device/tile0/gt" + std::to_string(index) + "/freq_vram_rpn").c_str(), pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameMinMemoryFrequency, 0, baseDirectoryExists, frequencyDomainNumber).c_str()); + frequencyDomainNumber = ZES_FREQ_DOMAIN_MEDIA; + } + EXPECT_STREQ("", pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameMinDefaultFrequency, 0, baseDirectoryExists, frequencyDomainNumber).c_str()); EXPECT_STREQ("device/tile0/physical_vram_size_bytes", pSysmanKmdInterface->getSysfsFilePathForPhysicalMemorySize(0).c_str()); - EXPECT_STREQ("device/tile0/gt0/freq_vram_rp0", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMaxMemoryFrequency, 0, baseDirectoryExists).c_str()); - EXPECT_STREQ("device/tile0/gt0/freq_vram_rpn", pSysmanKmdInterface->getSysfsFilePath(SysfsName::sysfsNameMinMemoryFrequency, 0, baseDirectoryExists).c_str()); +} + +TEST_F(SysmanFixtureDeviceXe, GivenSysmanKmdInterfaceWhenGettingSysfsFileNameIfBaseDirectoryDoesNotExistThenEmptyPathIsReturned) { + auto pSysmanKmdInterface = pLinuxSysmanImp->pSysmanKmdInterface.get(); + bool baseDirectoryExists = false; + zes_freq_domain_t frequencyDomainNumber = ZES_FREQ_DOMAIN_MEDIA; + EXPECT_STREQ("", pSysmanKmdInterface->getSysfsPathForFreqDomain(SysfsName::sysfsNameMaxFrequency, 0, baseDirectoryExists, frequencyDomainNumber).c_str()); } TEST_F(SysmanFixtureDeviceXe, GivenSysmanKmdInterfaceInstanceWhenCallingGetPowerLimitFilePathsThenProperPathsAreReturned) { @@ -328,4 +340,4 @@ TEST_F(SysmanFixtureDeviceXe, GivenSysmanKmdInterfaceWhenCallingGetBusyAndTotalT } // namespace ult } // namespace Sysman -} // namespace L0 \ No newline at end of file +} // namespace L0