Go to the documentation of this file.
33 #ifndef __DEV_AMDGPU_PM4_PACKET_PROCESSOR__
34 #define __DEV_AMDGPU_PM4_PACKET_PROCESSOR__
36 #include <unordered_map>
42 #include "params/PM4PacketProcessor.hh"
63 std::unordered_map<uint16_t, PM4Queue *>
queues;
144 void mapProcess(uint32_t pasid, uint64_t ptBase, uint32_t shMemBases);
195 #endif //__DEV_AMDGPU_PM4_PACKET_PROCESSOR__
void mapPq(Addr offset)
The first graphics queue, the Primary Queueu a.k.a.
void setRbRptrAddrLo(uint32_t data)
void decodeNext(PM4Queue *q)
This method decodes the next packet in a PM4Queue.
void mapProcess(uint32_t pasid, uint64_t ptBase, uint32_t shMemBases)
std::unordered_map< uint32_t, PM4Queue * > queuesMap
void setRbWptrLo(uint32_t data)
void queryStatusDone(PM4Queue *q, PM4QueryStatus *pkt)
void writeMMIO(PacketPtr pkt, Addr mmio_offset)
void setRbCntl(uint32_t data)
Class defining a PM4 queue.
Tick read(PacketPtr pkt) override
Pure virtual function that the device must implement.
void setRbDoorbellCntrl(uint32_t data)
void setRbDoorbellRangeHi(uint32_t data)
void serialize(CheckpointOut &cp) const override
Serialize an object.
void setHqdPqRptrReportAddr(uint32_t data)
void process(PM4Queue *q, Addr wptrOffset)
This method start processing a PM4Queue from the current read pointer to the newly communicated write...
void setHqdPqControl(uint32_t data)
uint32_t getKiqDoorbellOffset()
void newQueue(QueueDesc *q, Addr offset, PM4MapQueues *pkt=nullptr, int id=-1)
This method creates a new PM4Queue based on a queue descriptor and an offset.
void setUconfigReg(PM4Queue *q, PM4SetUconfigReg *pkt)
void releaseMemDone(PM4Queue *q, PM4ReleaseMem *pkt, Addr addr)
void setRbBaseLo(uint32_t data)
void switchBuffer(PM4Queue *q, PM4SwitchBuf *pkt)
void releaseMem(PM4Queue *q, PM4ReleaseMem *pkt)
void mapKiq(Addr offset)
The first compute queue, the Kernel Interface Queueu a.k.a.
void mapProcessGfx90a(PM4Queue *q, PM4MapProcessMI200 *pkt)
void setHqdVmid(uint32_t data)
void setHqdPqRptrReportAddrHi(uint32_t data)
void setRbWptrPollAddrHi(uint32_t data)
void setGPUDevice(AMDGPUDevice *gpu_device)
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
uint64_t Tick
Tick count type.
void setHqdPqPtr(uint32_t data)
void writeDataDone(PM4Queue *q, PM4WriteData *pkt, Addr addr)
Tick write(PacketPtr pkt) override
Inherited methods.
TranslationGenPtr translate(Addr vaddr, Addr size) override
Method for functional translation.
void setHqdPqWptrPollAddrHi(uint32_t data)
void doneMQDWrite(Addr mqdAddr, Addr addr)
void processSDMAMQD(PM4MapQueues *pkt, PM4Queue *q, Addr addr, SDMAQueueDesc *mqd, uint16_t vmid)
Device model for an AMD GPU.
void setHqdActive(uint32_t data)
void setRbWptrHi(uint32_t data)
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
void queryStatus(PM4Queue *q, PM4QueryStatus *pkt)
void runList(PM4Queue *q, PM4RunList *pkt)
void setHqdPqWptrLo(uint32_t data)
void setHqdPqBase(uint32_t data)
void decodeHeader(PM4Queue *q, PM4Header header)
This method calls other PM4 packet processing methods based on the header of a PM4 packet.
void processMQD(PM4MapQueues *pkt, PM4Queue *q, Addr addr, QueueDesc *mqd, uint16_t vmid)
void setHqdPqDoorbellCtrl(uint32_t data)
void indirectBuffer(PM4Queue *q, PM4IndirectBuf *pkt)
PM4PacketProcessor(const PM4PacketProcessorParams &p)
void setRbWptrPollAddrLo(uint32_t data)
void setHqdPqBaseHi(uint32_t data)
void setHqdPqWptrHi(uint32_t data)
PM4Queue * getQueue(Addr offset, bool gfx=false)
Based on an offset communicated through doorbell write, the PM4PacketProcessor identifies which queue...
std::unordered_map< uint16_t, PM4Queue * > queues
AddrRangeList getAddrRanges() const override
Every PIO device is obliged to provide an implementation that returns the address ranges the device r...
void mapProcessGfx9(PM4Queue *q, PM4MapProcess *pkt)
void updateReadIndex(Addr offset, uint64_t rd_idx)
Update read index on doorbell rings.
std::ostream CheckpointOut
void writeData(PM4Queue *q, PM4WriteData *pkt)
void mapQueues(PM4Queue *q, PM4MapQueues *pkt)
void setRbVmid(uint32_t data)
void waitRegMem(PM4Queue *q, PM4WaitRegMem *pkt)
uint32_t getPqDoorbellOffset()
void setRbRptrAddrHi(uint32_t data)
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
void setHqdPqWptrPollAddr(uint32_t data)
Addr getGARTAddr(Addr addr) const
void unserialize(CheckpointIn &cp) override
Unserialize an object.
void setRbBaseHi(uint32_t data)
void unmapQueues(PM4Queue *q, PM4UnmapQueues *pkt)
std::unique_ptr< TranslationGen > TranslationGenPtr
void setRbDoorbellRangeLo(uint32_t data)
void setHqdIbCtrl(uint32_t data)
Generated on Sun Jul 30 2023 01:56:54 for gem5 by doxygen 1.8.17