kfdtest: Add SDMANopPacket class
The class is very useful for triaging complex SDMA issues. Change-Id: Ib5de729f7fc62f41e894ef98d3967e7e1745d454 Signed-off-by: Yong Zhao <Yong.Zhao@amd.com>
This commit is contained in:
@@ -25,6 +25,7 @@
|
||||
#define __SDMA_PKT_STRUCT_H__
|
||||
|
||||
|
||||
const unsigned int SDMA_OP_NOP = 0;
|
||||
const unsigned int SDMA_OP_COPY = 1;
|
||||
const unsigned int SDMA_OP_WRITE = 2;
|
||||
|
||||
@@ -354,4 +355,33 @@ typedef struct SDMA_PKT_TIMESTAMP_TAG
|
||||
} ADDR_HI_UNION;
|
||||
} SDMA_PKT_TIMESTAMP, *PSDMA_PKT_TIMESTAMP;
|
||||
|
||||
|
||||
/*
|
||||
** Definitions for SDMA_PKT_NOP packet
|
||||
*/
|
||||
|
||||
typedef struct SDMA_PKT_NOP_TAG
|
||||
{
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
unsigned int op:8;
|
||||
unsigned int sub_op:8;
|
||||
unsigned int count:14;
|
||||
unsigned int reserved_0:2;
|
||||
};
|
||||
unsigned int DW_0_DATA;
|
||||
} HEADER_UNION;
|
||||
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
unsigned int data0:32;
|
||||
};
|
||||
unsigned int DW_1_DATA;
|
||||
} DATA0_UNION;
|
||||
} SDMA_PKT_NOP, *PSDMA_PKT_NOP;
|
||||
|
||||
#endif // __SDMA_PKT_STRUCT_H__
|
||||
|
||||
@@ -246,3 +246,16 @@ void SDMATimePacket::InitPacket(void *destaddr) {
|
||||
packetData.ADDR_LO_UNION.DW_1_DATA, /*dst_addr_31_0*/
|
||||
packetData.ADDR_HI_UNION.DW_2_DATA); /*dst_addr_63_32*/
|
||||
}
|
||||
|
||||
SDMANopPacket::SDMANopPacket(unsigned int count) {
|
||||
packetSize = count;
|
||||
packetData = reinterpret_cast<SDMA_PKT_NOP *>(calloc(count, sizeof(unsigned int)));
|
||||
|
||||
packetData->HEADER_UNION.op = SDMA_OP_NOP;
|
||||
packetData->HEADER_UNION.sub_op = 0;
|
||||
packetData->HEADER_UNION.count = count - 1;
|
||||
}
|
||||
|
||||
SDMANopPacket::~SDMANopPacket() {
|
||||
free(packetData);
|
||||
}
|
||||
|
||||
@@ -158,5 +158,20 @@ class SDMATimePacket : public SDMAPacket {
|
||||
SDMA_PKT_TIMESTAMP packetData;
|
||||
};
|
||||
|
||||
class SDMANopPacket : public SDMAPacket {
|
||||
public:
|
||||
SDMANopPacket(unsigned int count = 1);
|
||||
virtual ~SDMANopPacket(void);
|
||||
|
||||
// @returns Pointer to the packet
|
||||
virtual const void *GetPacket() const { return packetData; }
|
||||
// @returns Packet size in bytes
|
||||
virtual unsigned int SizeInBytes() const { return packetSize; }
|
||||
|
||||
private:
|
||||
SDMA_PKT_NOP *packetData;
|
||||
unsigned int packetSize;
|
||||
};
|
||||
|
||||
|
||||
#endif // __KFD_SDMA_PACKET__H__
|
||||
|
||||
Viittaa uudesa ongelmassa
Block a user