From 8afdf520015b8d721dfb937032a5695740bf3237 Mon Sep 17 00:00:00 2001 From: Felix Kuehling Date: Wed, 30 Oct 2019 21:49:44 -0400 Subject: [PATCH] kfdtest: Change PM4 dispatch to workaround GWS-related FW problem v2: Remove useless AcquireMem packet after the dispatch v3: Minimum poll_interval is 4 Change-Id: I352eb21c781ed9e03d62c0febd532da6a9854afa Signed-off-by: Felix Kuehling --- tests/kfdtest/src/Dispatch.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tests/kfdtest/src/Dispatch.cpp b/tests/kfdtest/src/Dispatch.cpp index dc75c4c671..6ed67ce39b 100644 --- a/tests/kfdtest/src/Dispatch.cpp +++ b/tests/kfdtest/src/Dispatch.cpp @@ -230,7 +230,15 @@ void Dispatch::BuildIb() { m_IndirectBuf.AddPacket(PM4DispatchDirectPacket(m_DimX, m_DimY, m_DimZ, DISPATCH_INIT_VALUE)); - m_IndirectBuf.AddPacket(PM4PartialFlushPacket()); - - m_IndirectBuf.AddPacket(PM4AcquireMemoryPacket(m_FamilyId)); + // EVENT_WRITE.partial_flush causes problems with preemptions in + // GWS testing. Since this is specific to this PM4 command and + // doesn't affect AQL, it's easier to fix KFDTest than the + // firmware. + // + // Replace PartialFlush with an ReleaseMem (with no interrupt) + WaitRegMem + // + // Original: m_IndirectBuf.AddPacket(PM4PartialFlushPacket()); + uint32_t *nop = m_IndirectBuf.AddPacket(PM4NopPacket(2)); // NOP packet with one dword payload for the release-mem fence + m_IndirectBuf.AddPacket(PM4ReleaseMemoryPacket(m_FamilyId, true, (uint64_t)&nop[1], 0xdeadbeef)); + m_IndirectBuf.AddPacket(PM4WaitRegMemPacket(true, (uint64_t)&nop[1], 0xdeadbeef, 4)); }