feature(sysman): Fetch temp from PMT on windows
Related-To: NEO-10663 Signed-off-by: shubham kumar <shubham.kumar@intel.com>
This commit is contained in:
parent
f62b49a237
commit
f673a255f7
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2020-2023 Intel Corporation
|
* Copyright (C) 2020-2024 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
#include "level_zero/sysman/source/api/temperature/windows/sysman_os_temperature_imp.h"
|
#include "level_zero/sysman/source/api/temperature/windows/sysman_os_temperature_imp.h"
|
||||||
|
|
||||||
|
#include "level_zero/sysman/source/shared/windows/product_helper/sysman_product_helper.h"
|
||||||
#include "level_zero/sysman/source/shared/windows/sysman_kmd_sys_manager.h"
|
#include "level_zero/sysman/source/shared/windows/sysman_kmd_sys_manager.h"
|
||||||
|
|
||||||
namespace L0 {
|
namespace L0 {
|
||||||
|
@ -79,41 +80,8 @@ ze_result_t WddmTemperatureImp::getProperties(zes_temp_properties_t *pProperties
|
||||||
}
|
}
|
||||||
|
|
||||||
ze_result_t WddmTemperatureImp::getSensorTemperature(double *pTemperature) {
|
ze_result_t WddmTemperatureImp::getSensorTemperature(double *pTemperature) {
|
||||||
ze_result_t status = ZE_RESULT_SUCCESS;
|
auto pSysmanProductHelper = pWddmSysmanImp->getSysmanProductHelper();
|
||||||
KmdSysman::RequestProperty request;
|
return pSysmanProductHelper->getSensorTemperature(pTemperature, type, pWddmSysmanImp);
|
||||||
KmdSysman::ResponseProperty response;
|
|
||||||
|
|
||||||
request.commandId = KmdSysman::Command::Get;
|
|
||||||
request.componentId = KmdSysman::Component::TemperatureComponent;
|
|
||||||
request.requestId = KmdSysman::Requests::Temperature::CurrentTemperature;
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case ZES_TEMP_SENSORS_GLOBAL:
|
|
||||||
request.paramInfo = KmdSysman::TemperatureDomainsType::TemperatureDomainPackage;
|
|
||||||
break;
|
|
||||||
case ZES_TEMP_SENSORS_GPU:
|
|
||||||
request.paramInfo = KmdSysman::TemperatureDomainsType::TemperatureDomainDGPU;
|
|
||||||
break;
|
|
||||||
case ZES_TEMP_SENSORS_MEMORY:
|
|
||||||
request.paramInfo = KmdSysman::TemperatureDomainsType::TemperatureDomainHBM;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
*pTemperature = 0;
|
|
||||||
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
status = pKmdSysManager->requestSingle(request, response);
|
|
||||||
|
|
||||||
if (status != ZE_RESULT_SUCCESS) {
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t value = 0;
|
|
||||||
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
|
||||||
*pTemperature = static_cast<double>(value);
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t WddmTemperatureImp::getNumTempDomainsSupported() {
|
uint32_t WddmTemperatureImp::getNumTempDomainsSupported() {
|
||||||
|
@ -163,7 +131,7 @@ void WddmTemperatureImp::setSensorType(zes_temp_sensors_t sensorType) {
|
||||||
}
|
}
|
||||||
|
|
||||||
WddmTemperatureImp::WddmTemperatureImp(OsSysman *pOsSysman) {
|
WddmTemperatureImp::WddmTemperatureImp(OsSysman *pOsSysman) {
|
||||||
WddmSysmanImp *pWddmSysmanImp = static_cast<WddmSysmanImp *>(pOsSysman);
|
pWddmSysmanImp = static_cast<WddmSysmanImp *>(pOsSysman);
|
||||||
pKmdSysManager = &pWddmSysmanImp->getKmdSysManager();
|
pKmdSysManager = &pWddmSysmanImp->getKmdSysManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2020-2023 Intel Corporation
|
* Copyright (C) 2020-2024 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
|
@ -26,6 +26,7 @@ class WddmTemperatureImp : public OsTemperature, NEO::NonCopyableOrMovableClass
|
||||||
~WddmTemperatureImp() override = default;
|
~WddmTemperatureImp() override = default;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
WddmSysmanImp *pWddmSysmanImp = nullptr;
|
||||||
KmdSysManager *pKmdSysManager = nullptr;
|
KmdSysManager *pKmdSysManager = nullptr;
|
||||||
zes_temp_sensors_t type = ZES_TEMP_SENSORS_GLOBAL;
|
zes_temp_sensors_t type = ZES_TEMP_SENSORS_GLOBAL;
|
||||||
};
|
};
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "level_zero/sysman/source/shared/windows/zes_os_sysman_imp.h"
|
||||||
#include <level_zero/ze_api.h>
|
#include <level_zero/ze_api.h>
|
||||||
#include <level_zero/zes_api.h>
|
#include <level_zero/zes_api.h>
|
||||||
|
|
||||||
|
@ -39,6 +40,8 @@ class SysmanProductHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~SysmanProductHelper() = default;
|
virtual ~SysmanProductHelper() = default;
|
||||||
|
// Temperature
|
||||||
|
virtual ze_result_t getSensorTemperature(double *pTemperature, zes_temp_sensors_t type, WddmSysmanImp *pWddmSysmanImp) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
SysmanProductHelper() = default;
|
SysmanProductHelper() = default;
|
||||||
|
|
|
@ -24,6 +24,9 @@ class SysmanProductHelperHw : public SysmanProductHelper {
|
||||||
|
|
||||||
~SysmanProductHelperHw() override = default;
|
~SysmanProductHelperHw() override = default;
|
||||||
|
|
||||||
|
// Temperature
|
||||||
|
ze_result_t getSensorTemperature(double *pTemperature, zes_temp_sensors_t type, WddmSysmanImp *pWddmSysmanImp) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
SysmanProductHelperHw() = default;
|
SysmanProductHelperHw() = default;
|
||||||
};
|
};
|
||||||
|
|
|
@ -11,5 +11,45 @@
|
||||||
namespace L0 {
|
namespace L0 {
|
||||||
namespace Sysman {
|
namespace Sysman {
|
||||||
|
|
||||||
|
template <PRODUCT_FAMILY gfxProduct>
|
||||||
|
ze_result_t SysmanProductHelperHw<gfxProduct>::getSensorTemperature(double *pTemperature, zes_temp_sensors_t type, WddmSysmanImp *pWddmSysmanImp) {
|
||||||
|
ze_result_t status = ZE_RESULT_SUCCESS;
|
||||||
|
KmdSysManager *pKmdSysManager = &pWddmSysmanImp->getKmdSysManager();
|
||||||
|
KmdSysman::RequestProperty request;
|
||||||
|
KmdSysman::ResponseProperty response;
|
||||||
|
|
||||||
|
request.commandId = KmdSysman::Command::Get;
|
||||||
|
request.componentId = KmdSysman::Component::TemperatureComponent;
|
||||||
|
request.requestId = KmdSysman::Requests::Temperature::CurrentTemperature;
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case ZES_TEMP_SENSORS_GLOBAL:
|
||||||
|
request.paramInfo = KmdSysman::TemperatureDomainsType::TemperatureDomainPackage;
|
||||||
|
break;
|
||||||
|
case ZES_TEMP_SENSORS_GPU:
|
||||||
|
request.paramInfo = KmdSysman::TemperatureDomainsType::TemperatureDomainDGPU;
|
||||||
|
break;
|
||||||
|
case ZES_TEMP_SENSORS_MEMORY:
|
||||||
|
request.paramInfo = KmdSysman::TemperatureDomainsType::TemperatureDomainHBM;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
*pTemperature = 0;
|
||||||
|
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = pKmdSysManager->requestSingle(request, response);
|
||||||
|
|
||||||
|
if (status != ZE_RESULT_SUCCESS) {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t value = 0;
|
||||||
|
memcpy_s(&value, sizeof(uint32_t), response.dataBuffer, sizeof(uint32_t));
|
||||||
|
*pTemperature = static_cast<double>(value);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Sysman
|
} // namespace Sysman
|
||||||
} // namespace L0
|
} // namespace L0
|
||||||
|
|
|
@ -58,6 +58,10 @@ SysmanProductHelper *WddmSysmanImp::getSysmanProductHelper() {
|
||||||
return pSysmanProductHelper.get();
|
return pSysmanProductHelper.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PlatformMonitoringTech *WddmSysmanImp::getSysmanPmt() {
|
||||||
|
return pPmt.get();
|
||||||
|
}
|
||||||
|
|
||||||
void WddmSysmanImp::createFwUtilInterface() {
|
void WddmSysmanImp::createFwUtilInterface() {
|
||||||
const auto pciBusInfo = pParentSysmanDeviceImp->getRootDeviceEnvironment().osInterface->getDriverModel()->getPciBusInfo();
|
const auto pciBusInfo = pParentSysmanDeviceImp->getRootDeviceEnvironment().osInterface->getDriverModel()->getPciBusInfo();
|
||||||
const uint16_t domain = static_cast<uint16_t>(pciBusInfo.pciDomain);
|
const uint16_t domain = static_cast<uint16_t>(pciBusInfo.pciDomain);
|
||||||
|
|
|
@ -40,6 +40,7 @@ class WddmSysmanImp : public OsSysman, NEO::NonCopyableOrMovableClass {
|
||||||
const NEO::HardwareInfo &getHardwareInfo() const override { return pParentSysmanDeviceImp->getHardwareInfo(); }
|
const NEO::HardwareInfo &getHardwareInfo() const override { return pParentSysmanDeviceImp->getHardwareInfo(); }
|
||||||
PRODUCT_FAMILY getProductFamily() const { return pParentSysmanDeviceImp->getProductFamily(); }
|
PRODUCT_FAMILY getProductFamily() const { return pParentSysmanDeviceImp->getProductFamily(); }
|
||||||
SysmanProductHelper *getSysmanProductHelper();
|
SysmanProductHelper *getSysmanProductHelper();
|
||||||
|
PlatformMonitoringTech *getSysmanPmt();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
FirmwareUtil *pFwUtilInterface = nullptr;
|
FirmwareUtil *pFwUtilInterface = nullptr;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (C) 2020-2023 Intel Corporation
|
# Copyright (C) 2020-2024 Intel Corporation
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
#
|
#
|
||||||
|
@ -12,3 +12,4 @@ if(WIN32)
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/test_zes_temperature.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/test_zes_temperature.cpp
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
add_subdirectories()
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2020-2023 Intel Corporation
|
* Copyright (C) 2020-2024 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
|
@ -88,6 +88,12 @@ struct TemperatureKmdSysManager : public MockKmdSysManager {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class PublicPlatformMonitoringTech : public L0::Sysman::PlatformMonitoringTech {
|
||||||
|
public:
|
||||||
|
PublicPlatformMonitoringTech(std::vector<wchar_t> deviceInterfaceList) : PlatformMonitoringTech(deviceInterfaceList) {}
|
||||||
|
using PlatformMonitoringTech::keyOffsetMap;
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace ult
|
} // namespace ult
|
||||||
} // namespace Sysman
|
} // namespace Sysman
|
||||||
} // namespace L0
|
} // namespace L0
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2020-2023 Intel Corporation
|
* Copyright (C) 2020-2024 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "shared/test/common/test_macros/hw_test.h"
|
||||||
|
|
||||||
#include "level_zero/sysman/source/api/temperature/windows/sysman_os_temperature_imp.h"
|
#include "level_zero/sysman/source/api/temperature/windows/sysman_os_temperature_imp.h"
|
||||||
#include "level_zero/sysman/test/unit_tests/sources/temperature/windows/mock_temperature.h"
|
#include "level_zero/sysman/test/unit_tests/sources/temperature/windows/mock_temperature.h"
|
||||||
#include "level_zero/sysman/test/unit_tests/sources/windows/mock_sysman_fixture.h"
|
#include "level_zero/sysman/test/unit_tests/sources/windows/mock_sysman_fixture.h"
|
||||||
|
@ -104,21 +106,21 @@ TEST_F(SysmanDeviceTemperatureFixture, GivenValidPowerHandleWhenGettingTemperatu
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(SysmanDeviceTemperatureFixture, GivenValidTempHandleWhenGettingMemoryTemperatureThenValidTemperatureReadingsRetrieved) {
|
HWTEST2_F(SysmanDeviceTemperatureFixture, GivenValidTempHandleWhenGettingMemoryTemperatureThenValidTemperatureReadingsRetrieved, IsAtMostDg2) {
|
||||||
auto handles = getTempHandles(temperatureHandleComponentCount);
|
auto handles = getTempHandles(temperatureHandleComponentCount);
|
||||||
double temperature;
|
double temperature;
|
||||||
ASSERT_EQ(ZE_RESULT_SUCCESS, zesTemperatureGetState(handles[ZES_TEMP_SENSORS_MEMORY], &temperature));
|
ASSERT_EQ(ZE_RESULT_SUCCESS, zesTemperatureGetState(handles[ZES_TEMP_SENSORS_MEMORY], &temperature));
|
||||||
EXPECT_EQ(temperature, static_cast<double>(pKmdSysManager->mockTempMemory));
|
EXPECT_EQ(temperature, static_cast<double>(pKmdSysManager->mockTempMemory));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(SysmanDeviceTemperatureFixture, GivenValidTempHandleWhenGettingGPUTemperatureThenValidTemperatureReadingsRetrieved) {
|
HWTEST2_F(SysmanDeviceTemperatureFixture, GivenValidTempHandleWhenGettingGPUTemperatureThenValidTemperatureReadingsRetrieved, IsAtMostDg2) {
|
||||||
auto handles = getTempHandles(temperatureHandleComponentCount);
|
auto handles = getTempHandles(temperatureHandleComponentCount);
|
||||||
double temperature;
|
double temperature;
|
||||||
ASSERT_EQ(ZE_RESULT_SUCCESS, zesTemperatureGetState(handles[ZES_TEMP_SENSORS_GPU], &temperature));
|
ASSERT_EQ(ZE_RESULT_SUCCESS, zesTemperatureGetState(handles[ZES_TEMP_SENSORS_GPU], &temperature));
|
||||||
EXPECT_EQ(temperature, static_cast<double>(pKmdSysManager->mockTempGPU));
|
EXPECT_EQ(temperature, static_cast<double>(pKmdSysManager->mockTempGPU));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(SysmanDeviceTemperatureFixture, GivenValidTempHandleWhenGettingGlobalTemperatureThenValidTemperatureReadingsRetrieved) {
|
HWTEST2_F(SysmanDeviceTemperatureFixture, GivenValidTempHandleWhenGettingGlobalTemperatureThenValidTemperatureReadingsRetrieved, IsAtMostDg2) {
|
||||||
auto handles = getTempHandles(temperatureHandleComponentCount);
|
auto handles = getTempHandles(temperatureHandleComponentCount);
|
||||||
double temperature;
|
double temperature;
|
||||||
ASSERT_EQ(ZE_RESULT_SUCCESS, zesTemperatureGetState(handles[ZES_TEMP_SENSORS_GLOBAL], &temperature));
|
ASSERT_EQ(ZE_RESULT_SUCCESS, zesTemperatureGetState(handles[ZES_TEMP_SENSORS_GLOBAL], &temperature));
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2020-2023 Intel Corporation
|
* Copyright (C) 2020-2024 Intel Corporation
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*
|
*
|
||||||
|
@ -27,6 +27,7 @@ class PublicWddmSysmanImp : public L0::Sysman::WddmSysmanImp {
|
||||||
public:
|
public:
|
||||||
using WddmSysmanImp::pFwUtilInterface;
|
using WddmSysmanImp::pFwUtilInterface;
|
||||||
using WddmSysmanImp::pKmdSysManager;
|
using WddmSysmanImp::pKmdSysManager;
|
||||||
|
using WddmSysmanImp::pPmt;
|
||||||
};
|
};
|
||||||
|
|
||||||
class SysmanDeviceFixture : public ::testing::Test {
|
class SysmanDeviceFixture : public ::testing::Test {
|
||||||
|
|
|
@ -172,6 +172,11 @@ TEST_F(SysmanDevicePmtFixture, GivenInvalidPmtInterfaceWhenCallingCreateThenCall
|
||||||
EXPECT_EQ(nullptr, pPmt);
|
EXPECT_EQ(nullptr, pPmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(SysmanDevicePmtFixture, GivenInvalidPmtInterfaceWhenCallingGetSysmanPmtThenCallReturnsNullPtr) {
|
||||||
|
PlatformMonitoringTech *pPmt = pWddmSysmanImp->getSysmanPmt();
|
||||||
|
EXPECT_EQ(nullptr, pPmt);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ult
|
} // namespace ult
|
||||||
} // namespace Sysman
|
} // namespace Sysman
|
||||||
} // namespace L0
|
} // namespace L0
|
||||||
|
|
Loading…
Reference in New Issue