diff --git a/level_zero/sysman/source/shared/windows/product_helper/xe2_hpg_core/bmg/sysman_product_helper_bmg.cpp b/level_zero/sysman/source/shared/windows/product_helper/xe2_hpg_core/bmg/sysman_product_helper_bmg.cpp index 9ba4c0610f..082d481c4c 100644 --- a/level_zero/sysman/source/shared/windows/product_helper/xe2_hpg_core/bmg/sysman_product_helper_bmg.cpp +++ b/level_zero/sysman/source/shared/windows/product_helper/xe2_hpg_core/bmg/sysman_product_helper_bmg.cpp @@ -713,7 +713,21 @@ ze_result_t SysmanProductHelperHw::getPciStats(zes_pci_stats_t *pSta } pStats->packetCounter = packInto64Bit(txPacketCounterH, txPacketCounterL) + packInto64Bit(rxPacketCounterH, rxPacketCounterL); - pStats->timestamp = SysmanDevice::getSysmanTimestamp(); + + // timestamp calculation + uint32_t timeStampL = 0; + uint32_t timeStampH = 0; + + status = pPmt->readValue("GDDR_TELEM_CAPTURE_TIMESTAMP_UPPER", timeStampH); + if (status != ZE_RESULT_SUCCESS) { + return status; + } + status = pPmt->readValue("GDDR_TELEM_CAPTURE_TIMESTAMP_LOWER", timeStampL); + if (status != ZE_RESULT_SUCCESS) { + return status; + } + // timestamp from PMT is in milli seconds + pStats->timestamp = packInto64Bit(timeStampH, timeStampL) * milliSecsToMicroSecs; return status; } @@ -842,7 +856,8 @@ ze_result_t SysmanProductHelperHw::getMemoryBandWidth(zes_mem_bandwi return status; } - pBandwidth->timestamp = packInto64Bit(timeStampH, timeStampL); + // timestamp from PMT is in milli seconds + pBandwidth->timestamp = packInto64Bit(timeStampH, timeStampL) * milliSecsToMicroSecs; return status; } diff --git a/level_zero/sysman/test/unit_tests/sources/pci/windows/mock_pci.h b/level_zero/sysman/test/unit_tests/sources/pci/windows/mock_pci.h index 1722f90c20..823fa51e07 100644 --- a/level_zero/sysman/test/unit_tests/sources/pci/windows/mock_pci.h +++ b/level_zero/sysman/test/unit_tests/sources/pci/windows/mock_pci.h @@ -19,6 +19,7 @@ constexpr uint64_t mockRxCounter = 24200000u; constexpr uint64_t mockTxCounter = 231000000u; constexpr uint64_t mockRxPacketCounter = 300000u; constexpr uint64_t mockTxPacketCounter = 200000u; +constexpr uint64_t mockTimestamp = 120000u; struct PciKmdSysManager : public MockKmdSysManager { // PciCurrentDevice, PciParentDevice, PciRootPort diff --git a/level_zero/sysman/test/unit_tests/sources/pci/windows/test_zes_pci.cpp b/level_zero/sysman/test/unit_tests/sources/pci/windows/test_zes_pci.cpp index ad9c4d644e..a69d0cd322 100644 --- a/level_zero/sysman/test/unit_tests/sources/pci/windows/test_zes_pci.cpp +++ b/level_zero/sysman/test/unit_tests/sources/pci/windows/test_zes_pci.cpp @@ -27,7 +27,9 @@ const std::map> dummyKeyOffsetMap = { {"rx_pkt_count_lsb", {74, 1}}, {"rx_pkt_count_msb", {73, 1}}, {"tx_pkt_count_lsb", {76, 1}}, - {"tx_pkt_count_msb", {75, 1}}}}; + {"tx_pkt_count_msb", {75, 1}}, + {"GDDR_TELEM_CAPTURE_TIMESTAMP_UPPER", {92, 1}}, + {"GDDR_TELEM_CAPTURE_TIMESTAMP_LOWER", {93, 1}}}}; const std::wstring pmtInterfaceName = L"TEST\0"; std::vector deviceInterfacePci(pmtInterfaceName.begin(), pmtInterfaceName.end()); @@ -351,6 +353,10 @@ HWTEST2_F(SysmanDevicePciFixture, GivenValidDeviceHandleWhenGettingZesDevicePciG *lpBytesReturned = 4; *static_cast(lpOutBuffer) = mockTxPacketCounter; return true; + case 93: + *lpBytesReturned = 8; + *static_cast(lpOutBuffer) = mockTimestamp; + return true; default: *lpBytesReturned = 4; *static_cast(lpOutBuffer) = 0; @@ -364,6 +370,7 @@ HWTEST2_F(SysmanDevicePciFixture, GivenValidDeviceHandleWhenGettingZesDevicePciG EXPECT_EQ(stats.rxCounter, mockRxCounter); EXPECT_EQ(stats.txCounter, mockTxCounter); EXPECT_EQ(stats.packetCounter, mockRxPacketCounter + mockTxPacketCounter); + EXPECT_EQ(stats.timestamp, mockTimestamp * milliSecsToMicroSecs); } HWTEST2_F(SysmanDevicePciFixture, GivenNullPmtHandleWhenGettingZesDevicePciGetStatsThenCallFails, IsBMG) { @@ -374,7 +381,7 @@ HWTEST2_F(SysmanDevicePciFixture, GivenNullPmtHandleWhenGettingZesDevicePciGetSt } HWTEST2_F(SysmanDevicePciFixture, GivenValidPmtHandleWhenCallingZesDevicePciGetStatsAndIoctlFailsThenCallsFails, IsBMG) { - static int count = 8; + static int count = 10; VariableBackup psysCallsCreateFile(&NEO::SysCalls::sysCallsCreateFile, [](LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) -> HANDLE { return reinterpret_cast(static_cast(0x7)); }); @@ -413,6 +420,14 @@ HWTEST2_F(SysmanDevicePciFixture, GivenValidPmtHandleWhenCallingZesDevicePciGetS *lpBytesReturned = 4; *static_cast(lpOutBuffer) = mockTxPacketCounter; return count == 8 ? false : true; + case 92: + *lpBytesReturned = 4; + *static_cast(lpOutBuffer) = 0; + return count == 9 ? false : true; + case 93: + *lpBytesReturned = 4; + *static_cast(lpOutBuffer) = mockTimestamp; + return count == 10 ? false : true; } return false; }); diff --git a/level_zero/sysman/test/unit_tests/sources/shared/windows/product_helper/sysman_product_helper_memory_tests.cpp b/level_zero/sysman/test/unit_tests/sources/shared/windows/product_helper/sysman_product_helper_memory_tests.cpp index 464290e9ec..8ac91593d0 100644 --- a/level_zero/sysman/test/unit_tests/sources/shared/windows/product_helper/sysman_product_helper_memory_tests.cpp +++ b/level_zero/sysman/test/unit_tests/sources/shared/windows/product_helper/sysman_product_helper_memory_tests.cpp @@ -124,7 +124,7 @@ HWTEST2_F(SysmanDeviceMemoryHelperFixture, GivenValidMemoryHandleWhenGettingBand return true; case 93: *lpBytesReturned = 8; - *static_cast(lpOutBuffer) = 1230000; + *static_cast(lpOutBuffer) = mockMemoryBandwidthTimestamp; return true; default: *lpBytesReturned = 8; @@ -147,7 +147,7 @@ HWTEST2_F(SysmanDeviceMemoryHelperFixture, GivenValidMemoryHandleWhenGettingBand EXPECT_EQ(bandwidth.maxBandwidth, static_cast(mockMemoryMaxBandwidth * megaBytesToBytes * 100)); EXPECT_EQ(bandwidth.readCounter, (6 * mockPmtBandWidthVariableBackupValue * 32) + (6 * mockPmtBandWidthVariableBackupValue * 64)); EXPECT_EQ(bandwidth.writeCounter, (4 * mockPmtBandWidthVariableBackupValue * 32) + (4 * mockPmtBandWidthVariableBackupValue * 64)); - EXPECT_EQ(bandwidth.timestamp, mockMemoryBandwidthTimestamp); + EXPECT_EQ(bandwidth.timestamp, mockMemoryBandwidthTimestamp * milliSecsToMicroSecs); } }