Skip to content

Commit 0d5f335

Browse files
Add support for setting default values for min and max frquency
Related-To: LOCI-3170 Signed-off-by: Mayank Raghuwanshi <mayank.raghuwanshi@intel.com>
1 parent 52ae228 commit 0d5f335

File tree

4 files changed

+81
-0
lines changed

4 files changed

+81
-0
lines changed

level_zero/tools/source/sysman/frequency/linux/os_frequency_imp.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,19 @@ ze_result_t LinuxFrequencyImp::osFrequencyGetRange(zes_freq_range_t *pLimits) {
5151
ze_result_t LinuxFrequencyImp::osFrequencySetRange(const zes_freq_range_t *pLimits) {
5252
double newMin = round(pLimits->min);
5353
double newMax = round(pLimits->max);
54+
if (newMax == -1 && newMin == -1) {
55+
double maxDefault = 0, minDefault = 0;
56+
ze_result_t result1, result2, result;
57+
result1 = pSysfsAccess->read(maxDefaultFreqFile, maxDefault);
58+
result2 = pSysfsAccess->read(minDefaultFreqFile, minDefault);
59+
if (result1 == ZE_RESULT_SUCCESS && result2 == ZE_RESULT_SUCCESS) {
60+
result = setMax(maxDefault);
61+
if (ZE_RESULT_SUCCESS != result) {
62+
return result;
63+
}
64+
return setMin(minDefault);
65+
}
66+
}
5467
double currentMax = 0.0;
5568
ze_result_t result = getMax(currentMax);
5669
if (ZE_RESULT_SUCCESS != result) {
@@ -319,6 +332,8 @@ void LinuxFrequencyImp::init() {
319332
if (pSysfsAccess->directoryExists(baseDir)) {
320333
minFreqFile = baseDir + "rps_min_freq_mhz";
321334
maxFreqFile = baseDir + "rps_max_freq_mhz";
335+
minDefaultFreqFile = baseDir + ".defaults/rps_min_freq_mhz";
336+
maxDefaultFreqFile = baseDir + ".defaults/rps_max_freq_mhz";
322337
boostFreqFile = baseDir + "rps_boost_freq_mhz";
323338
requestFreqFile = baseDir + "punit_req_freq_mhz";
324339
tdpFreqFile = baseDir + "rapl_PL1_freq_mhz";

level_zero/tools/source/sysman/frequency/linux/os_frequency_imp.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ class LinuxFrequencyImp : public OsFrequency, NEO::NonCopyableOrMovableClass {
5454
private:
5555
std::string minFreqFile;
5656
std::string maxFreqFile;
57+
std::string minDefaultFreqFile;
58+
std::string maxDefaultFreqFile;
5759
std::string boostFreqFile;
5860
std::string requestFreqFile;
5961
std::string tdpFreqFile;

level_zero/tools/test/unit_tests/sources/sysman/frequency/linux/mock_sysfs_frequency.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ namespace ult {
1313

1414
const std::string minFreqFile("gt/gt0/rps_min_freq_mhz");
1515
const std::string maxFreqFile("gt/gt0/rps_max_freq_mhz");
16+
const std::string minDefaultFreqFile("gt/gt0/.defaults/rps_min_freq_mhz");
17+
const std::string maxDefaultFreqFile("gt/gt0/.defaults/rps_max_freq_mhz");
1618
const std::string boostFreqFile("gt/gt0/rps_boost_freq_mhz");
1719
const std::string requestFreqFile("gt/gt0/punit_req_freq_mhz");
1820
const std::string tdpFreqFile("gt/gt0/rapl_PL1_freq_mhz");
@@ -49,6 +51,8 @@ struct Mock<FrequencySysfsAccess> : public FrequencySysfsAccess {
4951
double mockMax = 0;
5052
double mockBoost = 0;
5153
double mockRequest = 0;
54+
double mockDefaultMin = 1;
55+
double mockDefaultMax = 1000;
5256
double mockTdp = 0;
5357
double mockActual = 0;
5458
double mockEfficient = 0;
@@ -66,6 +70,8 @@ struct Mock<FrequencySysfsAccess> : public FrequencySysfsAccess {
6670
ze_result_t mockReadActualResult = ZE_RESULT_SUCCESS;
6771
ze_result_t mockReadMinValResult = ZE_RESULT_SUCCESS;
6872
ze_result_t mockReadMaxValResult = ZE_RESULT_SUCCESS;
73+
ze_result_t mockReadDefaultMinResult = ZE_RESULT_SUCCESS;
74+
ze_result_t mockReadDefaultMaxResult = ZE_RESULT_SUCCESS;
6975
ze_result_t mockReadMaxResult = ZE_RESULT_SUCCESS;
7076
ze_result_t mockReadVal32Result = ZE_RESULT_SUCCESS;
7177
ze_result_t mockWriteMaxResult = ZE_RESULT_SUCCESS;
@@ -218,6 +224,16 @@ struct Mock<FrequencySysfsAccess> : public FrequencySysfsAccess {
218224
return mockReadMinValResult;
219225
}
220226
val = mockMinVal;
227+
} else if (file.compare(minDefaultFreqFile) == 0) {
228+
if (mockReadDefaultMinResult != ZE_RESULT_SUCCESS) {
229+
return mockReadDefaultMinResult;
230+
}
231+
val = mockDefaultMin;
232+
} else if (file.compare(maxDefaultFreqFile) == 0) {
233+
if (mockReadDefaultMaxResult != ZE_RESULT_SUCCESS) {
234+
return mockReadDefaultMaxResult;
235+
}
236+
val = mockDefaultMax;
221237
} else {
222238
return ZE_RESULT_ERROR_NOT_AVAILABLE;
223239
}

level_zero/tools/test/unit_tests/sources/sysman/frequency/linux/test_zes_frequency.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,54 @@ TEST_F(SysmanDeviceFrequencyFixture, GivenValidFrequencyHandleWhenCallingzesFreq
269269
}
270270
}
271271

272+
TEST_F(SysmanDeviceFrequencyFixture, GivenNegativeRangeSetWhenGetRangeIsCalledThenReturnsValueFromDefaultPath) {
273+
auto handles = getFreqHandles(handleComponentCount);
274+
for (auto &handle : handles) {
275+
const double negativeMin = -1;
276+
const double negativeMax = -1;
277+
zes_freq_range_t limits;
278+
279+
limits.min = negativeMin;
280+
limits.max = negativeMax;
281+
EXPECT_EQ(ZE_RESULT_SUCCESS, zesFrequencySetRange(handle, &limits));
282+
EXPECT_EQ(ZE_RESULT_SUCCESS, zesFrequencyGetRange(handle, &limits));
283+
EXPECT_EQ(pSysfsAccess->mockDefaultMin, limits.min);
284+
EXPECT_EQ(pSysfsAccess->mockDefaultMax, limits.max);
285+
EXPECT_DOUBLE_EQ(pSysfsAccess->mockBoost, limits.max);
286+
}
287+
}
288+
289+
TEST_F(SysmanDeviceFrequencyFixture, GivenNegativeRangeWhenSetRangeIsCalledAndSettingMaxValueFailsThenFailureIsReturned) {
290+
pSysfsAccess->mockWriteMaxResult = ZE_RESULT_ERROR_NOT_AVAILABLE;
291+
auto handles = getFreqHandles(handleComponentCount);
292+
for (auto &handle : handles) {
293+
const double negativeMin = -1;
294+
const double negativeMax = -1;
295+
zes_freq_range_t limits;
296+
297+
limits.min = negativeMin;
298+
limits.max = negativeMax;
299+
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zesFrequencySetRange(handle, &limits));
300+
}
301+
}
302+
303+
TEST_F(SysmanDeviceFrequencyFixture, GivenNegativeRangeWhenSetRangeIsCalledAndGettingDefaultMaxValueFailsThenNoFreqRangeIsInEffect) {
304+
pSysfsAccess->mockReadDefaultMaxResult = ZE_RESULT_ERROR_NOT_AVAILABLE;
305+
auto handles = getFreqHandles(handleComponentCount);
306+
for (auto &handle : handles) {
307+
const double negativeMin = -1;
308+
const double negativeMax = -1;
309+
zes_freq_range_t limits;
310+
311+
limits.min = negativeMin;
312+
limits.max = negativeMax;
313+
EXPECT_EQ(ZE_RESULT_SUCCESS, zesFrequencySetRange(handle, &limits));
314+
EXPECT_EQ(ZE_RESULT_SUCCESS, zesFrequencyGetRange(handle, &limits));
315+
EXPECT_DOUBLE_EQ(-1, limits.min);
316+
EXPECT_DOUBLE_EQ(-1, limits.max);
317+
}
318+
}
319+
272320
TEST_F(SysmanDeviceFrequencyFixture, GivenValidFrequencyHandleWhenCallingzesFrequencySetRangeThenVerifyzesFrequencySetRangeTest2CallSucceeds) {
273321
auto handles = getFreqHandles(handleComponentCount);
274322
for (auto handle : handles) {

0 commit comments

Comments
 (0)