diff --git a/shared/source/os_interface/linux/drm_neo.cpp b/shared/source/os_interface/linux/drm_neo.cpp index 0564be314b..dae640c372 100644 --- a/shared/source/os_interface/linux/drm_neo.cpp +++ b/shared/source/os_interface/linux/drm_neo.cpp @@ -792,7 +792,7 @@ bool Drm::isDebugAttachAvailable() { int getMaxGpuFrequencyOfDevice(Drm &drm, std::string &sysFsPciPath, int &maxGpuFrequency) { maxGpuFrequency = 0; - std::string clockSysFsPath = sysFsPciPath + "/gt_max_freq_mhz"; + std::string clockSysFsPath = sysFsPciPath + drm.getIoctlHelper()->getFileForMaxGpuFrequency(); std::ifstream ifs(clockSysFsPath.c_str(), std::ifstream::in); if (ifs.fail()) { @@ -806,7 +806,7 @@ int getMaxGpuFrequencyOfDevice(Drm &drm, std::string &sysFsPciPath, int &maxGpuF int getMaxGpuFrequencyOfSubDevice(Drm &drm, std::string &sysFsPciPath, int subDeviceId, int &maxGpuFrequency) { maxGpuFrequency = 0; - std::string clockSysFsPath = sysFsPciPath + "/gt/gt" + std::to_string(subDeviceId) + "/rps_max_freq_mhz"; + std::string clockSysFsPath = sysFsPciPath + drm.getIoctlHelper()->getFileForMaxGpuFrequencyOfSubDevice(subDeviceId); std::ifstream ifs(clockSysFsPath.c_str(), std::ifstream::in); if (ifs.fail()) { @@ -837,7 +837,7 @@ int Drm::getMaxGpuFrequency(HardwareInfo &hwInfo, int &maxGpuFrequency) { } bool Drm::getDeviceMemoryMaxClockRateInMhz(uint32_t tileId, uint32_t &clkRate) { - const std::string relativefilePath = "/gt/gt" + std::to_string(tileId) + "/mem_RP0_freq_mhz"; + const std::string relativefilePath = ioctlHelper->getFileForMaxMemoryFrequencyOfSubDevice(tileId); std::string readString(64, '\0'); errno = 0; if (readSysFsAsString(relativefilePath, readString) == false) { diff --git a/shared/source/os_interface/linux/ioctl_helper.cpp b/shared/source/os_interface/linux/ioctl_helper.cpp index 0afe3495b2..3f02558806 100644 --- a/shared/source/os_interface/linux/ioctl_helper.cpp +++ b/shared/source/os_interface/linux/ioctl_helper.cpp @@ -357,4 +357,16 @@ std::string IoctlHelper::getIoctlStringBase(DrmIoctl ioctlRequest) const { } } +std::string IoctlHelper::getFileForMaxGpuFrequency() const { + return "/gt_max_freq_mhz"; +} + +std::string IoctlHelper::getFileForMaxGpuFrequencyOfSubDevice(int subDeviceId) const { + return "/gt/gt" + std::to_string(subDeviceId) + "/rps_max_freq_mhz"; +} + +std::string IoctlHelper::getFileForMaxMemoryFrequencyOfSubDevice(int subDeviceId) const { + return "/gt/gt" + std::to_string(subDeviceId) + "/mem_RP0_freq_mhz"; +} + } // namespace NEO diff --git a/shared/source/os_interface/linux/ioctl_helper.h b/shared/source/os_interface/linux/ioctl_helper.h index b90066e640..f00e82a796 100644 --- a/shared/source/os_interface/linux/ioctl_helper.h +++ b/shared/source/os_interface/linux/ioctl_helper.h @@ -128,6 +128,9 @@ class IoctlHelper { std::string getDrmParamStringBase(DrmParam param) const; std::string getIoctlStringBase(DrmIoctl ioctlRequest) const; + std::string getFileForMaxGpuFrequency() const; + std::string getFileForMaxGpuFrequencyOfSubDevice(int subDeviceId) const; + std::string getFileForMaxMemoryFrequencyOfSubDevice(int subDeviceId) const; uint32_t getFlagsForPrimeHandleToFd() const; diff --git a/shared/test/unit_test/os_interface/linux/drm_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_tests.cpp index 686f46e036..d6def3e6d7 100644 --- a/shared/test/unit_test/os_interface/linux/drm_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_tests.cpp @@ -1481,6 +1481,15 @@ TEST(IoctlHelperTest, whenGettingDrmParamValueThenProperValueIsReturned) { EXPECT_THROW(ioctlHelper->getDrmParamValueBase(DrmParam::EngineClassCompute), std::runtime_error); } +TEST(IoctlHelperTest, whenGettingFileNameForFrequencyFilesThenProperStringIsReturned) { + auto executionEnvironment = std::make_unique(); + DrmMock drm{*executionEnvironment->rootDeviceEnvironments[0]}; + auto ioctlHelper = drm.getIoctlHelper(); + EXPECT_STREQ("/gt_max_freq_mhz", ioctlHelper->getFileForMaxGpuFrequency().c_str()); + EXPECT_STREQ("/gt/gt2/rps_max_freq_mhz", ioctlHelper->getFileForMaxGpuFrequencyOfSubDevice(2).c_str()); + EXPECT_STREQ("/gt/gt1/mem_RP0_freq_mhz", ioctlHelper->getFileForMaxMemoryFrequencyOfSubDevice(1).c_str()); +} + TEST(DistanceInfoTest, givenDistanceInfosWhenAssignRegionsFromDistancesThenCorrectRegionsSet) { auto executionEnvironment = std::make_unique(); DrmMock drm{*executionEnvironment->rootDeviceEnvironments[0]};