kfdtest: Add SDMA poll memory register packet support
The SDMA can wait on poll user memory. This is being added to
support per-SDMA queue reset testing.
[ROCm/ROCR-Runtime commit: a957b24153]
This commit is contained in:
committed by
Kim, Jonathan
parent
599a20ee2d
commit
303cdb8f7e
@@ -31,6 +31,7 @@ const unsigned int SDMA_OP_WRITE = 2;
|
||||
|
||||
const unsigned int SDMA_OP_FENCE = 5;
|
||||
const unsigned int SDMA_OP_TRAP = 6;
|
||||
const unsigned int SDMA_OP_POLL_REGMEM = 8;
|
||||
const unsigned int SDMA_OP_TIMESTAMP = 13;
|
||||
|
||||
const unsigned int SDMA_OP_CONST_FILL = 11;
|
||||
@@ -317,6 +318,61 @@ typedef struct SDMA_PKT_TRAP_TAG
|
||||
} INT_CONTEXT_UNION;
|
||||
} SDMA_PKT_TRAP, *PSDMA_PKT_TRAP;
|
||||
|
||||
/*
|
||||
** Definitions for SDMA_PKT_POLL_REGMEM_TAG packet
|
||||
*/
|
||||
|
||||
typedef struct SDMA_PKT_POLL_REGMEM_TAG {
|
||||
union {
|
||||
struct {
|
||||
unsigned int op : 8;
|
||||
unsigned int sub_op : 8;
|
||||
unsigned int reserved_0 : 10;
|
||||
unsigned int hdp_flush : 1;
|
||||
unsigned int reserved_1 : 1;
|
||||
unsigned int func : 3;
|
||||
unsigned int mem_poll : 1;
|
||||
};
|
||||
unsigned int DW_0_DATA;
|
||||
} HEADER_UNION;
|
||||
|
||||
union {
|
||||
struct {
|
||||
unsigned int addr_31_0 : 32;
|
||||
};
|
||||
unsigned int DW_1_DATA;
|
||||
} ADDR_LO_UNION;
|
||||
|
||||
union {
|
||||
struct {
|
||||
unsigned int addr_63_32 : 32;
|
||||
};
|
||||
unsigned int DW_2_DATA;
|
||||
} ADDR_HI_UNION;
|
||||
|
||||
union {
|
||||
struct {
|
||||
unsigned int value : 32;
|
||||
};
|
||||
unsigned int DW_3_DATA;
|
||||
} VALUE_UNION;
|
||||
|
||||
union {
|
||||
struct {
|
||||
unsigned int mask : 32;
|
||||
};
|
||||
unsigned int DW_4_DATA;
|
||||
} MASK_UNION;
|
||||
|
||||
union {
|
||||
struct {
|
||||
unsigned int interval : 16;
|
||||
unsigned int retry_count : 12;
|
||||
unsigned int reserved_0 : 4;
|
||||
};
|
||||
unsigned int DW_5_DATA;
|
||||
} DW5_UNION;
|
||||
} SDMA_PKT_POLL_REGMEM, *PSDMA_PKT_POLL_REGMEM;
|
||||
|
||||
/*
|
||||
** Definitions for SDMA_PKT_TIMESTAMP packet
|
||||
|
||||
@@ -213,6 +213,28 @@ void SDMATrapPacket::InitPacket(unsigned int eventID) {
|
||||
packetData.INT_CONTEXT_UNION.int_context = eventID;
|
||||
}
|
||||
|
||||
SDMAPollRegMemPacket::SDMAPollRegMemPacket(void *addr, int value) {
|
||||
InitPacket(addr, value);
|
||||
}
|
||||
|
||||
SDMAPollRegMemPacket::~SDMAPollRegMemPacket(void) {
|
||||
}
|
||||
|
||||
void SDMAPollRegMemPacket::InitPacket(void *addr, int value) {
|
||||
memset(&packetData, 0, SizeInBytes());
|
||||
|
||||
packetData.HEADER_UNION.op = SDMA_OP_POLL_REGMEM;
|
||||
packetData.HEADER_UNION.mem_poll = 1;
|
||||
packetData.HEADER_UNION.func = 0x3; // IsEqual.
|
||||
SplitU64(reinterpret_cast<unsigned long long>(addr),
|
||||
packetData.ADDR_LO_UNION.DW_1_DATA,
|
||||
packetData.ADDR_HI_UNION.DW_2_DATA);
|
||||
packetData.VALUE_UNION.value = value;
|
||||
packetData.MASK_UNION.mask = 0xffffffff; // Compare the whole content.
|
||||
packetData.DW5_UNION.interval = 0x04;
|
||||
packetData.DW5_UNION.retry_count = 0xfff;
|
||||
}
|
||||
|
||||
SDMATimePacket::SDMATimePacket(void *destaddr) {
|
||||
InitPacket(destaddr);
|
||||
}
|
||||
|
||||
@@ -140,6 +140,26 @@ class SDMATrapPacket : public SDMAPacket {
|
||||
SDMA_PKT_TRAP packetData;
|
||||
};
|
||||
|
||||
class SDMAPollRegMemPacket : public SDMAPacket {
|
||||
public:
|
||||
// This contructor will also init the packet, no need for additional calls
|
||||
SDMAPollRegMemPacket(void* addr, int value);
|
||||
|
||||
virtual ~SDMAPollRegMemPacket(void);
|
||||
|
||||
// @returns Pointer to the packet
|
||||
virtual const void *GetPacket() const { return &packetData; }
|
||||
// @breif Initialise the packet
|
||||
void InitPacket(void* addr, int value);
|
||||
// @returns Packet size in bytes
|
||||
virtual unsigned int SizeInBytes() const { return sizeof(SDMA_PKT_POLL_REGMEM); }
|
||||
|
||||
protected:
|
||||
// SDMA_PKT_WRITE_UNTILED struct contains all the packet's data
|
||||
SDMA_PKT_POLL_REGMEM packetData;
|
||||
unsigned int packetSize;
|
||||
};
|
||||
|
||||
class SDMATimePacket : public SDMAPacket {
|
||||
public:
|
||||
// Empty constructor, before using the packet call the init func
|
||||
|
||||
Reference in New Issue
Block a user