From 5b44be190784ea6eaa99676a77213f3d0f7ed325 Mon Sep 17 00:00:00 2001 From: shaoyunl Date: Thu, 18 Jul 2019 19:06:43 -0400 Subject: [PATCH] KFDTest: Added gfx1010 SDMA fence packet support Change-Id: I33d824353d77317363b73ddc52cd182f86b8bc66 Signed-off-by: shaoyunl Signed-off-by: Oak Zeng --- tests/kfdtest/src/SDMAPacket.cpp | 24 ++++++++++++++++++++++-- tests/kfdtest/src/SDMAPacket.hpp | 4 +++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/tests/kfdtest/src/SDMAPacket.cpp b/tests/kfdtest/src/SDMAPacket.cpp index 2cd13f0823..df5eb6b18f 100644 --- a/tests/kfdtest/src/SDMAPacket.cpp +++ b/tests/kfdtest/src/SDMAPacket.cpp @@ -173,13 +173,16 @@ SDMAFencePacket::SDMAFencePacket(void) { SDMAFencePacket::SDMAFencePacket(unsigned int familyId, void* destAddr, unsigned int data) { m_FamilyId = familyId; - InitPacket(destAddr, data); + if (m_FamilyId < FAMILY_NV) + InitPacketCI(destAddr, data); + else + InitPacketNV(destAddr, data); } SDMAFencePacket::~SDMAFencePacket(void) { } -void SDMAFencePacket::InitPacket(void* destAddr, unsigned int data) { +void SDMAFencePacket::InitPacketCI(void* destAddr, unsigned int data) { memset(&packetData, 0, SizeInBytes()); packetData.HEADER_UNION.op = SDMA_OP_FENCE; @@ -191,6 +194,23 @@ void SDMAFencePacket::InitPacket(void* destAddr, unsigned int data) { packetData.DATA_UNION.data = data; } +void SDMAFencePacket::InitPacketNV(void * destAddr,unsigned int data) { + memset(&packetData, 0, SizeInBytes()); + + /* GPA=0 becaue we use virtual address + * Snoop = 1 because we want the write be CPU coherent + * System = 1 because the memory is system memory + * mtype = uncached, for the purpose of CPU coherent, L2 policy doesn't matter in this case + */ + packetData.HEADER_UNION.DW_0_DATA = (0 << 23) | (1 << 22) | (1 << 20) | (3 << 15) | SDMA_OP_FENCE; + + SplitU64(reinterpret_cast(destAddr), + packetData.ADDR_LO_UNION.DW_1_DATA, /*dst_addr_31_0*/ + packetData.ADDR_HI_UNION.DW_2_DATA); /*dst_addr_63_32*/ + + packetData.DATA_UNION.data = data; +} + SDMATrapPacket::SDMATrapPacket(unsigned int eventID) { InitPacket(eventID); diff --git a/tests/kfdtest/src/SDMAPacket.hpp b/tests/kfdtest/src/SDMAPacket.hpp index cb27c944ac..03f837806b 100644 --- a/tests/kfdtest/src/SDMAPacket.hpp +++ b/tests/kfdtest/src/SDMAPacket.hpp @@ -110,7 +110,9 @@ class SDMAFencePacket : public SDMAPacket { // @returns Pointer to the packet virtual const void *GetPacket() const { return &packetData; } // @brief Initialise the packet - void InitPacket(void* destAddr, unsigned int data); + void InitPacketCI(void* destAddr, unsigned int data); + void InitPacketNV(void* destAddr, unsigned int data); + // @returns Packet size in bytes virtual unsigned int SizeInBytes() const { return sizeof(SDMA_PKT_FENCE ); }