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
|
||||
*
|
||||
|
@ -7,6 +7,7 @@
|
|||
|
||||
#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"
|
||||
|
||||
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 status = ZE_RESULT_SUCCESS;
|
||||
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;
|
||||
auto pSysmanProductHelper = pWddmSysmanImp->getSysmanProductHelper();
|
||||
return pSysmanProductHelper->getSensorTemperature(pTemperature, type, pWddmSysmanImp);
|
||||
}
|
||||
|
||||
uint32_t WddmTemperatureImp::getNumTempDomainsSupported() {
|
||||
|
@ -163,7 +131,7 @@ void WddmTemperatureImp::setSensorType(zes_temp_sensors_t sensorType) {
|
|||
}
|
||||
|
||||
WddmTemperatureImp::WddmTemperatureImp(OsSysman *pOsSysman) {
|
||||
WddmSysmanImp *pWddmSysmanImp = static_cast<WddmSysmanImp *>(pOsSysman);
|
||||
pWddmSysmanImp = static_cast<WddmSysmanImp *>(pOsSysman);
|
||||
pKmdSysManager = &pWddmSysmanImp->getKmdSysManager();
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2020-2023 Intel Corporation
|
||||
* Copyright (C) 2020-2024 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
@ -26,6 +26,7 @@ class WddmTemperatureImp : public OsTemperature, NEO::NonCopyableOrMovableClass
|
|||
~WddmTemperatureImp() override = default;
|
||||
|
||||
protected:
|
||||
WddmSysmanImp *pWddmSysmanImp = nullptr;
|
||||
KmdSysManager *pKmdSysManager = nullptr;
|
||||
zes_temp_sensors_t type = ZES_TEMP_SENSORS_GLOBAL;
|
||||
};
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include "level_zero/sysman/source/shared/windows/zes_os_sysman_imp.h"
|
||||
#include <level_zero/ze_api.h>
|
||||
#include <level_zero/zes_api.h>
|
||||
|
||||
|
@ -39,6 +40,8 @@ class SysmanProductHelper {
|
|||
}
|
||||
|
||||
virtual ~SysmanProductHelper() = default;
|
||||
// Temperature
|
||||
virtual ze_result_t getSensorTemperature(double *pTemperature, zes_temp_sensors_t type, WddmSysmanImp *pWddmSysmanImp) = 0;
|
||||
|
||||
protected:
|
||||
SysmanProductHelper() = default;
|
||||
|
|
|
@ -24,6 +24,9 @@ class SysmanProductHelperHw : public SysmanProductHelper {
|
|||
|
||||
~SysmanProductHelperHw() override = default;
|
||||
|
||||
// Temperature
|
||||
ze_result_t getSensorTemperature(double *pTemperature, zes_temp_sensors_t type, WddmSysmanImp *pWddmSysmanImp) override;
|
||||
|
||||
protected:
|
||||
SysmanProductHelperHw() = default;
|
||||
};
|
||||
|
|
|
@ -11,5 +11,45 @@
|
|||
namespace L0 {
|
||||
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 L0
|
||||
|
|
|
@ -58,6 +58,10 @@ SysmanProductHelper *WddmSysmanImp::getSysmanProductHelper() {
|
|||
return pSysmanProductHelper.get();
|
||||
}
|
||||
|
||||
PlatformMonitoringTech *WddmSysmanImp::getSysmanPmt() {
|
||||
return pPmt.get();
|
||||
}
|
||||
|
||||
void WddmSysmanImp::createFwUtilInterface() {
|
||||
const auto pciBusInfo = pParentSysmanDeviceImp->getRootDeviceEnvironment().osInterface->getDriverModel()->getPciBusInfo();
|
||||
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(); }
|
||||
PRODUCT_FAMILY getProductFamily() const { return pParentSysmanDeviceImp->getProductFamily(); }
|
||||
SysmanProductHelper *getSysmanProductHelper();
|
||||
PlatformMonitoringTech *getSysmanPmt();
|
||||
|
||||
protected:
|
||||
FirmwareUtil *pFwUtilInterface = nullptr;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (C) 2020-2023 Intel Corporation
|
||||
# Copyright (C) 2020-2024 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
|
@ -12,3 +12,4 @@ if(WIN32)
|
|||
${CMAKE_CURRENT_SOURCE_DIR}/test_zes_temperature.cpp
|
||||
)
|
||||
endif()
|
||||
add_subdirectories()
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2020-2023 Intel Corporation
|
||||
* Copyright (C) 2020-2024 Intel Corporation
|
||||
*
|
||||
* 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 Sysman
|
||||
} // namespace L0
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
/*
|
||||
* Copyright (C) 2020-2023 Intel Corporation
|
||||
* Copyright (C) 2020-2024 Intel Corporation
|
||||
*
|
||||
* 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/test/unit_tests/sources/temperature/windows/mock_temperature.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);
|
||||
double temperature;
|
||||
ASSERT_EQ(ZE_RESULT_SUCCESS, zesTemperatureGetState(handles[ZES_TEMP_SENSORS_MEMORY], &temperature));
|
||||
EXPECT_EQ(temperature, static_cast<double>(pKmdSysManager->mockTempMemory));
|
||||
}
|
||||
|
||||
TEST_F(SysmanDeviceTemperatureFixture, GivenValidTempHandleWhenGettingGPUTemperatureThenValidTemperatureReadingsRetrieved) {
|
||||
HWTEST2_F(SysmanDeviceTemperatureFixture, GivenValidTempHandleWhenGettingGPUTemperatureThenValidTemperatureReadingsRetrieved, IsAtMostDg2) {
|
||||
auto handles = getTempHandles(temperatureHandleComponentCount);
|
||||
double temperature;
|
||||
ASSERT_EQ(ZE_RESULT_SUCCESS, zesTemperatureGetState(handles[ZES_TEMP_SENSORS_GPU], &temperature));
|
||||
EXPECT_EQ(temperature, static_cast<double>(pKmdSysManager->mockTempGPU));
|
||||
}
|
||||
|
||||
TEST_F(SysmanDeviceTemperatureFixture, GivenValidTempHandleWhenGettingGlobalTemperatureThenValidTemperatureReadingsRetrieved) {
|
||||
HWTEST2_F(SysmanDeviceTemperatureFixture, GivenValidTempHandleWhenGettingGlobalTemperatureThenValidTemperatureReadingsRetrieved, IsAtMostDg2) {
|
||||
auto handles = getTempHandles(temperatureHandleComponentCount);
|
||||
double 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
|
||||
*
|
||||
|
@ -27,6 +27,7 @@ class PublicWddmSysmanImp : public L0::Sysman::WddmSysmanImp {
|
|||
public:
|
||||
using WddmSysmanImp::pFwUtilInterface;
|
||||
using WddmSysmanImp::pKmdSysManager;
|
||||
using WddmSysmanImp::pPmt;
|
||||
};
|
||||
|
||||
class SysmanDeviceFixture : public ::testing::Test {
|
||||
|
|
|
@ -172,6 +172,11 @@ TEST_F(SysmanDevicePmtFixture, GivenInvalidPmtInterfaceWhenCallingCreateThenCall
|
|||
EXPECT_EQ(nullptr, pPmt);
|
||||
}
|
||||
|
||||
TEST_F(SysmanDevicePmtFixture, GivenInvalidPmtInterfaceWhenCallingGetSysmanPmtThenCallReturnsNullPtr) {
|
||||
PlatformMonitoringTech *pPmt = pWddmSysmanImp->getSysmanPmt();
|
||||
EXPECT_EQ(nullptr, pPmt);
|
||||
}
|
||||
|
||||
} // namespace ult
|
||||
} // namespace Sysman
|
||||
} // namespace L0
|
||||
|
|
Loading…
Reference in New Issue