gem5  [DEVELOP-FOR-23.0]
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
sdma_engine.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021 Advanced Micro Devices, Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice,
9  * this list of conditions and the following disclaimer.
10  *
11  * 2. Redistributions in binary form must reproduce the above copyright notice,
12  * this list of conditions and the following disclaimer in the documentation
13  * and/or other materials provided with the distribution.
14  *
15  * 3. Neither the name of the copyright holder nor the names of its
16  * contributors may be used to endorse or promote products derived from this
17  * software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 #ifndef __DEV_AMDGPU_SDMA_ENGINE_HH__
33 #define __DEV_AMDGPU_SDMA_ENGINE_HH__
34 
35 #include "base/bitunion.hh"
37 #include "dev/amdgpu/pm4_queues.hh"
39 #include "dev/dma_virt_device.hh"
40 #include "params/SDMAEngine.hh"
41 
42 namespace gem5
43 {
44 
48 class SDMAEngine : public DmaVirtDevice
49 {
50  enum SDMAType
51  {
54  };
55 
56  class SDMAQueue
57  {
64  bool _valid;
71  public:
72  SDMAQueue() : _rptr(0), _wptr(0), _valid(false), _processing(false),
73  _parent(nullptr), _ib(nullptr), _type(SDMAGfx), _mqd(nullptr) {}
74 
75  Addr base() { return _base; }
76  Addr rptr() { return _base + _rptr; }
77  Addr getRptr() { return _rptr; }
78  Addr wptr() { return _base + _wptr; }
79  Addr getWptr() { return _wptr; }
80  Addr size() { return _size; }
83  bool valid() { return _valid; }
84  bool processing() { return _processing; }
85  SDMAQueue* parent() { return _parent; }
86  SDMAQueue* ib() { return _ib; }
87  SDMAType queueType() { return _type; }
88  SDMAQueueDesc* getMQD() { return _mqd; }
89  Addr getMQDAddr() { return _mqd_addr; }
90 
91  void base(Addr value) { _base = value; }
92 
93  void
94  incRptr(uint32_t value)
95  {
96  _rptr = (_rptr + value) % _size;
97  _global_rptr += value;
98  }
99 
100  void
101  rptr(Addr value)
102  {
103  _rptr = value;
104  _global_rptr = value;
105  }
106 
107  void
108  setWptr(Addr value)
109  {
110  _wptr = value % _size;
111  }
112 
113  void wptr(Addr value) { _wptr = value; }
114 
115  void size(Addr value) { _size = value; }
116  void rptrWbAddr(Addr value) { _rptr_wb_addr = value; }
117  void valid(bool v) { _valid = v; }
118  void processing(bool value) { _processing = value; }
119  void parent(SDMAQueue* q) { _parent = q; }
120  void ib(SDMAQueue* ib) { _ib = ib; }
122  void setMQD(SDMAQueueDesc *mqd) { _mqd = mqd; }
123  void setMQDAddr(Addr mqdAddr) { _mqd_addr = mqdAddr; }
124  };
125 
126  /* SDMA Engine ID */
127  int id;
137 
138  /* Gfx ring buffer registers */
139  uint64_t gfxBase;
140  uint64_t gfxRptr;
141  uint64_t gfxDoorbell;
143  uint64_t gfxWptr;
144  /* Page ring buffer registers */
145  uint64_t pageBase;
146  uint64_t pageRptr;
147  uint64_t pageDoorbell;
149  uint64_t pageWptr;
150 
153 
154  /* processRLC will select the correct queue for the doorbell */
155  std::array<Addr, 2> rlcInfo{};
156  void processRLC0(Addr wptrOffset);
157  void processRLC1(Addr wptrOffset);
158 
161 
162  public:
163  SDMAEngine(const SDMAEngineParams &p);
164 
165  void setGPUDevice(AMDGPUDevice *gpu_device);
166 
167  void setId(int _id) { id = _id; }
168  int getId() const { return id; }
172  int getIHClientId();
173 
177  Addr getGARTAddr(Addr addr) const;
178  TranslationGenPtr translate(Addr vaddr, Addr size) override;
179 
185  Addr getDeviceAddress(Addr raw_addr);
186 
190  Tick write(PacketPtr pkt) override { return 0; }
191  Tick read(PacketPtr pkt) override { return 0; }
192  AddrRangeList getAddrRanges() const override;
193  void serialize(CheckpointOut &cp) const override;
194  void unserialize(CheckpointIn &cp) override;
195 
200  void processGfx(Addr wptrOffset);
201  void processPage(Addr wptrOffset);
202  void processRLC(Addr doorbellOffset, Addr wptrOffset);
203 
212  void decodeNext(SDMAQueue *q);
213 
219  void decodeHeader(SDMAQueue *q, uint32_t data);
220 
224  void write(SDMAQueue *q, sdmaWrite *pkt);
225  void writeReadData(SDMAQueue *q, sdmaWrite *pkt, uint32_t *dmaBuffer);
226  void writeDone(SDMAQueue *q, sdmaWrite *pkt, uint32_t *dmaBuffer);
227  void copy(SDMAQueue *q, sdmaCopy *pkt);
228  void copyReadData(SDMAQueue *q, sdmaCopy *pkt, uint8_t *dmaBuffer);
229  void copyDone(SDMAQueue *q, sdmaCopy *pkt, uint8_t *dmaBuffer);
230  void indirectBuffer(SDMAQueue *q, sdmaIndirectBuffer *pkt);
231  void fence(SDMAQueue *q, sdmaFence *pkt);
232  void fenceDone(SDMAQueue *q, sdmaFence *pkt);
233  void trap(SDMAQueue *q, sdmaTrap *pkt);
234  void srbmWrite(SDMAQueue *q, sdmaSRBMWriteHeader *header,
235  sdmaSRBMWrite *pkt);
236  void pollRegMem(SDMAQueue *q, sdmaPollRegMemHeader *header,
237  sdmaPollRegMem *pkt);
238  void pollRegMemRead(SDMAQueue *q, sdmaPollRegMemHeader *header,
239  sdmaPollRegMem *pkt, uint32_t dma_buffer, int count);
240  bool pollRegMemFunc(uint32_t value, uint32_t reference, uint32_t func);
241  void ptePde(SDMAQueue *q, sdmaPtePde *pkt);
242  void ptePdeDone(SDMAQueue *q, sdmaPtePde *pkt, uint64_t *dmaBuffer);
243  void atomic(SDMAQueue *q, sdmaAtomicHeader *header, sdmaAtomic *pkt);
244  void atomicData(SDMAQueue *q, sdmaAtomicHeader *header, sdmaAtomic *pkt,
245  uint64_t *dmaBuffer);
246  void atomicDone(SDMAQueue *q, sdmaAtomicHeader *header, sdmaAtomic *pkt,
247  uint64_t *dmaBuffer);
248 
254  Addr getMmioBase() { return mmioBase; }
255  Addr getMmioSize() { return mmioSize; }
256 
260  uint64_t getGfxBase() { return gfxBase; }
261  uint64_t getGfxRptr() { return gfxRptr; }
262  uint64_t getGfxDoorbell() { return gfxDoorbell; }
264  uint64_t getGfxWptr() { return gfxWptr; }
265  uint64_t getPageBase() { return pageBase; }
266  uint64_t getPageRptr() { return pageRptr; }
267  uint64_t getPageDoorbell() { return pageDoorbell; }
269  uint64_t getPageWptr() { return pageWptr; }
270 
274  void writeMMIO(PacketPtr pkt, Addr mmio_offset);
275 
276  void setGfxBaseLo(uint32_t data);
277  void setGfxBaseHi(uint32_t data);
278  void setGfxRptrLo(uint32_t data);
279  void setGfxRptrHi(uint32_t data);
280  void setGfxDoorbellLo(uint32_t data);
281  void setGfxDoorbellHi(uint32_t data);
282  void setGfxDoorbellOffsetLo(uint32_t data);
283  void setGfxDoorbellOffsetHi(uint32_t data);
284  void setGfxSize(uint32_t data);
285  void setGfxWptrLo(uint32_t data);
286  void setGfxWptrHi(uint32_t data);
287  void setPageBaseLo(uint32_t data);
288  void setPageBaseHi(uint32_t data);
289  void setPageRptrLo(uint32_t data);
290  void setPageRptrHi(uint32_t data);
291  void setPageDoorbellLo(uint32_t data);
292  void setPageDoorbellHi(uint32_t data);
293  void setPageDoorbellOffsetLo(uint32_t data);
294  void setPageDoorbellOffsetHi(uint32_t data);
295  void setPageSize(uint32_t data);
296  void setPageWptrLo(uint32_t data);
297  void setPageWptrHi(uint32_t data);
298 
302  void registerRLCQueue(Addr doorbell, Addr mqdAddr, SDMAQueueDesc *mqd);
303  void unregisterRLCQueue(Addr doorbell);
304  void deallocateRLCQueues();
305 
306  int cur_vmid = 0;
307 };
308 
309 } // namespace gem5
310 
311 #endif // __DEV_AMDGPU_SDMA_ENGINE_HH__
gem5::SDMAEngine::SDMAQueue::_valid
bool _valid
Definition: sdma_engine.hh:64
gem5::SDMAEngine::setPageDoorbellHi
void setPageDoorbellHi(uint32_t data)
Definition: sdma_engine.cc:1331
gem5::SDMAEngine::getGfxRptr
uint64_t getGfxRptr()
Definition: sdma_engine.hh:261
gem5::SDMAEngine::indirectBuffer
void indirectBuffer(SDMAQueue *q, sdmaIndirectBuffer *pkt)
Definition: sdma_engine.cc:743
gem5::SDMAEngine::SDMAQueue::incRptr
void incRptr(uint32_t value)
Definition: sdma_engine.hh:94
gem5::SDMAEngine::SDMAQueue::rptrWbAddr
Addr rptrWbAddr()
Definition: sdma_engine.hh:81
gem5::SDMAEngine::SDMAQueue::parent
void parent(SDMAQueue *q)
Definition: sdma_engine.hh:119
gem5::SDMAEngine::SDMAEngine
SDMAEngine(const SDMAEngineParams &p)
Definition: sdma_engine.cc:48
gem5::SDMAEngine::SDMAQueue::_rptr_wb_addr
Addr _rptr_wb_addr
Definition: sdma_engine.hh:62
gem5::SDMAEngine::SDMAQueue::rptr
void rptr(Addr value)
Definition: sdma_engine.hh:101
gem5::SDMAEngine::setId
void setId(int _id)
Definition: sdma_engine.hh:167
gem5::SDMAEngine::SDMAQueue::_mqd
SDMAQueueDesc * _mqd
Definition: sdma_engine.hh:69
gem5::GEM5_PACKED
PM4 packets.
Definition: pm4_defines.hh:77
data
const char data[]
Definition: circlebuf.test.cc:48
gem5::SDMAEngine::getGfxWptr
uint64_t getGfxWptr()
Definition: sdma_engine.hh:264
gem5::SDMAEngine::getIHClientId
int getIHClientId()
Returns the client id for the Interrupt Handler.
Definition: sdma_engine.cc:84
gem5::SDMAEngine::rlc1Ib
SDMAQueue rlc1Ib
Definition: sdma_engine.hh:136
gem5::SDMAEngine::walker
VegaISA::Walker * walker
Definition: sdma_engine.hh:152
gem5::SDMAEngine::SDMAQueue::wptr
Addr wptr()
Definition: sdma_engine.hh:78
gem5::SDMAEngine::gfx
SDMAQueue gfx
Each SDMAEngine processes four queues: paging, gfx, rlc0, and rlc1, where RLC stands for Run List Con...
Definition: sdma_engine.hh:135
gem5::SDMAEngine::gfxWptr
uint64_t gfxWptr
Definition: sdma_engine.hh:143
gem5::SDMAEngine::gfxDoorbell
uint64_t gfxDoorbell
Definition: sdma_engine.hh:141
gem5::SDMAEngine::getGfxBase
uint64_t getGfxBase()
Methods for getting the values of SDMA MMIO registers.
Definition: sdma_engine.hh:260
gem5::CheckpointIn
Definition: serialize.hh:68
gem5::SDMAEngine::SDMAQueue::size
Addr size()
Definition: sdma_engine.hh:80
gem5::SDMAEngine::getPageDoorbellOffset
uint64_t getPageDoorbellOffset()
Definition: sdma_engine.hh:268
gem5::SDMAEngine::atomicData
void atomicData(SDMAQueue *q, sdmaAtomicHeader *header, sdmaAtomic *pkt, uint64_t *dmaBuffer)
Definition: sdma_engine.cc:990
gem5::SDMAEngine::getGfxDoorbell
uint64_t getGfxDoorbell()
Definition: sdma_engine.hh:262
gem5::SDMAEngine::setPageWptrLo
void setPageWptrLo(uint32_t data)
Definition: sdma_engine.cc:1364
gem5::SDMAEngine::write
Tick write(PacketPtr pkt) override
Inherited methods.
Definition: sdma_engine.hh:190
gem5::SDMAEngine::processRLC0
void processRLC0(Addr wptrOffset)
Definition: sdma_engine.cc:310
gem5::SDMAEngine::getId
int getId() const
Definition: sdma_engine.hh:168
gem5::SDMAEngine::decodeNext
void decodeNext(SDMAQueue *q)
This method checks read and write pointers and starts decoding packets if the read pointer is less th...
Definition: sdma_engine.cc:338
gem5::SDMAEngine::getGARTAddr
Addr getGARTAddr(Addr addr) const
Methods for translation.
Definition: sdma_engine.cc:109
gem5::SDMAEngine::getPageWptr
uint64_t getPageWptr()
Definition: sdma_engine.hh:269
gem5::SDMAEngine::getPageRptr
uint64_t getPageRptr()
Definition: sdma_engine.hh:266
gem5::SDMAEngine::SDMAQueue::_mqd_addr
Addr _mqd_addr
Definition: sdma_engine.hh:70
header
output header
Definition: nop.cc:36
gem5::SDMAEngine::SDMAQueue::setWptr
void setWptr(Addr value)
Definition: sdma_engine.hh:108
gem5::SDMAEngine::SDMAQueue::getMQDAddr
Addr getMQDAddr()
Definition: sdma_engine.hh:89
gem5::SDMAEngine::id
int id
Definition: sdma_engine.hh:127
gem5::SDMAEngine::setGfxRptrHi
void setGfxRptrHi(uint32_t data)
Definition: sdma_engine.cc:1230
gem5::SDMAEngine::pageBase
uint64_t pageBase
Definition: sdma_engine.hh:145
gem5::SDMAEngine::writeDone
void writeDone(SDMAQueue *q, sdmaWrite *pkt, uint32_t *dmaBuffer)
Definition: sdma_engine.cc:632
gem5::SDMAEngine::unserialize
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Definition: sdma_engine.cc:1083
gem5::SDMAEngine::getGfxDoorbellOffset
uint64_t getGfxDoorbellOffset()
Definition: sdma_engine.hh:263
gem5::SDMAEngine::setPageDoorbellOffsetHi
void setPageDoorbellOffsetHi(uint32_t data)
Definition: sdma_engine.cc:1349
gem5::SDMAEngine::setGfxDoorbellLo
void setGfxDoorbellLo(uint32_t data)
Definition: sdma_engine.cc:1238
gem5::SDMAEngine::fenceDone
void fenceDone(SDMAQueue *q, sdmaFence *pkt)
Definition: sdma_engine.cc:771
gem5::SDMAEngine::setPageSize
void setPageSize(uint32_t data)
Definition: sdma_engine.cc:1356
gem5::SDMAEngine::SDMAQueue::ib
void ib(SDMAQueue *ib)
Definition: sdma_engine.hh:120
gem5::SDMAEngine::read
Tick read(PacketPtr pkt) override
Pure virtual function that the device must implement.
Definition: sdma_engine.hh:191
gem5::SDMAEngine::writeReadData
void writeReadData(SDMAQueue *q, sdmaWrite *pkt, uint32_t *dmaBuffer)
Definition: sdma_engine.cc:604
gem5::SDMAEngine::SDMAQueue::_parent
SDMAQueue * _parent
Definition: sdma_engine.hh:66
gem5::SDMAEngine::gpuDevice
AMDGPUDevice * gpuDevice
Definition: sdma_engine.hh:151
gem5::SDMAEngine::pollRegMemFunc
bool pollRegMemFunc(uint32_t value, uint32_t reference, uint32_t func)
Definition: sdma_engine.cc:898
gem5::SDMAEngine::unregisterRLCQueue
void unregisterRLCQueue(Addr doorbell)
Definition: sdma_engine.cc:221
gem5::SDMAEngine::pageRptr
uint64_t pageRptr
Definition: sdma_engine.hh:146
gem5::SDMAEngine::SDMAQueue::SDMAQueue
SDMAQueue()
Definition: sdma_engine.hh:72
gem5::SDMAEngine::translate
TranslationGenPtr translate(Addr vaddr, Addr size) override
GPUController will perform DMA operations on VAs, and because page faults are not currently supported...
Definition: sdma_engine.cc:157
gem5::SDMAEngine::SDMAQueue::setMQD
void setMQD(SDMAQueueDesc *mqd)
Definition: sdma_engine.hh:122
gem5::SDMAEngine::setPageBaseHi
void setPageBaseHi(uint32_t data)
Definition: sdma_engine.cc:1300
gem5::SDMAEngine::SDMAQueue::getMQD
SDMAQueueDesc * getMQD()
Definition: sdma_engine.hh:88
gem5::SDMAEngine::getMmioBase
Addr getMmioBase()
Methods for getting SDMA MMIO base address and size.
Definition: sdma_engine.hh:254
gem5::SDMAEngine::cur_vmid
int cur_vmid
Definition: sdma_engine.hh:306
gem5::SDMAEngine::setGfxBaseLo
void setGfxBaseLo(uint32_t data)
Definition: sdma_engine.cc:1206
gem5::SDMAEngine::SDMAQueue::_base
Addr _base
Definition: sdma_engine.hh:58
gem5::SDMAEngine::setGfxDoorbellHi
void setGfxDoorbellHi(uint32_t data)
Definition: sdma_engine.cc:1245
gem5::SDMAEngine::setGfxRptrLo
void setGfxRptrLo(uint32_t data)
Definition: sdma_engine.cc:1222
gem5::SDMAEngine::processPage
void processPage(Addr wptrOffset)
Definition: sdma_engine.cc:286
gem5::SDMAEngine::rlc1
SDMAQueue rlc1
Definition: sdma_engine.hh:136
gem5::VegaISA::p
Bitfield< 54 > p
Definition: pagetable.hh:70
gem5::SDMAEngine::SDMAQueue::setMQDAddr
void setMQDAddr(Addr mqdAddr)
Definition: sdma_engine.hh:123
gem5::SDMAEngine::pollRegMemRead
void pollRegMemRead(SDMAQueue *q, sdmaPollRegMemHeader *header, sdmaPollRegMem *pkt, uint32_t dma_buffer, int count)
Definition: sdma_engine.cc:868
gem5::SDMAEngine::processRLC
void processRLC(Addr doorbellOffset, Addr wptrOffset)
Definition: sdma_engine.cc:297
amdgpu_device.hh
gem5::SDMAEngine::ptePdeDone
void ptePdeDone(SDMAQueue *q, sdmaPtePde *pkt, uint64_t *dmaBuffer)
Definition: sdma_engine.cc:963
gem5::SDMAEngine::trap
void trap(SDMAQueue *q, sdmaTrap *pkt)
Definition: sdma_engine.cc:781
gem5::X86ISA::count
count
Definition: misc.hh:710
gem5::Packet
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition: packet.hh:294
gem5::SDMAEngine::setGfxDoorbellOffsetHi
void setGfxDoorbellOffsetHi(uint32_t data)
Definition: sdma_engine.cc:1263
gem5::SDMAEngine::SDMAGfx
@ SDMAGfx
Definition: sdma_engine.hh:52
gem5::SDMAEngine::SDMAQueue::_ib
SDMAQueue * _ib
Definition: sdma_engine.hh:67
gem5::SDMAEngine::ptePde
void ptePde(SDMAQueue *q, sdmaPtePde *pkt)
Definition: sdma_engine.cc:930
gem5::SDMAEngine::gfxDoorbellOffset
uint64_t gfxDoorbellOffset
Definition: sdma_engine.hh:142
gem5::Tick
uint64_t Tick
Tick count type.
Definition: types.hh:58
bitunion.hh
gem5::X86ISA::type
type
Definition: misc.hh:734
gem5::SDMAEngine::gfxIb
SDMAQueue gfxIb
Definition: sdma_engine.hh:135
gem5::SDMAEngine::serialize
void serialize(CheckpointOut &cp) const override
Serialize an object.
Definition: sdma_engine.cc:1037
gem5::SDMAEngine::SDMAQueue::queueType
SDMAType queueType()
Definition: sdma_engine.hh:87
gem5::SDMAEngine::copy
void copy(SDMAQueue *q, sdmaCopy *pkt)
Definition: sdma_engine.cc:643
gem5::SDMAEngine::setPageRptrHi
void setPageRptrHi(uint32_t data)
Definition: sdma_engine.cc:1316
gem5::SDMAEngine::pageWptr
uint64_t pageWptr
Definition: sdma_engine.hh:149
gem5::AMDGPUDevice
Device model for an AMD GPU.
Definition: amdgpu_device.hh:62
gem5::SDMAEngine::registerRLCQueue
void registerRLCQueue(Addr doorbell, Addr mqdAddr, SDMAQueueDesc *mqd)
Methods for RLC queues.
Definition: sdma_engine.cc:181
gem5::SDMAEngine::pageIb
SDMAQueue pageIb
Definition: sdma_engine.hh:135
pm4_queues.hh
gem5::SDMAEngine::setPageDoorbellLo
void setPageDoorbellLo(uint32_t data)
Definition: sdma_engine.cc:1324
gem5::SDMAEngine::rlc0
SDMAQueue rlc0
Definition: sdma_engine.hh:136
gem5::SDMAEngine::setGfxDoorbellOffsetLo
void setGfxDoorbellOffsetLo(uint32_t data)
Definition: sdma_engine.cc:1252
gem5::SDMAEngine
System DMA Engine class for AMD dGPU.
Definition: sdma_engine.hh:48
gem5::SDMAEngine::SDMAQueue::_size
Addr _size
Definition: sdma_engine.hh:61
gem5::SDMAEngine::SDMAType
SDMAType
Definition: sdma_engine.hh:50
gem5::Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:147
gem5::SDMAEngine::pageDoorbellOffset
uint64_t pageDoorbellOffset
Definition: sdma_engine.hh:148
gem5::SDMAEngine::SDMAQueue::_rptr
Addr _rptr
Definition: sdma_engine.hh:59
gem5::SDMAEngine::SDMAQueue::ib
SDMAQueue * ib()
Definition: sdma_engine.hh:86
gem5::SDMAEngine::SDMAQueue::parent
SDMAQueue * parent()
Definition: sdma_engine.hh:85
gem5::SDMAEngine::mmioBase
Addr mmioBase
Definition: sdma_engine.hh:159
gem5::SDMAEngine::atomicDone
void atomicDone(SDMAQueue *q, sdmaAtomicHeader *header, sdmaAtomic *pkt, uint64_t *dmaBuffer)
Definition: sdma_engine.cc:1017
gem5::SDMAEngine::pollRegMem
void pollRegMem(SDMAQueue *q, sdmaPollRegMemHeader *header, sdmaPollRegMem *pkt)
Implements a poll reg/mem packet that polls an SRBM register or a memory location,...
Definition: sdma_engine.cc:830
gem5::SDMAEngine::copyReadData
void copyReadData(SDMAQueue *q, sdmaCopy *pkt, uint8_t *dmaBuffer)
Definition: sdma_engine.cc:686
gem5::SDMAEngine::getMmioSize
Addr getMmioSize()
Definition: sdma_engine.hh:255
gem5::SDMAEngine::SDMAQueue::getRptr
Addr getRptr()
Definition: sdma_engine.hh:77
gem5::SDMAEngine::SDMAQueue::base
void base(Addr value)
Definition: sdma_engine.hh:91
gem5::SDMAEngine::SDMAQueue::_wptr
Addr _wptr
Definition: sdma_engine.hh:60
gem5::SDMAEngine::SDMAQueue::globalRptr
Addr globalRptr()
Definition: sdma_engine.hh:82
gem5::SDMAEngine::SDMAQueue::rptr
Addr rptr()
Definition: sdma_engine.hh:76
gem5::SDMAEngine::processRLC1
void processRLC1(Addr wptrOffset)
Definition: sdma_engine.cc:324
gem5::SDMAEngine::decodeHeader
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...
Definition: sdma_engine.cc:374
gem5::SDMAEngine::SDMAQueue::queueType
void queueType(SDMAType type)
Definition: sdma_engine.hh:121
gem5::VegaISA::v
Bitfield< 0 > v
Definition: pagetable.hh:65
gem5::SDMAEngine::getPageDoorbell
uint64_t getPageDoorbell()
Definition: sdma_engine.hh:267
gem5::SDMAEngine::pageDoorbell
uint64_t pageDoorbell
Definition: sdma_engine.hh:147
gem5::ArmISA::q
Bitfield< 27 > q
Definition: misc_types.hh:55
gem5::SDMAEngine::gfxRptr
uint64_t gfxRptr
Definition: sdma_engine.hh:140
gem5::SDMAEngine::SDMAQueue::_global_rptr
Addr _global_rptr
Definition: sdma_engine.hh:63
sdma_packets.hh
gem5::SDMAEngine::page
SDMAQueue page
Definition: sdma_engine.hh:135
gem5::SDMAEngine::SDMAQueue::base
Addr base()
Definition: sdma_engine.hh:75
gem5::SDMAEngine::SDMAQueue::processing
void processing(bool value)
Definition: sdma_engine.hh:118
gem5::SDMAEngine::setPageRptrLo
void setPageRptrLo(uint32_t data)
Definition: sdma_engine.cc:1308
gem5::SDMAEngine::deallocateRLCQueues
void deallocateRLCQueues()
Definition: sdma_engine.cc:264
gem5::SDMAEngine::setGfxWptrLo
void setGfxWptrLo(uint32_t data)
Definition: sdma_engine.cc:1278
gem5::SDMAEngine::SDMAQueue::wptr
void wptr(Addr value)
Definition: sdma_engine.hh:113
gem5::SDMAEngine::SDMAQueue
Definition: sdma_engine.hh:56
gem5::SDMAEngine::getDeviceAddress
Addr getDeviceAddress(Addr raw_addr)
Translate an address in an SDMA packet.
Definition: sdma_engine.cc:119
gem5::SDMAEngine::gfxBase
uint64_t gfxBase
Definition: sdma_engine.hh:139
gem5::SDMAEngine::setGPUDevice
void setGPUDevice(AMDGPUDevice *gpu_device)
Definition: sdma_engine.cc:77
gem5::SDMAEngine::SDMAQueue::rptrWbAddr
void rptrWbAddr(Addr value)
Definition: sdma_engine.hh:116
gem5::CheckpointOut
std::ostream CheckpointOut
Definition: serialize.hh:66
dma_virt_device.hh
gem5::SDMAEngine::SDMAQueue::valid
bool valid()
Definition: sdma_engine.hh:83
gem5::SDMAEngine::fence
void fence(SDMAQueue *q, sdmaFence *pkt)
Definition: sdma_engine.cc:758
gem5::DmaVirtDevice
Definition: dma_virt_device.hh:41
gem5::SDMAEngine::srbmWrite
void srbmWrite(SDMAQueue *q, sdmaSRBMWriteHeader *header, sdmaSRBMWrite *pkt)
Definition: sdma_engine.cc:799
gem5::MipsISA::vaddr
vaddr
Definition: pra_constants.hh:278
gem5::SDMAEngine::SDMAQueue::processing
bool processing()
Definition: sdma_engine.hh:84
gem5::SDMAEngine::getPageBase
uint64_t getPageBase()
Definition: sdma_engine.hh:265
std::list< AddrRange >
gem5::SDMAEngine::processGfx
void processGfx(Addr wptrOffset)
Given a new write ptr offset, communicated to the GPU through a doorbell write, the SDMA engine proce...
Definition: sdma_engine.cc:275
gem5::SDMAEngine::setPageDoorbellOffsetLo
void setPageDoorbellOffsetLo(uint32_t data)
Definition: sdma_engine.cc:1338
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: gpu_translation_state.hh:37
gem5::SDMAEngine::setGfxWptrHi
void setGfxWptrHi(uint32_t data)
Definition: sdma_engine.cc:1285
gem5::SDMAEngine::SDMAQueue::size
void size(Addr value)
Definition: sdma_engine.hh:115
gem5::SDMAEngine::getAddrRanges
AddrRangeList getAddrRanges() const override
Every PIO device is obliged to provide an implementation that returns the address ranges the device r...
Definition: sdma_engine.cc:1030
gem5::SDMAEngine::SDMAQueue::valid
void valid(bool v)
Definition: sdma_engine.hh:117
gem5::SDMAEngine::mmioSize
Addr mmioSize
Definition: sdma_engine.hh:160
gem5::SDMAEngine::setGfxSize
void setGfxSize(uint32_t data)
Definition: sdma_engine.cc:1270
gem5::SDMAEngine::rlc0Ib
SDMAQueue rlc0Ib
Definition: sdma_engine.hh:136
gem5::SDMAEngine::SDMAQueue::_type
SDMAType _type
Definition: sdma_engine.hh:68
gem5::SDMAEngine::setPageBaseLo
void setPageBaseLo(uint32_t data)
Definition: sdma_engine.cc:1292
gem5::SDMAEngine::setGfxBaseHi
void setGfxBaseHi(uint32_t data)
Definition: sdma_engine.cc:1214
gem5::SDMAEngine::copyDone
void copyDone(SDMAQueue *q, sdmaCopy *pkt, uint8_t *dmaBuffer)
Definition: sdma_engine.cc:732
gem5::TranslationGenPtr
std::unique_ptr< TranslationGen > TranslationGenPtr
Definition: translation_gen.hh:128
gem5::VegaISA::Walker
Definition: pagetable_walker.hh:54
gem5::SDMAEngine::atomic
void atomic(SDMAQueue *q, sdmaAtomicHeader *header, sdmaAtomic *pkt)
Definition: sdma_engine.cc:974
gem5::X86ISA::addr
Bitfield< 3 > addr
Definition: types.hh:84
gem5::SDMAEngine::SDMAQueue::_processing
bool _processing
Definition: sdma_engine.hh:65
gem5::SDMAEngine::SDMAQueue::getWptr
Addr getWptr()
Definition: sdma_engine.hh:79
gem5::SDMAEngine::rlcInfo
std::array< Addr, 2 > rlcInfo
Definition: sdma_engine.hh:155
gem5::SDMAEngine::writeMMIO
void writeMMIO(PacketPtr pkt, Addr mmio_offset)
Methods for setting the values of SDMA MMIO registers.
Definition: sdma_engine.cc:1128
gem5::SDMAEngine::setPageWptrHi
void setPageWptrHi(uint32_t data)
Definition: sdma_engine.cc:1371
gem5::SDMAEngine::SDMAPage
@ SDMAPage
Definition: sdma_engine.hh:53

Generated on Sun Jul 30 2023 01:56:54 for gem5 by doxygen 1.8.17