gem5  v20.1.0.0
gic_v3_its.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019 ARM Limited
3  * All rights reserved
4  *
5  * The license below extends only to copyright in the software and shall
6  * not be construed as granting a license to any other intellectual
7  * property including but not limited to intellectual property relating
8  * to a hardware implementation of the functionality of the software
9  * licensed hereunder. You may use the software subject to the license
10  * terms below provided that you ensure that this notice is replicated
11  * unmodified and in its entirety in all distributions of the software,
12  * modified or unmodified, in source code or in binary form.
13  *
14  * Redistribution and use in source and binary forms, with or without
15  * modification, are permitted provided that the following conditions are
16  * met: redistributions of source code must retain the above copyright
17  * notice, this list of conditions and the following disclaimer;
18  * redistributions in binary form must reproduce the above copyright
19  * notice, this list of conditions and the following disclaimer in the
20  * documentation and/or other materials provided with the distribution;
21  * neither the name of the copyright holders nor the names of its
22  * contributors may be used to endorse or promote products derived from
23  * this software without specific prior written permission.
24  *
25  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36  */
37 
38 #ifndef __DEV_ARM_GICV3_ITS_H__
39 #define __DEV_ARM_GICV3_ITS_H__
40 
41 #include <queue>
42 
43 #include "base/coroutine.hh"
44 #include "dev/dma_device.hh"
45 #include "params/Gicv3Its.hh"
46 
47 class Gicv3;
48 class Gicv3Redistributor;
49 class ItsProcess;
50 class ItsTranslation;
51 class ItsCommand;
52 
53 enum class ItsActionType
54 {
56  SEND_REQ,
57  TERMINATE,
58 };
59 
60 struct ItsAction
61 {
65 };
66 
74 class Gicv3Its : public BasicPioDevice
75 {
76  friend class ::ItsProcess;
77  friend class ::ItsTranslation;
78  friend class ::ItsCommand;
79  public:
80  class DataPort : public RequestPort
81  {
82  protected:
84 
85  public:
86  DataPort(const std::string &_name, Gicv3Its &_its) :
87  RequestPort(_name, &_its),
88  its(_its)
89  {}
90 
91  virtual ~DataPort() {}
92 
93  bool recvTimingResp(PacketPtr pkt) { return its.recvTimingResp(pkt); }
94  void recvReqRetry() { return its.recvReqRetry(); }
95  };
96 
98 
99  Port & getPort(const std::string &if_name, PortID idx) override;
100  bool recvTimingResp(PacketPtr pkt);
101  void recvReqRetry();
102 
103  Gicv3Its(const Gicv3ItsParams *params);
104 
105  void setGIC(Gicv3 *_gic);
106 
107  static const uint32_t itsControl = 0x0;
108  static const uint32_t itsTranslate = 0x10000;
109 
110  // Address range part of Control frame
111  static const AddrRange GITS_BASER;
112 
113  static const uint32_t NUM_BASER_REGS = 8;
114 
115  // We currently don't support two level ITS tables
116  // The indirect bit is RAZ/WI for implementations that only
117  // support flat tables.
118  static const uint64_t BASER_INDIRECT = 0x4000000000000000;
119  static const uint64_t BASER_TYPE = 0x0700000000000000;
120  static const uint64_t BASER_ESZ = 0x001F000000000000;
121  static const uint64_t BASER_SZ = 0x00000000000000FF;
122  static const uint64_t BASER_WMASK =
124  static const uint64_t BASER_WMASK_UNIMPL =
126 
127  // GITS_CTLR.quiescent mask
128  static const uint32_t CTLR_QUIESCENT;
129 
130  enum : Addr
131  {
132  // Control frame
133  GITS_CTLR = itsControl + 0x0000,
134  GITS_IIDR = itsControl + 0x0004,
135  GITS_TYPER = itsControl + 0x0008,
139  GITS_PIDR2 = itsControl + 0xffe8,
140 
141  // Translation frame
143  };
144 
145  AddrRangeList getAddrRanges() const override;
146 
147  Tick read(PacketPtr pkt) override;
148  Tick write(PacketPtr pkt) override;
149 
150  DrainState drain() override;
151  void serialize(CheckpointOut & cp) const override;
152  void unserialize(CheckpointIn & cp) override;
153 
154  void translate(PacketPtr pkt);
155 
156  BitUnion32(CTLR)
157  Bitfield<31> quiescent;
158  Bitfield<7, 4> itsNumber;
159  Bitfield<1> imDe;
160  Bitfield<0> enabled;
161  EndBitUnion(CTLR)
162 
163  // Command read/write, (CREADR, CWRITER)
164  BitUnion64(CRDWR)
165  Bitfield<63, 32> high;
166  Bitfield<31, 0> low;
167  Bitfield<19, 5> offset;
168  Bitfield<0> retry;
169  Bitfield<0> stalled;
170  EndBitUnion(CRDWR)
171 
172  BitUnion64(CBASER)
173  Bitfield<63, 32> high;
174  Bitfield<31, 0> low;
175  Bitfield<63> valid;
176  Bitfield<61, 59> innerCache;
177  Bitfield<55, 53> outerCache;
178  Bitfield<51, 12> physAddr;
179  Bitfield<11, 10> shareability;
180  Bitfield<7, 0> size;
181  EndBitUnion(CBASER)
182 
183  BitUnion64(BASER)
184  Bitfield<63> valid;
185  Bitfield<62> indirect;
186  Bitfield<61, 59> innerCache;
187  Bitfield<58, 56> type;
188  Bitfield<55, 53> outerCache;
189  Bitfield<52, 48> entrySize;
190  Bitfield<47, 12> physAddr;
191  Bitfield<11, 10> shareability;
192  Bitfield<9, 8> pageSize;
193  Bitfield<7, 0> size;
194  EndBitUnion(BASER)
195 
196  BitUnion64(TYPER)
197  Bitfield<63, 32> high;
198  Bitfield<31, 0> low;
199  Bitfield<37> vmovp;
200  Bitfield<36> cil;
201  Bitfield<35, 32> cidBits;
202  Bitfield<31, 24> hcc;
203  Bitfield<19> pta;
204  Bitfield<18> seis;
205  Bitfield<17, 13> devBits;
206  Bitfield<12, 8> idBits;
207  Bitfield<7, 4> ittEntrySize;
208  Bitfield<2> cct;
209  Bitfield<1> _virtual;
210  Bitfield<0> physical;
211  EndBitUnion(TYPER)
212 
213  CTLR gitsControl;
214  TYPER gitsTyper;
215  CBASER gitsCbaser;
216  CRDWR gitsCreadr;
217  CRDWR gitsCwriter;
218  uint32_t gitsIidr;
219  uint32_t gitsTranslater;
220 
222 
227  bool idOutOfRange(uint32_t event_id, uint8_t itt_range) const;
228 
234  bool deviceOutOfRange(uint32_t device_id) const;
235 
242  bool sizeOutOfRange(uint32_t size) const;
243 
249  bool collectionOutOfRange(uint32_t collection_id) const;
250 
255  bool lpiOutOfRange(uint32_t intid) const;
256 
257  private: // Command
258  uint64_t maxCommands() const;
259  void checkCommandQueue();
260  void incrementReadPointer();
261 
262  public: // TableWalk
263  BitUnion64(DTE)
264  Bitfield<57, 53> ittRange;
265  Bitfield<52, 1> ittAddress;
266  Bitfield<0> valid;
267  EndBitUnion(DTE)
268 
269  BitUnion64(ITTE)
270  Bitfield<59, 46> vpeid;
271  Bitfield<45, 30> icid;
272  Bitfield<29, 16> intNumHyp;
273  Bitfield<15, 2> intNum;
274  Bitfield<1> intType;
275  Bitfield<0> valid;
276  EndBitUnion(ITTE)
277 
278  BitUnion64(CTE)
279  Bitfield<40, 1> rdBase;
280  Bitfield<0> valid;
282 
283  enum InterruptType
284  {
285  VIRTUAL_INTERRUPT = 0,
286  PHYSICAL_INTERRUPT = 1
287  };
288 
289  private:
290  Gicv3Redistributor* getRedistributor(uint64_t rd_base);
292  {
293  return getRedistributor(cte.rdBase);
294  }
295 
299 
301  {
306  };
307 
308  enum PageSize
309  {
313  };
314 
315  Addr pageAddress(enum ItsTables table);
316 
317  void moveAllPendingState(
319 
320  private:
321  std::queue<ItsAction> packetsToRetry;
322  uint32_t requestorId;
325 
328 };
329 
346 {
347  public:
348  using DTE = Gicv3Its::DTE;
349  using ITTE = Gicv3Its::ITTE;
350  using CTE = Gicv3Its::CTE;
353 
354  ItsProcess(Gicv3Its &_its);
355  virtual ~ItsProcess();
356 
358  const std::string name() const;
359 
360  ItsAction run(PacketPtr pkt);
361 
362  protected:
363  void reinit();
364  virtual void main(Yield &yield) = 0;
365 
366  void writeDeviceTable(Yield &yield, uint32_t device_id, DTE dte);
367 
369  Yield &yield, const Addr itt_base, uint32_t event_id, ITTE itte);
370 
372  Yield &yield, uint32_t collection_id, CTE cte);
373 
374  uint64_t readDeviceTable(
375  Yield &yield, uint32_t device_id);
376 
377  uint64_t readIrqTranslationTable(
378  Yield &yield, const Addr itt_base, uint32_t event_id);
379 
380  uint64_t readIrqCollectionTable(Yield &yield, uint32_t collection_id);
381 
382  void doRead(Yield &yield, Addr addr, void *ptr, size_t size);
383  void doWrite(Yield &yield, Addr addr, void *ptr, size_t size);
384  void terminate(Yield &yield);
385 
386  protected:
388 
389  private:
390  std::unique_ptr<Coroutine> coroutine;
391 };
392 
400 {
401  public:
402  ItsTranslation(Gicv3Its &_its);
403  ~ItsTranslation();
404 
405  protected:
406  void main(Yield &yield) override;
407 
409  translateLPI(Yield &yield, uint32_t device_id, uint32_t event_id);
410 };
411 
418 class ItsCommand : public ItsProcess
419 {
420  public:
422  {
423  struct
424  {
425  uint32_t type;
426  uint32_t deviceId;
427  uint32_t eventId;
428  uint32_t pintId;
429 
430  uint32_t data[4];
431  };
432  uint64_t raw[4];
433  };
434 
435  enum CommandType : uint32_t
436  {
437  CLEAR = 0x04,
438  DISCARD = 0x0F,
439  INT = 0x03,
440  INV = 0x0C,
441  INVALL = 0x0D,
442  MAPC = 0x09,
443  MAPD = 0x08,
444  MAPI = 0x0B,
445  MAPTI = 0x0A,
446  MOVALL = 0x0E,
447  MOVI = 0x01,
448  SYNC = 0x05,
449  VINVALL = 0x2D,
450  VMAPI = 0x2B,
451  VMAPP = 0x29,
452  VMAPTI = 0x2A,
453  VMOVI = 0x21,
454  VMOVP = 0x22,
455  VSYNC = 0x25
456  };
457 
458  ItsCommand(Gicv3Its &_its);
459  ~ItsCommand();
460 
461  protected:
468  {
469  using ExecFn = std::function<void(ItsCommand*, Yield&, CommandEntry&)>;
470 
471  DispatchEntry(std::string _name, ExecFn _exec)
472  : name(_name), exec(_exec)
473  {}
474 
475  std::string name;
477  };
478 
479  using DispatchTable = std::unordered_map<
481 
483 
484  static std::string commandName(uint32_t cmd);
485 
486  void main(Yield &yield) override;
487 
488  void readCommand(Yield &yield, CommandEntry &command);
489  void processCommand(Yield &yield, CommandEntry &command);
490 
491  // Commands
492  void clear(Yield &yield, CommandEntry &command);
493  void discard(Yield &yield, CommandEntry &command);
494  void mapc(Yield &yield, CommandEntry &command);
495  void mapd(Yield &yield, CommandEntry &command);
496  void mapi(Yield &yield, CommandEntry &command);
497  void mapti(Yield &yield, CommandEntry &command);
498  void movall(Yield &yield, CommandEntry &command);
499  void movi(Yield &yield, CommandEntry &command);
500  void sync(Yield &yield, CommandEntry &command);
501  void doInt(Yield &yield, CommandEntry &command);
502  void inv(Yield &yield, CommandEntry &command);
503  void invall(Yield &yield, CommandEntry &command);
504  void vinvall(Yield &yield, CommandEntry &command);
505  void vmapi(Yield &yield, CommandEntry &command);
506  void vmapp(Yield &yield, CommandEntry &command);
507  void vmapti(Yield &yield, CommandEntry &command);
508  void vmovi(Yield &yield, CommandEntry &command);
509  void vmovp(Yield &yield, CommandEntry &command);
510  void vsync(Yield &yield, CommandEntry &command);
511 
512  protected: // Helpers
513  bool idOutOfRange(CommandEntry &command, DTE dte) const
514  {
515  return its.idOutOfRange(command.eventId, dte.ittRange);
516  }
517 
518  bool deviceOutOfRange(CommandEntry &command) const
519  {
520  return its.deviceOutOfRange(command.deviceId);
521  }
522 
523  bool sizeOutOfRange(CommandEntry &command) const
524  {
525  const auto size = bits(command.raw[1], 4, 0);
526  const auto valid = bits(command.raw[2], 63);
527  if (valid)
528  return its.sizeOutOfRange(size);
529  else
530  return false;
531  }
532 
533  bool collectionOutOfRange(CommandEntry &command) const
534  {
535  return its.collectionOutOfRange(bits(command.raw[2], 15, 0));
536  }
537 };
538 
539 #endif
ItsCommand::MOVALL
@ MOVALL
Definition: gic_v3_its.hh:446
Gicv3Its::TRANSLATION_TABLE
@ TRANSLATION_TABLE
Definition: gic_v3_its.hh:304
Gicv3Its::deviceOutOfRange
bool deviceOutOfRange(uint32_t device_id) const
Returns TRUE if the value supplied has bits above the implemented range or if the value supplied exce...
Definition: gic_v3_its.cc:992
Gicv3Its::gitsIidr
uint32_t gitsIidr
Definition: gic_v3_its.hh:218
Gicv3Its::getPort
Port & getPort(const std::string &if_name, PortID idx) override
Get a port with a given name and index.
Definition: gic_v3_its.cc:1106
ItsProcess::ITTE
Gicv3Its::ITTE ITTE
Definition: gic_v3_its.hh:349
Gicv3Its::requestorId
uint32_t requestorId
Definition: gic_v3_its.hh:322
Gicv3Its::entrySize
Bitfield< 52, 48 > entrySize
Definition: gic_v3_its.hh:189
Gicv3Its::hcc
Bitfield< 31, 24 > hcc
Definition: gic_v3_its.hh:202
Gicv3Its::GITS_BASER
static const AddrRange GITS_BASER
Definition: gic_v3_its.hh:111
Gicv3Its::collectionOutOfRange
bool collectionOutOfRange(uint32_t collection_id) const
Returns TRUE if the value supplied has bits above the implemented range or if the value exceeds the t...
Definition: gic_v3_its.cc:1004
Gicv3Its::getAddrRanges
AddrRangeList getAddrRanges() const override
Every PIO device is obliged to provide an implementation that returns the address ranges the device r...
Definition: gic_v3_its.cc:807
Gicv3Its::_virtual
Bitfield< 1 > _virtual
Definition: gic_v3_its.hh:209
Gicv3Its::GITS_IIDR
@ GITS_IIDR
Definition: gic_v3_its.hh:134
ItsCommand::movall
void movall(Yield &yield, CommandEntry &command)
Definition: gic_v3_its.cc:652
Gicv3Its::Gicv3Its
Gicv3Its(const Gicv3ItsParams *params)
Definition: gic_v3_its.cc:774
Gicv3Its::size
Bitfield< 7, 0 > size
Definition: gic_v3_its.hh:180
Gicv3Its::gitsTyper
TYPER gitsTyper
Definition: gic_v3_its.hh:214
Gicv3Its::read
Tick read(PacketPtr pkt) override
Pure virtual function that the device must implement.
Definition: gic_v3_its.cc:817
Gicv3Its::idBits
Bitfield< 12, 8 > idBits
Definition: gic_v3_its.hh:206
ItsCommand::deviceOutOfRange
bool deviceOutOfRange(CommandEntry &command) const
Definition: gic_v3_its.hh:518
ItsCommand::vmapp
void vmapp(Yield &yield, CommandEntry &command)
Definition: gic_v3_its.cc:745
ItsCommand::DispatchEntry::name
std::string name
Definition: gic_v3_its.hh:475
Gicv3Its::retry
Bitfield< 0 > retry
Definition: gic_v3_its.hh:168
m5::Coroutine::CallerType
CallerType: A reference to an object of this class will be passed to the coroutine task.
Definition: coroutine.hh:83
ItsCommand::doInt
void doInt(Yield &yield, CommandEntry &command)
Definition: gic_v3_its.cc:460
Gicv3Its::dmaPort
DataPort dmaPort
Definition: gic_v3_its.hh:97
ItsCommand::vsync
void vsync(Yield &yield, CommandEntry &command)
Definition: gic_v3_its.cc:769
ItsProcess::ItsProcess
ItsProcess(Gicv3Its &_its)
Definition: gic_v3_its.cc:55
ItsCommand::VMOVP
@ VMOVP
Definition: gic_v3_its.hh:454
Gicv3Its::gitsTranslater
uint32_t gitsTranslater
Definition: gic_v3_its.hh:219
Gicv3Its::ittEntrySize
Bitfield< 7, 4 > ittEntrySize
Definition: gic_v3_its.hh:207
ItsProcess::writeDeviceTable
void writeDeviceTable(Yield &yield, uint32_t device_id, DTE dte)
Definition: gic_v3_its.cc:144
Gicv3Its::recvTimingResp
bool recvTimingResp(PacketPtr pkt)
Definition: gic_v3_its.cc:1132
ItsCommand::CommandEntry::eventId
uint32_t eventId
Definition: gic_v3_its.hh:427
Gicv3Its::moveAllPendingState
void moveAllPendingState(Gicv3Redistributor *rd1, Gicv3Redistributor *rd2)
Definition: gic_v3_its.cc:1267
ItsTranslation::translateLPI
std::pair< uint32_t, Gicv3Redistributor * > translateLPI(Yield &yield, uint32_t device_id, uint32_t event_id)
Definition: gic_v3_its.cc:257
ItsCommand::MAPI
@ MAPI
Definition: gic_v3_its.hh:444
Gicv3Its::commandEvent
EventFunctionWrapper commandEvent
Definition: gic_v3_its.hh:324
ItsCommand::commandName
static std::string commandName(uint32_t cmd)
Definition: gic_v3_its.cc:328
ItsProcess::coroutine
std::unique_ptr< Coroutine > coroutine
Definition: gic_v3_its.hh:390
Gicv3Its::tableBases
std::vector< BASER > tableBases
Definition: gic_v3_its.hh:221
ItsCommand::MAPTI
@ MAPTI
Definition: gic_v3_its.hh:445
ItsCommand::INV
@ INV
Definition: gic_v3_its.hh:440
Gicv3Its::DataPort::DataPort
DataPort(const std::string &_name, Gicv3Its &_its)
Definition: gic_v3_its.hh:86
ItsCommand::CommandEntry::type
uint32_t type
Definition: gic_v3_its.hh:425
Gicv3Its::GITS_CWRITER
@ GITS_CWRITER
Definition: gic_v3_its.hh:137
Gicv3Its::itsTranslate
static const uint32_t itsTranslate
Definition: gic_v3_its.hh:108
type
uint8_t type
Definition: inet.hh:421
Gicv3Its::innerCache
Bitfield< 61, 59 > innerCache
Definition: gic_v3_its.hh:176
Gicv3Its::ItsTables
ItsTables
Definition: gic_v3_its.hh:300
ItsCommand::CommandEntry::pintId
uint32_t pintId
Definition: gic_v3_its.hh:428
Gicv3Its::serialize
void serialize(CheckpointOut &cp) const override
Serialize an object.
Definition: gic_v3_its.cc:1034
ItsCommand::SYNC
@ SYNC
Definition: gic_v3_its.hh:448
Tick
uint64_t Tick
Tick count type.
Definition: types.hh:63
Gicv3Its::physAddr
Bitfield< 51, 12 > physAddr
Definition: gic_v3_its.hh:178
ItsCommand::VMAPP
@ VMAPP
Definition: gic_v3_its.hh:451
ItsProcess::doWrite
void doWrite(Yield &yield, Addr addr, void *ptr, size_t size)
Definition: gic_v3_its.cc:110
PortID
int16_t PortID
Port index/ID type, and a symbolic name for an invalid port id.
Definition: types.hh:237
ItsCommand::VSYNC
@ VSYNC
Definition: gic_v3_its.hh:455
ItsProcess::reinit
void reinit()
Definition: gic_v3_its.cc:65
Gicv3Its::runProcessTiming
ItsAction runProcessTiming(ItsProcess *proc, PacketPtr pkt)
Definition: gic_v3_its.cc:1158
ItsCommand::mapi
void mapi(Yield &yield, CommandEntry &command)
Definition: gic_v3_its.cc:582
Gicv3Its::setGIC
void setGIC(Gicv3 *_gic)
Definition: gic_v3_its.cc:800
Gicv3Its::BASER_ESZ
static const uint64_t BASER_ESZ
Definition: gic_v3_its.hh:120
ItsCommand::sync
void sync(Yield &yield, CommandEntry &command)
Definition: gic_v3_its.cc:727
Gicv3Its::devBits
Bitfield< 17, 13 > devBits
Definition: gic_v3_its.hh:205
ItsCommand::movi
void movi(Yield &yield, CommandEntry &command)
Definition: gic_v3_its.cc:666
Gicv3Its::unserialize
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Definition: gic_v3_its.cc:1047
Gicv3Its::DataPort::its
Gicv3Its & its
Definition: gic_v3_its.hh:83
Gicv3Its::BitUnion64
BitUnion64(DTE) Bitfield< 57
Gicv3Its::stalled
Bitfield< 0 > stalled
Definition: gic_v3_its.hh:169
Gicv3Its::checkCommandQueue
void checkCommandQueue()
Definition: gic_v3_its.cc:1078
Gicv3Its::SIZE_16K
@ SIZE_16K
Definition: gic_v3_its.hh:311
ItsCommand::CommandEntry
Definition: gic_v3_its.hh:421
Gicv3Its::SIZE_64K
@ SIZE_64K
Definition: gic_v3_its.hh:312
ItsCommand::collectionOutOfRange
bool collectionOutOfRange(CommandEntry &command) const
Definition: gic_v3_its.hh:533
Gicv3Its::GITS_CTLR
@ GITS_CTLR
Definition: gic_v3_its.hh:133
EventFunctionWrapper
Definition: eventq.hh:1101
ItsCommand::MAPC
@ MAPC
Definition: gic_v3_its.hh:442
Gicv3Its::recvReqRetry
void recvReqRetry()
Definition: gic_v3_its.cc:1115
ItsActionType
ItsActionType
Definition: gic_v3_its.hh:53
ItsProcess::run
ItsAction run(PacketPtr pkt)
Definition: gic_v3_its.cc:78
DrainState
DrainState
Object drain/handover states.
Definition: drain.hh:71
Gicv3Its::BASER_WMASK
static const uint64_t BASER_WMASK
Definition: gic_v3_its.hh:122
Gicv3Its::BitUnion32
BitUnion32(CTLR) Bitfield< 31 > quiescent
Gicv3Its::pageAddress
Addr pageAddress(enum ItsTables table)
Definition: gic_v3_its.cc:1242
Gicv3Its::sizeOutOfRange
bool sizeOutOfRange(uint32_t size) const
Returns TRUE if the value (size) supplied exceeds the maximum allowed by GITS_TYPER....
Definition: gic_v3_its.cc:998
Gicv3Its::BASER_TYPE
static const uint64_t BASER_TYPE
Definition: gic_v3_its.hh:119
Gicv3Its::low
Bitfield< 31, 0 > low
Definition: gic_v3_its.hh:166
cp
Definition: cprintf.cc:40
Gicv3Its::intType
Bitfield< 1 > intType
Definition: gic_v3_its.hh:274
Gicv3Its::idOutOfRange
bool idOutOfRange(uint32_t event_id, uint8_t itt_range) const
Returns TRUE if the eventID supplied has bits above the implemented size or above the itt_range.
Definition: gic_v3_its.cc:984
dma_device.hh
Gicv3Its::itsControl
static const uint32_t itsControl
Definition: gic_v3_its.hh:107
ItsCommand::INVALL
@ INVALL
Definition: gic_v3_its.hh:441
Packet::SenderState
A virtual base opaque structure used to hold state associated with the packet (e.g....
Definition: packet.hh:431
ItsCommand::main
void main(Yield &yield) override
Definition: gic_v3_its.cc:335
AddrRange
The AddrRange class encapsulates an address range, and supports a number of tests to check if two ran...
Definition: addr_range.hh:68
Gicv3Its::gic
Gicv3 * gic
Definition: gic_v3_its.hh:323
ItsCommand::CommandEntry::data
uint32_t data[4]
Definition: gic_v3_its.hh:430
ItsCommand::sizeOutOfRange
bool sizeOutOfRange(CommandEntry &command) const
Definition: gic_v3_its.hh:523
ItsCommand::mapd
void mapd(Yield &yield, CommandEntry &command)
Definition: gic_v3_its.cc:566
Gicv3Its::lpiOutOfRange
bool lpiOutOfRange(uint32_t intid) const
Returns TRUE if the value supplied is larger than that permitted by GICD_TYPER.IDbits or not in the L...
Definition: gic_v3_its.cc:1015
Gicv3Its::pageSize
Bitfield< 9, 8 > pageSize
Definition: gic_v3_its.hh:192
Gicv3Its::vpeid
vpeid
Definition: gic_v3_its.hh:270
Gicv3Its::ittRange
ittRange
Definition: gic_v3_its.hh:264
ItsAction::type
ItsActionType type
Definition: gic_v3_its.hh:62
ItsActionType::SEND_REQ
@ SEND_REQ
Port
Ports are used to interface objects to each other.
Definition: port.hh:56
ItsCommand::CommandEntry::deviceId
uint32_t deviceId
Definition: gic_v3_its.hh:426
ItsProcess::name
const std::string name() const
Returns the Gicv3Its name.
Definition: gic_v3_its.cc:72
ItsCommand::clear
void clear(Yield &yield, CommandEntry &command)
Definition: gic_v3_its.cc:386
ItsCommand::vmapi
void vmapi(Yield &yield, CommandEntry &command)
Definition: gic_v3_its.cc:739
Gicv3Its::GITS_CREADR
@ GITS_CREADR
Definition: gic_v3_its.hh:138
ItsProcess::writeIrqTranslationTable
void writeIrqTranslationTable(Yield &yield, const Addr itt_base, uint32_t event_id, ITTE itte)
Definition: gic_v3_its.cc:155
Gicv3Its
GICv3 ITS module.
Definition: gic_v3_its.hh:74
ItsProcess::doRead
void doRead(Yield &yield, Addr addr, void *ptr, size_t size)
Definition: gic_v3_its.cc:86
Gicv3Its::SIZE_4K
@ SIZE_4K
Definition: gic_v3_its.hh:310
Gicv3Its::BASER_SZ
static const uint64_t BASER_SZ
Definition: gic_v3_its.hh:121
ItsCommand::DispatchTable
std::unordered_map< std::underlying_type< enum CommandType >::type, DispatchEntry > DispatchTable
Definition: gic_v3_its.hh:480
Gicv3Its::rdBase
rdBase
Definition: gic_v3_its.hh:279
Gicv3Its::gitsCwriter
CRDWR gitsCwriter
Definition: gic_v3_its.hh:217
ItsCommand::idOutOfRange
bool idOutOfRange(CommandEntry &command, DTE dte) const
Definition: gic_v3_its.hh:513
Gicv3
Definition: gic_v3.hh:53
Gicv3Its::DataPort::recvTimingResp
bool recvTimingResp(PacketPtr pkt)
Receive a timing response from the peer.
Definition: gic_v3_its.hh:93
ItsActionType::TERMINATE
@ TERMINATE
RequestPort
A RequestPort is a specialisation of a Port, which implements the default protocol for the three diff...
Definition: port.hh:74
ItsCommand::INT
@ INT
Definition: gic_v3_its.hh:439
Gicv3Its::cct
Bitfield< 2 > cct
Definition: gic_v3_its.hh:208
std::pair
STL pair class.
Definition: stl.hh:58
Gicv3Its::EndBitUnion
EndBitUnion(CTLR) BitUnion64(CRDWR) Bitfield< 63
ItsCommand::vmapti
void vmapti(Yield &yield, CommandEntry &command)
Definition: gic_v3_its.cc:751
Gicv3Its::GITS_PIDR2
@ GITS_PIDR2
Definition: gic_v3_its.hh:139
Gicv3Its::cidBits
Bitfield< 35, 32 > cidBits
Definition: gic_v3_its.hh:201
ItsCommand::DispatchEntry::exec
ExecFn exec
Definition: gic_v3_its.hh:476
Gicv3Its::valid
Bitfield< 63 > valid
Definition: gic_v3_its.hh:175
ItsProcess::readDeviceTable
uint64_t readDeviceTable(Yield &yield, uint32_t device_id)
Definition: gic_v3_its.cc:178
m5::Coroutine
This template defines a Coroutine wrapper type with a Boost-like interface.
Definition: coroutine.hh:62
Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
ItsCommand::DispatchEntry::ExecFn
std::function< void(ItsCommand *, Yield &, CommandEntry &)> ExecFn
Definition: gic_v3_its.hh:469
ItsCommand
An ItsCommand is created whenever there is a new command in the command queue.
Definition: gic_v3_its.hh:418
Gicv3Its::GITS_TRANSLATER
@ GITS_TRANSLATER
Definition: gic_v3_its.hh:142
ItsProcess::terminate
void terminate(Yield &yield)
Definition: gic_v3_its.cc:134
ItsCommand::vmovp
void vmovp(Yield &yield, CommandEntry &command)
Definition: gic_v3_its.cc:763
ItsCommand::vmovi
void vmovi(Yield &yield, CommandEntry &command)
Definition: gic_v3_its.cc:757
Gicv3Its::intNum
Bitfield< 15, 2 > intNum
Definition: gic_v3_its.hh:273
Gicv3Its::incrementReadPointer
void incrementReadPointer()
Definition: gic_v3_its.cc:1060
ItsCommand::mapc
void mapc(Yield &yield, CommandEntry &command)
Definition: gic_v3_its.cc:549
Gicv3Its::DEVICE_TABLE
@ DEVICE_TABLE
Definition: gic_v3_its.hh:302
BasicPioDevice::params
const Params * params() const
Definition: io_device.hh:167
ItsCommand::CommandEntry::raw
uint64_t raw[4]
Definition: gic_v3_its.hh:432
ItsCommand::MAPD
@ MAPD
Definition: gic_v3_its.hh:443
Gicv3Its::maxCommands
uint64_t maxCommands() const
Definition: gic_v3_its.cc:1072
Gicv3Its::vmovp
Bitfield< 37 > vmovp
Definition: gic_v3_its.hh:199
Gicv3Its::seis
Bitfield< 18 > seis
Definition: gic_v3_its.hh:204
Gicv3Its::physical
Bitfield< 0 > physical
Definition: gic_v3_its.hh:210
Gicv3Its::GITS_TYPER
@ GITS_TYPER
Definition: gic_v3_its.hh:135
ItsProcess::CTE
Gicv3Its::CTE CTE
Definition: gic_v3_its.hh:350
Gicv3Its::cil
Bitfield< 36 > cil
Definition: gic_v3_its.hh:200
Gicv3Its::BASER_WMASK_UNIMPL
static const uint64_t BASER_WMASK_UNIMPL
Definition: gic_v3_its.hh:124
Gicv3Its::getRedistributor
Gicv3Redistributor * getRedistributor(uint64_t rd_base)
Definition: gic_v3_its.cc:1230
Gicv3Its::drain
DrainState drain() override
Draining is the process of clearing out the states of SimObjects.These are the SimObjects that are pa...
Definition: gic_v3_its.cc:1023
Gicv3Its::GITS_CBASER
@ GITS_CBASER
Definition: gic_v3_its.hh:136
Gicv3Its::ittAddress
Bitfield< 52, 1 > ittAddress
Definition: gic_v3_its.hh:265
ItsProcess::~ItsProcess
virtual ~ItsProcess()
Definition: gic_v3_its.cc:60
ItsAction::pkt
PacketPtr pkt
Definition: gic_v3_its.hh:63
ItsProcess::readIrqTranslationTable
uint64_t readIrqTranslationTable(Yield &yield, const Addr itt_base, uint32_t event_id)
Definition: gic_v3_its.cc:191
Gicv3Its::indirect
Bitfield< 62 > indirect
Definition: gic_v3_its.hh:185
ItsProcess::writeIrqCollectionTable
void writeIrqCollectionTable(Yield &yield, uint32_t collection_id, CTE cte)
Definition: gic_v3_its.cc:166
Gicv3Its::high
high
Definition: gic_v3_its.hh:165
ItsCommand::discard
void discard(Yield &yield, CommandEntry &command)
Definition: gic_v3_its.cc:421
ItsCommand::vinvall
void vinvall(Yield &yield, CommandEntry &command)
Definition: gic_v3_its.cc:733
ItsProcess::DTE
Gicv3Its::DTE DTE
Definition: gic_v3_its.hh:348
ItsCommand::VINVALL
@ VINVALL
Definition: gic_v3_its.hh:449
Gicv3Its::type
Bitfield< 58, 56 > type
Definition: gic_v3_its.hh:187
ItsCommand::DispatchEntry
Dispatch entry is a metadata struct which contains information about the command (like the name) and ...
Definition: gic_v3_its.hh:467
Gicv3Its::pendingCommands
bool pendingCommands
Definition: gic_v3_its.hh:326
ItsCommand::inv
void inv(Yield &yield, CommandEntry &command)
Definition: gic_v3_its.cc:495
Gicv3Its::DataPort::recvReqRetry
void recvReqRetry()
Called by the peer if sendTimingReq was called on this peer (causing recvTimingReq to be called on th...
Definition: gic_v3_its.hh:94
ItsProcess::main
virtual void main(Yield &yield)=0
std
Overload hash function for BasicBlockRange type.
Definition: vec_reg.hh:587
X86ISA::vector
Bitfield< 15, 8 > vector
Definition: intmessage.hh:44
ItsCommand::ItsCommand
ItsCommand(Gicv3Its &_its)
Definition: gic_v3_its.cc:310
ItsCommand::invall
void invall(Yield &yield, CommandEntry &command)
Definition: gic_v3_its.cc:529
Gicv3Its::offset
Bitfield< 19, 5 > offset
Definition: gic_v3_its.hh:167
Gicv3Its::itsNumber
Bitfield< 7, 4 > itsNumber
Definition: gic_v3_its.hh:158
Gicv3Its::write
Tick write(PacketPtr pkt) override
Pure virtual function that the device must implement.
Definition: gic_v3_its.cc:891
Packet
A Packet is used to encapsulate a transfer between two objects in the memory system (e....
Definition: packet.hh:257
BasicPioDevice
Definition: io_device.hh:150
Gicv3Its::getRedistributor
Gicv3Redistributor * getRedistributor(CTE cte)
Definition: gic_v3_its.hh:291
Gicv3Its::gitsCreadr
CRDWR gitsCreadr
Definition: gic_v3_its.hh:216
Gicv3Its::intNumHyp
Bitfield< 29, 16 > intNumHyp
Definition: gic_v3_its.hh:272
addr
ip6_addr_t addr
Definition: inet.hh:423
Gicv3Its::runProcess
ItsAction runProcess(ItsProcess *proc, PacketPtr pkt)
Definition: gic_v3_its.cc:1146
Gicv3Its::pta
Bitfield< 19 > pta
Definition: gic_v3_its.hh:203
coroutine.hh
Gicv3Its::CTLR_QUIESCENT
static const uint32_t CTLR_QUIESCENT
Definition: gic_v3_its.hh:128
ItsCommand::mapti
void mapti(Yield &yield, CommandEntry &command)
Definition: gic_v3_its.cc:616
Gicv3Its::translate
void translate(PacketPtr pkt)
Definition: gic_v3_its.cc:1221
ItsCommand::DISCARD
@ DISCARD
Definition: gic_v3_its.hh:438
ItsCommand::VMAPI
@ VMAPI
Definition: gic_v3_its.hh:450
ItsAction::delay
Tick delay
Definition: gic_v3_its.hh:64
CheckpointOut
std::ostream CheckpointOut
Definition: serialize.hh:63
Gicv3Its::COLLECTION_TABLE
@ COLLECTION_TABLE
Definition: gic_v3_its.hh:305
ItsCommand::CLEAR
@ CLEAR
Definition: gic_v3_its.hh:437
Gicv3Its::DataPort
Definition: gic_v3_its.hh:80
ItsCommand::DispatchEntry::DispatchEntry
DispatchEntry(std::string _name, ExecFn _exec)
Definition: gic_v3_its.hh:471
Gicv3Its::PageSize
PageSize
Definition: gic_v3_its.hh:308
ItsTranslation::~ItsTranslation
~ItsTranslation()
Definition: gic_v3_its.cc:224
Gicv3Its::DataPort::~DataPort
virtual ~DataPort()
Definition: gic_v3_its.hh:91
ItsCommand::VMAPTI
@ VMAPTI
Definition: gic_v3_its.hh:452
ItsTranslation
An ItsTranslation is created whenever a peripheral writes a message in GITS_TRANSLATER (MSI).
Definition: gic_v3_its.hh:399
std::list< AddrRange >
Gicv3Its::icid
Bitfield< 45, 30 > icid
Definition: gic_v3_its.hh:271
ItsTranslation::main
void main(Yield &yield) override
Definition: gic_v3_its.cc:233
Gicv3Its::enabled
Bitfield< 0 > enabled
Definition: gic_v3_its.hh:160
Gicv3Its::outerCache
Bitfield< 55, 53 > outerCache
Definition: gic_v3_its.hh:177
ItsCommand::processCommand
void processCommand(Yield &yield, CommandEntry &command)
Definition: gic_v3_its.cc:373
ItsCommand::CommandType
CommandType
Definition: gic_v3_its.hh:435
ItsActionType::INITIAL_NOP
@ INITIAL_NOP
CheckpointIn
Definition: serialize.hh:67
ItsCommand::VMOVI
@ VMOVI
Definition: gic_v3_its.hh:453
Gicv3Its::packetsToRetry
std::queue< ItsAction > packetsToRetry
Definition: gic_v3_its.hh:321
ItsCommand::cmdDispatcher
static DispatchTable cmdDispatcher
Definition: gic_v3_its.hh:482
ItsProcess::its
Gicv3Its & its
Definition: gic_v3_its.hh:387
Gicv3Its::imDe
Bitfield< 1 > imDe
Definition: gic_v3_its.hh:159
ItsProcess::readIrqCollectionTable
uint64_t readIrqCollectionTable(Yield &yield, uint32_t collection_id)
Definition: gic_v3_its.cc:204
Gicv3Its::pendingTranslations
uint32_t pendingTranslations
Definition: gic_v3_its.hh:327
ItsCommand::~ItsCommand
~ItsCommand()
Definition: gic_v3_its.cc:319
ItsCommand::readCommand
void readCommand(Yield &yield, CommandEntry &command)
Definition: gic_v3_its.cc:358
Gicv3Redistributor
Definition: gic_v3_redistributor.hh:52
Gicv3Its::runProcessAtomic
ItsAction runProcessAtomic(ItsProcess *proc, PacketPtr pkt)
Definition: gic_v3_its.cc:1189
ItsAction
Definition: gic_v3_its.hh:60
ItsTranslation::ItsTranslation
ItsTranslation(Gicv3Its &_its)
Definition: gic_v3_its.cc:216
ItsCommand::MOVI
@ MOVI
Definition: gic_v3_its.hh:447
Gicv3Its::NUM_BASER_REGS
static const uint32_t NUM_BASER_REGS
Definition: gic_v3_its.hh:113
Gicv3Its::shareability
Bitfield< 11, 10 > shareability
Definition: gic_v3_its.hh:179
Gicv3Its::gitsCbaser
CBASER gitsCbaser
Definition: gic_v3_its.hh:215
Gicv3Its::BASER_INDIRECT
static const uint64_t BASER_INDIRECT
Definition: gic_v3_its.hh:118
Gicv3Its::VPE_TABLE
@ VPE_TABLE
Definition: gic_v3_its.hh:303
ItsProcess
ItsProcess is a base coroutine wrapper which is spawned by the Gicv3Its module when the latter needs ...
Definition: gic_v3_its.hh:345
bits
T bits(T val, int first, int last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it.
Definition: bitfield.hh:75

Generated on Wed Sep 30 2020 14:02:10 for gem5 by doxygen 1.8.17