gem5  v22.0.0.1
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"
36 #include "debug/SDMAEngine.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  {
62  bool _valid;
66  public:
67  SDMAQueue() : _rptr(0), _wptr(0), _valid(false), _processing(false),
68  _parent(nullptr), _ib(nullptr) {}
69 
70  Addr base() { return _base; }
71  Addr rptr() { return _base + _rptr; }
72  Addr getRptr() { return _rptr; }
73  Addr wptr() { return _base + _wptr; }
74  Addr getWptr() { return _wptr; }
75  Addr size() { return _size; }
76  bool valid() { return _valid; }
77  bool processing() { return _processing; }
78  SDMAQueue* parent() { return _parent; }
79  SDMAQueue* ib() { return _ib; }
80 
81  void base(Addr value) { _base = value; }
82 
83  void
84  incRptr(uint32_t value)
85  {
86  //assert((_rptr + value) <= (_size << 1));
87  _rptr = (_rptr + value) % _size;
88  }
89 
90  void rptr(Addr value) { _rptr = value; }
91 
92  void
93  setWptr(Addr value)
94  {
95  //assert(value <= (_size << 1));
96  _wptr = value % _size;
97  }
98 
99  void wptr(Addr value) { _wptr = value; }
100 
101  void size(Addr value) { _size = value; }
102  void valid(bool v) { _valid = v; }
103  void processing(bool value) { _processing = value; }
104  void parent(SDMAQueue* q) { _parent = q; }
105  void ib(SDMAQueue* ib) { _ib = ib; }
106  };
107 
108  /* SDMA Engine ID */
109  int id;
119 
120  /* Gfx ring buffer registers */
121  uint64_t gfxBase;
122  uint64_t gfxRptr;
123  uint64_t gfxDoorbell;
125  uint64_t gfxWptr;
126  /* Page ring buffer registers */
127  uint64_t pageBase;
128  uint64_t pageRptr;
129  uint64_t pageDoorbell;
131  uint64_t pageWptr;
132 
135 
136  /* processRLC will select the correct queue for the doorbell */
137  std::unordered_map<Addr, int> rlcMap;
138  void processRLC0(Addr wptrOffset);
139  void processRLC1(Addr wptrOffset);
140 
141  public:
142  SDMAEngine(const SDMAEngineParams &p);
143 
144  void setGPUDevice(AMDGPUDevice *gpu_device);
145 
146  void setId(int _id) { id = _id; }
150  int getIHClientId();
151 
155  Addr getGARTAddr(Addr addr) const;
156  TranslationGenPtr translate(Addr vaddr, Addr size) override;
157 
161  Tick write(PacketPtr pkt) override { return 0; }
162  Tick read(PacketPtr pkt) override { return 0; }
163  AddrRangeList getAddrRanges() const override;
164  void serialize(CheckpointOut &cp) const override;
165  void unserialize(CheckpointIn &cp) override;
166 
171  void processGfx(Addr wptrOffset);
172  void processPage(Addr wptrOffset);
173  void processRLC(Addr doorbellOffset, Addr wptrOffset);
174 
183  void decodeNext(SDMAQueue *q);
184 
190  void decodeHeader(SDMAQueue *q, uint32_t data);
191 
195  void write(SDMAQueue *q, sdmaWrite *pkt);
196  void writeReadData(SDMAQueue *q, sdmaWrite *pkt, uint32_t *dmaBuffer);
197  void writeDone(SDMAQueue *q, sdmaWrite *pkt, uint32_t *dmaBuffer);
198  void copy(SDMAQueue *q, sdmaCopy *pkt);
199  void copyReadData(SDMAQueue *q, sdmaCopy *pkt, uint8_t *dmaBuffer);
200  void copyDone(SDMAQueue *q, sdmaCopy *pkt, uint8_t *dmaBuffer);
201  void indirectBuffer(SDMAQueue *q, sdmaIndirectBuffer *pkt);
202  void fence(SDMAQueue *q, sdmaFence *pkt);
203  void fenceDone(SDMAQueue *q, sdmaFence *pkt);
204  void trap(SDMAQueue *q, sdmaTrap *pkt);
205  void srbmWrite(SDMAQueue *q, sdmaSRBMWriteHeader *header,
206  sdmaSRBMWrite *pkt);
207  void pollRegMem(SDMAQueue *q, sdmaPollRegMemHeader *header,
208  sdmaPollRegMem *pkt);
209  void pollRegMemRead(SDMAQueue *q, sdmaPollRegMemHeader *header,
210  sdmaPollRegMem *pkt, uint32_t dma_buffer, int count);
211  bool pollRegMemFunc(uint32_t value, uint32_t reference, uint32_t func);
212  void ptePde(SDMAQueue *q, sdmaPtePde *pkt);
213  void ptePdeDone(SDMAQueue *q, sdmaPtePde *pkt, uint64_t *dmaBuffer);
214 
218  uint64_t getGfxBase() { return gfxBase; }
219  uint64_t getGfxRptr() { return gfxRptr; }
220  uint64_t getGfxDoorbell() { return gfxDoorbell; }
222  uint64_t getGfxWptr() { return gfxWptr; }
223  uint64_t getPageBase() { return pageBase; }
224  uint64_t getPageRptr() { return pageRptr; }
225  uint64_t getPageDoorbell() { return pageDoorbell; }
227  uint64_t getPageWptr() { return pageWptr; }
228 
232  void writeMMIO(PacketPtr pkt, Addr mmio_offset);
233 
234  void setGfxBaseLo(uint32_t data);
235  void setGfxBaseHi(uint32_t data);
236  void setGfxRptrLo(uint32_t data);
237  void setGfxRptrHi(uint32_t data);
238  void setGfxDoorbellLo(uint32_t data);
239  void setGfxDoorbellHi(uint32_t data);
240  void setGfxDoorbellOffsetLo(uint32_t data);
241  void setGfxDoorbellOffsetHi(uint32_t data);
242  void setGfxSize(uint64_t data);
243  void setGfxWptrLo(uint32_t data);
244  void setGfxWptrHi(uint32_t data);
245  void setPageBaseLo(uint32_t data);
246  void setPageBaseHi(uint32_t data);
247  void setPageRptrLo(uint32_t data);
248  void setPageRptrHi(uint32_t data);
249  void setPageDoorbellLo(uint32_t data);
250  void setPageDoorbellHi(uint32_t data);
251  void setPageDoorbellOffsetLo(uint32_t data);
252  void setPageDoorbellOffsetHi(uint32_t data);
253  void setPageSize(uint64_t data);
254  void setPageWptrLo(uint32_t data);
255  void setPageWptrHi(uint32_t data);
256 
260  void registerRLCQueue(Addr doorbell, Addr rb_base);
261  void unregisterRLCQueue(Addr doorbell);
262 
263  int cur_vmid = 0;
264 };
265 
266 } // namespace gem5
267 
268 #endif // __DEV_AMDGPU_SDMA_ENGINE_HH__
gem5::SDMAEngine::SDMAQueue::_valid
bool _valid
Definition: sdma_engine.hh:62
gem5::SDMAEngine::setPageDoorbellHi
void setPageDoorbellHi(uint32_t data)
Definition: sdma_engine.cc:1118
gem5::SDMAEngine::getGfxRptr
uint64_t getGfxRptr()
Definition: sdma_engine.hh:219
gem5::SDMAEngine::indirectBuffer
void indirectBuffer(SDMAQueue *q, sdmaIndirectBuffer *pkt)
Definition: sdma_engine.cc:598
gem5::SDMAEngine::SDMAQueue::incRptr
void incRptr(uint32_t value)
Definition: sdma_engine.hh:84
gem5::SDMAEngine::SDMAQueue::parent
void parent(SDMAQueue *q)
Definition: sdma_engine.hh:104
gem5::SDMAEngine::SDMAEngine
SDMAEngine(const SDMAEngineParams &p)
Definition: sdma_engine.cc:46
gem5::SDMAEngine::SDMAQueue::rptr
void rptr(Addr value)
Definition: sdma_engine.hh:90
gem5::SDMAEngine::setId
void setId(int _id)
Definition: sdma_engine.hh:146
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:222
gem5::SDMAEngine::getIHClientId
int getIHClientId()
Returns the client id for the Interrupt Handler.
Definition: sdma_engine.cc:77
gem5::SDMAEngine::rlc1Ib
SDMAQueue rlc1Ib
Definition: sdma_engine.hh:118
gem5::SDMAEngine::walker
VegaISA::Walker * walker
Definition: sdma_engine.hh:134
gem5::SDMAEngine::SDMAQueue::wptr
Addr wptr()
Definition: sdma_engine.hh:73
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:117
gem5::SDMAEngine::gfxWptr
uint64_t gfxWptr
Definition: sdma_engine.hh:125
gem5::SDMAEngine::gfxDoorbell
uint64_t gfxDoorbell
Definition: sdma_engine.hh:123
gem5::SDMAEngine::getGfxBase
uint64_t getGfxBase()
Methods for getting the values of SDMA MMIO registers.
Definition: sdma_engine.hh:218
gem5::CheckpointIn
Definition: serialize.hh:68
gem5::SDMAEngine::SDMAQueue::size
Addr size()
Definition: sdma_engine.hh:75
gem5::SDMAEngine::registerRLCQueue
void registerRLCQueue(Addr doorbell, Addr rb_base)
Methods for RLC queues.
Definition: sdma_engine.cc:124
gem5::SDMAEngine::getPageDoorbellOffset
uint64_t getPageDoorbellOffset()
Definition: sdma_engine.hh:226
gem5::SDMAEngine::getGfxDoorbell
uint64_t getGfxDoorbell()
Definition: sdma_engine.hh:220
gem5::SDMAEngine::setPageWptrLo
void setPageWptrLo(uint32_t data)
Definition: sdma_engine.cc:1145
gem5::SDMAEngine::write
Tick write(PacketPtr pkt) override
Inherited methods.
Definition: sdma_engine.hh:161
gem5::SDMAEngine::processRLC0
void processRLC0(Addr wptrOffset)
Definition: sdma_engine.cc:208
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:236
gem5::SDMAEngine::getGARTAddr
Addr getGARTAddr(Addr addr) const
Methods for translation.
Definition: sdma_engine.cc:90
gem5::SDMAEngine::getPageWptr
uint64_t getPageWptr()
Definition: sdma_engine.hh:227
gem5::SDMAEngine::getPageRptr
uint64_t getPageRptr()
Definition: sdma_engine.hh:224
header
output header
Definition: nop.cc:36
gem5::SDMAEngine::SDMAQueue::setWptr
void setWptr(Addr value)
Definition: sdma_engine.hh:93
gem5::SDMAEngine::id
int id
Definition: sdma_engine.hh:109
gem5::SDMAEngine::setGfxRptrHi
void setGfxRptrHi(uint32_t data)
Definition: sdma_engine.cc:1026
gem5::SDMAEngine::pageBase
uint64_t pageBase
Definition: sdma_engine.hh:127
gem5::SDMAEngine::writeDone
void writeDone(SDMAQueue *q, sdmaWrite *pkt, uint32_t *dmaBuffer)
Definition: sdma_engine.cc:516
gem5::SDMAEngine::unserialize
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Definition: sdma_engine.cc:880
gem5::SDMAEngine::getGfxDoorbellOffset
uint64_t getGfxDoorbellOffset()
Definition: sdma_engine.hh:221
gem5::SDMAEngine::setPageDoorbellOffsetHi
void setPageDoorbellOffsetHi(uint32_t data)
Definition: sdma_engine.cc:1132
gem5::SDMAEngine::setGfxDoorbellLo
void setGfxDoorbellLo(uint32_t data)
Definition: sdma_engine.cc:1033
gem5::SDMAEngine::fenceDone
void fenceDone(SDMAQueue *q, sdmaFence *pkt)
Definition: sdma_engine.cc:626
gem5::SDMAEngine::setPageSize
void setPageSize(uint64_t data)
Definition: sdma_engine.cc:1139
gem5::SDMAEngine::SDMAQueue::ib
void ib(SDMAQueue *ib)
Definition: sdma_engine.hh:105
gem5::SDMAEngine::read
Tick read(PacketPtr pkt) override
Pure virtual function that the device must implement.
Definition: sdma_engine.hh:162
gem5::SDMAEngine::writeReadData
void writeReadData(SDMAQueue *q, sdmaWrite *pkt, uint32_t *dmaBuffer)
Definition: sdma_engine.cc:486
gem5::SDMAEngine::SDMAQueue::_parent
SDMAQueue * _parent
Definition: sdma_engine.hh:64
gem5::SDMAEngine::gpuDevice
AMDGPUDevice * gpuDevice
Definition: sdma_engine.hh:133
gem5::SDMAEngine::pollRegMemFunc
bool pollRegMemFunc(uint32_t value, uint32_t reference, uint32_t func)
Definition: sdma_engine.cc:752
gem5::SDMAEngine::unregisterRLCQueue
void unregisterRLCQueue(Addr doorbell)
Definition: sdma_engine.cc:153
gem5::SDMAEngine::pageRptr
uint64_t pageRptr
Definition: sdma_engine.hh:128
gem5::SDMAEngine::SDMAQueue::SDMAQueue
SDMAQueue()
Definition: sdma_engine.hh:67
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:105
gem5::SDMAEngine::setPageBaseHi
void setPageBaseHi(uint32_t data)
Definition: sdma_engine.cc:1089
gem5::SDMAEngine::cur_vmid
int cur_vmid
Definition: sdma_engine.hh:263
gem5::SDMAEngine::setGfxBaseLo
void setGfxBaseLo(uint32_t data)
Definition: sdma_engine.cc:1003
gem5::SDMAEngine::SDMAQueue::_base
Addr _base
Definition: sdma_engine.hh:58
gem5::SDMAEngine::setGfxDoorbellHi
void setGfxDoorbellHi(uint32_t data)
Definition: sdma_engine.cc:1040
gem5::SDMAEngine::setGfxRptrLo
void setGfxRptrLo(uint32_t data)
Definition: sdma_engine.cc:1019
gem5::SDMAEngine::processPage
void processPage(Addr wptrOffset)
Definition: sdma_engine.cc:181
gem5::SDMAEngine::rlc1
SDMAQueue rlc1
Definition: sdma_engine.hh:118
gem5::VegaISA::p
Bitfield< 54 > p
Definition: pagetable.hh:70
gem5::SDMAEngine::pollRegMemRead
void pollRegMemRead(SDMAQueue *q, sdmaPollRegMemHeader *header, sdmaPollRegMem *pkt, uint32_t dma_buffer, int count)
Definition: sdma_engine.cc:722
gem5::SDMAEngine::processRLC
void processRLC(Addr doorbellOffset, Addr wptrOffset)
Definition: sdma_engine.cc:192
amdgpu_device.hh
gem5::SDMAEngine::ptePdeDone
void ptePdeDone(SDMAQueue *q, sdmaPtePde *pkt, uint64_t *dmaBuffer)
Definition: sdma_engine.cc:816
gem5::SDMAEngine::trap
void trap(SDMAQueue *q, sdmaTrap *pkt)
Definition: sdma_engine.cc:636
gem5::X86ISA::count
count
Definition: misc.hh:703
gem5::Packet
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition: packet.hh:291
gem5::SDMAEngine::setGfxDoorbellOffsetHi
void setGfxDoorbellOffsetHi(uint32_t data)
Definition: sdma_engine.cc:1054
gem5::SDMAEngine::SDMAGfx
@ SDMAGfx
Definition: sdma_engine.hh:52
gem5::SDMAEngine::SDMAQueue::_ib
SDMAQueue * _ib
Definition: sdma_engine.hh:65
gem5::SDMAEngine::ptePde
void ptePde(SDMAQueue *q, sdmaPtePde *pkt)
Definition: sdma_engine.cc:784
gem5::SDMAEngine::gfxDoorbellOffset
uint64_t gfxDoorbellOffset
Definition: sdma_engine.hh:124
gem5::Tick
uint64_t Tick
Tick count type.
Definition: types.hh:58
bitunion.hh
gem5::SDMAEngine::gfxIb
SDMAQueue gfxIb
Definition: sdma_engine.hh:117
gem5::SDMAEngine::serialize
void serialize(CheckpointOut &cp) const override
Serialize an object.
Definition: sdma_engine.cc:834
gem5::SDMAEngine::copy
void copy(SDMAQueue *q, sdmaCopy *pkt)
Definition: sdma_engine.cc:527
gem5::SDMAEngine::setPageRptrHi
void setPageRptrHi(uint32_t data)
Definition: sdma_engine.cc:1104
gem5::SDMAEngine::pageWptr
uint64_t pageWptr
Definition: sdma_engine.hh:131
gem5::AMDGPUDevice
Device model for an AMD GPU.
Definition: amdgpu_device.hh:60
gem5::SDMAEngine::pageIb
SDMAQueue pageIb
Definition: sdma_engine.hh:117
gem5::SDMAEngine::setPageDoorbellLo
void setPageDoorbellLo(uint32_t data)
Definition: sdma_engine.cc:1111
gem5::SDMAEngine::rlc0
SDMAQueue rlc0
Definition: sdma_engine.hh:118
gem5::SDMAEngine::setGfxDoorbellOffsetLo
void setGfxDoorbellOffsetLo(uint32_t data)
Definition: sdma_engine.cc:1047
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:130
gem5::SDMAEngine::SDMAQueue::_rptr
Addr _rptr
Definition: sdma_engine.hh:59
gem5::SDMAEngine::SDMAQueue::ib
SDMAQueue * ib()
Definition: sdma_engine.hh:79
gem5::SDMAEngine::SDMAQueue::parent
SDMAQueue * parent()
Definition: sdma_engine.hh:78
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:684
gem5::SDMAEngine::copyReadData
void copyReadData(SDMAQueue *q, sdmaCopy *pkt, uint8_t *dmaBuffer)
Definition: sdma_engine.cc:547
gem5::SDMAEngine::SDMAQueue::getRptr
Addr getRptr()
Definition: sdma_engine.hh:72
gem5::SDMAEngine::SDMAQueue::base
void base(Addr value)
Definition: sdma_engine.hh:81
gem5::SDMAEngine::setGfxSize
void setGfxSize(uint64_t data)
Definition: sdma_engine.cc:1061
gem5::SDMAEngine::SDMAQueue::_wptr
Addr _wptr
Definition: sdma_engine.hh:60
gem5::SDMAEngine::SDMAQueue::rptr
Addr rptr()
Definition: sdma_engine.hh:71
gem5::SDMAEngine::processRLC1
void processRLC1(Addr wptrOffset)
Definition: sdma_engine.cc:222
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:261
gem5::VegaISA::v
Bitfield< 0 > v
Definition: pagetable.hh:65
gem5::SDMAEngine::getPageDoorbell
uint64_t getPageDoorbell()
Definition: sdma_engine.hh:225
gem5::SDMAEngine::pageDoorbell
uint64_t pageDoorbell
Definition: sdma_engine.hh:129
gem5::ArmISA::q
Bitfield< 27 > q
Definition: misc_types.hh:55
gem5::SDMAEngine::rlcMap
std::unordered_map< Addr, int > rlcMap
Definition: sdma_engine.hh:137
gem5::SDMAEngine::gfxRptr
uint64_t gfxRptr
Definition: sdma_engine.hh:122
sdma_packets.hh
gem5::SDMAEngine::page
SDMAQueue page
Definition: sdma_engine.hh:117
gem5::SDMAEngine::SDMAQueue::base
Addr base()
Definition: sdma_engine.hh:70
gem5::SDMAEngine::SDMAQueue::processing
void processing(bool value)
Definition: sdma_engine.hh:103
gem5::SDMAEngine::setPageRptrLo
void setPageRptrLo(uint32_t data)
Definition: sdma_engine.cc:1097
gem5::SDMAEngine::setGfxWptrLo
void setGfxWptrLo(uint32_t data)
Definition: sdma_engine.cc:1067
gem5::SDMAEngine::SDMAQueue::wptr
void wptr(Addr value)
Definition: sdma_engine.hh:99
gem5::SDMAEngine::SDMAQueue
Definition: sdma_engine.hh:56
gem5::SDMAEngine::gfxBase
uint64_t gfxBase
Definition: sdma_engine.hh:121
gem5::SDMAEngine::setGPUDevice
void setGPUDevice(AMDGPUDevice *gpu_device)
Definition: sdma_engine.cc:70
gem5::CheckpointOut
std::ostream CheckpointOut
Definition: serialize.hh:66
dma_virt_device.hh
gem5::SDMAEngine::SDMAQueue::valid
bool valid()
Definition: sdma_engine.hh:76
gem5::SDMAEngine::fence
void fence(SDMAQueue *q, sdmaFence *pkt)
Definition: sdma_engine.cc:613
gem5::DmaVirtDevice
Definition: dma_virt_device.hh:41
gem5::SDMAEngine::srbmWrite
void srbmWrite(SDMAQueue *q, sdmaSRBMWriteHeader *header, sdmaSRBMWrite *pkt)
Definition: sdma_engine.cc:653
gem5::MipsISA::vaddr
vaddr
Definition: pra_constants.hh:278
gem5::SDMAEngine::SDMAQueue::processing
bool processing()
Definition: sdma_engine.hh:77
gem5::SDMAEngine::getPageBase
uint64_t getPageBase()
Definition: sdma_engine.hh:223
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:170
gem5::SDMAEngine::setPageDoorbellOffsetLo
void setPageDoorbellOffsetLo(uint32_t data)
Definition: sdma_engine.cc:1125
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:1074
gem5::SDMAEngine::SDMAQueue::size
void size(Addr value)
Definition: sdma_engine.hh:101
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:827
gem5::SDMAEngine::SDMAQueue::valid
void valid(bool v)
Definition: sdma_engine.hh:102
gem5::SDMAEngine::rlc0Ib
SDMAQueue rlc0Ib
Definition: sdma_engine.hh:118
gem5::SDMAEngine::setPageBaseLo
void setPageBaseLo(uint32_t data)
Definition: sdma_engine.cc:1081
gem5::SDMAEngine::setGfxBaseHi
void setGfxBaseHi(uint32_t data)
Definition: sdma_engine.cc:1011
gem5::SDMAEngine::copyDone
void copyDone(SDMAQueue *q, sdmaCopy *pkt, uint8_t *dmaBuffer)
Definition: sdma_engine.cc:587
gem5::TranslationGenPtr
std::unique_ptr< TranslationGen > TranslationGenPtr
Definition: translation_gen.hh:128
gem5::VegaISA::Walker
Definition: pagetable_walker.hh:54
gem5::X86ISA::addr
Bitfield< 3 > addr
Definition: types.hh:84
gem5::SDMAEngine::SDMAQueue::_processing
bool _processing
Definition: sdma_engine.hh:63
gem5::SDMAEngine::SDMAQueue::getWptr
Addr getWptr()
Definition: sdma_engine.hh:74
gem5::SDMAEngine::writeMMIO
void writeMMIO(PacketPtr pkt, Addr mmio_offset)
Methods for setting the values of SDMA MMIO registers.
Definition: sdma_engine.cc:925
gem5::SDMAEngine::setPageWptrHi
void setPageWptrHi(uint32_t data)
Definition: sdma_engine.cc:1152
gem5::SDMAEngine::SDMAPage
@ SDMAPage
Definition: sdma_engine.hh:53

Generated on Wed Jul 13 2022 10:39:18 for gem5 by doxygen 1.8.17