Go to the documentation of this file.
35 #include "debug/AMDGPUDevice.hh"
54 const AMDGPUInterruptHandlerParams &
p)
110 cookie->
pasid = 0x8000;
125 }
else if (
data == 2) {
129 fatal(
"Interrupt Handler DMA event returned bad value: %d\n",
data);
136 uint8_t *dataPtr =
new uint8_t[
sizeof(uint32_t)];
139 std::memcpy(dataPtr, &
regs.
IH_Wptr,
sizeof(uint32_t));
152 uint8_t *dataPtr =
new uint8_t[cookieSize];
153 std::memcpy(dataPtr, cookie, cookieSize);
167 switch (mmio_offset) {
191 if (
bits(pkt->
getLE<uint32_t>(), 28, 28)) {
294 uint32_t ih_wptr_addr_lo;
295 uint32_t ih_wptr_addr_hi;
297 uint32_t ih_doorbellOffset;
#define fatal(...)
This implements a cprintf based fatal() function.
#define mmIH_DOORBELL_RPTR
@ SOC15_IH_CLIENTID_SDMA6
void setBase(const uint32_t &data)
#define UNSERIALIZE_SCALAR(scalar)
void setDoorbellType(uint32_t offset, QueueType qt)
Set handles to GPU blocks.
void writeMMIO(PacketPtr pkt, Addr mmio_offset)
Methods for setting the values of interrupt handler MMIO registers.
void intrPost()
Methods inherited from PciDevice.
uint32_t getDoorbellOffset() const
@ SOC15_IH_CLIENTID_SDMA0
@ SOC15_IH_CLIENTID_SDMA1
void submitInterruptCookie()
AddrRangeList getAddrRanges() const override
Every PIO device is obliged to provide an implementation that returns the address ranges the device r...
void setWptrAddrHi(const uint32_t &data)
void unserialize(CheckpointIn &cp) override
Unserialize an object.
void updateRptr(const uint32_t &data)
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
@ SOC15_IH_CLIENTID_SDMA4
AMDGPUInterruptHandler * deviceIh
Device model for an AMD GPU.
void setWptrAddrLo(const uint32_t &data)
void dmaWrite(Addr addr, int size, Event *event, uint8_t *data, uint32_t sid, uint32_t ssid, Tick delay=0)
constexpr T bits(T val, unsigned first, unsigned last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it.
void serialize(CheckpointOut &cp) const override
Serialize an object.
void setCntl(const uint32_t &data)
@ SOC15_IH_CLIENTID_SDMA2
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
#define SERIALIZE_SCALAR(scalar)
#define mmIH_RB_WPTR_ADDR_HI
Struct to contain all interrupt handler related registers.
AMDGPUInterruptHandler(const AMDGPUInterruptHandlerParams &p)
@ SOC15_IH_CLIENTID_SDMA3
#define mmIH_RB_WPTR_ADDR_LO
#define mmIH_RB_CNTL
MMIO offsets for interrupt handler.
void submitWritePointer()
AMDGPUInterruptHandler::DmaEvent * dmaEvent
int ContextID
Globally unique thread context ID.
@ SOC15_IH_CLIENTID_SDMA5
void setWptr(const uint32_t &data)
void setRptr(const uint32_t &data)
T getLE() const
Get the data in the packet byte swapped from little endian to host endian.
std::ostream CheckpointOut
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
std::queue< AMDGPUInterruptCookie * > interruptQueue
void prepareInterruptCookie(ContextID cntxtId, uint32_t ring_id, uint32_t client_id, uint32_t source_id)
void setDoorbellOffset(const uint32_t &data)
@ SOC15_IH_CLIENTID_SDMA7
@ SOC15_IH_CLIENTID_GRBM_CP
void setBaseHi(const uint32_t &data)
Generated on Sun Jul 30 2023 01:56:54 for gem5 by doxygen 1.8.17