mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-24 21:18:24 +08:00
feature(sysman): Add a function to get KMD driver name xe/i915/wddm
Related-To: NEO-16010 Signed-off-by: Sarbojit Sarkar <sarbojit.sarkar@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
421b1861e5
commit
4087c80f37
@@ -56,5 +56,6 @@ using zes_structure_type_ext_t = uint32_t;
|
||||
// Sysman structure types
|
||||
#define ZES_INTEL_PCI_LINK_SPEED_DOWNGRADE_EXP_STATE static_cast<zes_structure_type_ext_t>(0x00040001)
|
||||
#define ZES_INTEL_PCI_LINK_SPEED_DOWNGRADE_EXP_PROPERTIES static_cast<zes_structure_type_ext_t>(0x00040002)
|
||||
#define ZES_INTEL_DRIVER_NAME_EXP_PROPERTIES static_cast<zes_structure_type_ext_t>(0x00040003)
|
||||
|
||||
#endif
|
||||
|
||||
@@ -64,6 +64,26 @@ ze_result_t ZE_APICALL zesIntelDevicePciLinkSpeedUpdateExp(
|
||||
zes_device_action_t *pendingAction ///< [out] Pending action
|
||||
);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Query driver name extension Version(s)
|
||||
typedef enum _zes_intel_driver_name_exp_properties_version_t {
|
||||
ZES_INTEL_DRIVER_NAME_EXP_PROPERTIES_VERSION_1_0 = ZE_MAKE_VERSION(1, 0), ///< version 1.0
|
||||
ZES_INTEL_DRIVER_NAME_EXP_PROPERTIES_VERSION_CURRENT = ZE_MAKE_VERSION(1, 0), ///< latest known version
|
||||
ZES_INTEL_DRIVER_NAME_EXP_PROPERTIES_VERSION_FORCE_UINT32 = 0x7fffffff
|
||||
} zes_intel_driver_name_exp_properties_version_t;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief Query driver name.
|
||||
/// This structure can be passed in the 'pNext' of zes_device_properties_t
|
||||
typedef struct _zes_intel_driver_name_exp_properties_t {
|
||||
zes_structure_type_ext_t stype; ///< [in] type of this structure
|
||||
void *pNext; ///< [in][optional] must be null or a pointer to an extension-specific
|
||||
///< structure (i.e. contains stype and pNext).
|
||||
char driverName[ZES_STRING_PROPERTY_SIZE]; ///< [out] Installed driver name (NULL terminated string value). Will be
|
||||
///< set to the string "unknown" if this cannot be determined for the
|
||||
///< device.
|
||||
} zes_intel_driver_name_exp_properties_t;
|
||||
|
||||
#if defined(__cplusplus)
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
@@ -285,6 +285,16 @@ ze_result_t LinuxGlobalOperationsImp::getSubDeviceProperties(uint32_t *pCount, z
|
||||
return ZE_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
void LinuxGlobalOperationsImp::getDriverName(char (&driverVersion)[ZES_STRING_PROPERTY_SIZE]) {
|
||||
std::string version = pLinuxSysmanImp->getDriverName();
|
||||
if (!version.empty()) {
|
||||
std::strncpy(driverVersion, version.c_str(), ZES_STRING_PROPERTY_SIZE);
|
||||
} else {
|
||||
NEO::printDebugString(NEO::debugManager.flags.PrintDebugMessages.get(), stderr, "Error@ %s(): Failed to get driver name from drm \n", __FUNCTION__);
|
||||
std::strncpy(driverVersion, unknown.data(), ZES_STRING_PROPERTY_SIZE);
|
||||
}
|
||||
}
|
||||
|
||||
ze_result_t LinuxGlobalOperationsImp::reset(ze_bool_t force) {
|
||||
auto hwInfo = pLinuxSysmanImp->getParentSysmanDeviceImp()->getHardwareInfo();
|
||||
auto resetType = hwInfo.capabilityTable.isIntegratedDevice ? ZES_RESET_TYPE_FLR : ZES_RESET_TYPE_WARM;
|
||||
|
||||
@@ -38,6 +38,7 @@ class LinuxGlobalOperationsImp : public OsGlobalOperations, NEO::NonCopyableAndN
|
||||
void getModelName(char (&modelName)[ZES_STRING_PROPERTY_SIZE]) override;
|
||||
void getVendorName(char (&vendorName)[ZES_STRING_PROPERTY_SIZE]) override;
|
||||
void getDriverVersion(char (&driverVersion)[ZES_STRING_PROPERTY_SIZE]) override;
|
||||
void getDriverName(char (&driverName)[ZES_STRING_PROPERTY_SIZE]) override;
|
||||
void getRepairStatus(zes_device_state_t *pState) override;
|
||||
void getTimerResolution(double *pTimerResolution) override;
|
||||
ze_result_t reset(ze_bool_t force) override;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2023-2024 Intel Corporation
|
||||
* Copyright (C) 2023-2025 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -10,6 +10,7 @@
|
||||
#include "shared/source/helpers/debug_helpers.h"
|
||||
#include "shared/source/helpers/string.h"
|
||||
|
||||
#include "level_zero/include/level_zero/zes_intel_gpu_sysman.h"
|
||||
#include "level_zero/sysman/source/sysman_const.h"
|
||||
|
||||
#include <algorithm>
|
||||
@@ -117,6 +118,9 @@ ze_result_t GlobalOperationsImp::deviceGetProperties(zes_device_properties_t *pP
|
||||
if (uuidValid) {
|
||||
std::copy_n(std::begin(deviceUuid), ZE_MAX_DEVICE_UUID_SIZE, std::begin(extendedProperties->uuid.id));
|
||||
}
|
||||
} else if (pNext->stype == ZES_INTEL_DRIVER_NAME_EXP_PROPERTIES) {
|
||||
auto driverNameProperties = reinterpret_cast<zes_intel_driver_name_exp_properties_t *>(pNext);
|
||||
pOsGlobalOperations->getDriverName(driverNameProperties->driverName);
|
||||
}
|
||||
|
||||
pNext = static_cast<zes_base_properties_t *>(pNext->pNext);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2023-2024 Intel Corporation
|
||||
* Copyright (C) 2023-2025 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -29,6 +29,7 @@ class OsGlobalOperations {
|
||||
virtual void getModelName(char (&modelName)[ZES_STRING_PROPERTY_SIZE]) = 0;
|
||||
virtual void getVendorName(char (&vendorName)[ZES_STRING_PROPERTY_SIZE]) = 0;
|
||||
virtual void getDriverVersion(char (&driverVersion)[ZES_STRING_PROPERTY_SIZE]) = 0;
|
||||
virtual void getDriverName(char (&driverName)[ZES_STRING_PROPERTY_SIZE]) = 0;
|
||||
virtual void getRepairStatus(zes_device_state_t *pState) = 0;
|
||||
virtual void getTimerResolution(double *pTimerResolution) = 0;
|
||||
virtual bool getUuid(std::array<uint8_t, NEO::ProductHelper::uuidSize> &uuid) = 0;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2023-2024 Intel Corporation
|
||||
* Copyright (C) 2023-2025 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -124,6 +124,12 @@ ze_result_t WddmGlobalOperationsImp::getSubDeviceProperties(uint32_t *pCount, ze
|
||||
return ZE_RESULT_ERROR_UNSUPPORTED_FEATURE;
|
||||
}
|
||||
|
||||
void WddmGlobalOperationsImp::getDriverName(char (&driverVersion)[ZES_STRING_PROPERTY_SIZE]) {
|
||||
std::string driverName = "WDDM";
|
||||
strncpy_s(driverVersion, ZES_STRING_PROPERTY_SIZE, driverName.c_str(), driverName.size());
|
||||
driverVersion[driverName.size()] = '\0';
|
||||
}
|
||||
|
||||
ze_result_t WddmGlobalOperationsImp::reset(ze_bool_t force) {
|
||||
uint32_t value = 0;
|
||||
KmdSysman::RequestProperty request;
|
||||
|
||||
@@ -23,6 +23,7 @@ class WddmGlobalOperationsImp : public OsGlobalOperations, NEO::NonCopyableAndNo
|
||||
void getModelName(char (&modelName)[ZES_STRING_PROPERTY_SIZE]) override;
|
||||
void getVendorName(char (&vendorName)[ZES_STRING_PROPERTY_SIZE]) override;
|
||||
void getDriverVersion(char (&driverVersion)[ZES_STRING_PROPERTY_SIZE]) override;
|
||||
void getDriverName(char (&driverName)[ZES_STRING_PROPERTY_SIZE]) override;
|
||||
void getRepairStatus(zes_device_state_t *pState) override;
|
||||
void getTimerResolution(double *pTimerResolution) override;
|
||||
ze_result_t reset(ze_bool_t force) override;
|
||||
|
||||
@@ -74,6 +74,8 @@ ze_result_t LinuxSysmanImp::init() {
|
||||
pSysfsAccess->getRealPath(deviceDir, gtDevicePath);
|
||||
|
||||
pPmuInterface = PmuInterface::create(this);
|
||||
setDriverName(getDrm()->getDrmVersion(getDrm()->getFileDescriptor()));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -93,6 +95,10 @@ std::string &LinuxSysmanImp::getDeviceName() {
|
||||
return deviceName;
|
||||
}
|
||||
|
||||
std::string &LinuxSysmanImp::getDriverName() {
|
||||
return driverName;
|
||||
}
|
||||
|
||||
SysmanHwDeviceIdDrm::SingleInstance LinuxSysmanImp::getSysmanHwDeviceIdInstance() {
|
||||
UNRECOVERABLE_IF(!getDrm() || !getDrm()->getHwDeviceId());
|
||||
return static_cast<SysmanHwDeviceIdDrm *>(getDrm()->getHwDeviceId().get())->getSingleInstance();
|
||||
|
||||
@@ -73,6 +73,9 @@ class LinuxSysmanImp : public OsSysman, NEO::NonCopyableAndNonMovableClass {
|
||||
SysmanDeviceImp *getParentSysmanDeviceImp() { return pParentSysmanDeviceImp; }
|
||||
std::string &getPciRootPath() { return rootPath; }
|
||||
std::string &getDeviceName();
|
||||
std::string &getDriverName();
|
||||
void setDriverName(const std::string &driverName) { this->driverName = driverName; }
|
||||
std::string devicePciBdf = "";
|
||||
NEO::ExecutionEnvironment *executionEnvironment = nullptr;
|
||||
uint32_t rootDeviceIndex;
|
||||
bool diagnosticsReset = false;
|
||||
@@ -118,6 +121,7 @@ class LinuxSysmanImp : public OsSysman, NEO::NonCopyableAndNonMovableClass {
|
||||
ze_result_t resizeVfBar(uint8_t size);
|
||||
std::mutex fwLock;
|
||||
std::string deviceName;
|
||||
std::string driverName;
|
||||
};
|
||||
|
||||
} // namespace Sysman
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include "shared/test/common/mocks/mock_product_helper.h"
|
||||
#include "shared/test/common/os_interface/linux/sys_calls_linux_ult.h"
|
||||
|
||||
#include "level_zero/include/level_zero/zes_intel_gpu_sysman.h"
|
||||
#include "level_zero/sysman/source/shared/linux/kmd_interface/sysman_kmd_interface.h"
|
||||
#include "level_zero/sysman/source/shared/linux/product_helper/sysman_product_helper_hw.h"
|
||||
#include "level_zero/sysman/test/unit_tests/sources/global_operations/linux/mock_global_operations.h"
|
||||
@@ -676,6 +677,31 @@ TEST_F(SysmanGlobalOperationsFixture,
|
||||
EXPECT_TRUE(0 == unknown.compare(properties.driverVersion));
|
||||
}
|
||||
|
||||
TEST_F(SysmanGlobalOperationsFixture,
|
||||
GivenValidDriverHandleWhenCallingZesDeviceGetPropertiesForCheckingDriverNameWhenDriverNameNotPassedVerifyzesDeviceGetPropertiesCallSucceeds) {
|
||||
|
||||
zes_device_properties_t properties = {ZES_STRUCTURE_TYPE_DEVICE_PROPERTIES};
|
||||
zes_intel_driver_name_exp_properties_t drvName = {ZES_INTEL_DRIVER_NAME_EXP_PROPERTIES};
|
||||
properties.pNext = &drvName;
|
||||
|
||||
ze_result_t result = zesDeviceGetProperties(device, &properties);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
EXPECT_STREQ("unknown", drvName.driverName);
|
||||
}
|
||||
|
||||
TEST_F(SysmanGlobalOperationsFixture,
|
||||
GivenValidDriverHandleWhenCallingZesDeviceGetPropertiesForCheckingDriverNameWhenValidDriverNameSetVerifyValidDriverNameIsReturned) {
|
||||
|
||||
pLinuxSysmanImp->setDriverName("i915");
|
||||
zes_device_properties_t properties = {ZES_STRUCTURE_TYPE_DEVICE_PROPERTIES};
|
||||
zes_intel_driver_name_exp_properties_t drvName = {ZES_INTEL_DRIVER_NAME_EXP_PROPERTIES};
|
||||
properties.pNext = &drvName;
|
||||
|
||||
ze_result_t result = zesDeviceGetProperties(device, &properties);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
EXPECT_STREQ("i915", drvName.driverName);
|
||||
}
|
||||
|
||||
TEST_F(SysmanGlobalOperationsFixture,
|
||||
GivenValidDeviceHandleWhenCallingZesDeviceGetPropertiesForCheckingDevicePropertiesWhenVendorIsUnKnownThenVerifyzesDeviceGetPropertiesCallSucceeds) {
|
||||
pSysfsAccess->mockReadVal[static_cast<int>(MockGlobalOperationsSysfsAccess::Index::mockSubsystemVendor)] = "0xa086";
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include "shared/test/common/mocks/mock_product_helper.h"
|
||||
#include "shared/test/common/test_macros/hw_test.h"
|
||||
|
||||
#include "level_zero/include/level_zero/zes_intel_gpu_sysman.h"
|
||||
#include "level_zero/sysman/source/api/global_operations/windows/sysman_os_global_operations_imp.h"
|
||||
#include "level_zero/sysman/test/unit_tests/sources/global_operations/windows/mock_global_operations.h"
|
||||
#include "level_zero/sysman/test/unit_tests/sources/windows/mock_sysman_fixture.h"
|
||||
@@ -364,6 +365,19 @@ TEST_F(SysmanDevicePropertiesFixture,
|
||||
EXPECT_FALSE(properties.core.flags & ZE_DEVICE_PROPERTY_FLAG_ONDEMANDPAGING);
|
||||
}
|
||||
|
||||
TEST_F(SysmanDevicePropertiesFixture,
|
||||
GivenValidDriverHandleWhenCallingZesDeviceGetPropertiesForCheckingDriverNameVerifyDriverNameIsReturned) {
|
||||
|
||||
std::string driverName = "WDDM";
|
||||
zes_device_properties_t properties = {ZES_STRUCTURE_TYPE_DEVICE_PROPERTIES};
|
||||
zes_intel_driver_name_exp_properties_t drvName = {ZES_INTEL_DRIVER_NAME_EXP_PROPERTIES};
|
||||
properties.pNext = &drvName;
|
||||
|
||||
ze_result_t result = zesDeviceGetProperties(device, &properties);
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
EXPECT_TRUE(0 == driverName.compare(drvName.driverName));
|
||||
}
|
||||
|
||||
HWTEST2_F(SysmanDevicePropertiesFixture,
|
||||
GivenValidDeviceHandleWhenCallingGetPropertiesnAndIsNotIntegratedDeviceThenFlagIsNotSetInCoreProperties, IsXeHpgCore) {
|
||||
auto mockHardwareInfo = device->getHardwareInfo();
|
||||
|
||||
@@ -1505,6 +1505,8 @@ void testSysmanGlobalOperations(ze_device_handle_t &device) {
|
||||
std::cout << std::endl
|
||||
<< " ---- Global Operations tests ---- " << std::endl;
|
||||
zes_device_properties_t properties = {};
|
||||
zes_intel_driver_name_exp_properties_t drvName = {ZES_INTEL_DRIVER_NAME_EXP_PROPERTIES};
|
||||
properties.pNext = &drvName;
|
||||
VALIDATECALL(zesDeviceGetProperties(device, &properties));
|
||||
if (verbose) {
|
||||
std::cout << "properties.numSubdevices = " << properties.numSubdevices << std::endl;
|
||||
@@ -1534,6 +1536,7 @@ void testSysmanGlobalOperations(ze_device_handle_t &device) {
|
||||
}
|
||||
std::cout << std::endl;
|
||||
std::cout << "properties.core.name = " << properties.core.name << std::endl;
|
||||
std::cout << "driver name = " << drvName.driverName << std::endl;
|
||||
}
|
||||
|
||||
uint32_t count = 0;
|
||||
|
||||
Reference in New Issue
Block a user