diff --git a/tests/kfdtest/scripts/kfdtest.exclude b/tests/kfdtest/scripts/kfdtest.exclude index 92fdc31bbe..a19b08dda7 100644 --- a/tests/kfdtest/scripts/kfdtest.exclude +++ b/tests/kfdtest/scripts/kfdtest.exclude @@ -18,6 +18,7 @@ FILTER[core_sws]=\ "KFDQMTest.SubmitNopSdmaQueue:"\ "KFDQMTest.SubmitPacketSdmaQueue:"\ "KFDQMTest.AllSdmaQueues:"\ +"KFDQMTest.AllXgmiSdmaQueues:"\ "KFDQMTest.AllQueues:"\ "KFDEventTest.SignalEvent" diff --git a/tests/kfdtest/src/KFDQMTest.cpp b/tests/kfdtest/src/KFDQMTest.cpp index 0d8a43886f..6a0d60db46 100644 --- a/tests/kfdtest/src/KFDQMTest.cpp +++ b/tests/kfdtest/src/KFDQMTest.cpp @@ -28,7 +28,7 @@ #include "PM4Queue.hpp" #include "PM4Packet.hpp" #include "SDMAPacket.hpp" -#include "SDMAQueue.hpp" +#include "XgmiOptimizedSDMAQueue.hpp" #include "AqlQueue.hpp" #include @@ -212,6 +212,9 @@ TEST_F(KFDQMTest, AllSdmaQueues) { const unsigned int numSdmaQueues = m_numSdmaEngines * m_numSdmaQueuesPerEngine; + LOG() << "Regular SDMA engines number: " << m_numSdmaEngines + << " SDMA queues per engine: " << m_numSdmaQueuesPerEngine << std::endl; + HsaMemoryBuffer destBuf(bufSize << 1 , defaultGPUNode, false); HsaMemoryBuffer srcBuf(bufSize, defaultGPUNode, false); destBuf.Fill(0xFF); @@ -243,6 +246,53 @@ TEST_F(KFDQMTest, AllSdmaQueues) { TEST_END } +TEST_F(KFDQMTest, AllXgmiSdmaQueues) { + TEST_START(TESTPROFILE_RUNALL) + + int defaultGPUNode = m_NodeInfo.HsaDefaultGPUNode(); + int bufSize = PAGE_SIZE; + int j; + ASSERT_GE(defaultGPUNode, 0) << "failed to get default GPU Node"; + + const unsigned int numXgmiSdmaQueues = + m_numSdmaXgmiEngines * m_numSdmaQueuesPerEngine; + + LOG() << "XGMI SDMA engines number: " << m_numSdmaXgmiEngines + << " SDMA queues per engine: " << m_numSdmaQueuesPerEngine << std::endl; + + HsaMemoryBuffer destBuf(bufSize << 1 , defaultGPUNode, false); + HsaMemoryBuffer srcBuf(bufSize, defaultGPUNode, false); + destBuf.Fill(0xFF); + + std::vector xgmiSdmaQueues(numXgmiSdmaQueues); + + for (j = 0; j < numXgmiSdmaQueues; ++j) + ASSERT_SUCCESS(xgmiSdmaQueues[j].Create(defaultGPUNode)); + + for (j = 0; j < numXgmiSdmaQueues; ++j) { + destBuf.Fill(0x0); + srcBuf.Fill(j + 0xa0); + xgmiSdmaQueues[j].PlaceAndSubmitPacket( + SDMACopyDataPacket(xgmiSdmaQueues[j].GetFamilyId(), + destBuf.As(), srcBuf.As(), bufSize)); + xgmiSdmaQueues[j].PlaceAndSubmitPacket( + SDMAWriteDataPacket(xgmiSdmaQueues[j].GetFamilyId(), + destBuf.As() + bufSize/4, 0x02020202)); + + xgmiSdmaQueues[j].Wait4PacketConsumption(); + + EXPECT_TRUE(WaitOnValue(destBuf.As() + bufSize/4, 0x02020202)); + + EXPECT_SUCCESS(memcmp( + destBuf.As(), srcBuf.As(), bufSize)); + } + + for (j = 0; j < numXgmiSdmaQueues; ++j) + EXPECT_SUCCESS(xgmiSdmaQueues[j].Destroy()); + + TEST_END +} + TEST_F(KFDQMTest, AllQueues) { TEST_START(TESTPROFILE_RUNALL) @@ -254,6 +304,8 @@ TEST_F(KFDQMTest, AllQueues) { const unsigned int numCpQueues = m_numCpQueues; const unsigned int numSdmaQueues = m_numSdmaEngines * m_numSdmaQueuesPerEngine; + const unsigned int numXgmiSdmaQueues = + m_numSdmaXgmiEngines * m_numSdmaQueuesPerEngine; HsaMemoryBuffer destBufCp(PAGE_SIZE, defaultGPUNode, false); destBufCp.Fill(0xFF); @@ -264,6 +316,7 @@ TEST_F(KFDQMTest, AllQueues) { std::vector cpQueues(numCpQueues); std::vector sdmaQueues(numSdmaQueues); + std::vector xgmiSdmaQueues(numXgmiSdmaQueues); for (i = 0; i < numCpQueues; ++i) ASSERT_SUCCESS(cpQueues[i].Create(defaultGPUNode)) << " QueueId=" << i; @@ -271,6 +324,10 @@ TEST_F(KFDQMTest, AllQueues) { for (j = 0; j < numSdmaQueues; ++j) ASSERT_SUCCESS(sdmaQueues[j].Create(defaultGPUNode)); + for (j = 0; j < numXgmiSdmaQueues; ++j) + ASSERT_SUCCESS(xgmiSdmaQueues[j].Create(defaultGPUNode)); + + for (i = 0; i < numCpQueues; ++i) { cpQueues[i].PlaceAndSubmitPacket(PM4WriteDataPacket(destBufCp.As()+i*2, i, i)); @@ -295,12 +352,34 @@ TEST_F(KFDQMTest, AllQueues) { destBuf.As(), srcBuf.As(), bufSize)); } + for (j = 0; j < numXgmiSdmaQueues; ++j) { + destBuf.Fill(0x0); + srcBuf.Fill(j + 0xa0); + xgmiSdmaQueues[j].PlaceAndSubmitPacket( + SDMACopyDataPacket(xgmiSdmaQueues[j].GetFamilyId(), + destBuf.As(), srcBuf.As(), bufSize)); + xgmiSdmaQueues[j].PlaceAndSubmitPacket( + SDMAWriteDataPacket(xgmiSdmaQueues[j].GetFamilyId(), + destBuf.As() + bufSize/4, 0x02020202)); + + xgmiSdmaQueues[j].Wait4PacketConsumption(); + + EXPECT_TRUE(WaitOnValue(destBuf.As() + bufSize/4, 0x02020202)); + + EXPECT_SUCCESS(memcmp( + destBuf.As(), srcBuf.As(), bufSize)); + } + + for (i = 0; i < numCpQueues; ++i) EXPECT_SUCCESS(cpQueues[i].Destroy()); for (j = 0; j < numSdmaQueues; ++j) EXPECT_SUCCESS(sdmaQueues[j].Destroy()); + for (j = 0; j < numXgmiSdmaQueues; ++j) + EXPECT_SUCCESS(xgmiSdmaQueues[j].Destroy()); + TEST_END }