Add support for board number property
Related-To: LOCI-3545 Signed-off-by: Bellekallu Rajkiran <bellekallu.rajkiran@intel.com>
This commit is contained in:
parent
2c71df0957
commit
4bbec2dbf4
|
@ -73,7 +73,10 @@ void GlobalOperationsImp::init() {
|
|||
pOsGlobalOperations->getDriverVersion(sysmanProperties.driverVersion);
|
||||
pOsGlobalOperations->getModelName(sysmanProperties.modelName);
|
||||
pOsGlobalOperations->getBrandName(sysmanProperties.brandName);
|
||||
pOsGlobalOperations->getBoardNumber(sysmanProperties.boardNumber);
|
||||
memset(sysmanProperties.boardNumber, 0, ZES_STRING_PROPERTY_SIZE);
|
||||
if (!pOsGlobalOperations->getBoardNumber(sysmanProperties.boardNumber)) {
|
||||
memcpy_s(sysmanProperties.boardNumber, ZES_STRING_PROPERTY_SIZE, unknown.c_str(), unknown.length() + 1);
|
||||
}
|
||||
memset(sysmanProperties.serialNumber, 0, ZES_STRING_PROPERTY_SIZE);
|
||||
if (!pOsGlobalOperations->getSerialNumber(sysmanProperties.serialNumber)) {
|
||||
memcpy_s(sysmanProperties.serialNumber, ZES_STRING_PROPERTY_SIZE, unknown.c_str(), unknown.length() + 1);
|
||||
|
|
|
@ -42,25 +42,7 @@ static const std::map<int, zes_engine_type_flags_t> engineMap = {
|
|||
{3, ZES_ENGINE_TYPE_FLAG_MEDIA},
|
||||
{4, ZES_ENGINE_TYPE_FLAG_COMPUTE}};
|
||||
|
||||
bool LinuxGlobalOperationsImp::readSerialNumber(std::string_view telemDir, std::array<char, NEO::PmtUtil::guidStringSize> &guidString, const uint64_t offset, char (&serialNumber)[ZES_STRING_PROPERTY_SIZE]) {
|
||||
std::map<std::string, uint64_t> keyOffsetMap;
|
||||
if (ZE_RESULT_SUCCESS == PlatformMonitoringTech::getKeyOffsetMap(guidString.data(), keyOffsetMap)) {
|
||||
auto ppinOffset = keyOffsetMap.find("PPIN");
|
||||
if (ppinOffset != keyOffsetMap.end()) {
|
||||
uint64_t value;
|
||||
ssize_t bytesRead = NEO::PmtUtil::readTelem(telemDir.data(), sizeof(uint64_t), ppinOffset->second + offset, &value);
|
||||
if (bytesRead == sizeof(uint64_t)) {
|
||||
std::ostringstream serialNumberString;
|
||||
serialNumberString << std::hex << std::showbase << value;
|
||||
memcpy_s(serialNumber, ZES_STRING_PROPERTY_SIZE, serialNumberString.str().c_str(), serialNumberString.str().size());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool LinuxGlobalOperationsImp::getSerialNumber(char (&serialNumber)[ZES_STRING_PROPERTY_SIZE]) {
|
||||
bool LinuxGlobalOperationsImp::readTelemData(char (&data)[ZES_STRING_PROPERTY_SIZE], const ssize_t bytesToRead, const std::string &key) {
|
||||
auto pDrm = &pLinuxSysmanImp->getDrm();
|
||||
std::optional<std::string> rootPath = NEO::getPciRootPath(pDrm->getFileDescriptor());
|
||||
if (!rootPath.has_value()) {
|
||||
|
@ -69,15 +51,14 @@ bool LinuxGlobalOperationsImp::getSerialNumber(char (&serialNumber)[ZES_STRING_P
|
|||
|
||||
std::map<uint32_t, std::string> telemPciPath;
|
||||
NEO::PmtUtil::getTelemNodesInPciPath(rootPath.value(), telemPciPath);
|
||||
|
||||
if (telemPciPath.size() < pDevice->getNEODevice()->getNumSubDevices() + 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
auto iterator = telemPciPath.begin();
|
||||
std::string telemDir = iterator->second;
|
||||
std::string_view telemDir = iterator->second;
|
||||
|
||||
std::array<char, NEO::PmtUtil::guidStringSize> guidString;
|
||||
std::array<char, NEO::PmtUtil::guidStringSize> guidString = {};
|
||||
if (!NEO::PmtUtil::readGuid(telemDir, guidString)) {
|
||||
return false;
|
||||
}
|
||||
|
@ -87,10 +68,27 @@ bool LinuxGlobalOperationsImp::getSerialNumber(char (&serialNumber)[ZES_STRING_P
|
|||
return false;
|
||||
}
|
||||
|
||||
if (!LinuxGlobalOperationsImp::readSerialNumber(telemDir, guidString, offset, serialNumber)) {
|
||||
std::map<std::string, uint64_t> keyOffsetMap;
|
||||
if (ZE_RESULT_SUCCESS == PlatformMonitoringTech::getKeyOffsetMap(guidString.data(), keyOffsetMap)) {
|
||||
auto keyOffset = keyOffsetMap.find(key.c_str());
|
||||
if (keyOffset != keyOffsetMap.end()) {
|
||||
uint64_t value;
|
||||
ssize_t bytesRead = NEO::PmtUtil::readTelem(telemDir.data(), bytesToRead, keyOffset->second + offset, &value);
|
||||
if (bytesRead == bytesToRead) {
|
||||
std::ostringstream telemDataString;
|
||||
telemDataString << std::hex << std::showbase << value;
|
||||
memcpy_s(data, ZES_STRING_PROPERTY_SIZE, telemDataString.str().c_str(), telemDataString.str().size());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool LinuxGlobalOperationsImp::getSerialNumber(char (&serialNumber)[ZES_STRING_PROPERTY_SIZE]) {
|
||||
if (!LinuxGlobalOperationsImp::readTelemData(serialNumber, sizeof(uint64_t), "PPIN")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -98,8 +96,13 @@ Device *LinuxGlobalOperationsImp::getDevice() {
|
|||
return pDevice;
|
||||
}
|
||||
|
||||
void LinuxGlobalOperationsImp::getBoardNumber(char (&boardNumber)[ZES_STRING_PROPERTY_SIZE]) {
|
||||
std::strncpy(boardNumber, unknown.c_str(), ZES_STRING_PROPERTY_SIZE);
|
||||
bool LinuxGlobalOperationsImp::getBoardNumber(char (&boardNumber)[ZES_STRING_PROPERTY_SIZE]) {
|
||||
const ssize_t boardNumberSize = 32;
|
||||
if (!LinuxGlobalOperationsImp::readTelemData(boardNumber, boardNumberSize, "BoardNumber")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void LinuxGlobalOperationsImp::getBrandName(char (&brandName)[ZES_STRING_PROPERTY_SIZE]) {
|
||||
|
|
|
@ -18,7 +18,7 @@ struct Device;
|
|||
class LinuxGlobalOperationsImp : public OsGlobalOperations, NEO::NonCopyableOrMovableClass {
|
||||
public:
|
||||
bool getSerialNumber(char (&serialNumber)[ZES_STRING_PROPERTY_SIZE]) override;
|
||||
void getBoardNumber(char (&boardNumber)[ZES_STRING_PROPERTY_SIZE]) override;
|
||||
bool getBoardNumber(char (&boardNumber)[ZES_STRING_PROPERTY_SIZE]) override;
|
||||
void getBrandName(char (&brandName)[ZES_STRING_PROPERTY_SIZE]) override;
|
||||
void getModelName(char (&modelName)[ZES_STRING_PROPERTY_SIZE]) override;
|
||||
void getVendorName(char (&vendorName)[ZES_STRING_PROPERTY_SIZE]) override;
|
||||
|
@ -54,7 +54,7 @@ class LinuxGlobalOperationsImp : public OsGlobalOperations, NEO::NonCopyableOrMo
|
|||
static const std::string srcVersionFile;
|
||||
static const std::string agamaVersionFile;
|
||||
static const std::string ueventWedgedFile;
|
||||
static bool readSerialNumber(std::string_view telemDir, std::array<char, NEO::PmtUtil::guidStringSize> &guidString, const uint64_t offset, char (&serialNumber)[ZES_STRING_PROPERTY_SIZE]);
|
||||
bool readTelemData(char (&serialNumber)[ZES_STRING_PROPERTY_SIZE], const ssize_t bytesToRead, const std::string &key);
|
||||
std::string devicePciBdf = "";
|
||||
NEO::ExecutionEnvironment *executionEnvironment = nullptr;
|
||||
uint32_t rootDeviceIndex = 0u;
|
||||
|
|
|
@ -19,7 +19,7 @@ namespace L0 {
|
|||
class OsGlobalOperations {
|
||||
public:
|
||||
virtual bool getSerialNumber(char (&serialNumber)[ZES_STRING_PROPERTY_SIZE]) = 0;
|
||||
virtual void getBoardNumber(char (&boardNumber)[ZES_STRING_PROPERTY_SIZE]) = 0;
|
||||
virtual bool getBoardNumber(char (&boardNumber)[ZES_STRING_PROPERTY_SIZE]) = 0;
|
||||
virtual void getBrandName(char (&brandName)[ZES_STRING_PROPERTY_SIZE]) = 0;
|
||||
virtual void getModelName(char (&modelName)[ZES_STRING_PROPERTY_SIZE]) = 0;
|
||||
virtual void getVendorName(char (&vendorName)[ZES_STRING_PROPERTY_SIZE]) = 0;
|
||||
|
|
|
@ -17,7 +17,8 @@ bool WddmGlobalOperationsImp::getSerialNumber(char (&serialNumber)[ZES_STRING_PR
|
|||
return false;
|
||||
}
|
||||
|
||||
void WddmGlobalOperationsImp::getBoardNumber(char (&boardNumber)[ZES_STRING_PROPERTY_SIZE]) {
|
||||
bool WddmGlobalOperationsImp::getBoardNumber(char (&boardNumber)[ZES_STRING_PROPERTY_SIZE]) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void WddmGlobalOperationsImp::getBrandName(char (&brandName)[ZES_STRING_PROPERTY_SIZE]) {
|
||||
|
|
|
@ -17,7 +17,7 @@ class KmdSysManager;
|
|||
class WddmGlobalOperationsImp : public OsGlobalOperations, NEO::NonCopyableOrMovableClass {
|
||||
public:
|
||||
bool getSerialNumber(char (&serialNumber)[ZES_STRING_PROPERTY_SIZE]) override;
|
||||
void getBoardNumber(char (&boardNumber)[ZES_STRING_PROPERTY_SIZE]) override;
|
||||
bool getBoardNumber(char (&boardNumber)[ZES_STRING_PROPERTY_SIZE]) override;
|
||||
void getBrandName(char (&brandName)[ZES_STRING_PROPERTY_SIZE]) override;
|
||||
void getModelName(char (&modelName)[ZES_STRING_PROPERTY_SIZE]) override;
|
||||
void getVendorName(char (&vendorName)[ZES_STRING_PROPERTY_SIZE]) override;
|
||||
|
|
|
@ -240,5 +240,6 @@ const std::map<std::string, std::map<std::string, uint64_t>> guidToKeyOffsetMap
|
|||
{"VF1_HBM3_READ", 360},
|
||||
{"VF1_HBM3_WRITE", 364}}},
|
||||
{"0x41fe79a5", // For PVC root device
|
||||
{{"PPIN", 152}}}};
|
||||
{{"PPIN", 152},
|
||||
{"BoardNumber", 72}}}};
|
||||
} // namespace L0
|
||||
|
|
|
@ -236,16 +236,16 @@ TEST_F(SysmanGlobalOperationsFixture, GivenValidDeviceHandleWhenCallingzesGlobal
|
|||
pLinuxSysmanImp->pDrm = pDrmMock.get();
|
||||
|
||||
zes_device_properties_t properties;
|
||||
const std::string expectedSerialNumber("0x3e8c9dfe1c2e4d5c");
|
||||
const std::string expectedData("0x3e8c9dfe1c2e4d5c");
|
||||
ze_result_t result = zesDeviceGetProperties(device, &properties);
|
||||
|
||||
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
|
||||
EXPECT_EQ(properties.numSubdevices, 0u);
|
||||
EXPECT_TRUE(0 == unknown.compare(properties.boardNumber));
|
||||
EXPECT_TRUE(0 == expectedData.compare(properties.boardNumber));
|
||||
EXPECT_TRUE(0 == vendorIntel.compare(properties.brandName));
|
||||
EXPECT_TRUE(0 == driverVersion.compare(properties.driverVersion));
|
||||
EXPECT_TRUE(0 == expectedModelName.compare(properties.modelName));
|
||||
EXPECT_TRUE(0 == expectedSerialNumber.compare(properties.serialNumber));
|
||||
EXPECT_TRUE(0 == expectedData.compare(properties.serialNumber));
|
||||
EXPECT_TRUE(0 == vendorIntel.compare(properties.vendorName));
|
||||
pLinuxSysmanImp->pDrm = pOriginalDrm;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue