Go to the documentation of this file.
32 #ifndef __DEV_AMDGPU_SDMA_ENGINE_HH__
33 #define __DEV_AMDGPU_SDMA_ENGINE_HH__
40 #include "params/SDMAEngine.hh"
240 bool pollRegMemFunc(uint32_t value, uint32_t reference, uint32_t func);
245 uint64_t *dmaBuffer);
247 uint64_t *dmaBuffer);
311 #endif // __DEV_AMDGPU_SDMA_ENGINE_HH__
void setPageDoorbellHi(uint32_t data)
void indirectBuffer(SDMAQueue *q, sdmaIndirectBuffer *pkt)
void incRptr(uint32_t value)
void parent(SDMAQueue *q)
SDMAEngine(const SDMAEngineParams &p)
int getIHClientId()
Returns the client id for the Interrupt Handler.
SDMAQueue gfx
Each SDMAEngine processes four queues: paging, gfx, rlc0, and rlc1, where RLC stands for Run List Con...
uint64_t getGfxBase()
Methods for getting the values of SDMA MMIO registers.
uint64_t getPageDoorbellOffset()
void atomicData(SDMAQueue *q, sdmaAtomicHeader *header, sdmaAtomic *pkt, uint64_t *dmaBuffer)
uint64_t getGfxDoorbell()
void setPageWptrLo(uint32_t data)
Tick write(PacketPtr pkt) override
Inherited methods.
void processRLC0(Addr wptrOffset)
void decodeNext(SDMAQueue *q)
This method checks read and write pointers and starts decoding packets if the read pointer is less th...
Addr getGARTAddr(Addr addr) const
Methods for translation.
void setGfxRptrHi(uint32_t data)
void writeDone(SDMAQueue *q, sdmaWrite *pkt, uint32_t *dmaBuffer)
void unserialize(CheckpointIn &cp) override
Unserialize an object.
uint64_t getGfxDoorbellOffset()
void setPageDoorbellOffsetHi(uint32_t data)
void setGfxDoorbellLo(uint32_t data)
void fenceDone(SDMAQueue *q, sdmaFence *pkt)
void setPageSize(uint32_t data)
Tick read(PacketPtr pkt) override
Pure virtual function that the device must implement.
void writeReadData(SDMAQueue *q, sdmaWrite *pkt, uint32_t *dmaBuffer)
bool pollRegMemFunc(uint32_t value, uint32_t reference, uint32_t func)
void unregisterRLCQueue(Addr doorbell)
TranslationGenPtr translate(Addr vaddr, Addr size) override
GPUController will perform DMA operations on VAs, and because page faults are not currently supported...
void setMQD(SDMAQueueDesc *mqd)
void setPageBaseHi(uint32_t data)
Addr getMmioBase()
Methods for getting SDMA MMIO base address and size.
void setGfxBaseLo(uint32_t data)
void setGfxDoorbellHi(uint32_t data)
void setGfxRptrLo(uint32_t data)
void processPage(Addr wptrOffset)
void setMQDAddr(Addr mqdAddr)
void pollRegMemRead(SDMAQueue *q, sdmaPollRegMemHeader *header, sdmaPollRegMem *pkt, uint32_t dma_buffer, int count)
void processRLC(Addr doorbellOffset, Addr wptrOffset)
void ptePdeDone(SDMAQueue *q, sdmaPtePde *pkt, uint64_t *dmaBuffer)
void trap(SDMAQueue *q, sdmaTrap *pkt)
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
void setGfxDoorbellOffsetHi(uint32_t data)
void ptePde(SDMAQueue *q, sdmaPtePde *pkt)
uint64_t gfxDoorbellOffset
uint64_t Tick
Tick count type.
void serialize(CheckpointOut &cp) const override
Serialize an object.
void copy(SDMAQueue *q, sdmaCopy *pkt)
void setPageRptrHi(uint32_t data)
Device model for an AMD GPU.
void registerRLCQueue(Addr doorbell, Addr mqdAddr, SDMAQueueDesc *mqd)
Methods for RLC queues.
void setPageDoorbellLo(uint32_t data)
void setGfxDoorbellOffsetLo(uint32_t data)
System DMA Engine class for AMD dGPU.
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
uint64_t pageDoorbellOffset
void atomicDone(SDMAQueue *q, sdmaAtomicHeader *header, sdmaAtomic *pkt, uint64_t *dmaBuffer)
void pollRegMem(SDMAQueue *q, sdmaPollRegMemHeader *header, sdmaPollRegMem *pkt)
Implements a poll reg/mem packet that polls an SRBM register or a memory location,...
void copyReadData(SDMAQueue *q, sdmaCopy *pkt, uint8_t *dmaBuffer)
void processRLC1(Addr wptrOffset)
void decodeHeader(SDMAQueue *q, uint32_t data)
Reads the first DW (32 bits) (i.e., header) of an SDMA packet, which encodes the opcode and sub-opcod...
void queueType(SDMAType type)
uint64_t getPageDoorbell()
void processing(bool value)
void setPageRptrLo(uint32_t data)
void deallocateRLCQueues()
void setGfxWptrLo(uint32_t data)
Addr getDeviceAddress(Addr raw_addr)
Translate an address in an SDMA packet.
void setGPUDevice(AMDGPUDevice *gpu_device)
void rptrWbAddr(Addr value)
std::ostream CheckpointOut
void fence(SDMAQueue *q, sdmaFence *pkt)
void srbmWrite(SDMAQueue *q, sdmaSRBMWriteHeader *header, sdmaSRBMWrite *pkt)
void processGfx(Addr wptrOffset)
Given a new write ptr offset, communicated to the GPU through a doorbell write, the SDMA engine proce...
void setPageDoorbellOffsetLo(uint32_t data)
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
void setGfxWptrHi(uint32_t data)
AddrRangeList getAddrRanges() const override
Every PIO device is obliged to provide an implementation that returns the address ranges the device r...
void setGfxSize(uint32_t data)
void setPageBaseLo(uint32_t data)
void setGfxBaseHi(uint32_t data)
void copyDone(SDMAQueue *q, sdmaCopy *pkt, uint8_t *dmaBuffer)
std::unique_ptr< TranslationGen > TranslationGenPtr
void atomic(SDMAQueue *q, sdmaAtomicHeader *header, sdmaAtomic *pkt)
std::array< Addr, 2 > rlcInfo
void writeMMIO(PacketPtr pkt, Addr mmio_offset)
Methods for setting the values of SDMA MMIO registers.
void setPageWptrHi(uint32_t data)
Generated on Sun Jul 30 2023 01:56:54 for gem5 by doxygen 1.8.17