diff --git a/level_zero/sysman/source/windows/kmd_sys_manager.cpp b/level_zero/sysman/source/windows/kmd_sys_manager.cpp index 5a47db8841..116ecf702c 100644 --- a/level_zero/sysman/source/windows/kmd_sys_manager.cpp +++ b/level_zero/sysman/source/windows/kmd_sys_manager.cpp @@ -85,6 +85,12 @@ ze_result_t KmdSysManager::requestSingle(KmdSysman::RequestProperty &inputReques return ZE_RESULT_ERROR_INVALID_SIZE; } + if ((outputResponse.returnCode == KmdSysman::ReturnCodes::DomainServiceNotSupported) || + (outputResponse.returnCode == KmdSysman::ReturnCodes::GetNotSupported) || + (outputResponse.returnCode == KmdSysman::ReturnCodes::SetNotSupported)) { + return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } + return (outputResponse.returnCode == KmdSysman::KmdSysmanSuccess) ? ZE_RESULT_SUCCESS : ZE_RESULT_ERROR_NOT_AVAILABLE; } else if (status == STATUS_DEVICE_REMOVED) { return ZE_RESULT_ERROR_DEVICE_LOST; diff --git a/level_zero/tools/source/sysman/windows/kmd_sys_manager.cpp b/level_zero/tools/source/sysman/windows/kmd_sys_manager.cpp index 40d4777363..3b896d4e98 100644 --- a/level_zero/tools/source/sysman/windows/kmd_sys_manager.cpp +++ b/level_zero/tools/source/sysman/windows/kmd_sys_manager.cpp @@ -84,7 +84,14 @@ ze_result_t KmdSysManager::requestSingle(KmdSysman::RequestProperty &inputReques return ZE_RESULT_ERROR_INVALID_SIZE; } + if ((outputResponse.returnCode == KmdSysman::ReturnCodes::DomainServiceNotSupported) || + (outputResponse.returnCode == KmdSysman::ReturnCodes::GetNotSupported) || + (outputResponse.returnCode == KmdSysman::ReturnCodes::SetNotSupported)) { + return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE; + } + return (outputResponse.returnCode == KmdSysman::KmdSysmanSuccess) ? ZE_RESULT_SUCCESS : ZE_RESULT_ERROR_NOT_AVAILABLE; + } else if (status == STATUS_DEVICE_REMOVED) { return ZE_RESULT_ERROR_DEVICE_LOST; } diff --git a/level_zero/tools/test/unit_tests/sources/sysman/frequency/windows/mock_frequency.h b/level_zero/tools/test/unit_tests/sources/sysman/frequency/windows/mock_frequency.h index 921e4c2d79..3fcaad5e10 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/frequency/windows/mock_frequency.h +++ b/level_zero/tools/test/unit_tests/sources/sysman/frequency/windows/mock_frequency.h @@ -191,7 +191,7 @@ struct Mock : public FrequencyKmdSysManager { pResponse->outDataSize = 2 * sizeof(uint32_t); } else if (domain == KmdSysman::GeneralDomainsType::GeneralDomainHBM) { pResponse->outDataSize = 0; - pResponse->outReturnCode = KmdSysman::KmdSysmanFail; + pResponse->outReturnCode = KmdSysman::ReturnCodes::DomainServiceNotSupported; } } break; case KmdSysman::Requests::Frequency::CurrentRequestedFrequency: { @@ -297,12 +297,17 @@ struct Mock : public FrequencyKmdSysManager { } switch (pRequest->inRequestId) { case KmdSysman::Requests::Frequency::CurrentFrequencyRange: { - uint32_t *pMinFreq = reinterpret_cast(pBuffer); - uint32_t *pMaxFreq = reinterpret_cast(pBuffer + sizeof(uint32_t)); - mockMinFrequencyRange = *pMinFreq; - mockMaxFrequencyRange = *pMaxFreq; - pResponse->outDataSize = 0; - pResponse->outReturnCode = KmdSysman::KmdSysmanSuccess; + if (domain == KmdSysman::GeneralDomainsType::GeneralDomainDGPU) { + uint32_t *pMinFreq = reinterpret_cast(pBuffer); + uint32_t *pMaxFreq = reinterpret_cast(pBuffer + sizeof(uint32_t)); + mockMinFrequencyRange = *pMinFreq; + mockMaxFrequencyRange = *pMaxFreq; + pResponse->outDataSize = 0; + pResponse->outReturnCode = KmdSysman::KmdSysmanSuccess; + } else if (domain == KmdSysman::GeneralDomainsType::GeneralDomainHBM) { + pResponse->outDataSize = 0; + pResponse->outReturnCode = KmdSysman::ReturnCodes::DomainServiceNotSupported; + } } break; case KmdSysman::Requests::Frequency::CurrentFixedMode: { uint32_t *pValue = reinterpret_cast(pBuffer); diff --git a/level_zero/tools/test/unit_tests/sources/sysman/frequency/windows/test_zes_frequency.cpp b/level_zero/tools/test/unit_tests/sources/sysman/frequency/windows/test_zes_frequency.cpp index c90c040753..479ab50cbb 100644 --- a/level_zero/tools/test/unit_tests/sources/sysman/frequency/windows/test_zes_frequency.cpp +++ b/level_zero/tools/test/unit_tests/sources/sysman/frequency/windows/test_zes_frequency.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2022 Intel Corporation + * Copyright (C) 2020-2023 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -234,13 +234,28 @@ TEST_F(SysmanDeviceFrequencyFixture, GivenValidFrequencyHandleWhenCallingzesFreq EXPECT_DOUBLE_EQ(pKmdSysManager->mockMinFrequencyRange, limits.min); EXPECT_DOUBLE_EQ(pKmdSysManager->mockMaxFrequencyRange, limits.max); } else if (domainIndex == ZES_FREQ_DOMAIN_MEMORY) { - EXPECT_EQ(ZE_RESULT_ERROR_NOT_AVAILABLE, zesFrequencyGetRange(handle, &limits)); + EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zesFrequencyGetRange(handle, &limits)); } domainIndex++; } } +TEST_F(SysmanDeviceFrequencyFixture, GivenValidFrequencyHandleWhenCallingFrequencyGetRangeAndSetRangeThenUnsupportedErrorIsReturnedForMemoryDomain) { + auto handles = get_frequency_handles(frequencyHandleComponentCount); + uint32_t domainIndex = 0; + for (auto handle : handles) { + zes_freq_range_t limits; + if (domainIndex == ZES_FREQ_DOMAIN_MEMORY) { + EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zesFrequencyGetRange(handle, &limits)); + limits.min = pKmdSysManager->mockResolvedFrequency[ZES_FREQ_DOMAIN_MEMORY]; + limits.max = pKmdSysManager->mockResolvedFrequency[ZES_FREQ_DOMAIN_MEMORY]; + EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, zesFrequencySetRange(handle, &limits)); + } + domainIndex++; + } +} + TEST_F(SysmanDeviceFrequencyFixture, GivenValidFrequencyHandleWhenCallingzesFrequencySetRangeThenVerifyzesFrequencySetRangeTest1CallSucceeds) { auto handles = get_frequency_handles(frequencyHandleComponentCount); uint32_t domainIndex = 0;