fix(sysman): supports return of correct temperature domains on igfx

Related-To: LOCI-4741

Signed-off-by: Kulkarni, Ashwin Kumar <ashwin.kumar.kulkarni@intel.com>
This commit is contained in:
Kulkarni, Ashwin Kumar
2023-08-04 09:29:33 +00:00
committed by Compute-Runtime-Automation
parent 63fa05e776
commit 5cd39dd155
8 changed files with 82 additions and 3 deletions

View File

@@ -115,10 +115,37 @@ ze_result_t WddmTemperatureImp::getSensorTemperature(double *pTemperature) {
return status;
}
uint32_t WddmTemperatureImp::getNumTempDomainsSupported() {
ze_result_t status = ZE_RESULT_SUCCESS;
KmdSysman::RequestProperty request;
KmdSysman::ResponseProperty response = {};
uint32_t value = 0;
request.paramInfo = static_cast<uint32_t>(type);
request.commandId = KmdSysman::Command::Get;
request.componentId = KmdSysman::Component::TemperatureComponent;
request.requestId = KmdSysman::Requests::Temperature::NumTemperatureDomains;
status = pKmdSysManager->requestSingle(request, response);
if (status == ZE_RESULT_SUCCESS) {
if (response.returnCode == KmdSysman::KmdSysmanSuccess) {
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
}
}
return value;
}
bool WddmTemperatureImp::isTempModuleSupported() {
if ((type == ZES_TEMP_SENSORS_GLOBAL_MIN) || (type == ZES_TEMP_SENSORS_GPU_MIN)) {
return false;
}
if (getNumTempDomainsSupported() == 0) {
return false;
}
KmdSysman::RequestProperty request;
KmdSysman::ResponseProperty response;

View File

@@ -18,7 +18,7 @@ class WddmTemperatureImp : public OsTemperature, NEO::NonCopyableOrMovableClass
ze_result_t getProperties(zes_temp_properties_t *pProperties) override;
ze_result_t getSensorTemperature(double *pTemperature) override;
bool isTempModuleSupported() override;
uint32_t getNumTempDomainsSupported();
void setSensorType(zes_temp_sensors_t sensorType);
WddmTemperatureImp(OsSysman *pOsSysman);
WddmTemperatureImp() = default;

View File

@@ -23,6 +23,7 @@ struct Mock<TemperatureKmdSysManager> : public TemperatureKmdSysManager {
uint32_t mockTempGPU = 25;
uint32_t mockTempMemory = 23;
uint32_t mockMaxTemperature = 100;
bool isIntegrated = false;
zes_temp_sensors_t mockSensorTypes[3] = {ZES_TEMP_SENSORS_GLOBAL, ZES_TEMP_SENSORS_GPU, ZES_TEMP_SENSORS_MEMORY};
void getTemperatureProperty(KmdSysman::GfxSysmanReqHeaderIn *pRequest, KmdSysman::GfxSysmanReqHeaderOut *pResponse) override {
@@ -40,7 +41,11 @@ struct Mock<TemperatureKmdSysManager> : public TemperatureKmdSysManager {
switch (pRequest->inRequestId) {
case KmdSysman::Requests::Temperature::NumTemperatureDomains: {
uint32_t *pValue = reinterpret_cast<uint32_t *>(pBuffer);
*pValue = mockTempDomainCount;
if (isIntegrated == true) {
*pValue = 0;
} else {
*pValue = mockTempDomainCount;
}
pResponse->outReturnCode = KmdSysman::KmdSysmanSuccess;
pResponse->outDataSize = sizeof(uint32_t);
} break;

View File

@@ -87,6 +87,13 @@ TEST_F(SysmanDeviceTemperatureFixture, GivenComponentCountZeroWhenEnumeratingTem
}
}
TEST_F(SysmanDeviceTemperatureFixture, GivenValidDeviceHandleWhenEnumeratingTemperatureSensorsOnIntegratedDeviceThenZeroCountIsReturned) {
uint32_t count = 0;
pKmdSysManager->isIntegrated = true;
EXPECT_EQ(zesDeviceEnumTemperatureSensors(device->toHandle(), &count, nullptr), ZE_RESULT_SUCCESS);
EXPECT_EQ(count, 0);
}
TEST_F(SysmanDeviceTemperatureFixture, GivenValidPowerHandleWhenGettingTemperaturePropertiesAllowSetToTrueThenCallSucceeds) {
auto handles = getTempHandles(temperatureHandleComponentCount);
uint32_t sensorTypeIndex = 0;